@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"],"mappings":"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","file":"chunk-J77BACGX.js","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"]}
|
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
|
|
4
4
|
var chunkHYAYXLIZ_cjs = require('./chunk-HYAYXLIZ.cjs');
|
|
5
5
|
var chunkKWJW5TMH_cjs = require('./chunk-KWJW5TMH.cjs');
|
|
6
|
-
var
|
|
6
|
+
var chunkCMYJEIZB_cjs = require('./chunk-CMYJEIZB.cjs');
|
|
7
7
|
var chunkEGJ7WJ6Q_cjs = require('./chunk-EGJ7WJ6Q.cjs');
|
|
8
8
|
var chunkJBL4PPEE_cjs = require('./chunk-JBL4PPEE.cjs');
|
|
9
|
-
var
|
|
9
|
+
var chunkWBLCPCWR_cjs = require('./chunk-WBLCPCWR.cjs');
|
|
10
10
|
var chunkT35SGVB2_cjs = require('./chunk-T35SGVB2.cjs');
|
|
11
11
|
var chunkJH6JTI76_cjs = require('./chunk-JH6JTI76.cjs');
|
|
12
12
|
var chunkZ3LFF3YT_cjs = require('./chunk-Z3LFF3YT.cjs');
|
|
13
13
|
var chunkNSD37OF5_cjs = require('./chunk-NSD37OF5.cjs');
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
14
|
+
var chunkCJF7B5A7_cjs = require('./chunk-CJF7B5A7.cjs');
|
|
15
|
+
var chunkZXW6WFZG_cjs = require('./chunk-ZXW6WFZG.cjs');
|
|
16
|
+
var chunkK26RLK2Y_cjs = require('./chunk-K26RLK2Y.cjs');
|
|
17
17
|
var chunkQUMUAJ2P_cjs = require('./chunk-QUMUAJ2P.cjs');
|
|
18
18
|
var chunk7JVP3LS6_cjs = require('./chunk-7JVP3LS6.cjs');
|
|
19
19
|
var chunkKGAYUFXD_cjs = require('./chunk-KGAYUFXD.cjs');
|
|
@@ -38,25 +38,25 @@ function useSkillsEnabled() {
|
|
|
38
38
|
}
|
|
39
39
|
function useWorkflowDefinitions() {
|
|
40
40
|
const { data: listings } = react.useSkills();
|
|
41
|
-
const usage =
|
|
41
|
+
const usage = chunkCJF7B5A7_cjs.useWorkflowUsage();
|
|
42
42
|
const skillsEnabled = useSkillsEnabled();
|
|
43
43
|
return react$1.useMemo(() => {
|
|
44
44
|
const { host: builtins, skills: fromServer } = chunk555BS22J_cjs.mergeSkillWorkflows(
|
|
45
|
-
|
|
45
|
+
chunkCJF7B5A7_cjs.WEB_WORKFLOWS,
|
|
46
46
|
listings ?? []
|
|
47
47
|
);
|
|
48
48
|
const all = [...builtins, ...fromServer];
|
|
49
49
|
const byId = new Map(all.map((w) => [w.id, w]));
|
|
50
|
-
const pinned =
|
|
50
|
+
const pinned = chunkCJF7B5A7_cjs.DASHBOARD_PINNED.flatMap((id) => {
|
|
51
51
|
const w = byId.get(id);
|
|
52
52
|
return w ? [w] : [];
|
|
53
53
|
});
|
|
54
54
|
return {
|
|
55
55
|
skills: all,
|
|
56
56
|
skillsEnabled,
|
|
57
|
-
start: skillsEnabled ? [...builtins, ...
|
|
58
|
-
dashboard: [...pinned, ...
|
|
59
|
-
forTasks: [
|
|
57
|
+
start: skillsEnabled ? [...builtins, ...chunkCJF7B5A7_cjs.sortByRecentUse(fromServer, usage)] : [],
|
|
58
|
+
dashboard: [...pinned, ...chunkCJF7B5A7_cjs.DASHBOARD_OPERATIONS],
|
|
59
|
+
forTasks: [chunkCJF7B5A7_cjs.CUSTOM_TASK, ...all.filter((w) => w.schedulable), chunkCJF7B5A7_cjs.REMIND_TASK]
|
|
60
60
|
};
|
|
61
61
|
}, [listings, usage, skillsEnabled]);
|
|
62
62
|
}
|
|
@@ -84,7 +84,7 @@ function useWorkflowTasks() {
|
|
|
84
84
|
);
|
|
85
85
|
const create = react$1.useCallback(
|
|
86
86
|
async (ctx, forceWorkflow = false) => {
|
|
87
|
-
const request =
|
|
87
|
+
const request = chunkCJF7B5A7_cjs.taskComposerToCreateRequest(
|
|
88
88
|
{ ...ctx, documentTitles, plan: ctx.plan ?? null },
|
|
89
89
|
activeWorkspaceId ?? void 0,
|
|
90
90
|
forceWorkflow
|
|
@@ -126,7 +126,7 @@ function useWorkflowTasks() {
|
|
|
126
126
|
);
|
|
127
127
|
const update = react$1.useCallback(
|
|
128
128
|
async (task, ctx) => {
|
|
129
|
-
const patch =
|
|
129
|
+
const patch = chunkCJF7B5A7_cjs.taskComposerToUpdateRequest({ ...ctx, plan: ctx.plan ?? null });
|
|
130
130
|
if (task.is_owner === false) delete patch.shared;
|
|
131
131
|
await updateConversation.mutateAsync({ conversationId: task.external_id, patch });
|
|
132
132
|
},
|
|
@@ -134,7 +134,7 @@ function useWorkflowTasks() {
|
|
|
134
134
|
);
|
|
135
135
|
const updateWorkflow = react$1.useCallback(
|
|
136
136
|
async (workflow, ctx) => {
|
|
137
|
-
const patch =
|
|
137
|
+
const patch = chunkCJF7B5A7_cjs.composerToWorkflowUpdate({ ...ctx, documentTitles, plan: ctx.plan ?? null });
|
|
138
138
|
if (workflow.is_owner === false) delete patch.shared;
|
|
139
139
|
const workspaceId = workflow.workspace_ext_id ?? activeWorkspaceId;
|
|
140
140
|
const updated = await updateWorkflowMutation.mutateAsync({
|
|
@@ -249,7 +249,7 @@ function ConnectedTaskComposer({
|
|
|
249
249
|
const { tasks: allTasks } = react.useWorkItems();
|
|
250
250
|
const { data: documents = [] } = react.useDocuments();
|
|
251
251
|
const { create, update, updateWorkflow, isPending } = useWorkflowTasks();
|
|
252
|
-
const scopeSource =
|
|
252
|
+
const scopeSource = chunkWBLCPCWR_cjs.useConnectedWorkflowScopeSource();
|
|
253
253
|
const activeWorkspaceId = react.useArbiSessionState((s) => s.workspaceId);
|
|
254
254
|
const activeWorkspace = react$1.useMemo(
|
|
255
255
|
() => workspaces.find((w) => w.external_id === activeWorkspaceId) ?? null,
|
|
@@ -266,7 +266,7 @@ function ConnectedTaskComposer({
|
|
|
266
266
|
const label = (t) => t.title?.trim() || "Untitled task";
|
|
267
267
|
if (isWorkflow) return allTasks.map((t) => ({ id: t.external_id, name: label(t) }));
|
|
268
268
|
const subject = task ?? { external_id: "__new__" };
|
|
269
|
-
return
|
|
269
|
+
return chunkCJF7B5A7_cjs.moveTargets(
|
|
270
270
|
[...allTasks.filter((t) => t.external_id !== subject.external_id), subject],
|
|
271
271
|
subject
|
|
272
272
|
).map((t) => ({ id: t.external_id, name: label(t) }));
|
|
@@ -281,33 +281,33 @@ function ConnectedTaskComposer({
|
|
|
281
281
|
);
|
|
282
282
|
const initialValues = react$1.useMemo(() => {
|
|
283
283
|
const ids = {
|
|
284
|
-
customWorkflowId:
|
|
285
|
-
reminderWorkflowId:
|
|
284
|
+
customWorkflowId: chunkCJF7B5A7_cjs.CUSTOM_TASK_ID,
|
|
285
|
+
reminderWorkflowId: chunkCJF7B5A7_cjs.REMIND_TASK_ID,
|
|
286
286
|
definitions: forTasks
|
|
287
287
|
};
|
|
288
288
|
const base = launchWorkflow ? {
|
|
289
|
-
...
|
|
289
|
+
...chunkCJF7B5A7_cjs.workflowToComposerValues(launchWorkflow, ids),
|
|
290
290
|
when: "once",
|
|
291
291
|
runAt: "",
|
|
292
292
|
rrule: "",
|
|
293
293
|
eventKind: "",
|
|
294
294
|
afterTaskId: "",
|
|
295
295
|
name: ""
|
|
296
|
-
} : editingWorkflow ?
|
|
296
|
+
} : editingWorkflow ? chunkCJF7B5A7_cjs.workflowToComposerValues(editingWorkflow, ids) : task ? chunkCJF7B5A7_cjs.taskToComposerValues(task, ids) : isWorkflow ? {
|
|
297
297
|
// Run now is the default start; scheduling is the fallback in the same field.
|
|
298
298
|
assignee: "agent",
|
|
299
|
-
workflowId: initialWorkflowId ??
|
|
299
|
+
workflowId: initialWorkflowId ?? chunkCJF7B5A7_cjs.CUSTOM_TASK_ID,
|
|
300
300
|
when: startLater ? "once" : "now",
|
|
301
301
|
...initialPrompt ? {
|
|
302
302
|
inputs: {
|
|
303
|
-
[initialWorkflowId ===
|
|
303
|
+
[initialWorkflowId === chunkCJF7B5A7_cjs.REMIND_TASK_ID ? "message" : "instruction"]: initialPrompt
|
|
304
304
|
}
|
|
305
305
|
} : {},
|
|
306
306
|
// A scheduled run needs an agent: the owner's Assistant unless another is picked.
|
|
307
307
|
...startLater && defaultAgentId ? { agentId: defaultAgentId } : {}
|
|
308
308
|
} : initialAgentExtId ? (
|
|
309
309
|
// Assigning an agent means agentic work: the free instruction, and tell me when done.
|
|
310
|
-
{ agentId: initialAgentExtId, workflowId:
|
|
310
|
+
{ agentId: initialAgentExtId, workflowId: chunkCJF7B5A7_cjs.CUSTOM_TASK_ID, notifyOnComplete: true }
|
|
311
311
|
) : {};
|
|
312
312
|
return {
|
|
313
313
|
timezone: chunkQUMUAJ2P_cjs.detectTimeZone(),
|
|
@@ -368,7 +368,7 @@ function ConnectedTaskComposer({
|
|
|
368
368
|
const ctx = {
|
|
369
369
|
workflow: chosen,
|
|
370
370
|
values: submitted,
|
|
371
|
-
plan: chosen.id ===
|
|
371
|
+
plan: chosen.id === chunkCJF7B5A7_cjs.CUSTOM_TASK_ID ? plan : null
|
|
372
372
|
};
|
|
373
373
|
try {
|
|
374
374
|
if (isWorkflow && editingWorkflow && !options?.runOnce) {
|
|
@@ -404,7 +404,7 @@ function ConnectedTaskComposer({
|
|
|
404
404
|
}
|
|
405
405
|
};
|
|
406
406
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
407
|
-
|
|
407
|
+
chunkCJF7B5A7_cjs.TaskComposer,
|
|
408
408
|
{
|
|
409
409
|
open,
|
|
410
410
|
onOpenChange,
|
|
@@ -418,15 +418,15 @@ function ConnectedTaskComposer({
|
|
|
418
418
|
tasks: taskOptions,
|
|
419
419
|
initialValues,
|
|
420
420
|
timezones,
|
|
421
|
-
eventOptions:
|
|
421
|
+
eventOptions: chunkZXW6WFZG_cjs.AUTOMATION_EVENTS,
|
|
422
422
|
eventWorkflowOptions: workspaceAutomations.filter((item) => item.external_id !== editingWorkflow?.external_id).map((item) => ({ id: item.external_id, label: item.name })),
|
|
423
423
|
isPending,
|
|
424
424
|
planDrafting: planWork.isPending,
|
|
425
425
|
hasPlan: plan !== null,
|
|
426
|
-
renderIcon:
|
|
426
|
+
renderIcon: chunkCJF7B5A7_cjs.renderWorkflowIcon,
|
|
427
427
|
scopeSource,
|
|
428
428
|
renderDocuments: (field, value, onChange) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
429
|
-
|
|
429
|
+
chunkWBLCPCWR_cjs.ConnectedWorkflowDocumentsField,
|
|
430
430
|
{
|
|
431
431
|
field,
|
|
432
432
|
value,
|
|
@@ -457,8 +457,8 @@ function ConnectedTaskComposer({
|
|
|
457
457
|
...plan ? { addAndStart: "Approve plan and start", addAndSchedule: "Approve plan and schedule" } : {}
|
|
458
458
|
},
|
|
459
459
|
onSubmit: submit,
|
|
460
|
-
goal: (values) => values.workflowId ===
|
|
461
|
-
|
|
460
|
+
goal: (values) => values.workflowId === chunkCJF7B5A7_cjs.CUSTOM_TASK_ID ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
461
|
+
chunkCJF7B5A7_cjs.TaskPlan,
|
|
462
462
|
{
|
|
463
463
|
plan,
|
|
464
464
|
onChange: setPlan,
|
|
@@ -504,7 +504,7 @@ function ConnectedWorkflowHistory({
|
|
|
504
504
|
const { openConversation } = chunkT6GRWWRY_cjs.useBlocksEnvironment();
|
|
505
505
|
const { data: runs = [], isLoading } = react.useWorkflowRuns(workflow?.external_id);
|
|
506
506
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
507
|
-
|
|
507
|
+
chunkCJF7B5A7_cjs.TaskRunsDialog,
|
|
508
508
|
{
|
|
509
509
|
inline,
|
|
510
510
|
hideHeader,
|
|
@@ -540,14 +540,14 @@ function ConnectedTaskActivityDialog({
|
|
|
540
540
|
const activity = react.useConversationActivity(conversationId, { live });
|
|
541
541
|
const { data: agents = [] } = react.useAgents();
|
|
542
542
|
const { userId } = chunkKGAYUFXD_cjs.useConnectedWorkspace();
|
|
543
|
-
const { members } =
|
|
543
|
+
const { members } = chunkWBLCPCWR_cjs.useConnectedWorkspaceRole();
|
|
544
544
|
const renderPerson = react$1.useCallback(
|
|
545
545
|
(id) => {
|
|
546
546
|
const isMe = !!id && id === userId;
|
|
547
547
|
const member = members.find((m) => m.user.external_id === id)?.user;
|
|
548
548
|
const name = member && [member.given_name, member.family_name].filter(Boolean).join(" ") || member?.email;
|
|
549
549
|
const person = { id, label: isMe ? "You" : name || "Someone", isMe };
|
|
550
|
-
return renderTaskPerson ? renderTaskPerson(person) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
550
|
+
return renderTaskPerson ? renderTaskPerson(person) : /* @__PURE__ */ jsxRuntime.jsx(chunkK26RLK2Y_cjs.PersonPill, { person });
|
|
551
551
|
},
|
|
552
552
|
[renderTaskPerson, userId, members]
|
|
553
553
|
);
|
|
@@ -556,7 +556,7 @@ function ConnectedTaskActivityDialog({
|
|
|
556
556
|
[agents]
|
|
557
557
|
);
|
|
558
558
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
559
|
-
|
|
559
|
+
chunkCJF7B5A7_cjs.TaskActivityDialog,
|
|
560
560
|
{
|
|
561
561
|
open: true,
|
|
562
562
|
onOpenChange: (open) => !open && onClose(),
|
|
@@ -593,7 +593,7 @@ function useRenderTaskPerson() {
|
|
|
593
593
|
return react$1.useCallback(
|
|
594
594
|
(person) => {
|
|
595
595
|
const user = person.id ? byId.get(person.id) : void 0;
|
|
596
|
-
return user ? /* @__PURE__ */ jsxRuntime.jsx(chunkEGJ7WJ6Q_cjs.DocumentUser, { user, variant: "pill" }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
596
|
+
return user ? /* @__PURE__ */ jsxRuntime.jsx(chunkEGJ7WJ6Q_cjs.DocumentUser, { user, variant: "pill" }) : /* @__PURE__ */ jsxRuntime.jsx(chunkK26RLK2Y_cjs.PersonPill, { person });
|
|
597
597
|
},
|
|
598
598
|
[byId]
|
|
599
599
|
);
|
|
@@ -606,7 +606,7 @@ function ConnectedThreadTaskBar({
|
|
|
606
606
|
renderIcon
|
|
607
607
|
}) {
|
|
608
608
|
const { conversations } = react.useConversationItems();
|
|
609
|
-
const { activity, items, related, signals, startedBy } =
|
|
609
|
+
const { activity, items, related, signals, startedBy } = chunkCMYJEIZB_cjs.useConnectedThreadActivity(conversationId);
|
|
610
610
|
const canEditShared = react.useCanEditShared();
|
|
611
611
|
const update = react.useUpdateConversation();
|
|
612
612
|
const actOnStep = react.useActOnStep();
|
|
@@ -625,7 +625,7 @@ function ConnectedThreadTaskBar({
|
|
|
625
625
|
const person = members.find((m) => m.user.external_id === id)?.user;
|
|
626
626
|
return person ? ui.getUserDisplayName(person) : void 0;
|
|
627
627
|
};
|
|
628
|
-
const steps =
|
|
628
|
+
const steps = chunkZXW6WFZG_cjs.fromPlanSteps(task?.plan?.steps ?? []);
|
|
629
629
|
const states = chunk555BS22J_cjs.stepStatesFromActivity(activity.data ?? []);
|
|
630
630
|
const runInputs = task?.skill_inputs ?? {};
|
|
631
631
|
const stepCall = (body) => actOnStep.mutateAsync({ conversationId, body });
|
|
@@ -643,7 +643,7 @@ function ConnectedThreadTaskBar({
|
|
|
643
643
|
).finally(() => setBusy(false));
|
|
644
644
|
};
|
|
645
645
|
const strip = /* @__PURE__ */ jsxRuntime.jsx(
|
|
646
|
-
|
|
646
|
+
chunkCJF7B5A7_cjs.WorkflowThreadStrip,
|
|
647
647
|
{
|
|
648
648
|
renderIcon,
|
|
649
649
|
...variant === "steps" ? { maxSpan: 3, current: currentStepId, onSelectStep } : {},
|
|
@@ -672,7 +672,7 @@ function ConnectedThreadTaskBar({
|
|
|
672
672
|
renderStepAction: (step, phase) => (
|
|
673
673
|
// A signer or a draft's person acts on their step even on a thread they cannot edit.
|
|
674
674
|
canEdit || phase === "waiting" || phase === "done" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
675
|
-
|
|
675
|
+
chunkCJF7B5A7_cjs.WorkflowStepAction,
|
|
676
676
|
{
|
|
677
677
|
step,
|
|
678
678
|
phase,
|
|
@@ -704,8 +704,8 @@ function ConnectedThreadTaskBar({
|
|
|
704
704
|
// A workflow run: its named steps, with what happened in the thread under each.
|
|
705
705
|
strip
|
|
706
706
|
) : items.length || startedBy ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
707
|
-
startedBy && /* @__PURE__ */ jsxRuntime.jsx(
|
|
708
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
707
|
+
startedBy && /* @__PURE__ */ jsxRuntime.jsx(chunkCJF7B5A7_cjs.WorkflowThreadStartedBy, { origin: startedBy }),
|
|
708
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkZXW6WFZG_cjs.TaskFlow, { items: items.filter((item) => !item.step) })
|
|
709
709
|
] }) : (
|
|
710
710
|
// Ordinary chats record no activity events, so an empty ribbon says nothing rather than
|
|
711
711
|
// "No recorded activity yet" while the answer and its steps are right there in the thread.
|
|
@@ -823,7 +823,7 @@ ${labels.map((l) => `${l.key}=${l.name}`).join("\n")}`;
|
|
|
823
823
|
if (known) return known;
|
|
824
824
|
const setUp = (async () => {
|
|
825
825
|
const existing = await arbi.tags.list({ workspaceId });
|
|
826
|
-
const { ids, missing } =
|
|
826
|
+
const { ids, missing } = chunkCJF7B5A7_cjs.matchRequiredLabels(labels, existing);
|
|
827
827
|
for (const label of missing) {
|
|
828
828
|
const tag = await createTag({
|
|
829
829
|
name: label.name,
|
|
@@ -1014,7 +1014,7 @@ function useWorkflowRunTarget({
|
|
|
1014
1014
|
}) {
|
|
1015
1015
|
const { workspaceId: open } = chunkKGAYUFXD_cjs.useConnectedWorkspace();
|
|
1016
1016
|
const session = react.useArbiSessionStore();
|
|
1017
|
-
const selectWorkspace =
|
|
1017
|
+
const selectWorkspace = chunkCMYJEIZB_cjs.useSelectWorkspace();
|
|
1018
1018
|
const createProject = react.useCreateProject();
|
|
1019
1019
|
const { projects, isLoading: projectsLoading } = useProjectSummaries();
|
|
1020
1020
|
const { data: workspaces } = react.useWorkspaces();
|
|
@@ -1378,7 +1378,7 @@ function useWorkflowThread(workflow, options = {}) {
|
|
|
1378
1378
|
);
|
|
1379
1379
|
const conversation = conversations.data?.find((c) => c.external_id === threadId);
|
|
1380
1380
|
const steps = react$1.useMemo(
|
|
1381
|
-
() => chunk555BS22J_cjs.workflowSteps(workflow).length > 0 ? chunk555BS22J_cjs.workflowSteps(workflow) :
|
|
1381
|
+
() => chunk555BS22J_cjs.workflowSteps(workflow).length > 0 ? chunk555BS22J_cjs.workflowSteps(workflow) : chunkZXW6WFZG_cjs.fromPlanSteps(conversation?.plan?.steps ?? []),
|
|
1382
1382
|
[workflow, conversation?.plan?.steps]
|
|
1383
1383
|
);
|
|
1384
1384
|
const activity = react.useConversationActivity(threadId, { live: !!threadId });
|
|
@@ -1425,7 +1425,7 @@ function useWorkflowThread(workflow, options = {}) {
|
|
|
1425
1425
|
const createThread = react$1.useCallback(
|
|
1426
1426
|
async (values, done) => {
|
|
1427
1427
|
const prepared = await options.beforeStart?.();
|
|
1428
|
-
const planned = prepared?.labelIds ?
|
|
1428
|
+
const planned = prepared?.labelIds ? chunkCJF7B5A7_cjs.withLabelIds(workflow, prepared.labelIds) : workflow;
|
|
1429
1429
|
await ensureWorkspaceOpen();
|
|
1430
1430
|
const created = await createWork.mutateAsync({
|
|
1431
1431
|
title: chunk555BS22J_cjs.runThreadTitle(workflow, values).slice(0, 60),
|
|
@@ -1440,7 +1440,7 @@ function useWorkflowThread(workflow, options = {}) {
|
|
|
1440
1440
|
criteria: [],
|
|
1441
1441
|
max_passes: 3,
|
|
1442
1442
|
documents: [],
|
|
1443
|
-
steps:
|
|
1443
|
+
steps: chunkZXW6WFZG_cjs.toPlanSteps(planned, {
|
|
1444
1444
|
inputs: values,
|
|
1445
1445
|
resolveWorkflow: options.resolveWorkflow,
|
|
1446
1446
|
compose: options.compose
|
|
@@ -1527,7 +1527,7 @@ function useWorkflowThread(workflow, options = {}) {
|
|
|
1527
1527
|
const anyRunning = Object.values(states).some((s) => s.status === "running");
|
|
1528
1528
|
const needsStart = !threadId || idle && !anyRunning;
|
|
1529
1529
|
const runError = idle ? conversation?.last_error ?? null : null;
|
|
1530
|
-
const view =
|
|
1530
|
+
const view = chunkCJF7B5A7_cjs.useWorkflowView({
|
|
1531
1531
|
steps,
|
|
1532
1532
|
states,
|
|
1533
1533
|
inputs,
|
|
@@ -1663,7 +1663,7 @@ function WorkflowWordDialog({
|
|
|
1663
1663
|
title: title ?? labels.wordTitle,
|
|
1664
1664
|
size: "xl",
|
|
1665
1665
|
testId: "workflow-word-dialog",
|
|
1666
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalScaffold.Body, { className: "h-[70dvh] p-0", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1666
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalScaffold.Body, { className: "h-[70dvh] p-0", children: /* @__PURE__ */ jsxRuntime.jsx(chunkWBLCPCWR_cjs.ConnectedNativeDocxEditor, { documentId: id, title: title ?? labels.wordTitle }) })
|
|
1667
1667
|
}
|
|
1668
1668
|
);
|
|
1669
1669
|
}
|
|
@@ -1827,7 +1827,7 @@ function RunnerBody({
|
|
|
1827
1827
|
const session = react.useArbiSessionStore();
|
|
1828
1828
|
const openRef = react$1.useRef(workspaceId);
|
|
1829
1829
|
openRef.current = workspaceId;
|
|
1830
|
-
const required =
|
|
1830
|
+
const required = chunkCJF7B5A7_cjs.requiredLabelsOf(given);
|
|
1831
1831
|
const ownEnsureLabels = useEnsureRequiredLabels();
|
|
1832
1832
|
const ensureLabels = page?.ensureLabels ?? ownEnsureLabels;
|
|
1833
1833
|
const [startedLabelIds, setStartedLabelIds] = react$1.useState({});
|
|
@@ -1839,7 +1839,7 @@ function RunnerBody({
|
|
|
1839
1839
|
const pageTarget = page?.target;
|
|
1840
1840
|
const projectStep = pageTarget && typeof projectFrom === "object" ? projectFrom.step : void 0;
|
|
1841
1841
|
const workflow = react$1.useMemo(
|
|
1842
|
-
() => withCommitStep(
|
|
1842
|
+
() => withCommitStep(chunkCJF7B5A7_cjs.withLabelIds(given, labelIds), projectStep),
|
|
1843
1843
|
[given, labelIds, projectStep]
|
|
1844
1844
|
);
|
|
1845
1845
|
const hostBeforeStart = options?.beforeStart;
|
|
@@ -2054,7 +2054,7 @@ function RunnerBody({
|
|
|
2054
2054
|
);
|
|
2055
2055
|
};
|
|
2056
2056
|
const runner = (compact) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2057
|
-
|
|
2057
|
+
chunkCJF7B5A7_cjs.WorkflowRunner,
|
|
2058
2058
|
{
|
|
2059
2059
|
people,
|
|
2060
2060
|
...runnerProps,
|
|
@@ -2115,7 +2115,7 @@ function RunnerBody({
|
|
|
2115
2115
|
pageBar,
|
|
2116
2116
|
inThread && conversationId ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2117
2117
|
!page && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2118
|
-
|
|
2118
|
+
chunkCJF7B5A7_cjs.WorkflowStepBar,
|
|
2119
2119
|
{
|
|
2120
2120
|
run: view,
|
|
2121
2121
|
levels: chunk555BS22J_cjs.stepLevels(view.steps),
|
|
@@ -2198,7 +2198,7 @@ function RunnerPage(props) {
|
|
|
2198
2198
|
workspaceId,
|
|
2199
2199
|
onProjectCreated
|
|
2200
2200
|
});
|
|
2201
|
-
const required =
|
|
2201
|
+
const required = chunkCJF7B5A7_cjs.requiredLabelsOf(workflow);
|
|
2202
2202
|
const ensure = useEnsureRequiredLabels();
|
|
2203
2203
|
const labels = useRequiredLabels(required, target.target, ensure, target.stage === "ready");
|
|
2204
2204
|
const fromStep = typeof projectFrom === "object";
|
|
@@ -2475,5 +2475,5 @@ exports.useWorkflowDefinitions = useWorkflowDefinitions;
|
|
|
2475
2475
|
exports.useWorkflowTasks = useWorkflowTasks;
|
|
2476
2476
|
exports.useWorkflowsPageState = useWorkflowsPageState;
|
|
2477
2477
|
exports.workflowRunView = workflowRunView;
|
|
2478
|
-
//# sourceMappingURL=chunk-
|
|
2479
|
-
//# sourceMappingURL=chunk-
|
|
2478
|
+
//# sourceMappingURL=chunk-JSHBC47B.cjs.map
|
|
2479
|
+
//# sourceMappingURL=chunk-JSHBC47B.cjs.map
|