feat: add last9 log drain (#42391)

- adds last9 log drain to the UI (flagged)
- updates API Types

## To test
- go to last9
- create project
- select oltp
- grab creds
- go to log drains
- create last9 log drain
- paste creds
- after a few minutes last9 should start showing supabase logs like this
<img width="2042" height="1632" alt="CleanShot 2026-02-05 at 13 17
19@2x"
src="https://github.com/user-attachments/assets/9abc34f7-58ea-431c-9b56-5448fc9e76fd"
/>

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Last9 observability integration: new log drain destination with region
selection, credentials UI, feature-flag gating, and icon
  * Just-in-time (JIT) access configuration at the project level
  * Plan features API to retrieve plan-specific feature configurations

* **Improvements**
  * Backend/provider support expanded to include Last9 and OTLP
  * Telemetry events updated to include Last9 and OTLP destinations
  * Credit redemption response updated; preview endpoint removed
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Jordi Enric authored and GitHub committed 2026-02-06 15:17:07 +01:00
1 parent 1be4ef5d27
commit e8162fee08
11 files changed
+409 -120

No files matched your search

@@ -10,22 +10,23 @@ import { useForm } from 'react-hook-form'
import { toast } from 'sonner'
import {
Button,
cn,
Form_Shadcn_,
FormControl_Shadcn_,
FormField_Shadcn_,
FormItem_Shadcn_,
FormLabel_Shadcn_,
FormMessage_Shadcn_,
Form_Shadcn_,
Input_Shadcn_,
RadioGroupCard,
RadioGroupCardItem,
Select_Shadcn_,
SelectContent_Shadcn_,
SelectGroup_Shadcn_,
SelectItem_Shadcn_,
SelectLabel_Shadcn_,
SelectTrigger_Shadcn_,
SelectValue_Shadcn_,
Select_Shadcn_,
Sheet,
SheetContent,
SheetFooter,
@@ -33,14 +34,18 @@ import {
SheetSection,
SheetTitle,
Switch,
cn,
} from 'ui'
import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout'
import { InfoTooltip } from 'ui-patterns/info-tooltip'
import { z } from 'zod'
import { urlRegex } from '../Auth/Auth.constants'
import { DATADOG_REGIONS, LOG_DRAIN_TYPES, LogDrainType } from './LogDrains.constants'
import {
DATADOG_REGIONS,
LAST9_REGIONS,
LOG_DRAIN_TYPES,
LogDrainType,
} from './LogDrains.constants'
const FORM_ID = 'log-drain-destination-form'
@@ -112,6 +117,15 @@ const formUnion = z.discriminatedUnion('type', [
api_token: z.string().min(1, { message: 'API token is required' }),
dataset_name: z.string().min(1, { message: 'Dataset name is required' }),
}),
z.object({
type: z.literal('last9'),
region: z.string().min(1, { message: 'Region is required' }),
username: z.string().min(1, { message: 'Username is required' }),
password: z.string().min(1, { message: 'Password is required' }),
}),
z.object({
type: z.literal('otlp'),
}),
])
const formSchema = z
@@ -183,6 +197,7 @@ export function LogDrainDestinationSheetForm({
const sentryEnabled = useFlag('SentryLogDrain')
const s3Enabled = useFlag('S3logdrain')
const axiomEnabled = useFlag('axiomLogDrain')
const last9Enabled = useFlag('Last9LogDrain')
const { ref } = useParams()
const { data: logDrains } = useLogDrainsQuery({
@@ -328,9 +343,7 @@ export function LogDrainDestinationSheetForm({
<Select_Shadcn_
defaultValue={defaultType}
value={form.getValues('type')}
onValueChange={(v: Exclude<LogDrainType, 'axiom'>) =>
form.setValue('type', v)
}
onValueChange={(v: LogDrainType) => form.setValue('type', v)}
>
<SelectTrigger_Shadcn_>
{LOG_DRAIN_TYPES.find((t) => t.value === type)?.name}
@@ -340,6 +353,7 @@ export function LogDrainDestinationSheetForm({
if (t.value === 'sentry') return sentryEnabled
if (t.value === 's3') return s3Enabled
if (t.value === 'axiom') return axiomEnabled
if (t.value === 'last9') return last9Enabled
return true
}).map((type) => (
<SelectItem_Shadcn_
@@ -592,6 +606,60 @@ export function LogDrainDestinationSheetForm({
/>
</div>
)}
{type === 'last9' && (
<div className="grid gap-4 px-content">
<FormField_Shadcn_
name="region"
control={form.control}
render={({ field }) => (
<FormItemLayout
layout="horizontal"
label={'Region'}
description={
<p>
The Last9 region to send logs to. Credentials can be obtained from the
Last9 OTEL integration panel.
</p>
}
>
<FormControl_Shadcn_>
<Select_Shadcn_ value={field.value} onValueChange={field.onChange}>
<SelectTrigger_Shadcn_ className="col-span-3">
<SelectValue_Shadcn_ placeholder="Select a region" />
</SelectTrigger_Shadcn_>
<SelectContent_Shadcn_>
<SelectGroup_Shadcn_>
<SelectLabel_Shadcn_>Region</SelectLabel_Shadcn_>
{LAST9_REGIONS.map((reg) => (
<SelectItem_Shadcn_ key={reg.value} value={reg.value}>
{reg.label}
</SelectItem_Shadcn_>
))}
</SelectGroup_Shadcn_>
</SelectContent_Shadcn_>
</Select_Shadcn_>
</FormControl_Shadcn_>
</FormItemLayout>
)}
/>
<LogDrainFormItem
type="text"
value="username"
label="Username"
placeholder="username"
formControl={form.control}
description="Username for authentication from Last9 OTEL integration."
/>
<LogDrainFormItem
type="password"
value="password"
label="Password"
placeholder="••••••••••••••••"
formControl={form.control}
description="Password for authentication from Last9 OTEL integration."
/>
</div>
)}
<FormMessage_Shadcn_ />
</div>
</form>
@@ -1,6 +1,5 @@
import { components } from 'api-types'
import { Datadog, Grafana, Sentry } from 'icons'
import { Axiom } from 'icons'
import { Axiom, Datadog, Grafana, Last9, Sentry } from 'icons'
import { BracesIcon, Cloud } from 'lucide-react'
const iconProps = {
@@ -51,6 +50,12 @@ export const LOG_DRAIN_TYPES = [
'Axiom is a data platform designed to efficiently collect, store, and analyze event and telemetry data at massive scale.',
icon: <Axiom {...iconProps} fill="currentColor" strokeWidth={0} />,
},
{
value: 'last9',
name: 'Last9',
description: 'Last9 is an observability platform for monitoring and telemetry data',
icon: <Last9 {...iconProps} fill="currentColor" strokeWidth={0} />,
},
] as const
export const LOG_DRAIN_SOURCE_VALUES = LOG_DRAIN_TYPES.map((source) => source.value)
@@ -86,6 +91,17 @@ export const DATADOG_REGIONS = [
},
] as const
export const LAST9_REGIONS = [
{
label: 'US West 1',
value: 'US-WEST-1',
},
{
label: 'AP South 1',
value: 'AP-SOUTH-1',
},
] as const
export type LogDrainDatadogConfig = {
api_key: string
region: string
@@ -5,11 +5,12 @@ import { LogDrainData, useLogDrainsQuery } from 'data/log-drains/log-drains-quer
import { useCheckEntitlements } from 'hooks/misc/useCheckEntitlements'
import { useTrack } from 'lib/telemetry/track'
import { MoreHorizontal, Pencil, TrashIcon } from 'lucide-react'
import React, { cloneElement, useState } from 'react'
import { cloneElement, useState } from 'react'
import { toast } from 'sonner'
import {
Button,
Card,
cn,
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
@@ -20,7 +21,6 @@ import {
TableHead,
TableHeader,
TableRow,
cn,
} from 'ui'
import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal'
import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader'
@@ -58,6 +58,7 @@ export function LogDrains({
const sentryEnabled = useFlag('SentryLogDrain')
const s3Enabled = useFlag('S3logdrain')
const axiomEnabled = useFlag('axiomLogDrain')
const last9Enabled = useFlag('Last9LogDrain')
const hasLogDrains = !!logDrains?.length
const { mutate: deleteLogDrain } = useDeleteLogDrainMutation({
@@ -96,6 +97,7 @@ export function LogDrains({
if (t.value === 'sentry') return sentryEnabled
if (t.value === 's3') return s3Enabled
if (t.value === 'axiom') return axiomEnabled
if (t.value === 'last9') return last9Enabled
return true
}).map((src) => (
<LogDrainsCard
@@ -1,6 +1,5 @@
import { PermissionAction } from '@supabase/shared-types/out/constants'
import { IS_PLATFORM, useParams } from 'common'
import { useFlag } from 'common'
import { IS_PLATFORM, useFlag, useParams } from 'common'
import { LogDrainDestinationSheetForm } from 'components/interfaces/LogDrains/LogDrainDestinationSheetForm'
import { LogDrains } from 'components/interfaces/LogDrains/LogDrains'
import { LOG_DRAIN_TYPES, LogDrainType } from 'components/interfaces/LogDrains/LogDrains.constants'
@@ -19,8 +18,7 @@ import { useCheckEntitlements } from 'hooks/misc/useCheckEntitlements'
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
import { DOCS_URL } from 'lib/constants'
import { ChevronDown } from 'lucide-react'
import { useState } from 'react'
import { cloneElement } from 'react'
import { cloneElement, useState } from 'react'
import { toast } from 'sonner'
import type { NextPageWithLayout } from 'types'
import {
@@ -54,6 +52,7 @@ const LogDrainsSettings: NextPageWithLayout = () => {
const sentryEnabled = useFlag('SentryLogDrain')
const s3Enabled = useFlag('S3logdrain')
const axiomEnabled = useFlag('axiomLogDrain')
const last9Enabled = useFlag('Last9LogDrain')
const { data: logDrains } = useLogDrainsQuery(
{ ref },
@@ -111,8 +110,8 @@ const LogDrainsSettings: NextPageWithLayout = () => {
setOpen(v)
}}
defaultValues={{
type: selectedLogDrain?.type || 'webhook',
...selectedLogDrain,
type: selectedLogDrain?.type ? selectedLogDrain.type : 'webhook',
}}
isLoading={isLoading}
onSubmit={({ name, description, type, ...values }) => {
@@ -220,6 +219,7 @@ const LogDrainsSettings: NextPageWithLayout = () => {
if (t.value === 'sentry') return sentryEnabled
if (t.value === 's3') return s3Enabled
if (t.value === 'axiom') return axiomEnabled
if (t.value === 'last9') return last9Enabled
return true
}).map((drainType) => (
<DropdownMenuItem
+126 -21
View File
@@ -1482,6 +1482,24 @@ export interface paths {
patch?: never
trace?: never
}
'/v1/projects/{ref}/jit-access': {
parameters: {
query?: never
header?: never
path?: never
cookie?: never
}
/** [Beta] Get project's just-in-time access configuration. */
get: operations['v1-get-jit-access-config']
/** [Beta] Update project's just-in-time access configuration. */
put: operations['v1-update-jit-access-config']
post?: never
delete?: never
options?: never
head?: never
patch?: never
trace?: never
}
'/v1/projects/{ref}/network-bans': {
parameters: {
query?: never
@@ -2876,6 +2894,10 @@ export interface components {
}
updated_at?: string
}
JitAccessRequestRequest: {
/** @enum {string} */
state: 'enabled' | 'disabled' | 'unavailable'
}
JitAccessResponse: {
/** Format: uuid */
user_id: string
@@ -5285,27 +5307,6 @@ export interface operations {
'application/json': components['schemas']['V1OrganizationMemberResponse'][]
}
}
/** @description Unauthorized */
401: {
headers: {
[name: string]: unknown
}
content?: never
}
/** @description Forbidden action */
403: {
headers: {
[name: string]: unknown
}
content?: never
}
/** @description Rate limit exceeded */
429: {
headers: {
[name: string]: unknown
}
content?: never
}
}
}
'v1-get-organization-project-claim': {
@@ -10419,6 +10420,110 @@ export interface operations {
}
}
}
'v1-get-jit-access-config': {
parameters: {
query?: never
header?: never
path: {
/** @description Project ref */
ref: string
}
cookie?: never
}
requestBody?: never
responses: {
200: {
headers: {
[name: string]: unknown
}
content: {
'application/json': components['schemas']['JitAccessResponse']
}
}
/** @description Unauthorized */
401: {
headers: {
[name: string]: unknown
}
content?: never
}
/** @description Forbidden action */
403: {
headers: {
[name: string]: unknown
}
content?: never
}
/** @description Rate limit exceeded */
429: {
headers: {
[name: string]: unknown
}
content?: never
}
/** @description Failed to retrieve project's JIT access config */
500: {
headers: {
[name: string]: unknown
}
content?: never
}
}
}
'v1-update-jit-access-config': {
parameters: {
query?: never
header?: never
path: {
/** @description Project ref */
ref: string
}
cookie?: never
}
requestBody: {
content: {
'application/json': components['schemas']['JitAccessRequestRequest']
}
}
responses: {
200: {
headers: {
[name: string]: unknown
}
content: {
'application/json': components['schemas']['JitAccessResponse']
}
}
/** @description Unauthorized */
401: {
headers: {
[name: string]: unknown
}
content?: never
}
/** @description Forbidden action */
403: {
headers: {
[name: string]: unknown
}
content?: never
}
/** @description Rate limit exceeded */
429: {
headers: {
[name: string]: unknown
}
content?: never
}
/** @description Failed to update project's just-in-time access configuration. */
500: {
headers: {
[name: string]: unknown
}
content?: never
}
}
}
'v1-delete-network-bans': {
parameters: {
query?: never
+128 -83
View File
@@ -951,23 +951,6 @@ export interface paths {
patch?: never
trace?: never
}
'/platform/organizations/{slug}/billing/credits/preview-code': {
parameters: {
query?: never
header?: never
path?: never
cookie?: never
}
get?: never
put?: never
/** Previews a code redemption */
post: operations['OrgCreditsController_previewCode']
delete?: never
options?: never
head?: never
patch?: never
trace?: never
}
'/platform/organizations/{slug}/billing/credits/redeem': {
parameters: {
query?: never
@@ -1946,6 +1929,26 @@ export interface paths {
patch?: never
trace?: never
}
'/platform/plans/features': {
parameters: {
query?: never
header?: never
path?: never
cookie?: never
}
/**
* Get feature configurations for all plans
* @description Returns feature configurations for customer-facing plans (Free, Pro, Team, Enterprise). Use the featureKey query parameter to get a specific feature, or omit it to get all features.
*/
get: operations['PlanFeaturesController_getPlanFeatures']
put?: never
post?: never
delete?: never
options?: never
head?: never
patch?: never
trace?: never
}
'/platform/profile': {
parameters: {
query?: never
@@ -4849,6 +4852,8 @@ export interface components {
| 'sentry'
| 's3'
| 'axiom'
| 'last9'
| 'otlp'
}
CreateBucketIndexBody: {
/** @enum {string} */
@@ -5518,8 +5523,12 @@ export interface components {
| 'auth_signing_keys_write'
| 'backups_read'
| 'backups_write'
| 'branching_development_create'
| 'branching_development_delete'
| 'branching_development_read'
| 'branching_development_write'
| 'branching_production_create'
| 'branching_production_delete'
| 'branching_production_read'
| 'branching_production_write'
| 'custom_domain_read'
@@ -5552,6 +5561,8 @@ export interface components {
| 'edge_functions_secrets_write'
| 'infra_add_ons_read'
| 'infra_add_ons_write'
| 'infra_disk_config_read'
| 'infra_disk_config_write'
| 'infra_read_replicas_read'
| 'infra_read_replicas_write'
| 'project_snippets_read'
@@ -5758,12 +5769,6 @@ export interface components {
source: string
teamId?: string
}
CreditRedemptionPreviewResponse: {
amount_cents: number
/** Format: date-time */
credits_expire_at: string | null
validity_days: number | null
}
CreditRedemptionRequest: {
code: string
}
@@ -5771,7 +5776,7 @@ export interface components {
amount_cents: number
/** Format: date-time */
credits_expire_at: string | null
validity_days: number | null
credits_expiry_days: number | null
}
CreditsTopUpRequest: {
address?: {
@@ -6999,6 +7004,8 @@ export interface components {
| 'sentry'
| 's3'
| 'axiom'
| 'last9'
| 'otlp'
user_id: number
}
LFEndpoint: {
@@ -7734,6 +7741,28 @@ export interface components {
PgbouncerStatusResponse: {
active: boolean
}
PlanFeaturesResponse: {
[key: string]: {
[key: string]: {
config:
| {
enabled: boolean
}
| {
enabled: boolean
unit: string
unlimited: boolean
value: number
}
| {
enabled: boolean
set: string[]
}
/** @enum {string} */
type: 'boolean' | 'numeric' | 'set'
}
}
}
PlansResponse: {
plans: {
/** @enum {string} */
@@ -9651,6 +9680,8 @@ export interface components {
| 'sentry'
| 's3'
| 'axiom'
| 'last9'
| 'otlp'
}
UpdateCollectionBody: {
name: string
@@ -13372,61 +13403,6 @@ export interface operations {
}
}
}
OrgCreditsController_previewCode: {
parameters: {
query?: never
header?: never
path: {
/** @description Organization slug */
slug: string
}
cookie?: never
}
requestBody: {
content: {
'application/json': components['schemas']['CreditRedemptionRequest']
}
}
responses: {
/** @description Credit code details. */
200: {
headers: {
[name: string]: unknown
}
content: {
'application/json': components['schemas']['CreditRedemptionPreviewResponse']
}
}
/** @description Unauthorized */
401: {
headers: {
[name: string]: unknown
}
content?: never
}
/** @description Forbidden action */
403: {
headers: {
[name: string]: unknown
}
content?: never
}
/** @description Rate limit exceeded */
429: {
headers: {
[name: string]: unknown
}
content?: never
}
/** @description Failed to preview redemption code */
500: {
headers: {
[name: string]: unknown
}
content?: never
}
}
}
OrgCreditsController_redeemCode: {
parameters: {
query?: never
@@ -13444,7 +13420,7 @@ export interface operations {
}
responses: {
/** @description Credit code redeemed successfully. */
200: {
201: {
headers: {
[name: string]: unknown
}
@@ -17063,6 +17039,72 @@ export interface operations {
}
}
}
PlanFeaturesController_getPlanFeatures: {
parameters: {
query?: {
featureKey?:
| 'instances.compute_update_available_sizes'
| 'instances.read_replicas'
| 'instances.disk_modifications'
| 'replication.etl'
| 'storage.max_file_size'
| 'storage.image_transformations'
| 'storage.vector_buckets'
| 'storage.iceberg_catalog'
| 'security.audit_logs_days'
| 'security.questionnaire'
| 'security.soc2_report'
| 'security.private_link'
| 'security.enforce_mfa'
| 'log.retention_days'
| 'custom_domain'
| 'vanity_subdomain'
| 'ipv4'
| 'pitr.available_variants'
| 'log_drains'
| 'branching_limit'
| 'branching_persistent'
| 'auth.mfa_phone'
| 'auth.mfa_web_authn'
| 'auth.mfa_enhanced_security'
| 'auth.hooks'
| 'auth.platform.sso'
| 'auth.custom_jwt_template'
| 'auth.saml_2'
| 'auth.user_sessions'
| 'auth.leaked_password_protection'
| 'auth.advanced_auth_settings'
| 'backup.retention_days'
| 'function.max_count'
| 'function.size_limit_mb'
| 'realtime.max_concurrent_users'
| 'realtime.max_events_per_second'
| 'realtime.max_joins_per_second'
| 'realtime.max_channels_per_client'
| 'realtime.max_bytes_per_second'
| 'realtime.max_presence_events_per_second'
| 'realtime.max_payload_size_in_kb'
| 'project_scoped_roles'
| 'security.member_roles'
| 'project_pausing'
| 'project_cloning'
}
header?: never
path?: never
cookie?: never
}
requestBody?: never
responses: {
200: {
headers: {
[name: string]: unknown
}
content: {
'application/json': components['schemas']['PlanFeaturesResponse']
}
}
}
}
ProfileController_getProfile: {
parameters: {
query?: never
@@ -18241,7 +18283,7 @@ export interface operations {
path: {
/** @description Project ref */
ref: string
/** @description Log drains token */
/** @description Log drains identifier */
token: string
}
cookie?: never
@@ -18297,7 +18339,7 @@ export interface operations {
path: {
/** @description Project ref */
ref: string
/** @description Log drains token */
/** @description Log drains identifier */
token: string
}
cookie?: never
@@ -26230,7 +26272,10 @@ export interface operations {
}
TelemetryFeatureFlagsController_callFeatureFlag: {
parameters: {
query?: never
query?: {
organization_slug?: string
project_ref?: string
}
header?: never
path?: never
cookie?: never
+4
View File
@@ -2367,6 +2367,8 @@ export interface LogDrainSaveButtonClickedEvent {
| 'sentry'
| 's3'
| 'axiom'
| 'last9'
| 'otlp'
}
groups: TelemetryGroups
}
@@ -2395,6 +2397,8 @@ export interface LogDrainConfirmButtonSubmittedEvent {
| 'sentry'
| 's3'
| 'axiom'
| 'last9'
| 'otlp'
}
groups: TelemetryGroups
}
+10
View File
@@ -184,6 +184,16 @@ export const Index: Record<string, any> = [
svg: "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"1\">\n <path\n d=\"M17.2661 3.23254V10.7325M13.5161 6.98291L21.0161 6.98291M11.0391 16.9508C11.0391 19.1752 9.23585 20.9784 7.01147 20.9784C4.7871 20.9784 2.98389 19.1752 2.98389 16.9508C2.98389 14.7264 4.7871 12.9232 7.01147 12.9232C9.23585 12.9232 11.0391 14.7264 11.0391 16.9508ZM21.0161 19.8568V14.3568C21.0161 13.8045 20.5684 13.3568 20.0161 13.3568H14.5161C13.9638 13.3568 13.5161 13.8045 13.5161 14.3568V19.8568C13.5161 20.4091 13.9638 20.8568 14.5161 20.8568H20.0161C20.5684 20.8568 21.0161 20.4091 21.0161 19.8568ZM4.26221 10.7325H9.76221C10.3145 10.7325 10.7622 10.2848 10.7622 9.73254V4.23254C10.7622 3.68026 10.3145 3.23254 9.76221 3.23254H4.26221C3.70992 3.23254 3.26221 3.68026 3.26221 4.23254V9.73254C3.26221 10.2848 3.70992 10.7325 4.26221 10.7325Z\" />\n</svg>",
jsx: "import { Integrations } from \"icons\"\n <Integrations/>\n "
},
{
name: "last9",
componentName: "Last9",
deprecated: false,
raw: "import createSupabaseIcon from '../createSupabaseIcon';\n\n/**\n * @component @name Last9\n * @description Supabase SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIzLjk0MzEgMTMuMTczN0wyMi43NDg3IDEzLjA1NzVDMjIuNzgyNiAxMi43MDkgMjIuOCAxMi4zNTUyIDIyLjggMTEuOTk3MUMyMi44IDExLjYzODkgMjIuNzgyNiAxMS4yODUyIDIyLjc0ODcgMTAuOTM2NkwyMy45NDMxIDEwLjgyMDRDMjMuOTgwNyAxMS4yMDc1IDI0IDExLjYgMjQgMTEuOTk3MUMyNCAxMi4zOTQxIDIzLjk4MDcgMTIuNzg2NiAyMy45NDMxIDEzLjE3MzdaTTIzLjQ4NjIgOC41MTI1TDIyLjMzNzggOC44NjA0QzIyLjEzMSA4LjE3ODA3IDIxLjg1ODUgNy41MjQxMyAyMS41MjczIDYuOTA1ODhMMjIuNTg1MiA2LjMzOTNDMjIuOTUzMiA3LjAyNjQyIDIzLjI1NjMgNy43NTM1NiAyMy40ODYyIDguNTEyNVpNMjEuMjc2NSA0LjM4NDIzTDIwLjM0OTMgNS4xNDYwM0MxOS45IDQuNTk5MTMgMTkuMzk4IDQuMDk3MTEgMTguODUxIDMuNjQ3NzdMMTkuNjEyOSAyLjcyMDU5QzIwLjIyMDEgMy4yMTk1NCAyMC43Nzc1IDMuNzY5NiAyMS4yNzY1IDQuMzg0MjNaTTE3LjY1NzcgMS40MTE4OEwxNy4wOTEyIDIuNDY5N0MxNi40NzI5IDIuMTM4NTcgMTUuODE5IDEuODY2MDEgMTUuMTM2NiAxLjY1OTI4TDE1LjQ4NDYgMC41MTA4MjlDMTYuMjQzNSAwLjc0MDc2IDE2Ljk3MDYgMS4wNDM4NCAxNy42NTc3IDEuNDExODhaTTEzLjE3NjcgMC4wNTQwMjYyTDEzLjA2MDQgMS4yNDgzOUMxMi43MTE5IDEuMjE0NDYgMTIuMzU4MSAxLjE5NzA3IDEyIDEuMTk3MDdDMTEuNjQxOSAxLjE5NzA3IDExLjI4ODEgMS4yMTQ0NiAxMC45Mzk2IDEuMjQ4MzlMMTAuODIzMyAwLjA1NDAyNjNDMTEuMjEwNCAwLjAxNjM1MDcgMTEuNjAzIC0wLjAwMjkyOTY5IDEyIC0wLjAwMjkyOTY5QzEyLjM5NyAtMC4wMDI5Mjk2OSAxMi43ODk1IDAuMDE2MzUwNyAxMy4xNzY3IDAuMDU0MDI2MlpNOC41MTUzOCAwLjUxMDgyOUw4Ljg2MzMyIDEuNjU5MjhDOC4xODEgMS44NjYwMSA3LjUyNzA2IDIuMTM4NTcgNi45MDg4MiAyLjQ2OTdMNi4zNDIyNCAxLjQxMTg4QzcuMDI5MzYgMS4wNDM4NCA3Ljc1NjUgMC43NDA3NiA4LjUxNTM4IDAuNTEwODI5Wk00LjM4NzE2IDIuNzIwNTlMNS4xNDg5NSAzLjY0Nzc3QzQuNjAyMDcgNC4wOTcxMSA0LjEwMDA0IDQuNTk5MTMgMy42NTA3IDUuMTQ2MDNMMi43MjM1MiA0LjM4NDIzQzMuMjIyNDcgMy43Njk2IDMuNzcyNTMgMy4yMTk1NCA0LjM4NzE2IDIuNzIwNTlaTTEuNDE0ODEgNi4zMzkzTDIuNDcyNjMgNi45MDU4OEMyLjE0MTUxIDcuNTI0MTMgMS44Njg5NSA4LjE3ODA3IDEuNjYyMiA4Ljg2MDRMMC41MTM3OTMgOC41MTI1QzAuNzQzNjg4IDcuNzUzNTYgMS4wNDY3NyA3LjAyNjQyIDEuNDE0ODEgNi4zMzkzWk0wLjA1Njk1NTkgMTAuODIwNEMwLjAxOTI4MDMgMTEuMjA3NSAwIDExLjYgMCAxMS45OTcxQzAgMTIuMzk0MSAwLjAxOTI4MDQgMTIuNzg2NiAwLjA1Njk1NiAxMy4xNzM3TDEuMjUxMzEgMTMuMDU3NUMxLjIxNzM5IDEyLjcwOSAxLjIgMTIuMzU1MiAxLjIgMTEuOTk3MUMxLjIgMTEuNjM4OSAxLjIxNzM5IDExLjI4NTIgMS4yNTEzMSAxMC45MzY2TDAuMDU2OTU1OSAxMC44MjA0Wk0wLjUxMzc5NCAxNS40ODE3TDEuNjYyMiAxNS4xMzM3QzEuODY4OTUgMTUuODE2IDIuMTQxNTEgMTYuNDY5OSAyLjQ3MjYzIDE3LjA4ODJMMS40MTQ4MSAxNy42NTQ3QzEuMDQ2NzcgMTYuOTY3NiAwLjc0MzY4OCAxNi4yNDA1IDAuNTEzNzk0IDE1LjQ4MTdaTTIuNzIzNTIgMTkuNjA5OEwzLjY1MDcgMTguODQ4QzQuMTAwMDQgMTkuMzk0OSA0LjYwMjA3IDE5Ljg5NjkgNS4xNDg5NSAyMC4zNDYzTDQuMzg3MTYgMjEuMjczNUMzLjc3MjUzIDIwLjc3NDUgMy4yMjI0NyAyMC4yMjQ1IDIuNzIzNTIgMTkuNjA5OFpNNi4zNDIyNCAyMi41ODIxTDYuOTA4ODIgMjEuNTI0M0M3LjUyNzA2IDIxLjg1NTUgOC4xODEgMjIuMTI4IDguODYzMzIgMjIuMzM0N0w4LjUxNTM4IDIzLjQ4MzJDNy43NTY1IDIzLjI1MzMgNy4wMjkzNiAyMi45NTAyIDYuMzQyMjQgMjIuNTgyMVpNMTAuODIzMyAyMy45NDAxTDEwLjkzOTYgMjIuNzQ1N0MxMS4yODgxIDIyLjc3OTcgMTEuNjQxOSAyMi43OTcgMTIgMjIuNzk3QzEyLjM1ODEgMjIuNzk3IDEyLjcxMTkgMjIuNzc5NyAxMy4wNjA0IDIyLjc0NTdMMTMuMTc2NyAyMy45NDAxQzEyLjc4OTUgMjMuOTc3OCAxMi4zOTcgMjMuOTk3MSAxMiAyMy45OTcxQzExLjYwMyAyMy45OTcxIDExLjIxMDQgMjMuOTc3OCAxMC44MjMzIDIzLjk0MDFaTTE1LjQ4NDYgMjMuNDgzMkwxNS4xMzY2IDIyLjMzNDdDMTUuODE5IDIyLjEyOCAxNi40NzI5IDIxLjg1NTUgMTcuMDkxMiAyMS41MjQzTDE3LjY1NzcgMjIuNTgyMUMxNi45NzA2IDIyLjk1MDIgMTYuMjQzNSAyMy4yNTMzIDE1LjQ4NDYgMjMuNDgzMlpNMTkuNjEyOSAyMS4yNzM1TDE4Ljg1MSAyMC4zNDYzQzE5LjM5OCAxOS44OTY5IDE5LjkgMTkuMzk0OSAyMC4zNDkzIDE4Ljg0OEwyMS4yNzY1IDE5LjYwOThDMjAuNzc3NSAyMC4yMjQ1IDIwLjIyMDEgMjAuNzc0NSAxOS42MTI5IDIxLjI3MzVaTTIyLjU4NTIgMTcuNjU0N0wyMS41MjczIDE3LjA4ODJDMjEuODU4NSAxNi40Njk5IDIyLjEzMSAxNS44MTYgMjIuMzM3OCAxNS4xMzM3TDIzLjQ4NjIgMTUuNDgxN0MyMy4yNTYzIDE2LjI0MDUgMjIuOTUzMiAxNi45Njc2IDIyLjU4NTIgMTcuNjU0N1oiIGZpbGw9ImN1cnJlbnRDb2xvciIvPgo8cGF0aCBkPSJNNy4yIDkuNjY2NDJDNy4yIDEyLjM5OTQgOS4wNzgxMiAxNC4yOTMgMTEuNzI0MiAxNC4yOTNDMTIuMTIyMiAxNC4yOTMgMTIuNDk5MiAxNC4yMjM3IDEyLjg0ODMgMTQuMTMzNUw5LjM4NTMyIDE5LjE5NzFIMTIuNDIyNEwxNS43MzE4IDE0LjMyNzdDMTYuOTYwNSAxMi41MTA0IDE3LjU1NCAxMS4xMDIzIDE3LjU2OCA5LjYwNDAyQzE3LjU3NSA2LjU1MiAxNS4xNzMyIDQuNzk3MDcgMTIuMzMxNiA0Ljc5NzA3QzkuMzUwNCA0Ljc5NzA3IDcuMiA2Ljc0NjIyIDcuMiA5LjY2NjQyWk0xMC4xMDQ0IDkuNTYyMzhDMTAuMTA0NCA4LjE1NDMgMTEuMDI2IDcuMTQxNTYgMTIuMzQ1NiA3LjE0MTU2QzEzLjY3MjEgNy4xNDE1NiAxNC42MDc3IDguMTU0MyAxNC42MDc3IDkuNTc2MjRDMTQuNjA3NyAxMC45ODQzIDEzLjY3MjEgMTEuOTgzMiAxMi4zNDU2IDExLjk4MzJDMTEuMDI2IDExLjk4MzIgMTAuMTA0NCAxMC45ODQzIDEwLjEwNDQgOS41NjIzOFoiIGZpbGw9ImN1cnJlbnRDb2xvciIvPgo8L3N2Zz4K)\n *\n * @param {Object} props - Supabase icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Last9 = createSupabaseIcon('Last9', [\n [\n 'path',\n {\n 'fill-rule': 'evenodd',\n 'clip-rule': 'evenodd',\n d: 'M23.9431 13.1737L22.7487 13.0575C22.7826 12.709 22.8 12.3552 22.8 11.9971C22.8 11.6389 22.7826 11.28Line truncated
component: React.lazy(() => import('icons/src/icons/last9')),
import: "import { Last9 } from 'icons'",
svg: "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M23.9431 13.1737L22.7487 13.0575C22.7826 12.709 22.8 12.3552 22.8 11.9971C22.8 11.6389 22.7826 11.2852 22.7487 10.9366L23.9431 10.8204C23.9807 11.2075 24 11.6 24 11.9971C24 12.3941 23.9807 12.7866 23.9431 13.1737ZM23.4862 8.5125L22.3378 8.8604C22.131 8.17807 21.8585 7.52413 21.5273 6.90588L22.5852 6.3393C22.9532 7.02642 23.2563 7.75356 23.4862 8.5125ZM21.2765 4.38423L20.3493 5.14603C19.9 4.59913 19.398 4.09711 18.851 3.64777L19.6129 2.72059C20.2201 3.21954 20.7775 3.7696 21.2765 4.38423ZM17.6577 1.41188L17.0912 2.4697C16.4729 2.13857 15.819 1.86601 15.1366 1.65928L15.4846 0.510829C16.2435 0.74076 16.9706 1.04384 17.6577 1.41188ZM13.1767 0.0540262L13.0604 1.24839C12.7119 1.21446 12.3581 1.19707 12 1.19707C11.6419 1.19707 11.2881 1.21446 10.9396 1.24839L10.8233 0.0540263C11.2104 0.0163507 11.603 -0.00292969 12 -0.00292969C12.397 -0.00292969 12.7895 0.0163507 13.1767 0.0540262ZM8.51538 0.510829L8.86332 1.65928C8.181 1.86601 7.52706 2.13857 6.90882 2.4697L6.34224 1.41188C7.02936 1.04384 7.7565 0.74076 8.51538 0.510829ZM4.38716 2.72059L5.14895 3.64777C4.60207 4.09711 4.10004 4.59913 3.6507 5.14603L2.72352 4.38423C3.22247 3.7696 3.77253 3.21954 4.38716 2.72059ZM1.41481 6.3393L2.47263 6.90588C2.14151 7.52413 1.86895 8.17807 1.6622 8.8604L0.513793 8.5125C0.743688 7.75356 1.04677 7.02642 1.41481 6.3393ZM0.0569559 10.8204C0.0192803 11.2075 0 11.6 0 11.9971C0 12.3941 0.0192804 12.7866 0.056956 13.1737L1.25131 13.0575C1.21739 12.709 1.2 12.3552 1.2 11.9971C1.2 11.6389 1.21739 11.2852 1.25131 10.9366L0.0569559 10.8204ZM0.513794 15.4817L1.6622 15.1337C1.86895 15.816 2.14151 16.4699 2.47263 17.0882L1.41481 17.6547C1.04677 16.9676 0.743688 16.2405 0.513794 15.4817ZM2.72352 19.6098L3.6507 18.848C4.10004 19.3949 4.60207 19.8969 5.14895 20.3463L4.38716 21.2735C3.77253 20.7745 3.22247 20.2245 2.72352 19.6098ZM6.34224 22.5821L6.90882 21.5243C7.52706 21.8555 8.181 22.128 8.86332 22.3347L8.51538 23.4832C7.7565 23.2533 7.02936 22.9502 6.34224 22.5821ZM10.8233 23.9401L10.9396 22.7457C11.2881 22.7797 11.6419 22.797 12 22.797C12.3581 22.797 12.7119 22.7797 13.0604 22.7457L13.1767 23.9401C12.7895 23.9778 12.397 23.9971 12 23.9971C11.603 23.9971 11.2104 23.9778 10.8233 23.9401ZM15.4846 23.4832L15.1366 22.3347C15.819 22.128 16.4729 21.8555 17.0912 21.5243L17.6577 22.5821C16.9706 22.9502 16.2435 23.2533 15.4846 23.4832ZM19.6129 21.2735L18.851 20.3463C19.398 19.8969 19.9 19.3949 20.3493 18.848L21.2765 19.6098C20.7775 20.2245 20.2201 20.7745 19.6129 21.2735ZM22.5852 17.6547L21.5273 17.0882C21.8585 16.4699 22.131 15.816 22.3378 15.1337L23.4862 15.4817C23.2563 16.2405 22.9532 16.9676 22.5852 17.6547Z\" fill=\"currentColor\"/>\n<path d=\"M7.2 9.66642C7.2 12.3994 9.07812 14.293 11.7242 14.293C12.1222 14.293 12.4992 14.2237 12.8483 14.1335L9.38532 19.1971H12.4224L15.7318 14.3277C16.9605 12.5104 17.554 11.1023 17.568 9.60402C17.575 6.552 15.1732 4.79707 12.3316 4.79707C9.3504 4.79707 7.2 6.74622 7.2 9.66642ZM10.1044 9.56238C10.1044 8.1543 11.026 7.14156 12.3456 7.14156C13.6721 7.14156 14.6077 8.1543 14.6077 9.57624C14.6077 10.9843 13.6721 11.9832 12.3456 11.9832C11.026 11.9832 10.1044 10.9843 10.1044 9.56238Z\" fill=\"currentColor\"/>\n</svg>\n",
jsx: "import { Last9 } from \"icons\"\n <Last9/>\n "
},
{
name: "logs",
componentName: "Logs",
+1
View File
@@ -16,6 +16,7 @@ export { default as Graphql } from './graphql';
export { default as Home } from './home';
export { default as InsertCode } from './insert-code';
export { default as Integrations } from './integrations';
export { default as Last9 } from './last9';
export { default as Logs } from './logs';
export { default as Postgres } from './postgres';
export { default as Realtime } from './realtime';
+34
View File
@@ -0,0 +1,34 @@
import createSupabaseIcon from '../createSupabaseIcon';
/**
* @component @name Last9
* @description Supabase SVG icon component, renders SVG Element with children.
*
* @preview ![img](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIzLjk0MzEgMTMuMTczN0wyMi43NDg3IDEzLjA1NzVDMjIuNzgyNiAxMi43MDkgMjIuOCAxMi4zNTUyIDIyLjggMTEuOTk3MUMyMi44IDExLjYzODkgMjIuNzgyNiAxMS4yODUyIDIyLjc0ODcgMTAuOTM2NkwyMy45NDMxIDEwLjgyMDRDMjMuOTgwNyAxMS4yMDc1IDI0IDExLjYgMjQgMTEuOTk3MUMyNCAxMi4zOTQxIDIzLjk4MDcgMTIuNzg2NiAyMy45NDMxIDEzLjE3MzdaTTIzLjQ4NjIgOC41MTI1TDIyLjMzNzggOC44NjA0QzIyLjEzMSA4LjE3ODA3IDIxLjg1ODUgNy41MjQxMyAyMS41MjczIDYuOTA1ODhMMjIuNTg1MiA2LjMzOTNDMjIuOTUzMiA3LjAyNjQyIDIzLjI1NjMgNy43NTM1NiAyMy40ODYyIDguNTEyNVpNMjEuMjc2NSA0LjM4NDIzTDIwLjM0OTMgNS4xNDYwM0MxOS45IDQuNTk5MTMgMTkuMzk4IDQuMDk3MTEgMTguODUxIDMuNjQ3NzdMMTkuNjEyOSAyLjcyMDU5QzIwLjIyMDEgMy4yMTk1NCAyMC43Nzc1IDMuNzY5NiAyMS4yNzY1IDQuMzg0MjNaTTE3LjY1NzcgMS40MTE4OEwxNy4wOTEyIDIuNDY5N0MxNi40NzI5IDIuMTM4NTcgMTUuODE5IDEuODY2MDEgMTUuMTM2NiAxLjY1OTI4TDE1LjQ4NDYgMC41MTA4MjlDMTYuMjQzNSAwLjc0MDc2IDE2Ljk3MDYgMS4wNDM4NCAxNy42NTc3IDEuNDExODhaTTEzLjE3NjcgMC4wNTQwMjYyTDEzLjA2MDQgMS4yNDgzOUMxMi43MTE5IDEuMjE0NDYgMTIuMzU4MSAxLjE5NzA3IDEyIDEuMTk3MDdDMTEuNjQxOSAxLjE5NzA3IDExLjI4ODEgMS4yMTQ0NiAxMC45Mzk2IDEuMjQ4MzlMMTAuODIzMyAwLjA1NDAyNjNDMTEuMjEwNCAwLjAxNjM1MDcgMTEuNjAzIC0wLjAwMjkyOTY5IDEyIC0wLjAwMjkyOTY5QzEyLjM5NyAtMC4wMDI5Mjk2OSAxMi43ODk1IDAuMDE2MzUwNyAxMy4xNzY3IDAuMDU0MDI2MlpNOC41MTUzOCAwLjUxMDgyOUw4Ljg2MzMyIDEuNjU5MjhDOC4xODEgMS44NjYwMSA3LjUyNzA2IDIuMTM4NTcgNi45MDg4MiAyLjQ2OTdMNi4zNDIyNCAxLjQxMTg4QzcuMDI5MzYgMS4wNDM4NCA3Ljc1NjUgMC43NDA3NiA4LjUxNTM4IDAuNTEwODI5Wk00LjM4NzE2IDIuNzIwNTlMNS4xNDg5NSAzLjY0Nzc3QzQuNjAyMDcgNC4wOTcxMSA0LjEwMDA0IDQuNTk5MTMgMy42NTA3IDUuMTQ2MDNMMi43MjM1MiA0LjM4NDIzQzMuMjIyNDcgMy43Njk2IDMuNzcyNTMgMy4yMTk1NCA0LjM4NzE2IDIuNzIwNTlaTTEuNDE0ODEgNi4zMzkzTDIuNDcyNjMgNi45MDU4OEMyLjE0MTUxIDcuNTI0MTMgMS44Njg5NSA4LjE3ODA3IDEuNjYyMiA4Ljg2MDRMMC41MTM3OTMgOC41MTI1QzAuNzQzNjg4IDcuNzUzNTYgMS4wNDY3NyA3LjAyNjQyIDEuNDE0ODEgNi4zMzkzWk0wLjA1Njk1NTkgMTAuODIwNEMwLjAxOTI4MDMgMTEuMjA3NSAwIDExLjYgMCAxMS45OTcxQzAgMTIuMzk0MSAwLjAxOTI4MDQgMTIuNzg2NiAwLjA1Njk1NiAxMy4xNzM3TDEuMjUxMzEgMTMuMDU3NUMxLjIxNzM5IDEyLjcwOSAxLjIgMTIuMzU1MiAxLjIgMTEuOTk3MUMxLjIgMTEuNjM4OSAxLjIxNzM5IDExLjI4NTIgMS4yNTEzMSAxMC45MzY2TDAuMDU2OTU1OSAxMC44MjA0Wk0wLjUxMzc5NCAxNS40ODE3TDEuNjYyMiAxNS4xMzM3QzEuODY4OTUgMTUuODE2IDIuMTQxNTEgMTYuNDY5OSAyLjQ3MjYzIDE3LjA4ODJMMS40MTQ4MSAxNy42NTQ3QzEuMDQ2NzcgMTYuOTY3NiAwLjc0MzY4OCAxNi4yNDA1IDAuNTEzNzk0IDE1LjQ4MTdaTTIuNzIzNTIgMTkuNjA5OEwzLjY1MDcgMTguODQ4QzQuMTAwMDQgMTkuMzk0OSA0LjYwMjA3IDE5Ljg5NjkgNS4xNDg5NSAyMC4zNDYzTDQuMzg3MTYgMjEuMjczNUMzLjc3MjUzIDIwLjc3NDUgMy4yMjI0NyAyMC4yMjQ1IDIuNzIzNTIgMTkuNjA5OFpNNi4zNDIyNCAyMi41ODIxTDYuOTA4ODIgMjEuNTI0M0M3LjUyNzA2IDIxLjg1NTUgOC4xODEgMjIuMTI4IDguODYzMzIgMjIuMzM0N0w4LjUxNTM4IDIzLjQ4MzJDNy43NTY1IDIzLjI1MzMgNy4wMjkzNiAyMi45NTAyIDYuMzQyMjQgMjIuNTgyMVpNMTAuODIzMyAyMy45NDAxTDEwLjkzOTYgMjIuNzQ1N0MxMS4yODgxIDIyLjc3OTcgMTEuNjQxOSAyMi43OTcgMTIgMjIuNzk3QzEyLjM1ODEgMjIuNzk3IDEyLjcxMTkgMjIuNzc5NyAxMy4wNjA0IDIyLjc0NTdMMTMuMTc2NyAyMy45NDAxQzEyLjc4OTUgMjMuOTc3OCAxMi4zOTcgMjMuOTk3MSAxMiAyMy45OTcxQzExLjYwMyAyMy45OTcxIDExLjIxMDQgMjMuOTc3OCAxMC44MjMzIDIzLjk0MDFaTTE1LjQ4NDYgMjMuNDgzMkwxNS4xMzY2IDIyLjMzNDdDMTUuODE5IDIyLjEyOCAxNi40NzI5IDIxLjg1NTUgMTcuMDkxMiAyMS41MjQzTDE3LjY1NzcgMjIuNTgyMUMxNi45NzA2IDIyLjk1MDIgMTYuMjQzNSAyMy4yNTMzIDE1LjQ4NDYgMjMuNDgzMlpNMTkuNjEyOSAyMS4yNzM1TDE4Ljg1MSAyMC4zNDYzQzE5LjM5OCAxOS44OTY5IDE5LjkgMTkuMzk0OSAyMC4zNDkzIDE4Ljg0OEwyMS4yNzY1IDE5LjYwOThDMjAuNzc3NSAyMC4yMjQ1IDIwLjIyMDEgMjAuNzc0NSAxOS42MTI5IDIxLjI3MzVaTTIyLjU4NTIgMTcuNjU0N0wyMS41MjczIDE3LjA4ODJDMjEuODU4NSAxNi40Njk5IDIyLjEzMSAxNS44MTYgMjIuMzM3OCAxNS4xMzM3TDIzLjQ4NjIgMTUuNDgxN0MyMy4yNTYzIDE2LjI0MDUgMjIuOTUzMiAxNi45Njc2IDIyLjU4NTIgMTcuNjU0N1oiIGZpbGw9ImN1cnJlbnRDb2xvciIvPgo8cGF0aCBkPSJNNy4yIDkuNjY2NDJDNy4yIDEyLjM5OTQgOS4wNzgxMiAxNC4yOTMgMTEuNzI0MiAxNC4yOTNDMTIuMTIyMiAxNC4yOTMgMTIuNDk5MiAxNC4yMjM3IDEyLjg0ODMgMTQuMTMzNUw5LjM4NTMyIDE5LjE5NzFIMTIuNDIyNEwxNS43MzE4IDE0LjMyNzdDMTYuOTYwNSAxMi41MTA0IDE3LjU1NCAxMS4xMDIzIDE3LjU2OCA5LjYwNDAyQzE3LjU3NSA2LjU1MiAxNS4xNzMyIDQuNzk3MDcgMTIuMzMxNiA0Ljc5NzA3QzkuMzUwNCA0Ljc5NzA3IDcuMiA2Ljc0NjIyIDcuMiA5LjY2NjQyWk0xMC4xMDQ0IDkuNTYyMzhDMTAuMTA0NCA4LjE1NDMgMTEuMDI2IDcuMTQxNTYgMTIuMzQ1NiA3LjE0MTU2QzEzLjY3MjEgNy4xNDE1NiAxNC42MDc3IDguMTU0MyAxNC42MDc3IDkuNTc2MjRDMTQuNjA3NyAxMC45ODQzIDEzLjY3MjEgMTEuOTgzMiAxMi4zNDU2IDExLjk4MzJDMTEuMDI2IDExLjk4MzIgMTAuMTA0NCAxMC45ODQzIDEwLjEwNDQgOS41NjIzOFoiIGZpbGw9ImN1cnJlbnRDb2xvciIvPgo8L3N2Zz4K)
*
* @param {Object} props - Supabase icons props and any valid SVG attribute
* @returns {JSX.Element} JSX Element
*
*/
const Last9 = createSupabaseIcon('Last9', [
[
'path',
{
'fill-rule': 'evenodd',
'clip-rule': 'evenodd',
d: 'M23.9431 13.1737L22.7487 13.0575C22.7826 12.709 22.8 12.3552 22.8 11.9971C22.8 11.6389 22.7826 11.2852 22.7487 10.9366L23.9431 10.8204C23.9807 11.2075 24 11.6 24 11.9971C24 12.3941 23.9807 12.7866 23.9431 13.1737ZM23.4862 8.5125L22.3378 8.8604C22.131 8.17807 21.8585 7.52413 21.5273 6.90588L22.5852 6.3393C22.9532 7.02642 23.2563 7.75356 23.4862 8.5125ZM21.2765 4.38423L20.3493 5.14603C19.9 4.59913 19.398 4.09711 18.851 3.64777L19.6129 2.72059C20.2201 3.21954 20.7775 3.7696 21.2765 4.38423ZM17.6577 1.41188L17.0912 2.4697C16.4729 2.13857 15.819 1.86601 15.1366 1.65928L15.4846 0.510829C16.2435 0.74076 16.9706 1.04384 17.6577 1.41188ZM13.1767 0.0540262L13.0604 1.24839C12.7119 1.21446 12.3581 1.19707 12 1.19707C11.6419 1.19707 11.2881 1.21446 10.9396 1.24839L10.8233 0.0540263C11.2104 0.0163507 11.603 -0.00292969 12 -0.00292969C12.397 -0.00292969 12.7895 0.0163507 13.1767 0.0540262ZM8.51538 0.510829L8.86332 1.65928C8.181 1.86601 7.52706 2.13857 6.90882 2.4697L6.34224 1.41188C7.02936 1.04384 7.7565 0.74076 8.51538 0.510829ZM4.38716 2.72059L5.14895 3.64777C4.60207 4.09711 4.10004 4.59913 3.6507 5.14603L2.72352 4.38423C3.22247 3.7696 3.77253 3.21954 4.38716 2.72059ZM1.41481 6.3393L2.47263 6.90588C2.14151 7.52413 1.86895 8.17807 1.6622 8.8604L0.513793 8.5125C0.743688 7.75356 1.04677 7.02642 1.41481 6.3393ZM0.0569559 10.8204C0.0192803 11.2075 0 11.6 0 11.9971C0 12.3941 0.0192804 12.7866 0.056956 13.1737L1.25131 13.0575C1.21739 12.709 1.2 12.3552 1.2 11.9971C1.2 11.6389 1.21739 11.2852 1.25131 10.9366L0.0569559 10.8204ZM0.513794 15.4817L1.6622 15.1337C1.86895 15.816 2.14151 16.4699 2.47263 17.0882L1.41481 17.6547C1.04677 16.9676 0.743688 16.2405 0.513794 15.4817ZM2.72352 19.6098L3.6507 18.848C4.10004 19.3949 4.60207 19.8969 5.14895 20.3463L4.38716 21.2735C3.77253 20.7745 3.22247 20.2245 2.72352 19.6098ZM6.34224 22.5821L6.90882 21.5243C7.52706 21.8555 8.181 22.128 8.86332 22.3347L8.51538 23.4832C7.7565 23.2533 7.02936 22.9502 6.34224 22.5821ZM10.8233 23.9401L10.9396 22.7457C11.2881 22.7797 11.6419 22.797 12 22.797C12.3581 22.797 12.7119 22.7797 13.0604 22.7457L13.1767 23.9401C12.7895 23.9778 12.397 23.9971 12 23.9971C11.603 23.9971 11.2104 23.9778 10.8233 23.9401ZM15.4846 23.4832L15.1366 22.3347C15.819 22.128 16.4729 21.8555 17.0912 21.5243L17.6577 22.5821C16.9706 22.9502 16.2435 23.2533 15.4846 23.4832ZM19.6129 21.2735L18.851 20.3463C19.398 19.8969 19.9 19.3949 20.3493 18.848L21.2765 19.6098C20.7775 20.2245 20.2201 20.7745 19.6129 21.2735ZM22.5852 17.6547L21.5273 17.0882C21.8585 16.4699 22.131 15.816 22.3378 15.1337L23.4862 15.4817C23.2563 16.2405 22.9532 16.9676 22.5852 17.6547Z',
fill: 'currentColor',
key: '1bcx6p',
},
],
[
'path',
{
d: 'M7.2 9.66642C7.2 12.3994 9.07812 14.293 11.7242 14.293C12.1222 14.293 12.4992 14.2237 12.8483 14.1335L9.38532 19.1971H12.4224L15.7318 14.3277C16.9605 12.5104 17.554 11.1023 17.568 9.60402C17.575 6.552 15.1732 4.79707 12.3316 4.79707C9.3504 4.79707 7.2 6.74622 7.2 9.66642ZM10.1044 9.56238C10.1044 8.1543 11.026 7.14156 12.3456 7.14156C13.6721 7.14156 14.6077 8.1543 14.6077 9.57624C14.6077 10.9843 13.6721 11.9832 12.3456 11.9832C11.026 11.9832 10.1044 10.9843 10.1044 9.56238Z',
fill: 'currentColor',
key: '1vyu7g',
},
],
]);
export default Last9;
+4
View File
@@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M23.9431 13.1737L22.7487 13.0575C22.7826 12.709 22.8 12.3552 22.8 11.9971C22.8 11.6389 22.7826 11.2852 22.7487 10.9366L23.9431 10.8204C23.9807 11.2075 24 11.6 24 11.9971C24 12.3941 23.9807 12.7866 23.9431 13.1737ZM23.4862 8.5125L22.3378 8.8604C22.131 8.17807 21.8585 7.52413 21.5273 6.90588L22.5852 6.3393C22.9532 7.02642 23.2563 7.75356 23.4862 8.5125ZM21.2765 4.38423L20.3493 5.14603C19.9 4.59913 19.398 4.09711 18.851 3.64777L19.6129 2.72059C20.2201 3.21954 20.7775 3.7696 21.2765 4.38423ZM17.6577 1.41188L17.0912 2.4697C16.4729 2.13857 15.819 1.86601 15.1366 1.65928L15.4846 0.510829C16.2435 0.74076 16.9706 1.04384 17.6577 1.41188ZM13.1767 0.0540262L13.0604 1.24839C12.7119 1.21446 12.3581 1.19707 12 1.19707C11.6419 1.19707 11.2881 1.21446 10.9396 1.24839L10.8233 0.0540263C11.2104 0.0163507 11.603 -0.00292969 12 -0.00292969C12.397 -0.00292969 12.7895 0.0163507 13.1767 0.0540262ZM8.51538 0.510829L8.86332 1.65928C8.181 1.86601 7.52706 2.13857 6.90882 2.4697L6.34224 1.41188C7.02936 1.04384 7.7565 0.74076 8.51538 0.510829ZM4.38716 2.72059L5.14895 3.64777C4.60207 4.09711 4.10004 4.59913 3.6507 5.14603L2.72352 4.38423C3.22247 3.7696 3.77253 3.21954 4.38716 2.72059ZM1.41481 6.3393L2.47263 6.90588C2.14151 7.52413 1.86895 8.17807 1.6622 8.8604L0.513793 8.5125C0.743688 7.75356 1.04677 7.02642 1.41481 6.3393ZM0.0569559 10.8204C0.0192803 11.2075 0 11.6 0 11.9971C0 12.3941 0.0192804 12.7866 0.056956 13.1737L1.25131 13.0575C1.21739 12.709 1.2 12.3552 1.2 11.9971C1.2 11.6389 1.21739 11.2852 1.25131 10.9366L0.0569559 10.8204ZM0.513794 15.4817L1.6622 15.1337C1.86895 15.816 2.14151 16.4699 2.47263 17.0882L1.41481 17.6547C1.04677 16.9676 0.743688 16.2405 0.513794 15.4817ZM2.72352 19.6098L3.6507 18.848C4.10004 19.3949 4.60207 19.8969 5.14895 20.3463L4.38716 21.2735C3.77253 20.7745 3.22247 20.2245 2.72352 19.6098ZM6.34224 22.5821L6.90882 21.5243C7.52706 21.8555 8.181 22.128 8.86332 22.3347L8.51538 23.4832C7.7565 23.2533 7.02936 22.9502 6.34224 22.5821ZM10.8233 23.9401L10.9396 22.7457C11.2881 22.7797 11.6419 22.797 12 22.797C12.3581 22.797 12.7119 22.7797 13.0604 22.7457L13.1767 23.9401C12.7895 23.9778 12.397 23.9971 12 23.9971C11.603 23.9971 11.2104 23.9778 10.8233 23.9401ZM15.4846 23.4832L15.1366 22.3347C15.819 22.128 16.4729 21.8555 17.0912 21.5243L17.6577 22.5821C16.9706 22.9502 16.2435 23.2533 15.4846 23.4832ZM19.6129 21.2735L18.851 20.3463C19.398 19.8969 19.9 19.3949 20.3493 18.848L21.2765 19.6098C20.7775 20.2245 20.2201 20.7745 19.6129 21.2735ZM22.5852 17.6547L21.5273 17.0882C21.8585 16.4699 22.131 15.816 22.3378 15.1337L23.4862 15.4817C23.2563 16.2405 22.9532 16.9676 22.5852 17.6547Z" fill="currentColor"/>
<path d="M7.2 9.66642C7.2 12.3994 9.07812 14.293 11.7242 14.293C12.1222 14.293 12.4992 14.2237 12.8483 14.1335L9.38532 19.1971H12.4224L15.7318 14.3277C16.9605 12.5104 17.554 11.1023 17.568 9.60402C17.575 6.552 15.1732 4.79707 12.3316 4.79707C9.3504 4.79707 7.2 6.74622 7.2 9.66642ZM10.1044 9.56238C10.1044 8.1543 11.026 7.14156 12.3456 7.14156C13.6721 7.14156 14.6077 8.1543 14.6077 9.57624C14.6077 10.9843 13.6721 11.9832 12.3456 11.9832C11.026 11.9832 10.1044 10.9843 10.1044 9.56238Z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB