@arbidocs/blocks 0.5.59 → 0.5.60
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/README.md +40 -0
- package/dist/{ConnectedCallDock-IGIDX5LT.cjs → ConnectedCallDock-NEXHEXVL.cjs} +14 -14
- package/dist/{ConnectedCallDock-IGIDX5LT.cjs.map → ConnectedCallDock-NEXHEXVL.cjs.map} +1 -1
- package/dist/{ConnectedCallDock-KCINYWGF.js → ConnectedCallDock-PMCWZXCO.js} +13 -13
- package/dist/{ConnectedCallDock-KCINYWGF.js.map → ConnectedCallDock-PMCWZXCO.js.map} +1 -1
- package/dist/{ConnectedCallRoom-V3UUSCMA.cjs → ConnectedCallRoom-GE2TMDIL.cjs} +14 -14
- package/dist/{ConnectedCallRoom-V3UUSCMA.cjs.map → ConnectedCallRoom-GE2TMDIL.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-W3IDBOFA.js → ConnectedCallRoom-RJZT5ZUA.js} +13 -13
- package/dist/{ConnectedCallRoom-W3IDBOFA.js.map → ConnectedCallRoom-RJZT5ZUA.js.map} +1 -1
- package/dist/{ConnectedDocumentViewer-DXBTO2K6.cjs → ConnectedDocumentViewer-2KDPYQDT.cjs} +22 -21
- package/dist/{ConnectedDocumentViewer-DXBTO2K6.cjs.map → ConnectedDocumentViewer-2KDPYQDT.cjs.map} +1 -1
- package/dist/{ConnectedDocumentViewer-S4TWI5ML.js → ConnectedDocumentViewer-GYLXZV72.js} +21 -20
- package/dist/{ConnectedDocumentViewer-S4TWI5ML.js.map → ConnectedDocumentViewer-GYLXZV72.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-XOUU4XE4.cjs → ConnectedNativeDocxComparison-2OC37MR5.cjs} +15 -15
- package/dist/ConnectedNativeDocxComparison-2OC37MR5.cjs.map +1 -0
- package/dist/{ConnectedNativeDocxComparison-4Q57CKP4.js → ConnectedNativeDocxComparison-7PD2LD7L.js} +14 -14
- package/dist/ConnectedNativeDocxComparison-7PD2LD7L.js.map +1 -0
- package/dist/{ConnectedNativeDocxEditor-EFEAU6CF.cjs → ConnectedNativeDocxEditor-FPIX7SWU.cjs} +15 -15
- package/dist/ConnectedNativeDocxEditor-FPIX7SWU.cjs.map +1 -0
- package/dist/{ConnectedNativeDocxEditor-4KXAQEBW.js → ConnectedNativeDocxEditor-UMENIC3E.js} +13 -13
- package/dist/ConnectedNativeDocxEditor-UMENIC3E.js.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-MWVDNPYF.cjs → ConnectedStreamedWordArtifact-3UZN4UHY.cjs} +15 -15
- package/dist/ConnectedStreamedWordArtifact-3UZN4UHY.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-MKEN2R7Y.js → ConnectedStreamedWordArtifact-K7HVTZIG.js} +14 -14
- package/dist/ConnectedStreamedWordArtifact-K7HVTZIG.js.map +1 -0
- package/dist/{DocumentReviewCard-RURBAILX.cjs → DocumentReviewCard-B3RRCJBD.cjs} +8 -8
- package/dist/{DocumentReviewCard-RURBAILX.cjs.map → DocumentReviewCard-B3RRCJBD.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-FHRCV7IB.js → DocumentReviewCard-RPETGTSK.js} +8 -8
- package/dist/{DocumentReviewCard-FHRCV7IB.js.map → DocumentReviewCard-RPETGTSK.js.map} +1 -1
- package/dist/{WorkspaceTableView-2AZRQUTW.cjs → WorkspaceTableView-2XRSJECY.cjs} +10 -10
- package/dist/{WorkspaceTableView-2AZRQUTW.cjs.map → WorkspaceTableView-2XRSJECY.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-7D6CO2NO.js → WorkspaceTableView-F4QG4226.js} +8 -8
- package/dist/{WorkspaceTableView-7D6CO2NO.js.map → WorkspaceTableView-F4QG4226.js.map} +1 -1
- package/dist/agents/index.cjs +344 -344
- package/dist/agents/index.js +8 -8
- package/dist/calls/index.cjs +2 -2
- package/dist/calls/index.js +2 -2
- package/dist/chat/index.cjs +167 -167
- package/dist/chat/index.js +10 -10
- package/dist/{chunk-MSY4JQPU.js → chunk-2N5G5WZ7.js} +3 -3
- package/dist/{chunk-MSY4JQPU.js.map → chunk-2N5G5WZ7.js.map} +1 -1
- package/dist/chunk-34HQO4ZQ.cjs +72 -0
- package/dist/chunk-34HQO4ZQ.cjs.map +1 -0
- package/dist/{chunk-EQ3WRY2N.js → chunk-3EWS6ECM.js} +9 -6
- package/dist/chunk-3EWS6ECM.js.map +1 -0
- package/dist/{chunk-Y564AOO6.js → chunk-6HMWZY3U.js} +3 -3
- package/dist/{chunk-Y564AOO6.js.map → chunk-6HMWZY3U.js.map} +1 -1
- package/dist/{chunk-FB6DTNMF.cjs → chunk-6TMA6MPT.cjs} +8 -8
- package/dist/{chunk-FB6DTNMF.cjs.map → chunk-6TMA6MPT.cjs.map} +1 -1
- package/dist/{chunk-JS7KJRKG.js → chunk-75Z5AUMM.js} +3 -3
- package/dist/{chunk-JS7KJRKG.js.map → chunk-75Z5AUMM.js.map} +1 -1
- package/dist/{chunk-4TCJDGIM.js → chunk-7EOO6ZCK.js} +3 -3
- package/dist/{chunk-4TCJDGIM.js.map → chunk-7EOO6ZCK.js.map} +1 -1
- package/dist/{chunk-AJCMN23Q.js → chunk-AGDOBXHY.js} +3 -3
- package/dist/{chunk-AJCMN23Q.js.map → chunk-AGDOBXHY.js.map} +1 -1
- package/dist/{chunk-W7B6VO7E.js → chunk-B63TSC3W.js} +97 -6
- package/dist/chunk-B63TSC3W.js.map +1 -0
- package/dist/{chunk-HC4GCNCQ.js → chunk-B7XMGAWP.js} +3 -32
- package/dist/chunk-B7XMGAWP.js.map +1 -0
- package/dist/{chunk-EQRSQZS5.cjs → chunk-BSITLJMQ.cjs} +4 -4
- package/dist/{chunk-EQRSQZS5.cjs.map → chunk-BSITLJMQ.cjs.map} +1 -1
- package/dist/{chunk-UJN3MBVO.js → chunk-CYECDWVY.js} +3 -3
- package/dist/{chunk-UJN3MBVO.js.map → chunk-CYECDWVY.js.map} +1 -1
- package/dist/{chunk-NTXOETH6.js → chunk-DP7XGB2D.js} +3 -3
- package/dist/{chunk-NTXOETH6.js.map → chunk-DP7XGB2D.js.map} +1 -1
- package/dist/{chunk-PFCTYQJH.cjs → chunk-DQ6PNJ6J.cjs} +3 -3
- package/dist/{chunk-PFCTYQJH.cjs.map → chunk-DQ6PNJ6J.cjs.map} +1 -1
- package/dist/{chunk-XNOQVBU3.cjs → chunk-ECJOIWF4.cjs} +66 -28
- package/dist/chunk-ECJOIWF4.cjs.map +1 -0
- package/dist/{chunk-AMZNWDTN.cjs → chunk-GCMNPIKB.cjs} +6 -6
- package/dist/{chunk-AMZNWDTN.cjs.map → chunk-GCMNPIKB.cjs.map} +1 -1
- package/dist/{chunk-QV3YRFQS.js → chunk-GYONAUKV.js} +11 -11
- package/dist/{chunk-QV3YRFQS.js.map → chunk-GYONAUKV.js.map} +1 -1
- package/dist/chunk-IRPDQJNT.js +70 -0
- package/dist/chunk-IRPDQJNT.js.map +1 -0
- package/dist/{chunk-62DTFNIS.cjs → chunk-IZXJTVOS.cjs} +44 -7
- package/dist/chunk-IZXJTVOS.cjs.map +1 -0
- package/dist/{chunk-IHEXSVAI.cjs → chunk-J2A7LVTM.cjs} +70 -70
- package/dist/{chunk-IHEXSVAI.cjs.map → chunk-J2A7LVTM.cjs.map} +1 -1
- package/dist/{chunk-PFEXFTJ6.js → chunk-JLR67BW2.js} +47 -11
- package/dist/chunk-JLR67BW2.js.map +1 -0
- package/dist/{chunk-OMWOPRQR.cjs → chunk-JZ4LN4Q6.cjs} +3 -3
- package/dist/{chunk-OMWOPRQR.cjs.map → chunk-JZ4LN4Q6.cjs.map} +1 -1
- package/dist/{chunk-DDHEN3TC.cjs → chunk-K2UPRNQB.cjs} +3 -3
- package/dist/{chunk-DDHEN3TC.cjs.map → chunk-K2UPRNQB.cjs.map} +1 -1
- package/dist/{chunk-BFWAIOZK.js → chunk-L4JJKGUD.js} +3 -3
- package/dist/{chunk-BFWAIOZK.js.map → chunk-L4JJKGUD.js.map} +1 -1
- package/dist/{chunk-6YJLVAR6.cjs → chunk-LVC4ZGYW.cjs} +19 -19
- package/dist/{chunk-6YJLVAR6.cjs.map → chunk-LVC4ZGYW.cjs.map} +1 -1
- package/dist/{chunk-72VTGWZ5.cjs → chunk-LXKALYOS.cjs} +5 -5
- package/dist/{chunk-72VTGWZ5.cjs.map → chunk-LXKALYOS.cjs.map} +1 -1
- package/dist/{chunk-TM2D4XT4.cjs → chunk-MZZ3SBQL.cjs} +9 -6
- package/dist/chunk-MZZ3SBQL.cjs.map +1 -0
- package/dist/{chunk-RJ7753W5.js → chunk-NMU723IY.js} +5 -5
- package/dist/{chunk-RJ7753W5.js.map → chunk-NMU723IY.js.map} +1 -1
- package/dist/{chunk-BL6KFCZK.cjs → chunk-NUAG57PG.cjs} +18 -18
- package/dist/{chunk-BL6KFCZK.cjs.map → chunk-NUAG57PG.cjs.map} +1 -1
- package/dist/{chunk-FAYWEPDL.js → chunk-NXSPX7AP.js} +5 -5
- package/dist/{chunk-FAYWEPDL.js.map → chunk-NXSPX7AP.js.map} +1 -1
- package/dist/{chunk-N27CI32R.cjs → chunk-OM5IVNEW.cjs} +7 -7
- package/dist/{chunk-N27CI32R.cjs.map → chunk-OM5IVNEW.cjs.map} +1 -1
- package/dist/{chunk-I3BF67WQ.cjs → chunk-Q5GFVDFM.cjs} +9 -9
- package/dist/{chunk-I3BF67WQ.cjs.map → chunk-Q5GFVDFM.cjs.map} +1 -1
- package/dist/{chunk-PPOL2RVQ.js → chunk-QCDS3ZCF.js} +3 -3
- package/dist/{chunk-PPOL2RVQ.js.map → chunk-QCDS3ZCF.js.map} +1 -1
- package/dist/{chunk-VEMJON3H.cjs → chunk-QUTIWGWO.cjs} +3 -3
- package/dist/{chunk-VEMJON3H.cjs.map → chunk-QUTIWGWO.cjs.map} +1 -1
- package/dist/{chunk-TUXGAGPX.js → chunk-R6UKY6NA.js} +7 -7
- package/dist/{chunk-TUXGAGPX.js.map → chunk-R6UKY6NA.js.map} +1 -1
- package/dist/{chunk-EANS63YE.js → chunk-RGRQWMTF.js} +43 -6
- package/dist/chunk-RGRQWMTF.js.map +1 -0
- package/dist/{chunk-HWT2IHT4.js → chunk-S45JNJK7.js} +3 -3
- package/dist/{chunk-HWT2IHT4.js.map → chunk-S45JNJK7.js.map} +1 -1
- package/dist/{chunk-WH2BIMAZ.js → chunk-SBVOYSOO.js} +3 -3
- package/dist/{chunk-WH2BIMAZ.js.map → chunk-SBVOYSOO.js.map} +1 -1
- package/dist/chunk-SUVMOGTC.js +132 -0
- package/dist/chunk-SUVMOGTC.js.map +1 -0
- package/dist/chunk-TAVQOU3M.cjs +137 -0
- package/dist/chunk-TAVQOU3M.cjs.map +1 -0
- package/dist/{chunk-VO3VUC44.cjs → chunk-TFTGDUE4.cjs} +27 -27
- package/dist/{chunk-VO3VUC44.cjs.map → chunk-TFTGDUE4.cjs.map} +1 -1
- package/dist/{chunk-OXDKLA47.cjs → chunk-TX4CIWH5.cjs} +97 -4
- package/dist/chunk-TX4CIWH5.cjs.map +1 -0
- package/dist/{chunk-Q3SG3BWO.js → chunk-UIUWCTIZ.js} +3 -3
- package/dist/{chunk-Q3SG3BWO.js.map → chunk-UIUWCTIZ.js.map} +1 -1
- package/dist/{chunk-HPA4XNIC.js → chunk-UM543YBU.js} +3 -3
- package/dist/{chunk-HPA4XNIC.js.map → chunk-UM543YBU.js.map} +1 -1
- package/dist/{chunk-T6C5Z4CS.cjs → chunk-UR3MPRJA.cjs} +4 -4
- package/dist/{chunk-T6C5Z4CS.cjs.map → chunk-UR3MPRJA.cjs.map} +1 -1
- package/dist/{chunk-MQBEX5KB.js → chunk-VB7VPTMB.js} +13 -13
- package/dist/{chunk-MQBEX5KB.js.map → chunk-VB7VPTMB.js.map} +1 -1
- package/dist/{chunk-HA27GUIF.cjs → chunk-VTY44LKS.cjs} +12 -12
- package/dist/{chunk-HA27GUIF.cjs.map → chunk-VTY44LKS.cjs.map} +1 -1
- package/dist/{chunk-Z2KOIA5D.cjs → chunk-W427WPYF.cjs} +2 -32
- package/dist/chunk-W427WPYF.cjs.map +1 -0
- package/dist/{chunk-UPWVMG2X.cjs → chunk-XNZSVCNR.cjs} +4 -4
- package/dist/{chunk-UPWVMG2X.cjs.map → chunk-XNZSVCNR.cjs.map} +1 -1
- package/dist/{chunk-S65CHL3M.js → chunk-YA2H33OW.js} +5 -5
- package/dist/{chunk-S65CHL3M.js.map → chunk-YA2H33OW.js.map} +1 -1
- package/dist/{chunk-F72ZD5Q2.cjs → chunk-YD3RN2FY.cjs} +3 -3
- package/dist/{chunk-F72ZD5Q2.cjs.map → chunk-YD3RN2FY.cjs.map} +1 -1
- package/dist/{chunk-22UJW54C.js → chunk-YXX63XJD.js} +3 -3
- package/dist/{chunk-22UJW54C.js.map → chunk-YXX63XJD.js.map} +1 -1
- package/dist/{chunk-OS27G5ZI.js → chunk-Z3MWFHZC.js} +3 -3
- package/dist/{chunk-OS27G5ZI.js.map → chunk-Z3MWFHZC.js.map} +1 -1
- package/dist/{chunk-XUEJYHEP.cjs → chunk-ZDZY6OPL.cjs} +3 -3
- package/dist/{chunk-XUEJYHEP.cjs.map → chunk-ZDZY6OPL.cjs.map} +1 -1
- package/dist/{chunk-YWBIOI6M.cjs → chunk-ZQDJRROK.cjs} +26 -26
- package/dist/{chunk-YWBIOI6M.cjs.map → chunk-ZQDJRROK.cjs.map} +1 -1
- package/dist/{chunk-4QDJQC5I.cjs → chunk-ZTTR5MMZ.cjs} +10 -10
- package/dist/{chunk-4QDJQC5I.cjs.map → chunk-ZTTR5MMZ.cjs.map} +1 -1
- package/dist/collaboration/index.cjs +9 -9
- package/dist/collaboration/index.js +1 -1
- package/dist/components/Banner.d.ts +9 -3
- package/dist/components/ErrorBoundary.d.ts +16 -1
- package/dist/components/LoadingIndicator.d.ts +14 -1
- package/dist/connect/docx.cjs +17 -17
- package/dist/connect/docx.js +13 -13
- package/dist/connect/index.cjs +843 -843
- package/dist/connect/index.js +45 -45
- package/dist/connect/viewer.cjs +21 -20
- package/dist/connect/viewer.js +19 -18
- package/dist/facts/index.cjs +57 -57
- package/dist/facts/index.js +5 -5
- package/dist/files/index.cjs +2 -2
- package/dist/files/index.js +2 -2
- package/dist/home/index.cjs +29 -29
- package/dist/home/index.js +4 -4
- package/dist/index.cjs +806 -789
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +28 -27
- package/dist/index.js.map +1 -1
- package/dist/settings/ErrorDialog.d.ts +21 -1
- package/dist/settings/error-report.d.ts +26 -0
- package/dist/settings/index.cjs +163 -155
- package/dist/settings/index.d.ts +2 -1
- package/dist/settings/index.js +3 -3
- package/dist/shell/AccountBanners.d.ts +22 -0
- package/dist/shell/Toaster.d.ts +24 -2
- package/dist/shell/index.cjs +91 -74
- package/dist/shell/index.d.ts +2 -1
- package/dist/shell/index.js +7 -6
- package/dist/site/index.cjs +55 -54
- package/dist/site/index.js +3 -2
- package/dist/studio/index.cjs +56 -55
- package/dist/studio/index.cjs.map +1 -1
- package/dist/studio/index.js +9 -8
- package/dist/studio/index.js.map +1 -1
- package/dist/workflow-canvas/index.cjs +44 -44
- package/dist/workflow-canvas/index.js +19 -19
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/src/blocks.css +83 -2
- package/dist/ConnectedNativeDocxComparison-4Q57CKP4.js.map +0 -1
- package/dist/ConnectedNativeDocxComparison-XOUU4XE4.cjs.map +0 -1
- package/dist/ConnectedNativeDocxEditor-4KXAQEBW.js.map +0 -1
- package/dist/ConnectedNativeDocxEditor-EFEAU6CF.cjs.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-MKEN2R7Y.js.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-MWVDNPYF.cjs.map +0 -1
- package/dist/chunk-62DTFNIS.cjs.map +0 -1
- package/dist/chunk-EANS63YE.js.map +0 -1
- package/dist/chunk-EQ3WRY2N.js.map +0 -1
- package/dist/chunk-HC4GCNCQ.js.map +0 -1
- package/dist/chunk-OXDKLA47.cjs.map +0 -1
- package/dist/chunk-PFEXFTJ6.js.map +0 -1
- package/dist/chunk-SOZQJTHB.js +0 -34
- package/dist/chunk-SOZQJTHB.js.map +0 -1
- package/dist/chunk-TM2D4XT4.cjs.map +0 -1
- package/dist/chunk-VTQOMJW7.cjs +0 -37
- package/dist/chunk-VTQOMJW7.cjs.map +0 -1
- package/dist/chunk-W7B6VO7E.js.map +0 -1
- package/dist/chunk-XNOQVBU3.cjs.map +0 -1
- package/dist/chunk-Z2KOIA5D.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/theme/store.ts","../src/components/SectionHeading.tsx","../src/components/assetResolver.tsx","../src/components/BlockImage.tsx","../src/components/Hero.tsx","../src/components/blockLink.tsx","../src/components/FeatureGrid.tsx","../src/components/Testimonial.tsx","../src/components/CTABanner.tsx","../src/components/LogoCloud.tsx","../src/components/FAQ.tsx","../src/components/RichTextBlock.tsx","../src/components/AvatarBlock.tsx","../src/components/Navbar.tsx","../src/components/Footer.tsx","../src/components/ListBlock.tsx","../src/components/Columns.tsx","../src/components/Spacer.tsx","../src/components/Container.tsx","../src/components/PricingTable.tsx","../src/components/Tabs.tsx","../src/components/Accordion.tsx","../src/components/Gallery.tsx","../src/components/VideoEmbed.tsx","../src/components/ContactForm.tsx","../src/components/Banner.tsx","../src/components/MediaText.tsx","../src/components/editorial/tone.ts","../src/components/editorial/EditorialProfileCard.tsx","../src/components/TeamGrid.tsx","../src/components/Steps.tsx","../src/components/TestimonialGrid.tsx"],"names":["jsx","cn","jsxs","Fragment","Card","TONE_SURFACE","Button","ArrowRight","Avatar","AvatarImage","AvatarFallback","SIZE","useState","ChevronDown","COLS","ASPECT","createContext","useContext","Quote"],"mappings":"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","file":"chunk-HC4GCNCQ.js","sourcesContent":["/**\n * The shared theme store factory. A host calls {@link createThemeStore} once\n * with its token catalog, default values and presets; the returned bundle (a\n * zustand hook + metadata) is the single source of truth consumed by every\n * theme surface (the back-office builder panel and the studio drawer), so the\n * token model, presets and apply logic live in exactly one place.\n */\nimport { create, type UseBoundStore, type StoreApi } from 'zustand'\nimport { persist } from 'zustand/middleware'\nimport {\n applyThemeVars,\n type ColorToken,\n type ThemeEmitMode,\n type ThemeFonts,\n type ThemePreset,\n type ThemeTokens,\n} from './tokens'\nimport { getFontPairing } from './fontPairings'\n\nexport interface ThemeState extends ThemeTokens {\n activePresetId: string | null\n setColor: (key: string, value: string) => void\n setFont: (which: keyof ThemeFonts, value: string) => void\n /** Apply a curated pairing, setting the display and body faces together. */\n setFontPairing: (pairingId: string) => void\n setRadius: (radius: number) => void\n applyPreset: (presetId: string) => void\n reset: () => void\n /** Snapshot of the editable tokens (for export / live apply). */\n snapshot: () => ThemeTokens\n}\n\nexport interface ThemeStoreConfig {\n /** The editable token catalog (keys + labels + groups). */\n tokens: ColorToken[]\n /** Group id → heading, for the grouped panel layout. */\n groupLabels: Record<string, string>\n /** Shipped defaults (the host's brand values). */\n defaultTheme: ThemeTokens\n /** Starting points the user can apply then fine-tune. */\n presets: ThemePreset[]\n /** localStorage key for persistence (namespaced per host). */\n storageKey: string\n /**\n * How edits are written onto the document. Defaults to `'flat'` (inline\n * `--color-*`). `'cssVars'` emits raw HSL-triplet vars into an injected\n * `<style>` so an app's own `hsl(var(--x))` indirection + `.dark` variant\n * survive. See {@link applyThemeVars}.\n */\n mode?: ThemeEmitMode\n /**\n * `cssVars` mode only: the dark-variant colour values keyed by token key,\n * emitted under `:root.dark`. Required (per editable token) for any host with a\n * dark mode, otherwise a light-token override leaks into dark.\n */\n darkColors?: Record<string, string>\n}\n\nexport interface ThemeBundle extends ThemeStoreConfig {\n useStore: UseBoundStore<StoreApi<ThemeState>>\n}\n\n/** Build a brand-specific theme store bundle. */\nexport function createThemeStore(config: ThemeStoreConfig): ThemeBundle {\n const { defaultTheme, presets, storageKey } = config\n\n const useStore = create<ThemeState>()(\n persist(\n (set, get) => ({\n ...defaultTheme,\n activePresetId: presets[0]?.id ?? null,\n\n setColor: (key, value) =>\n set((s) => ({ colors: { ...s.colors, [key]: value }, activePresetId: null })),\n\n setFont: (which, value) =>\n set((s) => ({ fonts: { ...s.fonts, [which]: value }, activePresetId: null })),\n\n // A pairing sets both faces together — that is the whole point of it.\n // Unknown ids are ignored rather than clearing the typography.\n setFontPairing: (pairingId) => {\n const pairing = getFontPairing(pairingId)\n if (!pairing) return\n set({ fonts: { display: pairing.display, sans: pairing.sans } })\n },\n\n setRadius: (radius) => set({ radius, activePresetId: null }),\n\n applyPreset: (presetId) => {\n const preset = presets.find((p) => p.id === presetId)\n if (!preset) return\n set({\n colors: { ...preset.tokens.colors },\n fonts: { ...preset.tokens.fonts },\n radius: preset.tokens.radius,\n activePresetId: presetId,\n })\n },\n\n reset: () =>\n set({\n colors: { ...defaultTheme.colors },\n fonts: { ...defaultTheme.fonts },\n radius: defaultTheme.radius,\n activePresetId: presets[0]?.id ?? null,\n }),\n\n snapshot: () => {\n const { colors, fonts, radius } = get()\n return { colors, fonts, radius }\n },\n }),\n { name: storageKey }\n )\n )\n\n return { ...config, useStore }\n}\n\n/** Apply a bundle's current store to the live document, honouring its emit mode. */\nexport function applyStoredTheme(bundle: ThemeBundle): void {\n const { colors, fonts, radius } = bundle.useStore.getState()\n applyThemeVars({ colors, fonts, radius }, { mode: bundle.mode, dark: bundle.darkColors })\n}\n","import { cn } from '@arbidocs/react/ui'\n\n/** Editorial heading block for marketing sections: eyebrow + title + lead. */\nexport function SectionHeading({\n eyebrow,\n title,\n lead,\n align = 'left',\n className,\n invert,\n eyebrowClassName,\n}: {\n eyebrow?: string\n title: string\n lead?: string\n align?: 'left' | 'center'\n className?: string\n invert?: boolean\n /** Override the eyebrow styling (e.g. a host brand accent). Default: token classes. */\n eyebrowClassName?: string\n}) {\n return (\n <div className={cn('max-w-3xl', align === 'center' && 'mx-auto text-center', className)}>\n {eyebrow && (\n <p\n className={cn(\n 'mb-3 text-xs font-semibold uppercase tracking-wider',\n eyebrowClassName ?? (invert ? 'text-background/60' : 'text-muted-foreground')\n )}\n >\n {eyebrow}\n </p>\n )}\n <h2\n className={cn(\n 'font-display text-3xl font-semibold tracking-tight text-balance sm:text-4xl',\n invert ? 'text-background' : 'text-foreground'\n )}\n >\n {title}\n </h2>\n {lead && (\n <p\n className={cn(\n 'mt-4 text-lg leading-relaxed',\n invert ? 'text-background/70' : 'text-muted-foreground'\n )}\n >\n {lead}\n </p>\n )}\n </div>\n )\n}\n","/**\n * Asset resolution for the editor canvas — the SDK-free half.\n *\n * An image block's stored `src` is one of three things: a **workspace asset ref**\n * while authoring (an `asset:<docId>` string), a plain URL, or — once published —\n * an inlined `data:` URI (see the studio publish/materialize step). Only inside\n * the authenticated Studio can an asset ref be resolved to displayable bytes (via\n * the thumbnail endpoint).\n *\n * So the resolver is **injected, not imported**. This module knows only that\n * *some* component can turn a `docId` into pixels; the Studio supplies\n * `AssetThumb` from `./assetImage`, which is where the SDK and React Query live.\n * Everywhere else — the pure coverage guard, the unauthenticated public renderer,\n * a marketing site importing `@arbidocs/blocks/site` — the context is empty and\n * `src` renders verbatim. Importing the resolver here instead would drag the SDK\n * into every website block: a dead code path still pins the module graph, because\n * neither kit package declares `sideEffects`.\n *\n * Refs are **explicitly prefixed** (`asset:`) rather than bare ext_ids so the\n * publish walk can distinguish an image source from any other token-like prop\n * (block ids, `\"left\"`, icon names…) with zero false positives.\n */\nimport { createContext, useContext, type ComponentType, type ReactNode } from 'react'\n\n/** Marks a stored image value as a workspace asset ref rather than a URL. */\nexport const ASSET_REF_PREFIX = 'asset:'\n\n/** Wrap a workspace document ext_id as a storable asset ref. */\nexport function asAssetRef(docId: string): string {\n return `${ASSET_REF_PREFIX}${docId}`\n}\n\n/** The workspace document ext_id behind an asset ref (`asset:doc-1` → `doc-1`). */\nexport function assetRefId(src: string): string {\n return src.slice(ASSET_REF_PREFIX.length)\n}\n\n/** What a resolver component receives. `AssetThumb` in `./assetImage` implements it. */\nexport interface AssetRenderProps {\n docId: string\n alt?: string\n className?: string\n testId?: string\n}\n\n/** Renders a workspace asset ext_id as an image. */\nexport type AssetRenderer = ComponentType<AssetRenderProps>\n\n/**\n * The injected resolver, or `null` where asset refs cannot be resolved (the\n * public renderer, tests, any unauthenticated page).\n */\nconst AssetResolverContext = createContext<AssetRenderer | null>(null)\n\nexport function AssetResolverProvider({\n render,\n children,\n}: {\n /** Typically `AssetThumb` from `./assetImage`. */\n render: AssetRenderer\n children: ReactNode\n}) {\n return <AssetResolverContext.Provider value={render}>{children}</AssetResolverContext.Provider>\n}\n\n/** The active resolver, or `null` when asset refs must render verbatim. */\nexport function useAssetRenderer(): AssetRenderer | null {\n return useContext(AssetResolverContext)\n}\n\n/** True only where a bare asset ext_id can be resolved (the authenticated Studio). */\nexport function useAssetResolverActive(): boolean {\n return useAssetRenderer() !== null\n}\n\n/**\n * Is `src` a workspace asset ref (`asset:<docId>`) rather than an already-\n * renderable URL / `data:` URI? Only prefixed refs need resolution.\n */\nexport function isAssetRef(src: string | undefined): src is string {\n return !!src && src.startsWith(ASSET_REF_PREFIX)\n}\n","import { ImageIcon } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { assetRefId, isAssetRef, useAssetRenderer } from './assetResolver'\n\ntype BlockImageAspect = '16:9' | '4:3' | '1:1' | '21:9' | '4:5'\ntype BlockImageRounded = 'none' | 'md' | 'lg' | 'full'\n\nexport interface BlockImageProps {\n src?: string\n alt?: string\n aspect?: BlockImageAspect\n rounded?: BlockImageRounded\n /** Editorial \"photo frame\" treatment: a matte border ring + soft shadow. */\n framed?: boolean\n className?: string\n testId?: string\n}\n\nconst ASPECT: Record<BlockImageAspect, string> = {\n '16:9': 'aspect-video',\n '4:3': 'aspect-[4/3]',\n '1:1': 'aspect-square',\n '21:9': 'aspect-[21/9]',\n '4:5': 'aspect-[4/5]',\n}\n\nconst ROUNDED: Record<BlockImageRounded, string> = {\n none: 'rounded-none',\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n}\n\n/**\n * Image with a graceful, self-contained fallback: when `src` is empty it renders a\n * token-clean gradient placeholder (no network needed) so the palette always looks\n * good in the editor and in demos. Token-only classes so it themes per host.\n */\nexport function BlockImage({\n src,\n alt = '',\n aspect = '16:9',\n rounded = 'lg',\n framed,\n className,\n testId,\n}: BlockImageProps) {\n const shape = cn(\n ASPECT[aspect] ?? ASPECT['16:9'],\n ROUNDED[rounded] ?? ROUNDED.lg,\n framed && 'ring-1 ring-border shadow-xl'\n )\n // In the Studio a resolver is injected and an `asset:` ref resolves to its\n // thumbnail; elsewhere there is none, and `src` is already a URL / data-URI\n // that renders verbatim (the publish step inlines refs).\n const AssetRenderer = useAssetRenderer()\n if (AssetRenderer && isAssetRef(src)) {\n return (\n <AssetRenderer\n docId={assetRefId(src)}\n alt={alt}\n className={cn('w-full object-cover', shape, className)}\n testId={testId}\n />\n )\n }\n if (src && !isAssetRef(src)) {\n return (\n <img\n src={src}\n alt={alt}\n className={cn('w-full object-cover', shape, className)}\n data-testid={testId}\n />\n )\n }\n return (\n <div\n className={cn(\n 'flex w-full items-center justify-center overflow-hidden border border-border',\n 'bg-gradient-to-br from-muted via-card to-accent text-muted-foreground',\n shape,\n className\n )}\n data-testid={testId}\n aria-label={alt || 'Image placeholder'}\n role=\"img\"\n >\n <ImageIcon className=\"size-8 opacity-60\" />\n </div>\n )\n}\n","import type { CSSProperties, ReactNode } from 'react'\nimport { ArrowRight } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { BlockImage } from './BlockImage'\nimport type { BlockLinkComponent } from './blockLink'\n\ntype HeroTone = 'default' | 'muted' | 'ink'\ntype HeroAlign = 'left' | 'center'\n\nexport interface HeroCta {\n label?: string\n href?: string\n}\n\nexport interface HeroProps {\n eyebrow?: ReactNode\n /** Text (with optional `emphasis`) or any node. */\n title: ReactNode\n /** A word/phrase within a string `title` to accent (rendered in the primary colour). */\n emphasis?: string\n subtitle?: ReactNode\n /** Small print under the buttons (a trust line, a note). */\n caption?: ReactNode\n /** Router link for the CTAs (default: plain anchors). */\n linkComponent?: BlockLinkComponent\n primaryCta?: HeroCta\n secondaryCta?: HeroCta\n align?: HeroAlign\n tone?: HeroTone\n /** Side visual (ignored when `backgroundImage` is set). */\n imageUrl?: string\n /** Full-bleed background image URL/data-URI. Turns the hero into a cover band. */\n backgroundImage?: string\n /** Darkening scrim over the background image, for legible copy. Default true. */\n overlay?: boolean\n /** Override the eyebrow styling (e.g. a host brand accent). Default: token classes. */\n eyebrowClassName?: string\n testId?: string\n}\n\nconst TONE_SURFACE: Record<HeroTone, string> = {\n default: 'bg-background text-foreground',\n muted: 'bg-muted text-foreground',\n ink: 'bg-foreground text-background',\n}\n\n/** Highlight each occurrence of `emphasis` inside `title` with the accent colour. */\nfunction renderTitle(title: ReactNode, emphasis?: string): ReactNode {\n if (typeof title !== 'string' || !emphasis || !title.includes(emphasis)) return title\n const parts = title.split(emphasis)\n return parts.map((part, i) => (\n <span key={i}>\n {part}\n {i < parts.length - 1 && <span className=\"text-primary\">{emphasis}</span>}\n </span>\n ))\n}\n\nfunction renderLink(Link: BlockLinkComponent | undefined, href: string, children: ReactNode) {\n return Link ? <Link href={href}>{children}</Link> : <a href={href}>{children}</a>\n}\n\n/** Editorial marketing hero: eyebrow, headline, subtitle, two CTAs and a visual. */\nexport function Hero({\n eyebrow,\n title,\n emphasis,\n subtitle,\n caption,\n linkComponent: Link,\n primaryCta,\n secondaryCta,\n align = 'left',\n tone = 'default',\n imageUrl,\n backgroundImage,\n overlay = true,\n eyebrowClassName,\n testId,\n}: HeroProps) {\n // Over a background image the surface is dark, so copy reads on-background.\n const onDark = Boolean(backgroundImage) || tone === 'ink'\n const subtle = onDark ? 'text-background/70' : 'text-muted-foreground'\n const eyebrowClass = eyebrowClassName ?? (onDark ? 'text-background/60' : 'text-muted-foreground')\n const centered = align === 'center' || Boolean(backgroundImage)\n\n const heading = renderTitle(title, emphasis)\n\n const copy = (\n <div\n className={cn(\n 'max-w-2xl',\n centered && 'mx-auto text-center',\n backgroundImage && 'text-background'\n )}\n >\n {eyebrow && (\n <p className={cn('mb-4 text-sm font-semibold uppercase tracking-wider', eyebrowClass)}>\n {eyebrow}\n </p>\n )}\n <h1 className=\"text-4xl font-semibold tracking-tight text-balance sm:text-5xl\">{heading}</h1>\n {subtitle && <p className={cn('mt-6 text-lg leading-relaxed', subtle)}>{subtitle}</p>}\n {(primaryCta?.label || secondaryCta?.label) && (\n <div\n className={cn('mt-8 flex flex-col gap-3 sm:flex-row', centered && 'sm:justify-center')}\n >\n {primaryCta?.label && (\n <Button asChild size=\"lg\">\n {renderLink(\n Link,\n primaryCta.href || '#',\n <>\n {primaryCta.label}\n <ArrowRight className=\"size-4\" />\n </>\n )}\n </Button>\n )}\n {secondaryCta?.label && (\n <Button\n asChild\n size=\"lg\"\n variant=\"outline\"\n className={cn(\n onDark &&\n 'border-background/35 bg-transparent text-background hover:bg-background/10 hover:text-background'\n )}\n >\n {renderLink(Link, secondaryCta.href || '#', secondaryCta.label)}\n </Button>\n )}\n </div>\n )}\n {caption && <div className={cn('mt-4 text-sm', subtle)}>{caption}</div>}\n </div>\n )\n\n // Full-bleed cover hero: background image + optional scrim + centered copy.\n if (backgroundImage) {\n const bgStyle: CSSProperties = {\n backgroundImage: `url(\"${backgroundImage}\")`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }\n return (\n <section\n className=\"relative isolate overflow-hidden\"\n style={bgStyle}\n data-testid={testId}\n data-bg={testId && `${testId}-bg`}\n >\n {overlay && <div className=\"absolute inset-0 bg-black/55\" aria-hidden />}\n <div className=\"relative mx-auto max-w-7xl px-5 py-28 lg:px-8 lg:py-36\">{copy}</div>\n </section>\n )\n }\n\n return (\n <section className={cn(TONE_SURFACE[tone] ?? TONE_SURFACE.default)} data-testid={testId}>\n <div className=\"mx-auto max-w-7xl px-5 py-20 lg:px-8 lg:py-28\">\n {centered ? (\n <div className=\"flex flex-col items-center gap-12\">\n {copy}\n {imageUrl && (\n <BlockImage\n src={imageUrl}\n aspect=\"16:9\"\n rounded=\"lg\"\n className=\"w-full max-w-4xl\"\n testId={testId && `${testId}-image`}\n />\n )}\n </div>\n ) : (\n <div className=\"grid items-center gap-12 lg:grid-cols-2\">\n {copy}\n <BlockImage\n src={imageUrl}\n aspect=\"4:5\"\n rounded=\"lg\"\n testId={testId && `${testId}-image`}\n />\n </div>\n )}\n </div>\n </section>\n )\n}\n","import type { AnchorHTMLAttributes, ComponentType, ReactNode } from 'react'\n\n/**\n * Firm-agnostic link injection for marketing blocks. A card that navigates to a\n * detail page renders an internal `<a href>` by default, but a consuming app can\n * inject its router's link (e.g. react-router's `Link`, adapted to `href`) via\n * `linkComponent` so navigation stays in-SPA. When no `href` is given the block\n * renders its children unwrapped, so this is fully opt-in and backward compatible.\n */\nexport type BlockLinkRenderProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> & {\n href: string\n className?: string\n children: ReactNode\n}\n\n/**\n * The host's link. Interactive blocks (nav rows, tiles, cards) pass anchor attributes beyond\n * `href` (`onClick`, `aria-current`, `data-*`, a `ref`), so an adapter should forward unknown\n * props to its anchor, as react-router's `Link` does.\n */\nexport type BlockLinkComponent = ComponentType<BlockLinkRenderProps>\n\nexport interface BlockLinkProps {\n href?: string\n linkComponent?: BlockLinkComponent\n className?: string\n children: ReactNode\n}\n\nexport function BlockLink({ href, linkComponent: Link, className, children }: BlockLinkProps) {\n if (!href) return <>{children}</>\n if (Link) {\n return (\n <Link href={href} className={className}>\n {children}\n </Link>\n )\n }\n return (\n <a href={href} className={className}>\n {children}\n </a>\n )\n}\n","import type { LucideIcon } from 'lucide-react'\nimport { Card, cn } from '@arbidocs/react/ui'\nimport { BlockLink, type BlockLinkComponent } from './blockLink'\n\nexport interface FeatureItem {\n icon?: LucideIcon\n title: string\n description?: string\n /** When set, the card becomes a link to this destination. */\n href?: string\n}\n\nexport interface FeatureGridProps {\n columns?: '2' | '3'\n items: FeatureItem[]\n /** Inject a router link (adapted to `href`) so linked cards navigate in-SPA. */\n linkComponent?: BlockLinkComponent\n testId?: string\n}\n\nconst COLS: Record<'2' | '3', string> = {\n '2': 'sm:grid-cols-2',\n '3': 'sm:grid-cols-2 lg:grid-cols-3',\n}\n\n/** Responsive grid of icon + title + description feature cards. */\nexport function FeatureGrid({ columns = '3', items, linkComponent, testId }: FeatureGridProps) {\n return (\n <div className={cn('grid gap-5', COLS[columns] ?? COLS['3'])} data-testid={testId}>\n {(items ?? []).map((item, i) => {\n const Icon = item.icon\n return (\n <BlockLink\n key={i}\n href={item.href}\n linkComponent={linkComponent}\n className={cn('block h-full', item.href && 'group')}\n >\n <Card\n variant=\"outline\"\n className={cn(\n 'h-full p-6',\n item.href && 'transition-colors group-hover:border-primary/40'\n )}\n data-testid={testId && `${testId}-item-${i}`}\n >\n {Icon && (\n <span className=\"mb-4 inline-flex size-10 items-center justify-center rounded-lg bg-primary/10 text-primary\">\n <Icon className=\"size-5\" />\n </span>\n )}\n <h3 className=\"text-lg font-semibold tracking-tight\">{item.title}</h3>\n {item.description && (\n <p className=\"mt-2 text-sm leading-relaxed text-muted-foreground\">\n {item.description}\n </p>\n )}\n </Card>\n </BlockLink>\n )\n })}\n </div>\n )\n}\n","import { Quote } from 'lucide-react'\nimport { Avatar, AvatarFallback, AvatarImage, Card } from '@arbidocs/react/ui'\nimport { initials } from '../lib/format'\n\nexport interface TestimonialProps {\n quote: string\n author?: string\n role?: string\n avatarUrl?: string\n testId?: string\n}\n\n/** A single pull-quote testimonial with an author and optional avatar. */\nexport function Testimonial({ quote, author, role, avatarUrl, testId }: TestimonialProps) {\n return (\n <Card variant=\"outline\" className=\"mx-auto max-w-3xl p-8 text-center\" data-testid={testId}>\n <Quote className=\"mx-auto size-8 text-primary/40\" aria-hidden />\n <blockquote className=\"mt-4 text-xl font-medium leading-relaxed text-balance\">\n {quote}\n </blockquote>\n {(author || avatarUrl) && (\n <div className=\"mt-6 flex items-center justify-center gap-3\">\n {(avatarUrl || author) && (\n <Avatar>\n {avatarUrl && <AvatarImage src={avatarUrl} alt={author ?? ''} />}\n <AvatarFallback>{initials(author || '?')}</AvatarFallback>\n </Avatar>\n )}\n <div className=\"text-left\">\n {author && <p className=\"text-sm font-semibold\">{author}</p>}\n {role && <p className=\"text-sm text-muted-foreground\">{role}</p>}\n </div>\n </div>\n )}\n </Card>\n )\n}\n","import type { CSSProperties } from 'react'\nimport { ArrowRight } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\n\ntype CTABannerTone = 'default' | 'muted' | 'ink'\n\nexport interface CTABannerProps {\n title: string\n subtitle?: string\n cta?: { label?: string; href?: string }\n tone?: CTABannerTone\n /** Full-bleed background image URL/data-URI. Overrides the tone surface. */\n backgroundImage?: string\n /** Darkening scrim over the background image. Default true. */\n overlay?: boolean\n testId?: string\n}\n\nconst TONE_SURFACE: Record<CTABannerTone, string> = {\n default: 'bg-primary text-primary-foreground',\n muted: 'bg-muted text-foreground',\n ink: 'bg-foreground text-background',\n}\n\n/** Full-width call-to-action banner. */\nexport function CTABanner({\n title,\n subtitle,\n cta,\n tone = 'default',\n backgroundImage,\n overlay = true,\n testId,\n}: CTABannerProps) {\n const onImage = Boolean(backgroundImage)\n const subtle = onImage\n ? 'text-white/80'\n : tone === 'default'\n ? 'text-primary-foreground/80'\n : tone === 'ink'\n ? 'text-background/70'\n : 'text-muted-foreground'\n const bgStyle: CSSProperties | undefined = backgroundImage\n ? {\n backgroundImage: `url(\"${backgroundImage}\")`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }\n : undefined\n return (\n <div\n className={cn(\n 'relative isolate overflow-hidden rounded-lg px-8 py-14 text-center',\n onImage ? 'text-white' : (TONE_SURFACE[tone] ?? TONE_SURFACE.default)\n )}\n style={bgStyle}\n data-testid={testId}\n >\n {onImage && overlay && <div className=\"absolute inset-0 bg-black/55\" aria-hidden />}\n <div className=\"relative\">\n <h2 className=\"text-3xl font-semibold tracking-tight text-balance sm:text-4xl\">{title}</h2>\n {subtitle && <p className={cn('mx-auto mt-4 max-w-2xl text-lg', subtle)}>{subtitle}</p>}\n {cta?.label && (\n <div className=\"mt-8\">\n <Button\n asChild\n size=\"lg\"\n variant={tone === 'default' && !onImage ? 'secondary' : 'default'}\n >\n <a href={cta.href || '#'}>\n {cta.label}\n <ArrowRight className=\"size-4\" />\n </a>\n </Button>\n </div>\n )}\n </div>\n </div>\n )\n}\n","export interface LogoItem {\n label: string\n}\n\nexport interface LogoCloudProps {\n items: LogoItem[]\n testId?: string\n}\n\n/**\n * Text-based \"logo\" wall — brand names rendered as muted pill marks. Self-contained\n * (no external images) so the palette looks complete offline.\n */\nexport function LogoCloud({ items, testId }: LogoCloudProps) {\n return (\n <div className=\"flex flex-wrap items-center justify-center gap-4\" data-testid={testId}>\n {(items ?? []).map((item, i) => (\n <span\n key={i}\n className=\"rounded-md border border-border bg-muted px-5 py-2.5 text-sm font-semibold uppercase tracking-wide text-muted-foreground\"\n data-testid={testId && `${testId}-item-${i}`}\n >\n {item.label}\n </span>\n ))}\n </div>\n )\n}\n","import { ChevronDown } from 'lucide-react'\n\nexport interface FaqItem {\n question: string\n answer?: string\n}\n\nexport interface FAQProps {\n items: FaqItem[]\n testId?: string\n}\n\n/**\n * Accessible disclosure list. Built on native `<details>`/`<summary>` so it works\n * without client state (correct in the Puck preview and static renders) and stays\n * keyboard-accessible. Token-only styling.\n */\nexport function FAQ({ items, testId }: FAQProps) {\n return (\n <div className=\"mx-auto max-w-3xl divide-y divide-border\" data-testid={testId}>\n {(items ?? []).map((item, i) => (\n <details key={i} className=\"group py-4\" data-testid={testId && `${testId}-item-${i}`}>\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-4 text-left text-base font-medium\">\n {item.question}\n <ChevronDown className=\"size-4 shrink-0 text-muted-foreground transition-transform group-open:rotate-180\" />\n </summary>\n {item.answer && (\n <p className=\"mt-3 text-sm leading-relaxed text-muted-foreground\">{item.answer}</p>\n )}\n </details>\n ))}\n </div>\n )\n}\n","import { AiMarkdown } from '@arbidocs/react/ui'\n\nexport interface RichTextBlockProps {\n content: string\n testId?: string\n}\n\n/**\n * Prose block. Reuses the shared markdown renderer (`AiMarkdown`) so long-form copy\n * gets the one house style for headings, lists, tables and emphasis — token-clean\n * and themeable per host.\n */\nexport function RichTextBlock({ content, testId }: RichTextBlockProps) {\n return (\n <div className=\"mx-auto max-w-3xl\" data-testid={testId}>\n <AiMarkdown>{content ?? ''}</AiMarkdown>\n </div>\n )\n}\n","import { Avatar, AvatarFallback, AvatarImage, cn } from '@arbidocs/react/ui'\nimport { initials } from '../lib/format'\n\ntype AvatarBlockSize = 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface AvatarBlockProps {\n src?: string\n name?: string\n size?: AvatarBlockSize\n testId?: string\n}\n\nconst SIZE: Record<AvatarBlockSize, string> = {\n sm: 'size-8 text-xs',\n md: 'size-10 text-sm',\n lg: 'size-14 text-base',\n xl: 'size-20 text-xl',\n}\n\n/** Avatar with an initials fallback when no image is supplied. */\nexport function AvatarBlock({ src, name = '', size = 'md', testId }: AvatarBlockProps) {\n return (\n <Avatar className={cn(SIZE[size] ?? SIZE.md)} data-testid={testId}>\n {src && <AvatarImage src={src} alt={name} />}\n <AvatarFallback className=\"font-semibold\">{initials(name || '?')}</AvatarFallback>\n </Avatar>\n )\n}\n","import { useState, type ReactNode } from 'react'\nimport { Menu, X } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport type { BlockLinkComponent } from './blockLink'\n\nexport interface NavLink {\n label: string\n href?: string\n}\n\nexport interface NavbarTestIds {\n /** Link `i` (default `{testId}-link-{i}`). */\n link: (index: number) => string\n cta: string\n menuButton: string\n menu: string\n}\n\nexport interface NavbarProps {\n /** Brand: text, or any node (logo + name). */\n brand: ReactNode\n /** Where the brand points. Omit for a non-link brand. */\n brandHref?: string\n links: NavLink[]\n cta?: { label?: string; href?: string }\n /** Replaces `cta` with any node (a button group, a user menu). */\n ctaSlot?: ReactNode\n /** Router link for the brand, links and CTA (default: plain anchors). */\n linkComponent?: BlockLinkComponent\n /** Replaces the default mobile menu body (the links plus the CTA). */\n mobileMenu?: ReactNode\n /** Labels of the mobile menu button. */\n labels?: { openMenu: string; closeMenu: string }\n testId?: string\n testIds?: Partial<NavbarTestIds>\n}\n\nconst DEFAULT_LABELS = { openMenu: 'Open menu', closeMenu: 'Close menu' }\n\n/** Marketing top navigation: brand, inline links, an optional CTA and a mobile menu. */\nexport function Navbar({\n brand,\n brandHref,\n links,\n cta,\n ctaSlot,\n linkComponent: Link,\n mobileMenu,\n labels,\n testId,\n testIds,\n}: NavbarProps) {\n const [isOpen, setIsOpen] = useState(false)\n const l = { ...DEFAULT_LABELS, ...labels }\n const items = links ?? []\n const linkId = (i: number) => testIds?.link?.(i) ?? (testId ? `${testId}-link-${i}` : undefined)\n const ctaId = testIds?.cta ?? (testId ? `${testId}-cta` : undefined)\n const menuId = testIds?.menu ?? (testId ? `${testId}-menu` : undefined)\n const menuButtonId = testIds?.menuButton ?? (testId ? `${testId}-menu-button` : undefined)\n\n const anchor = (href: string, className: string | undefined, children: ReactNode, id?: string) =>\n Link ? (\n <Link href={href} className={className} data-testid={id}>\n {children}\n </Link>\n ) : (\n <a href={href} className={className} data-testid={id}>\n {children}\n </a>\n )\n\n const linkClass =\n 'text-sm font-medium text-muted-foreground transition-colors hover:text-foreground'\n const brandNode = <span className=\"text-lg font-semibold tracking-tight\">{brand}</span>\n const ctaNode =\n ctaSlot ??\n (cta?.label && (\n <Button asChild size=\"sm\">\n {anchor(cta.href || '#', undefined, cta.label, ctaId)}\n </Button>\n ))\n\n return (\n <header className=\"border-b border-border bg-background\" data-testid={testId}>\n <nav className=\"mx-auto flex max-w-7xl items-center justify-between gap-6 px-5 py-4 lg:px-8\">\n {brandHref ? anchor(brandHref, undefined, brandNode) : brandNode}\n <div className=\"hidden items-center gap-6 md:flex\">\n {items.map((link, i) => (\n <span key={i}>{anchor(link.href || '#', linkClass, link.label, linkId(i))}</span>\n ))}\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"hidden md:block\">{ctaNode}</div>\n <button\n type=\"button\"\n className=\"rounded-md p-2 text-foreground hover:bg-muted md:hidden\"\n aria-expanded={isOpen}\n aria-label={isOpen ? l.closeMenu : l.openMenu}\n onClick={() => setIsOpen((open) => !open)}\n data-testid={menuButtonId}\n >\n {isOpen ? <X className=\"size-5\" /> : <Menu className=\"size-5\" />}\n </button>\n </div>\n </nav>\n {isOpen && (\n <div\n className=\"border-t border-border px-5 py-4 md:hidden\"\n data-slot=\"navbar-mobile-menu\"\n data-testid={menuId}\n >\n {mobileMenu ?? (\n <div className=\"flex flex-col gap-3\">\n {items.map((link, i) => (\n <span key={i}>{anchor(link.href || '#', linkClass, link.label)}</span>\n ))}\n {ctaNode}\n </div>\n )}\n </div>\n )}\n </header>\n )\n}\n","import type { ReactNode } from 'react'\nimport type { BlockLinkComponent } from './blockLink'\n\nexport interface FooterLink {\n label: string\n href?: string\n}\n\nexport interface FooterColumn {\n heading: string\n links: FooterLink[]\n}\n\nexport interface FooterProps {\n columns: FooterColumn[]\n copyright?: string\n /** Brand block (logo, name) above the columns. */\n brand?: ReactNode\n /** Short description under the brand. */\n blurb?: ReactNode\n /** Bottom row, right of the copyright: legal links, regulatory text, a language switch. */\n legal?: ReactNode\n /** Router link for the column links (default: plain anchors). */\n linkComponent?: BlockLinkComponent\n testId?: string\n}\n\n/** Site footer: optional brand and blurb, link columns, and a copyright and legal row. */\nexport function Footer({\n columns,\n copyright,\n brand,\n blurb,\n legal,\n linkComponent: Link,\n testId,\n}: FooterProps) {\n const linkClass = 'text-sm text-muted-foreground transition-colors hover:text-foreground'\n return (\n <footer className=\"border-t border-border bg-muted text-foreground\" data-testid={testId}>\n <div className=\"mx-auto max-w-7xl px-5 py-14 lg:px-8\">\n {(brand || blurb) && (\n <div className=\"mb-10 max-w-md\" data-slot=\"footer-brand\">\n {brand && <div className=\"text-lg font-semibold tracking-tight\">{brand}</div>}\n {blurb && <p className=\"mt-2 text-sm text-muted-foreground\">{blurb}</p>}\n </div>\n )}\n <div className=\"grid gap-8 sm:grid-cols-2 lg:grid-cols-4\">\n {(columns ?? []).map((col, i) => (\n <div key={i} data-testid={testId && `${testId}-col-${i}`}>\n <h3 className=\"text-sm font-semibold tracking-tight\">{col.heading}</h3>\n <ul className=\"mt-4 space-y-2\">\n {(col.links ?? []).map((link, j) => (\n <li key={j}>\n {Link ? (\n <Link href={link.href || '#'} className={linkClass}>\n {link.label}\n </Link>\n ) : (\n <a href={link.href || '#'} className={linkClass}>\n {link.label}\n </a>\n )}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n {(copyright || legal) && (\n <div className=\"mt-12 flex flex-col gap-3 border-t border-border pt-6 text-sm text-muted-foreground sm:flex-row sm:items-center sm:justify-between\">\n {copyright && <p>{copyright}</p>}\n {legal && <div data-slot=\"footer-legal\">{legal}</div>}\n </div>\n )}\n </div>\n </footer>\n )\n}\n","import { cn } from '@arbidocs/react/ui'\n\nexport interface ListItem {\n text: string\n}\n\nexport interface ListBlockProps {\n ordered?: boolean\n items: ListItem[]\n testId?: string\n}\n\n/** Ordered or unordered prose list. Token-clean. */\nexport function ListBlock({ ordered = false, items, testId }: ListBlockProps) {\n const list = items ?? []\n const className = cn(\n 'mx-auto max-w-3xl space-y-2 pl-5 text-foreground',\n ordered ? 'list-decimal' : 'list-disc'\n )\n const content = list.map((item, i) => (\n <li key={i} className=\"leading-relaxed marker:text-muted-foreground\">\n {item.text}\n </li>\n ))\n return ordered ? (\n <ol className={className} data-testid={testId}>\n {content}\n </ol>\n ) : (\n <ul className={className} data-testid={testId}>\n {content}\n </ul>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\ntype ColumnsCount = 2 | 3 | 4\ntype ColumnsGap = 'sm' | 'md' | 'lg'\n\nexport interface ColumnsProps {\n count?: ColumnsCount\n gap?: ColumnsGap\n columns: ReactNode[]\n testId?: string\n}\n\nconst GRID: Record<ColumnsCount, string> = {\n 2: 'sm:grid-cols-2',\n 3: 'sm:grid-cols-2 lg:grid-cols-3',\n 4: 'sm:grid-cols-2 lg:grid-cols-4',\n}\n\nconst GAP: Record<ColumnsGap, string> = {\n sm: 'gap-3',\n md: 'gap-6',\n lg: 'gap-10',\n}\n\n/** Responsive N-column row. Each column hosts a nested Puck slot. */\nexport function Columns({ count = 3, gap = 'md', columns, testId }: ColumnsProps) {\n return (\n <div\n className={cn('grid grid-cols-1', GRID[count] ?? GRID[3], GAP[gap] ?? GAP.md)}\n data-testid={testId}\n >\n {columns.map((col, i) => (\n <div key={i} data-testid={testId && `${testId}-col-${i}`}>\n {col}\n </div>\n ))}\n </div>\n )\n}\n","import { cn } from '@arbidocs/react/ui'\n\ntype SpacerSize = 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface SpacerProps {\n size?: SpacerSize\n testId?: string\n}\n\nconst SIZE: Record<SpacerSize, string> = {\n sm: 'h-4',\n md: 'h-8',\n lg: 'h-16',\n xl: 'h-24',\n}\n\n/** Vertical whitespace. */\nexport function Spacer({ size = 'md', testId }: SpacerProps) {\n return <div className={cn('w-full', SIZE[size] ?? SIZE.md)} data-testid={testId} aria-hidden />\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\ntype ContainerWidth = 'narrow' | 'default' | 'wide' | 'full'\ntype ContainerPadding = 'none' | 'sm' | 'md' | 'lg'\n\nexport interface ContainerProps {\n width?: ContainerWidth\n padding?: ContainerPadding\n children: ReactNode\n testId?: string\n}\n\nconst WIDTH: Record<ContainerWidth, string> = {\n narrow: 'max-w-3xl',\n default: 'max-w-5xl',\n wide: 'max-w-7xl',\n full: 'max-w-none',\n}\n\nconst PADDING: Record<ContainerPadding, string> = {\n none: 'px-0 py-0',\n sm: 'px-4 py-6',\n md: 'px-5 py-12 lg:px-8',\n lg: 'px-5 py-20 lg:px-8',\n}\n\n/** Max-width wrapper that centres and pads a nested Puck slot. */\nexport function Container({ width = 'default', padding = 'md', children, testId }: ContainerProps) {\n return (\n <div\n className={cn(\n 'mx-auto w-full',\n WIDTH[width] ?? WIDTH.default,\n PADDING[padding] ?? PADDING.md\n )}\n data-testid={testId}\n >\n {children}\n </div>\n )\n}\n","import { Check } from 'lucide-react'\nimport { Button, Card, cn } from '@arbidocs/react/ui'\n\nexport interface PricingPlan {\n name: string\n price: string\n period?: string\n description?: string\n features?: string[]\n cta?: { label?: string; href?: string }\n /** Highlight this plan as the recommended one. */\n featured?: boolean\n}\n\nexport interface PricingTableProps {\n plans: PricingPlan[]\n testId?: string\n}\n\n/** A row of pricing plan cards with feature lists and a CTA per plan. */\nexport function PricingTable({ plans, testId }: PricingTableProps) {\n return (\n <div\n className={cn('grid gap-6', (plans?.length ?? 0) >= 3 ? 'md:grid-cols-3' : 'sm:grid-cols-2')}\n data-testid={testId}\n >\n {(plans ?? []).map((plan, i) => (\n <Card\n key={i}\n variant={plan.featured ? 'elevated' : 'outline'}\n className={cn('flex h-full flex-col p-6', plan.featured && 'ring-2 ring-primary')}\n data-testid={testId && `${testId}-item-${i}`}\n >\n <h3 className=\"text-lg font-semibold tracking-tight\">{plan.name}</h3>\n <div className=\"mt-3 flex items-baseline gap-1\">\n <span className=\"text-3xl font-semibold tracking-tight\">{plan.price}</span>\n {plan.period && <span className=\"text-sm text-muted-foreground\">/{plan.period}</span>}\n </div>\n {plan.description && (\n <p className=\"mt-2 text-sm leading-relaxed text-muted-foreground\">{plan.description}</p>\n )}\n {plan.features && plan.features.length > 0 && (\n <ul className=\"mt-5 flex-1 space-y-2\">\n {plan.features.map((f, j) => (\n <li key={j} className=\"flex items-start gap-2 text-sm\">\n <Check className=\"mt-0.5 size-4 shrink-0 text-primary\" />\n <span>{f}</span>\n </li>\n ))}\n </ul>\n )}\n {plan.cta?.label && (\n <Button asChild className=\"mt-6 w-full\" variant={plan.featured ? 'default' : 'outline'}>\n <a href={plan.cta.href || '#'}>{plan.cta.label}</a>\n </Button>\n )}\n </Card>\n ))}\n </div>\n )\n}\n","import { useState, type ReactNode } from 'react'\nimport * as TabsPrimitive from '@radix-ui/react-tabs'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface TabItem {\n label: string\n content: ReactNode\n}\n\nexport interface TabsProps {\n items: TabItem[]\n testId?: string\n}\n\n/**\n * A tabbed panel: a row of tabs over the active tab's content. Radix Tabs gives the full WAI-ARIA\n * pattern: one tab stop, arrow keys / Home / End move between tabs, `aria-controls` and\n * `aria-labelledby` pair each tab with its panel.\n */\nexport function Tabs({ items, testId }: TabsProps) {\n const list = items ?? []\n const [active, setActive] = useState('0')\n const activeIndex = Math.min(Number(active), Math.max(list.length - 1, 0))\n return (\n <TabsPrimitive.Root value={String(activeIndex)} onValueChange={setActive} data-testid={testId}>\n <TabsPrimitive.List className=\"flex flex-wrap gap-1 border-b border-border\">\n {list.map((t, i) => (\n <TabsPrimitive.Trigger\n key={i}\n value={String(i)}\n className={cn(\n '-mb-px border-b-2 px-4 py-2 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11',\n i === activeIndex\n ? 'border-primary text-foreground'\n : 'border-transparent text-muted-foreground hover:text-foreground'\n )}\n data-testid={testId && `${testId}-tab-${i}`}\n >\n {t.label}\n </TabsPrimitive.Trigger>\n ))}\n </TabsPrimitive.List>\n {list.map((t, i) => (\n <TabsPrimitive.Content\n key={i}\n value={String(i)}\n className=\"pt-5 text-sm leading-relaxed text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n data-testid={i === activeIndex ? testId && `${testId}-panel` : undefined}\n >\n {t.content}\n </TabsPrimitive.Content>\n ))}\n </TabsPrimitive.Root>\n )\n}\n","import { useState } from 'react'\nimport { ChevronDown } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface AccordionItem {\n title: string\n content: string\n}\n\nexport interface AccordionProps {\n items: AccordionItem[]\n /** Allow multiple panels open at once. Default false (single-open). */\n allowMultiple?: boolean\n testId?: string\n}\n\n/** A stack of collapsible title/content panels. */\nexport function Accordion({ items, allowMultiple = false, testId }: AccordionProps) {\n const [open, setOpen] = useState<number[]>([])\n const toggle = (i: number) =>\n setOpen((prev) =>\n prev.includes(i) ? prev.filter((n) => n !== i) : allowMultiple ? [...prev, i] : [i]\n )\n return (\n <div className=\"divide-y divide-border border-y border-border\" data-testid={testId}>\n {(items ?? []).map((item, i) => {\n const isOpen = open.includes(i)\n return (\n <div key={i} data-testid={testId && `${testId}-item-${i}`}>\n <button\n type=\"button\"\n aria-expanded={isOpen}\n onClick={() => toggle(i)}\n className=\"flex w-full items-center justify-between gap-4 py-4 text-left text-base font-medium\"\n data-testid={testId && `${testId}-trigger-${i}`}\n >\n {item.title}\n <ChevronDown\n className={cn('size-4 shrink-0 transition-transform', isOpen && 'rotate-180')}\n />\n </button>\n {isOpen && (\n <p\n className=\"pb-4 text-sm leading-relaxed text-muted-foreground\"\n data-testid={testId && `${testId}-content-${i}`}\n >\n {item.content}\n </p>\n )}\n </div>\n )\n })}\n </div>\n )\n}\n","import { cn } from '@arbidocs/react/ui'\nimport { BlockImage, type BlockImageProps } from './BlockImage'\n\nexport interface GalleryImage {\n src?: string\n alt?: string\n caption?: string\n}\n\nexport interface GalleryProps {\n images: GalleryImage[]\n columns?: '2' | '3' | '4'\n aspect?: BlockImageProps['aspect']\n rounded?: BlockImageProps['rounded']\n testId?: string\n}\n\nconst COLS: Record<'2' | '3' | '4', string> = {\n '2': 'grid-cols-2',\n '3': 'grid-cols-2 sm:grid-cols-3',\n '4': 'grid-cols-2 sm:grid-cols-4',\n}\n\n/** A responsive image grid. Each tile previews via BlockImage with a caption. */\nexport function Gallery({\n images,\n columns = '3',\n aspect = '1:1',\n rounded = 'lg',\n testId,\n}: GalleryProps) {\n return (\n <div className={cn('grid gap-4', COLS[columns] ?? COLS['3'])} data-testid={testId}>\n {(images ?? []).map((img, i) => (\n <figure key={i} data-testid={testId && `${testId}-item-${i}`}>\n <BlockImage\n src={img.src}\n alt={img.alt}\n aspect={aspect}\n rounded={rounded}\n testId={testId && `${testId}-item-${i}-image`}\n />\n {img.caption && (\n <figcaption className=\"mt-1.5 text-xs text-muted-foreground\">{img.caption}</figcaption>\n )}\n </figure>\n ))}\n </div>\n )\n}\n","import { cn } from '@arbidocs/react/ui'\n\nexport type VideoAspect = '16:9' | '4:3' | '1:1'\n\nexport interface VideoEmbedProps {\n /** A YouTube / Vimeo / Loom page URL, or a direct video file URL. */\n url: string\n title?: string\n aspect?: VideoAspect\n rounded?: boolean\n testId?: string\n}\n\nconst ASPECT: Record<VideoAspect, string> = {\n '16:9': 'aspect-video',\n '4:3': 'aspect-[4/3]',\n '1:1': 'aspect-square',\n}\n\n/**\n * Resolve a shareable video URL to an embeddable iframe src. Supports YouTube,\n * Vimeo and Loom; returns null for anything else (rendered as a `<video>`).\n */\nexport function toEmbedUrl(url: string): string | null {\n if (!url) return null\n const yt = url.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/|youtube\\.com\\/embed\\/)([\\w-]{11})/)\n if (yt) return `https://www.youtube.com/embed/${yt[1]}`\n const vimeo = url.match(/vimeo\\.com\\/(?:video\\/)?(\\d+)/)\n if (vimeo) return `https://player.vimeo.com/video/${vimeo[1]}`\n const loom = url.match(/loom\\.com\\/(?:share|embed)\\/([\\w-]+)/)\n if (loom) return `https://www.loom.com/embed/${loom[1]}`\n return null\n}\n\n/** Embed a video from a YouTube/Vimeo/Loom link or a direct file, in a set aspect. */\nexport function VideoEmbed({\n url,\n title,\n aspect = '16:9',\n rounded = true,\n testId,\n}: VideoEmbedProps) {\n const embed = toEmbedUrl(url)\n const frame = cn(\n 'w-full overflow-hidden border border-border bg-muted',\n ASPECT[aspect] ?? ASPECT['16:9'],\n rounded && 'rounded-lg'\n )\n return (\n <div className={frame} data-testid={testId}>\n {embed ? (\n <iframe\n src={embed}\n title={title || 'Embedded video'}\n className=\"size-full\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n data-testid={testId && `${testId}-iframe`}\n />\n ) : url ? (\n <video src={url} controls className=\"size-full\" data-testid={testId && `${testId}-video`} />\n ) : null}\n </div>\n )\n}\n","import { useState, type FormEvent, type ReactNode } from 'react'\nimport { Button, cn } from '@arbidocs/react/ui'\n\nexport interface ContactFieldOption {\n value: string\n label: string\n}\n\nexport interface ContactField {\n name: string\n label: string\n type?: 'text' | 'email' | 'tel' | 'textarea' | 'select'\n required?: boolean\n /** Choices for `type: 'select'`. */\n options?: ContactFieldOption[]\n /** Initial value (for example read from the URL query by the host). */\n defaultValue?: string\n placeholder?: string\n}\n\nexport interface ContactFormTestIds {\n form: string\n success: string\n submit: string\n /** Control of the field named `name` (default `{testId}-field-{name}`). */\n field: (name: string) => string\n}\n\nexport interface ContactFormProps {\n fields: ContactField[]\n submitLabel?: string\n /** Optional POST endpoint. When set (and no `onSubmit`), the form submits natively to it. */\n action?: string\n /**\n * Handles the submit: receives the field values. When provided the form does not post\n * natively; resolve to show the success state, reject to keep the form open.\n */\n onSubmit?: (values: Record<string, string>) => void | Promise<void>\n /** Message shown after a client-side (no-action) submit. */\n successMessage?: string\n /**\n * Replaces the success message block. The second argument returns the form to its initial\n * state (no remount with `key` needed), e.g. for a \"send another\" button.\n */\n renderSuccess?: (values: Record<string, string>, reset: () => void) => ReactNode\n /** With the default success message, adds a button with this label that resets the form. */\n resetLabel?: string\n /** Called with every field's current value on each change (and not on the initial render). */\n onValuesChange?: (values: Record<string, string>) => void\n /**\n * Content between the fields and the submit button: a note that depends on a field, a consent\n * line, a summary. A function receives the current values and re-renders on every change.\n */\n footerSlot?: ReactNode | ((values: Record<string, string>) => ReactNode)\n testId?: string\n testIds?: Partial<ContactFormTestIds>\n}\n\nfunction initialValues(fields: ContactField[]): Record<string, string> {\n const values: Record<string, string> = {}\n for (const f of fields) values[f.name] = f.defaultValue ?? ''\n return values\n}\n\nconst INPUT_CLASS =\n 'w-full rounded-md border border-border bg-card px-3 py-2 text-sm text-foreground outline-none focus:border-primary'\n\n/** A configurable lead/contact form. Posts to `action`, hands values to `onSubmit`, or confirms. */\nexport function ContactForm({\n fields,\n submitLabel = 'Send',\n action,\n onSubmit,\n successMessage = 'Thanks — we’ll be in touch shortly.',\n renderSuccess,\n resetLabel,\n onValuesChange,\n footerSlot,\n testId,\n testIds,\n}: ContactFormProps) {\n const [sentValues, setSentValues] = useState<Record<string, string> | null>(null)\n const [isSending, setIsSending] = useState(false)\n const list = fields ?? []\n const [liveValues, setLiveValues] = useState(() => initialValues(list))\n const ids = {\n form: testIds?.form ?? testId,\n success: testIds?.success ?? (testId ? `${testId}-success` : undefined),\n submit: testIds?.submit ?? (testId ? `${testId}-submit` : undefined),\n field: (name: string) =>\n testIds?.field?.(name) ?? (testId ? `${testId}-field-${name}` : undefined),\n }\n\n const reset = () => {\n setLiveValues(initialValues(list))\n setSentValues(null)\n }\n\n const handleChange = (e: FormEvent<HTMLFormElement>) => {\n const values: Record<string, string> = { ...initialValues(list) }\n new FormData(e.currentTarget).forEach((v, k) => {\n if (typeof v === 'string') values[k] = v\n })\n setLiveValues(values)\n onValuesChange?.(values)\n }\n\n const handleSubmit = async (e: FormEvent<HTMLFormElement>) => {\n // With an action (and no handler) we let the browser POST natively; otherwise confirm inline.\n if (action && !onSubmit) return\n e.preventDefault()\n const values: Record<string, string> = {}\n new FormData(e.currentTarget).forEach((v, k) => {\n if (typeof v === 'string') values[k] = v\n })\n if (onSubmit) {\n setIsSending(true)\n try {\n await onSubmit(values)\n } catch {\n return\n } finally {\n setIsSending(false)\n }\n }\n setSentValues(values)\n }\n\n if (sentValues) {\n return renderSuccess ? (\n <div data-testid={ids.success}>{renderSuccess(sentValues, reset)}</div>\n ) : (\n <div\n className=\"rounded-lg border border-border bg-muted p-6 text-center text-sm text-foreground\"\n role=\"status\"\n data-testid={ids.success}\n >\n <p>{successMessage}</p>\n {resetLabel && (\n <Button type=\"button\" variant=\"outline\" className=\"mt-4\" onClick={reset}>\n {resetLabel}\n </Button>\n )}\n </div>\n )\n }\n\n return (\n <form\n action={action}\n method={action && !onSubmit ? 'post' : undefined}\n onSubmit={handleSubmit}\n onChange={handleChange}\n className=\"mx-auto flex max-w-xl flex-col gap-4\"\n data-testid={ids.form}\n >\n {list.map((f, i) => (\n <label key={i} className=\"flex flex-col gap-1.5 text-left\">\n <span className=\"text-sm font-medium\">{f.label}</span>\n {f.type === 'textarea' ? (\n <textarea\n name={f.name}\n required={f.required}\n rows={4}\n defaultValue={f.defaultValue}\n placeholder={f.placeholder}\n className={INPUT_CLASS}\n data-testid={ids.field(f.name)}\n />\n ) : f.type === 'select' ? (\n <select\n name={f.name}\n required={f.required}\n defaultValue={f.defaultValue ?? ''}\n className={INPUT_CLASS}\n data-testid={ids.field(f.name)}\n >\n <option value=\"\" disabled={f.required}>\n {f.placeholder ?? ''}\n </option>\n {(f.options ?? []).map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n ) : (\n <input\n name={f.name}\n type={f.type || 'text'}\n required={f.required}\n defaultValue={f.defaultValue}\n placeholder={f.placeholder}\n className={INPUT_CLASS}\n data-testid={ids.field(f.name)}\n />\n )}\n </label>\n ))}\n {typeof footerSlot === 'function' ? footerSlot(liveValues) : footerSlot}\n <Button\n type=\"submit\"\n className={cn('mt-1 self-start')}\n disabled={isSending}\n data-testid={ids.submit}\n >\n {submitLabel}\n </Button>\n </form>\n )\n}\n","import { ArrowRight } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport type BannerTone = 'primary' | 'muted' | 'ink'\n\nexport interface BannerProps {\n text: string\n cta?: { label?: string; href?: string }\n tone?: BannerTone\n testId?: string\n}\n\nconst TONE: Record<BannerTone, string> = {\n primary: 'bg-primary text-primary-foreground',\n muted: 'bg-muted text-foreground',\n ink: 'bg-foreground text-background',\n}\n\n/** A slim full-width announcement strip with optional inline CTA. */\nexport function Banner({ text, cta, tone = 'primary', testId }: BannerProps) {\n return (\n <div\n className={cn('w-full px-5 py-2.5 text-center text-sm', TONE[tone] ?? TONE.primary)}\n data-testid={testId}\n >\n <span className=\"font-medium\">{text}</span>\n {cta?.label && (\n <a\n href={cta.href || '#'}\n className=\"ml-2 inline-flex items-center gap-1 font-semibold underline underline-offset-4\"\n data-testid={testId && `${testId}-cta`}\n >\n {cta.label}\n <ArrowRight className=\"size-3.5\" />\n </a>\n )}\n </div>\n )\n}\n","import { ArrowRight } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { BlockImage } from './BlockImage'\n\nexport interface MediaTextProps {\n eyebrow?: string\n title: string\n body?: string\n imageUrl?: string\n /** Which side the media sits on (desktop). */\n mediaSide?: 'left' | 'right'\n cta?: { label?: string; href?: string }\n testId?: string\n}\n\n/** A split media-and-copy row: an image on one side, prose + CTA on the other. */\nexport function MediaText({\n eyebrow,\n title,\n body,\n imageUrl,\n mediaSide = 'left',\n cta,\n testId,\n}: MediaTextProps) {\n const media = (\n <BlockImage src={imageUrl} aspect=\"4:3\" rounded=\"lg\" testId={testId && `${testId}-image`} />\n )\n const copy = (\n <div>\n {eyebrow && (\n <p className=\"mb-3 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {eyebrow}\n </p>\n )}\n <h2 className=\"text-3xl font-semibold tracking-tight text-balance\">{title}</h2>\n {body && <p className=\"mt-4 text-lg leading-relaxed text-muted-foreground\">{body}</p>}\n {cta?.label && (\n <Button asChild className=\"mt-6\">\n <a href={cta.href || '#'}>\n {cta.label}\n <ArrowRight className=\"size-4\" />\n </a>\n </Button>\n )}\n </div>\n )\n return (\n <div className=\"grid items-center gap-10 lg:grid-cols-2\" data-testid={testId}>\n {mediaSide === 'right' ? (\n <>\n {copy}\n {media}\n </>\n ) : (\n <>\n {media}\n {copy}\n </>\n )}\n </div>\n )\n}\n","import { createContext, useContext } from 'react'\n\n/**\n * Editorial parts read their colours from the theme tokens only. `inverse` flips the page\n * tokens (`bg-foreground text-background`) for dark bands on a light theme; on a theme that is\n * already dark, leave `default` and let the host tokens do the work.\n */\nexport type EditorialTone = 'default' | 'inverse'\n\nexport interface EditorialToneClasses {\n /** Body text colour of the band. */\n text: string\n /** Secondary copy (lede, descriptions). */\n muted: string\n /** Tertiary copy (meta lines, small print). */\n subtle: string\n /** Accent text (links, kickers, markers). */\n accent: string\n /** Hairline between rows and around bands. */\n hairline: string\n /** A lifted surface (panel, row, chip). */\n panel: string\n /** Hover state of an interactive panel. */\n panelHover: string\n /** Small bordered chip. */\n chip: string\n /** Icon tile. */\n tile: string\n}\n\nconst TONES: Record<EditorialTone, EditorialToneClasses> = {\n default: {\n text: 'text-foreground',\n muted: 'text-muted-foreground',\n subtle: 'text-muted-foreground',\n accent: 'text-primary',\n hairline: 'border-border',\n panel: 'border-border bg-card text-card-foreground',\n panelHover: 'hover:border-primary/45 hover:bg-muted/60',\n chip: 'border-border text-muted-foreground',\n tile: 'border-primary/30 text-primary',\n },\n inverse: {\n text: 'text-background',\n muted: 'text-background/70',\n subtle: 'text-background/55',\n accent: 'text-primary',\n hairline: 'border-background/15',\n panel: 'border-background/15 bg-background/5 text-background',\n panelHover: 'hover:border-primary/45 hover:bg-background/10',\n chip: 'border-background/20 text-background/65',\n tile: 'border-primary/40 text-primary',\n },\n}\n\nexport const EditorialToneContext = createContext<EditorialTone>('default')\n\n/** The tone of the enclosing band, unless a part overrides it. */\nexport function useEditorialTone(override?: EditorialTone): EditorialToneClasses & {\n tone: EditorialTone\n} {\n const inherited = useContext(EditorialToneContext)\n const tone = override ?? inherited\n return { tone, ...TONES[tone] }\n}\n\n/** `01`, `02`, ... for a numbered label; strings pass through. */\nexport function formatIndex(index: number | string): string {\n return typeof index === 'number' ? String(index).padStart(2, '0') : index\n}\n","import type { ReactNode } from 'react'\nimport { ArrowUpRight } from 'lucide-react'\nimport { Avatar, AvatarFallback, AvatarImage, cn } from '@arbidocs/react/ui'\nimport { initials } from '../../lib/format'\nimport { BlockLink, type BlockLinkComponent } from '../blockLink'\nimport { useEditorialTone } from './tone'\n\nexport interface EditorialProfileCardProps {\n name: string\n role?: string\n /** An accent line under the role (practice, team). */\n kicker?: string\n bio?: string\n avatarUrl?: string\n /** Replaces the avatar (a photo frame, a monogram). */\n avatar?: ReactNode\n /** Extra classes of the avatar fallback, e.g. a host tint. */\n avatarClassName?: string\n /** Chips, links or stats under the bio, pinned to the card foot. */\n meta?: ReactNode\n /** Makes the whole card a link to the profile. */\n href?: string\n linkComponent?: BlockLinkComponent\n /** Lines of bio shown before truncation (0 shows it all). */\n bioLines?: 0 | 2 | 3 | 4\n /** Heading level of the name (default 3). */\n headingLevel?: 2 | 3 | 4\n className?: string\n testId?: string\n}\n\nconst CLAMP: Record<2 | 3 | 4, string> = { 2: 'line-clamp-2', 3: 'line-clamp-3', 4: 'line-clamp-4' }\n\n/** A person's card: avatar, name, role, kicker, clamped bio and a meta slot. */\nexport function EditorialProfileCard({\n name,\n role,\n kicker,\n bio,\n avatarUrl,\n avatar,\n avatarClassName,\n meta,\n href,\n linkComponent,\n bioLines = 3,\n headingLevel = 3,\n className,\n testId,\n}: EditorialProfileCardProps) {\n const t = useEditorialTone()\n const Heading = `h${headingLevel}` as 'h2' | 'h3' | 'h4'\n return (\n <BlockLink href={href} linkComponent={linkComponent} className=\"group block h-full\">\n <article\n className={cn(\n 'flex h-full flex-col rounded-sm border p-6 transition-colors duration-300',\n t.panel,\n href && t.panelHover,\n className\n )}\n data-slot=\"profile-card\"\n data-testid={testId}\n >\n <div className=\"flex items-start justify-between gap-4\">\n {avatar ?? (\n <Avatar className=\"size-14 text-sm\">\n {avatarUrl && <AvatarImage src={avatarUrl} alt=\"\" />}\n <AvatarFallback className={avatarClassName}>{initials(name || '?')}</AvatarFallback>\n </Avatar>\n )}\n {href && (\n <ArrowUpRight\n aria-hidden=\"true\"\n className={cn('size-4 shrink-0 transition-colors group-hover:text-primary', t.subtle)}\n />\n )}\n </div>\n <Heading className={cn('mt-5 font-display text-lg font-semibold', t.text)}>{name}</Heading>\n {role && <p className={cn('text-sm', t.muted)}>{role}</p>}\n {kicker && <p className={cn('mt-0.5 text-xs', t.accent)}>{kicker}</p>}\n {bio && (\n <p\n className={cn(\n 'mt-4 text-sm leading-relaxed',\n t.muted,\n bioLines ? CLAMP[bioLines] : undefined\n )}\n >\n {bio}\n </p>\n )}\n {meta && <div className=\"mt-auto pt-5\">{meta}</div>}\n </article>\n </BlockLink>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Avatar, AvatarFallback, AvatarImage, Card, cn } from '@arbidocs/react/ui'\nimport { initials } from '../lib/format'\nimport { BlockLink, type BlockLinkComponent } from './blockLink'\nimport { EditorialProfileCard } from './editorial/EditorialProfileCard'\n\nexport interface TeamMember {\n name: string\n role?: string\n /** An accent line under the role (practice, team). */\n kicker?: string\n bio?: string\n avatarUrl?: string\n /** When set, the card becomes a link to this person's detail page. */\n href?: string\n /** Overrides this card's test id (default `{testId}-item-{index}`). */\n testId?: string\n}\n\nexport interface TeamGridProps {\n members: TeamMember[]\n columns?: '2' | '3' | '4'\n /**\n * `centered`: the stacked, centred card. `profile`: the start-aligned editorial card\n * (`EditorialProfileCard`: clamped bio, meta pinned to the foot, arrow on linked cards).\n */\n variant?: 'centered' | 'profile'\n /** Per-member content under the bio (practice chips, focus areas, links). */\n renderMeta?: (member: TeamMember, index: number) => ReactNode\n /** Inject a router link (adapted to `href`) so linked cards navigate in-SPA. */\n linkComponent?: BlockLinkComponent\n testId?: string\n}\n\nconst COLS: Record<'2' | '3' | '4', string> = {\n '2': 'sm:grid-cols-2',\n '3': 'sm:grid-cols-2 lg:grid-cols-3',\n '4': 'sm:grid-cols-2 lg:grid-cols-4',\n}\n\n/** A grid of people cards: avatar, name, role and an optional short bio and meta slot. */\nexport function TeamGrid({\n members,\n columns = '3',\n variant = 'centered',\n renderMeta,\n linkComponent,\n testId,\n}: TeamGridProps) {\n const profile = variant === 'profile'\n return (\n <div\n className={cn('grid', profile ? 'gap-4' : 'gap-6', COLS[columns] ?? COLS['3'])}\n data-testid={testId}\n >\n {(members ?? []).map((m, i) => {\n const cardTestId = m.testId ?? (testId ? `${testId}-item-${i}` : undefined)\n const meta = renderMeta?.(m, i)\n if (profile) {\n return (\n <EditorialProfileCard\n key={i}\n name={m.name}\n role={m.role}\n kicker={m.kicker}\n bio={m.bio}\n avatarUrl={m.avatarUrl}\n href={m.href}\n linkComponent={linkComponent}\n meta={meta}\n testId={cardTestId}\n />\n )\n }\n return (\n <BlockLink\n key={i}\n href={m.href}\n linkComponent={linkComponent}\n className={cn('block h-full', m.href && 'group')}\n >\n <Card\n variant=\"outline\"\n className={cn(\n 'flex h-full flex-col items-center p-6 text-center',\n m.href && 'transition-colors group-hover:border-primary/40'\n )}\n data-testid={cardTestId}\n >\n <Avatar className=\"size-20\">\n {m.avatarUrl && <AvatarImage src={m.avatarUrl} alt={m.name} />}\n <AvatarFallback>{initials(m.name || '?')}</AvatarFallback>\n </Avatar>\n <h3 className=\"mt-4 text-base font-semibold tracking-tight\">{m.name}</h3>\n {m.role && <p className=\"text-sm text-primary\">{m.role}</p>}\n {m.kicker && <p className=\"text-xs text-muted-foreground\">{m.kicker}</p>}\n {m.bio && (\n <p className=\"mt-2 text-sm leading-relaxed text-muted-foreground\">{m.bio}</p>\n )}\n {meta && <div className=\"mt-4\">{meta}</div>}\n </Card>\n </BlockLink>\n )\n })}\n </div>\n )\n}\n","import { cn } from '@arbidocs/react/ui'\n\nexport interface StepItem {\n title: string\n description?: string\n}\n\nexport interface StepsProps {\n steps: StepItem[]\n /** `timeline` draws a connected vertical rail; `numbered` is a horizontal grid. */\n variant?: 'numbered' | 'timeline'\n testId?: string\n}\n\n/** A process / how-it-works sequence, as numbered cards or a vertical timeline. */\nexport function Steps({ steps, variant = 'numbered', testId }: StepsProps) {\n const list = steps ?? []\n if (variant === 'timeline') {\n return (\n <ol className=\"relative ml-3 border-l border-border\" data-testid={testId}>\n {list.map((s, i) => (\n <li key={i} className=\"mb-8 ml-6 last:mb-0\" data-testid={testId && `${testId}-item-${i}`}>\n <span className=\"absolute -left-3 flex size-6 items-center justify-center rounded-full bg-primary text-xs font-semibold text-primary-foreground\">\n {i + 1}\n </span>\n <h3 className=\"text-base font-semibold tracking-tight\">{s.title}</h3>\n {s.description && (\n <p className=\"mt-1 text-sm leading-relaxed text-muted-foreground\">{s.description}</p>\n )}\n </li>\n ))}\n </ol>\n )\n }\n return (\n <div\n className={cn('grid gap-6', list.length >= 4 ? 'md:grid-cols-4' : 'sm:grid-cols-3')}\n data-testid={testId}\n >\n {list.map((s, i) => (\n <div key={i} data-testid={testId && `${testId}-item-${i}`}>\n <span className=\"flex size-9 items-center justify-center rounded-full bg-primary/10 text-sm font-semibold text-primary\">\n {i + 1}\n </span>\n <h3 className=\"mt-4 text-base font-semibold tracking-tight\">{s.title}</h3>\n {s.description && (\n <p className=\"mt-2 text-sm leading-relaxed text-muted-foreground\">{s.description}</p>\n )}\n </div>\n ))}\n </div>\n )\n}\n","import { Quote } from 'lucide-react'\nimport { Avatar, AvatarFallback, AvatarImage, Card, cn } from '@arbidocs/react/ui'\nimport { initials } from '../lib/format'\n\nexport interface TestimonialItem {\n quote: string\n author?: string\n role?: string\n avatarUrl?: string\n}\n\nexport interface TestimonialGridProps {\n items: TestimonialItem[]\n columns?: '2' | '3'\n testId?: string\n}\n\nconst COLS: Record<'2' | '3', string> = {\n '2': 'sm:grid-cols-2',\n '3': 'sm:grid-cols-2 lg:grid-cols-3',\n}\n\n/** A grid of multiple pull-quote testimonials. */\nexport function TestimonialGrid({ items, columns = '3', testId }: TestimonialGridProps) {\n return (\n <div className={cn('grid gap-6', COLS[columns] ?? COLS['3'])} data-testid={testId}>\n {(items ?? []).map((t, i) => (\n <Card\n key={i}\n variant=\"outline\"\n className=\"flex h-full flex-col p-6\"\n data-testid={testId && `${testId}-item-${i}`}\n >\n <Quote className=\"size-6 text-primary/40\" aria-hidden />\n <blockquote className=\"mt-3 flex-1 text-base leading-relaxed\">{t.quote}</blockquote>\n {(t.author || t.avatarUrl) && (\n <div className=\"mt-5 flex items-center gap-3\">\n <Avatar className=\"size-9\">\n {t.avatarUrl && <AvatarImage src={t.avatarUrl} alt={t.author ?? ''} />}\n <AvatarFallback>{initials(t.author || '?')}</AvatarFallback>\n </Avatar>\n <div>\n {t.author && <p className=\"text-sm font-semibold\">{t.author}</p>}\n {t.role && <p className=\"text-xs text-muted-foreground\">{t.role}</p>}\n </div>\n </div>\n )}\n </Card>\n ))}\n </div>\n )\n}\n"]}
|