@alfadocs/ui-kit-debug 1.90.0 → 1.90.2

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 (172) hide show
  1. package/dist/_chunks/address-autocomplete-DR4Xn23Z.js +519 -0
  2. package/dist/_chunks/address-autocomplete-DR4Xn23Z.js.map +1 -0
  3. package/dist/_chunks/{address-fields-CfnXK8RT.js → address-fields-qxQkGwPf.js} +5 -5
  4. package/dist/_chunks/{address-fields-CfnXK8RT.js.map → address-fields-qxQkGwPf.js.map} +1 -1
  5. package/dist/_chunks/{ai-permission-notice-CoW22jx1.js → ai-permission-notice-VNh3W57L.js} +2 -2
  6. package/dist/_chunks/{ai-permission-notice-CoW22jx1.js.map → ai-permission-notice-VNh3W57L.js.map} +1 -1
  7. package/dist/_chunks/{anamnesis-summary-rows-DUMERHK3.js → anamnesis-summary-rows-EKPfVCmh.js} +662 -654
  8. package/dist/_chunks/anamnesis-summary-rows-EKPfVCmh.js.map +1 -0
  9. package/dist/_chunks/autocomplete-BXMcNoa3.js +562 -0
  10. package/dist/_chunks/autocomplete-BXMcNoa3.js.map +1 -0
  11. package/dist/_chunks/{balance-badge-cell-C9-hyfxy.js → balance-badge-cell-D9VhFp0L.js} +3 -3
  12. package/dist/_chunks/{balance-badge-cell-C9-hyfxy.js.map → balance-badge-cell-D9VhFp0L.js.map} +1 -1
  13. package/dist/_chunks/{booking-C0FoW8Yx.js → booking-CcE_oviI.js} +1896 -1859
  14. package/dist/_chunks/booking-CcE_oviI.js.map +1 -0
  15. package/dist/_chunks/browser-D5CD3WOj.js +565 -0
  16. package/dist/_chunks/browser-D5CD3WOj.js.map +1 -0
  17. package/dist/_chunks/{calendar-appointment-editor-dialog-D8Wkbm8_.js → calendar-appointment-editor-dialog-CiAGAX2t.js} +7 -7
  18. package/dist/_chunks/{calendar-appointment-editor-dialog-D8Wkbm8_.js.map → calendar-appointment-editor-dialog-CiAGAX2t.js.map} +1 -1
  19. package/dist/_chunks/{checkbox-BjDv-r3o.js → checkbox-a7Sh-dXb.js} +32 -31
  20. package/dist/_chunks/checkbox-a7Sh-dXb.js.map +1 -0
  21. package/dist/_chunks/{checkbox-group-Cw2H5qaq.js → checkbox-group-eGdv9fZc.js} +2 -2
  22. package/dist/_chunks/{checkbox-group-Cw2H5qaq.js.map → checkbox-group-eGdv9fZc.js.map} +1 -1
  23. package/dist/_chunks/{city-input-CJVGswxp.js → city-input-CA59CjnV.js} +2 -2
  24. package/dist/_chunks/{city-input-CJVGswxp.js.map → city-input-CA59CjnV.js.map} +1 -1
  25. package/dist/_chunks/{combobox-CDPm_n0p.js → combobox-D-gpgEDy.js} +314 -294
  26. package/dist/_chunks/combobox-D-gpgEDy.js.map +1 -0
  27. package/dist/_chunks/{country-select-DQ8q7ypA.js → country-select-BfmX9y5i.js} +2 -2
  28. package/dist/_chunks/{country-select-DQ8q7ypA.js.map → country-select-BfmX9y5i.js.map} +1 -1
  29. package/dist/_chunks/{data-table-D7EGpqOn.js → data-table-CqQgoNsU.js} +553 -552
  30. package/dist/_chunks/data-table-CqQgoNsU.js.map +1 -0
  31. package/dist/_chunks/{face-scheme-BgJGFDTa.js → face-scheme-BKSE98bo.js} +2 -2
  32. package/dist/_chunks/{face-scheme-BgJGFDTa.js.map → face-scheme-BKSE98bo.js.map} +1 -1
  33. package/dist/_chunks/{file-manager-DQbWBTfk.js → file-manager-BnI1ZWZu.js} +2 -2
  34. package/dist/_chunks/{file-manager-DQbWBTfk.js.map → file-manager-BnI1ZWZu.js.map} +1 -1
  35. package/dist/_chunks/{header-settings-BVhjndtV.js → header-settings-BeA2fnol.js} +24 -23
  36. package/dist/_chunks/header-settings-BeA2fnol.js.map +1 -0
  37. package/dist/_chunks/{heatmap-BJB6V9yJ.js → heatmap-fCxwNz2o.js} +2 -2
  38. package/dist/_chunks/{heatmap-BJB6V9yJ.js.map → heatmap-fCxwNz2o.js.map} +1 -1
  39. package/dist/_chunks/index-CpVcVNBu.js +2326 -0
  40. package/dist/_chunks/index-CpVcVNBu.js.map +1 -0
  41. package/dist/_chunks/{index.es-Bpb8_NrX.js → index.es-Beo-XicE.js} +2 -2
  42. package/dist/_chunks/{index.es-Bpb8_NrX.js.map → index.es-Beo-XicE.js.map} +1 -1
  43. package/dist/_chunks/jspdf.es.min-BW7y6yhl.js +9674 -0
  44. package/dist/_chunks/jspdf.es.min-BW7y6yhl.js.map +1 -0
  45. package/dist/_chunks/{link-cell-renderer-C0ynDik7.js → link-cell-renderer-CnCgudvq.js} +3 -3
  46. package/dist/_chunks/{link-cell-renderer-C0ynDik7.js.map → link-cell-renderer-CnCgudvq.js.map} +1 -1
  47. package/dist/_chunks/{login-dev-card-DYwbL5sD.js → login-dev-card-BZBR58mu.js} +2 -2
  48. package/dist/_chunks/{login-dev-card-DYwbL5sD.js.map → login-dev-card-BZBR58mu.js.map} +1 -1
  49. package/dist/_chunks/{map-view-Bvi06RVh.js → map-view-UrNgxBy3.js} +260 -237
  50. package/dist/_chunks/map-view-UrNgxBy3.js.map +1 -0
  51. package/dist/_chunks/{index.modern-BeRXQVdc.js → maps-core-gate-DkNqGkm3.js} +360 -319
  52. package/dist/_chunks/maps-core-gate-DkNqGkm3.js.map +1 -0
  53. package/dist/_chunks/{marketplace-app-shell-x_abo_ye.js → marketplace-app-shell-CmZx0Oam.js} +2 -2
  54. package/dist/_chunks/{marketplace-app-shell-x_abo_ye.js.map → marketplace-app-shell-CmZx0Oam.js.map} +1 -1
  55. package/dist/_chunks/{notes-panel-CZO1qsD-.js → notes-panel-Dywo6R55.js} +2 -2
  56. package/dist/_chunks/{notes-panel-CZO1qsD-.js.map → notes-panel-Dywo6R55.js.map} +1 -1
  57. package/dist/_chunks/{patient-details-D0P5eog5.js → patient-details-BUr7Oemx.js} +2 -2
  58. package/dist/_chunks/{patient-details-D0P5eog5.js.map → patient-details-BUr7Oemx.js.map} +1 -1
  59. package/dist/_chunks/{patient-field-row-R73dZJY6.js → patient-field-row-bJk8Q_qr.js} +5 -5
  60. package/dist/_chunks/{patient-field-row-R73dZJY6.js.map → patient-field-row-bJk8Q_qr.js.map} +1 -1
  61. package/dist/_chunks/patient-search-Ca9j5cWb.js +1306 -0
  62. package/dist/_chunks/patient-search-Ca9j5cWb.js.map +1 -0
  63. package/dist/_chunks/{patient-summary-card-6U74-ivO.js → patient-summary-card-CCQZ8X37.js} +2 -2
  64. package/dist/_chunks/{patient-summary-card-6U74-ivO.js.map → patient-summary-card-CCQZ8X37.js.map} +1 -1
  65. package/dist/_chunks/{periodontal-diagnosis-B9YmmVmM.js → periodontal-diagnosis-DD3hrg9X.js} +2 -2
  66. package/dist/_chunks/{periodontal-diagnosis-B9YmmVmM.js.map → periodontal-diagnosis-DD3hrg9X.js.map} +1 -1
  67. package/dist/_chunks/{permission-matrix-BoQjENGV.js → permission-matrix-BJ6sg3Zp.js} +3 -3
  68. package/dist/_chunks/{permission-matrix-BoQjENGV.js.map → permission-matrix-BJ6sg3Zp.js.map} +1 -1
  69. package/dist/_chunks/{practice-results-B61krlwu.js → practice-results-DQuOfqej.js} +2 -2
  70. package/dist/_chunks/{practice-results-B61krlwu.js.map → practice-results-DQuOfqej.js.map} +1 -1
  71. package/dist/_chunks/{province-select-CPdTwEob.js → province-select-D64whw0m.js} +2 -2
  72. package/dist/_chunks/{province-select-CPdTwEob.js.map → province-select-D64whw0m.js.map} +1 -1
  73. package/dist/_chunks/{registration-form-DmP3YUfp.js → registration-form-CRm6DaB9.js} +2 -2
  74. package/dist/_chunks/{registration-form-DmP3YUfp.js.map → registration-form-CRm6DaB9.js.map} +1 -1
  75. package/dist/_chunks/{reviews-panel-UzQQLb-z.js → reviews-panel-B7InBORU.js} +42 -41
  76. package/dist/_chunks/reviews-panel-B7InBORU.js.map +1 -0
  77. package/dist/_chunks/{rich-text-editor-BZTyxQBd.js → rich-text-editor-BfEu57dk.js} +3 -3
  78. package/dist/_chunks/{rich-text-editor-BZTyxQBd.js.map → rich-text-editor-BfEu57dk.js.map} +1 -1
  79. package/dist/_chunks/{slot-grid-Bb13H9Rl.js → slot-grid-DrwynKeN.js} +91 -89
  80. package/dist/_chunks/{slot-grid-Bb13H9Rl.js.map → slot-grid-DrwynKeN.js.map} +1 -1
  81. package/dist/_chunks/{task-editor-BOETWbjU.js → task-editor-CI1SKUNc.js} +2 -2
  82. package/dist/_chunks/{task-editor-BOETWbjU.js.map → task-editor-CI1SKUNc.js.map} +1 -1
  83. package/dist/_chunks/{use-appointment-details-read-CWN-nJCZ.js → use-appointment-details-read-BytPq3Ux.js} +2 -2
  84. package/dist/_chunks/{use-appointment-details-read-CWN-nJCZ.js.map → use-appointment-details-read-BytPq3Ux.js.map} +1 -1
  85. package/dist/_chunks/{voice-control-panel-BziKE-KK.js → voice-control-panel-BP0otrID.js} +2 -2
  86. package/dist/_chunks/{voice-control-panel-BziKE-KK.js.map → voice-control-panel-BP0otrID.js.map} +1 -1
  87. package/dist/_chunks/{workflow-webhook-action-DulCpCRz.js → workflow-webhook-action-B_nBJ_ht.js} +2 -2
  88. package/dist/_chunks/{workflow-webhook-action-DulCpCRz.js.map → workflow-webhook-action-B_nBJ_ht.js.map} +1 -1
  89. package/dist/agent-catalog.json +2 -2
  90. package/dist/agent-i18n/en.json +1 -1
  91. package/dist/components/_shared/maps-core-gate.d.ts +18 -0
  92. package/dist/components/_shared/maps-core-gate.d.ts.map +1 -0
  93. package/dist/components/address-autocomplete/address-autocomplete.d.ts.map +1 -1
  94. package/dist/components/address-autocomplete/index.js +1 -1
  95. package/dist/components/address-fields/index.js +1 -1
  96. package/dist/components/ai-permission-notice/index.js +1 -1
  97. package/dist/components/appointment-details-panel/index.js +1 -1
  98. package/dist/components/autocomplete/autocomplete.agent.d.ts.map +1 -1
  99. package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
  100. package/dist/components/autocomplete/index.js +1 -1
  101. package/dist/components/booking/booking.d.ts.map +1 -1
  102. package/dist/components/booking/details-form.d.ts.map +1 -1
  103. package/dist/components/booking/index.js +1 -1
  104. package/dist/components/checkbox/checkbox.d.ts.map +1 -1
  105. package/dist/components/checkbox/index.js +1 -1
  106. package/dist/components/checkbox-group/index.js +1 -1
  107. package/dist/components/city-input/index.js +1 -1
  108. package/dist/components/combobox/combobox.d.ts.map +1 -1
  109. package/dist/components/combobox/index.js +1 -1
  110. package/dist/components/country-select/index.js +1 -1
  111. package/dist/components/data-table/index.js +2 -2
  112. package/dist/components/data-table/toolbar.d.ts.map +1 -1
  113. package/dist/components/data-table/xlsx-export.d.ts +13 -0
  114. package/dist/components/data-table/xlsx-export.d.ts.map +1 -0
  115. package/dist/components/face-scheme/index.js +1 -1
  116. package/dist/components/file-manager/index.js +1 -1
  117. package/dist/components/header-settings/header-settings.d.ts +2 -1
  118. package/dist/components/header-settings/header-settings.d.ts.map +1 -1
  119. package/dist/components/header-settings/index.js +1 -1
  120. package/dist/components/heatmap/index.js +1 -1
  121. package/dist/components/map-view/index.js +1 -1
  122. package/dist/components/map-view/map-view.d.ts.map +1 -1
  123. package/dist/components/notes-panel/index.js +1 -1
  124. package/dist/components/patient-details/index.js +1 -1
  125. package/dist/components/patient-search/index.js +1 -1
  126. package/dist/components/patient-search/patient-search.d.ts.map +1 -1
  127. package/dist/components/patient-summary-card/index.js +1 -1
  128. package/dist/components/patient-table/index.js +1 -1
  129. package/dist/components/periodontal-diagnosis/index.js +1 -1
  130. package/dist/components/permission-matrix/index.js +1 -1
  131. package/dist/components/practice-results/index.js +1 -1
  132. package/dist/components/province-select/index.js +1 -1
  133. package/dist/components/reviews-panel/index.js +1 -1
  134. package/dist/components/reviews-panel/reviews-panel.d.ts.map +1 -1
  135. package/dist/components/rich-text-editor/index.js +1 -1
  136. package/dist/components/slot-grid/index.js +1 -1
  137. package/dist/components/slot-grid/slot-grid.d.ts.map +1 -1
  138. package/dist/components/task-editor/index.js +1 -1
  139. package/dist/components/voice-control-panel/index.js +1 -1
  140. package/dist/host-compat.css +1 -10
  141. package/dist/index.js +37 -37
  142. package/dist/patterns/anamnesis/anamnesis-export-download.d.ts +1 -1
  143. package/dist/patterns/anamnesis/anamnesis-export-download.d.ts.map +1 -1
  144. package/dist/patterns/anamnesis/anamnesis-export.d.ts +3 -1
  145. package/dist/patterns/anamnesis/anamnesis-export.d.ts.map +1 -1
  146. package/dist/patterns/anamnesis/index.js +1 -1
  147. package/dist/patterns/calendar/index.js +1 -1
  148. package/dist/patterns/login-form/index.js +1 -1
  149. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  150. package/dist/patterns/registration-form/index.js +1 -1
  151. package/dist/patterns/workflow-webhook-action/index.js +1 -1
  152. package/dist/tokens.css +1 -1
  153. package/package.json +4 -8
  154. package/dist/_chunks/address-autocomplete-bPR2mNBt.js +0 -498
  155. package/dist/_chunks/address-autocomplete-bPR2mNBt.js.map +0 -1
  156. package/dist/_chunks/anamnesis-summary-rows-DUMERHK3.js.map +0 -1
  157. package/dist/_chunks/autocomplete-CnB1mHGc.js +0 -539
  158. package/dist/_chunks/autocomplete-CnB1mHGc.js.map +0 -1
  159. package/dist/_chunks/booking-C0FoW8Yx.js.map +0 -1
  160. package/dist/_chunks/checkbox-BjDv-r3o.js.map +0 -1
  161. package/dist/_chunks/combobox-CDPm_n0p.js.map +0 -1
  162. package/dist/_chunks/data-table-D7EGpqOn.js.map +0 -1
  163. package/dist/_chunks/exceljs.min-D2MHbJsF.js +0 -23046
  164. package/dist/_chunks/exceljs.min-D2MHbJsF.js.map +0 -1
  165. package/dist/_chunks/header-settings-BVhjndtV.js.map +0 -1
  166. package/dist/_chunks/index.modern-BeRXQVdc.js.map +0 -1
  167. package/dist/_chunks/jspdf.es.min-Cal6Nuw_.js +0 -10007
  168. package/dist/_chunks/jspdf.es.min-Cal6Nuw_.js.map +0 -1
  169. package/dist/_chunks/map-view-Bvi06RVh.js.map +0 -1
  170. package/dist/_chunks/patient-search-CCOUZABE.js +0 -1196
  171. package/dist/_chunks/patient-search-CCOUZABE.js.map +0 -1
  172. package/dist/_chunks/reviews-panel-UzQQLb-z.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { jsxs as S, jsx as s } from "react/jsx-runtime";
2
2
  import { createContext as T, useContext as _, forwardRef as M, useId as G, useRef as K, useMemo as V } from "react";
3
- import * as b from "@radix-ui/react-checkbox";
3
+ import * as g from "@radix-ui/react-checkbox";
4
4
  import { c as A } from "./index-D2ZczOXr.js";
5
5
  import { u as B } from "./use-controllable-state-BiY4xTzM.js";
6
6
  import { T as F } from "./tooltip-uEBdD1-5.js";
@@ -65,7 +65,7 @@ const D = {
65
65
  description: "Sourced from the id prop."
66
66
  }
67
67
  }
68
- }, g = [
68
+ }, b = [
69
69
  "ds:[stroke-dasharray:1] ds:[stroke-dashoffset:1]",
70
70
  "ds:animate-[checkbox-indicator-draw_var(--animation-duration)_ease-out_forwards]"
71
71
  ].join(" ");
@@ -82,7 +82,7 @@ function P({ className: t }) {
82
82
  "aria-hidden": "true",
83
83
  "data-slot": "checkbox-check-icon",
84
84
  className: t,
85
- children: /* @__PURE__ */ s("path", { pathLength: "1", d: "M5 12l5 5L20 7", className: g })
85
+ children: /* @__PURE__ */ s("path", { pathLength: "1", d: "M5 12l5 5L20 7", className: b })
86
86
  }
87
87
  );
88
88
  }
@@ -98,13 +98,14 @@ function E({ className: t }) {
98
98
  "aria-hidden": "true",
99
99
  "data-slot": "checkbox-indeterminate-icon",
100
100
  className: t,
101
- children: /* @__PURE__ */ s("path", { pathLength: "1", d: "M5 12h14", className: g })
101
+ children: /* @__PURE__ */ s("path", { pathLength: "1", d: "M5 12h14", className: b })
102
102
  }
103
103
  );
104
104
  }
105
105
  const J = A(
106
106
  [
107
107
  "ds:inline-flex ds:items-center ds:justify-center ds:shrink-0",
108
+ "ds:min-w-[var(--spacing-lg)] ds:min-h-[var(--spacing-lg)] ds:p-[var(--spacing-2xs)]",
108
109
  // The off-state edge is all that marks the box, so `--border` is
109
110
  // re-pointed at the 3:1 `--control-border` here. A host still on an
110
111
  // older token sheet lacks this class and keeps the soft edge.
@@ -125,9 +126,9 @@ const J = A(
125
126
  // label wraps, because the wrapper uses `items-start` so children
126
127
  // align to the top edge rather than the multi-line block's centre.
127
128
  size: {
128
- sm: "ds:size-3.5 ds:mt-[calc((var(--type-label-size)*var(--type-label-line-height)-0.875rem)/2)]",
129
- md: "ds:size-4 ds:mt-[calc((var(--type-label-size)*var(--type-label-line-height)-1rem)/2)]",
130
- lg: "ds:size-5 ds:mt-[calc((var(--type-label-size)*var(--type-label-line-height)-1.25rem)/2)]"
129
+ sm: "ds:size-3.5 ds:mt-[calc((var(--type-label-size)*var(--type-label-line-height)-var(--spacing-lg))/2)]",
130
+ md: "ds:size-4 ds:mt-[calc((var(--type-label-size)*var(--type-label-line-height)-var(--spacing-lg))/2)]",
131
+ lg: "ds:size-5 ds:mt-[calc((var(--type-label-size)*var(--type-label-line-height)-var(--spacing-lg))/2)]"
131
132
  }
132
133
  },
133
134
  defaultVariants: {
@@ -143,44 +144,44 @@ const J = A(
143
144
  disabled: x,
144
145
  disabledReason: m,
145
146
  name: C,
146
- value: o,
147
+ value: n,
147
148
  id: u,
148
149
  className: y,
149
150
  ...w
150
151
  }, z) => {
151
- const j = G(), k = u ?? j, e = q(), a = e !== null && o !== void 0, [N, i] = B({
152
+ const j = G(), p = u ?? j, e = q(), r = e !== null && n !== void 0, [N, i] = B({
152
153
  value: l,
153
154
  defaultValue: !1,
154
155
  onChange: v
155
- }), c = a ? e.value.has(o) : N ?? !1, I = a ? () => e.toggle(o) : (n) => {
156
- i(n);
157
- }, L = (e == null ? void 0 : e.name) ?? C, d = (e == null ? void 0 : e.disabled) || x, r = K(
156
+ }), c = r ? e.value.has(n) : N ?? !1, I = r ? () => e.toggle(n) : (o) => {
157
+ i(o);
158
+ }, L = (e == null ? void 0 : e.name) ?? C, d = (e == null ? void 0 : e.disabled) || x, a = K(
158
159
  c ?? !1
159
160
  );
160
- r.current = c ?? !1;
161
+ a.current = c ?? !1;
161
162
  const R = V(
162
163
  () => ({
163
- getChecked: () => r.current,
164
- setChecked: (n) => {
165
- if (a) {
166
- (r.current === !0 || r.current === "indeterminate") !== (n === !0 || n === "indeterminate") && e.toggle(o);
164
+ getChecked: () => a.current,
165
+ setChecked: (o) => {
166
+ if (r) {
167
+ (a.current === !0 || a.current === "indeterminate") !== (o === !0 || o === "indeterminate") && e.toggle(n);
167
168
  return;
168
169
  }
169
- i(n);
170
+ i(o);
170
171
  },
171
172
  toggle: () => {
172
- if (a) {
173
- e.toggle(o);
173
+ if (r) {
174
+ e.toggle(n);
174
175
  return;
175
176
  }
176
- const n = !(r.current === !0 || r.current === "indeterminate");
177
- i(n);
177
+ const o = !(a.current === !0 || a.current === "indeterminate");
178
+ i(o);
178
179
  }
179
180
  }),
180
- [a, e, o, i]
181
+ [r, e, n, i]
181
182
  );
182
183
  H(D, R, u);
183
- const p = [
184
+ const k = [
184
185
  "ds:text-primary-foreground",
185
186
  h === "sm" ? "ds:size-3" : h === "lg" ? "ds:size-4" : "ds:size-3.5"
186
187
  ].join(" "), O = [
@@ -191,26 +192,26 @@ const J = A(
191
192
  {
192
193
  "data-component": "checkbox",
193
194
  "data-component-id": u,
194
- "data-option-id": o,
195
+ "data-option-id": n,
195
196
  className: "ds:inline-flex ds:items-start ds:gap-[var(--spacing-sm)]",
196
197
  children: [
197
198
  /* @__PURE__ */ s(
198
- b.Root,
199
+ g.Root,
199
200
  {
200
201
  ref: z,
201
- id: k,
202
+ id: p,
202
203
  checked: c,
203
204
  onCheckedChange: I,
204
205
  disabled: d,
205
206
  "aria-disabled": d || void 0,
206
207
  name: L,
207
- value: o,
208
+ value: n,
208
209
  className: J({ size: h, className: y }),
209
210
  ...w,
210
- children: /* @__PURE__ */ s(b.Indicator, { children: c === "indeterminate" ? /* @__PURE__ */ s(E, { className: p }) : /* @__PURE__ */ s(P, { className: p }) })
211
+ children: /* @__PURE__ */ s(g.Indicator, { children: c === "indeterminate" ? /* @__PURE__ */ s(E, { className: k }) : /* @__PURE__ */ s(P, { className: k }) })
211
212
  }
212
213
  ),
213
- /* @__PURE__ */ s("label", { htmlFor: k, className: O, children: t })
214
+ /* @__PURE__ */ s("label", { htmlFor: p, className: O, children: t })
214
215
  ]
215
216
  }
216
217
  );
@@ -223,4 +224,4 @@ export {
223
224
  W as a,
224
225
  q as u
225
226
  };
226
- //# sourceMappingURL=checkbox-BjDv-r3o.js.map
227
+ //# sourceMappingURL=checkbox-a7Sh-dXb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox-a7Sh-dXb.js","sources":["../../src/components/checkbox/checkbox-group-context.ts","../../src/components/checkbox/checkbox.agent.ts","../../src/components/checkbox/checkbox.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport interface CheckboxGroupContextShape {\n name?: string;\n value: Set<string>;\n toggle: (itemValue: string) => void;\n disabled: boolean;\n}\n\nexport const CheckboxGroupContext =\n createContext<CheckboxGroupContextShape | null>(null);\n\nexport function useCheckboxGroup(): CheckboxGroupContextShape | null {\n return useContext(CheckboxGroupContext);\n}\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — Checkbox. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { CheckboxHandle } from './checkbox';\n\nexport const checkboxAgent: AgentAdapter<CheckboxHandle> = {\n id: 'checkbox',\n // A checkbox is a boolean toggle, not a one-of-N picker — `set_value`,\n // not `select_single` (which is reserved for choosing one item among many).\n capabilities: ['set_value'],\n state: {\n checked: {\n type: 'boolean | \"indeterminate\"',\n descriptionKey: 'ui.agent.checkbox.state.checked',\n description: 'Current checked state.',\n read: (handle) => handle.getChecked(),\n },\n },\n actions: {\n set_checked: {\n safety: 'write',\n argsType: '{ checked: boolean | \"indeterminate\" }',\n argsSchema: {\n type: 'object',\n properties: {\n checked: {\n oneOf: [{ type: 'boolean' }, { const: 'indeterminate' }],\n description:\n 'Target state: true, false, or the tri-state \"indeterminate\".',\n },\n },\n required: ['checked'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.checkbox.actions.setChecked',\n description: 'Set the checked state to a specific value.',\n examples: [{ args: { checked: true }, note: 'Tick the box.' }],\n invoke: (handle, args: { checked: boolean | 'indeterminate' }) => {\n handle.setChecked(args.checked);\n },\n },\n toggle: {\n safety: 'write',\n descriptionKey: 'ui.agent.checkbox.actions.toggle',\n description: 'Flip the checked state between checked and unchecked.',\n invoke: (handle) => {\n handle.toggle();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'checkbox',\n description: 'Marks the Checkbox wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useId,\n useMemo,\n useRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport * as RadixCheckbox from '@radix-ui/react-checkbox';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useCheckboxGroup } from './checkbox-group-context';\nimport { Tooltip } from '../tooltip';\nimport { useAgentRegistration } from '../../agent';\nimport { checkboxAgent } from './checkbox.agent';\n\n/** Agent-readiness curated handle for Checkbox. */\nexport interface CheckboxHandle {\n getChecked: () => boolean | 'indeterminate';\n setChecked: (checked: boolean | 'indeterminate') => void;\n toggle: () => void;\n}\n\nconst drawClasses = [\n 'ds:[stroke-dasharray:1] ds:[stroke-dashoffset:1]',\n 'ds:animate-[checkbox-indicator-draw_var(--animation-duration)_ease-out_forwards]',\n].join(' ');\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n data-slot=\"checkbox-check-icon\"\n className={className}\n >\n <path pathLength=\"1\" d=\"M5 12l5 5L20 7\" className={drawClasses} />\n </svg>\n );\n}\n\nfunction IndeterminateIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n aria-hidden=\"true\"\n data-slot=\"checkbox-indeterminate-icon\"\n className={className}\n >\n <path pathLength=\"1\" d=\"M5 12h14\" className={drawClasses} />\n </svg>\n );\n}\n\nconst checkboxVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center ds:shrink-0',\n 'ds:min-w-[var(--spacing-lg)] ds:min-h-[var(--spacing-lg)] ds:p-[var(--spacing-2xs)]',\n // The off-state edge is all that marks the box, so `--border` is\n // re-pointed at the 3:1 `--control-border` here. A host still on an\n // older token sheet lacks this class and keeps the soft edge.\n 'ds:[--border:var(--control-border)]',\n 'ds:border ds:border-border ds:rounded-[var(--radius-sm)] ds:bg-background',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n 'ds:data-[state=checked]:bg-primary ds:data-[state=checked]:border-primary',\n 'ds:data-[state=indeterminate]:bg-primary ds:data-[state=indeterminate]:border-primary',\n 'ds:relative ds:before:absolute ds:before:inset-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"]',\n ].join(' '),\n {\n variants: {\n // Per-size `mt` centers the box optically on the first line of the\n // label using the type-label line-box height — important when the\n // label wraps, because the wrapper uses `items-start` so children\n // align to the top edge rather than the multi-line block's centre.\n size: {\n sm: 'ds:size-3.5 ds:mt-[calc((var(--type-label-size)*var(--type-label-line-height)-var(--spacing-lg))/2)]',\n md: 'ds:size-4 ds:mt-[calc((var(--type-label-size)*var(--type-label-line-height)-var(--spacing-lg))/2)]',\n lg: 'ds:size-5 ds:mt-[calc((var(--type-label-size)*var(--type-label-line-height)-var(--spacing-lg))/2)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\ntype RadixRootProps = ComponentPropsWithoutRef<typeof RadixCheckbox.Root>;\n\nexport interface CheckboxProps\n extends\n Omit<RadixRootProps, 'checked' | 'onCheckedChange' | 'children'>,\n VariantProps<typeof checkboxVariants> {\n /**\n * Visible label rendered next to the box. Accepts a string or any React\n * node — useful for consent labels that embed a privacy / T&C link.\n */\n label: ReactNode;\n checked?: boolean | 'indeterminate';\n onCheckedChange?: (checked: boolean | 'indeterminate') => void;\n size?: 'sm' | 'md' | 'lg';\n disabledReason?: string;\n value?: string;\n}\n\nexport const Checkbox = forwardRef<HTMLButtonElement, CheckboxProps>(\n (\n {\n label,\n checked,\n onCheckedChange,\n size = 'md',\n disabled,\n disabledReason,\n name,\n value,\n id,\n className,\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const checkboxId = id ?? generatedId;\n const group = useCheckboxGroup();\n\n const inGroup = group !== null && value !== undefined;\n const [ownCheckedRaw, setOwnChecked] = useControllableState<\n boolean | 'indeterminate'\n >({\n value: checked,\n defaultValue: false,\n onChange: onCheckedChange,\n });\n const ownChecked = ownCheckedRaw ?? false;\n const effectiveChecked = inGroup ? group.value.has(value) : ownChecked;\n const effectiveOnChange = inGroup\n ? () => group.toggle(value)\n : (next: boolean | 'indeterminate') => {\n setOwnChecked(next);\n };\n const effectiveName = group?.name ?? name;\n const effectiveDisabled = group?.disabled || disabled;\n\n const checkedRef = useRef<boolean | 'indeterminate'>(\n effectiveChecked ?? false,\n );\n checkedRef.current = effectiveChecked ?? false;\n\n const agentHandle = useMemo<CheckboxHandle>(\n () => ({\n getChecked: () => checkedRef.current,\n setChecked: (next) => {\n if (inGroup) {\n // Inside a group: toggle implements set via the group context.\n const isOn =\n checkedRef.current === true ||\n checkedRef.current === 'indeterminate';\n const want = next === true || next === 'indeterminate';\n if (isOn !== want) group.toggle(value);\n return;\n }\n setOwnChecked(next);\n },\n toggle: () => {\n if (inGroup) {\n group.toggle(value);\n return;\n }\n const next =\n checkedRef.current === true ||\n checkedRef.current === 'indeterminate'\n ? false\n : true;\n setOwnChecked(next);\n },\n }),\n [inGroup, group, value, setOwnChecked],\n );\n useAgentRegistration(checkboxAgent, agentHandle, id);\n\n // `text-primary-foreground` lives on the SVG (not the <button> Root) so\n // a legacy consumer rule like `button, input, … { color: inherit }`\n // can't intercept it — the unlayered consumer rule would beat any\n // @layer utilities rule on the button itself, leaving the tick paint\n // (currentColor) inheriting the consumer's body text colour. See\n // styles.css for the matching form-element revert inside [data-component].\n const iconSizeClass = [\n 'ds:text-primary-foreground',\n size === 'sm' ? 'ds:size-3' : size === 'lg' ? 'ds:size-4' : 'ds:size-3.5',\n ].join(' ');\n\n const labelClasses = [\n 'type-label ds:text-foreground ds:select-none',\n effectiveDisabled\n ? 'ds:cursor-not-allowed ds:opacity-50'\n : 'ds:cursor-pointer',\n ].join(' ');\n\n const content = (\n <div\n data-component=\"checkbox\"\n data-component-id={id}\n data-option-id={value}\n className=\"ds:inline-flex ds:items-start ds:gap-[var(--spacing-sm)]\"\n >\n <RadixCheckbox.Root\n ref={ref}\n id={checkboxId}\n checked={effectiveChecked}\n onCheckedChange={effectiveOnChange}\n disabled={effectiveDisabled}\n aria-disabled={effectiveDisabled || undefined}\n name={effectiveName}\n value={value}\n className={checkboxVariants({ size, className })}\n {...props}\n >\n <RadixCheckbox.Indicator>\n {effectiveChecked === 'indeterminate' ? (\n <IndeterminateIcon className={iconSizeClass} />\n ) : (\n <CheckIcon className={iconSizeClass} />\n )}\n </RadixCheckbox.Indicator>\n </RadixCheckbox.Root>\n <label htmlFor={checkboxId} className={labelClasses}>\n {label}\n </label>\n </div>\n );\n\n if (effectiveDisabled && disabledReason) {\n return <Tooltip label={disabledReason}>{content}</Tooltip>;\n }\n\n return content;\n },\n);\n\nCheckbox.displayName = 'Checkbox';\n"],"names":["CheckboxGroupContext","createContext","useCheckboxGroup","useContext","checkboxAgent","handle","args","drawClasses","CheckIcon","className","jsx","IndeterminateIcon","checkboxVariants","cva","Checkbox","forwardRef","label","checked","onCheckedChange","size","disabled","disabledReason","name","value","id","props","ref","generatedId","useId","checkboxId","group","inGroup","ownCheckedRaw","setOwnChecked","useControllableState","effectiveChecked","effectiveOnChange","next","effectiveName","effectiveDisabled","checkedRef","useRef","agentHandle","useMemo","useAgentRegistration","iconSizeClass","labelClasses","content","jsxs","RadixCheckbox","Tooltip"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { forwardRef as O, useId as Q, useMemo as S, useState as T, useRef as W,
3
3
  import { c as Z } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as V } from "react-i18next";
5
5
  import { u as ee } from "./use-controllable-state-BiY4xTzM.js";
6
- import { C as M, a as te } from "./checkbox-BjDv-r3o.js";
6
+ import { C as M, a as te } from "./checkbox-a7Sh-dXb.js";
7
7
  import { u as se } from "./registry-DvAUVLHh.js";
8
8
  import { C as ce } from "./circle-alert-rGDZ73Wh.js";
9
9
  const re = {
@@ -210,4 +210,4 @@ oe.displayName = "CheckboxGroup";
210
210
  export {
211
211
  oe as C
212
212
  };
213
- //# sourceMappingURL=checkbox-group-Cw2H5qaq.js.map
213
+ //# sourceMappingURL=checkbox-group-eGdv9fZc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox-group-Cw2H5qaq.js","sources":["../../src/components/checkbox-group/checkbox-group.agent.ts","../../src/components/checkbox-group/checkbox-group.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — CheckboxGroup. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { CheckboxGroupHandle } from './checkbox-group';\n\nexport const checkboxGroupAgent: AgentAdapter<CheckboxGroupHandle> = {\n id: 'checkbox-group',\n capabilities: ['select_multiple'],\n state: {\n selection: {\n type: 'string[]',\n descriptionKey: 'ui.agent.checkboxGroup.state.selection',\n description: 'Values of currently-checked options.',\n read: (handle) => handle.getSelection(),\n },\n },\n actions: {\n set_selection: {\n safety: 'write',\n argsType: '{ ids: string[] }',\n descriptionKey: 'ui.agent.checkboxGroup.actions.setSelection',\n description:\n 'Replace the current selection with the given option values.',\n invoke: (handle, args: { ids: string[] }) => {\n handle.setSelection(args.ids);\n },\n },\n clear_selection: {\n safety: 'destructive',\n descriptionKey: 'ui.agent.checkboxGroup.actions.clearSelection',\n description: 'Uncheck every option in the group.',\n invoke: (handle) => {\n handle.clearSelection();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'checkbox-group',\n description: 'Marks the CheckboxGroup fieldset.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-option-id',\n description:\n 'Stable opaque value emitted on each rendered Checkbox child within the group.',\n },\n },\n};\n","import {\n Children,\n forwardRef,\n isValidElement,\n useId,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { CircleAlert } from 'lucide-react';\nimport { Checkbox } from '../checkbox/checkbox';\nimport {\n CheckboxGroupContext,\n type CheckboxGroupContextShape,\n} from '../checkbox/checkbox-group-context';\nimport { useAgentRegistration } from '../../agent';\nimport { checkboxGroupAgent } from './checkbox-group.agent';\n\n/** Agent-readiness curated handle for CheckboxGroup. */\nexport interface CheckboxGroupHandle {\n getSelection: () => string[];\n setSelection: (ids: string[]) => void;\n clearSelection: () => void;\n}\n\nconst checkboxGroupVariants = cva('', {\n variants: {\n orientation: {\n vertical: 'ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]',\n horizontal:\n 'ds:flex ds:flex-wrap ds:gap-x-[var(--spacing-lg)] ds:gap-y-[var(--spacing-sm)]',\n },\n },\n defaultVariants: { orientation: 'vertical' },\n});\n\nexport interface CheckboxGroupOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface CheckboxGroupProps extends VariantProps<\n typeof checkboxGroupVariants\n> {\n label: string;\n value?: string[];\n onChange?: (value: string[]) => void;\n name?: string;\n /** Stable id, used to address this instance from the agent runtime. */\n id?: string;\n orientation?: 'vertical' | 'horizontal';\n disabled?: boolean;\n min?: number;\n max?: number;\n onConstraintViolation?: (type: 'min' | 'max') => void;\n withSelectAll?: boolean;\n options?: CheckboxGroupOption[];\n error?: string;\n helperText?: string;\n className?: string;\n children?: ReactNode;\n}\n\nfunction collectChildValues(children: ReactNode): string[] {\n const values: string[] = [];\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) return;\n const props = child.props as { value?: unknown };\n if (typeof props.value === 'string') values.push(props.value);\n });\n return values;\n}\n\nexport const CheckboxGroup = forwardRef<\n HTMLFieldSetElement,\n CheckboxGroupProps\n>(\n (\n {\n label,\n value: controlledValue,\n onChange,\n name,\n id,\n orientation = 'vertical',\n disabled = false,\n min,\n max,\n onConstraintViolation,\n withSelectAll = false,\n options,\n error,\n helperText,\n className,\n children,\n },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n const baseId = useId();\n const helperId = `${baseId}-helper`;\n const errorId = `${baseId}-error`;\n const counterId = `${baseId}-counter`;\n\n const [currentValueRaw, setCurrentValue] = useControllableState<string[]>({\n value: controlledValue,\n defaultValue: [] as string[],\n onChange,\n });\n const currentValue = currentValueRaw ?? [];\n\n const valueSet = useMemo(() => new Set(currentValue), [currentValue]);\n\n const [violationMsg, setViolationMsg] = useState<string>('');\n\n const allValues = useMemo<string[]>(\n () =>\n options ? options.map((o) => o.value) : collectChildValues(children),\n [options, children],\n );\n\n const commit = (next: string[]): void => {\n setCurrentValue(next);\n };\n\n const currentValueRef = useRef<string[]>(currentValue);\n currentValueRef.current = currentValue;\n\n const agentHandle = useMemo<CheckboxGroupHandle>(\n () => ({\n getSelection: () => currentValueRef.current.slice(),\n setSelection: (ids) => commit(ids),\n clearSelection: () => commit([]),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [setCurrentValue],\n );\n useAgentRegistration(checkboxGroupAgent, agentHandle, id);\n\n const toggle = (itemValue: string): void => {\n if (valueSet.has(itemValue)) {\n if (typeof min === 'number' && currentValue.length <= min) {\n setViolationMsg(t('inputs.checkboxGroup.minReached', { min }));\n onConstraintViolation?.('min');\n return;\n }\n setViolationMsg('');\n commit(currentValue.filter((v) => v !== itemValue));\n return;\n }\n if (typeof max === 'number' && currentValue.length >= max) {\n setViolationMsg(t('inputs.checkboxGroup.maxReached', { max }));\n onConstraintViolation?.('max');\n return;\n }\n setViolationMsg('');\n commit([...currentValue, itemValue]);\n };\n\n const ctxValue: CheckboxGroupContextShape = {\n name,\n value: valueSet,\n toggle,\n disabled,\n };\n\n const total = allValues.length;\n const count = currentValue.length;\n\n const parentChecked: boolean | 'indeterminate' =\n total === 0 || count === 0\n ? false\n : count >= total\n ? true\n : 'indeterminate';\n\n const handleSelectAll = (): void => {\n if (parentChecked === true) {\n if (typeof min === 'number' && min > 0) {\n setViolationMsg(t('inputs.checkboxGroup.minReached', { min }));\n onConstraintViolation?.('min');\n return;\n }\n commit([]);\n setViolationMsg('');\n return;\n }\n const toCheck =\n typeof max === 'number' ? allValues.slice(0, max) : allValues;\n commit(toCheck);\n setViolationMsg('');\n };\n\n const describedBy =\n [\n helperText ? helperId : null,\n error ? errorId : null,\n total > 0 ? counterId : null,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const resolvedChildren =\n children ??\n (options\n ? options.map((opt) => (\n <Checkbox\n key={opt.value}\n value={opt.value}\n label={opt.label}\n disabled={opt.disabled}\n />\n ))\n : null);\n\n const fieldsetClasses = [\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:min-w-0 ds:border-0 ds:p-0 ds:m-0',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <fieldset\n ref={ref}\n id={id}\n className={fieldsetClasses}\n aria-describedby={describedBy}\n aria-invalid={Boolean(error) || undefined}\n data-component=\"checkbox-group\"\n data-component-id={id}\n >\n <legend className=\"type-label ds:text-foreground ds:p-0 ds:mb-[var(--spacing-sm)]\">\n {label}\n </legend>\n {withSelectAll ? (\n <Checkbox\n label={t('inputs.checkboxGroup.selectAll')}\n checked={parentChecked}\n onCheckedChange={handleSelectAll}\n disabled={disabled}\n />\n ) : null}\n <CheckboxGroupContext.Provider value={ctxValue}>\n <div className={checkboxGroupVariants({ orientation })}>\n {resolvedChildren}\n </div>\n </CheckboxGroupContext.Provider>\n {helperText ? (\n <p id={helperId} className=\"type-body-sm ds:text-muted-foreground\">\n {helperText}\n </p>\n ) : null}\n {error ? (\n <p\n id={errorId}\n role=\"alert\"\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-body-sm ds:text-destructive\"\n >\n <CircleAlert aria-hidden=\"true\" className=\"ds:size-4 ds:shrink-0\" />\n <span>{error}</span>\n </p>\n ) : null}\n <span\n id={counterId}\n role=\"status\"\n aria-live=\"polite\"\n className=\"ds:sr-only\"\n >\n {total > 0 ? t('inputs.checkboxGroup.counter', { count, total }) : ''}\n </span>\n <span role=\"status\" aria-live=\"polite\" className=\"ds:sr-only\">\n {violationMsg}\n </span>\n </fieldset>\n );\n },\n);\n\nCheckboxGroup.displayName = 'CheckboxGroup';\n"],"names":["checkboxGroupAgent","handle","args","checkboxGroupVariants","cva","collectChildValues","children","values","Children","child","isValidElement","props","CheckboxGroup","forwardRef","label","controlledValue","onChange","name","id","orientation","disabled","min","max","onConstraintViolation","withSelectAll","options","error","helperText","className","ref","t","useTranslation","baseId","useId","helperId","errorId","counterId","currentValueRaw","setCurrentValue","useControllableState","currentValue","valueSet","useMemo","violationMsg","setViolationMsg","useState","allValues","o","commit","next","currentValueRef","useRef","agentHandle","ids","useAgentRegistration","ctxValue","itemValue","v","total","count","parentChecked","handleSelectAll","toCheck","describedBy","resolvedChildren","opt","jsx","Checkbox","fieldsetClasses","jsxs","CheckboxGroupContext","CircleAlert"],"mappings":"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"}
1
+ {"version":3,"file":"checkbox-group-eGdv9fZc.js","sources":["../../src/components/checkbox-group/checkbox-group.agent.ts","../../src/components/checkbox-group/checkbox-group.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — CheckboxGroup. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { CheckboxGroupHandle } from './checkbox-group';\n\nexport const checkboxGroupAgent: AgentAdapter<CheckboxGroupHandle> = {\n id: 'checkbox-group',\n capabilities: ['select_multiple'],\n state: {\n selection: {\n type: 'string[]',\n descriptionKey: 'ui.agent.checkboxGroup.state.selection',\n description: 'Values of currently-checked options.',\n read: (handle) => handle.getSelection(),\n },\n },\n actions: {\n set_selection: {\n safety: 'write',\n argsType: '{ ids: string[] }',\n descriptionKey: 'ui.agent.checkboxGroup.actions.setSelection',\n description:\n 'Replace the current selection with the given option values.',\n invoke: (handle, args: { ids: string[] }) => {\n handle.setSelection(args.ids);\n },\n },\n clear_selection: {\n safety: 'destructive',\n descriptionKey: 'ui.agent.checkboxGroup.actions.clearSelection',\n description: 'Uncheck every option in the group.',\n invoke: (handle) => {\n handle.clearSelection();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'checkbox-group',\n description: 'Marks the CheckboxGroup fieldset.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-option-id',\n description:\n 'Stable opaque value emitted on each rendered Checkbox child within the group.',\n },\n },\n};\n","import {\n Children,\n forwardRef,\n isValidElement,\n useId,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { CircleAlert } from 'lucide-react';\nimport { Checkbox } from '../checkbox/checkbox';\nimport {\n CheckboxGroupContext,\n type CheckboxGroupContextShape,\n} from '../checkbox/checkbox-group-context';\nimport { useAgentRegistration } from '../../agent';\nimport { checkboxGroupAgent } from './checkbox-group.agent';\n\n/** Agent-readiness curated handle for CheckboxGroup. */\nexport interface CheckboxGroupHandle {\n getSelection: () => string[];\n setSelection: (ids: string[]) => void;\n clearSelection: () => void;\n}\n\nconst checkboxGroupVariants = cva('', {\n variants: {\n orientation: {\n vertical: 'ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]',\n horizontal:\n 'ds:flex ds:flex-wrap ds:gap-x-[var(--spacing-lg)] ds:gap-y-[var(--spacing-sm)]',\n },\n },\n defaultVariants: { orientation: 'vertical' },\n});\n\nexport interface CheckboxGroupOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface CheckboxGroupProps extends VariantProps<\n typeof checkboxGroupVariants\n> {\n label: string;\n value?: string[];\n onChange?: (value: string[]) => void;\n name?: string;\n /** Stable id, used to address this instance from the agent runtime. */\n id?: string;\n orientation?: 'vertical' | 'horizontal';\n disabled?: boolean;\n min?: number;\n max?: number;\n onConstraintViolation?: (type: 'min' | 'max') => void;\n withSelectAll?: boolean;\n options?: CheckboxGroupOption[];\n error?: string;\n helperText?: string;\n className?: string;\n children?: ReactNode;\n}\n\nfunction collectChildValues(children: ReactNode): string[] {\n const values: string[] = [];\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) return;\n const props = child.props as { value?: unknown };\n if (typeof props.value === 'string') values.push(props.value);\n });\n return values;\n}\n\nexport const CheckboxGroup = forwardRef<\n HTMLFieldSetElement,\n CheckboxGroupProps\n>(\n (\n {\n label,\n value: controlledValue,\n onChange,\n name,\n id,\n orientation = 'vertical',\n disabled = false,\n min,\n max,\n onConstraintViolation,\n withSelectAll = false,\n options,\n error,\n helperText,\n className,\n children,\n },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n const baseId = useId();\n const helperId = `${baseId}-helper`;\n const errorId = `${baseId}-error`;\n const counterId = `${baseId}-counter`;\n\n const [currentValueRaw, setCurrentValue] = useControllableState<string[]>({\n value: controlledValue,\n defaultValue: [] as string[],\n onChange,\n });\n const currentValue = currentValueRaw ?? [];\n\n const valueSet = useMemo(() => new Set(currentValue), [currentValue]);\n\n const [violationMsg, setViolationMsg] = useState<string>('');\n\n const allValues = useMemo<string[]>(\n () =>\n options ? options.map((o) => o.value) : collectChildValues(children),\n [options, children],\n );\n\n const commit = (next: string[]): void => {\n setCurrentValue(next);\n };\n\n const currentValueRef = useRef<string[]>(currentValue);\n currentValueRef.current = currentValue;\n\n const agentHandle = useMemo<CheckboxGroupHandle>(\n () => ({\n getSelection: () => currentValueRef.current.slice(),\n setSelection: (ids) => commit(ids),\n clearSelection: () => commit([]),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [setCurrentValue],\n );\n useAgentRegistration(checkboxGroupAgent, agentHandle, id);\n\n const toggle = (itemValue: string): void => {\n if (valueSet.has(itemValue)) {\n if (typeof min === 'number' && currentValue.length <= min) {\n setViolationMsg(t('inputs.checkboxGroup.minReached', { min }));\n onConstraintViolation?.('min');\n return;\n }\n setViolationMsg('');\n commit(currentValue.filter((v) => v !== itemValue));\n return;\n }\n if (typeof max === 'number' && currentValue.length >= max) {\n setViolationMsg(t('inputs.checkboxGroup.maxReached', { max }));\n onConstraintViolation?.('max');\n return;\n }\n setViolationMsg('');\n commit([...currentValue, itemValue]);\n };\n\n const ctxValue: CheckboxGroupContextShape = {\n name,\n value: valueSet,\n toggle,\n disabled,\n };\n\n const total = allValues.length;\n const count = currentValue.length;\n\n const parentChecked: boolean | 'indeterminate' =\n total === 0 || count === 0\n ? false\n : count >= total\n ? true\n : 'indeterminate';\n\n const handleSelectAll = (): void => {\n if (parentChecked === true) {\n if (typeof min === 'number' && min > 0) {\n setViolationMsg(t('inputs.checkboxGroup.minReached', { min }));\n onConstraintViolation?.('min');\n return;\n }\n commit([]);\n setViolationMsg('');\n return;\n }\n const toCheck =\n typeof max === 'number' ? allValues.slice(0, max) : allValues;\n commit(toCheck);\n setViolationMsg('');\n };\n\n const describedBy =\n [\n helperText ? helperId : null,\n error ? errorId : null,\n total > 0 ? counterId : null,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const resolvedChildren =\n children ??\n (options\n ? options.map((opt) => (\n <Checkbox\n key={opt.value}\n value={opt.value}\n label={opt.label}\n disabled={opt.disabled}\n />\n ))\n : null);\n\n const fieldsetClasses = [\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:min-w-0 ds:border-0 ds:p-0 ds:m-0',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <fieldset\n ref={ref}\n id={id}\n className={fieldsetClasses}\n aria-describedby={describedBy}\n aria-invalid={Boolean(error) || undefined}\n data-component=\"checkbox-group\"\n data-component-id={id}\n >\n <legend className=\"type-label ds:text-foreground ds:p-0 ds:mb-[var(--spacing-sm)]\">\n {label}\n </legend>\n {withSelectAll ? (\n <Checkbox\n label={t('inputs.checkboxGroup.selectAll')}\n checked={parentChecked}\n onCheckedChange={handleSelectAll}\n disabled={disabled}\n />\n ) : null}\n <CheckboxGroupContext.Provider value={ctxValue}>\n <div className={checkboxGroupVariants({ orientation })}>\n {resolvedChildren}\n </div>\n </CheckboxGroupContext.Provider>\n {helperText ? (\n <p id={helperId} className=\"type-body-sm ds:text-muted-foreground\">\n {helperText}\n </p>\n ) : null}\n {error ? (\n <p\n id={errorId}\n role=\"alert\"\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-body-sm ds:text-destructive\"\n >\n <CircleAlert aria-hidden=\"true\" className=\"ds:size-4 ds:shrink-0\" />\n <span>{error}</span>\n </p>\n ) : null}\n <span\n id={counterId}\n role=\"status\"\n aria-live=\"polite\"\n className=\"ds:sr-only\"\n >\n {total > 0 ? t('inputs.checkboxGroup.counter', { count, total }) : ''}\n </span>\n <span role=\"status\" aria-live=\"polite\" className=\"ds:sr-only\">\n {violationMsg}\n </span>\n </fieldset>\n );\n },\n);\n\nCheckboxGroup.displayName = 'CheckboxGroup';\n"],"names":["checkboxGroupAgent","handle","args","checkboxGroupVariants","cva","collectChildValues","children","values","Children","child","isValidElement","props","CheckboxGroup","forwardRef","label","controlledValue","onChange","name","id","orientation","disabled","min","max","onConstraintViolation","withSelectAll","options","error","helperText","className","ref","t","useTranslation","baseId","useId","helperId","errorId","counterId","currentValueRaw","setCurrentValue","useControllableState","currentValue","valueSet","useMemo","violationMsg","setViolationMsg","useState","allValues","o","commit","next","currentValueRef","useRef","agentHandle","ids","useAgentRegistration","ctxValue","itemValue","v","total","count","parentChecked","handleSelectAll","toCheck","describedBy","resolvedChildren","opt","jsx","Checkbox","fieldsetClasses","jsxs","CheckboxGroupContext","CircleAlert"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as p } from "react/jsx-runtime";
2
2
  import { forwardRef as G, useRef as d, useMemo as K, useCallback as m, useEffect as J } from "react";
3
3
  import { useTranslation as O } from "react-i18next";
4
- import { A as Q } from "./autocomplete-CnB1mHGc.js";
4
+ import { A as Q } from "./autocomplete-BXMcNoa3.js";
5
5
  import { T as X } from "./text-input-CaG9ApoE.js";
6
6
  import { c as Y } from "./compose-refs-C0k0tdqF.js";
7
7
  import { w as Z } from "./use-state-backed-input-DhRQo6gM.js";
@@ -182,4 +182,4 @@ export {
182
182
  te as C,
183
183
  ee as c
184
184
  };
185
- //# sourceMappingURL=city-input-CJVGswxp.js.map
185
+ //# sourceMappingURL=city-input-CA59CjnV.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"city-input-CJVGswxp.js","sources":["../../src/components/city-input/city-input.agent.ts","../../src/components/city-input/city-input.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\n\nexport interface CityInputHandle {\n getValue: () => string;\n setValue: (value: string) => void;\n clear: () => void;\n}\n\nexport const cityInputAgent: AgentAdapter<CityInputHandle> = {\n id: 'city-input',\n capabilities: ['set_value'],\n state: {\n value: {\n type: 'string',\n descriptionKey: 'ui.agent.cityInput.state.value',\n description: 'Current city / town value.',\n read: (handle) => handle.getValue(),\n },\n isEmpty: {\n type: 'boolean',\n descriptionKey: 'ui.agent.cityInput.state.isEmpty',\n description: 'Whether the field has no value.',\n read: (handle) => handle.getValue() === '',\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: string }',\n argsSchema: {\n type: 'object',\n properties: { value: { type: 'string' } },\n required: ['value'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.cityInput.actions.setValue',\n description: 'Replace the city value.',\n examples: [\n { args: { value: 'Milano' }, note: 'Set the city to Milano.' },\n ],\n invoke: (handle, args: { value: string }) => {\n handle.setValue(args.value);\n },\n },\n clear: {\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.cityInput.actions.clear',\n description: 'Empty the field. Loses any typed value.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'city-input' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n type ChangeEvent,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Autocomplete } from '../autocomplete/autocomplete';\nimport { TextInput } from '../text-input';\nimport type { OptionShape } from '../_shared/option';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { writeInputValue } from '../_shared/use-state-backed-input';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { useAgentRegistration } from '../../agent';\nimport { cityInputAgent, type CityInputHandle } from './city-input.agent';\n\n/* ------------------------------------------------------------------ */\n/* Public API */\n/* */\n/* A city / town field with an OPTIONAL geocoder-agnostic suggestion */\n/* seam. When `loadCities` is supplied the field is an async */\n/* Autocomplete; when it isn't, it degrades to a plain labelled text */\n/* input. The kit imports NO geocoder — the consumer owns the data */\n/* source (Google Places, Mapbox, a server endpoint, …). */\n/* ------------------------------------------------------------------ */\n\nexport interface CityLoaderContext {\n signal: AbortSignal;\n locale: string;\n /** Selected country (lowercase alpha-2), passed through to bias results. */\n country?: string;\n /** Selected province/region code, passed through to bias results. */\n province?: string;\n}\n\nexport interface CityInputProps {\n /** City / town name (free text). */\n value?: string;\n defaultValue?: string;\n onValueChange?: (city: string) => void;\n /**\n * Optional async suggestion source. Omit → the field is a plain text\n * input with no suggestions. The kit never imports a geocoder; wire your\n * own here.\n */\n loadCities?: (\n query: string,\n ctx: CityLoaderContext,\n ) => Promise<OptionShape[]>;\n /** Fires when a suggestion is picked, with the full option. */\n onCitySelect?: (option: OptionShape) => void;\n /** Passed through to `loadCities` to bias suggestions. */\n country?: string;\n /** Passed through to `loadCities` to bias suggestions. */\n province?: string;\n /** Frequently-picked cities surfaced before the user types. */\n recents?: OptionShape[];\n debounceMs?: number;\n /** Snap the value back to the last picked suggestion on blur. */\n snapOnBlur?: boolean;\n placeholder?: string;\n /** Clear button — text-fallback mode only. */\n clearable?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n name?: string;\n id?: string;\n size?: 'sm' | 'md' | 'lg';\n tone?: 'default' | 'error';\n /**\n * Accessible name. Not needed inside a `<FormField>`: the field's label\n * names the input in both modes. Pass it when there is no FormField.\n */\n 'aria-label'?: string;\n /** Invalid-state fallback for use outside a `<FormField>` (inline editors). */\n 'aria-invalid'?: boolean;\n /** Error-message id fallback for use outside a `<FormField>`. */\n 'aria-describedby'?: string;\n className?: string;\n}\n\nexport const CityInput = forwardRef<HTMLInputElement, CityInputProps>(\n function CityInput(\n {\n value: valueProp,\n defaultValue,\n onValueChange,\n loadCities,\n onCitySelect,\n country,\n province,\n recents,\n debounceMs,\n snapOnBlur,\n placeholder,\n clearable,\n disabled,\n readOnly,\n required,\n name,\n id,\n size = 'md',\n tone = 'default',\n 'aria-label': ariaLabel,\n 'aria-invalid': ariaInvalid,\n 'aria-describedby': ariaDescribedBy,\n className,\n },\n ref,\n ) {\n const { t } = useTranslation('ui');\n\n const [value, setValue] = useControllableState<string>({\n value: valueProp,\n defaultValue,\n onChange: onValueChange,\n });\n\n // No loader and no host `value`: TextInput stays uncontrolled, keeping\n // the city out of the `value` attribute. Other changes go through the\n // input as typing would, so TextInput's clear button stays in step.\n const plainUncontrolled = !loadCities && valueProp === undefined;\n const inputRef = useRef<HTMLInputElement | null>(null);\n const composedRef = useMemo(() => composeRefs(ref, inputRef), [ref]);\n const writeThrough = useCallback(\n (next: string) => writeInputValue(inputRef.current, next),\n [],\n );\n const commit = useCallback(\n (next: string) => {\n if (plainUncontrolled && writeThrough(next)) return;\n setValue(next);\n },\n [plainUncontrolled, setValue, writeThrough],\n );\n\n // Back from suggestion mode, the plain input mounts with the host's\n // defaultValue: show the current city. Typing keeps them in step after.\n // Not on the first mount, where the input already shows defaultValue\n // and a host's ref may have written to it since.\n const wasPlainRef = useRef(plainUncontrolled);\n useIsomorphicLayoutEffect(() => {\n if (plainUncontrolled && !wasPlainRef.current) writeThrough(value ?? '');\n wasPlainRef.current = plainUncontrolled;\n }, [plainUncontrolled]);\n\n const valueRef = useRef(value);\n useEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n const agentHandle = useMemo<CityInputHandle>(\n () => ({\n getValue: () => valueRef.current ?? '',\n setValue: (next) => commit(next),\n clear: () => commit(''),\n }),\n [commit],\n );\n useAgentRegistration(cityInputAgent, agentHandle, id);\n\n const loadOptions = useCallback(\n (query: string, opts: { signal: AbortSignal; locale: string }) =>\n loadCities\n ? loadCities(query, { ...opts, country, province })\n : Promise.resolve<OptionShape[]>([]),\n [loadCities, country, province],\n );\n\n const resolvedPlaceholder =\n placeholder ?? t('inputs.cityInput.placeholder', 'City');\n\n return (\n <div\n data-component=\"city-input\"\n data-component-id={id}\n className={['ds:w-full', className].filter(Boolean).join(' ')}\n >\n {loadCities ? (\n <Autocomplete\n ref={ref}\n loadOptions={loadOptions}\n value={value ?? ''}\n onChange={setValue}\n onSelect={onCitySelect}\n recents={recents}\n debounceMs={debounceMs}\n snapOnBlur={snapOnBlur}\n autoComplete=\"address-level2\"\n placeholder={resolvedPlaceholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n name={name}\n id={id}\n size={size}\n tone={tone}\n aria-label={ariaLabel}\n aria-invalid={ariaInvalid}\n aria-describedby={ariaDescribedBy}\n />\n ) : (\n <TextInput\n ref={composedRef}\n {...(plainUncontrolled ? { defaultValue } : { value: value ?? '' })}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n setValue(event.target.value)\n }\n onClear={() => setValue('')}\n autoComplete=\"address-level2\"\n placeholder={resolvedPlaceholder}\n clearable={clearable}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n name={name}\n id={id}\n size={size}\n tone={tone}\n aria-label={ariaLabel}\n aria-invalid={ariaInvalid}\n aria-describedby={ariaDescribedBy}\n />\n )}\n </div>\n );\n },\n);\n\nCityInput.displayName = 'CityInput';\n"],"names":["cityInputAgent","handle","args","CityInput","forwardRef","valueProp","defaultValue","onValueChange","loadCities","onCitySelect","country","province","recents","debounceMs","snapOnBlur","placeholder","clearable","disabled","readOnly","required","name","id","size","tone","ariaLabel","ariaInvalid","ariaDescribedBy","className","ref","t","useTranslation","value","setValue","useControllableState","plainUncontrolled","inputRef","useRef","composedRef","useMemo","composeRefs","writeThrough","useCallback","next","writeInputValue","commit","wasPlainRef","useIsomorphicLayoutEffect","valueRef","useEffect","agentHandle","useAgentRegistration","loadOptions","query","opts","resolvedPlaceholder","jsx","Autocomplete","TextInput","event"],"mappings":"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"}
1
+ {"version":3,"file":"city-input-CA59CjnV.js","sources":["../../src/components/city-input/city-input.agent.ts","../../src/components/city-input/city-input.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\n\nexport interface CityInputHandle {\n getValue: () => string;\n setValue: (value: string) => void;\n clear: () => void;\n}\n\nexport const cityInputAgent: AgentAdapter<CityInputHandle> = {\n id: 'city-input',\n capabilities: ['set_value'],\n state: {\n value: {\n type: 'string',\n descriptionKey: 'ui.agent.cityInput.state.value',\n description: 'Current city / town value.',\n read: (handle) => handle.getValue(),\n },\n isEmpty: {\n type: 'boolean',\n descriptionKey: 'ui.agent.cityInput.state.isEmpty',\n description: 'Whether the field has no value.',\n read: (handle) => handle.getValue() === '',\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: string }',\n argsSchema: {\n type: 'object',\n properties: { value: { type: 'string' } },\n required: ['value'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.cityInput.actions.setValue',\n description: 'Replace the city value.',\n examples: [\n { args: { value: 'Milano' }, note: 'Set the city to Milano.' },\n ],\n invoke: (handle, args: { value: string }) => {\n handle.setValue(args.value);\n },\n },\n clear: {\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.cityInput.actions.clear',\n description: 'Empty the field. Loses any typed value.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'city-input' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n type ChangeEvent,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Autocomplete } from '../autocomplete/autocomplete';\nimport { TextInput } from '../text-input';\nimport type { OptionShape } from '../_shared/option';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { writeInputValue } from '../_shared/use-state-backed-input';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { useAgentRegistration } from '../../agent';\nimport { cityInputAgent, type CityInputHandle } from './city-input.agent';\n\n/* ------------------------------------------------------------------ */\n/* Public API */\n/* */\n/* A city / town field with an OPTIONAL geocoder-agnostic suggestion */\n/* seam. When `loadCities` is supplied the field is an async */\n/* Autocomplete; when it isn't, it degrades to a plain labelled text */\n/* input. The kit imports NO geocoder — the consumer owns the data */\n/* source (Google Places, Mapbox, a server endpoint, …). */\n/* ------------------------------------------------------------------ */\n\nexport interface CityLoaderContext {\n signal: AbortSignal;\n locale: string;\n /** Selected country (lowercase alpha-2), passed through to bias results. */\n country?: string;\n /** Selected province/region code, passed through to bias results. */\n province?: string;\n}\n\nexport interface CityInputProps {\n /** City / town name (free text). */\n value?: string;\n defaultValue?: string;\n onValueChange?: (city: string) => void;\n /**\n * Optional async suggestion source. Omit → the field is a plain text\n * input with no suggestions. The kit never imports a geocoder; wire your\n * own here.\n */\n loadCities?: (\n query: string,\n ctx: CityLoaderContext,\n ) => Promise<OptionShape[]>;\n /** Fires when a suggestion is picked, with the full option. */\n onCitySelect?: (option: OptionShape) => void;\n /** Passed through to `loadCities` to bias suggestions. */\n country?: string;\n /** Passed through to `loadCities` to bias suggestions. */\n province?: string;\n /** Frequently-picked cities surfaced before the user types. */\n recents?: OptionShape[];\n debounceMs?: number;\n /** Snap the value back to the last picked suggestion on blur. */\n snapOnBlur?: boolean;\n placeholder?: string;\n /** Clear button — text-fallback mode only. */\n clearable?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n name?: string;\n id?: string;\n size?: 'sm' | 'md' | 'lg';\n tone?: 'default' | 'error';\n /**\n * Accessible name. Not needed inside a `<FormField>`: the field's label\n * names the input in both modes. Pass it when there is no FormField.\n */\n 'aria-label'?: string;\n /** Invalid-state fallback for use outside a `<FormField>` (inline editors). */\n 'aria-invalid'?: boolean;\n /** Error-message id fallback for use outside a `<FormField>`. */\n 'aria-describedby'?: string;\n className?: string;\n}\n\nexport const CityInput = forwardRef<HTMLInputElement, CityInputProps>(\n function CityInput(\n {\n value: valueProp,\n defaultValue,\n onValueChange,\n loadCities,\n onCitySelect,\n country,\n province,\n recents,\n debounceMs,\n snapOnBlur,\n placeholder,\n clearable,\n disabled,\n readOnly,\n required,\n name,\n id,\n size = 'md',\n tone = 'default',\n 'aria-label': ariaLabel,\n 'aria-invalid': ariaInvalid,\n 'aria-describedby': ariaDescribedBy,\n className,\n },\n ref,\n ) {\n const { t } = useTranslation('ui');\n\n const [value, setValue] = useControllableState<string>({\n value: valueProp,\n defaultValue,\n onChange: onValueChange,\n });\n\n // No loader and no host `value`: TextInput stays uncontrolled, keeping\n // the city out of the `value` attribute. Other changes go through the\n // input as typing would, so TextInput's clear button stays in step.\n const plainUncontrolled = !loadCities && valueProp === undefined;\n const inputRef = useRef<HTMLInputElement | null>(null);\n const composedRef = useMemo(() => composeRefs(ref, inputRef), [ref]);\n const writeThrough = useCallback(\n (next: string) => writeInputValue(inputRef.current, next),\n [],\n );\n const commit = useCallback(\n (next: string) => {\n if (plainUncontrolled && writeThrough(next)) return;\n setValue(next);\n },\n [plainUncontrolled, setValue, writeThrough],\n );\n\n // Back from suggestion mode, the plain input mounts with the host's\n // defaultValue: show the current city. Typing keeps them in step after.\n // Not on the first mount, where the input already shows defaultValue\n // and a host's ref may have written to it since.\n const wasPlainRef = useRef(plainUncontrolled);\n useIsomorphicLayoutEffect(() => {\n if (plainUncontrolled && !wasPlainRef.current) writeThrough(value ?? '');\n wasPlainRef.current = plainUncontrolled;\n }, [plainUncontrolled]);\n\n const valueRef = useRef(value);\n useEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n const agentHandle = useMemo<CityInputHandle>(\n () => ({\n getValue: () => valueRef.current ?? '',\n setValue: (next) => commit(next),\n clear: () => commit(''),\n }),\n [commit],\n );\n useAgentRegistration(cityInputAgent, agentHandle, id);\n\n const loadOptions = useCallback(\n (query: string, opts: { signal: AbortSignal; locale: string }) =>\n loadCities\n ? loadCities(query, { ...opts, country, province })\n : Promise.resolve<OptionShape[]>([]),\n [loadCities, country, province],\n );\n\n const resolvedPlaceholder =\n placeholder ?? t('inputs.cityInput.placeholder', 'City');\n\n return (\n <div\n data-component=\"city-input\"\n data-component-id={id}\n className={['ds:w-full', className].filter(Boolean).join(' ')}\n >\n {loadCities ? (\n <Autocomplete\n ref={ref}\n loadOptions={loadOptions}\n value={value ?? ''}\n onChange={setValue}\n onSelect={onCitySelect}\n recents={recents}\n debounceMs={debounceMs}\n snapOnBlur={snapOnBlur}\n autoComplete=\"address-level2\"\n placeholder={resolvedPlaceholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n name={name}\n id={id}\n size={size}\n tone={tone}\n aria-label={ariaLabel}\n aria-invalid={ariaInvalid}\n aria-describedby={ariaDescribedBy}\n />\n ) : (\n <TextInput\n ref={composedRef}\n {...(plainUncontrolled ? { defaultValue } : { value: value ?? '' })}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n setValue(event.target.value)\n }\n onClear={() => setValue('')}\n autoComplete=\"address-level2\"\n placeholder={resolvedPlaceholder}\n clearable={clearable}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n name={name}\n id={id}\n size={size}\n tone={tone}\n aria-label={ariaLabel}\n aria-invalid={ariaInvalid}\n aria-describedby={ariaDescribedBy}\n />\n )}\n </div>\n );\n },\n);\n\nCityInput.displayName = 'CityInput';\n"],"names":["cityInputAgent","handle","args","CityInput","forwardRef","valueProp","defaultValue","onValueChange","loadCities","onCitySelect","country","province","recents","debounceMs","snapOnBlur","placeholder","clearable","disabled","readOnly","required","name","id","size","tone","ariaLabel","ariaInvalid","ariaDescribedBy","className","ref","t","useTranslation","value","setValue","useControllableState","plainUncontrolled","inputRef","useRef","composedRef","useMemo","composeRefs","writeThrough","useCallback","next","writeInputValue","commit","wasPlainRef","useIsomorphicLayoutEffect","valueRef","useEffect","agentHandle","useAgentRegistration","loadOptions","query","opts","resolvedPlaceholder","jsx","Autocomplete","TextInput","event"],"mappings":"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"}