@flamingo-stack/openframe-frontend-core 0.0.730 → 0.0.731
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aicpa-soc2-logo-icon-MLDYZA5S.cjs +7 -0
- package/dist/build/export-map.json +1 -1
- package/dist/{chunk-XA436AER.cjs → chunk-25H2SZH7.cjs} +4 -4
- package/dist/{chunk-5RMCAY6Y.cjs → chunk-27TMRMOM.cjs} +6 -4
- package/dist/{chunk-SKDQ2SLJ.cjs → chunk-2UNQJVYN.cjs} +670 -667
- package/dist/{chunk-73MDSN5A.cjs → chunk-2WXLQ5R5.cjs} +2 -2
- package/dist/{chunk-YPM3ALIW.cjs → chunk-32ENYVFA.cjs} +42 -42
- package/dist/{chunk-CLA3UGKT.cjs → chunk-3SWLL4IM.cjs} +12 -12
- package/dist/{chunk-FGA6T2XT.cjs → chunk-4YPV4OI4.cjs} +73 -73
- package/dist/{chunk-2T2TH5DF.cjs → chunk-52HFGZCI.cjs} +14 -12
- package/dist/{chunk-PGFR4CDB.cjs → chunk-53XZ6MJ5.cjs} +40 -40
- package/dist/{chunk-4XQXTQUK.cjs → chunk-6N5NQRQA.cjs} +8 -6
- package/dist/{chunk-XSPL7RXL.cjs → chunk-6V4GEE55.cjs} +10 -10
- package/dist/{chunk-5KLNEFZZ.cjs → chunk-7DUXR4HL.cjs} +3 -3
- package/dist/{chunk-AIW4KZQT.cjs → chunk-A4HNF4MP.cjs} +89 -89
- package/dist/{chunk-2I3XU2IB.cjs → chunk-BFHLGEJK.cjs} +45 -45
- package/dist/{chunk-FRET5WH3.cjs → chunk-CKR42OBK.cjs} +4 -2
- package/dist/{chunk-A7T3P5Q5.cjs → chunk-CLILWI6O.cjs} +32 -32
- package/dist/{chunk-GJPAS4RJ.cjs → chunk-CT342EJU.cjs} +6 -4
- package/dist/{chunk-YHFXQ5OR.cjs → chunk-E3N24573.cjs} +9 -9
- package/dist/{chunk-24KWUFWA.cjs → chunk-FKKUQK4C.cjs} +38 -38
- package/dist/{chunk-UG7Q3HQH.cjs → chunk-GID62YEN.cjs} +3 -3
- package/dist/{chunk-NDHQ7JLZ.cjs → chunk-GKHWXI25.cjs} +11 -15
- package/dist/{chunk-KMMV562E.cjs → chunk-HEOD765R.cjs} +18 -18
- package/dist/{chunk-66QTEDJL.cjs → chunk-HI7EFAFQ.cjs} +26 -26
- package/dist/{chunk-CD5YBUJK.cjs → chunk-HLIJ3U2T.cjs} +20 -20
- package/dist/{chunk-4NFVFTD6.cjs → chunk-HY2KTQSL.cjs} +238 -238
- package/dist/{chunk-YJXUJWHN.cjs → chunk-J7SZOZOS.cjs} +28 -26
- package/dist/{chunk-6NKLR5QN.cjs → chunk-JK75ZZP3.cjs} +59 -59
- package/dist/{chunk-JNDR5N3T.cjs → chunk-JPZ4Y6X3.cjs} +93 -93
- package/dist/{chunk-NXCV35RR.cjs → chunk-KLXHCNDC.cjs} +3 -3
- package/dist/{chunk-6KD2XUQZ.cjs → chunk-LRQITIEC.cjs} +28 -26
- package/dist/chunk-MANNIJ42.cjs +967 -0
- package/dist/{chunk-TW2SES5W.cjs → chunk-NCGAP3U4.cjs} +4 -2
- package/dist/{chunk-DINGZJ37.cjs → chunk-NYY25425.cjs} +2 -2
- package/dist/{chunk-HVZBIXCZ.cjs → chunk-O2RPIGSG.cjs} +6 -4
- package/dist/{chunk-UYKL2AXE.cjs → chunk-OKW5OAFJ.cjs} +8 -6
- package/dist/{chunk-YRZB4BMZ.cjs → chunk-QP6QS3YU.cjs} +44 -44
- package/dist/{chunk-VQMWBQUJ.cjs → chunk-R4QMR6S4.cjs} +14 -12
- package/dist/{chunk-2V62Y67F.cjs → chunk-RAHRDJBP.cjs} +4 -4
- package/dist/{chunk-3YHVQ34L.cjs → chunk-RBOIGJYF.cjs} +89 -91
- package/dist/{chunk-NB5BYOTM.cjs → chunk-RC32WBPL.cjs} +6 -4
- package/dist/{chunk-TI2IFCZG.cjs → chunk-TH4N726A.cjs} +17 -17
- package/dist/{chunk-WTURHKM2.cjs → chunk-XDBHGWFH.cjs} +14 -14
- package/dist/{chunk-P4YHBHP4.cjs → chunk-Y4QRK3CB.cjs} +7 -7
- package/dist/{chunk-Q5GR7LKV.cjs → chunk-YDGBRI3Y.cjs} +15 -15
- package/dist/{chunk-CDLDAQBA.cjs → chunk-YJFN2W7A.cjs} +7 -7
- package/dist/{chunk-UHJG2BDI.cjs → chunk-YUXRIR45.cjs} +3 -3
- package/dist/{chunk-L7Y7KDTM.cjs → chunk-ZV6473Z4.cjs} +20 -20
- package/dist/{chunk-GVTCHXW2.cjs → chunk-ZWUIRQNY.cjs} +28 -26
- package/dist/clickup-icon-3SETH2MM.cjs +7 -0
- package/dist/clickup-logo-icon-DJKBEFMR.cjs +7 -0
- package/dist/{cloud-tenants-VV6UQE7J.cjs → cloud-tenants-SC4FNAC2.cjs} +34 -34
- package/dist/components/case-studies/index.cjs +47 -47
- package/dist/components/chat/entity-cards/entity-portrait-card.js +1 -1
- package/dist/components/chat/index.cjs +28 -28
- package/dist/components/chat/types/entities/program-types.d.ts +1 -23
- package/dist/components/chat/types/entities/program-types.d.ts.map +1 -1
- package/dist/components/chat/types/entities/program-types.js +1 -9
- package/dist/components/chat/utils/icon-loading.d.ts +35 -2
- package/dist/components/chat/utils/icon-loading.d.ts.map +1 -1
- package/dist/components/chat/utils/icon-loading.js +31 -9
- package/dist/components/contact/index.cjs +35 -35
- package/dist/components/docs/index.cjs +38 -38
- package/dist/components/embeds/index.cjs +35 -35
- package/dist/components/faq/index.cjs +35 -35
- package/dist/components/features/index.cjs +36 -34
- package/dist/components/features/video-bites-shared.cjs +8 -0
- package/dist/components/features/video-bites-shared.d.ts +25 -0
- package/dist/components/features/video-bites-shared.d.ts.map +1 -1
- package/dist/components/features/video-bites-shared.js +8 -0
- package/dist/components/help-center-pages/index.cjs +150 -150
- package/dist/components/icons-v2-generated/brand-logos/clickup-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/clickup-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/clickup-icon.js +6 -4
- package/dist/components/icons-v2-generated/brand-logos/clickup-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/clickup-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/clickup-logo-icon.js +6 -4
- package/dist/components/icons-v2-generated/brand-logos/elestio-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/elestio-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/elestio-logo-grey-icon.js +4 -2
- package/dist/components/icons-v2-generated/brand-logos/elestio-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/elestio-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/elestio-logo-icon.js +14 -12
- package/dist/components/icons-v2-generated/brand-logos/gemini-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/gemini-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/gemini-logo-icon.js +28 -26
- package/dist/components/icons-v2-generated/brand-logos/google-gemini-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-gemini-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-gemini-icon.js +28 -26
- package/dist/components/icons-v2-generated/brand-logos/google-gemini-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-gemini-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-gemini-logo-icon.js +28 -26
- package/dist/components/icons-v2-generated/brand-logos/google-sheets-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-sheets-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/google-sheets-icon.js +4 -2
- package/dist/components/icons-v2-generated/brand-logos/meshcentral-logo-grey-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/meshcentral-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/meshcentral-logo-grey-icon.js +8 -6
- package/dist/components/icons-v2-generated/brand-logos/meshcentral-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/meshcentral-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/meshcentral-logo-icon.js +8 -6
- package/dist/components/icons-v2-generated/brand-logos/winget-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/brand-logos/winget-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/winget-logo-icon.js +14 -12
- package/dist/components/icons-v2-generated/compliance-logos/aicpa-soc2-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/compliance-logos/aicpa-soc2-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/compliance-logos/aicpa-soc2-logo-icon.js +6 -4
- package/dist/components/icons-v2-generated/compliance-logos/eu-logo-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/compliance-logos/eu-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/compliance-logos/eu-logo-icon.js +11 -15
- package/dist/components/icons-v2-generated/icon-names.d.ts +5 -0
- package/dist/components/icons-v2-generated/icon-names.d.ts.map +1 -0
- package/dist/components/icons-v2-generated/icon-names.js +10 -0
- package/dist/components/icons-v2-generated/index.cjs +15 -15
- package/dist/components/icons-v2-generated/interface/empty-vendor-icon.d.ts +1 -1
- package/dist/components/icons-v2-generated/interface/empty-vendor-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/interface/empty-vendor-icon.js +6 -4
- package/dist/components/index.cjs +91 -91
- package/dist/components/meeting-scheduler/index.cjs +93 -93
- package/dist/components/navigation/index.cjs +37 -37
- package/dist/components/onboarding-guides/index.cjs +37 -37
- package/dist/components/product-demo/index.cjs +8 -8
- package/dist/components/related-content/index.cjs +8 -8
- package/dist/components/shared/product-release/product-release-card.js +1 -1
- package/dist/components/tickets/index.cjs +38 -38
- package/dist/components/ui/index.cjs +34 -34
- package/dist/components/ui/photo-wall.d.ts.map +1 -1
- package/dist/components/ui/photo-wall.js +4 -1
- package/dist/{devices-X72Z4QMT.cjs → devices-7MHSJNXS.cjs} +35 -35
- package/dist/elestio-logo-grey-icon-DV7P3JLT.cjs +7 -0
- package/dist/elestio-logo-icon-34ILAIDI.cjs +7 -0
- package/dist/{embeddable-chat-TETIRLQD.cjs → embeddable-chat-VPIG3F7E.cjs} +103 -103
- package/dist/empty-vendor-icon-XZYOZ4EP.cjs +7 -0
- package/dist/eu-logo-icon-EYOX3UC7.cjs +7 -0
- package/dist/gemini-logo-icon-DNACTHIK.cjs +7 -0
- package/dist/google-gemini-icon-TZHJZ4IQ.cjs +7 -0
- package/dist/google-gemini-logo-icon-4XQVV5NN.cjs +7 -0
- package/dist/google-sheets-icon-UAAEBTR7.cjs +7 -0
- package/dist/hooks/index.cjs +8 -8
- package/dist/{chunk-SI24RMI5.cjs → icon-loaders-OLGJZGRP.cjs} +16 -950
- package/dist/index.cjs +40 -40
- package/dist/{knowledge-HWBSPQ7M.cjs → knowledge-4DREGSOZ.cjs} +35 -35
- package/dist/{logs-IZ4QTHPI.cjs → logs-BWXNT2KP.cjs} +42 -42
- package/dist/meshcentral-logo-grey-icon-UCRYV3IC.cjs +7 -0
- package/dist/meshcentral-logo-icon-76NSLOXF.cjs +7 -0
- package/dist/{policies-VHQR7JR5.cjs → policies-MGFUI23M.cjs} +38 -38
- package/dist/{remote-session-IR3YCXSR.cjs → remote-session-O6QGXV2N.cjs} +22 -22
- package/dist/schemas/contact-schema.cjs +31 -11
- package/dist/schemas/contact-schema.d.ts +1 -1
- package/dist/schemas/contact-schema.d.ts.map +1 -1
- package/dist/schemas/contact-schema.js +1 -1
- package/dist/schemas/meeting-booking-schema.cjs +34 -14
- package/dist/schemas/meeting-booking-schema.d.ts +1 -1
- package/dist/schemas/meeting-booking-schema.d.ts.map +1 -1
- package/dist/schemas/meeting-booking-schema.js +1 -1
- package/dist/{software-update-QLOVC6EX.cjs → software-update-7LF7XEYC.cjs} +38 -38
- package/dist/{tickets-board-YONLQB6F.cjs → tickets-board-KNXK747O.cjs} +25 -25
- package/dist/utils/index.cjs +2004 -1959
- package/dist/winget-logo-icon-GBS342G4.cjs +7 -0
- package/package.json +1 -1
- package/src/components/chat/entity-cards/entity-portrait-card.tsx +1 -1
- package/src/components/chat/types/entities/program-types.ts +4 -30
- package/src/components/chat/utils/icon-loading.tsx +50 -9
- package/src/components/features/video-bites-shared.ts +30 -0
- package/src/components/icons-v2-generated/brand-logos/clickup-icon.tsx +7 -5
- package/src/components/icons-v2-generated/brand-logos/clickup-logo-icon.tsx +7 -5
- package/src/components/icons-v2-generated/brand-logos/elestio-logo-grey-icon.tsx +5 -3
- package/src/components/icons-v2-generated/brand-logos/elestio-logo-icon.tsx +15 -13
- package/src/components/icons-v2-generated/brand-logos/gemini-logo-icon.tsx +29 -27
- package/src/components/icons-v2-generated/brand-logos/google-gemini-icon.tsx +29 -27
- package/src/components/icons-v2-generated/brand-logos/google-gemini-logo-icon.tsx +29 -27
- package/src/components/icons-v2-generated/brand-logos/google-sheets-icon.tsx +5 -3
- package/src/components/icons-v2-generated/brand-logos/meshcentral-logo-grey-icon.tsx +9 -7
- package/src/components/icons-v2-generated/brand-logos/meshcentral-logo-icon.tsx +9 -7
- package/src/components/icons-v2-generated/brand-logos/winget-logo-icon.tsx +15 -13
- package/src/components/icons-v2-generated/compliance-logos/aicpa-soc2-logo-icon.tsx +92 -90
- package/src/components/icons-v2-generated/compliance-logos/eu-logo-icon.tsx +51 -52
- package/src/components/icons-v2-generated/icon-names.ts +11 -0
- package/src/components/icons-v2-generated/interface/empty-vendor-icon.tsx +7 -5
- package/src/components/shared/product-release/product-release-card.tsx +1 -1
- package/src/components/ui/photo-wall.tsx +6 -0
- package/src/schemas/contact-schema.ts +1 -1
- package/src/schemas/meeting-booking-schema.ts +1 -1
- package/src/styles/fonts.css +26 -0
- package/src/styles/ods-design-tokens.css +4 -2
- package/dist/aicpa-soc2-logo-icon-CJ5JRV6J.cjs +0 -7
- package/dist/clickup-icon-CBBUZUVQ.cjs +0 -7
- package/dist/clickup-logo-icon-CGDKKISS.cjs +0 -7
- package/dist/elestio-logo-grey-icon-Y5OFW4OO.cjs +0 -7
- package/dist/elestio-logo-icon-X7TTQAYP.cjs +0 -7
- package/dist/empty-vendor-icon-3RKCZUUR.cjs +0 -7
- package/dist/eu-logo-icon-N7QVPGG3.cjs +0 -7
- package/dist/gemini-logo-icon-QOPGATSZ.cjs +0 -7
- package/dist/google-gemini-icon-7GWWF6O6.cjs +0 -7
- package/dist/google-gemini-logo-icon-Z3GHPMVN.cjs +0 -7
- package/dist/google-sheets-icon-7MJ3LV4P.cjs +0 -7
- package/dist/meshcentral-logo-grey-icon-3VFJQMV2.cjs +0 -7
- package/dist/meshcentral-logo-icon-MDVBWMP5.cjs +0 -7
- package/dist/winget-logo-icon-XVZJ4QDM.cjs +0 -7
package/package.json
CHANGED
|
@@ -108,7 +108,7 @@ export function EntityPortraitCard({
|
|
|
108
108
|
const edgeColor = useImageEdgeColor(isWide === false ? src : null, 'var(--color-bg-surface)');
|
|
109
109
|
|
|
110
110
|
return (
|
|
111
|
-
<Link href={href} target={target} rel={rel} className={cn('block h-full', className)}
|
|
111
|
+
<Link href={href} target={target} rel={rel} className={cn('block h-full', className)}>
|
|
112
112
|
<Card className={cn(CONTENT_CARD_FRAME_CLASS, 'flex h-full flex-col gap-6 p-6')}>
|
|
113
113
|
{/* Media zone — the real cover always wins: wide → cover-fill;
|
|
114
114
|
non-wide → contained on the edge-color fill (news-card treatment). */}
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
20
|
import type { ReactNode } from 'react';
|
|
21
|
-
import { toStripProfile, type VideoBiteStripProfile } from '../../../features/video-bites-shared';
|
|
22
21
|
|
|
23
22
|
// ============================================================================
|
|
24
23
|
// HOST TYPES
|
|
@@ -36,35 +35,10 @@ export interface ProgramHost {
|
|
|
36
35
|
role?: string; // e.g., "Host", "Speaker", "Guest"
|
|
37
36
|
}
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
*/
|
|
44
|
-
export interface ProgramAuthorRef {
|
|
45
|
-
id?: string | null;
|
|
46
|
-
full_name?: string | null;
|
|
47
|
-
avatar_url?: string | null;
|
|
48
|
-
job_title?: string | null;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Video-bites overlay profile for a program item: internal author first
|
|
53
|
-
* (`author_id → profiles`), then the provider-synced primary host (Livestorm
|
|
54
|
-
* speakers / Podbean hosts). Host `role` is a raw provider enum (e.g.
|
|
55
|
-
* `team_member`) — never display copy, so it is not used as the subtitle.
|
|
56
|
-
* Routes through `toStripProfile` (the SSoT — null on missing names).
|
|
57
|
-
*/
|
|
58
|
-
export function programItemToStripProfile(item: {
|
|
59
|
-
author?: ProgramAuthorRef | null;
|
|
60
|
-
hosts?: ProgramHost[] | null;
|
|
61
|
-
}): VideoBiteStripProfile | null {
|
|
62
|
-
const fromAuthor = toStripProfile(item.author);
|
|
63
|
-
if (fromAuthor) return fromAuthor;
|
|
64
|
-
const host = Array.isArray(item.hosts) ? item.hosts[0] : null;
|
|
65
|
-
if (!host?.name) return null;
|
|
66
|
-
return toStripProfile({ full_name: host.name, avatar_url: host.avatar_url ?? null });
|
|
67
|
-
}
|
|
38
|
+
// The author ref and its strip-profile adapter live in the server-safe leaf
|
|
39
|
+
// (`features/video-bites-shared`): a server module that imports them from this
|
|
40
|
+
// chat tree makes the whole chat a client reference of its page.
|
|
41
|
+
export { programItemToStripProfile, type ProgramAuthorRef } from '../../../features/video-bites-shared';
|
|
68
42
|
|
|
69
43
|
// ============================================================================
|
|
70
44
|
// DATABASE ROW TYPES
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
* `<NamedIcon>`, and never calls these functions itself.
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
import dynamicIconImports from 'lucide-react/dynamicIconImports';
|
|
22
21
|
import { createElement, lazy, useEffect, useRef, useSyncExternalStore, type ComponentType, type SVGProps } from 'react';
|
|
23
|
-
import {
|
|
22
|
+
import type { LoadedIconProps } from '../../icons-v2-generated/icon-loaders';
|
|
23
|
+
import { ICON_SET_NAMES, LUCIDE_ICON_NAMES } from '../../icons-v2-generated/icon-names';
|
|
24
24
|
|
|
25
25
|
/** Every icon loaded here is a component of the generated set's own props (`icons-v2-generated`). */
|
|
26
26
|
export type IconComponent = ComponentType<LoadedIconProps>;
|
|
@@ -157,10 +157,53 @@ function loadedOnDemand(key: string, displayName: string, loader: IconLoader): I
|
|
|
157
157
|
return OnDemandIcon as IconComponent;
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
+
// The two loader tables are NOT imported with this module. Bundled, they are the
|
|
161
|
+
// largest script a page would load (each `import()` is written out as the files it
|
|
162
|
+
// needs: about 340 KB for 3,300 icons), and a page whose icons the server drew
|
|
163
|
+
// never reads them. Whether a name exists is answered by `icon-names` (the names
|
|
164
|
+
// alone); a table is fetched the first time an icon is loaded by name.
|
|
165
|
+
type LoaderTable = Readonly<Record<string, IconLoader | undefined>>;
|
|
166
|
+
|
|
167
|
+
/** What a name draws when its table has lost it (a consumer's lucide older than the list of names): nothing. */
|
|
168
|
+
const NO_ICON: IconModule = { default: () => null };
|
|
169
|
+
|
|
170
|
+
function fromTable(table: () => Promise<LoaderTable>, name: string): IconLoader {
|
|
171
|
+
return () => table().then(loaders => loaders[name]?.() ?? NO_ICON);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* A loader table, fetched once and shared by every icon that reads it. A fetch
|
|
176
|
+
* that FAILS is forgotten, so the next icon asks again: kept, one dropped
|
|
177
|
+
* request would fail every icon of that table until the page is reloaded (an
|
|
178
|
+
* icon's own retry calls its loader again, which would get the same rejection).
|
|
179
|
+
* Exported for its test.
|
|
180
|
+
*/
|
|
181
|
+
export function sharedTable(fetchTable: () => Promise<LoaderTable>): () => Promise<LoaderTable> {
|
|
182
|
+
let table: Promise<LoaderTable> | undefined;
|
|
183
|
+
return () => {
|
|
184
|
+
if (!table) {
|
|
185
|
+
const attempt = fetchTable();
|
|
186
|
+
table = attempt;
|
|
187
|
+
attempt.catch(() => {
|
|
188
|
+
if (table === attempt) table = undefined;
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
return table;
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
const setLoaders = sharedTable(() =>
|
|
196
|
+
import('../../icons-v2-generated/icon-loaders').then(module => module.ICON_LOADERS as LoaderTable),
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
const lucideLoaders = sharedTable(() =>
|
|
200
|
+
import('lucide-react/dynamicIconImports').then(module => (module.default ?? module) as unknown as LoaderTable),
|
|
201
|
+
);
|
|
202
|
+
|
|
160
203
|
/** An icon of the generated set by its EXPORT name (`ChartPieIcon`), or `undefined` when the set has none by that name. */
|
|
161
204
|
export function iconFromSet(exportName: string): IconComponent | undefined {
|
|
162
|
-
if (!
|
|
163
|
-
return loadedOnDemand(`set:${exportName}`, exportName,
|
|
205
|
+
if (!ICON_SET_NAMES.has(exportName)) return undefined;
|
|
206
|
+
return loadedOnDemand(`set:${exportName}`, exportName, fromTable(setLoaders, exportName));
|
|
164
207
|
}
|
|
165
208
|
|
|
166
209
|
/** An icon the generated set is known to hold, by its export name. A name the set lost fails where it is asked for. */
|
|
@@ -170,12 +213,10 @@ export function setIcon(exportName: string): IconComponent {
|
|
|
170
213
|
return icon;
|
|
171
214
|
}
|
|
172
215
|
|
|
173
|
-
const lucideLoaders = dynamicIconImports as unknown as Readonly<Record<string, IconLoader>>;
|
|
174
|
-
|
|
175
216
|
/** A lucide icon by its kebab-case name (`message-circle`), or `undefined` when lucide has none by that name. */
|
|
176
217
|
export function lucideIcon(name: string): IconComponent | undefined {
|
|
177
|
-
if (!
|
|
178
|
-
return loadedOnDemand(`lucide:${name}`, `Lucide(${name})`, lucideLoaders
|
|
218
|
+
if (!LUCIDE_ICON_NAMES.has(name)) return undefined;
|
|
219
|
+
return loadedOnDemand(`lucide:${name}`, `Lucide(${name})`, fromTable(lucideLoaders, name));
|
|
179
220
|
}
|
|
180
221
|
|
|
181
222
|
/**
|
|
@@ -275,7 +316,7 @@ export function platformMarkRef(platform: string): IconRef {
|
|
|
275
316
|
if (platform === EVERY_PLATFORM) return EVERY_PLATFORM_MARK;
|
|
276
317
|
const stem = setStem(platform);
|
|
277
318
|
for (const exportName of [`${stem}MarkIcon`, `${stem}LogoIcon`]) {
|
|
278
|
-
if (
|
|
319
|
+
if (ICON_SET_NAMES.has(exportName)) return { set: exportName };
|
|
279
320
|
}
|
|
280
321
|
return HOUSE_MARK;
|
|
281
322
|
}
|
|
@@ -76,3 +76,33 @@ export function sortBitesByFeaturedAtDesc(a: VideoTeaser, b: VideoTeaser): numbe
|
|
|
76
76
|
if (!b.featured_at) return -1;
|
|
77
77
|
return new Date(b.featured_at).getTime() - new Date(a.featured_at).getTime();
|
|
78
78
|
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Client-safe author subset hydrated onto program items from the entity's
|
|
82
|
+
* `author_id → profiles` FK join (podcast episodes / webinars). Deliberately
|
|
83
|
+
* excludes `email` — this shape is serialized into public payloads.
|
|
84
|
+
*/
|
|
85
|
+
export interface ProgramAuthorRef {
|
|
86
|
+
id?: string | null;
|
|
87
|
+
full_name?: string | null;
|
|
88
|
+
avatar_url?: string | null;
|
|
89
|
+
job_title?: string | null;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Video-bites overlay profile for a program item: internal author first
|
|
94
|
+
* (`author_id → profiles`), then the provider-synced primary host (Livestorm
|
|
95
|
+
* speakers / Podbean hosts). Host `role` is a raw provider enum (e.g.
|
|
96
|
+
* `team_member`) — never display copy, so it is not used as the subtitle.
|
|
97
|
+
* Routes through `toStripProfile` (the SSoT — null on missing names).
|
|
98
|
+
*/
|
|
99
|
+
export function programItemToStripProfile(item: {
|
|
100
|
+
author?: ProgramAuthorRef | null;
|
|
101
|
+
hosts?: ReadonlyArray<{ name?: string | null; avatar_url?: string | null }> | null;
|
|
102
|
+
}): VideoBiteStripProfile | null {
|
|
103
|
+
const fromAuthor = toStripProfile(item.author);
|
|
104
|
+
if (fromAuthor) return fromAuthor;
|
|
105
|
+
const host = item.hosts?.[0] ?? null;
|
|
106
|
+
if (!host?.name) return null;
|
|
107
|
+
return toStripProfile({ full_name: host.name, avatar_url: host.avatar_url ?? null });
|
|
108
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { useId, type SVGProps } from "react";
|
|
2
2
|
export interface ClickupIconProps
|
|
3
3
|
extends Omit<SVGProps<SVGSVGElement>, "width" | "height"> {
|
|
4
4
|
className?: string;
|
|
@@ -11,6 +11,8 @@ export function ClickupIcon({
|
|
|
11
11
|
color = "currentColor",
|
|
12
12
|
...props
|
|
13
13
|
}: ClickupIconProps) {
|
|
14
|
+
// Per-instance ids: see scopeIds in scripts/generate-icons.mjs.
|
|
15
|
+
const uid = useId().replace(/[^a-zA-Z0-9_-]/g, '');
|
|
14
16
|
return (
|
|
15
17
|
<svg
|
|
16
18
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -23,7 +25,7 @@ export function ClickupIcon({
|
|
|
23
25
|
>
|
|
24
26
|
<defs>
|
|
25
27
|
<linearGradient
|
|
26
|
-
id=
|
|
28
|
+
id={`${uid}clickup_svg__a`}
|
|
27
29
|
x1={0}
|
|
28
30
|
x2={54.845}
|
|
29
31
|
y1={15.049}
|
|
@@ -35,7 +37,7 @@ export function ClickupIcon({
|
|
|
35
37
|
<stop offset={1} stopColor="#49CCF9" />
|
|
36
38
|
</linearGradient>
|
|
37
39
|
<linearGradient
|
|
38
|
-
id=
|
|
40
|
+
id={`${uid}clickup_svg__b`}
|
|
39
41
|
x1={1.195}
|
|
40
42
|
x2={53.745}
|
|
41
43
|
y1={53.166}
|
|
@@ -48,13 +50,13 @@ export function ClickupIcon({
|
|
|
48
50
|
</linearGradient>
|
|
49
51
|
</defs>
|
|
50
52
|
<path
|
|
51
|
-
fill=
|
|
53
|
+
fill={`url(#${uid}clickup_svg__a)`}
|
|
52
54
|
fillRule="evenodd"
|
|
53
55
|
d="m0 50.6 10.1-7.8c5.4 7 11.1 10.3 17.4 10.3s11.9-3.2 17-10.2l10.3 7.6c-7.4 10-16.6 15.3-27.3 15.3-10.6 0-19.9-5.3-27.5-15.2"
|
|
54
56
|
clipRule="evenodd"
|
|
55
57
|
/>
|
|
56
58
|
<path
|
|
57
|
-
fill=
|
|
59
|
+
fill={`url(#${uid}clickup_svg__b)`}
|
|
58
60
|
fillRule="evenodd"
|
|
59
61
|
d="m27.5 16.9-18 15.5-8.3-9.7L27.6 0l26.2 22.7-8.4 9.6z"
|
|
60
62
|
clipRule="evenodd"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { useId, type SVGProps } from "react";
|
|
2
2
|
export interface ClickupLogoIconProps
|
|
3
3
|
extends Omit<SVGProps<SVGSVGElement>, "width" | "height"> {
|
|
4
4
|
className?: string;
|
|
@@ -11,6 +11,8 @@ export function ClickupLogoIcon({
|
|
|
11
11
|
color = "currentColor",
|
|
12
12
|
...props
|
|
13
13
|
}: ClickupLogoIconProps) {
|
|
14
|
+
// Per-instance ids: see scopeIds in scripts/generate-icons.mjs.
|
|
15
|
+
const uid = useId().replace(/[^a-zA-Z0-9_-]/g, '');
|
|
14
16
|
return (
|
|
15
17
|
<svg
|
|
16
18
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -22,20 +24,20 @@ export function ClickupLogoIcon({
|
|
|
22
24
|
{...props}
|
|
23
25
|
>
|
|
24
26
|
<path
|
|
25
|
-
fill=
|
|
27
|
+
fill={`url(#${uid}clickup-logo_svg__a)`}
|
|
26
28
|
fillRule="evenodd"
|
|
27
29
|
d="m4 17.366 3.069-2.356c1.63 2.132 3.361 3.116 5.29 3.116 1.917 0 3.6-.972 5.156-3.088l3.112 2.3C18.38 20.388 15.59 22 12.358 22 9.137 22 6.318 20.4 4 17.366"
|
|
28
30
|
clipRule="evenodd"
|
|
29
31
|
/>
|
|
30
32
|
<path
|
|
31
|
-
fill=
|
|
33
|
+
fill={`url(#${uid}clickup-logo_svg__b)`}
|
|
32
34
|
fillRule="evenodd"
|
|
33
35
|
d="m12.185 7.126-5.46 4.717L4.2 8.908 12.197 2l7.934 6.913-2.536 2.925z"
|
|
34
36
|
clipRule="evenodd"
|
|
35
37
|
/>
|
|
36
38
|
<defs>
|
|
37
39
|
<linearGradient
|
|
38
|
-
id=
|
|
40
|
+
id={`${uid}clickup-logo_svg__a`}
|
|
39
41
|
x1={4}
|
|
40
42
|
x2={20.627}
|
|
41
43
|
y1={19.764}
|
|
@@ -46,7 +48,7 @@ export function ClickupLogoIcon({
|
|
|
46
48
|
<stop offset={1} stopColor="#49CCF9" />
|
|
47
49
|
</linearGradient>
|
|
48
50
|
<linearGradient
|
|
49
|
-
id=
|
|
51
|
+
id={`${uid}clickup-logo_svg__b`}
|
|
50
52
|
x1={4.2}
|
|
51
53
|
x2={20.131}
|
|
52
54
|
y1={8.694}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { useId, type SVGProps } from "react";
|
|
2
2
|
export interface ElestioLogoGreyIconProps
|
|
3
3
|
extends Omit<SVGProps<SVGSVGElement>, "width" | "height"> {
|
|
4
4
|
className?: string;
|
|
@@ -11,6 +11,8 @@ export function ElestioLogoGreyIcon({
|
|
|
11
11
|
color = "currentColor",
|
|
12
12
|
...props
|
|
13
13
|
}: ElestioLogoGreyIconProps) {
|
|
14
|
+
// Per-instance ids: see scopeIds in scripts/generate-icons.mjs.
|
|
15
|
+
const uid = useId().replace(/[^a-zA-Z0-9_-]/g, '');
|
|
14
16
|
return (
|
|
15
17
|
<svg
|
|
16
18
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -22,7 +24,7 @@ export function ElestioLogoGreyIcon({
|
|
|
22
24
|
{...props}
|
|
23
25
|
>
|
|
24
26
|
<mask
|
|
25
|
-
id=
|
|
27
|
+
id={`${uid}elestio-logo-grey_svg__a`}
|
|
26
28
|
width={20}
|
|
27
29
|
height={20}
|
|
28
30
|
x={2}
|
|
@@ -37,7 +39,7 @@ export function ElestioLogoGreyIcon({
|
|
|
37
39
|
d="M14.543 16.983a6.8 6.8 0 0 1-2.818.618c-2.268 0-4.261-1.409-4.948-3.608h14.57c.103-.722.24-1.409.24-2.13 0-5.258-4.26-9.863-9.621-9.863C6.33 2 2 6.57 2 12.138 2 17.6 6.433 22 11.897 22c2.44 0 4.845-.997 6.598-2.577zM11.93 6.433c2.303 0 4.365 1.34 5.12 3.608H6.709c.687-2.2 2.99-3.608 5.223-3.608"
|
|
38
40
|
/>
|
|
39
41
|
</mask>
|
|
40
|
-
<g fill={color} mask=
|
|
42
|
+
<g fill={color} mask={`url(#${uid}elestio-logo-grey_svg__a)`}>
|
|
41
43
|
<path d="M18.495 8.736H6.124v6.185h12.37z" />
|
|
42
44
|
<path d="M11.921 6.444c.141 0 .282 0 .388.035L7.37 2.893a8 8 0 0 0-1.481.914c-3.175 2.32-4.657 6.083-4.128 9.74l5.394-3.78C8 7.691 9.558 6.443 11.92 6.443" />
|
|
43
45
|
<path d="M6.461 12.031c0-.793.221-1.547.522-2.264-1.615 1.17-3.712 2.68-5.327 3.85.075.603.226 1.207.413 1.81 1.277 4.001 4.655 6.756 8.522 7.398a459 459 0 0 1-1.99-6.227c-1.314-1.057-2.14-2.718-2.14-4.567" />
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { useId, type SVGProps } from "react";
|
|
2
2
|
export interface ElestioLogoIconProps
|
|
3
3
|
extends Omit<SVGProps<SVGSVGElement>, "width" | "height"> {
|
|
4
4
|
className?: string;
|
|
@@ -11,6 +11,8 @@ export function ElestioLogoIcon({
|
|
|
11
11
|
color = "currentColor",
|
|
12
12
|
...props
|
|
13
13
|
}: ElestioLogoIconProps) {
|
|
14
|
+
// Per-instance ids: see scopeIds in scripts/generate-icons.mjs.
|
|
15
|
+
const uid = useId().replace(/[^a-zA-Z0-9_-]/g, '');
|
|
14
16
|
return (
|
|
15
17
|
<svg
|
|
16
18
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -22,7 +24,7 @@ export function ElestioLogoIcon({
|
|
|
22
24
|
{...props}
|
|
23
25
|
>
|
|
24
26
|
<mask
|
|
25
|
-
id=
|
|
27
|
+
id={`${uid}elestio-logo_svg__a`}
|
|
26
28
|
width={20}
|
|
27
29
|
height={20}
|
|
28
30
|
x={2}
|
|
@@ -37,32 +39,32 @@ export function ElestioLogoIcon({
|
|
|
37
39
|
d="M14.543 16.983a6.8 6.8 0 0 1-2.818.618c-2.268 0-4.261-1.409-4.948-3.608h14.57c.103-.722.24-1.409.24-2.13 0-5.258-4.26-9.863-9.621-9.863C6.33 2 2 6.57 2 12.138 2 17.6 6.433 22 11.897 22c2.44 0 4.845-.997 6.598-2.577zM11.93 6.433c2.303 0 4.365 1.34 5.12 3.608H6.709c.687-2.2 2.99-3.608 5.223-3.608"
|
|
38
40
|
/>
|
|
39
41
|
</mask>
|
|
40
|
-
<g mask=
|
|
42
|
+
<g mask={`url(#${uid}elestio-logo_svg__a)`}>
|
|
41
43
|
<path fill="#A91A1F" d="M18.495 8.736H6.124v6.185h12.37z" />
|
|
42
44
|
<path
|
|
43
|
-
fill=
|
|
45
|
+
fill={`url(#${uid}elestio-logo_svg__b)`}
|
|
44
46
|
d="M11.921 6.444c.141 0 .282 0 .388.035L7.37 2.893a8 8 0 0 0-1.481.914c-3.175 2.32-4.657 6.083-4.128 9.74l5.394-3.78C8 7.691 9.558 6.443 11.92 6.443"
|
|
45
47
|
/>
|
|
46
48
|
<path
|
|
47
|
-
fill=
|
|
49
|
+
fill={`url(#${uid}elestio-logo_svg__c)`}
|
|
48
50
|
d="M6.461 12.031c0-.793.221-1.547.522-2.264-1.615 1.17-3.712 2.68-5.327 3.85.075.603.226 1.207.413 1.81 1.277 4.001 4.655 6.756 8.522 7.398a459 459 0 0 1-1.99-6.227c-1.314-1.057-2.14-2.718-2.14-4.567"
|
|
49
51
|
/>
|
|
50
52
|
<path
|
|
51
|
-
fill=
|
|
53
|
+
fill={`url(#${uid}elestio-logo_svg__d)`}
|
|
52
54
|
d="M14.809 16.783a5.7 5.7 0 0 1-2.975.834 5.64 5.64 0 0 1-3.648-1.321l1.877 5.703a9.5 9.5 0 0 0 1.735.139c3.967 0 7.367-2.191 9.102-5.39H14.81z"
|
|
53
55
|
/>
|
|
54
56
|
<path
|
|
55
|
-
fill=
|
|
57
|
+
fill={`url(#${uid}elestio-logo_svg__e)`}
|
|
56
58
|
d="m17.116 10.587 1.822-5.67c-.378-.412-.825-.756-1.272-1.1a9.94 9.94 0 0 0-10.275-.893l4.811 3.505c2.406.206 4.364 1.89 4.914 4.158"
|
|
57
59
|
/>
|
|
58
60
|
<path
|
|
59
|
-
fill=
|
|
61
|
+
fill={`url(#${uid}elestio-logo_svg__f)`}
|
|
60
62
|
d="m19.393 3.378-2.547 6.233c.144.454.24.945.24 1.436 0 2.153-1.442 4.042-3.605 5.1h8.316c.384-.53.672-1.134.913-1.7 1.586-4.042.144-8.273-3.317-11.069"
|
|
61
63
|
/>
|
|
62
64
|
</g>
|
|
63
65
|
<defs>
|
|
64
66
|
<linearGradient
|
|
65
|
-
id=
|
|
67
|
+
id={`${uid}elestio-logo_svg__b`}
|
|
66
68
|
x1={6.985}
|
|
67
69
|
x2={6.985}
|
|
68
70
|
y1={13.507}
|
|
@@ -73,7 +75,7 @@ export function ElestioLogoIcon({
|
|
|
73
75
|
<stop offset={1} stopColor="#F5A11A" />
|
|
74
76
|
</linearGradient>
|
|
75
77
|
<linearGradient
|
|
76
|
-
id=
|
|
78
|
+
id={`${uid}elestio-logo_svg__c`}
|
|
77
79
|
x1={6.133}
|
|
78
80
|
x2={6.133}
|
|
79
81
|
y1={22.84}
|
|
@@ -84,7 +86,7 @@ export function ElestioLogoIcon({
|
|
|
84
86
|
<stop offset={1} stopColor="#E81C24" />
|
|
85
87
|
</linearGradient>
|
|
86
88
|
<linearGradient
|
|
87
|
-
id=
|
|
89
|
+
id={`${uid}elestio-logo_svg__d`}
|
|
88
90
|
x1={14.586}
|
|
89
91
|
x2={14.586}
|
|
90
92
|
y1={22.191}
|
|
@@ -95,7 +97,7 @@ export function ElestioLogoIcon({
|
|
|
95
97
|
<stop offset={1} stopColor="#A567A5" />
|
|
96
98
|
</linearGradient>
|
|
97
99
|
<linearGradient
|
|
98
|
-
id=
|
|
100
|
+
id={`${uid}elestio-logo_svg__e`}
|
|
99
101
|
x1={13.174}
|
|
100
102
|
x2={13.174}
|
|
101
103
|
y1={10.598}
|
|
@@ -106,7 +108,7 @@ export function ElestioLogoIcon({
|
|
|
106
108
|
<stop offset={1} stopColor="#FFC605" />
|
|
107
109
|
</linearGradient>
|
|
108
110
|
<linearGradient
|
|
109
|
-
id=
|
|
111
|
+
id={`${uid}elestio-logo_svg__f`}
|
|
110
112
|
x1={18.365}
|
|
111
113
|
x2={18.365}
|
|
112
114
|
y1={16.125}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { useId, type SVGProps } from "react";
|
|
2
2
|
export interface GeminiLogoIconProps
|
|
3
3
|
extends Omit<SVGProps<SVGSVGElement>, "width" | "height"> {
|
|
4
4
|
className?: string;
|
|
@@ -11,6 +11,8 @@ export function GeminiLogoIcon({
|
|
|
11
11
|
color = "currentColor",
|
|
12
12
|
...props
|
|
13
13
|
}: GeminiLogoIconProps) {
|
|
14
|
+
// Per-instance ids: see scopeIds in scripts/generate-icons.mjs.
|
|
15
|
+
const uid = useId().replace(/[^a-zA-Z0-9_-]/g, '');
|
|
14
16
|
return (
|
|
15
17
|
<svg
|
|
16
18
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -22,7 +24,7 @@ export function GeminiLogoIcon({
|
|
|
22
24
|
{...props}
|
|
23
25
|
>
|
|
24
26
|
<mask
|
|
25
|
-
id=
|
|
27
|
+
id={`${uid}gemini-logo_svg__b`}
|
|
26
28
|
width={20}
|
|
27
29
|
height={20}
|
|
28
30
|
x={2}
|
|
@@ -37,72 +39,72 @@ export function GeminiLogoIcon({
|
|
|
37
39
|
d="M11.984 2c.209 0 .391.143.443.346q.234.933.614 1.817a12.8 12.8 0 0 0 2.725 4.039 12.8 12.8 0 0 0 4.038 2.724 12 12 0 0 0 1.818.615.457.457 0 0 1 0 .886q-.934.234-1.818.614a12.8 12.8 0 0 0-4.038 2.725 12.83 12.83 0 0 0-3.34 5.856.46.46 0 0 1-.442.345.46.46 0 0 1-.443-.346 12.809 12.809 0 0 0-3.34-5.855 12.8 12.8 0 0 0-5.855-3.34.457.457 0 0 1 0-.885 12.812 12.812 0 0 0 5.855-3.34 12.8 12.8 0 0 0 3.34-5.855.46.46 0 0 1 .443-.346"
|
|
38
40
|
/>
|
|
39
41
|
<path
|
|
40
|
-
fill=
|
|
42
|
+
fill={`url(#${uid}gemini-logo_svg__a)`}
|
|
41
43
|
d="M11.984 2c.209 0 .391.143.443.346q.234.933.614 1.817a12.8 12.8 0 0 0 2.725 4.039 12.8 12.8 0 0 0 4.038 2.724 12 12 0 0 0 1.818.615.457.457 0 0 1 0 .886q-.934.234-1.818.614a12.8 12.8 0 0 0-4.038 2.725 12.83 12.83 0 0 0-3.34 5.856.46.46 0 0 1-.442.345.46.46 0 0 1-.443-.346 12.809 12.809 0 0 0-3.34-5.855 12.8 12.8 0 0 0-5.855-3.34.457.457 0 0 1 0-.885 12.812 12.812 0 0 0 5.855-3.34 12.8 12.8 0 0 0 3.34-5.855.46.46 0 0 1 .443-.346"
|
|
42
44
|
/>
|
|
43
45
|
</mask>
|
|
44
|
-
<g mask=
|
|
45
|
-
<g filter=
|
|
46
|
+
<g mask={`url(#${uid}gemini-logo_svg__b)`}>
|
|
47
|
+
<g filter={`url(#${uid}gemini-logo_svg__c)`}>
|
|
46
48
|
<path
|
|
47
49
|
fill="#FFE432"
|
|
48
50
|
d="M.197 17.61c2.307.82 4.96-.716 5.923-3.43s-.125-5.58-2.432-6.4c-2.307-.818-4.959.718-5.923 3.432s.125 5.58 2.432 6.398"
|
|
49
51
|
/>
|
|
50
52
|
</g>
|
|
51
|
-
<g filter=
|
|
53
|
+
<g filter={`url(#${uid}gemini-logo_svg__d)`}>
|
|
52
54
|
<path
|
|
53
55
|
fill="#FC413D"
|
|
54
56
|
d="M10.441 8.661c3.17 0 5.739-2.626 5.739-5.865s-2.57-5.865-5.739-5.865-5.74 2.626-5.74 5.865 2.57 5.865 5.74 5.865"
|
|
55
57
|
/>
|
|
56
58
|
</g>
|
|
57
|
-
<g filter=
|
|
59
|
+
<g filter={`url(#${uid}gemini-logo_svg__e)`}>
|
|
58
60
|
<path
|
|
59
61
|
fill="#00B95C"
|
|
60
62
|
d="M8.21 27.418c3.31-.162 5.821-3.767 5.612-8.054-.21-4.286-3.062-7.63-6.37-7.468S1.63 15.664 1.84 19.95c.21 4.286 3.062 7.63 6.37 7.468"
|
|
61
63
|
/>
|
|
62
64
|
</g>
|
|
63
|
-
<g filter=
|
|
65
|
+
<g filter={`url(#${uid}gemini-logo_svg__f)`}>
|
|
64
66
|
<path
|
|
65
67
|
fill="#00B95C"
|
|
66
68
|
d="M8.21 27.418c3.31-.162 5.821-3.767 5.612-8.054-.21-4.286-3.062-7.63-6.37-7.468S1.63 15.664 1.84 19.95c.21 4.286 3.062 7.63 6.37 7.468"
|
|
67
69
|
/>
|
|
68
70
|
</g>
|
|
69
|
-
<g filter=
|
|
71
|
+
<g filter={`url(#${uid}gemini-logo_svg__g)`}>
|
|
70
72
|
<path
|
|
71
73
|
fill="#00B95C"
|
|
72
74
|
d="M11.524 24.825c2.774-1.688 3.516-5.531 1.658-8.585-1.857-3.054-5.612-4.161-8.386-2.474-2.774 1.688-3.516 5.532-1.659 8.586 1.859 3.053 5.613 4.16 8.387 2.473"
|
|
73
75
|
/>
|
|
74
76
|
</g>
|
|
75
|
-
<g filter=
|
|
77
|
+
<g filter={`url(#${uid}gemini-logo_svg__h)`}>
|
|
76
78
|
<path
|
|
77
79
|
fill="#3186FF"
|
|
78
80
|
d="M22.736 15.229c3.117 0 5.645-2.434 5.645-5.436s-2.528-5.436-5.645-5.436c-3.118 0-5.645 2.434-5.645 5.436s2.527 5.436 5.645 5.436"
|
|
79
81
|
/>
|
|
80
82
|
</g>
|
|
81
|
-
<g filter=
|
|
83
|
+
<g filter={`url(#${uid}gemini-logo_svg__i)`}>
|
|
82
84
|
<path
|
|
83
85
|
fill="#FBBC04"
|
|
84
86
|
d="M-2.02 14.598c2.87 2.183 7.064 1.498 9.367-1.53 2.302-3.027 1.842-7.252-1.029-9.434-2.87-2.184-7.064-1.499-9.367 1.53-2.302 3.027-1.841 7.251 1.03 9.434"
|
|
85
87
|
/>
|
|
86
88
|
</g>
|
|
87
|
-
<g filter=
|
|
89
|
+
<g filter={`url(#${uid}gemini-logo_svg__j)`}>
|
|
88
90
|
<path
|
|
89
91
|
fill="#3186FF"
|
|
90
92
|
d="M12.69 17.825c3.425 2.355 7.967 1.7 10.143-1.466s1.163-7.64-2.263-9.997c-3.427-2.356-7.969-1.7-10.145 1.466s-1.163 7.64 2.264 9.997"
|
|
91
93
|
/>
|
|
92
94
|
</g>
|
|
93
|
-
<g filter=
|
|
95
|
+
<g filter={`url(#${uid}gemini-logo_svg__k)`}>
|
|
94
96
|
<path
|
|
95
97
|
fill="#749BFF"
|
|
96
98
|
d="M18.918 1.281c.872 1.185-.249 3.49-2.502 5.147s-4.787 2.04-5.658.855.248-3.49 2.501-5.147 4.787-2.04 5.659-.855"
|
|
97
99
|
/>
|
|
98
100
|
</g>
|
|
99
|
-
<g filter=
|
|
101
|
+
<g filter={`url(#${uid}gemini-logo_svg__l)`}>
|
|
100
102
|
<path
|
|
101
103
|
fill="#FC413D"
|
|
102
104
|
d="M11.762 6.955c3.485-3.233 4.681-7.61 2.672-9.775S7.97-4.122 4.486-.89-.196 6.72 1.814 8.886s6.463 1.302 9.948-1.93"
|
|
103
105
|
/>
|
|
104
106
|
</g>
|
|
105
|
-
<g filter=
|
|
107
|
+
<g filter={`url(#${uid}gemini-logo_svg__m)`}>
|
|
106
108
|
<path
|
|
107
109
|
fill="#FFEE48"
|
|
108
110
|
d="M4.618 18.566c2.072 1.482 4.45 1.707 5.312.503s-.118-3.383-2.19-4.865c-2.07-1.483-4.449-1.708-5.31-.504-.863 1.205.117 3.383 2.188 4.866"
|
|
@@ -111,7 +113,7 @@ export function GeminiLogoIcon({
|
|
|
111
113
|
</g>
|
|
112
114
|
<defs>
|
|
113
115
|
<filter
|
|
114
|
-
id=
|
|
116
|
+
id={`${uid}gemini-logo_svg__c`}
|
|
115
117
|
width={12.085}
|
|
116
118
|
height={13.298}
|
|
117
119
|
x={-4.1}
|
|
@@ -127,7 +129,7 @@ export function GeminiLogoIcon({
|
|
|
127
129
|
/>
|
|
128
130
|
</filter>
|
|
129
131
|
<filter
|
|
130
|
-
id=
|
|
132
|
+
id={`${uid}gemini-logo_svg__d`}
|
|
131
133
|
width={26.113}
|
|
132
134
|
height={26.366}
|
|
133
135
|
x={-2.616}
|
|
@@ -143,7 +145,7 @@ export function GeminiLogoIcon({
|
|
|
143
145
|
/>
|
|
144
146
|
</filter>
|
|
145
147
|
<filter
|
|
146
|
-
id=
|
|
148
|
+
id={`${uid}gemini-logo_svg__e`}
|
|
147
149
|
width={24.448}
|
|
148
150
|
height={27.975}
|
|
149
151
|
x={-4.393}
|
|
@@ -159,7 +161,7 @@ export function GeminiLogoIcon({
|
|
|
159
161
|
/>
|
|
160
162
|
</filter>
|
|
161
163
|
<filter
|
|
162
|
-
id=
|
|
164
|
+
id={`${uid}gemini-logo_svg__f`}
|
|
163
165
|
width={24.448}
|
|
164
166
|
height={27.975}
|
|
165
167
|
x={-4.393}
|
|
@@ -175,7 +177,7 @@ export function GeminiLogoIcon({
|
|
|
175
177
|
/>
|
|
176
178
|
</filter>
|
|
177
179
|
<filter
|
|
178
|
-
id=
|
|
180
|
+
id={`${uid}gemini-logo_svg__g`}
|
|
179
181
|
width={24.533}
|
|
180
182
|
height={25.079}
|
|
181
183
|
x={-4.107}
|
|
@@ -191,7 +193,7 @@ export function GeminiLogoIcon({
|
|
|
191
193
|
/>
|
|
192
194
|
</filter>
|
|
193
195
|
<filter
|
|
194
|
-
id=
|
|
196
|
+
id={`${uid}gemini-logo_svg__h`}
|
|
195
197
|
width={23.113}
|
|
196
198
|
height={22.695}
|
|
197
199
|
x={11.179}
|
|
@@ -207,7 +209,7 @@ export function GeminiLogoIcon({
|
|
|
207
209
|
/>
|
|
208
210
|
</filter>
|
|
209
211
|
<filter
|
|
210
|
-
id=
|
|
212
|
+
id={`${uid}gemini-logo_svg__i`}
|
|
211
213
|
width={24.042}
|
|
212
214
|
height={24.233}
|
|
213
215
|
x={-9.872}
|
|
@@ -223,7 +225,7 @@ export function GeminiLogoIcon({
|
|
|
223
225
|
/>
|
|
224
226
|
</filter>
|
|
225
227
|
<filter
|
|
226
|
-
id=
|
|
228
|
+
id={`${uid}gemini-logo_svg__j`}
|
|
227
229
|
width={24.27}
|
|
228
230
|
height={23.859}
|
|
229
231
|
x={4.494}
|
|
@@ -239,7 +241,7 @@ export function GeminiLogoIcon({
|
|
|
239
241
|
/>
|
|
240
242
|
</filter>
|
|
241
243
|
<filter
|
|
242
|
-
id=
|
|
244
|
+
id={`${uid}gemini-logo_svg__k`}
|
|
243
245
|
width={17.314}
|
|
244
246
|
height={15.942}
|
|
245
247
|
x={6.181}
|
|
@@ -255,7 +257,7 @@ export function GeminiLogoIcon({
|
|
|
255
257
|
/>
|
|
256
258
|
</filter>
|
|
257
259
|
<filter
|
|
258
|
-
id=
|
|
260
|
+
id={`${uid}gemini-logo_svg__l`}
|
|
259
261
|
width={21.802}
|
|
260
262
|
height={21.325}
|
|
261
263
|
x={-2.777}
|
|
@@ -271,7 +273,7 @@ export function GeminiLogoIcon({
|
|
|
271
273
|
/>
|
|
272
274
|
</filter>
|
|
273
275
|
<filter
|
|
274
|
-
id=
|
|
276
|
+
id={`${uid}gemini-logo_svg__m`}
|
|
275
277
|
width={17.078}
|
|
276
278
|
height={15.869}
|
|
277
279
|
x={-2.359}
|
|
@@ -287,7 +289,7 @@ export function GeminiLogoIcon({
|
|
|
287
289
|
/>
|
|
288
290
|
</filter>
|
|
289
291
|
<linearGradient
|
|
290
|
-
id=
|
|
292
|
+
id={`${uid}gemini-logo_svg__a`}
|
|
291
293
|
x1={7.676}
|
|
292
294
|
x2={18.047}
|
|
293
295
|
y1={15.36}
|