@datatechsolutions/ui 3.13.0 → 3.14.0

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 (135) hide show
  1. package/dist/astrlabe/graph-node.js +6 -6
  2. package/dist/astrlabe/graph-node.mjs +2 -2
  3. package/dist/astrlabe/index.js +114 -114
  4. package/dist/astrlabe/index.mjs +6 -6
  5. package/dist/astrlabe/workflow-canvas.js +6 -6
  6. package/dist/astrlabe/workflow-canvas.mjs +5 -5
  7. package/dist/{chunk-AMCFAGK3.js → chunk-2II2NLAZ.js} +42 -41
  8. package/dist/chunk-2II2NLAZ.js.map +1 -0
  9. package/dist/{chunk-WR55H7DH.mjs → chunk-2SBVFLPZ.mjs} +19 -2
  10. package/dist/chunk-2SBVFLPZ.mjs.map +1 -0
  11. package/dist/{chunk-UXHJS2SH.mjs → chunk-33ZWFDVG.mjs} +282 -331
  12. package/dist/chunk-33ZWFDVG.mjs.map +1 -0
  13. package/dist/{chunk-2ECLDHAT.js → chunk-4HZ55YKZ.js} +9 -9
  14. package/dist/{chunk-2ECLDHAT.js.map → chunk-4HZ55YKZ.js.map} +1 -1
  15. package/dist/{chunk-VI4IUTMX.js → chunk-4P72IJOM.js} +6 -6
  16. package/dist/{chunk-VI4IUTMX.js.map → chunk-4P72IJOM.js.map} +1 -1
  17. package/dist/{chunk-D5OTZGA2.js → chunk-5SCZB5UI.js} +382 -431
  18. package/dist/chunk-5SCZB5UI.js.map +1 -0
  19. package/dist/{chunk-4VHFGW7I.mjs → chunk-5YCH7FHT.mjs} +3 -3
  20. package/dist/{chunk-4VHFGW7I.mjs.map → chunk-5YCH7FHT.mjs.map} +1 -1
  21. package/dist/{chunk-P4RVGMZL.js → chunk-6NBQTIXX.js} +9 -37
  22. package/dist/chunk-6NBQTIXX.js.map +1 -0
  23. package/dist/{chunk-EZQ2D47U.js → chunk-6NEESZVO.js} +4 -4
  24. package/dist/{chunk-EZQ2D47U.js.map → chunk-6NEESZVO.js.map} +1 -1
  25. package/dist/{chunk-N4YT3QA5.js → chunk-72XZ7DSF.js} +13 -13
  26. package/dist/{chunk-N4YT3QA5.js.map → chunk-72XZ7DSF.js.map} +1 -1
  27. package/dist/{chunk-QGRTV35L.mjs → chunk-7NHJSD4A.mjs} +6 -6
  28. package/dist/{chunk-QGRTV35L.mjs.map → chunk-7NHJSD4A.mjs.map} +1 -1
  29. package/dist/{chunk-PPIUMCUZ.js → chunk-7SDB2VC2.js} +4 -4
  30. package/dist/{chunk-PPIUMCUZ.js.map → chunk-7SDB2VC2.js.map} +1 -1
  31. package/dist/{chunk-QGLGQXJE.js → chunk-A5OMGPMR.js} +10 -10
  32. package/dist/chunk-A5OMGPMR.js.map +1 -0
  33. package/dist/{chunk-K5567JM5.js → chunk-AUCS2KF4.js} +26 -26
  34. package/dist/{chunk-K5567JM5.js.map → chunk-AUCS2KF4.js.map} +1 -1
  35. package/dist/{chunk-MSKKNPRE.mjs → chunk-F4KHAKTP.mjs} +172 -116
  36. package/dist/chunk-F4KHAKTP.mjs.map +1 -0
  37. package/dist/{chunk-SDYKXLCU.js → chunk-FHGWXWVZ.js} +67 -67
  38. package/dist/{chunk-SDYKXLCU.js.map → chunk-FHGWXWVZ.js.map} +1 -1
  39. package/dist/{chunk-5ETT54QS.js → chunk-FZUV7GNB.js} +241 -184
  40. package/dist/chunk-FZUV7GNB.js.map +1 -0
  41. package/dist/{chunk-6KDTVSZT.mjs → chunk-HQNIETHV.mjs} +11 -10
  42. package/dist/chunk-HQNIETHV.mjs.map +1 -0
  43. package/dist/{chunk-PLTLRL2V.mjs → chunk-KDDXDQR2.mjs} +3 -3
  44. package/dist/{chunk-PLTLRL2V.mjs.map → chunk-KDDXDQR2.mjs.map} +1 -1
  45. package/dist/{chunk-6YTYD4P5.js → chunk-LJGPMMKB.js} +156 -193
  46. package/dist/chunk-LJGPMMKB.js.map +1 -0
  47. package/dist/{chunk-BHOT22QL.js → chunk-MXQ2EYG2.js} +19 -2
  48. package/dist/chunk-MXQ2EYG2.js.map +1 -0
  49. package/dist/{chunk-ANFSQJNI.mjs → chunk-N6SGVUTR.mjs} +17 -20
  50. package/dist/chunk-N6SGVUTR.mjs.map +1 -0
  51. package/dist/{chunk-IIRS5XZY.js → chunk-NIZSQJRW.js} +33 -33
  52. package/dist/{chunk-IIRS5XZY.js.map → chunk-NIZSQJRW.js.map} +1 -1
  53. package/dist/{chunk-AKWCT53S.mjs → chunk-NXWIT4YQ.mjs} +47 -50
  54. package/dist/chunk-NXWIT4YQ.mjs.map +1 -0
  55. package/dist/{chunk-OC4AOYU5.mjs → chunk-OTQXU4WG.mjs} +83 -120
  56. package/dist/chunk-OTQXU4WG.mjs.map +1 -0
  57. package/dist/{chunk-CSOMZ5UM.mjs → chunk-PO66V2PN.mjs} +9 -9
  58. package/dist/{chunk-CSOMZ5UM.mjs.map → chunk-PO66V2PN.mjs.map} +1 -1
  59. package/dist/{chunk-OY5HUZSD.js → chunk-PXGESUKI.js} +94 -97
  60. package/dist/chunk-PXGESUKI.js.map +1 -0
  61. package/dist/{chunk-7TYNV6SY.mjs → chunk-Q2FUNDCP.mjs} +14 -14
  62. package/dist/{chunk-7TYNV6SY.mjs.map → chunk-Q2FUNDCP.mjs.map} +1 -1
  63. package/dist/{chunk-KWH7JIRP.mjs → chunk-Q5TZTA6H.mjs} +9 -8
  64. package/dist/chunk-Q5TZTA6H.mjs.map +1 -0
  65. package/dist/{chunk-ZRCXDKBE.mjs → chunk-T7DROKWJ.mjs} +4 -4
  66. package/dist/{chunk-ZRCXDKBE.mjs.map → chunk-T7DROKWJ.mjs.map} +1 -1
  67. package/dist/{chunk-3VYD7QL2.mjs → chunk-TQADF23S.mjs} +9 -9
  68. package/dist/chunk-TQADF23S.mjs.map +1 -0
  69. package/dist/{chunk-VIB42VMZ.mjs → chunk-U7VMFQFN.mjs} +5 -5
  70. package/dist/{chunk-VIB42VMZ.mjs.map → chunk-U7VMFQFN.mjs.map} +1 -1
  71. package/dist/{chunk-AHNH2PMI.mjs → chunk-WE35EV7J.mjs} +3 -3
  72. package/dist/{chunk-AHNH2PMI.mjs.map → chunk-WE35EV7J.mjs.map} +1 -1
  73. package/dist/{chunk-UPYACFZJ.mjs → chunk-WTSMTLSP.mjs} +303 -347
  74. package/dist/chunk-WTSMTLSP.mjs.map +1 -0
  75. package/dist/{chunk-WOTKBKS6.js → chunk-YFMMZHL5.js} +47 -50
  76. package/dist/chunk-YFMMZHL5.js.map +1 -0
  77. package/dist/{chunk-DJ33CSGJ.mjs → chunk-ZBX7UCAP.mjs} +9 -37
  78. package/dist/chunk-ZBX7UCAP.mjs.map +1 -0
  79. package/dist/{chunk-NF5DDM5V.js → chunk-ZE6U4N4Q.js} +44 -43
  80. package/dist/chunk-ZE6U4N4Q.js.map +1 -0
  81. package/dist/{chunk-MQDCUBVW.js → chunk-ZIRD3X6G.js} +459 -503
  82. package/dist/chunk-ZIRD3X6G.js.map +1 -0
  83. package/dist/index.d.mts +77 -7
  84. package/dist/index.d.ts +77 -7
  85. package/dist/index.js +708 -704
  86. package/dist/index.mjs +3 -3
  87. package/dist/platform/admin/index.js +12 -12
  88. package/dist/platform/admin/index.mjs +6 -6
  89. package/dist/platform/agents-workspace.js +9 -9
  90. package/dist/platform/agents-workspace.mjs +8 -8
  91. package/dist/platform/app-shell.js +5 -5
  92. package/dist/platform/app-shell.mjs +4 -4
  93. package/dist/platform/auth/index.js +29 -29
  94. package/dist/platform/auth/index.mjs +6 -6
  95. package/dist/platform/billing/index.js +7 -7
  96. package/dist/platform/billing/index.mjs +5 -5
  97. package/dist/platform/impersonation/index.js +5 -5
  98. package/dist/platform/impersonation/index.mjs +4 -4
  99. package/dist/platform/index.js +99 -99
  100. package/dist/platform/index.js.map +1 -1
  101. package/dist/platform/index.mjs +30 -30
  102. package/dist/platform/index.mjs.map +1 -1
  103. package/dist/platform/pages/index.d.mts +115 -3
  104. package/dist/platform/pages/index.d.ts +115 -3
  105. package/dist/platform/pages/index.js +966 -519
  106. package/dist/platform/pages/index.js.map +1 -1
  107. package/dist/platform/pages/index.mjs +562 -121
  108. package/dist/platform/pages/index.mjs.map +1 -1
  109. package/dist/platform/settings/index.js +9 -9
  110. package/dist/platform/settings/index.mjs +8 -8
  111. package/dist/platform/workflow-canvas-shell.js +7 -7
  112. package/dist/platform/workflow-canvas-shell.mjs +6 -6
  113. package/package.json +1 -1
  114. package/dist/chunk-3VYD7QL2.mjs.map +0 -1
  115. package/dist/chunk-5ETT54QS.js.map +0 -1
  116. package/dist/chunk-6KDTVSZT.mjs.map +0 -1
  117. package/dist/chunk-6YTYD4P5.js.map +0 -1
  118. package/dist/chunk-AKWCT53S.mjs.map +0 -1
  119. package/dist/chunk-AMCFAGK3.js.map +0 -1
  120. package/dist/chunk-ANFSQJNI.mjs.map +0 -1
  121. package/dist/chunk-BHOT22QL.js.map +0 -1
  122. package/dist/chunk-D5OTZGA2.js.map +0 -1
  123. package/dist/chunk-DJ33CSGJ.mjs.map +0 -1
  124. package/dist/chunk-KWH7JIRP.mjs.map +0 -1
  125. package/dist/chunk-MQDCUBVW.js.map +0 -1
  126. package/dist/chunk-MSKKNPRE.mjs.map +0 -1
  127. package/dist/chunk-NF5DDM5V.js.map +0 -1
  128. package/dist/chunk-OC4AOYU5.mjs.map +0 -1
  129. package/dist/chunk-OY5HUZSD.js.map +0 -1
  130. package/dist/chunk-P4RVGMZL.js.map +0 -1
  131. package/dist/chunk-QGLGQXJE.js.map +0 -1
  132. package/dist/chunk-UPYACFZJ.mjs.map +0 -1
  133. package/dist/chunk-UXHJS2SH.mjs.map +0 -1
  134. package/dist/chunk-WOTKBKS6.js.map +0 -1
  135. package/dist/chunk-WR55H7DH.mjs.map +0 -1
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkD5OTZGA2_js = require('../chunk-D5OTZGA2.js');
5
- require('../chunk-5ETT54QS.js');
6
- require('../chunk-Y5VN4SPH.js');
4
+ var chunk5SCZB5UI_js = require('../chunk-5SCZB5UI.js');
5
+ require('../chunk-FZUV7GNB.js');
7
6
  require('../chunk-22XPYFHJ.js');
8
7
  require('../chunk-2OZZH2IO.js');
9
- require('../chunk-EZQ2D47U.js');
10
- require('../chunk-BHOT22QL.js');
8
+ require('../chunk-Y5VN4SPH.js');
9
+ require('../chunk-6NEESZVO.js');
10
+ require('../chunk-MXQ2EYG2.js');
11
11
  require('../chunk-UZ3CMNUJ.js');
12
12
  require('../chunk-S7KHTUHA.js');
13
13
  require('../chunk-72SWXOD5.js');
@@ -16,7 +16,7 @@ require('../chunk-72SWXOD5.js');
16
16
 
17
17
  Object.defineProperty(exports, "Workspace", {
18
18
  enumerable: true,
19
- get: function () { return chunkD5OTZGA2_js.Workspace; }
19
+ get: function () { return chunk5SCZB5UI_js.Workspace; }
20
20
  });
21
21
  //# sourceMappingURL=workflow-canvas.js.map
22
22
  //# sourceMappingURL=workflow-canvas.js.map
@@ -1,11 +1,11 @@
1
1
  "use client";
2
- export { Workspace } from '../chunk-UXHJS2SH.mjs';
3
- import '../chunk-MSKKNPRE.mjs';
4
- import '../chunk-ZEFNBGYI.mjs';
2
+ export { Workspace } from '../chunk-33ZWFDVG.mjs';
3
+ import '../chunk-F4KHAKTP.mjs';
5
4
  import '../chunk-NBW6WJQT.mjs';
6
5
  import '../chunk-3AY5HIQ6.mjs';
7
- import '../chunk-PLTLRL2V.mjs';
8
- import '../chunk-WR55H7DH.mjs';
6
+ import '../chunk-ZEFNBGYI.mjs';
7
+ import '../chunk-KDDXDQR2.mjs';
8
+ import '../chunk-2SBVFLPZ.mjs';
9
9
  import '../chunk-D2JF6C3E.mjs';
10
10
  import '../chunk-QWG2FMUN.mjs';
11
11
  import '../chunk-G7JQ4OCE.mjs';
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk5ETT54QS_js = require('./chunk-5ETT54QS.js');
5
- var chunkBHOT22QL_js = require('./chunk-BHOT22QL.js');
4
+ var chunkFZUV7GNB_js = require('./chunk-FZUV7GNB.js');
5
+ var chunkMXQ2EYG2_js = require('./chunk-MXQ2EYG2.js');
6
6
  var react = require('react');
7
7
  var outline = require('@heroicons/react/24/outline');
8
8
  var jsxRuntime = require('react/jsx-runtime');
@@ -218,53 +218,54 @@ function ConnectionForm({
218
218
  switch (dialect.formType) {
219
219
  case "standard":
220
220
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
221
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "host", label: labels.fieldHost, placeholder: labels.fieldHostPlaceholder, required: true }),
222
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "port", label: labels.fieldPort, type: "number", defaultValue: dialect.defaultPort }),
223
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "database", label: labels.fieldDatabase, placeholder: labels.fieldDatabasePlaceholder, required: true }),
224
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "username", label: labels.fieldUsername, placeholder: labels.fieldUsernamePlaceholder }),
225
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "password", label: labels.fieldPassword, type: "password", placeholder: labels.fieldPasswordPlaceholder }),
226
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "schema", label: labels.fieldSchema, placeholder: labels.fieldSchemaPlaceholder })
221
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "host", label: labels.fieldHost, placeholder: labels.fieldHostPlaceholder, required: true }),
222
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "port", label: labels.fieldPort, type: "number", defaultValue: dialect.defaultPort }),
223
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "database", label: labels.fieldDatabase, placeholder: labels.fieldDatabasePlaceholder, required: true }),
224
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "username", label: labels.fieldUsername, placeholder: labels.fieldUsernamePlaceholder }),
225
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "password", label: labels.fieldPassword, type: "password", placeholder: labels.fieldPasswordPlaceholder }),
226
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "schema", label: labels.fieldSchema, placeholder: labels.fieldSchemaPlaceholder })
227
227
  ] });
228
228
  case "connection-string":
229
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-full", children: /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "connectionString", label: labels.fieldConnectionString, placeholder: labels.fieldConnectionStringPlaceholder, required: true }) });
229
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-full", children: /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "connectionString", label: labels.fieldConnectionString, placeholder: labels.fieldConnectionStringPlaceholder, required: true }) });
230
230
  case "cloud-bigquery":
231
231
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
232
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "projectId", label: labels.fieldProjectId, placeholder: labels.fieldProjectIdPlaceholder, required: true }),
233
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "dataset", label: labels.fieldDataset, placeholder: labels.fieldDatasetPlaceholder, required: true }),
234
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-full", children: /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "keyFile", label: labels.fieldKeyFile, placeholder: labels.fieldKeyFilePlaceholder }) })
232
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "projectId", label: labels.fieldProjectId, placeholder: labels.fieldProjectIdPlaceholder, required: true }),
233
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "dataset", label: labels.fieldDataset, placeholder: labels.fieldDatasetPlaceholder, required: true }),
234
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-full", children: /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "keyFile", label: labels.fieldKeyFile, placeholder: labels.fieldKeyFilePlaceholder }) })
235
235
  ] });
236
236
  case "cloud-snowflake":
237
237
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
238
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "account", label: labels.fieldAccount, placeholder: labels.fieldAccountPlaceholder, required: true }),
239
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "warehouse", label: labels.fieldWarehouse, placeholder: labels.fieldWarehousePlaceholder, required: true }),
240
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "database", label: labels.fieldDatabase, placeholder: labels.fieldDatabasePlaceholder, required: true }),
241
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "username", label: labels.fieldUsername, placeholder: labels.fieldUsernamePlaceholder, required: true }),
242
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "password", label: labels.fieldPassword, type: "password", placeholder: labels.fieldPasswordPlaceholder }),
243
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "schema", label: labels.fieldSchema, placeholder: labels.fieldSchemaPlaceholder })
238
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "account", label: labels.fieldAccount, placeholder: labels.fieldAccountPlaceholder, required: true }),
239
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "warehouse", label: labels.fieldWarehouse, placeholder: labels.fieldWarehousePlaceholder, required: true }),
240
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "database", label: labels.fieldDatabase, placeholder: labels.fieldDatabasePlaceholder, required: true }),
241
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "username", label: labels.fieldUsername, placeholder: labels.fieldUsernamePlaceholder, required: true }),
242
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "password", label: labels.fieldPassword, type: "password", placeholder: labels.fieldPasswordPlaceholder }),
243
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "schema", label: labels.fieldSchema, placeholder: labels.fieldSchemaPlaceholder })
244
244
  ] });
245
245
  case "cloud-key":
246
246
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
247
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "region", label: labels.fieldRegion, placeholder: labels.fieldRegionPlaceholder, required: true }),
248
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "token", label: labels.fieldToken, type: "password", placeholder: labels.fieldTokenPlaceholder, required: true }),
249
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "bucket", label: labels.fieldBucket, placeholder: labels.fieldBucketPlaceholder })
247
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "region", label: labels.fieldRegion, placeholder: labels.fieldRegionPlaceholder, required: true }),
248
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "token", label: labels.fieldToken, type: "password", placeholder: labels.fieldTokenPlaceholder, required: true }),
249
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "bucket", label: labels.fieldBucket, placeholder: labels.fieldBucketPlaceholder })
250
250
  ] });
251
251
  case "vector-key":
252
252
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
253
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "apiKey", label: labels.fieldApiKey, type: "password", placeholder: labels.fieldApiKeyPlaceholder, required: true }),
254
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "environment", label: labels.fieldEnvironment, placeholder: labels.fieldEnvironmentPlaceholder, required: true }),
255
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "index", label: labels.fieldIndex, placeholder: labels.fieldIndexPlaceholder })
253
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "apiKey", label: labels.fieldApiKey, type: "password", placeholder: labels.fieldApiKeyPlaceholder, required: true }),
254
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "environment", label: labels.fieldEnvironment, placeholder: labels.fieldEnvironmentPlaceholder, required: true }),
255
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "index", label: labels.fieldIndex, placeholder: labels.fieldIndexPlaceholder })
256
256
  ] });
257
257
  }
258
258
  }
259
259
  return /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleSubmit, className: "space-y-6", children: [
260
260
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
261
261
  /* @__PURE__ */ jsxRuntime.jsx(
262
- "button",
262
+ chunkMXQ2EYG2_js.IconButton,
263
263
  {
264
- type: "button",
264
+ label: "Voltar",
265
+ variant: "ghost",
266
+ size: "sm",
265
267
  onClick: onBack,
266
- className: "flex h-8 w-8 items-center justify-center rounded-lg text-slate-400 transition-colors hover:bg-white/45 hover:text-slate-700 dark:hover:bg-white/10 dark:hover:text-slate-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1",
267
- children: /* @__PURE__ */ jsxRuntime.jsx(outline.ArrowLeftIcon, { className: "h-4 w-4" })
268
+ icon: /* @__PURE__ */ jsxRuntime.jsx(outline.ArrowLeftIcon, { className: "h-4 w-4" })
268
269
  }
269
270
  ),
270
271
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
@@ -275,8 +276,8 @@ function ConnectionForm({
275
276
  ] })
276
277
  ] })
277
278
  ] }),
278
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormInput, { name: "name", label: labels.fieldName, placeholder: labels.fieldNamePlaceholder, required: true }),
279
- /* @__PURE__ */ jsxRuntime.jsx(chunk5ETT54QS_js.FormGrid, { children: renderFields() }),
279
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormInput, { name: "name", label: labels.fieldName, placeholder: labels.fieldNamePlaceholder, required: true }),
280
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZUV7GNB_js.FormGrid, { children: renderFields() }),
280
281
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-6 pt-2", children: [
281
282
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-sm text-slate-700 dark:text-slate-300", children: [
282
283
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -307,9 +308,9 @@ function ConnectionForm({
307
308
  /* @__PURE__ */ jsxRuntime.jsxs("details", { className: "liquid-surface rounded-xl p-3", children: [
308
309
  /* @__PURE__ */ jsxRuntime.jsx("summary", { className: "cursor-pointer text-sm font-medium text-slate-700 dark:text-slate-300", children: labels.advancedToggle ?? "Governance & performance" }),
309
310
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-3 space-y-3", children: [
310
- /* @__PURE__ */ jsxRuntime.jsxs(chunk5ETT54QS_js.FormGrid, { children: [
311
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkFZUV7GNB_js.FormGrid, { children: [
311
312
  /* @__PURE__ */ jsxRuntime.jsx(
312
- chunk5ETT54QS_js.FormInput,
313
+ chunkFZUV7GNB_js.FormInput,
313
314
  {
314
315
  name: "maxPoolSize",
315
316
  label: labels.fieldMaxPoolSize ?? "Max pool size",
@@ -320,7 +321,7 @@ function ConnectionForm({
320
321
  }
321
322
  ),
322
323
  /* @__PURE__ */ jsxRuntime.jsx(
323
- chunk5ETT54QS_js.FormInput,
324
+ chunkFZUV7GNB_js.FormInput,
324
325
  {
325
326
  name: "timeoutMs",
326
327
  label: labels.fieldTimeoutMs ?? "Timeout (ms)",
@@ -331,7 +332,7 @@ function ConnectionForm({
331
332
  )
332
333
  ] }),
333
334
  /* @__PURE__ */ jsxRuntime.jsx(
334
- chunk5ETT54QS_js.FormInput,
335
+ chunkFZUV7GNB_js.FormInput,
335
336
  {
336
337
  name: "allowedTables",
337
338
  label: labels.fieldAllowedTables ?? "Allowed tables (comma-separated)",
@@ -340,7 +341,7 @@ function ConnectionForm({
340
341
  ),
341
342
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-slate-500 dark:text-slate-400", children: labels.fieldAllowedTablesHelp ?? "Leave blank to allow every table the credential can see. Otherwise only the listed tables are queryable from workflows." }),
342
343
  /* @__PURE__ */ jsxRuntime.jsx(
343
- chunk5ETT54QS_js.FormInput,
344
+ chunkFZUV7GNB_js.FormInput,
344
345
  {
345
346
  name: "blockedColumns",
346
347
  label: labels.fieldBlockedColumns ?? "Blocked columns (comma-separated)",
@@ -352,7 +353,7 @@ function ConnectionForm({
352
353
  ] }),
353
354
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 border-t liquid-divider pt-5", children: [
354
355
  /* @__PURE__ */ jsxRuntime.jsx(
355
- chunkBHOT22QL_js.Button,
356
+ chunkMXQ2EYG2_js.Button,
356
357
  {
357
358
  type: "button",
358
359
  size: "sm",
@@ -371,7 +372,7 @@ function ConnectionForm({
371
372
  labels.connectionFailed
372
373
  ] }),
373
374
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
374
- /* @__PURE__ */ jsxRuntime.jsx(chunkBHOT22QL_js.Button, { type: "submit", size: "sm", color: "amber", children: labels.save })
375
+ /* @__PURE__ */ jsxRuntime.jsx(chunkMXQ2EYG2_js.Button, { type: "submit", size: "sm", color: "amber", children: labels.save })
375
376
  ] })
376
377
  ] });
377
378
  }
@@ -387,7 +388,7 @@ function DatasourceFormModal({ open, onClose, labels, onSave }) {
387
388
  handleClose();
388
389
  }
389
390
  return /* @__PURE__ */ jsxRuntime.jsx(
390
- chunk5ETT54QS_js.GlassModal,
391
+ chunkFZUV7GNB_js.GlassModal,
391
392
  {
392
393
  open,
393
394
  onClose: handleClose,
@@ -420,7 +421,7 @@ function DatasourceModal({ open, onClose, labels, onSave }) {
420
421
  handleClose();
421
422
  }
422
423
  return /* @__PURE__ */ jsxRuntime.jsx(
423
- chunk5ETT54QS_js.GlassModal,
424
+ chunkFZUV7GNB_js.GlassModal,
424
425
  {
425
426
  open,
426
427
  onClose: handleClose,
@@ -450,5 +451,5 @@ exports.DatasourceFormModal = DatasourceFormModal;
450
451
  exports.DatasourceModal = DatasourceModal;
451
452
  exports.findCategory = findCategory;
452
453
  exports.findDialect = findDialect;
453
- //# sourceMappingURL=chunk-AMCFAGK3.js.map
454
- //# sourceMappingURL=chunk-AMCFAGK3.js.map
454
+ //# sourceMappingURL=chunk-2II2NLAZ.js.map
455
+ //# sourceMappingURL=chunk-2II2NLAZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/platform/pages/datasource-modal.tsx"],"names":["CircleStackIcon","ServerStackIcon","CloudIcon","ClockIcon","ShareIcon","KeyIcon","MagnifyingGlassIcon","jsx","jsxs","useState","Fragment","FormInput","IconButton","ArrowLeftIcon","FormGrid","Button","CheckCircleIcon","XCircleIcon","GlassModal"],"mappings":"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","file":"chunk-2II2NLAZ.js","sourcesContent":["import { useState, type FormEvent, type ReactNode } from 'react'\nimport {\n CircleStackIcon,\n ServerStackIcon,\n CloudIcon,\n ClockIcon,\n ShareIcon,\n KeyIcon,\n MagnifyingGlassIcon,\n ArrowLeftIcon,\n CheckCircleIcon,\n XCircleIcon,\n} from '@heroicons/react/24/outline'\nimport {\n GlassModal,\n FormGrid,\n FormInput,\n FormSelect,\n Button,\n IconButton,\n} from '@ui/index'\n\n/* ─── Dialect catalog ─── */\n\ntype DialectCategory = {\n id: string\n labelKey: string\n icon: React.ComponentType<{ className?: string }>\n gradient: string\n dialects: DialectOption[]\n}\n\ntype DialectOption = {\n value: string\n label: string\n defaultPort?: number\n /** 'standard' = host/port/db, 'connection-string' = single URL, 'cloud' = project/dataset/key */\n formType: 'standard' | 'connection-string' | 'cloud-bigquery' | 'cloud-snowflake' | 'cloud-key' | 'vector-key'\n}\n\nconst DIALECT_CATEGORIES: DialectCategory[] = [\n {\n id: 'relational',\n labelKey: 'categoryRelational',\n icon: CircleStackIcon,\n gradient: 'from-blue-500 to-indigo-600',\n dialects: [\n { value: 'postgres', label: 'PostgreSQL', defaultPort: 5432, formType: 'standard' },\n { value: 'mysql', label: 'MySQL', defaultPort: 3306, formType: 'standard' },\n { value: 'mariadb', label: 'MariaDB', defaultPort: 3306, formType: 'standard' },\n { value: 'mssql', label: 'SQL Server', defaultPort: 1433, formType: 'standard' },\n { value: 'oracle', label: 'Oracle', defaultPort: 1521, formType: 'standard' },\n { value: 'db2', label: 'IBM Db2', defaultPort: 50000, formType: 'standard' },\n { value: 'cockroachdb', label: 'CockroachDB', defaultPort: 26257, formType: 'standard' },\n { value: 'timescaledb', label: 'TimescaleDB', defaultPort: 5432, formType: 'standard' },\n { value: 'sqlite', label: 'SQLite', formType: 'connection-string' },\n { value: 'duckdb', label: 'DuckDB', formType: 'connection-string' },\n ],\n },\n {\n id: 'nosql',\n labelKey: 'categoryNoSql',\n icon: ServerStackIcon,\n gradient: 'from-emerald-500 to-teal-600',\n dialects: [\n { value: 'mongodb', label: 'MongoDB', defaultPort: 27017, formType: 'connection-string' },\n { value: 'cassandra', label: 'Cassandra', defaultPort: 9042, formType: 'standard' },\n { value: 'scylladb', label: 'ScyllaDB', defaultPort: 9042, formType: 'standard' },\n { value: 'dynamodb', label: 'DynamoDB', formType: 'cloud-key' },\n { value: 'cosmosdb', label: 'CosmosDB', formType: 'connection-string' },\n { value: 'arangodb', label: 'ArangoDB', defaultPort: 8529, formType: 'standard' },\n ],\n },\n {\n id: 'warehouse',\n labelKey: 'categoryWarehouse',\n icon: CloudIcon,\n gradient: 'from-purple-500 to-violet-600',\n dialects: [\n { value: 'bigquery', label: 'BigQuery', formType: 'cloud-bigquery' },\n { value: 'snowflake', label: 'Snowflake', formType: 'cloud-snowflake' },\n { value: 'clickhouse', label: 'ClickHouse', defaultPort: 8123, formType: 'standard' },\n ],\n },\n {\n id: 'timeseries',\n labelKey: 'categoryTimeSeries',\n icon: ClockIcon,\n gradient: 'from-sky-500 to-cyan-600',\n dialects: [\n { value: 'influxdb', label: 'InfluxDB', formType: 'cloud-key' },\n { value: 'timestream', label: 'Timestream', formType: 'cloud-key' },\n ],\n },\n {\n id: 'graph',\n labelKey: 'categoryGraph',\n icon: ShareIcon,\n gradient: 'from-pink-500 to-rose-600',\n dialects: [\n { value: 'neo4j', label: 'Neo4j', defaultPort: 7687, formType: 'standard' },\n { value: 'neptune', label: 'Neptune', formType: 'connection-string' },\n ],\n },\n {\n id: 'keyvalue',\n labelKey: 'categoryKeyValue',\n icon: KeyIcon,\n gradient: 'from-red-500 to-orange-600',\n dialects: [\n { value: 'redis', label: 'Redis', defaultPort: 6379, formType: 'standard' },\n ],\n },\n {\n id: 'search',\n labelKey: 'categorySearch',\n icon: MagnifyingGlassIcon,\n gradient: 'from-amber-500 to-yellow-600',\n dialects: [\n { value: 'elasticsearch', label: 'Elasticsearch', defaultPort: 9200, formType: 'standard' },\n { value: 'opensearch', label: 'OpenSearch', defaultPort: 9200, formType: 'standard' },\n { value: 'pinecone', label: 'Pinecone', formType: 'vector-key' },\n { value: 'qdrant', label: 'Qdrant', defaultPort: 6333, formType: 'standard' },\n { value: 'weaviate', label: 'Weaviate', defaultPort: 8080, formType: 'standard' },\n { value: 'milvus', label: 'Milvus', defaultPort: 19530, formType: 'standard' },\n { value: 'chromadb', label: 'ChromaDB', defaultPort: 8000, formType: 'standard' },\n ],\n },\n]\n\nfunction findDialect(value: string): DialectOption | undefined {\n for (const category of DIALECT_CATEGORIES) {\n const found = category.dialects.find((d) => d.value === value)\n if (found) return found\n }\n return undefined\n}\n\nfunction findCategory(dialectValue: string): DialectCategory | undefined {\n return DIALECT_CATEGORIES.find((c) => c.dialects.some((d) => d.value === dialectValue))\n}\n\n/* ─── Types ─── */\n\nexport type DatasourceFormData = {\n name: string\n dialect: string\n host?: string\n port?: number\n database?: string\n username?: string\n password?: string\n schema?: string\n ssl?: boolean\n readOnly?: boolean\n connectionString?: string\n projectId?: string\n dataset?: string\n keyFile?: string\n account?: string\n warehouse?: string\n region?: string\n bucket?: string\n token?: string\n apiKey?: string\n environment?: string\n index?: string\n url?: string\n /** Whitelist of tables the engine is allowed to query. Empty/undef =\n * allow every table the credential can see. */\n allowedTables?: string[]\n /** Columns the engine MUST NOT surface to workflows. Applied at the\n * driver layer — trying to SELECT a blocked column still fails. */\n blockedColumns?: string[]\n /** Max concurrent connections in the org's cached pool (default 5). */\n maxPoolSize?: number\n /** Query/connect timeout in ms (default 5000). */\n timeoutMs?: number\n /** When true, the driver hashes / masks fields tagged as PII before\n * returning rows to the workflow. */\n maskPii?: boolean\n}\n\ntype Labels = Record<string, string>\n\nexport type DatasourceFormModalProps = {\n open: boolean\n onClose: () => void\n labels: Labels\n onSave: (data: DatasourceFormData) => void\n}\n\n/* ─── Step 1: Category + dialect picker ─── */\n\n// Brand SVG lookup — must stay in sync with the same map in\n// `datasources-page-view.tsx`. When the dialect has a brand SVG the chip\n// shows it; otherwise we fall back to the generic stacked-disks Heroicon.\n// Same source folder (`/public/logos/datasources/`) as the cards on\n// `/datasources` so a user sees the same logo here and in the list.\nconst DIALECT_LOGO_SRC: Record<string, string> = {\n bigquery: '/logos/datasources/bigquery.svg',\n postgres: '/logos/datasources/postgres.svg',\n postgresql: '/logos/datasources/postgres.svg',\n mysql: '/logos/datasources/mysql.svg',\n mariadb: '/logos/datasources/mariadb.svg',\n snowflake: '/logos/datasources/snowflake.svg',\n mongodb: '/logos/datasources/mongodb.svg',\n redis: '/logos/datasources/redis.svg',\n clickhouse: '/logos/datasources/clickhouse.svg',\n elasticsearch: '/logos/datasources/elasticsearch.svg',\n duckdb: '/logos/datasources/duckdb.svg',\n sqlite: '/logos/datasources/sqlite.svg',\n oracle: '/logos/datasources/oracle.svg',\n mssql: '/logos/datasources/mssql.svg',\n sqlserver: '/logos/datasources/mssql.svg',\n cassandra: '/logos/datasources/cassandra.svg',\n dynamodb: '/logos/datasources/dynamodb.svg',\n cockroach: '/logos/datasources/cockroachdb.svg',\n cockroachdb: '/logos/datasources/cockroachdb.svg',\n supabase: '/logos/datasources/supabase.svg',\n firebase: '/logos/datasources/firebase.svg',\n neo4j: '/logos/datasources/neo4j.svg',\n // AWS managed services (icepanel.io / official AWS Architecture Icons)\n neptune: '/logos/datasources/neptune.svg',\n timestream: '/logos/datasources/timestream.svg',\n opensearch: '/logos/datasources/opensearch.svg',\n}\n\nfunction DialectPicker({\n labels,\n onSelect,\n}: {\n labels: Labels\n onSelect: (dialect: string) => void\n}) {\n return (\n <div className=\"space-y-6\">\n {DIALECT_CATEGORIES.map((category) => (\n <div key={category.id}>\n <div className=\"mb-2 flex items-center gap-2\">\n <div className={`flex h-7 w-7 items-center justify-center rounded-lg bg-gradient-to-br ${category.gradient}`}>\n <category.icon className=\"h-4 w-4 text-white\" />\n </div>\n <span className=\"text-sm font-semibold text-slate-700 dark:text-slate-200\">\n {labels[category.labelKey] ?? category.id}\n </span>\n </div>\n <div className=\"grid grid-cols-2 gap-2 sm:grid-cols-3\">\n {category.dialects.map((dialect) => {\n const logoSrc = DIALECT_LOGO_SRC[dialect.value.toLowerCase()]\n return (\n <button /* no-raw-button-ok: dialect picker tile — selectable button with per-dialect logo image; ChipPicker has no logo slot and the tile uses bespoke hover/active chrome */\n key={dialect.value}\n type=\"button\"\n onClick={() => onSelect(dialect.value)}\n className=\"liquid-surface group flex items-center gap-2 rounded-xl px-3 py-2.5 text-left text-sm font-medium text-slate-700 transition-all hover:border-amber-400/60 hover:bg-amber-50/50 hover:text-amber-700 active:scale-[0.97] focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1 dark:text-slate-300 dark:hover:border-amber-400/40 dark:hover:bg-amber-500/10 dark:hover:text-amber-300\"\n >\n {logoSrc ? (\n <img\n src={logoSrc}\n alt={dialect.label}\n className=\"h-4 w-4 shrink-0 object-contain\"\n />\n ) : (\n <CircleStackIcon className=\"h-4 w-4 shrink-0 text-slate-400 transition-colors group-hover:text-amber-500 dark:text-slate-500\" />\n )}\n {dialect.label}\n </button>\n )\n })}\n </div>\n </div>\n ))}\n </div>\n )\n}\n\n/* ─── Step 2: Connection form ─── */\n\nfunction ConnectionForm({\n dialect,\n labels,\n onBack,\n onSubmit,\n}: {\n dialect: DialectOption\n labels: Labels\n onBack: () => void\n onSubmit: (data: DatasourceFormData) => void\n}) {\n const [testStatus, setTestStatus] = useState<'idle' | 'testing' | 'success' | 'failed'>('idle')\n const category = findCategory(dialect.value)\n\n function handleSubmit(event: FormEvent) {\n event.preventDefault()\n const formData = new FormData(event.currentTarget as HTMLFormElement)\n const data: DatasourceFormData = {\n name: String(formData.get('name') ?? '').trim(),\n dialect: dialect.value,\n }\n\n // Collect all possible fields\n for (const key of ['host', 'database', 'username', 'password', 'schema', 'connectionString', 'projectId', 'dataset', 'keyFile', 'account', 'warehouse', 'region', 'bucket', 'token', 'apiKey', 'environment', 'index', 'url'] as const) {\n const val = String(formData.get(key) ?? '').trim()\n if (val) (data as Record<string, unknown>)[key] = val\n }\n\n const port = String(formData.get('port') ?? '').trim()\n if (port) data.port = Number(port)\n\n data.ssl = formData.get('ssl') === 'on'\n data.readOnly = formData.get('readOnly') === 'on'\n\n // Advanced — pool size, timeout, allowlist/blocklist\n const maxPoolSize = String(formData.get('maxPoolSize') ?? '').trim()\n if (maxPoolSize) {\n const parsed = Number(maxPoolSize)\n if (Number.isFinite(parsed) && parsed > 0) data.maxPoolSize = parsed\n }\n const timeoutMs = String(formData.get('timeoutMs') ?? '').trim()\n if (timeoutMs) {\n const parsed = Number(timeoutMs)\n if (Number.isFinite(parsed) && parsed > 0) data.timeoutMs = parsed\n }\n const allowedTables = splitList(String(formData.get('allowedTables') ?? ''))\n if (allowedTables.length > 0) data.allowedTables = allowedTables\n const blockedColumns = splitList(String(formData.get('blockedColumns') ?? ''))\n if (blockedColumns.length > 0) data.blockedColumns = blockedColumns\n\n onSubmit(data)\n }\n\n function handleTestConnection() {\n setTestStatus('testing')\n // Simulate test connection — real implementation would call API\n setTimeout(() => {\n setTestStatus('success')\n setTimeout(() => setTestStatus('idle'), 3000)\n }, 1500)\n }\n\n function renderFields(): ReactNode {\n switch (dialect.formType) {\n case 'standard':\n return (\n <>\n <FormInput name=\"host\" label={labels.fieldHost} placeholder={labels.fieldHostPlaceholder} required />\n <FormInput name=\"port\" label={labels.fieldPort} type=\"number\" defaultValue={dialect.defaultPort} />\n <FormInput name=\"database\" label={labels.fieldDatabase} placeholder={labels.fieldDatabasePlaceholder} required />\n <FormInput name=\"username\" label={labels.fieldUsername} placeholder={labels.fieldUsernamePlaceholder} />\n <FormInput name=\"password\" label={labels.fieldPassword} type=\"password\" placeholder={labels.fieldPasswordPlaceholder} />\n <FormInput name=\"schema\" label={labels.fieldSchema} placeholder={labels.fieldSchemaPlaceholder} />\n </>\n )\n\n case 'connection-string':\n return (\n <div className=\"col-span-full\">\n <FormInput name=\"connectionString\" label={labels.fieldConnectionString} placeholder={labels.fieldConnectionStringPlaceholder} required />\n </div>\n )\n\n case 'cloud-bigquery':\n return (\n <>\n <FormInput name=\"projectId\" label={labels.fieldProjectId} placeholder={labels.fieldProjectIdPlaceholder} required />\n <FormInput name=\"dataset\" label={labels.fieldDataset} placeholder={labels.fieldDatasetPlaceholder} required />\n <div className=\"col-span-full\">\n <FormInput name=\"keyFile\" label={labels.fieldKeyFile} placeholder={labels.fieldKeyFilePlaceholder} />\n </div>\n </>\n )\n\n case 'cloud-snowflake':\n return (\n <>\n <FormInput name=\"account\" label={labels.fieldAccount} placeholder={labels.fieldAccountPlaceholder} required />\n <FormInput name=\"warehouse\" label={labels.fieldWarehouse} placeholder={labels.fieldWarehousePlaceholder} required />\n <FormInput name=\"database\" label={labels.fieldDatabase} placeholder={labels.fieldDatabasePlaceholder} required />\n <FormInput name=\"username\" label={labels.fieldUsername} placeholder={labels.fieldUsernamePlaceholder} required />\n <FormInput name=\"password\" label={labels.fieldPassword} type=\"password\" placeholder={labels.fieldPasswordPlaceholder} />\n <FormInput name=\"schema\" label={labels.fieldSchema} placeholder={labels.fieldSchemaPlaceholder} />\n </>\n )\n\n case 'cloud-key':\n return (\n <>\n <FormInput name=\"region\" label={labels.fieldRegion} placeholder={labels.fieldRegionPlaceholder} required />\n <FormInput name=\"token\" label={labels.fieldToken} type=\"password\" placeholder={labels.fieldTokenPlaceholder} required />\n <FormInput name=\"bucket\" label={labels.fieldBucket} placeholder={labels.fieldBucketPlaceholder} />\n </>\n )\n\n case 'vector-key':\n return (\n <>\n <FormInput name=\"apiKey\" label={labels.fieldApiKey} type=\"password\" placeholder={labels.fieldApiKeyPlaceholder} required />\n <FormInput name=\"environment\" label={labels.fieldEnvironment} placeholder={labels.fieldEnvironmentPlaceholder} required />\n <FormInput name=\"index\" label={labels.fieldIndex} placeholder={labels.fieldIndexPlaceholder} />\n </>\n )\n }\n }\n\n return (\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n {/* Back button + dialect badge */}\n <div className=\"flex items-center gap-3\">\n <IconButton\n label=\"Voltar\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={onBack}\n icon={<ArrowLeftIcon className=\"h-4 w-4\" />}\n />\n <div className=\"flex items-center gap-2\">\n <div className={`flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br ${category?.gradient ?? 'from-slate-400 to-slate-500'}`}>\n {category ? <category.icon className=\"h-4 w-4 text-white\" /> : <CircleStackIcon className=\"h-4 w-4 text-white\" />}\n </div>\n <div>\n <span className=\"text-sm font-semibold text-slate-900 dark:text-white\">{dialect.label}</span>\n <span className=\"ml-2 text-xs text-slate-500 dark:text-slate-400\">{labels[category?.labelKey ?? ''] ?? ''}</span>\n </div>\n </div>\n </div>\n\n {/* Name field — always present */}\n <FormInput name=\"name\" label={labels.fieldName} placeholder={labels.fieldNamePlaceholder} required />\n\n {/* Dynamic fields per dialect form type */}\n <FormGrid>\n {renderFields()}\n </FormGrid>\n\n {/* Toggles */}\n <div className=\"flex flex-wrap items-center gap-6 pt-2\">\n <label className=\"flex items-center gap-2 text-sm text-slate-700 dark:text-slate-300\">\n <input\n type=\"checkbox\"\n name=\"ssl\"\n defaultChecked\n className=\"h-4 w-4 rounded border-slate-300 text-amber-600 focus:ring-2 focus:ring-amber-500/70 focus:ring-offset-1 dark:border-white/15 dark:bg-white/[0.08]\"\n />\n {labels.fieldSsl}\n </label>\n <label className=\"flex items-center gap-2 text-sm text-slate-700 dark:text-slate-300\">\n <input\n type=\"checkbox\"\n name=\"readOnly\"\n defaultChecked\n className=\"h-4 w-4 rounded border-slate-300 text-amber-600 focus:ring-2 focus:ring-amber-500/70 focus:ring-offset-1 dark:border-white/15 dark:bg-white/[0.08]\"\n />\n {labels.fieldReadOnly}\n </label>\n </div>\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">{labels.fieldReadOnlyHelp}</p>\n\n {/* Advanced — pool, timeout, table/column governance. Collapsed by\n default because the defaults (pool=5, timeout=5s, no allow/block)\n are correct for almost every datasource. Shown when an admin\n needs to lock down a specific table or raise the timeout for\n a slow analytic warehouse. */}\n <details className=\"liquid-surface rounded-xl p-3\">\n <summary className=\"cursor-pointer text-sm font-medium text-slate-700 dark:text-slate-300\">\n {labels.advancedToggle ?? 'Governance & performance'}\n </summary>\n <div className=\"mt-3 space-y-3\">\n <FormGrid>\n <FormInput\n name=\"maxPoolSize\"\n label={labels.fieldMaxPoolSize ?? 'Max pool size'}\n type=\"number\"\n min={1}\n max={100}\n placeholder=\"5\"\n />\n <FormInput\n name=\"timeoutMs\"\n label={labels.fieldTimeoutMs ?? 'Timeout (ms)'}\n type=\"number\"\n min={100}\n placeholder=\"5000\"\n />\n </FormGrid>\n <FormInput\n name=\"allowedTables\"\n label={labels.fieldAllowedTables ?? 'Allowed tables (comma-separated)'}\n placeholder=\"stations, current_prices, competitor_prices\"\n />\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {labels.fieldAllowedTablesHelp\n ?? 'Leave blank to allow every table the credential can see. Otherwise only the listed tables are queryable from workflows.'}\n </p>\n <FormInput\n name=\"blockedColumns\"\n label={labels.fieldBlockedColumns ?? 'Blocked columns (comma-separated)'}\n placeholder=\"customers.ssn, employees.salary\"\n />\n <p className=\"text-xs text-slate-500 dark:text-slate-400\">\n {labels.fieldBlockedColumnsHelp\n ?? 'Columns the driver must never surface, even if referenced by a workflow. Use table.column notation for specificity.'}\n </p>\n </div>\n </details>\n\n {/* Actions */}\n <div className=\"flex items-center gap-3 border-t liquid-divider pt-5\">\n <Button\n type=\"button\"\n size=\"sm\"\n color=\"zinc\"\n onClick={handleTestConnection}\n disabled={testStatus === 'testing'}\n >\n {testStatus === 'testing' ? labels.testing : labels.testConnection}\n </Button>\n\n {testStatus === 'success' && (\n <span className=\"flex items-center gap-1 text-xs font-medium text-emerald-600 dark:text-emerald-400\">\n <CheckCircleIcon className=\"h-4 w-4\" />\n {labels.connectionSuccess}\n </span>\n )}\n {testStatus === 'failed' && (\n <span className=\"flex items-center gap-1 text-xs font-medium text-red-600 dark:text-red-400\">\n <XCircleIcon className=\"h-4 w-4\" />\n {labels.connectionFailed}\n </span>\n )}\n\n <div className=\"flex-1\" />\n\n <Button type=\"submit\" size=\"sm\" color=\"amber\">\n {labels.save}\n </Button>\n </div>\n </form>\n )\n}\n\n/* ─── Form Modal ─── */\n\nexport function DatasourceFormModal({ open, onClose, labels, onSave }: DatasourceFormModalProps) {\n const [selectedDialect, setSelectedDialect] = useState<string | null>(null)\n const dialect = selectedDialect ? findDialect(selectedDialect) : null\n\n function handleClose() {\n setSelectedDialect(null)\n onClose()\n }\n\n function handleSave(data: DatasourceFormData) {\n onSave(data)\n handleClose()\n }\n\n return (\n <GlassModal\n open={open}\n onClose={handleClose}\n title={labels.createTitle}\n subtitle={dialect ? labels.stepConfigure : labels.stepSelectType}\n icon={<CircleStackIcon className=\"h-5 w-5\" />}\n gradient=\"from-amber-500 to-orange-600\"\n maxWidth=\"3xl\"\n >\n {dialect ? (\n <ConnectionForm\n dialect={dialect}\n labels={labels}\n onBack={() => setSelectedDialect(null)}\n onSubmit={handleSave}\n />\n ) : (\n <DialectPicker labels={labels} onSelect={setSelectedDialect} />\n )}\n </GlassModal>\n )\n}\n\n/* ─── Modal (for /datasources page) ─── */\n\nexport type DatasourceModalProps = {\n open: boolean\n onClose: () => void\n labels: Labels\n onSave: (data: DatasourceFormData) => void\n}\n\nexport function DatasourceModal({ open, onClose, labels, onSave }: DatasourceModalProps) {\n const [selectedDialect, setSelectedDialect] = useState<string | null>(null)\n const dialect = selectedDialect ? findDialect(selectedDialect) : null\n\n function handleClose() {\n setSelectedDialect(null)\n onClose()\n }\n\n function handleSave(data: DatasourceFormData) {\n onSave(data)\n handleClose()\n }\n\n return (\n <GlassModal\n open={open}\n onClose={handleClose}\n title={labels.createTitle}\n subtitle={dialect ? labels.stepConfigure : labels.stepSelectType}\n icon={<CircleStackIcon className=\"h-5 w-5\" />}\n gradient=\"from-amber-500 to-orange-600\"\n maxWidth=\"3xl\"\n >\n {dialect ? (\n <ConnectionForm\n dialect={dialect}\n labels={labels}\n onBack={() => setSelectedDialect(null)}\n onSubmit={handleSave}\n />\n ) : (\n <DialectPicker labels={labels} onSelect={setSelectedDialect} />\n )}\n </GlassModal>\n )\n}\n\nexport { DIALECT_CATEGORIES, findDialect, findCategory }\n\nfunction splitList(raw: string): string[] {\n return raw\n .split(',')\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0)\n}\n"]}
@@ -340,6 +340,20 @@ var iosColors2 = {
340
340
  "text-white [--btn-bg:#5AC8FA] [--btn-border:#4AB8E8] [--btn-hover-overlay:var(--color-white)]/10",
341
341
  "dark:[--btn-bg:#64D2FF] dark:[--btn-border:#5AC8FA]",
342
342
  "[--btn-icon:var(--color-white)]/80"
343
+ ],
344
+ // iOS fuchsia (used by IconButton ghost for accent affordances —
345
+ // see DraggableCommandBar, WorkflowListBar convert-to-subworkflow).
346
+ "ios-fuchsia": [
347
+ "text-white [--btn-bg:#FF2D55] [--btn-border:#E62950] [--btn-hover-overlay:var(--color-white)]/10",
348
+ "dark:[--btn-bg:#FF375F] dark:[--btn-border:#FF2D55]",
349
+ "[--btn-icon:var(--color-white)]/80"
350
+ ],
351
+ // iOS amber (rare ghost-only accent for warnings / "experimental"
352
+ // affordances in canvas chrome).
353
+ "ios-amber": [
354
+ "text-white [--btn-bg:#FFCC00] [--btn-border:#E6B800] [--btn-hover-overlay:var(--color-white)]/10",
355
+ "dark:[--btn-bg:#FFD60A] dark:[--btn-border:#FFCC00]",
356
+ "[--btn-icon:var(--color-white)]/80"
343
357
  ]
344
358
  };
345
359
  var sizeStyles = {
@@ -765,6 +779,9 @@ function IconButton({
765
779
  isIosColor && finalColor === "ios-green" && "text-[#34C759] dark:text-[#30D158]",
766
780
  isIosColor && finalColor === "ios-orange" && "text-[#FF9500] dark:text-[#FF9F0A]",
767
781
  isIosColor && finalColor === "ios-purple" && "text-[#AF52DE] dark:text-[#BF5AF2]",
782
+ isIosColor && finalColor === "ios-teal" && "text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300",
783
+ isIosColor && finalColor === "ios-fuchsia" && "text-fuchsia-600 dark:text-fuchsia-400 hover:text-fuchsia-700 dark:hover:text-fuchsia-300",
784
+ isIosColor && finalColor === "ios-amber" && "text-amber-600 dark:text-amber-400 hover:text-amber-700 dark:hover:text-amber-300",
768
785
  !isIosColor && "text-slate-700 dark:text-slate-300"
769
786
  ),
770
787
  outline: clsx(
@@ -930,5 +947,5 @@ forwardRef(function BadgeButton2({
930
947
  });
931
948
 
932
949
  export { Badge, Button, FloatingActionButton, IconButton, Link, TouchTarget, buttonPress, buttonPressReduced, buttonTap, cardHover, cardHoverReduced, cardPress, createMotionProps, duration, durationSeconds, durations, durationsReduced, ease, easeCss, easings, fadeOnly, fadeScale, getTransition, getVariants, iosColors, listItem, listItemReduced, motionTokens, notificationBanner, notificationBannerReduced, pageControlDot, prefersReducedMotion, slideDown, slideRight, slideUp, spring, springPresets, springPresetsReduced, staggerContainer, swipeActionThreshold, swipeConstraints };
933
- //# sourceMappingURL=chunk-WR55H7DH.mjs.map
934
- //# sourceMappingURL=chunk-WR55H7DH.mjs.map
950
+ //# sourceMappingURL=chunk-2SBVFLPZ.mjs.map
951
+ //# sourceMappingURL=chunk-2SBVFLPZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/motion-tokens.ts","../src/lib/animations.ts","../src/components/link.tsx","../src/components/button-styles.ts","../src/components/button.tsx","../src/components/badge.tsx"],"names":["Link","iosColors","forwardRef","Button","jsx","HeadlessButton","clsx","jsxs","BadgeButton","Headless2"],"mappings":";;;;;;;;;;;AAgCO,IAAM,QAAA,GAAW;AAAA;AAAA,EAEtB,EAAA,EAAI,EAAA;AAAA;AAAA,EAEJ,EAAA,EAAI,GAAA;AAAA;AAAA,EAEJ,EAAA,EAAI,GAAA;AAAA;AAAA,EAEJ,EAAA,EAAI;AACN;AAKO,IAAM,eAAA,GAAkB;AAAA,EAC7B,EAAA,EAAI,SAAS,EAAA,GAAK,GAAA;AAAA,EAClB,EAAA,EAAI,SAAS,EAAA,GAAK,GAAA;AAAA,EAClB,EAAA,EAAI,SAAS,EAAA,GAAK,GAAA;AAAA,EAClB,EAAA,EAAI,SAAS,EAAA,GAAK;AACpB;AAMO,IAAM,IAAA,GAAO;AAAA;AAAA,EAElB,QAAA,EAAY,CAAC,GAAA,EAAK,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA;AAAA,EAE3B,UAAA,EAAY,CAAC,GAAA,EAAK,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA;AAAA,EAEzB,UAAA,EAAY,CAAC,CAAA,EAAG,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA;AAAA,EAEzB,UAAA,EAAY,CAAC,GAAA,EAAK,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA;AAAA,EAEzB,GAAA,EAAY,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI;AACrC;AAKO,IAAM,OAAA,GAAqC;AAAA,EAChD,UAAY,CAAA,aAAA,EAAgB,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,EACpD,YAAY,CAAA,aAAA,EAAgB,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,EACtD,YAAY,CAAA,aAAA,EAAgB,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,EACtD,YAAY,CAAA,aAAA,EAAgB,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,EACtD,KAAY,CAAA,aAAA,EAAgB,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AACjD;AAMO,IAAM,MAAA,GAAS;AAAA;AAAA,EAEpB,MAAQ,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA,EAAG;AAAA;AAAA,EAEtD,QAAQ,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA,EAAG;AAAA;AAAA,EAEtD,QAAQ,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA,EAAG;AAAA;AAAA,EAEtD,QAAQ,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA,EAAG;AAAA;AAAA,EAEtD,KAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,WAAW,GAAA,EAAK,OAAA,EAAS,EAAA,EAAI,IAAA,EAAM,GAAA;AAC/D;AAUO,IAAM,YAAA,GAAe;AAAA,EAC1B,QAAA;AAAA,EACA,eAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF;;;ACrFO,SAAS,oBAAA,GAAgC;AAC9C,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAC1C,EAAA,OAAO,MAAA,CAAO,UAAA,CAAW,kCAAkC,CAAA,CAAE,OAAA;AAC/D;AAKO,SAAS,cAAc,UAAA,EAAoC;AAChE,EAAA,IAAI,sBAAqB,EAAG;AAC1B,IAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,EACvB;AACA,EAAA,OAAO,UAAA;AACT;AAKO,SAAS,YAAY,QAAA,EAA8B;AACxD,EAAA,IAAI,sBAAqB,EAAG;AAE1B,IAAA,MAAM,kBAA4B,EAAC;AACnC,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,MAAA,eAAA,CAAgB,GAAG,CAAA,GAAI;AAAA,QACrB,GAAG,SAAS,GAAG,CAAA;AAAA,QACf,UAAA,EAAY,EAAE,QAAA,EAAU,CAAA;AAAE,OAC5B;AAAA,IACF;AACA,IAAA,OAAO,eAAA;AAAA,EACT;AACA,EAAA,OAAO,QAAA;AACT;AAWO,IAAM,aAAA,GAAgB;AAAA,EAC3B,SAAS,MAAA,CAAa,MAAA;AAAA,EACtB,QAAS,MAAA,CAAa,MAAA;AAAA,EACtB,OAAS,MAAA,CAAa,IAAA;AAAA,EACtB,QAAS,MAAA,CAAa,MAAA;AAAA,EACtB,OAAS,MAAA,CAAa,KAAA;AAAA;AAAA,EAEtB,OAAS,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA;AACtD;AAGO,IAAM,oBAAA,GAAuB;AAAA,EAClC,SAAS,oBAAA,EAAqB,GAAI,EAAE,QAAA,EAAU,CAAA,KAAM,aAAA,CAAc,OAAA;AAAA,EAClE,QAAQ,oBAAA,EAAqB,GAAI,EAAE,QAAA,EAAU,CAAA,KAAM,aAAA,CAAc,MAAA;AAAA,EACjE,OAAO,oBAAA,EAAqB,GAAI,EAAE,QAAA,EAAU,CAAA,KAAM,aAAA,CAAc,KAAA;AAAA,EAChE,QAAQ,oBAAA,EAAqB,GAAI,EAAE,QAAA,EAAU,CAAA,KAAM,aAAA,CAAc,MAAA;AAAA,EACjE,OAAO,oBAAA,EAAqB,GAAI,EAAE,QAAA,EAAU,CAAA,KAAM,aAAA,CAAc,KAAA;AAAA,EAChE,OAAO,oBAAA,EAAqB,GAAI,EAAE,QAAA,EAAU,CAAA,KAAM,aAAA,CAAc;AAClE;AAMO,IAAM,WAAA,GAAwB;AAAA,EACnC,IAAA,EAAM,EAAE,KAAA,EAAO,CAAA,EAAE;AAAA,EACjB,OAAA,EAAS,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,EACvB,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA;AAClB;AAEO,IAAM,SAAA,GAAY;AAAA,EACvB,KAAA,EAAO,IAAA;AAAA,EACP,YAAY,aAAA,CAAc;AAC5B;AAGO,IAAM,kBAAA,GAA+B;AAAA,EAC1C,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,EACnB,OAAA,EAAS,EAAE,OAAA,EAAS,GAAA,EAAI;AAAA,EACxB,KAAA,EAAO,EAAE,OAAA,EAAS,GAAA;AACpB;AAMO,IAAM,SAAA,GAAsB;AAAA,EACjC,IAAA,EAAM;AAAA,IACJ,CAAA,EAAG,CAAA;AAAA,IACH,SAAA,EAAW;AAAA,GACb;AAAA,EACA,KAAA,EAAO;AAAA,IACL,CAAA,EAAG,EAAA;AAAA,IACH,SAAA,EAAW;AAAA;AAEf;AAEO,IAAM,SAAA,GAAsB;AAAA,EACjC,IAAA,EAAM,EAAE,KAAA,EAAO,CAAA,EAAE;AAAA,EACjB,OAAA,EAAS,EAAE,KAAA,EAAO,IAAA;AACpB;AAGO,IAAM,gBAAA,GAA6B;AAAA,EACxC,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,EACnB,KAAA,EAAO,EAAE,OAAA,EAAS,IAAA;AACpB;AAMO,IAAM,OAAA,GAAoB;AAAA,EAC/B,MAAA,EAAQ,EAAE,CAAA,EAAG,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,EAChC,OAAA,EAAS,EAAE,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,EAC5B,IAAA,EAAM,EAAE,CAAA,EAAG,MAAA,EAAQ,SAAS,CAAA;AAC9B;AAEO,IAAM,UAAA,GAAuB;AAAA,EAClC,MAAA,EAAQ,EAAE,CAAA,EAAG,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,EAChC,OAAA,EAAS,EAAE,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,EAC5B,IAAA,EAAM,EAAE,CAAA,EAAG,MAAA,EAAQ,SAAS,CAAA;AAC9B;AAEO,IAAM,SAAA,GAAsB;AAAA,EACjC,MAAA,EAAQ,EAAE,CAAA,EAAG,OAAA,EAAS,SAAS,CAAA,EAAE;AAAA,EACjC,OAAA,EAAS,EAAE,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,EAC5B,IAAA,EAAM,EAAE,CAAA,EAAG,OAAA,EAAS,SAAS,CAAA;AAC/B;AAEO,IAAM,SAAA,GAAsB;AAAA,EACjC,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,IAAA,EAAK;AAAA,EAClC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,EAChC,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,IAAA;AAC7B;AAGO,IAAM,QAAA,GAAqB;AAAA,EAChC,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,EACrB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,EACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA;AACnB;AAMO,IAAM,kBAAA,GAA+B;AAAA,EAC1C,QAAQ,EAAE,CAAA,EAAG,MAAM,OAAA,EAAS,CAAA,EAAG,OAAO,GAAA,EAAI;AAAA,EAC1C,OAAA,EAAS;AAAA,IACP,CAAA,EAAG,CAAA;AAAA,IACH,OAAA,EAAS,CAAA;AAAA,IACT,KAAA,EAAO,CAAA;AAAA,IACP,YAAY,aAAA,CAAc;AAAA,GAC5B;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,CAAA,EAAG,IAAA;AAAA,IACH,OAAA,EAAS,CAAA;AAAA,IACT,KAAA,EAAO,GAAA;AAAA,IACP,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA;AAAI;AAEhC;AAGO,IAAM,yBAAA,GAAsC;AAAA,EACjD,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,EACrB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,YAAY,EAAE,QAAA,EAAU,MAAK,EAAE;AAAA,EACtD,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,YAAY,EAAE,QAAA,EAAU,KAAI;AAClD;AAMO,IAAM,QAAA,GAAqB;AAAA,EAChC,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,GAAA,EAAI;AAAA,EAC7B,OAAA,EAAS,CAAC,CAAA,MAAe;AAAA,IACvB,OAAA,EAAS,CAAA;AAAA,IACT,CAAA,EAAG,CAAA;AAAA,IACH,UAAA,EAAY;AAAA,MACV,OAAO,CAAA,GAAI,IAAA;AAAA,MACX,GAAG,aAAA,CAAc;AAAA;AACnB,GACF;AACF;AAEO,IAAM,gBAAA,GAA6B;AAAA,EACxC,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,EACrB,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,CAAA;AAAA,IACT,UAAA,EAAY;AAAA,MACV,eAAA,EAAiB;AAAA;AACnB;AAEJ;AAGO,IAAM,eAAA,GAA4B;AAAA,EACvC,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,EACrB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,YAAY,EAAE,QAAA,EAAU,MAAK;AACtD;AAMO,IAAM,oBAAA,GAAuB;AAE7B,IAAM,gBAAA,GAAmB;AAAA,EAC9B,IAAA,EAAM,IAAA;AAAA,EACN,KAAA,EAAO;AACT;AAMO,IAAM,cAAA,GAA2B;AAAA,EACtC,QAAA,EAAU,EAAE,KAAA,EAAO,CAAA,EAAG,iBAAiB,kBAAA,EAAmB;AAAA,EAC1D,MAAA,EAAQ,EAAE,KAAA,EAAO,EAAA,EAAI,iBAAiB,iBAAA;AACxC;AAMO,IAAM,SAAA,GAAY;AAAA;AAAA,EAEvB,IAAA,EAAM,SAAA;AAAA,EACN,KAAA,EAAO,SAAA;AAAA,EACP,GAAA,EAAK,SAAA;AAAA,EACL,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,MAAA,EAAQ,SAAA;AAAA,EACR,IAAA,EAAM,SAAA;AAAA,EACN,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,IAAA,EAAM,SAAA;AAAA,EACN,IAAA,EAAM,SAAA;AAAA,EACN,KAAA,EAAO,SAAA;AAAA;AAAA,EAGP,IAAA,EAAM,SAAA;AAAA,EACN,KAAA,EAAO,SAAA;AAAA,EACP,KAAA,EAAO,SAAA;AAAA,EACP,KAAA,EAAO,SAAA;AAAA,EACP,KAAA,EAAO,SAAA;AAAA,EACP,KAAA,EAAO,SAAA;AAAA;AAAA,EAGP,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO;AAAA;AAEX;AAUO,IAAM,SAAA,GAAY;AAAA,EACvB,OAAA,EAAU,CAAA;AAAA,EACV,IAAA,EAAU,SAAe,EAAA,GAAK,GAAA;AAAA,EAC9B,MAAA,EAAU,SAAe,EAAA,GAAK,GAAA;AAAA,EAC9B,IAAA,EAAU,SAAe,EAAA,GAAK,GAAA;AAAA,EAC9B,QAAA,EAAU;AACZ;AAGO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,OAAA,EAAS,CAAA;AAAA,EACT,IAAA,EAAM,oBAAA,EAAqB,GAAI,CAAA,GAAI,IAAA;AAAA,EACnC,MAAA,EAAQ,oBAAA,EAAqB,GAAI,CAAA,GAAI,IAAA;AAAA,EACrC,IAAA,EAAM,oBAAA,EAAqB,GAAI,CAAA,GAAI,IAAA;AAAA,EACnC,QAAA,EAAU,oBAAA,EAAqB,GAAI,CAAA,GAAI;AACzC;AAWO,IAAM,OAAA,GAAU;AAAA,EACrB,OAAA,EAAS,CAAC,IAAA,EAAM,GAAA,EAAK,MAAM,CAAC,CAAA;AAAA,EAC5B,KAAS,IAAA,CAAW,UAAA;AAAA,EACpB,IAAS,IAAA,CAAW,UAAA;AAAA,EACpB,OAAS,IAAA,CAAW,QAAA;AAAA,EACpB,KAAS,IAAA,CAAW;AACtB;AASO,SAAS,iBAAA,CACd,aAAA,EACA,YAAA,GAA2B,EAAC,EACzB;AACH,EAAA,IAAI,sBAAqB,EAAG;AAC1B,IAAA,OAAO,EAAE,GAAG,aAAA,EAAe,GAAG,cAAc,UAAA,EAAY,EAAE,QAAA,EAAU,CAAA,EAAE,EAAE;AAAA,EAC1E;AACA,EAAA,OAAO,aAAA;AACT;ACvVO,IAAM,IAAA,GAAO,UAAA,CAAW,SAASA,KAAAA,CACtC,OACA,GAAA,EACA;AACA,EAAA,MAAM,aAAa,OAAA,EAAQ;AAC3B,EAAA,uBACE,GAAA,CAAU,0BAAT,EACC,QAAA,kBAAA,GAAA,CAAC,cAAY,GAAG,KAAA,EAAO,KAA0C,CAAA,EACnE,CAAA;AAEJ,CAAC;;;ACVM,IAAMC,UAAAA,GAAY;AAAA;AAAA,EAEvB,gBAAA,EAAkB;AAAA,IAChB,0HAAA;AAAA,IACA,6EAAA;AAAA,IACA;AAAA,GACF;AAAA;AAAA,EAEA,eAAA,EAAiB;AAAA,IACf,oIAAA;AAAA,IACA,6EAAA;AAAA,IACA;AAAA,GACF;AAAA;AAAA,EAEA,iBAAA,EAAmB;AAAA,IACjB,sIAAA;AAAA,IACA,6EAAA;AAAA,IACA;AAAA,GACF;AAAA;AAAA,EAEA,UAAA,EAAY;AAAA,IACV,kGAAA;AAAA,IACA,qDAAA;AAAA,IACA;AAAA,GACF;AAAA;AAAA,EAEA,SAAA,EAAW;AAAA,IACT,kGAAA;AAAA,IACA,qDAAA;AAAA,IACA;AAAA,GACF;AAAA;AAAA,EAEA,WAAA,EAAa;AAAA,IACX,kGAAA;AAAA,IACA,qDAAA;AAAA,IACA;AAAA,GACF;AAAA;AAAA,EAEA,YAAA,EAAc;AAAA,IACZ,kGAAA;AAAA,IACA,qDAAA;AAAA,IACA;AAAA,GACF;AAAA;AAAA,EAEA,YAAA,EAAc;AAAA,IACZ,kGAAA;AAAA,IACA,qDAAA;AAAA,IACA;AAAA,GACF;AAAA;AAAA,EAEA,UAAA,EAAY;AAAA,IACV,kGAAA;AAAA,IACA,qDAAA;AAAA,IACA;AAAA,GACF;AAAA;AAAA;AAAA,EAGA,aAAA,EAAe;AAAA,IACb,kGAAA;AAAA,IACA,qDAAA;AAAA,IACA;AAAA,GACF;AAAA;AAAA;AAAA,EAGA,WAAA,EAAa;AAAA,IACX,kGAAA;AAAA,IACA,qDAAA;AAAA,IACA;AAAA;AAEJ,CAAA;AAGO,IAAM,UAAA,GAAa;AAAA,EACxB,EAAA,EAAI,8BAAA;AAAA,EACJ,EAAA,EAAI,gCAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA;AAAA,EACJ,EAAA,EAAI,gCAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAGO,IAAM,UAAA,GAAa,cAAA;AAEnB,IAAM,MAAA,GAAS;AAAA,EACpB,IAAA,EAAM;AAAA;AAAA,IAEJ,8GAAA;AAAA;AAAA,IAEA,0IAAA;AAAA;AAAA,IAEA,kHAAA;AAAA;AAAA,IAEA,0BAAA;AAAA;AAAA,IAEA;AAAA,GACF;AAAA,EACA,KAAA,EAAO;AAAA;AAAA,IAEL,sCAAA;AAAA;AAAA,IAEA,oBAAA;AAAA;AAAA,IAEA,8GAAA;AAAA;AAAA,IAEA,kBAAA;AAAA;AAAA,IAEA,oBAAA;AAAA;AAAA,IAEA,qBAAA;AAAA;AAAA,IAEA,qFAAA;AAAA;AAAA,IAEA,uDAAA;AAAA;AAAA,IAEA,sFAAA;AAAA;AAAA,IAEA,4CAAA;AAAA;AAAA,IAEA;AAAA,GACF;AAAA,EACA,OAAA,EAAS;AAAA;AAAA,IAEP,+CAAA;AAAA;AAAA,IAEA,uCAAA;AAAA;AAAA,IAEA;AAAA,GACF;AAAA,EACA,KAAA,EAAO;AAAA;AAAA,IAEL,qFAAA;AAAA;AAAA,IAEA,0EAAA;AAAA;AAAA,IAEA;AAAA,GACF;AAAA,EACA,QAAA,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOR,2CAAA;AAAA;AAAA,IAEA,oDAAA;AAAA;AAAA,IAEA;AAAA,GACF;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,WAAA,EAAa;AAAA,MACX,iIAAA;AAAA,MACA,uGAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,KAAA,EAAO;AAAA,MACL,+NAAA;AAAA,MACA,uGAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,iIAAA;AAAA,MACA,6FAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,iIAAA;AAAA,MACA,uFAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,KAAA,EAAO;AAAA,MACL,+NAAA;AAAA,MACA,oDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,iIAAA;AAAA,MACA,iDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,qIAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,oIAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,GAAA,EAAK;AAAA,MACH,+HAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,qIAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,KAAA,EAAO;AAAA,MACL,uIAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,0IAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,oIAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,KAAA,EAAO;AAAA,MACL,mIAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,uIAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,iIAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,GAAA,EAAK;AAAA,MACH,+HAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,iIAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,qIAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,qIAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,uIAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,iIAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,iIAAA;AAAA,MACA;AAAA;AACF;AAEJ,CAAA;AAGO,IAAM,QAAA,GAAW;AAAA,EACtB,EAAA,EAAI,WAAA;AAAA,EACJ,EAAA,EAAI,WAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEO,IAAM,YAAA,GAAe;AAAA,EAC1B,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEO,IAAM,YAAA,GAAe;AAAA,EAC1B,cAAA,EAAgB,wBAAA;AAAA,EAChB,aAAA,EAAe,uBAAA;AAAA,EACf,eAAA,EAAiB;AACnB,CAAA;AAKO,IAAM,SAAA,GAAY;AAAA,EACvB,UAAA,EACE,2WAAA;AAAA,EAKF,WAAA,EACE,2WAAA;AAAA,EAKF,SAAA,EACE,2WAAA;AAAA,EAKF,YAAA,EACE,8WAAA;AAAA,EAKF,YAAA,EACE;AAKJ,CAAA;AAGO,IAAM,eAAA,GAAkB;AAAA,EAC7B,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI,WAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEO,IAAM,SAAA,GAAY;AAAA,EACvB,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;ACnRO,IAAM,MAAA,GAASC,UAAAA,CAAW,SAASC,OAAAA,CACxC;AAAA,EACE,KAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,OAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,EACA;AAEA,EAAA,MAAM,UAAA,GAAa,cAAc,SAAA,GAAY,KAAA;AAG7C,EAAA,MAAM,UAAA,GAAa,cAAc,UAAA,IAAcF,UAAAA;AAC/C,EAAA,MAAM,WAAA,GAAc,UAAA,GAChBA,UAAAA,CAAU,UAAoC,CAAA,GAC9C,MAAA,CAAO,MAAA,CAAO,UAAwC,CAAA,IAAK,MAAA,CAAO,MAAA,CAAO,WAAW,CAAA;AAExF,EAAA,IAAI,OAAA,GAAU,IAAA;AAAA,IACZ,SAAA;AAAA,IACA,MAAA,CAAO,IAAA;AAAA,IACP,QAAA,GAAW,MAAA,CAAO,QAAA,GAAW,OAAA,GAAU,MAAA,CAAO,OAAA,GAAU,KAAA,GAAQ,MAAA,CAAO,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,WAAW,CAAA;AAAA,IAC7G,IAAA,IAAQ,UAAA;AAAA,IACR,IAAA,KAAS,IAAA,IAAQ,UAAA,CAAW,IAAI,CAAA;AAAA,IAChC,SAAA,IAAa,QAAA;AAAA,IACb,OAAA,IAAW;AAAA,GACb;AAEA,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,QAAA,EAAU;AACzB,MAAA,aAAA,CAAc,WAAA,GAAc,WAAW,OAAO,CAAA;AAAA,IAChD;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAa,QAAA,IAAY,OAAA;AAE/B,EAAA,MAAM,gCACJ,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAG,GAAAA,CAAC,eAAA,EAAA,EAAgB,IAAA,EAAK,MAAA,EACnB,qCACCA,GAAAA;AAAA,MAAC,MAAA,CAAO,IAAA;AAAA,MAAP;AAAA,QACC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,QAChC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,MAAA,EAAO;AAAA,QACrC,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,QAC7B,UAAA,EAAY,aAAA,CAAc,aAAA,CAAc,KAAK,CAAA;AAAA,QAC7C,SAAA,EAAU,0BAAA;AAAA,QAEV,QAAA,kBAAAA,GAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,MAAA,EAAO;AAAA;AAAA,KACnC,EAEJ,CAAA;AAAA,oBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,IAAA,CAAK,kCAAA,EAAoC,OAAA,IAAW,YAAY,CAAA,EAC9E,QAAA,EAAA,OAAA,IAAW,WAAA,GAAc,WAAA,GAAc,QAAA,EAC1C;AAAA,GAAA,EACF,CAAA;AAGF,EAAA,MAAM,SAAA,GAAY,KAAA;AAClB,EAAA,MAAM,WAAA,GAAc,KAAA;AAEpB,EAAA,MAAM,MAAA,GAAS,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA;AAErC,EAAA,OAAO,yBACLA,GAAAA;AAAA,IAAC,MAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,UAAU,CAAC,UAAA,GAAa,EAAE,KAAA,EAAO,MAAK,GAAI,MAAA;AAAA,MAC1C,UAAA,EAAY,aAAA,CAAc,aAAA,CAAc,KAAK,CAAA;AAAA,MAC7C,UAAA,EAAY,cAAA;AAAA,MACZ,SAAA,EAAW,IAAA,CAAK,aAAA,EAAe,SAAA,IAAa,QAAQ,CAAA;AAAA,MAEpD,QAAA,kBAAAA,GAAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACE,GAAG,SAAA;AAAA,UACJ,SAAA,EAAW,OAAA;AAAA,UACX,GAAA;AAAA,UAEA,QAAA,kBAAAA,GAAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,aAAA,EAAc;AAAA;AAAA;AAC9B;AAAA,sBAGFA,GAAAA;AAAA,IAAC,MAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,UAAU,CAAC,UAAA,GAAa,EAAE,KAAA,EAAO,MAAK,GAAI,MAAA;AAAA,MAC1C,UAAA,EAAY,aAAA,CAAc,aAAA,CAAc,KAAK,CAAA;AAAA,MAC7C,UAAA,EAAY,cAAA;AAAA,MACZ,SAAA,EAAW,IAAA,CAAK,aAAA,EAAe,SAAA,IAAa,QAAQ,CAAA;AAAA,MAEpD,QAAA,kBAAAA,GAAAA;AAAA,QAACC,QAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,QAAA,EAAU,UAAA;AAAA,UACV,SAAA,EAAW,IAAA,CAAK,OAAA,EAAS,gBAAgB,CAAA;AAAA,UACzC,GAAA;AAAA,UAEA,QAAA,kBAAAD,GAAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,aAAA,EAAc;AAAA;AAAA;AAC9B;AAAA,GACF;AAEJ,CAAC;AAKM,SAAS,WAAA,CAAY,EAAE,QAAA,EAAS,EAAkC;AACvE,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,0GAAA;AAAA,QACV,aAAA,EAAY;AAAA;AAAA,KACd;AAAA,IACC;AAAA,GAAA,EACH,CAAA;AAEJ;AAKA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAU,EAA2B;AAC7D,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,IAAA,CAAK,iDAAA,EAAmD,SAAS,CAAA;AAAA,MAC5E,KAAA,EAAM,4BAAA;AAAA,MACN,IAAA,EAAK,MAAA;AAAA,MACL,OAAA,EAAQ,WAAA;AAAA,MAER,QAAA,EAAA;AAAA,wBAAAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,YAAA;AAAA,YACV,EAAA,EAAG,IAAA;AAAA,YACH,EAAA,EAAG,IAAA;AAAA,YACH,CAAA,EAAE,IAAA;AAAA,YACF,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAY;AAAA;AAAA,SACd;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,YAAA;AAAA,YACV,IAAA,EAAK,cAAA;AAAA,YACL,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA;AAAA,GACF;AAEJ;AA2BO,SAAS,oBAAA,CAAqB;AAAA,EACnC,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAQ,UAAA;AAAA,EACR,IAAA,GAAO,IAAA;AAAA,EACP,QAAA,GAAW,cAAA;AAAA,EACX,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAa;AACX,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,MAAA,OAAA,IAAU;AAAA,IACZ;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA,CAAO,MAAA;AAAA,IAAP;AAAA,MACC,OAAA,EAAS,WAAA;AAAA,MACT,QAAA,EAAU,OAAA;AAAA,MACV,OAAA,EAAS,EAAE,KAAA,EAAO,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,MAChC,OAAA,EAAS,EAAE,KAAA,EAAO,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,MAChC,IAAA,EAAM,EAAE,KAAA,EAAO,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,MAC7B,UAAA,EAAY,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MAC1B,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,MACxB,UAAA,EAAY,aAAA,CAAc,aAAA,CAAc,MAAM,CAAA;AAAA,MAC9C,SAAA,EAAW,IAAA;AAAA,QACT,aAAa,QAAQ,CAAA;AAAA,QACrB,WAAW,wBAAA,GAA2B,IAAA,CAAK,QAAA,CAAS,IAAI,GAAG,cAAc,CAAA;AAAA,QACzE,UAAU,KAAK,CAAA;AAAA,QACf,wCAAA;AAAA,QACA,2BAAA;AAAA,QACA,sGAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA,IAAW,+BAAA;AAAA,QACX;AAAA,OACF;AAAA,MACA,YAAA,EAAY,KAAA;AAAA,MAEX,QAAA,EAAA;AAAA,QAAA,OAAA,mBACCA,GAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAW,aAAa,IAAI,CAAA,EAAG,CAAA,mBAE/CA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAW,YAAA,CAAa,IAAI,GAAI,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,QAE5C,YAAY,KAAA,oBACXA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAA2B,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA,GAErD;AAEJ;AAkBO,SAAS,UAAA,CAAW;AAAA,EACzB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAQ,UAAA;AAAA,EACR,IAAA,GAAO,IAAA;AAAA,EACP,OAAA,GAAU,OAAA;AAAA,EACV,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,UAAA,GAAa,cAAc,SAAA,GAAY,KAAA;AAC7C,EAAA,MAAM,aAAa,UAAA,IAAcH,UAAAA;AAEjC,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,OAAA,EAAS;AACzB,MAAA,aAAA,CAAc,WAAA,GAAc,WAAW,OAAO,CAAA;AAC9C,MAAA,OAAA,IAAU;AAAA,IACZ;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,KAAA,EAAO,IAAA;AAAA,MACL,YAAA;AAAA,MACA,UAAA,IAAc,eAAe,UAAA,IAAc,gCAAA;AAAA,MAC3C,UAAA,IAAc,eAAe,SAAA,IAAa,gCAAA;AAAA,MAC1C,UAAA,IAAc,eAAe,WAAA,IAAe,gCAAA;AAAA,MAC5C,UAAA,IAAc,eAAe,YAAA,IAAgB,gCAAA;AAAA,MAC7C,UAAA,IAAc,eAAe,YAAA,IAAgB;AAAA,KAC/C;AAAA,IACA,KAAA,EAAO,IAAA;AAAA,MACL,6DAAA;AAAA,MACA,UAAA,IAAc,eAAe,UAAA,IAAc,oCAAA;AAAA,MAC3C,UAAA,IAAc,eAAe,SAAA,IAAa,oCAAA;AAAA,MAC1C,UAAA,IAAc,eAAe,WAAA,IAAe,oCAAA;AAAA,MAC5C,UAAA,IAAc,eAAe,YAAA,IAAgB,oCAAA;AAAA,MAC7C,UAAA,IAAc,eAAe,YAAA,IAAgB,oCAAA;AAAA,MAC7C,UAAA,IAAc,eAAe,UAAA,IAAc,+EAAA;AAAA,MAC3C,UAAA,IAAc,eAAe,aAAA,IAAiB,2FAAA;AAAA,MAC9C,UAAA,IAAc,eAAe,WAAA,IAAe,mFAAA;AAAA,MAC5C,CAAC,UAAA,IAAc;AAAA,KACjB;AAAA,IACA,OAAA,EAAS,IAAA;AAAA,MACP,uBAAA;AAAA,MACA,UAAA,IAAc,eAAe,UAAA,IAAc,2EAAA;AAAA,MAC3C,UAAA,IAAc,eAAe,SAAA,IAAa,2EAAA;AAAA,MAC1C,UAAA,IAAc,eAAe,WAAA,IAAe,2EAAA;AAAA,MAC5C,UAAA,IAAc,eAAe,YAAA,IAAgB,2EAAA;AAAA,MAC7C,UAAA,IAAc,eAAe,YAAA,IAAgB;AAAA;AAC/C,GACF;AAEA,EAAA,uBACEG,GAAAA;AAAA,IAAC,MAAA,CAAO,MAAA;AAAA,IAAP;AAAA,MACC,OAAA,EAAS,WAAA;AAAA,MACT,UAAU,QAAA,IAAY,OAAA;AAAA,MACtB,QAAA,EAAU,EAAE,KAAA,EAAO,GAAA,EAAI;AAAA,MACvB,UAAA,EAAY,aAAA,CAAc,aAAA,CAAc,KAAK,CAAA;AAAA,MAC7C,SAAA,EAAW,IAAA;AAAA,QACT,gBAAgB,IAAI,CAAA;AAAA,QACpB,+CAAA;AAAA,QACA,sGAAA;AAAA,QACA,mBAAA;AAAA,QACA,cAAc,OAAO,CAAA;AAAA,QAAA,CACpB,YAAY,OAAA,KAAY,+BAAA;AAAA,QACzB;AAAA,OACF;AAAA,MACA,YAAA,EAAY,KAAA;AAAA,MAEX,oCACCA,GAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAW,UAAU,IAAI,CAAA,EAAG,CAAA,mBAE5CA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAW,SAAA,CAAU,IAAI,GAAI,QAAA,EAAA,IAAA,EAAK;AAAA;AAAA,GAE5C;AAEJ;AC5VA,IAAM,MAAA,GAAS;AAAA,EACb,GAAA,EAAK,oIAAA;AAAA,EACL,MAAA,EACE,sJAAA;AAAA,EACF,KAAA,EACE,gJAAA;AAAA,EACF,MAAA,EACE,sJAAA;AAAA,EACF,IAAA,EAAM,0IAAA;AAAA,EACN,KAAA,EACE,gJAAA;AAAA,EACF,OAAA,EACE,4JAAA;AAAA,EACF,IAAA,EAAM,0IAAA;AAAA,EACN,IAAA,EAAM,0IAAA;AAAA,EACN,GAAA,EAAK,oIAAA;AAAA,EACL,IAAA,EAAM,sHAAA;AAAA,EACN,MAAA,EACE,gIAAA;AAAA,EACF,MAAA,EACE,gIAAA;AAAA,EACF,MAAA,EACE,gIAAA;AAAA,EACF,OAAA,EACE,4JAAA;AAAA,EACF,IAAA,EAAM,0IAAA;AAAA,EACN,IAAA,EAAM,0IAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AAOA,IAAM,KAAA,GAAgF;AAAA,EACpF,IAAI,EAAE,SAAA,EAAW,iCAAqC,IAAA,EAAM,SAAA,EAAe,QAAQ,iBAAA,EAAkB;AAAA,EACrG,IAAI,EAAE,SAAA,EAAW,iCAAqC,IAAA,EAAM,aAAA,EAAe,QAAQ,mBAAA,EAAoB;AAAA,EACvG,IAAI,EAAE,SAAA,EAAW,6BAAqC,IAAA,EAAM,SAAA,EAAe,QAAQ,eAAA,EAAgB;AAAA,EACnG,IAAI,EAAE,SAAA,EAAW,+BAAqC,IAAA,EAAM,SAAA,EAAe,QAAQ,eAAA;AACrF,CAAA;AA+BA,IAAM,aAAA,GAAqC;AAAA,EACzC,cAAA,EAAgB,0BAAA;AAAA,EAChB,oBAAA,EAAsB,0BAAA;AAAA,EACtB,SAAA,EACE;AACJ,CAAA;AAIO,SAAS,KAAA,CAAM;AAAA,EACpB,KAAA,GAAQ,MAAA;AAAA,EACR,IAAA,GAAO,IAAA;AAAA,EACP,IAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd,OAAA;AAAA,EACA,IAAA,GAAO,KAAA;AAAA,EACP,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAmB;AACjB,EAAA,MAAM,EAAA,GAAK,MAAM,IAAI,CAAA;AACrB,EAAA,MAAM,IAAA,GAAOE,IAAAA;AAAA,IACX,kFAAA;AAAA,IACA,mBAAA;AAAA;AAAA,IACA,EAAA,CAAG,SAAA;AAAA,IACH,OAAO,KAAK,CAAA;AAAA,IACZ;AAAA,GACF;AACA,EAAA,MAAM,SAAA,GAAY,OAAQ,EAAE,IAAA,EAAM,UAAU,WAAA,EAAa,QAAA,KAAuB,EAAC;AAGjF,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBACEC,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,aAAA,EAAY,OAAA;AAAA,QACZ,OAAA;AAAA,QACA,KAAA,EAAO,aAAA;AAAA,QACN,GAAG,SAAA;AAAA,QACJ,SAAA,EAAWD,IAAAA;AAAA,UACT,IAAA;AAAA,UACA,kCAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,IAAA,oBAAQF,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAWE,IAAAA,CAAK,UAAA,EAAY,EAAA,CAAG,IAAI,CAAA,EAAG,aAAA,EAAW,IAAA,EAAE,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,UACtE;AAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AAGA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEC,IAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAY,OAAA;AAAA,QACX,GAAG,KAAA;AAAA,QACH,GAAG,SAAA;AAAA,QACJ,KAAA,EAAO,aAAA;AAAA,QACP,SAAA,EAAWD,IAAAA,CAAK,IAAA,EAAM,MAAM,CAAA;AAAA,QAE3B,QAAA,EAAA;AAAA,UAAA,IAAA,oBAAQF,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAWE,IAAAA,CAAK,UAAA,EAAY,EAAA,CAAG,IAAI,CAAA,EAAG,aAAA,EAAW,IAAA,EAAE,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,UACtE,QAAA;AAAA,0BACDF,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,YAAA,EAAY,WAAA;AAAA,cACZ,OAAA,EAAS,CAAC,KAAA,KAAyC;AACjD,gBAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,gBAAA,QAAA,IAAW;AAAA,cACb,CAAA;AAAA,cACA,SAAA,EAAWE,IAAAA;AAAA,gBACT,qFAAA;AAAA,gBACA,iDAAA;AAAA,gBACA;AAAA,eACF;AAAA,cAEA,QAAA,kBAAAF,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAW,GAAG,MAAA,EAAQ;AAAA;AAAA;AACnC;AAAA;AAAA,KACF;AAAA,EAEJ;AAGA,EAAA,uBACEG,IAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,OAAA,EAAS,GAAG,KAAA,EAAQ,GAAG,SAAA,EAAW,KAAA,EAAO,aAAA,EAAe,SAAA,EAAW,IAAA,EAClF,QAAA,EAAA;AAAA,IAAA,IAAA,oBAAQH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAWE,IAAAA,CAAK,UAAA,EAAY,EAAA,CAAG,IAAI,CAAA,EAAG,aAAA,EAAW,IAAA,EAAE,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,IACtE;AAAA,GAAA,EACH,CAAA;AAEJ;AAQ2BJ,UAAAA,CAAW,SAASM,YAAAA,CAC7C;AAAA,EACE,KAAA,GAAQ,MAAA;AAAA,EACR,IAAA,GAAO,IAAA;AAAA,EACP,IAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAIA,GAAA,EACA;AACA,EAAA,IAAI,OAAA,GAAUF,IAAAA;AAAA,IACZ,SAAA;AAAA,IACA,yCAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,EAAU;AAClC,IAAA,uBACEF,GAAAA,CAAC,IAAA,EAAA,EAAM,GAAI,KAAA,EAAuD,SAAA,EAAW,SAAS,GAAA,EACpF,QAAA,kBAAAA,IAAC,WAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAM,KAAA,EAAc,MAAY,IAAA,EAAa,QAAA,EAAS,GACzD,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,IAAUK,QAAA,CAAA,MAAA,EAAT,EAAiB,GAAI,KAAA,EAAgC,SAAA,EAAW,SAAS,GAAA,EACxE,QAAA,kBAAAL,IAAC,WAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAM,KAAA,EAAc,MAAY,IAAA,EAAa,QAAA,EAAS,GACzD,CAAA,EACF,CAAA;AAEJ,CAAC","file":"chunk-2SBVFLPZ.mjs","sourcesContent":["/**\n * Motion tokens — the canonical source for animation timing in the\n * design system. Every component that animates anything reads from\n * here: there are no hard-coded durations or spring stiffness/damping\n * pairs anywhere else in the package.\n *\n * The tokens come in three layers:\n * 1. `duration` (ms) — for CSS transitions + framer-motion `duration`\n * 2. `ease` (cubic-bezier arrays) — for keyframe easing\n * 3. `spring` (typed framer-motion Transition objects) — for spring physics\n *\n * Naming is intent-based, not numeric:\n * - duration: xs / sm / md / lg (micro-feedback → page enter)\n * - ease: standard / emphasized / decelerate / accelerate / ios\n * - spring: snap / smooth / bounce / gentle / sheet\n *\n * These mirror the CSS custom properties in `liquid-glass.css`\n * (`--duration-*`, `--ease-*`), so CSS consumers and JS consumers\n * stay in lockstep. The CSS layer also responds to\n * `prefers-reduced-motion`, collapsing durations to 0ms; the JS\n * helpers in `animations.ts` do the equivalent for spring tokens.\n *\n * If a component needs a duration the scale doesn't have, add a new\n * token here first — don't inline.\n */\n\nimport type { Transition } from 'framer-motion'\n\n// ════════════════════════════════════════════════════════════════════\n// Duration scale (milliseconds)\n// ════════════════════════════════════════════════════════════════════\n\nexport const duration = {\n /** 90ms — micro feedback: toggle thumb, hover tint, focus ring */\n xs: 90,\n /** 150ms — button press, popover open, chip toggle */\n sm: 150,\n /** 240ms — card hover, drawer slide, tab switch */\n md: 240,\n /** 360ms — page transitions, modal enter/exit */\n lg: 360,\n} as const\n\nexport type DurationToken = keyof typeof duration\n\n/** Same scale, expressed in seconds — for framer-motion's `duration` prop. */\nexport const durationSeconds = {\n xs: duration.xs / 1000,\n sm: duration.sm / 1000,\n md: duration.md / 1000,\n lg: duration.lg / 1000,\n} as const\n\n// ════════════════════════════════════════════════════════════════════\n// Easing curves (cubic-bezier arrays for framer-motion / CSS strings)\n// ════════════════════════════════════════════════════════════════════\n\nexport const ease = {\n /** Default product curve — symmetric, balanced */\n standard: [0.4, 0, 0.2, 1] as const,\n /** Entering elements — slow start, fast finish */\n emphasized: [0.2, 0, 0, 1] as const,\n /** Arrivals — fast in, slow settle */\n decelerate: [0, 0, 0.2, 1] as const,\n /** Departures — fast out, sharp end */\n accelerate: [0.4, 0, 1, 1] as const,\n /** iOS HIG-canonical curve — slightly slower decay than `standard` */\n ios: [0.25, 0.46, 0.45, 0.94] as const,\n} as const\n\nexport type EaseToken = keyof typeof ease\n\n/** CSS string form (`cubic-bezier(...)`). */\nexport const easeCss: Record<EaseToken, string> = {\n standard: `cubic-bezier(${ease.standard.join(', ')})`,\n emphasized: `cubic-bezier(${ease.emphasized.join(', ')})`,\n decelerate: `cubic-bezier(${ease.decelerate.join(', ')})`,\n accelerate: `cubic-bezier(${ease.accelerate.join(', ')})`,\n ios: `cubic-bezier(${ease.ios.join(', ')})`,\n}\n\n// ════════════════════════════════════════════════════════════════════\n// Spring presets (framer-motion Transition objects)\n// ════════════════════════════════════════════════════════════════════\n\nexport const spring = {\n /** Snap — fast, no overshoot. Buttons, micro-interactions. */\n snap: { type: 'spring', stiffness: 500, damping: 38 } as Transition,\n /** Smooth — balanced, no overshoot. Default for cards/transitions. */\n smooth: { type: 'spring', stiffness: 300, damping: 30 } as Transition,\n /** Bounce — playful overshoot. Icons, success confirmations. */\n bounce: { type: 'spring', stiffness: 400, damping: 22 } as Transition,\n /** Gentle — soft and slow. Modals, large surface entry. */\n gentle: { type: 'spring', stiffness: 200, damping: 22 } as Transition,\n /** Sheet — iOS sheet presentation (with mass). Drawers. */\n sheet: { type: 'spring', stiffness: 350, damping: 30, mass: 0.8 } as Transition,\n} as const\n\nexport type SpringToken = keyof typeof spring\n\n// ════════════════════════════════════════════════════════════════════\n// JSON-shape export\n// ════════════════════════════════════════════════════════════════════\n\n/** Full token tree as a single JSON-shape object — for design tool\n * syncs, doc tables, and Tailwind plugin consumption. */\nexport const motionTokens = {\n duration,\n durationSeconds,\n ease,\n easeCss,\n spring,\n} as const\n\nexport type MotionTokens = typeof motionTokens\n","/**\n * iOS-style animation presets for Framer Motion\n * Based on Apple Human Interface Guidelines\n * Includes reduced motion support for accessibility\n *\n * NOTE: New code should consume tokens from `./motion-tokens` directly\n * (`spring.snap`, `duration.md`, `ease.standard`). The exports in this\n * file are kept for back-compatibility — they re-export and adapt the\n * canonical token shape so existing call sites don't break.\n */\n\nimport type { Transition, Variants } from 'framer-motion'\nimport { spring as springTokens, duration as durationTokens, ease as easeTokens } from './motion-tokens'\n\n// Re-export canonical tokens so callers can do\n// `import { spring, duration } from '@datatechsolutions/ui'` directly.\nexport { duration, durationSeconds, ease, easeCss, spring, motionTokens } from './motion-tokens'\nexport type { DurationToken, EaseToken, SpringToken, MotionTokens } from './motion-tokens'\n\n// ============================================================================\n// Reduced Motion Detection\n// ============================================================================\n\n/**\n * Check if user prefers reduced motion\n * Use this to conditionally disable animations\n */\nexport function prefersReducedMotion(): boolean {\n if (typeof window === 'undefined') return false\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches\n}\n\n/**\n * Get a transition that respects reduced motion preference\n */\nexport function getTransition(transition: Transition): Transition {\n if (prefersReducedMotion()) {\n return { duration: 0 }\n }\n return transition\n}\n\n/**\n * Get variants that respect reduced motion preference\n */\nexport function getVariants(variants: Variants): Variants {\n if (prefersReducedMotion()) {\n // Return variants with instant transitions\n const reducedVariants: Variants = {}\n for (const key in variants) {\n reducedVariants[key] = {\n ...variants[key],\n transition: { duration: 0 },\n }\n }\n return reducedVariants\n }\n return variants\n}\n\n// ============================================================================\n// Spring Presets\n// ============================================================================\n\n/**\n * Legacy spring presets — kept for back-compat with existing call sites.\n * Maps onto the canonical `spring.*` tokens from motion-tokens.ts.\n * New code should import from `motion-tokens` directly.\n */\nexport const springPresets = {\n default: springTokens.smooth,\n bouncy: springTokens.bounce,\n stiff: springTokens.snap,\n gentle: springTokens.gentle,\n sheet: springTokens.sheet,\n /** Quick spring - very fast, good for micro-interactions */\n quick: { type: 'spring', stiffness: 600, damping: 40 } as Transition,\n}\n\n/** Spring presets with reduced motion fallback (instant) */\nexport const springPresetsReduced = {\n default: prefersReducedMotion() ? { duration: 0 } : springPresets.default,\n bouncy: prefersReducedMotion() ? { duration: 0 } : springPresets.bouncy,\n stiff: prefersReducedMotion() ? { duration: 0 } : springPresets.stiff,\n gentle: prefersReducedMotion() ? { duration: 0 } : springPresets.gentle,\n sheet: prefersReducedMotion() ? { duration: 0 } : springPresets.sheet,\n quick: prefersReducedMotion() ? { duration: 0 } : springPresets.quick,\n}\n\n// ============================================================================\n// Button Animations\n// ============================================================================\n\nexport const buttonPress: Variants = {\n idle: { scale: 1 },\n pressed: { scale: 0.97 },\n hover: { scale: 1.02 },\n}\n\nexport const buttonTap = {\n scale: 0.97,\n transition: springPresets.stiff,\n}\n\n/** Reduced motion version - no scale animation */\nexport const buttonPressReduced: Variants = {\n idle: { opacity: 1 },\n pressed: { opacity: 0.7 },\n hover: { opacity: 0.9 },\n}\n\n// ============================================================================\n// Card Animations\n// ============================================================================\n\nexport const cardHover: Variants = {\n idle: {\n y: 0,\n boxShadow: '0 4px 6px -1px rgb(0 0 0 / 0.1)'\n },\n hover: {\n y: -4,\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1)'\n },\n}\n\nexport const cardPress: Variants = {\n idle: { scale: 1 },\n pressed: { scale: 0.98 },\n}\n\n/** Reduced motion version - opacity only */\nexport const cardHoverReduced: Variants = {\n idle: { opacity: 1 },\n hover: { opacity: 0.95 },\n}\n\n// ============================================================================\n// Modal/Sheet Animations\n// ============================================================================\n\nexport const slideUp: Variants = {\n hidden: { y: '100%', opacity: 0 },\n visible: { y: 0, opacity: 1 },\n exit: { y: '100%', opacity: 0 },\n}\n\nexport const slideRight: Variants = {\n hidden: { x: '100%', opacity: 0 },\n visible: { x: 0, opacity: 1 },\n exit: { x: '100%', opacity: 0 },\n}\n\nexport const slideDown: Variants = {\n hidden: { y: '-100%', opacity: 0 },\n visible: { y: 0, opacity: 1 },\n exit: { y: '-100%', opacity: 0 },\n}\n\nexport const fadeScale: Variants = {\n hidden: { opacity: 0, scale: 0.95 },\n visible: { opacity: 1, scale: 1 },\n exit: { opacity: 0, scale: 0.95 },\n}\n\n/** Reduced motion - fade only, no movement */\nexport const fadeOnly: Variants = {\n hidden: { opacity: 0 },\n visible: { opacity: 1 },\n exit: { opacity: 0 },\n}\n\n// ============================================================================\n// Notification Animations\n// ============================================================================\n\nexport const notificationBanner: Variants = {\n hidden: { y: -100, opacity: 0, scale: 0.9 },\n visible: {\n y: 0,\n opacity: 1,\n scale: 1,\n transition: springPresets.bouncy,\n },\n exit: {\n y: -100,\n opacity: 0,\n scale: 0.9,\n transition: { duration: 0.2 },\n },\n}\n\n/** Reduced motion version */\nexport const notificationBannerReduced: Variants = {\n hidden: { opacity: 0 },\n visible: { opacity: 1, transition: { duration: 0.15 } },\n exit: { opacity: 0, transition: { duration: 0.1 } },\n}\n\n// ============================================================================\n// List Item Animations\n// ============================================================================\n\nexport const listItem: Variants = {\n hidden: { opacity: 0, x: -20 },\n visible: (i: number) => ({\n opacity: 1,\n x: 0,\n transition: {\n delay: i * 0.05,\n ...springPresets.default,\n },\n }),\n}\n\nexport const staggerContainer: Variants = {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: {\n staggerChildren: 0.05,\n },\n },\n}\n\n/** Reduced motion - no stagger, just fade */\nexport const listItemReduced: Variants = {\n hidden: { opacity: 0 },\n visible: { opacity: 1, transition: { duration: 0.15 } },\n}\n\n// ============================================================================\n// Swipe Actions\n// ============================================================================\n\nexport const swipeActionThreshold = 80 // pixels\n\nexport const swipeConstraints = {\n left: -120,\n right: 0,\n}\n\n// ============================================================================\n// Page Control (Pagination Dots)\n// ============================================================================\n\nexport const pageControlDot: Variants = {\n inactive: { width: 8, backgroundColor: 'rgb(156 163 175)' },\n active: { width: 24, backgroundColor: 'rgb(59 130 246)' },\n}\n\n// ============================================================================\n// iOS System Colors\n// ============================================================================\n\nexport const iosColors = {\n // Primary colors\n blue: '#007AFF',\n green: '#34C759',\n red: '#FF3B30',\n orange: '#FF9500',\n yellow: '#FFCC00',\n purple: '#AF52DE',\n pink: '#FF2D55',\n teal: '#5AC8FA',\n indigo: '#5856D6',\n mint: '#00C7BE',\n cyan: '#32ADE6',\n brown: '#A2845E',\n\n // Grays\n gray: '#8E8E93',\n gray2: '#AEAEB2',\n gray3: '#C7C7CC',\n gray4: '#D1D1D6',\n gray5: '#E5E5EA',\n gray6: '#F2F2F7',\n\n // Dark mode variants\n dark: {\n blue: '#0A84FF',\n green: '#30D158',\n red: '#FF453A',\n orange: '#FF9F0A',\n yellow: '#FFD60A',\n purple: '#BF5AF2',\n pink: '#FF375F',\n teal: '#64D2FF',\n indigo: '#5E5CE6',\n mint: '#66D4CF',\n cyan: '#5AC8FA',\n brown: '#AC8E68',\n },\n}\n\n// ============================================================================\n// Duration Presets\n// ============================================================================\n\n/**\n * Legacy duration presets (seconds — for framer-motion). Mapped onto\n * the canonical `duration.*` tokens (ms) divided by 1000.\n */\nexport const durations = {\n instant: 0,\n fast: durationTokens.sm / 1000,\n normal: durationTokens.md / 1000,\n slow: durationTokens.lg / 1000,\n verySlow: 0.5,\n}\n\n/** Duration presets with reduced motion fallback */\nexport const durationsReduced = {\n instant: 0,\n fast: prefersReducedMotion() ? 0 : 0.15,\n normal: prefersReducedMotion() ? 0 : 0.25,\n slow: prefersReducedMotion() ? 0 : 0.35,\n verySlow: prefersReducedMotion() ? 0 : 0.5,\n}\n\n// ============================================================================\n// Easing Presets\n// ============================================================================\n\n/**\n * Legacy easing presets — kept for back-compat. New code uses `ease.*`\n * from motion-tokens. `default` here is preserved as a historical curve;\n * the canonical equivalent is `ease.standard`.\n */\nexport const easings = {\n default: [0.25, 0.1, 0.25, 1],\n out: easeTokens.decelerate,\n in: easeTokens.accelerate,\n inOut: easeTokens.standard,\n ios: easeTokens.ios,\n}\n\n// ============================================================================\n// Utility: Create motion-safe animation props\n// ============================================================================\n\n/**\n * Creates animation props that respect reduced motion preference\n */\nexport function createMotionProps<T extends object>(\n animatedProps: T,\n reducedProps: Partial<T> = {}\n): T {\n if (prefersReducedMotion()) {\n return { ...animatedProps, ...reducedProps, transition: { duration: 0 } }\n }\n return animatedProps\n}\n","import * as Headless from '@headlessui/react'\nimport React, { forwardRef } from 'react'\nimport { useLink } from '@ui/lib/router-context'\n\nexport type LinkProps = {\n href: string\n children?: React.ReactNode\n} & Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>\n\nexport const Link = forwardRef(function Link(\n props: LinkProps,\n ref: React.ForwardedRef<HTMLAnchorElement>\n) {\n const RouterLink = useLink()\n return (\n <Headless.DataInteractive>\n <RouterLink {...props} ref={ref as React.Ref<HTMLAnchorElement>} />\n </Headless.DataInteractive>\n )\n})\n","/**\n * Button Styles Module\n * ====================\n *\n * Centralized style definitions for all button variants.\n * Extracted from button.tsx for better maintainability.\n */\n\n// iOS System Colors for buttons\nexport const iosColors = {\n // Glassy iOS blue — neutral glass at rest, fills blue on hover\n 'ios-glass-blue': [\n 'liquid-button-primary text-slate-900 [--btn-bg:transparent] [--btn-border:transparent] [--btn-hover-overlay:transparent]',\n 'dark:text-white dark:[--btn-bg:transparent] dark:[--btn-border:transparent]',\n '[--btn-icon:var(--color-slate-600)] dark:[--btn-icon:var(--color-white)]/70',\n ],\n // Glassy iOS red — neutral glass at rest, fills red on hover\n 'ios-glass-red': [\n 'liquid-button liquid-button-red text-slate-900 [--btn-bg:transparent] [--btn-border:transparent] [--btn-hover-overlay:transparent]',\n 'dark:text-white dark:[--btn-bg:transparent] dark:[--btn-border:transparent]',\n '[--btn-icon:var(--color-slate-600)] dark:[--btn-icon:var(--color-white)]/70',\n ],\n // Glassy iOS green — neutral glass at rest, fills green on hover\n 'ios-glass-green': [\n 'liquid-button liquid-button-green text-slate-900 [--btn-bg:transparent] [--btn-border:transparent] [--btn-hover-overlay:transparent]',\n 'dark:text-white dark:[--btn-bg:transparent] dark:[--btn-border:transparent]',\n '[--btn-icon:var(--color-slate-600)] dark:[--btn-icon:var(--color-white)]/70',\n ],\n // Primary iOS blue\n 'ios-blue': [\n 'text-white [--btn-bg:#007AFF] [--btn-border:#0066DD] [--btn-hover-overlay:var(--color-white)]/10',\n 'dark:[--btn-bg:#0A84FF] dark:[--btn-border:#007AFF]',\n '[--btn-icon:var(--color-white)]/80',\n ],\n // Destructive iOS red\n 'ios-red': [\n 'text-white [--btn-bg:#FF3B30] [--btn-border:#E6352B] [--btn-hover-overlay:var(--color-white)]/10',\n 'dark:[--btn-bg:#FF453A] dark:[--btn-border:#FF3B30]',\n '[--btn-icon:var(--color-white)]/80',\n ],\n // iOS green (success/confirm)\n 'ios-green': [\n 'text-white [--btn-bg:#34C759] [--btn-border:#2DB350] [--btn-hover-overlay:var(--color-white)]/10',\n 'dark:[--btn-bg:#30D158] dark:[--btn-border:#34C759]',\n '[--btn-icon:var(--color-white)]/80',\n ],\n // iOS orange (warning)\n 'ios-orange': [\n 'text-white [--btn-bg:#FF9500] [--btn-border:#E68600] [--btn-hover-overlay:var(--color-white)]/10',\n 'dark:[--btn-bg:#FF9F0A] dark:[--btn-border:#FF9500]',\n '[--btn-icon:var(--color-white)]/80',\n ],\n // iOS purple\n 'ios-purple': [\n 'text-white [--btn-bg:#AF52DE] [--btn-border:#9B48C7] [--btn-hover-overlay:var(--color-white)]/10',\n 'dark:[--btn-bg:#BF5AF2] dark:[--btn-border:#AF52DE]',\n '[--btn-icon:var(--color-white)]/80',\n ],\n // iOS teal\n 'ios-teal': [\n 'text-white [--btn-bg:#5AC8FA] [--btn-border:#4AB8E8] [--btn-hover-overlay:var(--color-white)]/10',\n 'dark:[--btn-bg:#64D2FF] dark:[--btn-border:#5AC8FA]',\n '[--btn-icon:var(--color-white)]/80',\n ],\n // iOS fuchsia (used by IconButton ghost for accent affordances —\n // see DraggableCommandBar, WorkflowListBar convert-to-subworkflow).\n 'ios-fuchsia': [\n 'text-white [--btn-bg:#FF2D55] [--btn-border:#E62950] [--btn-hover-overlay:var(--color-white)]/10',\n 'dark:[--btn-bg:#FF375F] dark:[--btn-border:#FF2D55]',\n '[--btn-icon:var(--color-white)]/80',\n ],\n // iOS amber (rare ghost-only accent for warnings / \"experimental\"\n // affordances in canvas chrome).\n 'ios-amber': [\n 'text-white [--btn-bg:#FFCC00] [--btn-border:#E6B800] [--btn-hover-overlay:var(--color-white)]/10',\n 'dark:[--btn-bg:#FFD60A] dark:[--btn-border:#FFCC00]',\n '[--btn-icon:var(--color-white)]/80',\n ],\n}\n\n// Size presets\nexport const sizeStyles = {\n xs: 'px-2 py-1 text-xs rounded-md',\n sm: 'px-3 py-1.5 text-sm rounded-lg',\n md: '', // Default size from base styles\n lg: 'px-5 py-3 text-base rounded-xl',\n xl: 'px-6 py-4 text-lg rounded-xl',\n}\n\n// Pill shape modifier\nexport const pillStyles = 'rounded-full'\n\nexport const styles = {\n base: [\n // Base\n 'relative isolate inline-flex items-center justify-center gap-x-2 rounded-lg border text-base/6 font-semibold',\n // Sizing\n 'px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(2.5)-1px)] sm:px-[calc(--spacing(3)-1px)] sm:py-[calc(--spacing(1.5)-1px)] sm:text-sm/6',\n // Focus\n 'focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500',\n // Disabled\n 'data-disabled:opacity-50',\n // Icon\n '*:data-[slot=icon]:-mx-0.5 *:data-[slot=icon]:my-0.5 *:data-[slot=icon]:size-5 *:data-[slot=icon]:shrink-0 *:data-[slot=icon]:self-center *:data-[slot=icon]:text-(--btn-icon) sm:*:data-[slot=icon]:my-1 sm:*:data-[slot=icon]:size-4 forced-colors:[--btn-icon:ButtonText] forced-colors:data-hover:[--btn-icon:ButtonText]',\n ],\n solid: [\n // Optical border, implemented as the button background to avoid corner artifacts\n 'border-transparent bg-(--btn-border)',\n // Dark mode: border is rendered on `after` so background is set to button background\n 'dark:bg-(--btn-bg)',\n // Button background, implemented as foreground layer to stack on top of pseudo-border layer\n 'before:absolute before:inset-0 before:-z-10 before:rounded-[calc(var(--radius-lg)-1px)] before:bg-(--btn-bg)',\n // Drop shadow, applied to the inset `before` layer so it blends with the border\n 'before:shadow-xs',\n // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo\n 'dark:before:hidden',\n // Dark mode: Subtle white outline is applied using a border\n 'dark:border-white/5',\n // Shim/overlay, inset to match button foreground and used for hover state + highlight shadow\n 'after:absolute after:inset-0 after:-z-10 after:rounded-[calc(var(--radius-lg)-1px)]',\n // Inner highlight shadow\n 'after:shadow-[inset_0_1px_--theme(--color-white/15%)]',\n // White overlay on hover\n 'data-active:after:bg-(--btn-hover-overlay) data-hover:after:bg-(--btn-hover-overlay)',\n // Dark mode: `after` layer expands to cover entire button\n 'dark:after:-inset-px dark:after:rounded-lg',\n // Disabled\n 'data-disabled:before:shadow-none data-disabled:after:shadow-none',\n ],\n outline: [\n // Liquid glass secondary button\n 'liquid-button text-slate-900 !border-white/55',\n // Dark mode\n 'dark:text-white dark:!border-white/18',\n // Icon\n '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',\n ],\n plain: [\n // Base\n 'border-transparent text-zinc-950 data-active:bg-zinc-950/5 data-hover:bg-zinc-950/5',\n // Dark mode\n 'dark:text-white dark:data-active:bg-white/10 dark:data-hover:bg-white/10',\n // Icon\n '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',\n ],\n gradient: [\n // Same crystal-illuminated mechanic as ios-glass-blue/red/green:\n // neutral glass at rest, fills with translucent indigo→purple\n // gradient on hover. The actual rest/hover styling — including\n // the text-color flip from slate-900 → white — lives in the\n // `.liquid-button-gradient` CSS class in liquid-glass.css so the\n // whole transition is keyed off `:hover` (works without JS).\n 'liquid-button-gradient border-transparent',\n // Disabled\n 'data-disabled:opacity-50 data-disabled:saturate-50',\n // Icon tint flips with text via inherit (currentColor)\n '[--btn-icon:currentColor]',\n ],\n colors: {\n 'dark/zinc': [\n 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',\n 'dark:text-white dark:[--btn-bg:var(--color-zinc-600)] dark:[--btn-hover-overlay:var(--color-white)]/5',\n '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',\n ],\n light: [\n 'text-zinc-950 [--btn-bg:white] [--btn-border:var(--color-zinc-950)]/10 [--btn-hover-overlay:var(--color-zinc-950)]/2.5 data-active:[--btn-border:var(--color-zinc-950)]/15 data-hover:[--btn-border:var(--color-zinc-950)]/15',\n 'dark:text-white dark:[--btn-hover-overlay:var(--color-white)]/5 dark:[--btn-bg:var(--color-zinc-800)]',\n '[--btn-icon:var(--color-zinc-500)] data-active:[--btn-icon:var(--color-zinc-700)] data-hover:[--btn-icon:var(--color-zinc-700)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',\n ],\n 'dark/white': [\n 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',\n 'dark:text-zinc-950 dark:[--btn-bg:white] dark:[--btn-hover-overlay:var(--color-zinc-950)]/5',\n '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)] dark:[--btn-icon:var(--color-zinc-500)] dark:data-active:[--btn-icon:var(--color-zinc-400)] dark:data-hover:[--btn-icon:var(--color-zinc-400)]',\n ],\n dark: [\n 'text-white [--btn-bg:var(--color-zinc-900)] [--btn-border:var(--color-zinc-950)]/90 [--btn-hover-overlay:var(--color-white)]/10',\n 'dark:[--btn-hover-overlay:var(--color-white)]/5 dark:[--btn-bg:var(--color-zinc-800)]',\n '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',\n ],\n white: [\n 'text-zinc-950 [--btn-bg:white] [--btn-border:var(--color-zinc-950)]/10 [--btn-hover-overlay:var(--color-zinc-950)]/2.5 data-active:[--btn-border:var(--color-zinc-950)]/15 data-hover:[--btn-border:var(--color-zinc-950)]/15',\n 'dark:[--btn-hover-overlay:var(--color-zinc-950)]/5',\n '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-500)] data-hover:[--btn-icon:var(--color-zinc-500)]',\n ],\n zinc: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-zinc-600)] [--btn-border:var(--color-zinc-700)]/90',\n 'dark:[--btn-hover-overlay:var(--color-white)]/5',\n '[--btn-icon:var(--color-zinc-400)] data-active:[--btn-icon:var(--color-zinc-300)] data-hover:[--btn-icon:var(--color-zinc-300)]',\n ],\n indigo: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-indigo-500)] [--btn-border:var(--color-indigo-600)]/90',\n '[--btn-icon:var(--color-indigo-300)] data-active:[--btn-icon:var(--color-indigo-200)] data-hover:[--btn-icon:var(--color-indigo-200)]',\n ],\n cyan: [\n 'text-cyan-950 [--btn-bg:var(--color-cyan-300)] [--btn-border:var(--color-cyan-400)]/80 [--btn-hover-overlay:var(--color-white)]/25',\n '[--btn-icon:var(--color-cyan-500)]',\n ],\n red: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-red-600)] [--btn-border:var(--color-red-700)]/90',\n '[--btn-icon:var(--color-red-300)] data-active:[--btn-icon:var(--color-red-200)] data-hover:[--btn-icon:var(--color-red-200)]',\n ],\n orange: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-orange-500)] [--btn-border:var(--color-orange-600)]/90',\n '[--btn-icon:var(--color-orange-300)] data-active:[--btn-icon:var(--color-orange-200)] data-hover:[--btn-icon:var(--color-orange-200)]',\n ],\n amber: [\n 'text-amber-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-amber-400)] [--btn-border:var(--color-amber-500)]/80',\n '[--btn-icon:var(--color-amber-600)]',\n ],\n yellow: [\n 'text-yellow-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-yellow-300)] [--btn-border:var(--color-yellow-400)]/80',\n '[--btn-icon:var(--color-yellow-600)] data-active:[--btn-icon:var(--color-yellow-700)] data-hover:[--btn-icon:var(--color-yellow-700)]',\n ],\n lime: [\n 'text-lime-950 [--btn-hover-overlay:var(--color-white)]/25 [--btn-bg:var(--color-lime-300)] [--btn-border:var(--color-lime-400)]/80',\n '[--btn-icon:var(--color-lime-600)] data-active:[--btn-icon:var(--color-lime-700)] data-hover:[--btn-icon:var(--color-lime-700)]',\n ],\n green: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-green-600)] [--btn-border:var(--color-green-700)]/90',\n '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',\n ],\n emerald: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-emerald-600)] [--btn-border:var(--color-emerald-700)]/90',\n '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',\n ],\n teal: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-teal-600)] [--btn-border:var(--color-teal-700)]/90',\n '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',\n ],\n sky: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-sky-500)] [--btn-border:var(--color-sky-600)]/80',\n '[--btn-icon:var(--color-white)]/60 data-active:[--btn-icon:var(--color-white)]/80 data-hover:[--btn-icon:var(--color-white)]/80',\n ],\n blue: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-blue-600)] [--btn-border:var(--color-blue-700)]/90',\n '[--btn-icon:var(--color-blue-400)] data-active:[--btn-icon:var(--color-blue-300)] data-hover:[--btn-icon:var(--color-blue-300)]',\n ],\n violet: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-violet-500)] [--btn-border:var(--color-violet-600)]/90',\n '[--btn-icon:var(--color-violet-300)] data-active:[--btn-icon:var(--color-violet-200)] data-hover:[--btn-icon:var(--color-violet-200)]',\n ],\n purple: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-purple-500)] [--btn-border:var(--color-purple-600)]/90',\n '[--btn-icon:var(--color-purple-300)] data-active:[--btn-icon:var(--color-purple-200)] data-hover:[--btn-icon:var(--color-purple-200)]',\n ],\n fuchsia: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-fuchsia-500)] [--btn-border:var(--color-fuchsia-600)]/90',\n '[--btn-icon:var(--color-fuchsia-300)] data-active:[--btn-icon:var(--color-fuchsia-200)] data-hover:[--btn-icon:var(--color-fuchsia-200)]',\n ],\n pink: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-pink-500)] [--btn-border:var(--color-pink-600)]/90',\n '[--btn-icon:var(--color-pink-300)] data-active:[--btn-icon:var(--color-pink-200)] data-hover:[--btn-icon:var(--color-pink-200)]',\n ],\n rose: [\n 'text-white [--btn-hover-overlay:var(--color-white)]/10 [--btn-bg:var(--color-rose-500)] [--btn-border:var(--color-rose-600)]/90',\n '[--btn-icon:var(--color-rose-300)] data-active:[--btn-icon:var(--color-rose-200)] data-hover:[--btn-icon:var(--color-rose-200)]',\n ],\n },\n}\n\n// FAB-specific styles\nexport const fabSizes = {\n sm: 'h-12 w-12',\n md: 'h-14 w-14',\n lg: 'h-16 w-16',\n}\n\nexport const fabIconSizes = {\n sm: 'h-5 w-5',\n md: 'h-6 w-6',\n lg: 'h-7 w-7',\n}\n\nexport const fabPositions = {\n 'bottom-right': 'fixed bottom-6 right-6',\n 'bottom-left': 'fixed bottom-6 left-6',\n 'bottom-center': 'fixed bottom-6 left-1/2 -translate-x-1/2',\n}\n\n// FAB colors as crystal-illuminated glass — translucent tint over the\n// surface, inner highlight on the top edge, tinted drop shadow.\n// Hover bumps opacity + glow. Matches the rest of the button family.\nexport const fabColors = {\n 'ios-blue':\n 'text-white bg-[#007AFF]/85 dark:bg-[#0A84FF]/80 backdrop-blur-xl ' +\n 'border border-white/30 dark:border-white/15 ' +\n 'shadow-[inset_0_1px_2px_rgba(255,255,255,0.5),0_12px_32px_-8px_rgba(0,122,255,0.5)] ' +\n 'hover:bg-[#007AFF] dark:hover:bg-[#0A84FF] ' +\n 'hover:shadow-[inset_0_1px_2px_rgba(255,255,255,0.55),0_16px_40px_-8px_rgba(0,122,255,0.65),0_0_24px_-4px_rgba(0,122,255,0.4)]',\n 'ios-green':\n 'text-white bg-[#34C759]/85 dark:bg-[#30D158]/80 backdrop-blur-xl ' +\n 'border border-white/30 dark:border-white/15 ' +\n 'shadow-[inset_0_1px_2px_rgba(255,255,255,0.5),0_12px_32px_-8px_rgba(52,199,89,0.5)] ' +\n 'hover:bg-[#34C759] dark:hover:bg-[#30D158] ' +\n 'hover:shadow-[inset_0_1px_2px_rgba(255,255,255,0.55),0_16px_40px_-8px_rgba(52,199,89,0.65),0_0_24px_-4px_rgba(52,199,89,0.4)]',\n 'ios-red':\n 'text-white bg-[#FF3B30]/85 dark:bg-[#FF453A]/80 backdrop-blur-xl ' +\n 'border border-white/30 dark:border-white/15 ' +\n 'shadow-[inset_0_1px_2px_rgba(255,255,255,0.5),0_12px_32px_-8px_rgba(255,59,48,0.5)] ' +\n 'hover:bg-[#FF3B30] dark:hover:bg-[#FF453A] ' +\n 'hover:shadow-[inset_0_1px_2px_rgba(255,255,255,0.55),0_16px_40px_-8px_rgba(255,59,48,0.65),0_0_24px_-4px_rgba(255,59,48,0.4)]',\n 'ios-purple':\n 'text-white bg-[#AF52DE]/85 dark:bg-[#BF5AF2]/80 backdrop-blur-xl ' +\n 'border border-white/30 dark:border-white/15 ' +\n 'shadow-[inset_0_1px_2px_rgba(255,255,255,0.5),0_12px_32px_-8px_rgba(175,82,222,0.5)] ' +\n 'hover:bg-[#AF52DE] dark:hover:bg-[#BF5AF2] ' +\n 'hover:shadow-[inset_0_1px_2px_rgba(255,255,255,0.55),0_16px_40px_-8px_rgba(175,82,222,0.65),0_0_24px_-4px_rgba(175,82,222,0.4)]',\n 'ios-orange':\n 'text-white bg-[#FF9500]/85 dark:bg-[#FF9F0A]/80 backdrop-blur-xl ' +\n 'border border-white/30 dark:border-white/15 ' +\n 'shadow-[inset_0_1px_2px_rgba(255,255,255,0.5),0_12px_32px_-8px_rgba(255,149,0,0.5)] ' +\n 'hover:bg-[#FF9500] dark:hover:bg-[#FF9F0A] ' +\n 'hover:shadow-[inset_0_1px_2px_rgba(255,255,255,0.55),0_16px_40px_-8px_rgba(255,149,0,0.65),0_0_24px_-4px_rgba(255,149,0,0.4)]',\n}\n\n// IconButton-specific styles\nexport const iconButtonSizes = {\n sm: 'h-8 w-8',\n md: 'h-10 w-10',\n lg: 'h-12 w-12',\n}\n\nexport const iconSizes = {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n}\n\n// Type exports\nexport type ColorType = keyof typeof styles.colors | keyof typeof iosColors\nexport type SizeType = keyof typeof sizeStyles\nexport type FABColorType = keyof typeof fabColors\nexport type FABPositionType = keyof typeof fabPositions\nexport type FABSizeType = keyof typeof fabSizes\nexport type IconButtonSizeType = keyof typeof iconButtonSizes\n","import { Button as HeadlessButton, type ButtonProps as HeadlessButtonProps } from '@headlessui/react'\nimport clsx from 'clsx'\nimport React, { forwardRef } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { Link } from '@ui/components/link'\nimport { triggerHaptic } from '@ui/hooks/use-haptic'\nimport { springPresets, getTransition } from '@ui/lib/animations'\nimport {\n iosColors,\n sizeStyles,\n pillStyles,\n styles,\n fabSizes,\n fabIconSizes,\n fabPositions,\n fabColors,\n iconButtonSizes,\n iconSizes,\n type ColorType,\n type SizeType,\n type FABColorType,\n type FABPositionType,\n type FABSizeType,\n type IconButtonSizeType,\n} from '@ui/components/button-styles'\n\ntype ButtonProps = (\n | { color?: ColorType; outline?: never; plain?: never; gradient?: never }\n | { color?: never; outline: true; plain?: never; gradient?: never }\n | { color?: never; outline?: never; plain: true; gradient?: never }\n | { color?: never; outline?: never; plain?: never; gradient: true }\n) & {\n className?: string\n children: React.ReactNode\n /** Make button pill-shaped (fully rounded) */\n pill?: boolean\n /** Button size */\n size?: SizeType\n /** Show loading spinner */\n loading?: boolean\n /** Loading text (optional) */\n loadingText?: string\n /** Full width button */\n fullWidth?: boolean\n /** Destructive action (uses iOS red) */\n destructive?: boolean\n} & (\n | ({ href?: never } & Omit<HeadlessButtonProps, 'as' | 'className'>)\n | ({ href: string } & Omit<React.ComponentPropsWithoutRef<typeof Link>, 'className'>)\n )\n\nexport const Button = forwardRef(function Button(\n {\n color,\n outline,\n plain,\n gradient,\n className,\n children,\n pill,\n size = 'md',\n loading,\n loadingText,\n fullWidth,\n destructive,\n disabled,\n ...props\n }: ButtonProps & { disabled?: boolean },\n ref: React.ForwardedRef<HTMLElement>\n) {\n // Determine final color - destructive overrides color\n const finalColor = destructive ? 'ios-red' : color\n\n // Check if using iOS color\n const isIosColor = finalColor && finalColor in iosColors\n const colorStyles = isIosColor\n ? iosColors[finalColor as keyof typeof iosColors]\n : styles.colors[finalColor as keyof typeof styles.colors] ?? styles.colors['dark/zinc']\n\n let classes = clsx(\n className,\n styles.base,\n gradient ? styles.gradient : outline ? styles.outline : plain ? styles.plain : clsx(styles.solid, colorStyles),\n pill && pillStyles,\n size !== 'md' && sizeStyles[size],\n fullWidth && 'w-full',\n loading && 'pointer-events-none'\n )\n\n const handleTapStart = () => {\n if (!loading && !disabled) {\n triggerHaptic(destructive ? 'medium' : 'light')\n }\n }\n\n const isDisabled = disabled || loading\n\n const buttonContent = (\n <>\n <AnimatePresence mode=\"wait\">\n {loading && (\n <motion.span\n initial={{ opacity: 0, width: 0 }}\n animate={{ opacity: 1, width: 'auto' }}\n exit={{ opacity: 0, width: 0 }}\n transition={getTransition(springPresets.stiff)}\n className=\"inline-flex items-center\"\n >\n <LoadingSpinner className=\"mr-2\" />\n </motion.span>\n )}\n </AnimatePresence>\n <span className={clsx('inline-flex items-center gap-x-2', loading && 'opacity-70')}>\n {loading && loadingText ? loadingText : children}\n </span>\n </>\n )\n\n const linkProps = props as Omit<React.ComponentPropsWithoutRef<typeof Link>, 'className'>\n const buttonProps = props as Omit<HeadlessButtonProps, 'className'>\n\n const isLink = typeof props.href === 'string'\n\n return isLink ? (\n <motion.div\n whileTap={!isDisabled ? { scale: 0.97 } : undefined}\n transition={getTransition(springPresets.stiff)}\n onTapStart={handleTapStart}\n className={clsx('inline-flex', fullWidth && 'w-full')}\n >\n <Link\n {...linkProps}\n className={classes}\n ref={ref as React.ForwardedRef<HTMLAnchorElement>}\n >\n <TouchTarget>{buttonContent}</TouchTarget>\n </Link>\n </motion.div>\n ) : (\n <motion.div\n whileTap={!isDisabled ? { scale: 0.97 } : undefined}\n transition={getTransition(springPresets.stiff)}\n onTapStart={handleTapStart}\n className={clsx('inline-flex', fullWidth && 'w-full')}\n >\n <HeadlessButton\n {...buttonProps}\n disabled={isDisabled}\n className={clsx(classes, 'cursor-default')}\n ref={ref}\n >\n <TouchTarget>{buttonContent}</TouchTarget>\n </HeadlessButton>\n </motion.div>\n )\n})\n\n/**\n * Expand the hit area to at least 44×44px on touch devices\n */\nexport function TouchTarget({ children }: { children: React.ReactNode }) {\n return (\n <>\n <span\n className=\"absolute top-1/2 left-1/2 size-[max(100%,2.75rem)] -translate-x-1/2 -translate-y-1/2 pointer-fine:hidden\"\n aria-hidden=\"true\"\n />\n {children}\n </>\n )\n}\n\n/**\n * Loading spinner for button loading state\n */\nfunction LoadingSpinner({ className }: { className?: string }) {\n return (\n <svg\n className={clsx('h-4 w-4 animate-spin motion-reduce:animate-none', className)}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )\n}\n\n/**\n * Floating Action Button (FAB) - iOS style\n * Fixed position button typically in bottom-right corner\n */\ntype FABProps = {\n /** Icon to display */\n icon: React.ReactNode\n /** Optional label (shows on hover/focus) */\n label?: string\n /** Button color */\n color?: FABColorType\n /** Size variant */\n size?: FABSizeType\n /** Position on screen */\n position?: FABPositionType\n /** Click handler */\n onClick?: () => void\n /** Show loading state */\n loading?: boolean\n /** Custom class */\n className?: string\n /** Extended FAB with label always visible */\n extended?: boolean\n}\n\nexport function FloatingActionButton({\n icon,\n label,\n color = 'ios-blue',\n size = 'md',\n position = 'bottom-right',\n onClick,\n loading,\n className,\n extended,\n}: FABProps) {\n const handleClick = () => {\n if (!loading) {\n triggerHaptic('medium')\n onClick?.()\n }\n }\n\n return (\n <motion.button\n onClick={handleClick}\n disabled={loading}\n initial={{ scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0, opacity: 0 }}\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n transition={getTransition(springPresets.bouncy)}\n className={clsx(\n fabPositions[position],\n extended ? 'px-5 h-14 rounded-full' : clsx(fabSizes[size], 'rounded-full'),\n fabColors[color],\n 'flex items-center justify-center gap-2',\n 'shadow-lg hover:shadow-xl',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-indigo-500/70',\n 'z-50',\n loading && 'opacity-70 cursor-not-allowed',\n className\n )}\n aria-label={label}\n >\n {loading ? (\n <LoadingSpinner className={fabIconSizes[size]} />\n ) : (\n <span className={fabIconSizes[size]}>{icon}</span>\n )}\n {extended && label && (\n <span className=\"font-semibold text-base\">{label}</span>\n )}\n </motion.button>\n )\n}\n\n/**\n * Icon Button - Compact button with just an icon\n */\ntype IconButtonProps = {\n icon: React.ReactNode\n label: string // Required for accessibility\n color?: ColorType\n size?: IconButtonSizeType\n variant?: 'solid' | 'ghost' | 'outline'\n onClick?: () => void\n disabled?: boolean\n loading?: boolean\n className?: string\n destructive?: boolean\n}\n\nexport function IconButton({\n icon,\n label,\n color = 'ios-blue',\n size = 'md',\n variant = 'ghost',\n onClick,\n disabled,\n loading,\n className,\n destructive,\n}: IconButtonProps) {\n const finalColor = destructive ? 'ios-red' : color\n const isIosColor = finalColor in iosColors\n\n const handleClick = () => {\n if (!disabled && !loading) {\n triggerHaptic(destructive ? 'medium' : 'light')\n onClick?.()\n }\n }\n\n const variantStyles = {\n solid: clsx(\n 'text-white',\n isIosColor && finalColor === 'ios-blue' && 'bg-[#007AFF] dark:bg-[#0A84FF]',\n isIosColor && finalColor === 'ios-red' && 'bg-[#FF3B30] dark:bg-[#FF453A]',\n isIosColor && finalColor === 'ios-green' && 'bg-[#34C759] dark:bg-[#30D158]',\n isIosColor && finalColor === 'ios-orange' && 'bg-[#FF9500] dark:bg-[#FF9F0A]',\n isIosColor && finalColor === 'ios-purple' && 'bg-[#AF52DE] dark:bg-[#BF5AF2]',\n ),\n ghost: clsx(\n 'bg-transparent hover:bg-white/40 dark:hover:bg-white/[0.08]',\n isIosColor && finalColor === 'ios-blue' && 'text-[#007AFF] dark:text-[#0A84FF]',\n isIosColor && finalColor === 'ios-red' && 'text-[#FF3B30] dark:text-[#FF453A]',\n isIosColor && finalColor === 'ios-green' && 'text-[#34C759] dark:text-[#30D158]',\n isIosColor && finalColor === 'ios-orange' && 'text-[#FF9500] dark:text-[#FF9F0A]',\n isIosColor && finalColor === 'ios-purple' && 'text-[#AF52DE] dark:text-[#BF5AF2]',\n isIosColor && finalColor === 'ios-teal' && 'text-teal-600 dark:text-teal-400 hover:text-teal-700 dark:hover:text-teal-300',\n isIosColor && finalColor === 'ios-fuchsia' && 'text-fuchsia-600 dark:text-fuchsia-400 hover:text-fuchsia-700 dark:hover:text-fuchsia-300',\n isIosColor && finalColor === 'ios-amber' && 'text-amber-600 dark:text-amber-400 hover:text-amber-700 dark:hover:text-amber-300',\n !isIosColor && 'text-slate-700 dark:text-slate-300',\n ),\n outline: clsx(\n 'bg-transparent border',\n isIosColor && finalColor === 'ios-blue' && 'border-[#007AFF] text-[#007AFF] dark:border-[#0A84FF] dark:text-[#0A84FF]',\n isIosColor && finalColor === 'ios-red' && 'border-[#FF3B30] text-[#FF3B30] dark:border-[#FF453A] dark:text-[#FF453A]',\n isIosColor && finalColor === 'ios-green' && 'border-[#34C759] text-[#34C759] dark:border-[#30D158] dark:text-[#30D158]',\n isIosColor && finalColor === 'ios-orange' && 'border-[#FF9500] text-[#FF9500] dark:border-[#FF9F0A] dark:text-[#FF9F0A]',\n isIosColor && finalColor === 'ios-purple' && 'border-[#AF52DE] text-[#AF52DE] dark:border-[#BF5AF2] dark:text-[#BF5AF2]',\n ),\n }\n\n return (\n <motion.button\n onClick={handleClick}\n disabled={disabled || loading}\n whileTap={{ scale: 0.9 }}\n transition={getTransition(springPresets.stiff)}\n className={clsx(\n iconButtonSizes[size],\n 'rounded-full flex items-center justify-center',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-indigo-500/70',\n 'transition-colors',\n variantStyles[variant],\n (disabled || loading) && 'opacity-50 cursor-not-allowed',\n className\n )}\n aria-label={label}\n >\n {loading ? (\n <LoadingSpinner className={iconSizes[size]} />\n ) : (\n <span className={iconSizes[size]}>{icon}</span>\n )}\n </motion.button>\n )\n}\n","import * as Headless from '@headlessui/react'\nimport clsx from 'clsx'\nimport React, { forwardRef, type ReactNode, type MouseEvent } from 'react'\nimport { XMarkIcon } from '@heroicons/react/20/solid'\nimport { TouchTarget } from '@ui/components/button'\nimport { Link } from '@ui/components/link'\n\n/**\n * Badge — the single primitive for \"small colored label / chip /\n * tag / removable pill\" across the entire design system. Subsumes\n * the legacy `Pill`, `TagBadge`, `RoleBadge`, `FilterBadge`, and\n * `FilterPill` primitives. Use:\n *\n * - `<Badge color=\"indigo\">Premium</Badge>` — neutral metadata tag\n * - `<Badge color=\"amber\" icon={<X />}>3 alertas</Badge>` — with icon\n * - `<Badge color=\"indigo\" removable onRemove={fn}>SP</Badge>` — chip\n * - `<Badge color=\"indigo\" onClick={fn}>3 filtros</Badge>` — clickable\n *\n * For status-message pills (active/pending/failed/etc.) use\n * `<StatusBadge>` — it ships `role=\"status\"` + `aria-live` semantics\n * that Badge intentionally doesn't.\n */\n\nconst colors = {\n red: 'bg-red-500/15 text-red-700 group-data-hover:bg-red-500/25 dark:bg-red-500/10 dark:text-red-300 dark:group-data-hover:bg-red-500/20',\n orange:\n 'bg-orange-500/15 text-orange-700 group-data-hover:bg-orange-500/25 dark:bg-orange-500/10 dark:text-orange-300 dark:group-data-hover:bg-orange-500/20',\n amber:\n 'bg-amber-400/20 text-amber-800 group-data-hover:bg-amber-400/30 dark:bg-amber-400/10 dark:text-amber-300 dark:group-data-hover:bg-amber-400/15',\n yellow:\n 'bg-yellow-400/20 text-yellow-800 group-data-hover:bg-yellow-400/30 dark:bg-yellow-400/10 dark:text-yellow-200 dark:group-data-hover:bg-yellow-400/15',\n lime: 'bg-lime-400/20 text-lime-800 group-data-hover:bg-lime-400/30 dark:bg-lime-400/10 dark:text-lime-200 dark:group-data-hover:bg-lime-400/15',\n green:\n 'bg-green-500/15 text-green-700 group-data-hover:bg-green-500/25 dark:bg-green-500/10 dark:text-green-300 dark:group-data-hover:bg-green-500/20',\n emerald:\n 'bg-emerald-500/15 text-emerald-700 group-data-hover:bg-emerald-500/25 dark:bg-emerald-500/10 dark:text-emerald-300 dark:group-data-hover:bg-emerald-500/20',\n teal: 'bg-teal-500/15 text-teal-700 group-data-hover:bg-teal-500/25 dark:bg-teal-500/10 dark:text-teal-300 dark:group-data-hover:bg-teal-500/20',\n cyan: 'bg-cyan-400/20 text-cyan-800 group-data-hover:bg-cyan-400/30 dark:bg-cyan-400/10 dark:text-cyan-200 dark:group-data-hover:bg-cyan-400/15',\n sky: 'bg-sky-500/15 text-sky-700 group-data-hover:bg-sky-500/25 dark:bg-sky-500/10 dark:text-sky-300 dark:group-data-hover:bg-sky-500/20',\n blue: 'bg-blue-500/15 text-blue-700 group-data-hover:bg-blue-500/25 dark:text-blue-300 dark:group-data-hover:bg-blue-500/25',\n indigo:\n 'bg-indigo-500/15 text-indigo-700 group-data-hover:bg-indigo-500/25 dark:text-indigo-300 dark:group-data-hover:bg-indigo-500/20',\n violet:\n 'bg-violet-500/15 text-violet-700 group-data-hover:bg-violet-500/25 dark:text-violet-300 dark:group-data-hover:bg-violet-500/20',\n purple:\n 'bg-purple-500/15 text-purple-700 group-data-hover:bg-purple-500/25 dark:text-purple-300 dark:group-data-hover:bg-purple-500/20',\n fuchsia:\n 'bg-fuchsia-400/20 text-fuchsia-700 group-data-hover:bg-fuchsia-400/30 dark:bg-fuchsia-400/10 dark:text-fuchsia-300 dark:group-data-hover:bg-fuchsia-400/20',\n pink: 'bg-pink-400/20 text-pink-700 group-data-hover:bg-pink-400/30 dark:bg-pink-400/10 dark:text-pink-300 dark:group-data-hover:bg-pink-400/20',\n rose: 'bg-rose-400/20 text-rose-700 group-data-hover:bg-rose-400/30 dark:bg-rose-400/10 dark:text-rose-300 dark:group-data-hover:bg-rose-400/20',\n zinc: 'bg-slate-500/15 text-slate-700 group-data-hover:bg-slate-500/25 dark:bg-white/5 dark:text-slate-200 dark:group-data-hover:bg-white/10',\n}\n\nexport type BadgeColor = keyof typeof colors\nexport type BadgeSize = 'xs' | 'sm' | 'md' | 'lg'\n\n// Size scale. WCAG 1.4.4: `xs` stays at 11px (not 10) so badges\n// remain legible at zoom 200%.\nconst sizes: Record<BadgeSize, { container: string; icon: string; remove: string }> = {\n xs: { container: 'px-2 py-0.5 text-[11px] gap-1', icon: 'h-3 w-3', remove: 'h-3 w-3 -mr-0.5' },\n sm: { container: 'px-2.5 py-0.5 text-xs gap-1.5', icon: 'h-3.5 w-3.5', remove: 'h-3.5 w-3.5 -mr-1' },\n md: { container: 'px-3 py-1 text-sm gap-1.5', icon: 'h-4 w-4', remove: 'h-4 w-4 -mr-1' },\n lg: { container: 'px-3.5 py-1.5 text-sm gap-2', icon: 'h-4 w-4', remove: 'h-4 w-4 -mr-1' },\n}\n\ntype BaseBadgeProps = {\n color?: BadgeColor\n size?: BadgeSize\n /** Optional leading icon (rendered before the label). */\n icon?: ReactNode\n /** When true, a remove (×) button is rendered at the end and the\n * badge becomes a focusable button. */\n removable?: boolean\n /** Called when the remove (×) button is clicked. Required when\n * `removable` is true. */\n onRemove?: () => void\n /** Accessible label for the remove button (e.g. \"remove São Paulo\n * filter\"). Defaults to a generic \"Remove\". */\n removeLabel?: string\n /** When provided, the entire badge becomes clickable (button\n * semantics with the canonical focus ring). */\n onClick?: () => void\n /** When true, marks the badge as a live status message so screen\n * readers announce changes (`role=\"status\" aria-live=\"polite\"`).\n * Use for dynamic state (\"active\" → \"pending\"); leave off for\n * static metadata (tags, counts, roles). */\n live?: boolean\n}\n\n// Crystal chrome — same recipe as StatusBadge so both pills look\n// identical: backdrop-blur + saturate + inset white highlight at the\n// top edge + a subtle tinted drop shadow. Applied via inline style so\n// it survives any consumer-supplied className (would otherwise be\n// trumped by Tailwind cascade ordering issues).\nconst CRYSTAL_STYLE: React.CSSProperties = {\n backdropFilter: 'blur(12px) saturate(1.5)',\n WebkitBackdropFilter: 'blur(12px) saturate(1.5)',\n boxShadow:\n 'inset 0 1px 1.5px rgba(255,255,255,0.45), 0 1px 3px -1px rgba(15,23,42,0.12)',\n}\n\ntype SpanBadgeProps = BaseBadgeProps & Omit<React.ComponentPropsWithoutRef<'span'>, 'onClick'>\n\nexport function Badge({\n color = 'zinc',\n size = 'sm',\n icon,\n removable = false,\n onRemove,\n removeLabel = 'Remove',\n onClick,\n live = false,\n className,\n children,\n ...props\n}: SpanBadgeProps) {\n const sz = sizes[size]\n const base = clsx(\n 'inline-flex items-center rounded-full border font-semibold forced-colors:outline',\n 'border-current/20', // hair-line border in the badge's own hue\n sz.container,\n colors[color],\n className,\n )\n const liveProps = live ? ({ role: 'status', 'aria-live': 'polite' as const }) : {}\n\n // Clickable variant — becomes a real button with focus-visible ring.\n if (onClick) {\n return (\n <button /* no-raw-button-ok: Badge primitive — clickable / removable badge variant defines the chip control */\n type=\"button\"\n data-testid=\"badge\"\n onClick={onClick}\n style={CRYSTAL_STYLE}\n {...liveProps}\n className={clsx(\n base,\n 'cursor-pointer transition-colors',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70 focus-visible:ring-offset-1',\n )}\n >\n {icon && <span className={clsx('shrink-0', sz.icon)} aria-hidden>{icon}</span>}\n {children}\n </button>\n )\n }\n\n // Removable variant — span wrapper + inner × button.\n if (removable) {\n return (\n <span\n data-testid=\"badge\"\n {...props}\n {...liveProps}\n style={CRYSTAL_STYLE}\n className={clsx(base, 'pr-1')}\n >\n {icon && <span className={clsx('shrink-0', sz.icon)} aria-hidden>{icon}</span>}\n {children}\n <button /* no-raw-button-ok: Badge primitive — clickable / removable badge variant defines the chip control */\n type=\"button\"\n aria-label={removeLabel}\n onClick={(event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation()\n onRemove?.()\n }}\n className={clsx(\n 'ml-0.5 inline-flex shrink-0 cursor-pointer items-center justify-center rounded-full',\n 'opacity-70 hover:opacity-100 transition-opacity',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500/70',\n )}\n >\n <XMarkIcon className={sz.remove} />\n </button>\n </span>\n )\n }\n\n // Plain decorative badge.\n return (\n <span data-testid=\"badge\" {...props} {...liveProps} style={CRYSTAL_STYLE} className={base}>\n {icon && <span className={clsx('shrink-0', sz.icon)} aria-hidden>{icon}</span>}\n {children}\n </span>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────\n// BadgeButton — Link/Button-wrapping variant. Kept for callers that\n// need href-based badges (e.g. role pills that navigate to a settings\n// page). Internally uses <Badge> with the click handled by the wrapper.\n// ─────────────────────────────────────────────────────────────────────\n\nexport const BadgeButton = forwardRef(function BadgeButton(\n {\n color = 'zinc',\n size = 'sm',\n icon,\n className,\n children,\n ...props\n }: BaseBadgeProps & { className?: string; children: React.ReactNode } & (\n | ({ href?: never } & Omit<Headless.ButtonProps, 'as' | 'className'>)\n | ({ href: string } & Omit<React.ComponentPropsWithoutRef<typeof Link>, 'className'>)\n ),\n ref: React.ForwardedRef<HTMLAnchorElement | HTMLButtonElement>\n) {\n let classes = clsx(\n className,\n 'group relative inline-flex rounded-full',\n 'focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-indigo-500/70',\n )\n\n if (typeof props.href === 'string') {\n return (\n <Link {...(props as React.ComponentPropsWithoutRef<typeof Link>)} className={classes} ref={ref as React.ForwardedRef<HTMLAnchorElement>}>\n <TouchTarget>\n <Badge color={color} size={size} icon={icon}>{children}</Badge>\n </TouchTarget>\n </Link>\n )\n }\n\n return (\n <Headless.Button {...(props as Headless.ButtonProps)} className={classes} ref={ref as React.ForwardedRef<HTMLButtonElement>}>\n <TouchTarget>\n <Badge color={color} size={size} icon={icon}>{children}</Badge>\n </TouchTarget>\n </Headless.Button>\n )\n})\n"]}