@arbidocs/blocks 0.5.63 → 0.5.65
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/{ConnectedDocumentViewer-7VKAM6KD.js → ConnectedDocumentViewer-HKIBNGGG.js} +10 -9
- package/dist/{ConnectedDocumentViewer-7VKAM6KD.js.map → ConnectedDocumentViewer-HKIBNGGG.js.map} +1 -1
- package/dist/{ConnectedDocumentViewer-FGQ27H4B.cjs → ConnectedDocumentViewer-YSZWOVGN.cjs} +11 -10
- package/dist/{ConnectedDocumentViewer-FGQ27H4B.cjs.map → ConnectedDocumentViewer-YSZWOVGN.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-HJ4FTVH6.cjs → ConnectedNativeDocxComparison-L3R3ROPZ.cjs} +7 -7
- package/dist/{ConnectedNativeDocxComparison-HJ4FTVH6.cjs.map → ConnectedNativeDocxComparison-L3R3ROPZ.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-FPW3BNBN.js → ConnectedNativeDocxComparison-PSAP3Q7D.js} +6 -6
- package/dist/{ConnectedNativeDocxComparison-FPW3BNBN.js.map → ConnectedNativeDocxComparison-PSAP3Q7D.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-S7NJMDSU.js → ConnectedNativeDocxEditor-PI6QTPXZ.js} +5 -5
- package/dist/{ConnectedNativeDocxEditor-S7NJMDSU.js.map → ConnectedNativeDocxEditor-PI6QTPXZ.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-PF46MU5H.cjs → ConnectedNativeDocxEditor-VDBC4XRT.cjs} +7 -7
- package/dist/{ConnectedNativeDocxEditor-PF46MU5H.cjs.map → ConnectedNativeDocxEditor-VDBC4XRT.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-5MHLV24V.js → ConnectedStreamedWordArtifact-V4MTKVNE.js} +6 -6
- package/dist/ConnectedStreamedWordArtifact-V4MTKVNE.js.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-LNGW7YGV.cjs → ConnectedStreamedWordArtifact-YSW6D7AG.cjs} +7 -7
- package/dist/ConnectedStreamedWordArtifact-YSW6D7AG.cjs.map +1 -0
- package/dist/{DocumentReviewCard-VFNMJSK7.cjs → DocumentReviewCard-BQ6ZD5MD.cjs} +6 -6
- package/dist/{DocumentReviewCard-VFNMJSK7.cjs.map → DocumentReviewCard-BQ6ZD5MD.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-5U3TGJZA.js → DocumentReviewCard-TQQADJ36.js} +6 -6
- package/dist/{DocumentReviewCard-5U3TGJZA.js.map → DocumentReviewCard-TQQADJ36.js.map} +1 -1
- package/dist/{WorkspaceTableView-DHMCJRC6.cjs → WorkspaceTableView-GKMVTECZ.cjs} +6 -6
- package/dist/{WorkspaceTableView-DHMCJRC6.cjs.map → WorkspaceTableView-GKMVTECZ.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-EH5CEB44.js → WorkspaceTableView-YFLVFRJL.js} +4 -4
- package/dist/{WorkspaceTableView-EH5CEB44.js.map → WorkspaceTableView-YFLVFRJL.js.map} +1 -1
- package/dist/agents/index.cjs +345 -344
- package/dist/agents/index.js +6 -5
- package/dist/{chunk-NDVLCOWS.js → chunk-2LUA7UDE.js} +7 -7
- package/dist/{chunk-NDVLCOWS.js.map → chunk-2LUA7UDE.js.map} +1 -1
- package/dist/{chunk-77IAOKZO.js → chunk-2VH2PT3J.js} +5 -38
- package/dist/chunk-2VH2PT3J.js.map +1 -0
- package/dist/{chunk-IC6SBDYA.js → chunk-4CI42DCG.js} +3 -3
- package/dist/{chunk-IC6SBDYA.js.map → chunk-4CI42DCG.js.map} +1 -1
- package/dist/{chunk-IFLFLP4K.js → chunk-4Q7ON335.js} +6 -5
- package/dist/chunk-4Q7ON335.js.map +1 -0
- package/dist/{chunk-IUFS3AYQ.js → chunk-5EGTGHBW.js} +7 -7
- package/dist/{chunk-IUFS3AYQ.js.map → chunk-5EGTGHBW.js.map} +1 -1
- package/dist/{chunk-OLDGMBEF.cjs → chunk-67AFX23Y.cjs} +185 -91
- package/dist/chunk-67AFX23Y.cjs.map +1 -0
- package/dist/{chunk-5CWBAINB.js → chunk-6OMIIF76.js} +3 -3
- package/dist/{chunk-5CWBAINB.js.map → chunk-6OMIIF76.js.map} +1 -1
- package/dist/chunk-6QZ35CTZ.js +594 -0
- package/dist/chunk-6QZ35CTZ.js.map +1 -0
- package/dist/{chunk-4RJPTXUQ.cjs → chunk-7MOQO6NO.cjs} +5 -5
- package/dist/{chunk-4RJPTXUQ.cjs.map → chunk-7MOQO6NO.cjs.map} +1 -1
- package/dist/chunk-AESJLGMC.cjs +1228 -0
- package/dist/chunk-AESJLGMC.cjs.map +1 -0
- package/dist/{chunk-EOIJ5JYP.cjs → chunk-B3CRSCLK.cjs} +4 -4
- package/dist/{chunk-EOIJ5JYP.cjs.map → chunk-B3CRSCLK.cjs.map} +1 -1
- package/dist/{chunk-GRDLCRNL.js → chunk-BELZ2WD2.js} +5 -5
- package/dist/{chunk-GRDLCRNL.js.map → chunk-BELZ2WD2.js.map} +1 -1
- package/dist/chunk-C2S246BV.js +1225 -0
- package/dist/chunk-C2S246BV.js.map +1 -0
- package/dist/{chunk-TAI23FCY.js → chunk-CEKOZAGO.js} +3 -3
- package/dist/{chunk-TAI23FCY.js.map → chunk-CEKOZAGO.js.map} +1 -1
- package/dist/{chunk-HVOPUYAG.cjs → chunk-CJF7B5A7.cjs} +29 -28
- package/dist/chunk-CJF7B5A7.cjs.map +1 -0
- package/dist/{chunk-LBKTTQUR.cjs → chunk-CMYJEIZB.cjs} +12 -12
- package/dist/{chunk-LBKTTQUR.cjs.map → chunk-CMYJEIZB.cjs.map} +1 -1
- package/dist/{chunk-2SLDVFOZ.js → chunk-CRHY7DBO.js} +3 -3
- package/dist/{chunk-2SLDVFOZ.js.map → chunk-CRHY7DBO.js.map} +1 -1
- package/dist/{chunk-23ACBETH.cjs → chunk-D27BBGUF.cjs} +4 -4
- package/dist/{chunk-23ACBETH.cjs.map → chunk-D27BBGUF.cjs.map} +1 -1
- package/dist/{chunk-3X37I6QE.cjs → chunk-DJE2E7YH.cjs} +29 -29
- package/dist/{chunk-3X37I6QE.cjs.map → chunk-DJE2E7YH.cjs.map} +1 -1
- package/dist/{chunk-CCSF7RI4.cjs → chunk-EG3BB32W.cjs} +3 -3
- package/dist/{chunk-CCSF7RI4.cjs.map → chunk-EG3BB32W.cjs.map} +1 -1
- package/dist/{chunk-MAKTAR7H.cjs → chunk-F777MGVA.cjs} +18 -18
- package/dist/{chunk-MAKTAR7H.cjs.map → chunk-F777MGVA.cjs.map} +1 -1
- package/dist/{chunk-TFWCREOL.js → chunk-GPYLXEZO.js} +9 -506
- package/dist/chunk-GPYLXEZO.js.map +1 -0
- package/dist/{chunk-OY3I32ZS.js → chunk-GX37C5QT.js} +4 -4
- package/dist/{chunk-OY3I32ZS.js.map → chunk-GX37C5QT.js.map} +1 -1
- package/dist/chunk-I4IS6ST6.cjs +48 -0
- package/dist/chunk-I4IS6ST6.cjs.map +1 -0
- package/dist/{chunk-OZL5ABLF.js → chunk-IRXPUQFP.js} +3 -3
- package/dist/{chunk-OZL5ABLF.js.map → chunk-IRXPUQFP.js.map} +1 -1
- package/dist/chunk-J77BACGX.js +575 -0
- package/dist/chunk-J77BACGX.js.map +1 -0
- package/dist/{chunk-X3JJTHQ4.cjs → chunk-JSHBC47B.cjs} +55 -55
- package/dist/{chunk-X3JJTHQ4.cjs.map → chunk-JSHBC47B.cjs.map} +1 -1
- package/dist/{chunk-Y6ZNWC7E.cjs → chunk-K26RLK2Y.cjs} +3 -3
- package/dist/{chunk-Y6ZNWC7E.cjs.map → chunk-K26RLK2Y.cjs.map} +1 -1
- package/dist/{chunk-PKDPQS6Z.js → chunk-KNOSLLTC.js} +3 -3
- package/dist/{chunk-PKDPQS6Z.js.map → chunk-KNOSLLTC.js.map} +1 -1
- package/dist/chunk-LFS6UWSJ.cjs +602 -0
- package/dist/chunk-LFS6UWSJ.cjs.map +1 -0
- package/dist/{chunk-YQFEN7UJ.js → chunk-LNH6NYG4.js} +6 -90
- package/dist/chunk-LNH6NYG4.js.map +1 -0
- package/dist/chunk-LRPGXNMA.js +44 -0
- package/dist/chunk-LRPGXNMA.js.map +1 -0
- package/dist/chunk-NEGFHF3V.cjs +617 -0
- package/dist/chunk-NEGFHF3V.cjs.map +1 -0
- package/dist/{chunk-NHPBONMR.js → chunk-O4FBMC6S.js} +186 -71
- package/dist/chunk-O4FBMC6S.js.map +1 -0
- package/dist/{chunk-7P24MJQN.js → chunk-PBIFISDD.js} +3 -3
- package/dist/{chunk-7P24MJQN.js.map → chunk-PBIFISDD.js.map} +1 -1
- package/dist/{chunk-OWUNCJFO.cjs → chunk-PZOX4JF6.cjs} +30 -30
- package/dist/{chunk-OWUNCJFO.cjs.map → chunk-PZOX4JF6.cjs.map} +1 -1
- package/dist/{chunk-CKNUL4LM.cjs → chunk-QK546T4C.cjs} +3 -3
- package/dist/{chunk-CKNUL4LM.cjs.map → chunk-QK546T4C.cjs.map} +1 -1
- package/dist/{chunk-QAXIVZEJ.cjs → chunk-ROWJU4SK.cjs} +13 -513
- package/dist/chunk-ROWJU4SK.cjs.map +1 -0
- package/dist/{chunk-JWRTUYLC.js → chunk-SBAM3UZX.js} +3 -3
- package/dist/{chunk-JWRTUYLC.js.map → chunk-SBAM3UZX.js.map} +1 -1
- package/dist/{chunk-COZDIUG7.cjs → chunk-TJ7QEGVP.cjs} +18 -18
- package/dist/{chunk-COZDIUG7.cjs.map → chunk-TJ7QEGVP.cjs.map} +1 -1
- package/dist/{chunk-PVPGD6QR.js → chunk-VWM3J6ES.js} +3 -3
- package/dist/{chunk-PVPGD6QR.js.map → chunk-VWM3J6ES.js.map} +1 -1
- package/dist/{chunk-UDMII47W.cjs → chunk-WBLCPCWR.cjs} +7 -7
- package/dist/{chunk-UDMII47W.cjs.map → chunk-WBLCPCWR.cjs.map} +1 -1
- package/dist/{chunk-3T3IKNGF.cjs → chunk-ZXW6WFZG.cjs} +5 -41
- package/dist/chunk-ZXW6WFZG.cjs.map +1 -0
- package/dist/{chunk-ODQK3LX5.cjs → chunk-ZZHMJXM5.cjs} +4 -93
- package/dist/chunk-ZZHMJXM5.cjs.map +1 -0
- package/dist/connect/docx.cjs +11 -11
- package/dist/connect/docx.js +7 -7
- package/dist/connect/index.cjs +496 -493
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +36 -33
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +9 -8
- package/dist/connect/viewer.js +8 -7
- package/dist/dashboards/index.cjs +1 -1
- package/dist/dashboards/index.js +1 -1
- package/dist/document-tools/index.cjs +17 -17
- package/dist/document-tools/index.js +2 -2
- package/dist/embed/index.cjs +11 -10
- package/dist/embed/index.js +8 -7
- package/dist/facts/index.cjs +1 -1
- package/dist/facts/index.js +1 -1
- package/dist/files/index.cjs +1 -1
- package/dist/files/index.js +1 -1
- package/dist/index.cjs +653 -618
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +19 -16
- package/dist/index.js.map +1 -1
- package/dist/shell/index.cjs +78 -77
- package/dist/shell/index.js +3 -2
- package/dist/site/index.cjs +105 -81
- package/dist/site/index.d.ts +3 -1
- package/dist/site/index.js +4 -4
- package/dist/studio/index.cjs +60 -55
- package/dist/studio/index.cjs.map +1 -1
- package/dist/studio/index.js +12 -7
- package/dist/studio/index.js.map +1 -1
- package/dist/theme/ThemeControls.d.ts +71 -0
- package/dist/theme/ThemeEditor.d.ts +5 -2
- package/dist/theme/ThemePreview.d.ts +20 -0
- package/dist/theme/color.d.ts +17 -1
- package/dist/theme/derive.d.ts +75 -0
- package/dist/theme/editorModel.d.ts +36 -0
- package/dist/theme/previewLabels.d.ts +38 -0
- package/dist/theme/store.d.ts +51 -13
- package/dist/theme/tokens.d.ts +2 -0
- package/dist/workflow-canvas/index.cjs +37 -36
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.js +13 -12
- package/dist/workflow-canvas/index.js.map +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-5MHLV24V.js.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-LNGW7YGV.cjs.map +0 -1
- package/dist/chunk-3T3IKNGF.cjs.map +0 -1
- package/dist/chunk-77IAOKZO.js.map +0 -1
- package/dist/chunk-HVOPUYAG.cjs.map +0 -1
- package/dist/chunk-IFLFLP4K.js.map +0 -1
- package/dist/chunk-N5WJBQYF.cjs +0 -476
- package/dist/chunk-N5WJBQYF.cjs.map +0 -1
- package/dist/chunk-NHPBONMR.js.map +0 -1
- package/dist/chunk-ODQK3LX5.cjs.map +0 -1
- package/dist/chunk-OLDGMBEF.cjs.map +0 -1
- package/dist/chunk-QAXIVZEJ.cjs.map +0 -1
- package/dist/chunk-QCLYRNOC.js +0 -466
- package/dist/chunk-QCLYRNOC.js.map +0 -1
- package/dist/chunk-TFWCREOL.js.map +0 -1
- package/dist/chunk-YQFEN7UJ.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theme/color.ts","../src/theme/tokens.ts","../src/theme/derive.ts","../src/components/Tabs.tsx","../src/theme/previewLabels.ts"],"names":["hsl","clamp","useState","jsxs","TabsPrimitive","jsx","cn"],"mappings":"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","file":"chunk-NEGFHF3V.cjs","sourcesContent":["/**\n * Colour math for the theme store: parse the formats a theme value comes in (hex, `rgb()`,\n * `hsl()`, a raw `H S% L%` triplet), convert between them, and measure WCAG contrast.\n *\n * Pure functions, no DOM. A theme value is kept in whatever format the host wrote it (Clarum's\n * `@theme` is hex, the ARBI app's stylesheet is triplets); these helpers turn it into the two\n * formats the document needs: the raw triplet the blocks contract reads (`hsl(var(--primary))`)\n * and a full colour for Tailwind's `--color-*` map.\n */\n\nexport interface Rgb {\n /** 0..255 */\n r: number\n g: number\n b: number\n}\n\nexport interface Hsl {\n /** Hue in degrees, 0..360. */\n h: number\n /** Saturation, 0..100. */\n s: number\n /** Lightness, 0..100. */\n l: number\n}\n\nconst NUM = String.raw`-?\\d*\\.?\\d+(?:e-?\\d+)?`\nconst TRIPLET_RE = new RegExp(String.raw`^(${NUM})(?:deg)?\\s+(${NUM})%\\s+(${NUM})%$`)\nconst HSL_FN_RE = new RegExp(\n String.raw`^hsla?\\(\\s*(${NUM})(?:deg)?[\\s,]+(${NUM})%[\\s,]+(${NUM})%\\s*(?:[,/]\\s*${NUM}%?\\s*)?\\)$`,\n 'i'\n)\nconst RGB_FN_RE = new RegExp(\n String.raw`^rgba?\\(\\s*(${NUM})[\\s,]+(${NUM})[\\s,]+(${NUM})\\s*(?:[,/]\\s*${NUM}%?\\s*)?\\)$`,\n 'i'\n)\n\n/** True for a raw `H S% L%` triplet (the blocks contract's format, no `hsl()`). */\nexport function isHslTriplet(value: string): boolean {\n return TRIPLET_RE.test(value.trim())\n}\n\nconst clamp = (n: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, n))\n\n/** Round to one decimal and drop a trailing `.0`, so `50.0` prints as `50`. */\nconst fmt = (n: number) => String(Math.round(n * 10) / 10)\n\nexport function rgbToHsl({ r, g, b }: Rgb): Hsl {\n const rn = r / 255\n const gn = g / 255\n const bn = b / 255\n const max = Math.max(rn, gn, bn)\n const min = Math.min(rn, gn, bn)\n const l = (max + min) / 2\n const d = max - min\n let h = 0\n let s = 0\n if (d !== 0) {\n s = d / (1 - Math.abs(2 * l - 1))\n if (max === rn) h = 60 * (((gn - bn) / d) % 6)\n else if (max === gn) h = 60 * ((bn - rn) / d + 2)\n else h = 60 * ((rn - gn) / d + 4)\n }\n if (h < 0) h += 360\n return { h, s: s * 100, l: l * 100 }\n}\n\nexport function hslToRgb({ h, s, l }: Hsl): Rgb {\n const sn = clamp(s, 0, 100) / 100\n const ln = clamp(l, 0, 100) / 100\n const hn = ((h % 360) + 360) % 360\n const c = (1 - Math.abs(2 * ln - 1)) * sn\n const x = c * (1 - Math.abs(((hn / 60) % 2) - 1))\n const m = ln - c / 2\n const [r1, g1, b1] =\n hn < 60\n ? [c, x, 0]\n : hn < 120\n ? [x, c, 0]\n : hn < 180\n ? [0, c, x]\n : hn < 240\n ? [0, x, c]\n : hn < 300\n ? [x, 0, c]\n : [c, 0, x]\n return { r: (r1 + m) * 255, g: (g1 + m) * 255, b: (b1 + m) * 255 }\n}\n\nfunction parseHex(value: string): Rgb | null {\n let hex = value.slice(1)\n if (hex.length === 3 || hex.length === 4) {\n hex = hex\n .slice(0, 3)\n .split('')\n .map((ch) => ch + ch)\n .join('')\n } else if (hex.length === 8) {\n hex = hex.slice(0, 6)\n }\n if (!/^[0-9a-fA-F]{6}$/.test(hex)) return null\n return {\n r: parseInt(hex.slice(0, 2), 16),\n g: parseInt(hex.slice(2, 4), 16),\n b: parseInt(hex.slice(4, 6), 16),\n }\n}\n\n/**\n * Parse a theme colour value to RGB: `#rgb`, `#rrggbb` (alpha ignored), `rgb()`/`rgba()`,\n * `hsl()`/`hsla()` and a raw triplet. Anything else (`oklch()`, a `var()`) is `null`.\n */\nexport function parseColor(value: string): Rgb | null {\n const c = value.trim()\n if (c.startsWith('#')) return parseHex(c)\n const rgb = RGB_FN_RE.exec(c)\n if (rgb) return { r: Number(rgb[1]), g: Number(rgb[2]), b: Number(rgb[3]) }\n const hsl = HSL_FN_RE.exec(c) ?? TRIPLET_RE.exec(c)\n if (hsl) return hslToRgb({ h: Number(hsl[1]), s: Number(hsl[2]), l: Number(hsl[3]) })\n return null\n}\n\n/** HSL of a colour value, or `null` when it cannot be parsed. A triplet keeps its exact numbers. */\nexport function parseHsl(value: string): Hsl | null {\n const c = value.trim()\n const m = TRIPLET_RE.exec(c) ?? HSL_FN_RE.exec(c)\n if (m) return { h: Number(m[1]), s: Number(m[2]), l: Number(m[3]) }\n const rgb = parseColor(c)\n return rgb ? rgbToHsl(rgb) : null\n}\n\nconst hex2 = (n: number) =>\n Math.round(clamp(n, 0, 255))\n .toString(16)\n .padStart(2, '0')\n\nexport function rgbToHex({ r, g, b }: Rgb): string {\n return `#${hex2(r)}${hex2(g)}${hex2(b)}`\n}\n\nexport function hslToHex(hsl: Hsl): string {\n return rgbToHex(hslToRgb(hsl))\n}\n\n/** `#rrggbb` of any parseable value (what `<input type=\"color\">` needs); `fallback` otherwise. */\nexport function toHex(value: string, fallback = '#000000'): string {\n const rgb = parseColor(value)\n return rgb ? rgbToHex(rgb) : fallback\n}\n\n/** `H S% L%` of an HSL value, one decimal. */\nexport function formatHslTriplet({ h, s, l }: Hsl): string {\n return `${fmt(((h % 360) + 360) % 360)} ${fmt(s)}% ${fmt(l)}%`\n}\n\n/**\n * Convert a colour to the blocks contract's `H S% L%` triplet.\n *\n * An existing triplet passes through untouched (so a host that seeds its stylesheet's exact\n * triplets gets a byte-identical no-op). Hex, `rgb()` and `hsl()` convert with one decimal, the\n * precision of the stylesheets. Values it cannot parse (`oklch()`, `var()`) are returned unchanged.\n */\nexport function toHslTriplet(color: string): string {\n const c = color.trim()\n if (TRIPLET_RE.test(c)) return c\n const hsl = parseHsl(c)\n return hsl ? formatHslTriplet(hsl) : c\n}\n\n/**\n * The full colour for a Tailwind `--color-*` variable: a raw triplet is wrapped as `hsl(...)`, any\n * other value (hex, `rgb()`, `oklch()`) is already a colour and is kept as written.\n */\nexport function toCssColor(value: string): string {\n const c = value.trim()\n return TRIPLET_RE.test(c) ? `hsl(${c})` : c\n}\n\n// ── WCAG contrast ──────────────────────────────────────────────────────────────\n\nconst channel = (v: number) => {\n const c = v / 255\n return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4\n}\n\n/** WCAG relative luminance, 0 (black) .. 1 (white). */\nexport function relativeLuminance(rgb: Rgb): number {\n return 0.2126 * channel(rgb.r) + 0.7152 * channel(rgb.g) + 0.0722 * channel(rgb.b)\n}\n\n/** WCAG contrast ratio of two colour values (1..21), or `null` when either cannot be parsed. */\nexport function contrastRatio(a: string, b: string): number | null {\n const ra = parseColor(a)\n const rb = parseColor(b)\n if (!ra || !rb) return null\n const la = relativeLuminance(ra)\n const lb = relativeLuminance(rb)\n return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05)\n}\n\n/** WCAG AA thresholds: body text 4.5:1, large text and UI parts (borders, focus rings) 3:1. */\nexport const AA_TEXT = 4.5\nexport const AA_UI = 3\n\n/**\n * The colour nearest to `fg` (same hue and saturation, only lightness moved) that reaches `ratio`\n * against `bg`. It moves away from the background first (darker on a light background, lighter on\n * a dark one) and, if even black or white cannot reach the ratio that way, tries the other way.\n * Returns hex; `fg` unchanged (as hex) when it already passes.\n */\nexport function ensureContrast(fg: string, bg: string, ratio: number): string {\n const fgHsl = parseHsl(fg)\n const bgRgb = parseColor(bg)\n if (!fgHsl || !bgRgb) return fg\n const pass = (l: number) =>\n (contrastRatio(hslToHex({ ...fgHsl, l }), rgbToHex(bgRgb)) ?? 0) >= ratio\n if (pass(fgHsl.l)) return hslToHex(fgHsl)\n const bgDark = relativeLuminance(bgRgb) < 0.18\n const directions = bgDark ? [1, -1] : [-1, 1]\n for (const dir of directions) {\n const end = dir < 0 ? 0 : 100\n if (!pass(end)) continue\n // Binary search for the lightness closest to the original that still passes.\n let lo = fgHsl.l\n let hi = end\n for (let i = 0; i < 24; i++) {\n const mid = (lo + hi) / 2\n if (pass(mid)) hi = mid\n else lo = mid\n }\n return hslToHex({ ...fgHsl, l: hi })\n }\n // Unreachable for ratio <= 21, but keep the best effort: the stronger of black and white.\n const black = contrastRatio('#000000', rgbToHex(bgRgb)) ?? 0\n const white = contrastRatio('#ffffff', rgbToHex(bgRgb)) ?? 0\n return black >= white ? '#000000' : '#ffffff'\n}\n\n/** Mix two colours in sRGB: `amount` 0 is `a`, 1 is `b`. Hex out. */\nexport function mix(a: string, b: string, amount: number): string {\n const ra = parseColor(a)\n const rb = parseColor(b)\n if (!ra || !rb) return a\n const t = clamp(amount, 0, 1)\n return rgbToHex({\n r: ra.r + (rb.r - ra.r) * t,\n g: ra.g + (rb.g - ra.g) * t,\n b: ra.b + (rb.b - ra.b) * t,\n })\n}\n","/**\n * The theme-token model. Firm-agnostic: the token *catalog*, default values and\n * presets are supplied by the consuming app (via {@link createThemeStore}); this\n * module owns the shared types and the logic for writing tokens onto the live\n * document.\n *\n * **One value, both outputs.** The blocks token contract is raw HSL triplets\n * (`--primary: 228 50% 25%`, read as `hsl(var(--primary))`), and Tailwind's\n * `--color-*` map is derived from them. A host may theme either half (Clarum's\n * `@theme` is hex `--color-*`; the ARBI app's stylesheet is triplets), so every\n * token is written to BOTH from the one value ({@link themeCssVars}): the triplet\n * and the full colour. Tailwind resolves a `--color-*` where it is declared, so a\n * theme that wrote only the triplets would leave `bg-primary` behind, and one\n * that wrote only `--color-*` would leave every part that reads a triplet\n * directly (step bar, charts, calendar, grid, canvas) on the package defaults.\n *\n * Where the variables are written is the emit model, {@link ThemeEmitMode}:\n *\n * - `'flat'` (default): inline custom properties on `<html>`, plus `--font-*` /\n * `--radius`. Inline styles override the stylesheet defaults, so an edit\n * previews live across the whole app and reverts cleanly. No dark variant.\n *\n * - `'cssVars'`: an injected `<style id=\"arbi-theme-vars\">` appended to `<head>`\n * with a `:root { light } / :root.dark { dark }` structure, so an app with a\n * real `.dark` variant keeps it. The injected sheet is *unlayered*, so it wins\n * over the app's own `@layer base` colours at equal specificity.\n */\nimport { toCssColor, toHslTriplet } from './color'\n\nexport { toHslTriplet }\n\nexport interface ColorToken {\n /** Key without a prefix, e.g. \"primary\" → `--primary` and `--color-primary`. */\n key: string\n label: string\n /** Grouping id for the panel layout (e.g. \"shadcn\" | \"brand\" | \"ai\"). */\n group: string\n}\n\nexport interface ThemeFonts {\n display: string\n sans: string\n}\n\nexport interface ThemeTokens {\n /** Colour values keyed by token key (hex, `rgb()`, `hsl()` or a raw triplet). */\n colors: Record<string, string>\n fonts: ThemeFonts\n /** Base radius in rem. */\n radius: number\n /** Dark-variant colour values keyed by token key, for a host with a dark mode. */\n dark?: Record<string, string>\n}\n\nexport interface ThemePreset {\n id: string\n label: string\n tokens: ThemeTokens\n}\n\n/** Where a theme is written on the document. See the module doc for the models. */\nexport type ThemeEmitMode = 'flat' | 'cssVars'\n\nexport interface ApplyThemeOptions {\n /** Emit model. Defaults to `'flat'`. */\n mode?: ThemeEmitMode\n /**\n * `cssVars` mode only: dark-variant colour values keyed by token key. Emitted\n * under `:root.dark`. When omitted, only `:root` is emitted — note that an\n * overridden light token then also applies in dark (the injected `:root` is\n * unlayered and beats the app's own `.dark` rules), so a host with a dark mode\n * MUST supply this for every editable token to keep dark mode intact.\n */\n dark?: Record<string, string>\n /** `flat` mode only: target element. Defaults to `document.documentElement`. */\n root?: HTMLElement\n}\n\n/** Id of the injected `<style>` that carries the `cssVars`-mode custom properties. */\nexport const THEME_STYLE_ID = 'arbi-theme-vars'\n\n/**\n * The custom properties one set of colour values paints: for every key, the raw triplet\n * (`--primary: 214 51.7% 11.4%`) and Tailwind's full colour (`--color-primary`: hex as written, or\n * `hsl(<triplet>)` for a triplet value), from the one value. A value the converter does not know\n * (`oklch()`, `var()`) is written unchanged to both, as the contract's full-colour tokens\n * (`--status-*`) expect.\n */\nexport function themeCssVars(colors: Record<string, string>): Record<string, string> {\n const vars: Record<string, string> = {}\n for (const [key, value] of Object.entries(colors)) {\n vars[`--${key}`] = toHslTriplet(value)\n vars[`--color-${key}`] = toCssColor(value)\n }\n return vars\n}\n\n/** The typography and shape variables of a theme. */\nexport function themeMetaVars(\n theme: Pick<ThemeTokens, 'fonts' | 'radius'>\n): Record<string, string> {\n return {\n '--font-display': theme.fonts.display,\n '--font-sans': theme.fonts.sans,\n '--radius': `${theme.radius}rem`,\n }\n}\n\nfunction renderBlock(selector: string, vars: Record<string, string>): string {\n const body = Object.entries(vars)\n .map(([name, value]) => ` ${name}: ${value};`)\n .join('\\n')\n return `${selector} {\\n${body}\\n}`\n}\n\nfunction emitCssVars(theme: ThemeTokens, dark?: Record<string, string>): void {\n if (typeof document === 'undefined') return\n let css = renderBlock(':root', { ...themeCssVars(theme.colors), ...themeMetaVars(theme) })\n if (dark) css += `\\n${renderBlock(':root.dark', themeCssVars(dark))}`\n let style = document.getElementById(THEME_STYLE_ID) as HTMLStyleElement | null\n if (!style) {\n style = document.createElement('style')\n style.id = THEME_STYLE_ID\n document.head.appendChild(style)\n }\n style.textContent = css\n}\n\nfunction removeCssVars(): void {\n if (typeof document === 'undefined') return\n document.getElementById(THEME_STYLE_ID)?.remove()\n}\n\nfunction normalizeOptions(optionsOrRoot: ApplyThemeOptions | HTMLElement): ApplyThemeOptions {\n if (typeof HTMLElement !== 'undefined' && optionsOrRoot instanceof HTMLElement) {\n return { root: optionsOrRoot }\n }\n return optionsOrRoot as ApplyThemeOptions\n}\n\n/**\n * Write a theme onto the live document: every colour as both its triplet and its `--color-*`\n * (see {@link themeCssVars}), plus `--font-*` / `--radius`.\n *\n * In `flat` mode (default) inline on `document.documentElement` (or a supplied root). In `cssVars`\n * mode into an injected `<style#arbi-theme-vars>` with a `:root.dark` block for `dark` (see the\n * module doc). The legacy `applyThemeVars(theme, rootElement)` call form still works.\n */\nexport function applyThemeVars(\n theme: ThemeTokens,\n optionsOrRoot: ApplyThemeOptions | HTMLElement = {}\n): void {\n const { mode = 'flat', dark, root = document.documentElement } = normalizeOptions(optionsOrRoot)\n\n if (mode === 'cssVars') {\n emitCssVars(theme, dark)\n return\n }\n\n for (const [name, value] of Object.entries({\n ...themeCssVars(theme.colors),\n ...themeMetaVars(theme),\n })) {\n root.style.setProperty(name, value)\n }\n}\n\n/**\n * Set ONLY the typography vars, as inline styles on the root element.\n *\n * Typography is often chosen independently of colour — an app may let a reader\n * pick a typeface while its palette is owned elsewhere. Writing the two vars\n * inline (rather than through `applyThemeVars`) keeps this orthogonal in two\n * ways: it touches no colour or radius token, and an inline style outranks any\n * selector, so a font choice survives a `cssVars`-mode theme that emits its own\n * `:root` block (the ARBI studio's theme editor does exactly that).\n */\nexport function applyFontVars(\n fonts: ThemeFonts,\n root: HTMLElement = document.documentElement\n): void {\n root.style.setProperty('--font-display', fonts.display)\n root.style.setProperty('--font-sans', fonts.sans)\n}\n\n/** Undo {@link applyFontVars}, reverting to the stylesheet's own font tokens. */\nexport function clearFontVars(root: HTMLElement = document.documentElement): void {\n root.style.removeProperty('--font-display')\n root.style.removeProperty('--font-sans')\n}\n\n/**\n * Remove a theme's overrides, reverting to the stylesheet defaults.\n *\n * In `flat` mode removes the inline overrides (both halves) for the theme's keys. In `cssVars`\n * mode removes the injected `<style#arbi-theme-vars>` in full (restoring the app's own colours\n * exactly).\n */\nexport function clearThemeVars(\n theme: ThemeTokens,\n optionsOrRoot: ApplyThemeOptions | HTMLElement = {}\n): void {\n const { mode = 'flat', root = document.documentElement } = normalizeOptions(optionsOrRoot)\n\n if (mode === 'cssVars') {\n removeCssVars()\n return\n }\n\n for (const key of Object.keys(theme.colors)) {\n root.style.removeProperty(`--${key}`)\n root.style.removeProperty(`--color-${key}`)\n }\n root.style.removeProperty('--font-display')\n root.style.removeProperty('--font-sans')\n root.style.removeProperty('--radius')\n}\n","/**\n * Brand inputs → the whole token contract.\n *\n * The theme editor asks for a few intents (primary and accent colour, how warm the surfaces are,\n * whether the sidebar is light or a brand panel, the chart style, the three status colours) and\n * derives every dependent token from them, light and dark: foregrounds that read on their\n * backgrounds (WCAG AA, `ensureContrast`), the hover/selected surface (`--accent`), muted, ring,\n * border, input, sidebar, the AI tints and a chart palette in harmony with the brand.\n *\n * Each derived token declares the inputs it depends on ({@link DERIVED_TOKENS}), so changing one\n * input rewrites only what it controls: a primary change never touches the status families, a\n * status change never touches the surfaces. Nothing is derived until an input changes, so an\n * untouched theme paints exactly the host's own stylesheet values.\n */\nimport {\n AA_TEXT,\n AA_UI,\n contrastRatio,\n ensureContrast,\n hslToHex,\n mix,\n parseColor,\n parseHsl,\n relativeLuminance,\n toHex,\n type Hsl,\n} from './color'\n\nexport type ColorScheme = 'light' | 'dark'\n/** `light`: the sidebar is a quiet surface. `brand`: a dark panel in the primary's hue. */\nexport type SidebarStyle = 'light' | 'brand'\n/** `harmonious`: hues near the primary and accent. `distinct`: evenly spaced hues from the primary. */\nexport type ChartStyle = 'harmonious' | 'distinct'\n\nexport interface ThemeInputs {\n /** The main brand colour: filled buttons, active tabs, links, focus rings. */\n primary: string\n /** The second brand colour: highlights, AI actions, accent buttons, the second chart series. */\n accent: string\n /** Surface tone: -1 cool grey-blue, 0 neutral, 1 warm paper. Beyond ±0.5 the page itself tints. */\n warmth: number\n sidebar: SidebarStyle\n charts: ChartStyle\n danger: string\n success: string\n warning: string\n /**\n * What `--secondary` is in this host: a brand accent (the blocks default, a saturated cyan) or a\n * quiet surface (shadcn's). Inferred from the host's own value; not shown as a control.\n */\n secondaryRole: 'accent' | 'surface'\n}\n\nexport type ThemeInputKey = keyof ThemeInputs\n\n/** The editor's purpose groups. */\nexport type ThemeGroup = 'brand' | 'surfaces' | 'text' | 'status' | 'charts'\n\ninterface DerivedToken {\n key: string\n group: ThemeGroup\n /** The inputs whose change rewrites this token. */\n deps: readonly ThemeInputKey[]\n}\n\nconst P: ThemeInputKey = 'primary'\nconst A: ThemeInputKey = 'accent'\nconst W: ThemeInputKey = 'warmth'\n\n// Neutrals follow the surface tone only, so a primary change never repaints the page.\nconst surface = (key: string, deps: readonly ThemeInputKey[] = [W]): DerivedToken => ({\n key,\n group: 'surfaces',\n deps,\n})\nconst text = (key: string, deps: readonly ThemeInputKey[] = [W]): DerivedToken => ({\n key,\n group: 'text',\n deps,\n})\nconst family = (hue: string, input: ThemeInputKey): DerivedToken[] =>\n ['bg', 'text', 'border', 'solid', 'text-strong'].map((part) => ({\n key: `${hue}-${part}`,\n group: 'status',\n deps: [input],\n }))\n\n/** Every token the derivation writes, with its group and the inputs it follows. */\nexport const DERIVED_TOKENS: readonly DerivedToken[] = [\n // Brand\n { key: 'primary', group: 'brand', deps: [P] },\n { key: 'ring', group: 'brand', deps: [P, W] },\n { key: 'hero', group: 'brand', deps: [P] },\n { key: 'secondary', group: 'brand', deps: [A, W] },\n { key: 'theme-cyan', group: 'brand', deps: [A] },\n { key: 'theme-cyan-bright', group: 'brand', deps: [A, P] },\n { key: 'ai-ink', group: 'brand', deps: [A] },\n { key: 'ai-soft', group: 'brand', deps: [A] },\n { key: 'ai-accent', group: 'brand', deps: [A] },\n { key: 'ai-accent-soft', group: 'brand', deps: [A] },\n // Surfaces\n surface('background'),\n surface('card'),\n surface('popover'),\n surface('muted'),\n surface('accent', [P, W]),\n surface('border'),\n surface('input'),\n surface('ai-surface'),\n { key: 'sidebar', group: 'surfaces', deps: [P, W, 'sidebar'] },\n { key: 'sidebar-foreground', group: 'surfaces', deps: [P, W, 'sidebar'] },\n { key: 'sidebar-muted', group: 'surfaces', deps: [P, W, 'sidebar'] },\n { key: 'sidebar-accent', group: 'surfaces', deps: [P, W, 'sidebar'] },\n { key: 'sidebar-accent-foreground', group: 'surfaces', deps: [P, W, 'sidebar'] },\n { key: 'sidebar-border', group: 'surfaces', deps: [P, W, 'sidebar'] },\n { key: 'sidebar-primary', group: 'surfaces', deps: [P, A, 'sidebar'] },\n // Text\n text('foreground'),\n text('card-foreground'),\n text('popover-foreground'),\n text('muted-foreground'),\n text('primary-foreground', [P, W]),\n text('accent-foreground', [P, W]),\n text('secondary-foreground', [A, W]),\n text('ai-accent-foreground', [A]),\n text('destructive-foreground', ['danger']),\n // Status\n { key: 'destructive', group: 'status', deps: ['danger'] },\n { key: 'success', group: 'status', deps: ['success'] },\n { key: 'warning', group: 'status', deps: ['warning'] },\n ...family('red', 'danger'),\n ...family('green', 'success'),\n ...family('yellow', 'warning'),\n // Charts (the step bar's start/finish accent follows the first series)\n ...[1, 2, 3, 4, 5].map((i) => ({\n key: `chart-${i}`,\n group: 'charts' as const,\n deps: [P, A, 'charts'] as const,\n })),\n { key: 'wf-start', group: 'charts', deps: [P, A, 'charts'] },\n]\n\nconst DERIVED_BY_KEY = new Map(DERIVED_TOKENS.map((t) => [t.key, t]))\n\n/** The derived token `key`, or `undefined` when the derivation does not write it. */\nexport const derivedToken = (key: string) => DERIVED_BY_KEY.get(key)\n\n/** The keys an input controls (what changes when it does). */\nexport function keysOfInput(input: ThemeInputKey): string[] {\n return DERIVED_TOKENS.filter((t) => t.deps.includes(input)).map((t) => t.key)\n}\n\n/** The keys a purpose group holds. */\nexport function keysOfGroup(group: ThemeGroup): string[] {\n return DERIVED_TOKENS.filter((t) => t.group === group).map((t) => t.key)\n}\n\n// ── Inference: the inputs that describe an existing theme ─────────────────────\n\nconst DEFAULT_INPUTS: ThemeInputs = {\n primary: '#202b61',\n accent: '#00adef',\n warmth: 0,\n sidebar: 'light',\n charts: 'harmonious',\n danger: '#bf3b3b',\n success: '#1f8a5b',\n warning: '#c08a2d',\n secondaryRole: 'accent',\n}\n\nconst isWarm = (h: number) => h >= 15 && h <= 90\nconst isCool = (h: number) => h >= 180 && h <= 270\nconst clamp = (n: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, n))\n\nfunction warmthOf(colors: Record<string, string>): number {\n const bg = parseHsl(colors.background ?? '')\n const tint = parseHsl(colors.muted ?? colors.border ?? colors.card ?? '')\n const sign = (hsl: Hsl | null) => (!hsl ? 0 : isWarm(hsl.h) ? 1 : isCool(hsl.h) ? -1 : 0)\n if (bg && bg.l < 99 && bg.s > 3) {\n return sign(bg) * (0.5 + Math.min(0.5, (100 - bg.l) / 12))\n }\n if (!tint) return 0\n return sign(tint) * Math.min(0.5, tint.s / 40)\n}\n\n/**\n * The inputs that describe an existing set of colours (a host's defaults, a preset): the primary\n * as is, the accent from the AI/secondary tokens, the warmth from the page and muted surfaces, the\n * sidebar style from its lightness. A key the colours lack falls back to a neutral default.\n */\nexport function inferInputs(colors: Record<string, string>): ThemeInputs {\n const hex = (key: string, fallback: string) =>\n colors[key] && parseColor(colors[key]) ? toHex(colors[key]) : fallback\n const saturated = (key: string) => (parseHsl(colors[key] ?? '')?.s ?? 0) >= 35\n const accentKey = ['ai-accent', 'ai-ink', 'secondary', 'theme-cyan'].find(\n (k) => colors[k] && saturated(k)\n )\n const sidebar = parseColor(colors.sidebar ?? '')\n return {\n primary: hex('primary', DEFAULT_INPUTS.primary),\n accent: accentKey ? toHex(colors[accentKey]) : DEFAULT_INPUTS.accent,\n warmth: Math.round(warmthOf(colors) * 100) / 100,\n sidebar: sidebar && relativeLuminance(sidebar) < 0.2 ? 'brand' : 'light',\n charts: 'harmonious',\n danger: hex('destructive', DEFAULT_INPUTS.danger),\n success: hex('success', DEFAULT_INPUTS.success),\n warning: hex('warning', DEFAULT_INPUTS.warning),\n secondaryRole: colors.secondary && !saturated('secondary') ? 'surface' : 'accent',\n }\n}\n\n// ── Derivation ────────────────────────────────────────────────────────────────\n\nconst hsl = (h: number, s: number, l: number) => hslToHex({ h, s, l })\n\n/** The lighter or darker candidate, whichever reads better on `bg`, nudged to AA if needed. */\nfunction readableOn(bg: string, light: string, dark: string, ratio = AA_TEXT): string {\n const pick = (contrastRatio(light, bg) ?? 0) >= (contrastRatio(dark, bg) ?? 0) ? light : dark\n return ensureContrast(pick, bg, ratio)\n}\n\nfunction hueDistance(a: number, b: number): number {\n const d = Math.abs(a - b) % 360\n return d > 180 ? 360 - d : d\n}\n\n/** Five series hues: the primary's and the accent's, then the candidates farthest from those. */\nfunction chartHues(p: Hsl, a: Hsl, style: ChartStyle): number[] {\n // A grey has no hue to harmonise with: lean on the other brand colour, then a calm blue.\n const base = p.s >= 12 ? p.h : a.s >= 12 ? a.h : 220\n const second = a.s >= 12 ? a.h : (base + 150) % 360\n if (style === 'distinct') return [0, 1, 2, 3, 4].map((i) => (base + i * 72) % 360)\n const chosen = [base, hueDistance(base, second) < 25 ? (base + 150) % 360 : second]\n const candidates = [180, 60, -60, 120, -120, 30, -30].flatMap((d) => [\n (base + d + 360) % 360,\n (chosen[1] + d + 360) % 360,\n ])\n while (chosen.length < 5) {\n let best = candidates[0]\n let bestScore = -1\n for (const c of candidates) {\n const score = Math.min(...chosen.map((h) => hueDistance(h, c)))\n if (score > bestScore) {\n best = c\n bestScore = score\n }\n }\n chosen.push(best)\n }\n return chosen\n}\n\n/**\n * Every derived token's value for one scheme, as hex. Pure: the same inputs always give the same\n * colours. Text pairs reach WCAG AA (4.5:1), ring and input 3:1 against the page, chart series 3:1\n * against the page (graphical objects).\n */\nexport function deriveColors(inputs: ThemeInputs, scheme: ColorScheme): Record<string, string> {\n const dark = scheme === 'dark'\n const p = parseHsl(inputs.primary) ?? parseHsl(DEFAULT_INPUTS.primary)!\n const a = parseHsl(inputs.accent) ?? parseHsl(DEFAULT_INPUTS.accent)!\n const w = clamp(inputs.warmth, -1, 1)\n const strength = Math.abs(w)\n const pageTint = Math.max(0, strength - 0.5) * 2 // 0 until ±0.5, then 0..1\n\n // The neutral family: pure grey at 0, paper (warm) or slate (cool) as the tone moves.\n const sh = w > 0 ? 42 : 218\n const ss = strength * (w > 0 ? 35 : 25)\n const out: Record<string, string> = {}\n\n // Surfaces\n const bgL = dark ? 7 : 100 - 6 * pageTint\n const neutralS = dark ? Math.min(ss, 22) : ss\n out.background = hsl(sh, neutralS, bgL)\n out.card = dark ? hsl(sh, neutralS, 9) : mix(out.background, '#ffffff', 0.85)\n out.popover = dark ? hsl(sh, neutralS, 10) : out.card\n out.muted = hsl(sh, neutralS * (dark ? 0.8 : 1), dark ? 14 : bgL - 4 - 1.5 * pageTint)\n out.border = hsl(sh, neutralS * (dark ? 0.7 : 0.8), dark ? 20 : bgL - 10)\n out.input = ensureContrast(hsl(sh, neutralS * 0.6, dark ? 42 : 58), out.background, AA_UI)\n out['ai-surface'] = out.card\n\n // Hover and selected rows: a light tint of the primary (a deep one in dark).\n const accentS = Math.min(p.s + 10, 62) * (1 - 0.5 * Math.max(0, w))\n out.accent = dark ? hsl(p.h, Math.min(p.s, 35), 21) : hsl(p.h, accentS, bgL - 5)\n\n // Brand\n const primary = dark && p.l < 55 ? hsl(p.h, Math.min(p.s + 20, 80), 70) : toHex(inputs.primary)\n out.primary = primary\n out.ring = ensureContrast(\n hsl(p.h, Math.min(p.s, 60) * (dark ? 0.9 : 0.8), dark ? 65 : 54),\n out.background,\n AA_UI\n )\n out.hero = dark\n ? hsl(p.h, Math.min(p.s, 50), 17)\n : p.l <= 30\n ? toHex(inputs.primary)\n : hsl(p.h, p.s, 22)\n\n const accent = dark && a.l < 45 ? hsl(a.h, a.s, 55) : toHex(inputs.accent)\n out['ai-soft'] = mix(accent, out.background, dark ? 0.82 : 0.88)\n out['ai-ink'] = ensureContrast(accent, out['ai-soft'], AA_TEXT)\n out['ai-accent'] = out['ai-ink']\n out['ai-accent-soft'] = out['ai-soft']\n out['theme-cyan'] = ensureContrast(accent, out.background, AA_TEXT)\n out['theme-cyan-bright'] = ensureContrast(hsl(a.h, a.s, Math.max(a.l, 47)), out.hero, AA_TEXT)\n\n // Text\n const ink = hsl(sh, Math.min(10 + ss, 40), 12)\n const paper = hsl(sh, Math.min(ss, 30), dark ? 93 : 98)\n out.foreground = ensureContrast(dark ? hsl(sh, 18, 93) : ink, out.background, 7)\n out['card-foreground'] = out.foreground\n out['popover-foreground'] = out.foreground\n out['muted-foreground'] = ensureContrast(\n hsl(sh, Math.min(ss, 15), dark ? 70 : 42),\n out.muted,\n AA_TEXT\n )\n out['primary-foreground'] = readableOn(primary, paper, dark ? hsl(p.h, 30, 8) : ink)\n out['accent-foreground'] = dark\n ? ensureContrast(hsl(p.h, 70, 92), out.accent, AA_TEXT)\n : ensureContrast(primary, out.accent, AA_TEXT)\n out['ai-accent-foreground'] = readableOn(out['ai-accent'], '#ffffff', ink)\n\n if (inputs.secondaryRole === 'surface') {\n out.secondary = hsl(sh, neutralS, dark ? 18 : bgL - 7)\n out['secondary-foreground'] = ensureContrast(out.foreground, out.secondary, AA_TEXT)\n } else {\n out.secondary = accent\n out['secondary-foreground'] = readableOn(accent, paper, ink)\n }\n\n // Sidebar\n if (inputs.sidebar === 'brand') {\n const panel = hsl(p.h, Math.min(p.s, 45), dark ? 9 : 10)\n out.sidebar = panel\n out['sidebar-accent'] = hsl(p.h, Math.min(p.s, 45), 18)\n out['sidebar-border'] = hsl(p.h, Math.min(p.s, 40), 20)\n out['sidebar-foreground'] = ensureContrast(hsl(p.h, 15, 82), panel, AA_TEXT)\n out['sidebar-muted'] = ensureContrast(hsl(p.h, 10, 60), panel, AA_TEXT)\n out['sidebar-accent-foreground'] = ensureContrast(paper, out['sidebar-accent'], AA_TEXT)\n out['sidebar-primary'] = ensureContrast(hsl(a.h, a.s, Math.max(a.l, 50)), panel, AA_UI)\n } else {\n out.sidebar = hsl(sh, neutralS, dark ? 10 : bgL - 3)\n out['sidebar-accent'] = out.accent\n out['sidebar-border'] = out.border\n out['sidebar-foreground'] = out.foreground\n out['sidebar-muted'] = ensureContrast(out['muted-foreground'], out.sidebar, AA_TEXT)\n out['sidebar-accent-foreground'] = out['accent-foreground']\n out['sidebar-primary'] = ensureContrast(primary, out.sidebar, AA_UI)\n }\n\n // Status: one family per input, tinted on the page.\n const status = (hue: string, color: string) => {\n const c = toHex(color)\n const solid = dark && (parseHsl(c)?.l ?? 50) < 45 ? mix(c, '#ffffff', 0.25) : c\n const bg = mix(solid, out.background, dark ? 0.85 : 0.9)\n out[`${hue}-bg`] = bg\n out[`${hue}-border`] = mix(solid, out.background, dark ? 0.65 : 0.72)\n out[`${hue}-solid`] = solid\n out[`${hue}-text`] = ensureContrast(solid, bg, AA_TEXT)\n out[`${hue}-text-strong`] = ensureContrast(solid, bg, 7)\n return solid\n }\n const danger = status('red', inputs.danger)\n out.success = status('green', inputs.success)\n out.warning = status('yellow', inputs.warning)\n out.destructive = dark ? hsl(parseHsl(danger)!.h, 55, 42) : toHex(inputs.danger)\n out['destructive-foreground'] = readableOn(out.destructive, '#ffffff', ink)\n\n // Charts: brand-led hues at alternating lightness, each 3:1 on the page.\n const hues = chartHues(p, a, inputs.charts)\n const lightness = dark ? [62, 58, 68, 54, 72] : [44, 50, 58, 38, 64]\n hues.forEach((h, i) => {\n const s = clamp(i === 0 ? p.s : i === 1 ? a.s : Math.max(p.s, a.s), 55, 80)\n out[`chart-${i + 1}`] = ensureContrast(hsl(h, s, lightness[i]), out.background, AA_UI)\n })\n out['wf-start'] = out['chart-1']\n\n return out\n}\n\n// ── Contrast checks ───────────────────────────────────────────────────────────\n\nexport interface ContrastPair {\n /** The text (or UI part) token. */\n fg: string\n /** The surface it sits on. */\n bg: string\n /** WCAG AA threshold: 4.5 for text, 3 for UI parts. */\n min: number\n /** Plain-language name, e.g. \"Text on buttons\". */\n label: string\n}\n\n/** The pairs the editor checks, light and dark. */\nexport const CONTRAST_PAIRS: readonly ContrastPair[] = [\n { fg: 'foreground', bg: 'background', min: AA_TEXT, label: 'Body text on the page' },\n { fg: 'card-foreground', bg: 'card', min: AA_TEXT, label: 'Text on cards' },\n { fg: 'popover-foreground', bg: 'popover', min: AA_TEXT, label: 'Text in menus' },\n { fg: 'muted-foreground', bg: 'background', min: AA_TEXT, label: 'Secondary text on the page' },\n { fg: 'muted-foreground', bg: 'muted', min: AA_TEXT, label: 'Secondary text on muted areas' },\n { fg: 'primary-foreground', bg: 'primary', min: AA_TEXT, label: 'Text on primary buttons' },\n { fg: 'secondary-foreground', bg: 'secondary', min: AA_TEXT, label: 'Text on secondary fills' },\n { fg: 'accent-foreground', bg: 'accent', min: AA_TEXT, label: 'Text on hover and selection' },\n {\n fg: 'destructive-foreground',\n bg: 'destructive',\n min: AA_TEXT,\n label: 'Text on danger buttons',\n },\n { fg: 'ring', bg: 'background', min: AA_UI, label: 'Focus ring on the page' },\n { fg: 'input', bg: 'background', min: AA_UI, label: 'Field borders on the page' },\n]\n\nexport interface ContrastIssue extends ContrastPair {\n ratio: number\n /** The foreground value that passes (same hue, lightness moved). */\n fix: string\n}\n\n/**\n * The pairs below their threshold, given a token resolver (the theme's value of a key, or\n * `undefined` when unknown). Pairs with an unknown or unparseable side are skipped.\n */\nexport function contrastIssues(\n resolve: (key: string) => string | undefined,\n pairs: readonly ContrastPair[] = CONTRAST_PAIRS\n): ContrastIssue[] {\n const issues: ContrastIssue[] = []\n for (const pair of pairs) {\n const fg = resolve(pair.fg)\n const bg = resolve(pair.bg)\n if (!fg || !bg) continue\n const ratio = contrastRatio(fg, bg)\n if (ratio === null || ratio >= pair.min) continue\n issues.push({ ...pair, ratio, fix: ensureContrast(fg, bg, pair.min) })\n }\n return issues\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","/**\n * The theme editor preview's sample words. Neutral defaults; a host overrides any of them (e.g. to\n * its own vocabulary) through `ThemeEditor previewLabels` or `ThemePreview labels`.\n */\nexport interface ThemePreviewLabels {\n title: string\n subtitle: string\n primaryAction: string\n accentAction: string\n secondaryAction: string\n outlineAction: string\n dangerAction: string\n fieldLabel: string\n fieldPlaceholder: string\n cardBody: string\n tabs: [string, string, string]\n tabBody: string\n nav: [string, string, string]\n steps: [string, string, string]\n chartLabel: string\n chartMonths: [string, string, string, string]\n chartSeries: [string, string]\n toastTitle: string\n toastBody: string\n toastAction: string\n badges: { neutral: string; success: string; warning: string; danger: string; ai: string }\n alerts: { info: string; danger: string }\n}\n\nexport const DEFAULT_THEME_PREVIEW_LABELS: ThemePreviewLabels = {\n title: 'Preview',\n subtitle: 'How your theme looks on real components',\n primaryAction: 'Save',\n accentAction: 'Ask AI',\n secondaryAction: 'Cancel',\n outlineAction: 'Export',\n dangerAction: 'Delete',\n fieldLabel: 'Search',\n fieldPlaceholder: 'Find a document',\n cardBody: 'Cards hold a title, a short summary and their actions.',\n tabs: ['Overview', 'Activity', 'Settings'],\n tabBody: 'The active tab is underlined in the primary colour.',\n nav: ['Home', 'Inbox', 'Documents'],\n steps: ['Intake', 'Review', 'Sign'],\n chartLabel: 'Documents per month, two series',\n chartMonths: ['Jan', 'Feb', 'Mar', 'Apr'],\n chartSeries: ['Received', 'Completed'],\n toastTitle: 'Changes saved',\n toastBody: 'Your theme is live for everyone.',\n toastAction: 'Undo',\n badges: { neutral: 'Draft', success: 'Done', warning: 'Due soon', danger: 'Overdue', ai: 'AI' },\n alerts: {\n info: 'A new version is available.',\n danger: 'The upload failed.',\n },\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { applyThemeVars } from './chunk-
|
|
2
|
+
import { inferInputs, deriveColors, DERIVED_TOKENS, applyThemeVars } from './chunk-J77BACGX.js';
|
|
3
3
|
import { getFontPairing } from './chunk-NHZK64TQ.js';
|
|
4
4
|
import { initials } from './chunk-5VYJP6XD.js';
|
|
5
5
|
import { create } from 'zustand';
|
|
@@ -8,54 +8,199 @@ import { cn, Button, Card, Avatar, AvatarImage, AvatarFallback, AiMarkdown } fro
|
|
|
8
8
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
9
9
|
import { createContext, useContext, useState } from 'react';
|
|
10
10
|
import { ImageIcon, ArrowRight, Quote, ChevronDown, X, Menu, Check, ArrowUpRight } from 'lucide-react';
|
|
11
|
-
import * as TabsPrimitive from '@radix-ui/react-tabs';
|
|
12
11
|
|
|
12
|
+
var COALESCE_MS = 400;
|
|
13
|
+
var sameColors = (a, b) => Object.keys(a).length === Object.keys(b).length && Object.keys(a).every((k) => a[k] === b[k]);
|
|
13
14
|
function createThemeStore(config) {
|
|
14
|
-
const { defaultTheme, presets, storageKey } = config;
|
|
15
|
+
const { defaultTheme, presets, storageKey, darkColors } = config;
|
|
16
|
+
const firstPresetId = presets[0]?.id ?? null;
|
|
17
|
+
const initial = () => ({
|
|
18
|
+
colors: { ...defaultTheme.colors },
|
|
19
|
+
dark: { ...defaultTheme.dark ?? darkColors ?? {} },
|
|
20
|
+
fonts: { ...defaultTheme.fonts },
|
|
21
|
+
radius: defaultTheme.radius,
|
|
22
|
+
inputs: inferInputs(defaultTheme.colors),
|
|
23
|
+
overrides: [],
|
|
24
|
+
activePresetId: firstPresetId
|
|
25
|
+
});
|
|
26
|
+
const presetDark = (colors, preset) => {
|
|
27
|
+
if (preset?.dark) return { ...preset.dark };
|
|
28
|
+
const base = { ...darkColors ?? {} };
|
|
29
|
+
if (sameColors(colors, defaultTheme.colors)) return base;
|
|
30
|
+
const derived = deriveColors(inferInputs(colors), "dark");
|
|
31
|
+
for (const key of Object.keys(colors)) {
|
|
32
|
+
if (colors[key] !== defaultTheme.colors[key] && derived[key]) base[key] = derived[key];
|
|
33
|
+
}
|
|
34
|
+
return base;
|
|
35
|
+
};
|
|
36
|
+
let lastEdit = null;
|
|
15
37
|
const useStore = create()(
|
|
16
38
|
persist(
|
|
17
|
-
(set, get) =>
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
39
|
+
(set, get) => {
|
|
40
|
+
const entry = () => {
|
|
41
|
+
const { colors, dark, fonts, radius, inputs, overrides, activePresetId } = get();
|
|
42
|
+
return { colors, dark, fonts, radius, inputs, overrides, activePresetId };
|
|
43
|
+
};
|
|
44
|
+
const commit = (patch, editKey) => {
|
|
45
|
+
const now = Date.now();
|
|
46
|
+
const merge = editKey !== void 0 && lastEdit?.key === editKey && now - lastEdit.at < COALESCE_MS && get().past.length > 0;
|
|
47
|
+
lastEdit = editKey === void 0 ? null : { key: editKey, at: now };
|
|
48
|
+
set((s) => ({
|
|
49
|
+
...patch,
|
|
50
|
+
past: merge ? s.past : [...s.past, entry()].slice(-100),
|
|
51
|
+
future: []
|
|
52
|
+
}));
|
|
53
|
+
};
|
|
54
|
+
return {
|
|
55
|
+
...initial(),
|
|
56
|
+
past: [],
|
|
57
|
+
future: [],
|
|
58
|
+
setInput: (key, value) => {
|
|
59
|
+
const s = get();
|
|
60
|
+
const inputs = { ...s.inputs, [key]: value };
|
|
61
|
+
const light = deriveColors(inputs, "light");
|
|
62
|
+
const dark = deriveColors(inputs, "dark");
|
|
63
|
+
const colors = { ...s.colors };
|
|
64
|
+
const darkSet = { ...s.dark };
|
|
65
|
+
for (const token of DERIVED_TOKENS) {
|
|
66
|
+
if (!token.deps.includes(key) || s.overrides.includes(token.key)) continue;
|
|
67
|
+
colors[token.key] = light[token.key];
|
|
68
|
+
darkSet[token.key] = dark[token.key];
|
|
69
|
+
}
|
|
70
|
+
commit({ inputs, colors, dark: darkSet, activePresetId: null }, `input:${key}`);
|
|
71
|
+
},
|
|
72
|
+
setColor: (key, value, scheme = "light") => {
|
|
73
|
+
const s = get();
|
|
74
|
+
const overrides = s.overrides.includes(key) ? s.overrides : [...s.overrides, key];
|
|
75
|
+
if (scheme === "dark") {
|
|
76
|
+
commit(
|
|
77
|
+
{ dark: { ...s.dark, [key]: value }, overrides, activePresetId: null },
|
|
78
|
+
`dark:${key}`
|
|
79
|
+
);
|
|
80
|
+
} else {
|
|
81
|
+
commit(
|
|
82
|
+
{ colors: { ...s.colors, [key]: value }, overrides, activePresetId: null },
|
|
83
|
+
`color:${key}`
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
clearOverride: (key) => {
|
|
88
|
+
const s = get();
|
|
89
|
+
if (!s.overrides.includes(key)) return;
|
|
90
|
+
const overrides = s.overrides.filter((k) => k !== key);
|
|
91
|
+
const light = deriveColors(s.inputs, "light");
|
|
92
|
+
const dark = deriveColors(s.inputs, "dark");
|
|
93
|
+
const lightValue = light[key] ?? defaultTheme.colors[key];
|
|
94
|
+
const darkValue = dark[key] ?? darkColors?.[key];
|
|
95
|
+
const colors = { ...s.colors };
|
|
96
|
+
const darkSet = { ...s.dark };
|
|
97
|
+
if (lightValue !== void 0) colors[key] = lightValue;
|
|
98
|
+
if (darkValue !== void 0) darkSet[key] = darkValue;
|
|
99
|
+
commit({ overrides, colors, dark: darkSet });
|
|
100
|
+
},
|
|
101
|
+
setFont: (which, value) => commit(
|
|
102
|
+
{ fonts: { ...get().fonts, [which]: value }, activePresetId: null },
|
|
103
|
+
`font:${which}`
|
|
104
|
+
),
|
|
105
|
+
// A pairing sets both faces together — that is the whole point of it.
|
|
106
|
+
// Unknown ids are ignored rather than clearing the typography.
|
|
107
|
+
setFontPairing: (pairingId) => {
|
|
108
|
+
const pairing = getFontPairing(pairingId);
|
|
109
|
+
if (!pairing) return;
|
|
110
|
+
commit({
|
|
111
|
+
fonts: { display: pairing.display, sans: pairing.sans },
|
|
112
|
+
activePresetId: null
|
|
113
|
+
});
|
|
114
|
+
},
|
|
115
|
+
setRadius: (radius) => commit({ radius, activePresetId: null }, "radius"),
|
|
116
|
+
applyPreset: (presetId) => {
|
|
117
|
+
const preset = presets.find((p) => p.id === presetId);
|
|
118
|
+
if (!preset) return;
|
|
119
|
+
const colors = { ...preset.tokens.colors };
|
|
120
|
+
commit({
|
|
121
|
+
colors,
|
|
122
|
+
dark: presetDark(colors, preset.tokens),
|
|
123
|
+
fonts: { ...preset.tokens.fonts },
|
|
124
|
+
radius: preset.tokens.radius,
|
|
125
|
+
inputs: inferInputs(colors),
|
|
126
|
+
overrides: [],
|
|
127
|
+
activePresetId: presetId
|
|
128
|
+
});
|
|
129
|
+
},
|
|
130
|
+
reset: () => commit(initial()),
|
|
131
|
+
undo: () => {
|
|
132
|
+
const s = get();
|
|
133
|
+
const previous = s.past[s.past.length - 1];
|
|
134
|
+
if (!previous) return;
|
|
135
|
+
lastEdit = null;
|
|
136
|
+
set({ ...previous, past: s.past.slice(0, -1), future: [entry(), ...s.future] });
|
|
137
|
+
},
|
|
138
|
+
redo: () => {
|
|
139
|
+
const s = get();
|
|
140
|
+
const next = s.future[0];
|
|
141
|
+
if (!next) return;
|
|
142
|
+
lastEdit = null;
|
|
143
|
+
set({ ...next, past: [...s.past, entry()], future: s.future.slice(1) });
|
|
144
|
+
},
|
|
145
|
+
load: (tokens) => {
|
|
146
|
+
const colors = { ...defaultTheme.colors, ...tokens.colors };
|
|
147
|
+
lastEdit = null;
|
|
148
|
+
set({
|
|
149
|
+
colors,
|
|
150
|
+
dark: { ...presetDark(colors), ...tokens.dark ?? {} },
|
|
151
|
+
fonts: tokens.fonts ?? defaultTheme.fonts,
|
|
152
|
+
radius: tokens.radius ?? defaultTheme.radius,
|
|
153
|
+
inputs: inferInputs(colors),
|
|
154
|
+
overrides: [],
|
|
155
|
+
activePresetId: null,
|
|
156
|
+
past: [],
|
|
157
|
+
future: []
|
|
158
|
+
});
|
|
159
|
+
},
|
|
160
|
+
snapshot: () => {
|
|
161
|
+
const { colors, fonts, radius, dark } = get();
|
|
162
|
+
return darkColors ? { colors, fonts, radius, dark } : { colors, fonts, radius };
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: storageKey,
|
|
168
|
+
version: 1,
|
|
169
|
+
partialize: (s) => ({
|
|
170
|
+
colors: s.colors,
|
|
171
|
+
dark: s.dark,
|
|
172
|
+
fonts: s.fonts,
|
|
173
|
+
radius: s.radius,
|
|
174
|
+
inputs: s.inputs,
|
|
175
|
+
overrides: s.overrides,
|
|
176
|
+
activePresetId: s.activePresetId
|
|
45
177
|
}),
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
178
|
+
// v0 stored only colours, fonts, radius and the preset: describe those colours with
|
|
179
|
+
// inputs, and keep the host's dark set.
|
|
180
|
+
migrate: (stored, version) => {
|
|
181
|
+
const old = stored ?? {};
|
|
182
|
+
if (version >= 1) return old;
|
|
183
|
+
const colors = { ...defaultTheme.colors, ...old.colors ?? {} };
|
|
184
|
+
return {
|
|
185
|
+
...initial(),
|
|
186
|
+
...old,
|
|
187
|
+
colors,
|
|
188
|
+
dark: presetDark(colors),
|
|
189
|
+
inputs: inferInputs(colors),
|
|
190
|
+
overrides: []
|
|
191
|
+
};
|
|
49
192
|
}
|
|
50
|
-
}
|
|
51
|
-
{ name: storageKey }
|
|
193
|
+
}
|
|
52
194
|
)
|
|
53
195
|
);
|
|
54
196
|
return { ...config, useStore };
|
|
55
197
|
}
|
|
56
198
|
function applyStoredTheme(bundle) {
|
|
57
|
-
const { colors, fonts, radius } = bundle.useStore.getState();
|
|
58
|
-
applyThemeVars(
|
|
199
|
+
const { colors, fonts, radius, dark } = bundle.useStore.getState();
|
|
200
|
+
applyThemeVars(
|
|
201
|
+
{ colors, fonts, radius },
|
|
202
|
+
{ mode: bundle.mode, dark: bundle.darkColors ? dark : void 0 }
|
|
203
|
+
);
|
|
59
204
|
}
|
|
60
205
|
function SectionHeading({
|
|
61
206
|
eyebrow,
|
|
@@ -640,36 +785,6 @@ function PricingTable({ plans, testId }) {
|
|
|
640
785
|
}
|
|
641
786
|
);
|
|
642
787
|
}
|
|
643
|
-
function Tabs({ items, testId }) {
|
|
644
|
-
const list = items ?? [];
|
|
645
|
-
const [active, setActive] = useState("0");
|
|
646
|
-
const activeIndex = Math.min(Number(active), Math.max(list.length - 1, 0));
|
|
647
|
-
return /* @__PURE__ */ jsxs(TabsPrimitive.Root, { value: String(activeIndex), onValueChange: setActive, "data-testid": testId, children: [
|
|
648
|
-
/* @__PURE__ */ jsx(TabsPrimitive.List, { className: "flex flex-wrap gap-1 border-b border-border", children: list.map((t, i) => /* @__PURE__ */ jsx(
|
|
649
|
-
TabsPrimitive.Trigger,
|
|
650
|
-
{
|
|
651
|
-
value: String(i),
|
|
652
|
-
className: cn(
|
|
653
|
-
"-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",
|
|
654
|
-
i === activeIndex ? "border-primary text-foreground" : "border-transparent text-muted-foreground hover:text-foreground"
|
|
655
|
-
),
|
|
656
|
-
"data-testid": testId && `${testId}-tab-${i}`,
|
|
657
|
-
children: t.label
|
|
658
|
-
},
|
|
659
|
-
i
|
|
660
|
-
)) }),
|
|
661
|
-
list.map((t, i) => /* @__PURE__ */ jsx(
|
|
662
|
-
TabsPrimitive.Content,
|
|
663
|
-
{
|
|
664
|
-
value: String(i),
|
|
665
|
-
className: "pt-5 text-sm leading-relaxed text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
666
|
-
"data-testid": i === activeIndex ? testId && `${testId}-panel` : void 0,
|
|
667
|
-
children: t.content
|
|
668
|
-
},
|
|
669
|
-
i
|
|
670
|
-
))
|
|
671
|
-
] });
|
|
672
|
-
}
|
|
673
788
|
function Accordion({ items, allowMultiple = false, testId }) {
|
|
674
789
|
const [open, setOpen] = useState([]);
|
|
675
790
|
const toggle = (i) => setOpen(
|
|
@@ -1161,6 +1276,6 @@ function TestimonialGrid({ items, columns = "3", testId }) {
|
|
|
1161
1276
|
)) });
|
|
1162
1277
|
}
|
|
1163
1278
|
|
|
1164
|
-
export { ASSET_REF_PREFIX, Accordion, AssetResolverProvider, AvatarBlock, BlockImage, BlockLink, CTABanner, Columns, ContactForm, Container, EditorialProfileCard, EditorialToneContext, FAQ, FeatureGrid, Footer, Gallery, Hero, ListBlock, LogoCloud, MediaText, Navbar, PricingTable, RichTextBlock, SectionHeading, Spacer, Steps,
|
|
1165
|
-
//# sourceMappingURL=chunk-
|
|
1166
|
-
//# sourceMappingURL=chunk-
|
|
1279
|
+
export { ASSET_REF_PREFIX, Accordion, AssetResolverProvider, AvatarBlock, BlockImage, BlockLink, CTABanner, Columns, ContactForm, Container, EditorialProfileCard, EditorialToneContext, FAQ, FeatureGrid, Footer, Gallery, Hero, ListBlock, LogoCloud, MediaText, Navbar, PricingTable, RichTextBlock, SectionHeading, Spacer, Steps, TeamGrid, Testimonial, TestimonialGrid, VideoEmbed, applyStoredTheme, asAssetRef, assetRefId, createThemeStore, formatIndex, isAssetRef, toEmbedUrl, useAssetRenderer, useAssetResolverActive, useEditorialTone };
|
|
1280
|
+
//# sourceMappingURL=chunk-O4FBMC6S.js.map
|
|
1281
|
+
//# sourceMappingURL=chunk-O4FBMC6S.js.map
|