@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.
Files changed (177) hide show
  1. package/dist/{ConnectedDocumentViewer-7VKAM6KD.js → ConnectedDocumentViewer-HKIBNGGG.js} +10 -9
  2. package/dist/{ConnectedDocumentViewer-7VKAM6KD.js.map → ConnectedDocumentViewer-HKIBNGGG.js.map} +1 -1
  3. package/dist/{ConnectedDocumentViewer-FGQ27H4B.cjs → ConnectedDocumentViewer-YSZWOVGN.cjs} +11 -10
  4. package/dist/{ConnectedDocumentViewer-FGQ27H4B.cjs.map → ConnectedDocumentViewer-YSZWOVGN.cjs.map} +1 -1
  5. package/dist/{ConnectedNativeDocxComparison-HJ4FTVH6.cjs → ConnectedNativeDocxComparison-L3R3ROPZ.cjs} +7 -7
  6. package/dist/{ConnectedNativeDocxComparison-HJ4FTVH6.cjs.map → ConnectedNativeDocxComparison-L3R3ROPZ.cjs.map} +1 -1
  7. package/dist/{ConnectedNativeDocxComparison-FPW3BNBN.js → ConnectedNativeDocxComparison-PSAP3Q7D.js} +6 -6
  8. package/dist/{ConnectedNativeDocxComparison-FPW3BNBN.js.map → ConnectedNativeDocxComparison-PSAP3Q7D.js.map} +1 -1
  9. package/dist/{ConnectedNativeDocxEditor-S7NJMDSU.js → ConnectedNativeDocxEditor-PI6QTPXZ.js} +5 -5
  10. package/dist/{ConnectedNativeDocxEditor-S7NJMDSU.js.map → ConnectedNativeDocxEditor-PI6QTPXZ.js.map} +1 -1
  11. package/dist/{ConnectedNativeDocxEditor-PF46MU5H.cjs → ConnectedNativeDocxEditor-VDBC4XRT.cjs} +7 -7
  12. package/dist/{ConnectedNativeDocxEditor-PF46MU5H.cjs.map → ConnectedNativeDocxEditor-VDBC4XRT.cjs.map} +1 -1
  13. package/dist/{ConnectedStreamedWordArtifact-5MHLV24V.js → ConnectedStreamedWordArtifact-V4MTKVNE.js} +6 -6
  14. package/dist/ConnectedStreamedWordArtifact-V4MTKVNE.js.map +1 -0
  15. package/dist/{ConnectedStreamedWordArtifact-LNGW7YGV.cjs → ConnectedStreamedWordArtifact-YSW6D7AG.cjs} +7 -7
  16. package/dist/ConnectedStreamedWordArtifact-YSW6D7AG.cjs.map +1 -0
  17. package/dist/{DocumentReviewCard-VFNMJSK7.cjs → DocumentReviewCard-BQ6ZD5MD.cjs} +6 -6
  18. package/dist/{DocumentReviewCard-VFNMJSK7.cjs.map → DocumentReviewCard-BQ6ZD5MD.cjs.map} +1 -1
  19. package/dist/{DocumentReviewCard-5U3TGJZA.js → DocumentReviewCard-TQQADJ36.js} +6 -6
  20. package/dist/{DocumentReviewCard-5U3TGJZA.js.map → DocumentReviewCard-TQQADJ36.js.map} +1 -1
  21. package/dist/{WorkspaceTableView-DHMCJRC6.cjs → WorkspaceTableView-GKMVTECZ.cjs} +6 -6
  22. package/dist/{WorkspaceTableView-DHMCJRC6.cjs.map → WorkspaceTableView-GKMVTECZ.cjs.map} +1 -1
  23. package/dist/{WorkspaceTableView-EH5CEB44.js → WorkspaceTableView-YFLVFRJL.js} +4 -4
  24. package/dist/{WorkspaceTableView-EH5CEB44.js.map → WorkspaceTableView-YFLVFRJL.js.map} +1 -1
  25. package/dist/agents/index.cjs +345 -344
  26. package/dist/agents/index.js +6 -5
  27. package/dist/{chunk-NDVLCOWS.js → chunk-2LUA7UDE.js} +7 -7
  28. package/dist/{chunk-NDVLCOWS.js.map → chunk-2LUA7UDE.js.map} +1 -1
  29. package/dist/{chunk-77IAOKZO.js → chunk-2VH2PT3J.js} +5 -38
  30. package/dist/chunk-2VH2PT3J.js.map +1 -0
  31. package/dist/{chunk-IC6SBDYA.js → chunk-4CI42DCG.js} +3 -3
  32. package/dist/{chunk-IC6SBDYA.js.map → chunk-4CI42DCG.js.map} +1 -1
  33. package/dist/{chunk-IFLFLP4K.js → chunk-4Q7ON335.js} +6 -5
  34. package/dist/chunk-4Q7ON335.js.map +1 -0
  35. package/dist/{chunk-IUFS3AYQ.js → chunk-5EGTGHBW.js} +7 -7
  36. package/dist/{chunk-IUFS3AYQ.js.map → chunk-5EGTGHBW.js.map} +1 -1
  37. package/dist/{chunk-OLDGMBEF.cjs → chunk-67AFX23Y.cjs} +185 -91
  38. package/dist/chunk-67AFX23Y.cjs.map +1 -0
  39. package/dist/{chunk-5CWBAINB.js → chunk-6OMIIF76.js} +3 -3
  40. package/dist/{chunk-5CWBAINB.js.map → chunk-6OMIIF76.js.map} +1 -1
  41. package/dist/chunk-6QZ35CTZ.js +594 -0
  42. package/dist/chunk-6QZ35CTZ.js.map +1 -0
  43. package/dist/{chunk-4RJPTXUQ.cjs → chunk-7MOQO6NO.cjs} +5 -5
  44. package/dist/{chunk-4RJPTXUQ.cjs.map → chunk-7MOQO6NO.cjs.map} +1 -1
  45. package/dist/chunk-AESJLGMC.cjs +1228 -0
  46. package/dist/chunk-AESJLGMC.cjs.map +1 -0
  47. package/dist/{chunk-EOIJ5JYP.cjs → chunk-B3CRSCLK.cjs} +4 -4
  48. package/dist/{chunk-EOIJ5JYP.cjs.map → chunk-B3CRSCLK.cjs.map} +1 -1
  49. package/dist/{chunk-GRDLCRNL.js → chunk-BELZ2WD2.js} +5 -5
  50. package/dist/{chunk-GRDLCRNL.js.map → chunk-BELZ2WD2.js.map} +1 -1
  51. package/dist/chunk-C2S246BV.js +1225 -0
  52. package/dist/chunk-C2S246BV.js.map +1 -0
  53. package/dist/{chunk-TAI23FCY.js → chunk-CEKOZAGO.js} +3 -3
  54. package/dist/{chunk-TAI23FCY.js.map → chunk-CEKOZAGO.js.map} +1 -1
  55. package/dist/{chunk-HVOPUYAG.cjs → chunk-CJF7B5A7.cjs} +29 -28
  56. package/dist/chunk-CJF7B5A7.cjs.map +1 -0
  57. package/dist/{chunk-LBKTTQUR.cjs → chunk-CMYJEIZB.cjs} +12 -12
  58. package/dist/{chunk-LBKTTQUR.cjs.map → chunk-CMYJEIZB.cjs.map} +1 -1
  59. package/dist/{chunk-2SLDVFOZ.js → chunk-CRHY7DBO.js} +3 -3
  60. package/dist/{chunk-2SLDVFOZ.js.map → chunk-CRHY7DBO.js.map} +1 -1
  61. package/dist/{chunk-23ACBETH.cjs → chunk-D27BBGUF.cjs} +4 -4
  62. package/dist/{chunk-23ACBETH.cjs.map → chunk-D27BBGUF.cjs.map} +1 -1
  63. package/dist/{chunk-3X37I6QE.cjs → chunk-DJE2E7YH.cjs} +29 -29
  64. package/dist/{chunk-3X37I6QE.cjs.map → chunk-DJE2E7YH.cjs.map} +1 -1
  65. package/dist/{chunk-CCSF7RI4.cjs → chunk-EG3BB32W.cjs} +3 -3
  66. package/dist/{chunk-CCSF7RI4.cjs.map → chunk-EG3BB32W.cjs.map} +1 -1
  67. package/dist/{chunk-MAKTAR7H.cjs → chunk-F777MGVA.cjs} +18 -18
  68. package/dist/{chunk-MAKTAR7H.cjs.map → chunk-F777MGVA.cjs.map} +1 -1
  69. package/dist/{chunk-TFWCREOL.js → chunk-GPYLXEZO.js} +9 -506
  70. package/dist/chunk-GPYLXEZO.js.map +1 -0
  71. package/dist/{chunk-OY3I32ZS.js → chunk-GX37C5QT.js} +4 -4
  72. package/dist/{chunk-OY3I32ZS.js.map → chunk-GX37C5QT.js.map} +1 -1
  73. package/dist/chunk-I4IS6ST6.cjs +48 -0
  74. package/dist/chunk-I4IS6ST6.cjs.map +1 -0
  75. package/dist/{chunk-OZL5ABLF.js → chunk-IRXPUQFP.js} +3 -3
  76. package/dist/{chunk-OZL5ABLF.js.map → chunk-IRXPUQFP.js.map} +1 -1
  77. package/dist/chunk-J77BACGX.js +575 -0
  78. package/dist/chunk-J77BACGX.js.map +1 -0
  79. package/dist/{chunk-X3JJTHQ4.cjs → chunk-JSHBC47B.cjs} +55 -55
  80. package/dist/{chunk-X3JJTHQ4.cjs.map → chunk-JSHBC47B.cjs.map} +1 -1
  81. package/dist/{chunk-Y6ZNWC7E.cjs → chunk-K26RLK2Y.cjs} +3 -3
  82. package/dist/{chunk-Y6ZNWC7E.cjs.map → chunk-K26RLK2Y.cjs.map} +1 -1
  83. package/dist/{chunk-PKDPQS6Z.js → chunk-KNOSLLTC.js} +3 -3
  84. package/dist/{chunk-PKDPQS6Z.js.map → chunk-KNOSLLTC.js.map} +1 -1
  85. package/dist/chunk-LFS6UWSJ.cjs +602 -0
  86. package/dist/chunk-LFS6UWSJ.cjs.map +1 -0
  87. package/dist/{chunk-YQFEN7UJ.js → chunk-LNH6NYG4.js} +6 -90
  88. package/dist/chunk-LNH6NYG4.js.map +1 -0
  89. package/dist/chunk-LRPGXNMA.js +44 -0
  90. package/dist/chunk-LRPGXNMA.js.map +1 -0
  91. package/dist/chunk-NEGFHF3V.cjs +617 -0
  92. package/dist/chunk-NEGFHF3V.cjs.map +1 -0
  93. package/dist/{chunk-NHPBONMR.js → chunk-O4FBMC6S.js} +186 -71
  94. package/dist/chunk-O4FBMC6S.js.map +1 -0
  95. package/dist/{chunk-7P24MJQN.js → chunk-PBIFISDD.js} +3 -3
  96. package/dist/{chunk-7P24MJQN.js.map → chunk-PBIFISDD.js.map} +1 -1
  97. package/dist/{chunk-OWUNCJFO.cjs → chunk-PZOX4JF6.cjs} +30 -30
  98. package/dist/{chunk-OWUNCJFO.cjs.map → chunk-PZOX4JF6.cjs.map} +1 -1
  99. package/dist/{chunk-CKNUL4LM.cjs → chunk-QK546T4C.cjs} +3 -3
  100. package/dist/{chunk-CKNUL4LM.cjs.map → chunk-QK546T4C.cjs.map} +1 -1
  101. package/dist/{chunk-QAXIVZEJ.cjs → chunk-ROWJU4SK.cjs} +13 -513
  102. package/dist/chunk-ROWJU4SK.cjs.map +1 -0
  103. package/dist/{chunk-JWRTUYLC.js → chunk-SBAM3UZX.js} +3 -3
  104. package/dist/{chunk-JWRTUYLC.js.map → chunk-SBAM3UZX.js.map} +1 -1
  105. package/dist/{chunk-COZDIUG7.cjs → chunk-TJ7QEGVP.cjs} +18 -18
  106. package/dist/{chunk-COZDIUG7.cjs.map → chunk-TJ7QEGVP.cjs.map} +1 -1
  107. package/dist/{chunk-PVPGD6QR.js → chunk-VWM3J6ES.js} +3 -3
  108. package/dist/{chunk-PVPGD6QR.js.map → chunk-VWM3J6ES.js.map} +1 -1
  109. package/dist/{chunk-UDMII47W.cjs → chunk-WBLCPCWR.cjs} +7 -7
  110. package/dist/{chunk-UDMII47W.cjs.map → chunk-WBLCPCWR.cjs.map} +1 -1
  111. package/dist/{chunk-3T3IKNGF.cjs → chunk-ZXW6WFZG.cjs} +5 -41
  112. package/dist/chunk-ZXW6WFZG.cjs.map +1 -0
  113. package/dist/{chunk-ODQK3LX5.cjs → chunk-ZZHMJXM5.cjs} +4 -93
  114. package/dist/chunk-ZZHMJXM5.cjs.map +1 -0
  115. package/dist/connect/docx.cjs +11 -11
  116. package/dist/connect/docx.js +7 -7
  117. package/dist/connect/index.cjs +496 -493
  118. package/dist/connect/index.cjs.map +1 -1
  119. package/dist/connect/index.js +36 -33
  120. package/dist/connect/index.js.map +1 -1
  121. package/dist/connect/viewer.cjs +9 -8
  122. package/dist/connect/viewer.js +8 -7
  123. package/dist/dashboards/index.cjs +1 -1
  124. package/dist/dashboards/index.js +1 -1
  125. package/dist/document-tools/index.cjs +17 -17
  126. package/dist/document-tools/index.js +2 -2
  127. package/dist/embed/index.cjs +11 -10
  128. package/dist/embed/index.js +8 -7
  129. package/dist/facts/index.cjs +1 -1
  130. package/dist/facts/index.js +1 -1
  131. package/dist/files/index.cjs +1 -1
  132. package/dist/files/index.js +1 -1
  133. package/dist/index.cjs +653 -618
  134. package/dist/index.cjs.map +1 -1
  135. package/dist/index.d.ts +4 -0
  136. package/dist/index.js +19 -16
  137. package/dist/index.js.map +1 -1
  138. package/dist/shell/index.cjs +78 -77
  139. package/dist/shell/index.js +3 -2
  140. package/dist/site/index.cjs +105 -81
  141. package/dist/site/index.d.ts +3 -1
  142. package/dist/site/index.js +4 -4
  143. package/dist/studio/index.cjs +60 -55
  144. package/dist/studio/index.cjs.map +1 -1
  145. package/dist/studio/index.js +12 -7
  146. package/dist/studio/index.js.map +1 -1
  147. package/dist/theme/ThemeControls.d.ts +71 -0
  148. package/dist/theme/ThemeEditor.d.ts +5 -2
  149. package/dist/theme/ThemePreview.d.ts +20 -0
  150. package/dist/theme/color.d.ts +17 -1
  151. package/dist/theme/derive.d.ts +75 -0
  152. package/dist/theme/editorModel.d.ts +36 -0
  153. package/dist/theme/previewLabels.d.ts +38 -0
  154. package/dist/theme/store.d.ts +51 -13
  155. package/dist/theme/tokens.d.ts +2 -0
  156. package/dist/workflow-canvas/index.cjs +37 -36
  157. package/dist/workflow-canvas/index.cjs.map +1 -1
  158. package/dist/workflow-canvas/index.js +13 -12
  159. package/dist/workflow-canvas/index.js.map +1 -1
  160. package/node_modules/@arbidocs/coedit/package.json +1 -1
  161. package/package.json +5 -5
  162. package/dist/ConnectedStreamedWordArtifact-5MHLV24V.js.map +0 -1
  163. package/dist/ConnectedStreamedWordArtifact-LNGW7YGV.cjs.map +0 -1
  164. package/dist/chunk-3T3IKNGF.cjs.map +0 -1
  165. package/dist/chunk-77IAOKZO.js.map +0 -1
  166. package/dist/chunk-HVOPUYAG.cjs.map +0 -1
  167. package/dist/chunk-IFLFLP4K.js.map +0 -1
  168. package/dist/chunk-N5WJBQYF.cjs +0 -476
  169. package/dist/chunk-N5WJBQYF.cjs.map +0 -1
  170. package/dist/chunk-NHPBONMR.js.map +0 -1
  171. package/dist/chunk-ODQK3LX5.cjs.map +0 -1
  172. package/dist/chunk-OLDGMBEF.cjs.map +0 -1
  173. package/dist/chunk-QAXIVZEJ.cjs.map +0 -1
  174. package/dist/chunk-QCLYRNOC.js +0 -466
  175. package/dist/chunk-QCLYRNOC.js.map +0 -1
  176. package/dist/chunk-TFWCREOL.js.map +0 -1
  177. package/dist/chunk-YQFEN7UJ.js.map +0 -1
@@ -0,0 +1,617 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var react = require('react');
5
+ var TabsPrimitive = require('@radix-ui/react-tabs');
6
+ var ui = require('@arbidocs/react/ui');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var TabsPrimitive__namespace = /*#__PURE__*/_interopNamespace(TabsPrimitive);
28
+
29
+ // src/theme/color.ts
30
+ var NUM = String.raw`-?\d*\.?\d+(?:e-?\d+)?`;
31
+ var TRIPLET_RE = new RegExp(String.raw`^(${NUM})(?:deg)?\s+(${NUM})%\s+(${NUM})%$`);
32
+ var HSL_FN_RE = new RegExp(
33
+ String.raw`^hsla?\(\s*(${NUM})(?:deg)?[\s,]+(${NUM})%[\s,]+(${NUM})%\s*(?:[,/]\s*${NUM}%?\s*)?\)$`,
34
+ "i"
35
+ );
36
+ var RGB_FN_RE = new RegExp(
37
+ String.raw`^rgba?\(\s*(${NUM})[\s,]+(${NUM})[\s,]+(${NUM})\s*(?:[,/]\s*${NUM}%?\s*)?\)$`,
38
+ "i"
39
+ );
40
+ var clamp = (n, lo, hi) => Math.min(hi, Math.max(lo, n));
41
+ var fmt = (n) => String(Math.round(n * 10) / 10);
42
+ function rgbToHsl({ r, g, b }) {
43
+ const rn = r / 255;
44
+ const gn = g / 255;
45
+ const bn = b / 255;
46
+ const max = Math.max(rn, gn, bn);
47
+ const min = Math.min(rn, gn, bn);
48
+ const l = (max + min) / 2;
49
+ const d = max - min;
50
+ let h = 0;
51
+ let s = 0;
52
+ if (d !== 0) {
53
+ s = d / (1 - Math.abs(2 * l - 1));
54
+ if (max === rn) h = 60 * ((gn - bn) / d % 6);
55
+ else if (max === gn) h = 60 * ((bn - rn) / d + 2);
56
+ else h = 60 * ((rn - gn) / d + 4);
57
+ }
58
+ if (h < 0) h += 360;
59
+ return { h, s: s * 100, l: l * 100 };
60
+ }
61
+ function hslToRgb({ h, s, l }) {
62
+ const sn = clamp(s, 0, 100) / 100;
63
+ const ln = clamp(l, 0, 100) / 100;
64
+ const hn = (h % 360 + 360) % 360;
65
+ const c = (1 - Math.abs(2 * ln - 1)) * sn;
66
+ const x = c * (1 - Math.abs(hn / 60 % 2 - 1));
67
+ const m = ln - c / 2;
68
+ const [r1, g1, b1] = hn < 60 ? [c, x, 0] : hn < 120 ? [x, c, 0] : hn < 180 ? [0, c, x] : hn < 240 ? [0, x, c] : hn < 300 ? [x, 0, c] : [c, 0, x];
69
+ return { r: (r1 + m) * 255, g: (g1 + m) * 255, b: (b1 + m) * 255 };
70
+ }
71
+ function parseHex(value) {
72
+ let hex = value.slice(1);
73
+ if (hex.length === 3 || hex.length === 4) {
74
+ hex = hex.slice(0, 3).split("").map((ch) => ch + ch).join("");
75
+ } else if (hex.length === 8) {
76
+ hex = hex.slice(0, 6);
77
+ }
78
+ if (!/^[0-9a-fA-F]{6}$/.test(hex)) return null;
79
+ return {
80
+ r: parseInt(hex.slice(0, 2), 16),
81
+ g: parseInt(hex.slice(2, 4), 16),
82
+ b: parseInt(hex.slice(4, 6), 16)
83
+ };
84
+ }
85
+ function parseColor(value) {
86
+ const c = value.trim();
87
+ if (c.startsWith("#")) return parseHex(c);
88
+ const rgb = RGB_FN_RE.exec(c);
89
+ if (rgb) return { r: Number(rgb[1]), g: Number(rgb[2]), b: Number(rgb[3]) };
90
+ const hsl2 = HSL_FN_RE.exec(c) ?? TRIPLET_RE.exec(c);
91
+ if (hsl2) return hslToRgb({ h: Number(hsl2[1]), s: Number(hsl2[2]), l: Number(hsl2[3]) });
92
+ return null;
93
+ }
94
+ function parseHsl(value) {
95
+ const c = value.trim();
96
+ const m = TRIPLET_RE.exec(c) ?? HSL_FN_RE.exec(c);
97
+ if (m) return { h: Number(m[1]), s: Number(m[2]), l: Number(m[3]) };
98
+ const rgb = parseColor(c);
99
+ return rgb ? rgbToHsl(rgb) : null;
100
+ }
101
+ var hex2 = (n) => Math.round(clamp(n, 0, 255)).toString(16).padStart(2, "0");
102
+ function rgbToHex({ r, g, b }) {
103
+ return `#${hex2(r)}${hex2(g)}${hex2(b)}`;
104
+ }
105
+ function hslToHex(hsl2) {
106
+ return rgbToHex(hslToRgb(hsl2));
107
+ }
108
+ function toHex(value, fallback = "#000000") {
109
+ const rgb = parseColor(value);
110
+ return rgb ? rgbToHex(rgb) : fallback;
111
+ }
112
+ function formatHslTriplet({ h, s, l }) {
113
+ return `${fmt((h % 360 + 360) % 360)} ${fmt(s)}% ${fmt(l)}%`;
114
+ }
115
+ function toHslTriplet(color) {
116
+ const c = color.trim();
117
+ if (TRIPLET_RE.test(c)) return c;
118
+ const hsl2 = parseHsl(c);
119
+ return hsl2 ? formatHslTriplet(hsl2) : c;
120
+ }
121
+ function toCssColor(value) {
122
+ const c = value.trim();
123
+ return TRIPLET_RE.test(c) ? `hsl(${c})` : c;
124
+ }
125
+ var channel = (v) => {
126
+ const c = v / 255;
127
+ return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
128
+ };
129
+ function relativeLuminance(rgb) {
130
+ return 0.2126 * channel(rgb.r) + 0.7152 * channel(rgb.g) + 0.0722 * channel(rgb.b);
131
+ }
132
+ function contrastRatio(a, b) {
133
+ const ra = parseColor(a);
134
+ const rb = parseColor(b);
135
+ if (!ra || !rb) return null;
136
+ const la = relativeLuminance(ra);
137
+ const lb = relativeLuminance(rb);
138
+ return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);
139
+ }
140
+ var AA_TEXT = 4.5;
141
+ var AA_UI = 3;
142
+ function ensureContrast(fg, bg, ratio) {
143
+ const fgHsl = parseHsl(fg);
144
+ const bgRgb = parseColor(bg);
145
+ if (!fgHsl || !bgRgb) return fg;
146
+ const pass = (l) => (contrastRatio(hslToHex({ ...fgHsl, l }), rgbToHex(bgRgb)) ?? 0) >= ratio;
147
+ if (pass(fgHsl.l)) return hslToHex(fgHsl);
148
+ const bgDark = relativeLuminance(bgRgb) < 0.18;
149
+ const directions = bgDark ? [1, -1] : [-1, 1];
150
+ for (const dir of directions) {
151
+ const end = dir < 0 ? 0 : 100;
152
+ if (!pass(end)) continue;
153
+ let lo = fgHsl.l;
154
+ let hi = end;
155
+ for (let i = 0; i < 24; i++) {
156
+ const mid = (lo + hi) / 2;
157
+ if (pass(mid)) hi = mid;
158
+ else lo = mid;
159
+ }
160
+ return hslToHex({ ...fgHsl, l: hi });
161
+ }
162
+ const black = contrastRatio("#000000", rgbToHex(bgRgb)) ?? 0;
163
+ const white = contrastRatio("#ffffff", rgbToHex(bgRgb)) ?? 0;
164
+ return black >= white ? "#000000" : "#ffffff";
165
+ }
166
+ function mix(a, b, amount) {
167
+ const ra = parseColor(a);
168
+ const rb = parseColor(b);
169
+ if (!ra || !rb) return a;
170
+ const t = clamp(amount, 0, 1);
171
+ return rgbToHex({
172
+ r: ra.r + (rb.r - ra.r) * t,
173
+ g: ra.g + (rb.g - ra.g) * t,
174
+ b: ra.b + (rb.b - ra.b) * t
175
+ });
176
+ }
177
+
178
+ // src/theme/tokens.ts
179
+ var THEME_STYLE_ID = "arbi-theme-vars";
180
+ function themeCssVars(colors) {
181
+ const vars = {};
182
+ for (const [key, value] of Object.entries(colors)) {
183
+ vars[`--${key}`] = toHslTriplet(value);
184
+ vars[`--color-${key}`] = toCssColor(value);
185
+ }
186
+ return vars;
187
+ }
188
+ function themeMetaVars(theme) {
189
+ return {
190
+ "--font-display": theme.fonts.display,
191
+ "--font-sans": theme.fonts.sans,
192
+ "--radius": `${theme.radius}rem`
193
+ };
194
+ }
195
+ function renderBlock(selector, vars) {
196
+ const body = Object.entries(vars).map(([name, value]) => ` ${name}: ${value};`).join("\n");
197
+ return `${selector} {
198
+ ${body}
199
+ }`;
200
+ }
201
+ function emitCssVars(theme, dark) {
202
+ if (typeof document === "undefined") return;
203
+ let css = renderBlock(":root", { ...themeCssVars(theme.colors), ...themeMetaVars(theme) });
204
+ if (dark) css += `
205
+ ${renderBlock(":root.dark", themeCssVars(dark))}`;
206
+ let style = document.getElementById(THEME_STYLE_ID);
207
+ if (!style) {
208
+ style = document.createElement("style");
209
+ style.id = THEME_STYLE_ID;
210
+ document.head.appendChild(style);
211
+ }
212
+ style.textContent = css;
213
+ }
214
+ function removeCssVars() {
215
+ if (typeof document === "undefined") return;
216
+ document.getElementById(THEME_STYLE_ID)?.remove();
217
+ }
218
+ function normalizeOptions(optionsOrRoot) {
219
+ if (typeof HTMLElement !== "undefined" && optionsOrRoot instanceof HTMLElement) {
220
+ return { root: optionsOrRoot };
221
+ }
222
+ return optionsOrRoot;
223
+ }
224
+ function applyThemeVars(theme, optionsOrRoot = {}) {
225
+ const { mode = "flat", dark, root = document.documentElement } = normalizeOptions(optionsOrRoot);
226
+ if (mode === "cssVars") {
227
+ emitCssVars(theme, dark);
228
+ return;
229
+ }
230
+ for (const [name, value] of Object.entries({
231
+ ...themeCssVars(theme.colors),
232
+ ...themeMetaVars(theme)
233
+ })) {
234
+ root.style.setProperty(name, value);
235
+ }
236
+ }
237
+ function applyFontVars(fonts, root = document.documentElement) {
238
+ root.style.setProperty("--font-display", fonts.display);
239
+ root.style.setProperty("--font-sans", fonts.sans);
240
+ }
241
+ function clearFontVars(root = document.documentElement) {
242
+ root.style.removeProperty("--font-display");
243
+ root.style.removeProperty("--font-sans");
244
+ }
245
+ function clearThemeVars(theme, optionsOrRoot = {}) {
246
+ const { mode = "flat", root = document.documentElement } = normalizeOptions(optionsOrRoot);
247
+ if (mode === "cssVars") {
248
+ removeCssVars();
249
+ return;
250
+ }
251
+ for (const key of Object.keys(theme.colors)) {
252
+ root.style.removeProperty(`--${key}`);
253
+ root.style.removeProperty(`--color-${key}`);
254
+ }
255
+ root.style.removeProperty("--font-display");
256
+ root.style.removeProperty("--font-sans");
257
+ root.style.removeProperty("--radius");
258
+ }
259
+
260
+ // src/theme/derive.ts
261
+ var P = "primary";
262
+ var A = "accent";
263
+ var W = "warmth";
264
+ var surface = (key, deps = [W]) => ({
265
+ key,
266
+ group: "surfaces",
267
+ deps
268
+ });
269
+ var text = (key, deps = [W]) => ({
270
+ key,
271
+ group: "text",
272
+ deps
273
+ });
274
+ var family = (hue, input) => ["bg", "text", "border", "solid", "text-strong"].map((part) => ({
275
+ key: `${hue}-${part}`,
276
+ group: "status",
277
+ deps: [input]
278
+ }));
279
+ var DERIVED_TOKENS = [
280
+ // Brand
281
+ { key: "primary", group: "brand", deps: [P] },
282
+ { key: "ring", group: "brand", deps: [P, W] },
283
+ { key: "hero", group: "brand", deps: [P] },
284
+ { key: "secondary", group: "brand", deps: [A, W] },
285
+ { key: "theme-cyan", group: "brand", deps: [A] },
286
+ { key: "theme-cyan-bright", group: "brand", deps: [A, P] },
287
+ { key: "ai-ink", group: "brand", deps: [A] },
288
+ { key: "ai-soft", group: "brand", deps: [A] },
289
+ { key: "ai-accent", group: "brand", deps: [A] },
290
+ { key: "ai-accent-soft", group: "brand", deps: [A] },
291
+ // Surfaces
292
+ surface("background"),
293
+ surface("card"),
294
+ surface("popover"),
295
+ surface("muted"),
296
+ surface("accent", [P, W]),
297
+ surface("border"),
298
+ surface("input"),
299
+ surface("ai-surface"),
300
+ { key: "sidebar", group: "surfaces", deps: [P, W, "sidebar"] },
301
+ { key: "sidebar-foreground", group: "surfaces", deps: [P, W, "sidebar"] },
302
+ { key: "sidebar-muted", group: "surfaces", deps: [P, W, "sidebar"] },
303
+ { key: "sidebar-accent", group: "surfaces", deps: [P, W, "sidebar"] },
304
+ { key: "sidebar-accent-foreground", group: "surfaces", deps: [P, W, "sidebar"] },
305
+ { key: "sidebar-border", group: "surfaces", deps: [P, W, "sidebar"] },
306
+ { key: "sidebar-primary", group: "surfaces", deps: [P, A, "sidebar"] },
307
+ // Text
308
+ text("foreground"),
309
+ text("card-foreground"),
310
+ text("popover-foreground"),
311
+ text("muted-foreground"),
312
+ text("primary-foreground", [P, W]),
313
+ text("accent-foreground", [P, W]),
314
+ text("secondary-foreground", [A, W]),
315
+ text("ai-accent-foreground", [A]),
316
+ text("destructive-foreground", ["danger"]),
317
+ // Status
318
+ { key: "destructive", group: "status", deps: ["danger"] },
319
+ { key: "success", group: "status", deps: ["success"] },
320
+ { key: "warning", group: "status", deps: ["warning"] },
321
+ ...family("red", "danger"),
322
+ ...family("green", "success"),
323
+ ...family("yellow", "warning"),
324
+ // Charts (the step bar's start/finish accent follows the first series)
325
+ ...[1, 2, 3, 4, 5].map((i) => ({
326
+ key: `chart-${i}`,
327
+ group: "charts",
328
+ deps: [P, A, "charts"]
329
+ })),
330
+ { key: "wf-start", group: "charts", deps: [P, A, "charts"] }
331
+ ];
332
+ new Map(DERIVED_TOKENS.map((t) => [t.key, t]));
333
+ function keysOfInput(input) {
334
+ return DERIVED_TOKENS.filter((t) => t.deps.includes(input)).map((t) => t.key);
335
+ }
336
+ var DEFAULT_INPUTS = {
337
+ primary: "#202b61",
338
+ accent: "#00adef",
339
+ danger: "#bf3b3b",
340
+ success: "#1f8a5b",
341
+ warning: "#c08a2d"};
342
+ var isWarm = (h) => h >= 15 && h <= 90;
343
+ var isCool = (h) => h >= 180 && h <= 270;
344
+ var clamp2 = (n, lo, hi) => Math.min(hi, Math.max(lo, n));
345
+ function warmthOf(colors) {
346
+ const bg = parseHsl(colors.background ?? "");
347
+ const tint = parseHsl(colors.muted ?? colors.border ?? colors.card ?? "");
348
+ const sign = (hsl2) => !hsl2 ? 0 : isWarm(hsl2.h) ? 1 : isCool(hsl2.h) ? -1 : 0;
349
+ if (bg && bg.l < 99 && bg.s > 3) {
350
+ return sign(bg) * (0.5 + Math.min(0.5, (100 - bg.l) / 12));
351
+ }
352
+ if (!tint) return 0;
353
+ return sign(tint) * Math.min(0.5, tint.s / 40);
354
+ }
355
+ function inferInputs(colors) {
356
+ const hex = (key, fallback) => colors[key] && parseColor(colors[key]) ? toHex(colors[key]) : fallback;
357
+ const saturated = (key) => (parseHsl(colors[key] ?? "")?.s ?? 0) >= 35;
358
+ const accentKey = ["ai-accent", "ai-ink", "secondary", "theme-cyan"].find(
359
+ (k) => colors[k] && saturated(k)
360
+ );
361
+ const sidebar = parseColor(colors.sidebar ?? "");
362
+ return {
363
+ primary: hex("primary", DEFAULT_INPUTS.primary),
364
+ accent: accentKey ? toHex(colors[accentKey]) : DEFAULT_INPUTS.accent,
365
+ warmth: Math.round(warmthOf(colors) * 100) / 100,
366
+ sidebar: sidebar && relativeLuminance(sidebar) < 0.2 ? "brand" : "light",
367
+ charts: "harmonious",
368
+ danger: hex("destructive", DEFAULT_INPUTS.danger),
369
+ success: hex("success", DEFAULT_INPUTS.success),
370
+ warning: hex("warning", DEFAULT_INPUTS.warning),
371
+ secondaryRole: colors.secondary && !saturated("secondary") ? "surface" : "accent"
372
+ };
373
+ }
374
+ var hsl = (h, s, l) => hslToHex({ h, s, l });
375
+ function readableOn(bg, light, dark, ratio = AA_TEXT) {
376
+ const pick = (contrastRatio(light, bg) ?? 0) >= (contrastRatio(dark, bg) ?? 0) ? light : dark;
377
+ return ensureContrast(pick, bg, ratio);
378
+ }
379
+ function hueDistance(a, b) {
380
+ const d = Math.abs(a - b) % 360;
381
+ return d > 180 ? 360 - d : d;
382
+ }
383
+ function chartHues(p, a, style) {
384
+ const base = p.s >= 12 ? p.h : a.s >= 12 ? a.h : 220;
385
+ const second = a.s >= 12 ? a.h : (base + 150) % 360;
386
+ if (style === "distinct") return [0, 1, 2, 3, 4].map((i) => (base + i * 72) % 360);
387
+ const chosen = [base, hueDistance(base, second) < 25 ? (base + 150) % 360 : second];
388
+ const candidates = [180, 60, -60, 120, -120, 30, -30].flatMap((d) => [
389
+ (base + d + 360) % 360,
390
+ (chosen[1] + d + 360) % 360
391
+ ]);
392
+ while (chosen.length < 5) {
393
+ let best = candidates[0];
394
+ let bestScore = -1;
395
+ for (const c of candidates) {
396
+ const score = Math.min(...chosen.map((h) => hueDistance(h, c)));
397
+ if (score > bestScore) {
398
+ best = c;
399
+ bestScore = score;
400
+ }
401
+ }
402
+ chosen.push(best);
403
+ }
404
+ return chosen;
405
+ }
406
+ function deriveColors(inputs, scheme) {
407
+ const dark = scheme === "dark";
408
+ const p = parseHsl(inputs.primary) ?? parseHsl(DEFAULT_INPUTS.primary);
409
+ const a = parseHsl(inputs.accent) ?? parseHsl(DEFAULT_INPUTS.accent);
410
+ const w = clamp2(inputs.warmth, -1, 1);
411
+ const strength = Math.abs(w);
412
+ const pageTint = Math.max(0, strength - 0.5) * 2;
413
+ const sh = w > 0 ? 42 : 218;
414
+ const ss = strength * (w > 0 ? 35 : 25);
415
+ const out = {};
416
+ const bgL = dark ? 7 : 100 - 6 * pageTint;
417
+ const neutralS = dark ? Math.min(ss, 22) : ss;
418
+ out.background = hsl(sh, neutralS, bgL);
419
+ out.card = dark ? hsl(sh, neutralS, 9) : mix(out.background, "#ffffff", 0.85);
420
+ out.popover = dark ? hsl(sh, neutralS, 10) : out.card;
421
+ out.muted = hsl(sh, neutralS * (dark ? 0.8 : 1), dark ? 14 : bgL - 4 - 1.5 * pageTint);
422
+ out.border = hsl(sh, neutralS * (dark ? 0.7 : 0.8), dark ? 20 : bgL - 10);
423
+ out.input = ensureContrast(hsl(sh, neutralS * 0.6, dark ? 42 : 58), out.background, AA_UI);
424
+ out["ai-surface"] = out.card;
425
+ const accentS = Math.min(p.s + 10, 62) * (1 - 0.5 * Math.max(0, w));
426
+ out.accent = dark ? hsl(p.h, Math.min(p.s, 35), 21) : hsl(p.h, accentS, bgL - 5);
427
+ const primary = dark && p.l < 55 ? hsl(p.h, Math.min(p.s + 20, 80), 70) : toHex(inputs.primary);
428
+ out.primary = primary;
429
+ out.ring = ensureContrast(
430
+ hsl(p.h, Math.min(p.s, 60) * (dark ? 0.9 : 0.8), dark ? 65 : 54),
431
+ out.background,
432
+ AA_UI
433
+ );
434
+ out.hero = dark ? hsl(p.h, Math.min(p.s, 50), 17) : p.l <= 30 ? toHex(inputs.primary) : hsl(p.h, p.s, 22);
435
+ const accent = dark && a.l < 45 ? hsl(a.h, a.s, 55) : toHex(inputs.accent);
436
+ out["ai-soft"] = mix(accent, out.background, dark ? 0.82 : 0.88);
437
+ out["ai-ink"] = ensureContrast(accent, out["ai-soft"], AA_TEXT);
438
+ out["ai-accent"] = out["ai-ink"];
439
+ out["ai-accent-soft"] = out["ai-soft"];
440
+ out["theme-cyan"] = ensureContrast(accent, out.background, AA_TEXT);
441
+ out["theme-cyan-bright"] = ensureContrast(hsl(a.h, a.s, Math.max(a.l, 47)), out.hero, AA_TEXT);
442
+ const ink = hsl(sh, Math.min(10 + ss, 40), 12);
443
+ const paper = hsl(sh, Math.min(ss, 30), dark ? 93 : 98);
444
+ out.foreground = ensureContrast(dark ? hsl(sh, 18, 93) : ink, out.background, 7);
445
+ out["card-foreground"] = out.foreground;
446
+ out["popover-foreground"] = out.foreground;
447
+ out["muted-foreground"] = ensureContrast(
448
+ hsl(sh, Math.min(ss, 15), dark ? 70 : 42),
449
+ out.muted,
450
+ AA_TEXT
451
+ );
452
+ out["primary-foreground"] = readableOn(primary, paper, dark ? hsl(p.h, 30, 8) : ink);
453
+ out["accent-foreground"] = dark ? ensureContrast(hsl(p.h, 70, 92), out.accent, AA_TEXT) : ensureContrast(primary, out.accent, AA_TEXT);
454
+ out["ai-accent-foreground"] = readableOn(out["ai-accent"], "#ffffff", ink);
455
+ if (inputs.secondaryRole === "surface") {
456
+ out.secondary = hsl(sh, neutralS, dark ? 18 : bgL - 7);
457
+ out["secondary-foreground"] = ensureContrast(out.foreground, out.secondary, AA_TEXT);
458
+ } else {
459
+ out.secondary = accent;
460
+ out["secondary-foreground"] = readableOn(accent, paper, ink);
461
+ }
462
+ if (inputs.sidebar === "brand") {
463
+ const panel = hsl(p.h, Math.min(p.s, 45), dark ? 9 : 10);
464
+ out.sidebar = panel;
465
+ out["sidebar-accent"] = hsl(p.h, Math.min(p.s, 45), 18);
466
+ out["sidebar-border"] = hsl(p.h, Math.min(p.s, 40), 20);
467
+ out["sidebar-foreground"] = ensureContrast(hsl(p.h, 15, 82), panel, AA_TEXT);
468
+ out["sidebar-muted"] = ensureContrast(hsl(p.h, 10, 60), panel, AA_TEXT);
469
+ out["sidebar-accent-foreground"] = ensureContrast(paper, out["sidebar-accent"], AA_TEXT);
470
+ out["sidebar-primary"] = ensureContrast(hsl(a.h, a.s, Math.max(a.l, 50)), panel, AA_UI);
471
+ } else {
472
+ out.sidebar = hsl(sh, neutralS, dark ? 10 : bgL - 3);
473
+ out["sidebar-accent"] = out.accent;
474
+ out["sidebar-border"] = out.border;
475
+ out["sidebar-foreground"] = out.foreground;
476
+ out["sidebar-muted"] = ensureContrast(out["muted-foreground"], out.sidebar, AA_TEXT);
477
+ out["sidebar-accent-foreground"] = out["accent-foreground"];
478
+ out["sidebar-primary"] = ensureContrast(primary, out.sidebar, AA_UI);
479
+ }
480
+ const status = (hue, color) => {
481
+ const c = toHex(color);
482
+ const solid = dark && (parseHsl(c)?.l ?? 50) < 45 ? mix(c, "#ffffff", 0.25) : c;
483
+ const bg = mix(solid, out.background, dark ? 0.85 : 0.9);
484
+ out[`${hue}-bg`] = bg;
485
+ out[`${hue}-border`] = mix(solid, out.background, dark ? 0.65 : 0.72);
486
+ out[`${hue}-solid`] = solid;
487
+ out[`${hue}-text`] = ensureContrast(solid, bg, AA_TEXT);
488
+ out[`${hue}-text-strong`] = ensureContrast(solid, bg, 7);
489
+ return solid;
490
+ };
491
+ const danger = status("red", inputs.danger);
492
+ out.success = status("green", inputs.success);
493
+ out.warning = status("yellow", inputs.warning);
494
+ out.destructive = dark ? hsl(parseHsl(danger).h, 55, 42) : toHex(inputs.danger);
495
+ out["destructive-foreground"] = readableOn(out.destructive, "#ffffff", ink);
496
+ const hues = chartHues(p, a, inputs.charts);
497
+ const lightness = dark ? [62, 58, 68, 54, 72] : [44, 50, 58, 38, 64];
498
+ hues.forEach((h, i) => {
499
+ const s = clamp2(i === 0 ? p.s : i === 1 ? a.s : Math.max(p.s, a.s), 55, 80);
500
+ out[`chart-${i + 1}`] = ensureContrast(hsl(h, s, lightness[i]), out.background, AA_UI);
501
+ });
502
+ out["wf-start"] = out["chart-1"];
503
+ return out;
504
+ }
505
+ var CONTRAST_PAIRS = [
506
+ { fg: "foreground", bg: "background", min: AA_TEXT, label: "Body text on the page" },
507
+ { fg: "card-foreground", bg: "card", min: AA_TEXT, label: "Text on cards" },
508
+ { fg: "popover-foreground", bg: "popover", min: AA_TEXT, label: "Text in menus" },
509
+ { fg: "muted-foreground", bg: "background", min: AA_TEXT, label: "Secondary text on the page" },
510
+ { fg: "muted-foreground", bg: "muted", min: AA_TEXT, label: "Secondary text on muted areas" },
511
+ { fg: "primary-foreground", bg: "primary", min: AA_TEXT, label: "Text on primary buttons" },
512
+ { fg: "secondary-foreground", bg: "secondary", min: AA_TEXT, label: "Text on secondary fills" },
513
+ { fg: "accent-foreground", bg: "accent", min: AA_TEXT, label: "Text on hover and selection" },
514
+ {
515
+ fg: "destructive-foreground",
516
+ bg: "destructive",
517
+ min: AA_TEXT,
518
+ label: "Text on danger buttons"
519
+ },
520
+ { fg: "ring", bg: "background", min: AA_UI, label: "Focus ring on the page" },
521
+ { fg: "input", bg: "background", min: AA_UI, label: "Field borders on the page" }
522
+ ];
523
+ function contrastIssues(resolve, pairs = CONTRAST_PAIRS) {
524
+ const issues = [];
525
+ for (const pair of pairs) {
526
+ const fg = resolve(pair.fg);
527
+ const bg = resolve(pair.bg);
528
+ if (!fg || !bg) continue;
529
+ const ratio = contrastRatio(fg, bg);
530
+ if (ratio === null || ratio >= pair.min) continue;
531
+ issues.push({ ...pair, ratio, fix: ensureContrast(fg, bg, pair.min) });
532
+ }
533
+ return issues;
534
+ }
535
+ function Tabs({ items, testId }) {
536
+ const list = items ?? [];
537
+ const [active, setActive] = react.useState("0");
538
+ const activeIndex = Math.min(Number(active), Math.max(list.length - 1, 0));
539
+ return /* @__PURE__ */ jsxRuntime.jsxs(TabsPrimitive__namespace.Root, { value: String(activeIndex), onValueChange: setActive, "data-testid": testId, children: [
540
+ /* @__PURE__ */ jsxRuntime.jsx(TabsPrimitive__namespace.List, { className: "flex flex-wrap gap-1 border-b border-border", children: list.map((t, i) => /* @__PURE__ */ jsxRuntime.jsx(
541
+ TabsPrimitive__namespace.Trigger,
542
+ {
543
+ value: String(i),
544
+ className: ui.cn(
545
+ "-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",
546
+ i === activeIndex ? "border-primary text-foreground" : "border-transparent text-muted-foreground hover:text-foreground"
547
+ ),
548
+ "data-testid": testId && `${testId}-tab-${i}`,
549
+ children: t.label
550
+ },
551
+ i
552
+ )) }),
553
+ list.map((t, i) => /* @__PURE__ */ jsxRuntime.jsx(
554
+ TabsPrimitive__namespace.Content,
555
+ {
556
+ value: String(i),
557
+ className: "pt-5 text-sm leading-relaxed text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
558
+ "data-testid": i === activeIndex ? testId && `${testId}-panel` : void 0,
559
+ children: t.content
560
+ },
561
+ i
562
+ ))
563
+ ] });
564
+ }
565
+
566
+ // src/theme/previewLabels.ts
567
+ var DEFAULT_THEME_PREVIEW_LABELS = {
568
+ title: "Preview",
569
+ subtitle: "How your theme looks on real components",
570
+ primaryAction: "Save",
571
+ accentAction: "Ask AI",
572
+ secondaryAction: "Cancel",
573
+ outlineAction: "Export",
574
+ dangerAction: "Delete",
575
+ fieldLabel: "Search",
576
+ fieldPlaceholder: "Find a document",
577
+ cardBody: "Cards hold a title, a short summary and their actions.",
578
+ tabs: ["Overview", "Activity", "Settings"],
579
+ tabBody: "The active tab is underlined in the primary colour.",
580
+ nav: ["Home", "Inbox", "Documents"],
581
+ steps: ["Intake", "Review", "Sign"],
582
+ chartLabel: "Documents per month, two series",
583
+ chartMonths: ["Jan", "Feb", "Mar", "Apr"],
584
+ chartSeries: ["Received", "Completed"],
585
+ toastTitle: "Changes saved",
586
+ toastBody: "Your theme is live for everyone.",
587
+ toastAction: "Undo",
588
+ badges: { neutral: "Draft", success: "Done", warning: "Due soon", danger: "Overdue", ai: "AI" },
589
+ alerts: {
590
+ info: "A new version is available.",
591
+ danger: "The upload failed."
592
+ }
593
+ };
594
+
595
+ exports.CONTRAST_PAIRS = CONTRAST_PAIRS;
596
+ exports.DEFAULT_THEME_PREVIEW_LABELS = DEFAULT_THEME_PREVIEW_LABELS;
597
+ exports.DERIVED_TOKENS = DERIVED_TOKENS;
598
+ exports.THEME_STYLE_ID = THEME_STYLE_ID;
599
+ exports.Tabs = Tabs;
600
+ exports.applyFontVars = applyFontVars;
601
+ exports.applyThemeVars = applyThemeVars;
602
+ exports.clearFontVars = clearFontVars;
603
+ exports.clearThemeVars = clearThemeVars;
604
+ exports.contrastIssues = contrastIssues;
605
+ exports.contrastRatio = contrastRatio;
606
+ exports.deriveColors = deriveColors;
607
+ exports.ensureContrast = ensureContrast;
608
+ exports.inferInputs = inferInputs;
609
+ exports.keysOfInput = keysOfInput;
610
+ exports.parseColor = parseColor;
611
+ exports.themeCssVars = themeCssVars;
612
+ exports.themeMetaVars = themeMetaVars;
613
+ exports.toCssColor = toCssColor;
614
+ exports.toHex = toHex;
615
+ exports.toHslTriplet = toHslTriplet;
616
+ //# sourceMappingURL=chunk-NEGFHF3V.cjs.map
617
+ //# sourceMappingURL=chunk-NEGFHF3V.cjs.map