@godxjp/ui 12.1.0 → 13.1.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 (157) hide show
  1. package/dist/app/index.d.ts +2 -2
  2. package/dist/app/index.js +4 -4
  3. package/dist/{app.prop-Cy6dJnU8.d.ts → app.prop-CVY8V4ss.d.ts} +1 -1
  4. package/dist/{checkbox-DPFcnsMZ.d.ts → checkbox-shzpQ_Xo.d.ts} +1 -1
  5. package/dist/{chunk-COD66MFF.js → chunk-2BR7KFCP.js} +1 -1
  6. package/dist/chunk-2H65B4JA.js +1 -0
  7. package/dist/{chunk-JSQOCVM6.js → chunk-2M57K2VW.js} +2 -2
  8. package/dist/{chunk-HTEL5DQI.js → chunk-3R3QVJCB.js} +1 -1
  9. package/dist/{chunk-FK2JDABO.js → chunk-55S5N667.js} +4 -2
  10. package/dist/{chunk-YGD4CCQC.js → chunk-5KK3KJ6L.js} +3 -3
  11. package/dist/chunk-76S3TQFH.js +109 -0
  12. package/dist/{chunk-6WSWK7TU.js → chunk-7HEFQDN5.js} +2 -2
  13. package/dist/{chunk-LCQFYL44.js → chunk-7MXIPSYM.js} +59 -5
  14. package/dist/{chunk-WBUUCU7R.js → chunk-AKFR72DQ.js} +4 -4
  15. package/dist/{chunk-IBK5D2Q6.js → chunk-B4K4BXEF.js} +3 -2
  16. package/dist/{chunk-VOHTRR5X.js → chunk-BNXPDUO4.js} +1 -1
  17. package/dist/chunk-C3PKEV6S.js +22 -0
  18. package/dist/{chunk-MMFIL33F.js → chunk-C6OEAQTO.js} +1 -1
  19. package/dist/{chunk-ASMTSQWA.js → chunk-DWYRIKVD.js} +11 -8
  20. package/dist/chunk-ES4Q3KGL.js +1 -0
  21. package/dist/{chunk-XVD5SLDL.js → chunk-FJBVDJGL.js} +56 -3
  22. package/dist/{chunk-FK5QEFVY.js → chunk-GDHDJAVB.js} +1 -1
  23. package/dist/{chunk-TXRYSMOD.js → chunk-H2TX3OPW.js} +1 -1
  24. package/dist/{chunk-EOTOCNT7.js → chunk-HCCID4YY.js} +1 -1
  25. package/dist/{chunk-2TYRT5XH.js → chunk-I2CYVA7B.js} +31 -18
  26. package/dist/{chunk-4MMIMZMK.js → chunk-IJ5ALJGA.js} +1 -1
  27. package/dist/{chunk-PO5ISUFA.js → chunk-IWAIIBSW.js} +4 -2
  28. package/dist/{chunk-UDEPO3UF.js → chunk-IZGLEPGW.js} +2 -2
  29. package/dist/{chunk-3ELRYXJK.js → chunk-JEIUEOTJ.js} +9 -3
  30. package/dist/{chunk-FTOG7D4T.js → chunk-KQ36FDEE.js} +1 -1
  31. package/dist/{chunk-WJNR3RAG.js → chunk-MTJHEQ46.js} +4 -4
  32. package/dist/{chunk-ZM4SMKEI.js → chunk-QATON677.js} +3 -20
  33. package/dist/{chunk-FOANNF6Z.js → chunk-QD3YG56T.js} +2 -2
  34. package/dist/{chunk-SIUIIIQW.js → chunk-SISAM4JZ.js} +3 -3
  35. package/dist/chunk-VU4GFGDG.js +12 -0
  36. package/dist/{chunk-MXEVP5S2.js → chunk-W2NWOWZ3.js} +5 -5
  37. package/dist/{chunk-7HF56YHC.js → chunk-X4J55OS5.js} +3 -3
  38. package/dist/{chunk-N6ELT7KB.js → chunk-XTVUYEJD.js} +30 -2
  39. package/dist/chunk-XUEDRPWF.js +177 -0
  40. package/dist/{chunk-2JCSS6B4.js → chunk-YVZPAN2W.js} +2 -2
  41. package/dist/{chunk-BCBK4FLV.js → chunk-ZFBIKJSJ.js} +2 -2
  42. package/dist/{chunk-L2MEN2VK.js → chunk-ZPHIXXTK.js} +2 -2
  43. package/dist/components/admin/index.d.ts +14 -15
  44. package/dist/components/admin/index.js +30 -28
  45. package/dist/components/data-display/badge.d.ts +1 -1
  46. package/dist/components/data-display/badge.js +4 -4
  47. package/dist/components/data-display/card.d.ts +2 -2
  48. package/dist/components/data-display/carousel.d.ts +12 -1
  49. package/dist/components/data-display/carousel.js +3 -3
  50. package/dist/components/data-display/index.d.ts +6 -6
  51. package/dist/components/data-display/index.js +9 -9
  52. package/dist/components/data-display/table.js +2 -2
  53. package/dist/components/data-entry/calendar.d.ts +6 -4
  54. package/dist/components/data-entry/calendar.js +2 -2
  55. package/dist/components/data-entry/cascader.d.ts +6 -4
  56. package/dist/components/data-entry/cascader.js +5 -5
  57. package/dist/components/data-entry/checkbox.d.ts +7 -5
  58. package/dist/components/data-entry/color-picker.d.ts +6 -4
  59. package/dist/components/data-entry/color-picker.js +5 -5
  60. package/dist/components/data-entry/command.js +2 -2
  61. package/dist/components/data-entry/date-picker.d.ts +6 -4
  62. package/dist/components/data-entry/date-picker.js +6 -6
  63. package/dist/components/data-entry/date-range-picker.d.ts +6 -4
  64. package/dist/components/data-entry/date-range-picker.js +6 -6
  65. package/dist/components/data-entry/index.d.ts +38 -9
  66. package/dist/components/data-entry/index.js +24 -22
  67. package/dist/components/data-entry/input.js +1 -1
  68. package/dist/components/data-entry/radio.d.ts +6 -4
  69. package/dist/components/data-entry/select.d.ts +6 -4
  70. package/dist/components/data-entry/select.js +6 -6
  71. package/dist/components/data-entry/slider.d.ts +6 -4
  72. package/dist/components/data-entry/switch.d.ts +6 -4
  73. package/dist/components/data-entry/textarea.js +2 -2
  74. package/dist/components/data-entry/time-input.js +2 -2
  75. package/dist/components/data-entry/time-picker.d.ts +6 -4
  76. package/dist/components/data-entry/time-picker.js +4 -4
  77. package/dist/components/data-entry/transfer.d.ts +7 -5
  78. package/dist/components/data-entry/transfer.js +5 -5
  79. package/dist/components/data-entry/tree-select.d.ts +6 -4
  80. package/dist/components/data-entry/tree-select.js +5 -5
  81. package/dist/components/data-entry/upload.d.ts +7 -5
  82. package/dist/components/data-entry/upload.js +8 -7
  83. package/dist/components/data-grid/index.js +9 -9
  84. package/dist/components/feedback/alert.d.ts +4 -4
  85. package/dist/components/feedback/alert.js +4 -4
  86. package/dist/components/feedback/dialog.d.ts +19 -5
  87. package/dist/components/feedback/dialog.js +5 -4
  88. package/dist/components/feedback/index.d.ts +17 -26
  89. package/dist/components/feedback/index.js +13 -12
  90. package/dist/components/feedback/sheet.d.ts +21 -2
  91. package/dist/components/feedback/sheet.js +2 -1
  92. package/dist/components/general/button.d.ts +3 -3
  93. package/dist/components/general/index.d.ts +3 -3
  94. package/dist/components/layout/index.d.ts +6 -6
  95. package/dist/components/layout/index.js +5 -4
  96. package/dist/components/navigation/index.d.ts +8 -8
  97. package/dist/components/navigation/index.js +9 -9
  98. package/dist/components/navigation/pagination.d.ts +4 -4
  99. package/dist/components/navigation/pagination.js +7 -7
  100. package/dist/components/navigation/steps.d.ts +5 -5
  101. package/dist/components/navigation/steps.js +4 -4
  102. package/dist/components/query/index.d.ts +4 -4
  103. package/dist/components/query/index.js +4 -4
  104. package/dist/components/ui/index.d.ts +15 -13
  105. package/dist/components/ui/index.js +27 -26
  106. package/dist/{data-display.prop-Cf2p9QC4.d.ts → data-display.prop-BOtnzI17.d.ts} +3 -3
  107. package/dist/{data-entry.prop-6J0o45se.d.ts → data-entry.prop-DL7kUcJh.d.ts} +32 -3
  108. package/dist/{data-table-B_q7j992.d.ts → data-table-DO-gU4wJ.d.ts} +3 -3
  109. package/dist/{data.prop-DMYMNl6L.d.ts → data.prop-D4uDw_SW.d.ts} +1 -1
  110. package/dist/{feedback.prop-Nc9Aa8SV.d.ts → feedback.prop-CtrL24E1.d.ts} +2 -2
  111. package/dist/{filter-bar-B07JSxME.d.ts → filter-bar-tEwfKthz.d.ts} +1 -1
  112. package/dist/{flex-DXtIALBh.d.ts → flex-88Ps6YCv.d.ts} +1 -1
  113. package/dist/form/index.d.ts +3 -3
  114. package/dist/form/index.js +2 -1
  115. package/dist/{form.prop-Bc6r6JJW.d.ts → form.prop-5cyL3bvT.d.ts} +1 -1
  116. package/dist/{general.prop-DoHDCRmL.d.ts → general.prop-1GgJkf4b.d.ts} +2 -2
  117. package/dist/i18n/index.d.ts +3 -1
  118. package/dist/i18n/index.js +2 -2
  119. package/dist/index.d.ts +14 -15
  120. package/dist/index.js +40 -38
  121. package/dist/{interaction.prop-DSFizzP6.d.ts → interaction.prop-R77MnAMZ.d.ts} +5 -1
  122. package/dist/{layout.prop-B1yQPUNZ.d.ts → layout.prop-ChLFNGJ6.d.ts} +2 -2
  123. package/dist/lib/datetime/index.js +1 -1
  124. package/dist/{navigation.prop-BKlxd-j7.d.ts → navigation.prop-CXDaVNaR.d.ts} +1 -1
  125. package/dist/{navigation.prop-Dumy196X.d.ts → navigation.prop-Cc_Iu87S.d.ts} +2 -2
  126. package/dist/props/components/index.d.ts +13 -13
  127. package/dist/props/index.d.ts +13 -13
  128. package/dist/props/index.js +1 -1
  129. package/dist/props/registry.d.ts +22 -2
  130. package/dist/props/registry.js +1 -1
  131. package/dist/props/vocabulary/index.d.ts +4 -4
  132. package/dist/{query.prop-Dog-EAfG.d.ts → query.prop-CyNxaCHe.d.ts} +2 -2
  133. package/dist/{search-input-BR4nAWiT.d.ts → search-input-CFUtVWQl.d.ts} +2 -2
  134. package/dist/{shared.prop-BsNSXeqD.d.ts → shared.prop-BvMSLFJ6.d.ts} +7 -1
  135. package/dist/styles/alert-layout.css +8 -8
  136. package/dist/styles/card-layout.css +301 -292
  137. package/dist/styles/control.css +8 -9
  138. package/dist/styles/data-display-layout.css +50 -5
  139. package/dist/styles/density.css +4 -0
  140. package/dist/styles/dialog-layout.css +35 -7
  141. package/dist/styles/form-layout.css +161 -0
  142. package/dist/styles/index.css +31 -3
  143. package/dist/styles/layout.css +1 -1
  144. package/dist/styles/navigation-layout.css +1 -1
  145. package/dist/styles/shell-layout.css +12 -12
  146. package/dist/tokens/components/card.css +1 -1
  147. package/dist/tokens/components/feedback.css +9 -1
  148. package/dist/tokens/foundation.css +74 -16
  149. package/dist/tokens/semantic/layout.css +29 -11
  150. package/package.json +1 -1
  151. package/dist/chunk-A6VFHPS6.js +0 -119
  152. package/dist/chunk-B3WX53JQ.js +0 -40
  153. package/dist/chunk-QSGW3ZWK.js +0 -45
  154. package/dist/chunk-WFUIE252.js +0 -61
  155. package/dist/styles/feedback-layout.css +0 -49
  156. package/dist/tooltip-Bf2KjRy8.d.ts +0 -14
  157. package/dist/use-toast-Dsw3yE2S.d.ts +0 -19
@@ -1,18 +1,19 @@
1
- import { Command, CommandList, CommandItem, CommandGroup } from './chunk-HTEL5DQI.js';
2
- import { Input } from './chunk-VOHTRR5X.js';
1
+ import { Command, CommandList, CommandItem, CommandGroup } from './chunk-3R3QVJCB.js';
2
+ import { Input } from './chunk-BNXPDUO4.js';
3
3
  import { Button } from './chunk-M4PZNAMV.js';
4
4
  import { Popover, PopoverTrigger, PopoverContent } from './chunk-DY5C44UP.js';
5
- import { controlTriggerClass } from './chunk-IBK5D2Q6.js';
6
- import { useTranslation } from './chunk-TXRYSMOD.js';
5
+ import { controlTriggerClass, controlOpenRingClass } from './chunk-B4K4BXEF.js';
6
+ import { useTranslation } from './chunk-H2TX3OPW.js';
7
7
  import { cn } from './chunk-U7N2A7A3.js';
8
8
  import * as React from 'react';
9
9
  import * as SelectPrimitive from '@radix-ui/react-select';
10
- import { ChevronDown, ChevronUp, ChevronsUpDown, Check, Loader2 } from 'lucide-react';
10
+ import { ChevronDown, ChevronUp, ChevronsUpDown, Loader2 } from 'lucide-react';
11
11
  import { jsxs, jsx } from 'react/jsx-runtime';
12
12
 
13
13
  var DEBOUNCE_MS = 250;
14
14
  function SearchSelect({
15
- value = "",
15
+ value: valueProp,
16
+ defaultValue,
16
17
  onValueChange,
17
18
  options: staticOptions,
18
19
  loadOptions,
@@ -43,6 +44,9 @@ function SearchSelect({
43
44
  const [loading, setLoading] = React.useState(false);
44
45
  const [activeIndex, setActiveIndex] = React.useState(0);
45
46
  const [picked, setPicked] = React.useState(null);
47
+ const [internalValue, setInternalValue] = React.useState(defaultValue ?? "");
48
+ const isControlled = valueProp !== void 0;
49
+ const value = isControlled ? valueProp : internalValue;
46
50
  const reqId = React.useRef(0);
47
51
  const resolvedLoad = React.useMemo(
48
52
  () => loadOptions ?? (async ({ query: search }) => {
@@ -104,15 +108,18 @@ function SearchSelect({
104
108
  [grouped]
105
109
  );
106
110
  const resolvedPlaceholder = placeholder ?? t("dataEntry.searchSelect.placeholder");
107
- const currentLabel = value ? picked?.label ?? selectedLabel ?? resolvedPlaceholder : resolvedPlaceholder;
111
+ const selectedOption = value ? [picked, ...staticOptions ?? [], ...loaded].find((option) => option?.value === value) ?? null : null;
112
+ const currentLabel = value ? selectedOption?.label ?? selectedLabel ?? value : resolvedPlaceholder;
108
113
  const select = (option) => {
109
114
  if (option.disabled) return;
110
115
  setPicked(option);
116
+ if (!isControlled) setInternalValue(option.value);
111
117
  onValueChange?.(option.value, option);
112
118
  setOpen(false);
113
119
  };
114
120
  const clear = () => {
115
121
  setPicked(null);
122
+ if (!isControlled) setInternalValue("");
116
123
  onValueChange?.("", void 0);
117
124
  setOpen(false);
118
125
  };
@@ -159,7 +166,7 @@ function SearchSelect({
159
166
  "aria-expanded": open,
160
167
  disabled,
161
168
  "data-testid": dataTestId,
162
- className: cn("w-full justify-between font-normal", className),
169
+ className: cn("w-full justify-between font-normal", controlOpenRingClass, className),
163
170
  children: [
164
171
  /* @__PURE__ */ jsx("span", { className: cn("truncate text-start", !value && "text-muted-foreground"), children: currentLabel }),
165
172
  /* @__PURE__ */ jsx(ChevronsUpDown, { className: "ms-2 size-4 shrink-0 opacity-50", "aria-hidden": "true" })
@@ -198,7 +205,7 @@ function SearchSelect({
198
205
  children: [
199
206
  clearable && value ? /* @__PURE__ */ jsx(CommandItem, { value: "", "data-testid": optionTestId("none"), onSelect: clear, children: /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-sm", children: clearLabel ?? t("dataEntry.searchSelect.clear") }) }) : null,
200
207
  grouped.map((group) => {
201
- const rows = group.items.map(({ option, index }) => /* @__PURE__ */ jsxs(
208
+ const rows = group.items.map(({ option, index }) => /* @__PURE__ */ jsx(
202
209
  CommandItem,
203
210
  {
204
211
  id: optionDomId(option.value),
@@ -207,16 +214,19 @@ function SearchSelect({
207
214
  "data-testid": optionTestId(option.value),
208
215
  "aria-selected": activeIndex === index,
209
216
  disabled: option.disabled,
210
- className: activeIndex === index ? "bg-accent text-accent-foreground" : void 0,
217
+ className: cn(
218
+ // Selected = persistent bg-accent + medium weight (NO check icon — saves width),
219
+ // matching the plain SelectItem's `data-[state=checked]` convention; active =
220
+ // hover/keyboard accent. Same bg so selection stays coherent across both Selects.
221
+ value === option.value && "bg-accent text-foreground font-medium",
222
+ activeIndex === index && "bg-accent text-accent-foreground"
223
+ ),
211
224
  onMouseEnter: () => setActiveIndex(index),
212
225
  onSelect: () => select(option),
213
- children: [
214
- renderOption ? /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: renderOption(option) }) : /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [
215
- /* @__PURE__ */ jsx("span", { className: "truncate text-sm", children: option.label }),
216
- option.sublabel ? /* @__PURE__ */ jsx("span", { className: "text-muted-foreground truncate text-xs", children: option.sublabel }) : null
217
- ] }),
218
- value === option.value ? /* @__PURE__ */ jsx(Check, { className: "text-primary size-4 shrink-0", "aria-hidden": "true" }) : null
219
- ]
226
+ children: renderOption ? /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: renderOption(option) }) : /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [
227
+ /* @__PURE__ */ jsx("span", { className: "truncate text-sm", children: option.label }),
228
+ option.sublabel ? /* @__PURE__ */ jsx("span", { className: "text-muted-foreground truncate text-xs", children: option.sublabel }) : null
229
+ ] })
220
230
  },
221
231
  option.value
222
232
  ));
@@ -374,7 +384,8 @@ function DataSelect({
374
384
  options = [],
375
385
  loadOptions,
376
386
  showSearch,
377
- value = "",
387
+ value,
388
+ defaultValue,
378
389
  onValueChange,
379
390
  renderOption,
380
391
  selectedLabel,
@@ -396,6 +407,7 @@ function DataSelect({
396
407
  SearchSelect,
397
408
  {
398
409
  value,
410
+ defaultValue,
399
411
  onValueChange,
400
412
  options,
401
413
  loadOptions,
@@ -431,6 +443,7 @@ function DataSelect({
431
443
  {
432
444
  "data-slot": "select",
433
445
  value: value || void 0,
446
+ defaultValue: defaultValue || void 0,
434
447
  onValueChange: (next) => onValueChange?.(
435
448
  next,
436
449
  options.find((option) => option.value === next)
@@ -1,4 +1,4 @@
1
- import { tableHeadHeightClass } from './chunk-IBK5D2Q6.js';
1
+ import { tableHeadHeightClass } from './chunk-B4K4BXEF.js';
2
2
  import { cn } from './chunk-U7N2A7A3.js';
3
3
  import * as React from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
@@ -1,10 +1,11 @@
1
1
  import { normalizeTreeOptions, collectAllExpandableKeys, filterVisibleTree, flattenVisibleTree, findNodeByValue, reactNodeText, getDescendantValues } from './chunk-SMLKNECP.js';
2
- import { Command, CommandInput } from './chunk-HTEL5DQI.js';
2
+ import { Command, CommandInput } from './chunk-3R3QVJCB.js';
3
3
  import { Checkbox } from './chunk-BE6GJGKJ.js';
4
4
  import { Button } from './chunk-M4PZNAMV.js';
5
5
  import { Popover, PopoverTrigger, PopoverContent } from './chunk-DY5C44UP.js';
6
6
  import { ScrollArea } from './chunk-3KPEZ5CF.js';
7
- import { useTranslation } from './chunk-TXRYSMOD.js';
7
+ import { controlOpenRingClass } from './chunk-B4K4BXEF.js';
8
+ import { useTranslation } from './chunk-H2TX3OPW.js';
8
9
  import { cn } from './chunk-U7N2A7A3.js';
9
10
  import * as React from 'react';
10
11
  import { X, ChevronsUpDown, ChevronDown, ChevronRight } from 'lucide-react';
@@ -171,6 +172,7 @@ function TreeSelectRoot({
171
172
  disabled,
172
173
  className: cn(
173
174
  "w-full justify-between font-normal",
175
+ controlOpenRingClass,
174
176
  !displayKeys.length && "text-muted-foreground",
175
177
  className
176
178
  ),
@@ -1,5 +1,5 @@
1
- import { toneNeutralClass, toneMutedClass, toneInfoClass, toneDestructiveClass, toneWarningClass, toneSuccessClass } from './chunk-IBK5D2Q6.js';
2
- import { useTranslation } from './chunk-TXRYSMOD.js';
1
+ import { toneNeutralClass, toneMutedClass, toneInfoClass, toneDestructiveClass, toneWarningClass, toneSuccessClass } from './chunk-B4K4BXEF.js';
2
+ import { useTranslation } from './chunk-H2TX3OPW.js';
3
3
  import { cn } from './chunk-U7N2A7A3.js';
4
4
  import { cva } from 'class-variance-authority';
5
5
  import { XCircle, Pause, CheckCircle2, Circle, Trash2, AlertCircle, Clock, Play } from 'lucide-react';
@@ -190,7 +190,9 @@ var en_default = {
190
190
  ariaLabel: "Carousel",
191
191
  slideLabel: "{index} of {total}",
192
192
  previous: "Previous",
193
- next: "Next"
193
+ next: "Next",
194
+ dotsLabel: "Choose slide",
195
+ goToSlide: "Go to slide {index}"
194
196
  }
195
197
  },
196
198
  ui: {
@@ -455,7 +457,9 @@ var ja_default = {
455
457
  ariaLabel: "\u30AB\u30EB\u30FC\u30BB\u30EB",
456
458
  slideLabel: "{total} \u4EF6\u4E2D {index} \u4EF6\u76EE",
457
459
  previous: "\u524D\u3078",
458
- next: "\u6B21\u3078"
460
+ next: "\u6B21\u3078",
461
+ dotsLabel: "\u30B9\u30E9\u30A4\u30C9\u3092\u9078\u629E",
462
+ goToSlide: "{index} \u756A\u76EE\u306E\u30B9\u30E9\u30A4\u30C9\u3078"
459
463
  }
460
464
  },
461
465
  ui: {
@@ -720,7 +724,9 @@ var vi_default = {
720
724
  ariaLabel: "B\u0103ng chuy\u1EC1n",
721
725
  slideLabel: "{index} / {total}",
722
726
  previous: "Tr\u01B0\u1EDBc",
723
- next: "Sau"
727
+ next: "Sau",
728
+ dotsLabel: "Ch\u1ECDn slide",
729
+ goToSlide: "\u0110\u1EBFn slide {index}"
724
730
  }
725
731
  },
726
732
  ui: {
@@ -1,5 +1,5 @@
1
1
  import { buttonVariants } from './chunk-M4PZNAMV.js';
2
- import { controlIconSmClass } from './chunk-IBK5D2Q6.js';
2
+ import { controlIconSmClass } from './chunk-B4K4BXEF.js';
3
3
  import { cn } from './chunk-U7N2A7A3.js';
4
4
  import { ChevronLeft, ChevronRight } from 'lucide-react';
5
5
  import { DayPicker } from 'react-day-picker';
@@ -1,9 +1,9 @@
1
- import { Calendar } from './chunk-FTOG7D4T.js';
2
- import { Input } from './chunk-VOHTRR5X.js';
1
+ import { Calendar } from './chunk-KQ36FDEE.js';
2
+ import { Input } from './chunk-BNXPDUO4.js';
3
3
  import { Button } from './chunk-M4PZNAMV.js';
4
4
  import { Popover, PopoverTrigger, PopoverContent } from './chunk-DY5C44UP.js';
5
- import { useTranslation, usePickerLocales } from './chunk-TXRYSMOD.js';
6
- import { toIsoDate, parseDateInput } from './chunk-3ELRYXJK.js';
5
+ import { useTranslation, usePickerLocales } from './chunk-H2TX3OPW.js';
6
+ import { toIsoDate, parseDateInput } from './chunk-JEIUEOTJ.js';
7
7
  import { cn } from './chunk-U7N2A7A3.js';
8
8
  import * as React from 'react';
9
9
  import { CalendarIcon } from 'lucide-react';
@@ -1,9 +1,9 @@
1
- import { Tooltip, TooltipTrigger, TooltipContent } from './chunk-32WO3YLB.js';
2
1
  import { DropdownMenu, DropdownMenuTrigger } from './chunk-LMKUKCTN.js';
2
+ import { Tooltip, TooltipTrigger, TooltipContent } from './chunk-32WO3YLB.js';
3
3
  import { Collapsible, CollapsibleTrigger, CollapsibleContent } from './chunk-DV52WNXO.js';
4
4
  import { densityClass, pageContainerVariantClass } from './chunk-INIIF7F7.js';
5
5
  import { Popover, PopoverTrigger, PopoverContent } from './chunk-DY5C44UP.js';
6
- import { useTranslation } from './chunk-TXRYSMOD.js';
6
+ import { useTranslation } from './chunk-H2TX3OPW.js';
7
7
  import { cn } from './chunk-U7N2A7A3.js';
8
8
  import { ChevronRight, ChevronDown, PanelLeftOpen, PanelLeftClose, Search, Bell, SlidersHorizontal } from 'lucide-react';
9
9
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -472,23 +472,6 @@ function Topbar({
472
472
  ) : null
473
473
  ] });
474
474
  }
475
- function resolveColumns(columns) {
476
- if (typeof columns === "number") {
477
- return {
478
- "--responsive-grid-sm": Math.min(columns, 2),
479
- "--responsive-grid-md": Math.min(columns, 3),
480
- "--responsive-grid-lg": columns
481
- };
482
- }
483
- return {
484
- "--responsive-grid-sm": columns.sm ?? 1,
485
- "--responsive-grid-md": columns.md ?? columns.sm ?? 1,
486
- "--responsive-grid-lg": columns.lg ?? columns.md ?? columns.sm ?? 1
487
- };
488
- }
489
- function ResponsiveGrid({ columns = 4, children }) {
490
- return /* @__PURE__ */ jsx("div", { className: "ui-responsive-grid", style: resolveColumns(columns), children });
491
- }
492
475
  function SplitPane({ children, aside, asideWidth = "md" }) {
493
476
  return /* @__PURE__ */ jsxs("div", { className: "ui-split-pane", "data-aside-width": asideWidth, children: [
494
477
  /* @__PURE__ */ jsx("div", { className: "ui-split-pane-main", children }),
@@ -496,4 +479,4 @@ function SplitPane({ children, aside, asideWidth = "md" }) {
496
479
  ] });
497
480
  }
498
481
 
499
- export { AppShell, Breadcrumb, PageContainer, ResponsiveGrid, Sidebar, SidebarHeader, SidebarItem, SidebarSection, SplitPane, Topbar };
482
+ export { AppShell, Breadcrumb, PageContainer, Sidebar, SidebarHeader, SidebarItem, SidebarSection, SplitPane, Topbar };
@@ -1,5 +1,5 @@
1
- import { controlIconClass } from './chunk-IBK5D2Q6.js';
2
- import { useTranslation } from './chunk-TXRYSMOD.js';
1
+ import { controlIconClass } from './chunk-B4K4BXEF.js';
2
+ import { useTranslation } from './chunk-H2TX3OPW.js';
3
3
  import { cn } from './chunk-U7N2A7A3.js';
4
4
  import { Check, Loader2, X, Circle } from 'lucide-react';
5
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,6 +1,6 @@
1
- import { Input } from './chunk-VOHTRR5X.js';
2
- import { controlIconClass } from './chunk-IBK5D2Q6.js';
3
- import { useTranslation } from './chunk-TXRYSMOD.js';
1
+ import { Input } from './chunk-BNXPDUO4.js';
2
+ import { controlIconClass } from './chunk-B4K4BXEF.js';
3
+ import { useTranslation } from './chunk-H2TX3OPW.js';
4
4
  import { cn } from './chunk-U7N2A7A3.js';
5
5
  import * as React from 'react';
6
6
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -0,0 +1,12 @@
1
+ // src/components/feedback/overlay-header-tone.ts
2
+ var overlayHeaderToneClass = {
3
+ default: "",
4
+ success: "bg-success/10",
5
+ warning: "bg-warning/10",
6
+ destructive: "bg-destructive/10",
7
+ info: "bg-info/10",
8
+ muted: "bg-muted",
9
+ neutral: "bg-muted"
10
+ };
11
+
12
+ export { overlayHeaderToneClass };
@@ -1,9 +1,9 @@
1
- import { formatBytes } from './chunk-FK5QEFVY.js';
2
- import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './chunk-LCQFYL44.js';
3
1
  import { Slider } from './chunk-CRERCLIZ.js';
2
+ import { formatBytes } from './chunk-GDHDJAVB.js';
3
+ import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './chunk-7MXIPSYM.js';
4
4
  import { Button } from './chunk-M4PZNAMV.js';
5
- import { controlIconClass } from './chunk-IBK5D2Q6.js';
6
- import { useTranslation } from './chunk-TXRYSMOD.js';
5
+ import { controlIconClass } from './chunk-B4K4BXEF.js';
6
+ import { useTranslation } from './chunk-H2TX3OPW.js';
7
7
  import { cn } from './chunk-U7N2A7A3.js';
8
8
  import * as React2 from 'react';
9
9
  import { Upload as Upload$1, ImagePlus, Camera, Trash2, RotateCcw, X } from 'lucide-react';
@@ -484,7 +484,7 @@ function Upload({
484
484
  "aria-label": t("dataEntry.upload.avatarLabel"),
485
485
  children: [
486
486
  !showPlaceholder && item?.previewUrl ? /* @__PURE__ */ jsx("img", { src: item.previewUrl, alt: "", className: "size-full object-cover" }) : /* @__PURE__ */ jsx("span", { className: "text-muted-foreground flex size-full items-center justify-center", children: /* @__PURE__ */ jsx(Camera, { className: controlIconClass, "aria-hidden": "true" }) }),
487
- !disabled && /* @__PURE__ */ jsx("span", { className: "absolute inset-x-0 bottom-0 bg-black/50 py-1 text-center text-[10px] text-white", children: t("dataEntry.upload.change") })
487
+ !disabled && /* @__PURE__ */ jsx("span", { className: "text-2xs absolute inset-x-0 bottom-0 bg-black/50 py-1 text-center text-white", children: t("dataEntry.upload.change") })
488
488
  ]
489
489
  }
490
490
  ),
@@ -1,7 +1,7 @@
1
- import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-2TYRT5XH.js';
1
+ import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-I2CYVA7B.js';
2
2
  import { Button } from './chunk-M4PZNAMV.js';
3
- import { useOptionalAppContext, useTranslation, APP_TIME_FORMAT_OPTIONS, getTimeFormatLabel, resolveTimezonePickerOptions, getTimezoneLabel, APP_LOCALES } from './chunk-TXRYSMOD.js';
4
- import { APP_DATE_FORMAT_OPTIONS, getDateFormatLabel } from './chunk-3ELRYXJK.js';
3
+ import { useOptionalAppContext, useTranslation, APP_TIME_FORMAT_OPTIONS, getTimeFormatLabel, resolveTimezonePickerOptions, getTimezoneLabel, APP_LOCALES } from './chunk-H2TX3OPW.js';
4
+ import { APP_DATE_FORMAT_OPTIONS, getDateFormatLabel } from './chunk-JEIUEOTJ.js';
5
5
  import { cn } from './chunk-U7N2A7A3.js';
6
6
  import * as React from 'react';
7
7
  import { useId } from 'react';
@@ -106,6 +106,11 @@ var VOCABULARY_REGISTRY = {
106
106
  category: "shared",
107
107
  description: "Radix asChild polymorphism"
108
108
  },
109
+ WidthProp: {
110
+ file: "vocabulary/shared.prop.ts",
111
+ category: "shared",
112
+ description: "Explicit layout length (number\u2192px | CSS string) \u2014 NOT the SizeProp tier"
113
+ },
109
114
  // content.prop.ts
110
115
  TitleProp: {
111
116
  file: "vocabulary/content.prop.ts",
@@ -204,6 +209,16 @@ var VOCABULARY_REGISTRY = {
204
209
  category: "interaction",
205
210
  description: "Shared size names xs | sm | md | lg"
206
211
  },
212
+ FormLayoutProp: {
213
+ file: "vocabulary/interaction.prop.ts",
214
+ category: "interaction",
215
+ description: "Form label layout: vertical | horizontal | inline"
216
+ },
217
+ BreakpointProp: {
218
+ file: "vocabulary/interaction.prop.ts",
219
+ category: "interaction",
220
+ description: "Responsive breakpoint name sm | md | lg | xl (mobile-first)"
221
+ },
207
222
  ConfirmVariantProp: {
208
223
  file: "vocabulary/interaction.prop.ts",
209
224
  category: "interaction",
@@ -412,10 +427,23 @@ var COMPONENT_PROP_REGISTRY = {
412
427
  file: "components/data-entry.prop.ts",
413
428
  vocabulary: ["PlaceholderProp", "DisabledProp"]
414
429
  },
430
+ FormProp: {
431
+ group: "data-entry",
432
+ file: "components/data-entry.prop.ts",
433
+ vocabulary: ["FormLayoutProp", "WidthProp", "BreakpointProp", "DensityProp"]
434
+ },
415
435
  FormFieldProp: {
416
436
  group: "data-entry",
417
437
  file: "components/data-entry.prop.ts",
418
- vocabulary: ["IdProp", "LabelProp", "RequiredProp", "HelperProp", "ErrorProp"]
438
+ vocabulary: [
439
+ "IdProp",
440
+ "LabelProp",
441
+ "RequiredProp",
442
+ "HelperProp",
443
+ "ErrorProp",
444
+ "FormLayoutProp",
445
+ "WidthProp"
446
+ ]
419
447
  },
420
448
  SearchInputProp: {
421
449
  group: "data-entry",
@@ -496,7 +524,7 @@ var COMPONENT_PROP_REGISTRY = {
496
524
  "IdProp",
497
525
  "ClassNameProp"
498
526
  ],
499
- note: "Deprecated \u2014 the searchable engine behind `<Select options showSearch>`; prefer Select."
527
+ note: "Internal \u2014 the searchable engine behind `<Select options showSearch>` (not public API); use Select."
500
528
  },
501
529
  SelectDataProp: {
502
530
  group: "data-entry",
@@ -0,0 +1,177 @@
1
+ import { overlayHeaderToneClass } from './chunk-VU4GFGDG.js';
2
+ import { cn } from './chunk-U7N2A7A3.js';
3
+ import * as React from 'react';
4
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
5
+ import { cva } from 'class-variance-authority';
6
+ import { X } from 'lucide-react';
7
+ import { jsx, jsxs } from 'react/jsx-runtime';
8
+
9
+ var toCssLength = (v) => typeof v === "number" ? `${v}px` : v;
10
+ function Sheet(props) {
11
+ return /* @__PURE__ */ jsx(DialogPrimitive.Root, { "data-slot": "sheet", ...props });
12
+ }
13
+ function SheetTrigger(props) {
14
+ return /* @__PURE__ */ jsx(DialogPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
15
+ }
16
+ function SheetClose(props) {
17
+ return /* @__PURE__ */ jsx(DialogPrimitive.Close, { "data-slot": "sheet-close", ...props });
18
+ }
19
+ function SheetPortal(props) {
20
+ return /* @__PURE__ */ jsx(DialogPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
21
+ }
22
+ var SheetOverlay = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
23
+ DialogPrimitive.Overlay,
24
+ {
25
+ ref,
26
+ "data-slot": "sheet-overlay",
27
+ className: cn(
28
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
29
+ className
30
+ ),
31
+ ...props
32
+ }
33
+ ));
34
+ SheetOverlay.displayName = DialogPrimitive.Overlay.displayName;
35
+ var sheetVariants = cva(
36
+ "fixed z-50 flex flex-col gap-[var(--space-chrome-gap)] bg-background px-[var(--sheet-pad-x)] py-[var(--sheet-pad-y)] shadow-lg transition ease-in-out data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:animate-in data-[state=open]:duration-500",
37
+ {
38
+ variants: {
39
+ side: {
40
+ right: "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-md",
41
+ left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-md",
42
+ top: "inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
43
+ bottom: "inset-x-0 bottom-0 h-auto border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom"
44
+ }
45
+ },
46
+ defaultVariants: { side: "right" }
47
+ }
48
+ );
49
+ var SheetContent = React.forwardRef(
50
+ ({ side = "right", className, children, showCloseButton = true, width, style, ...props }, ref) => {
51
+ const horizontal = side === "left" || side === "right";
52
+ const widthSet = width != null && horizontal;
53
+ const mergedStyle = widthSet ? { ...style, ["--sheet-width"]: toCssLength(width) } : style;
54
+ return /* @__PURE__ */ jsxs(SheetPortal, { children: [
55
+ /* @__PURE__ */ jsx(SheetOverlay, {}),
56
+ /* @__PURE__ */ jsxs(
57
+ DialogPrimitive.Content,
58
+ {
59
+ ref,
60
+ "data-slot": "sheet-content",
61
+ style: mergedStyle,
62
+ className: cn(
63
+ sheetVariants({ side }),
64
+ // `width` caps at the viewport: full-width panel on a small screen, capped on a large one.
65
+ widthSet && "w-[min(var(--sheet-width),100%)] max-w-none sm:max-w-none",
66
+ className
67
+ ),
68
+ ...props,
69
+ children: [
70
+ children,
71
+ showCloseButton ? /* @__PURE__ */ jsxs(
72
+ DialogPrimitive.Close,
73
+ {
74
+ "data-slot": "sheet-close",
75
+ className: "ring-offset-background focus:ring-ring absolute end-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none",
76
+ children: [
77
+ /* @__PURE__ */ jsx(X, { className: "size-4", "aria-hidden": "true" }),
78
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
79
+ ]
80
+ }
81
+ ) : null
82
+ ]
83
+ }
84
+ )
85
+ ] });
86
+ }
87
+ );
88
+ SheetContent.displayName = DialogPrimitive.Content.displayName;
89
+ var SheetHeader = ({
90
+ className,
91
+ title,
92
+ subtitle,
93
+ extra,
94
+ tone = "default",
95
+ children,
96
+ ...props
97
+ }) => {
98
+ return /* @__PURE__ */ jsx(
99
+ "div",
100
+ {
101
+ "data-slot": "sheet-header",
102
+ "data-tone": tone,
103
+ className: cn(
104
+ "border-border -mx-[var(--sheet-pad-x)] -mt-[var(--sheet-pad-y)] flex flex-col gap-1.5 border-b px-[var(--sheet-pad-x)] py-[var(--sheet-pad-y)]",
105
+ overlayHeaderToneClass[tone],
106
+ className
107
+ ),
108
+ ...props,
109
+ children: children ?? // `pe-8` reserves room for the absolute close button (end-4) so title/extra never sit under it.
110
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3 pe-8", children: [
111
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-1", children: [
112
+ title != null && /* @__PURE__ */ jsx(SheetTitle, { children: title }),
113
+ subtitle != null && /* @__PURE__ */ jsx(SheetDescription, { children: subtitle })
114
+ ] }),
115
+ extra != null && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-2 whitespace-nowrap", children: extra })
116
+ ] })
117
+ }
118
+ );
119
+ };
120
+ var SheetBody = ({ className, ...props }) => (
121
+ // Scrollable region between a fixed header and a pinned footer (rule #41). Full-bleed horizontally
122
+ // (`-mx-6 px-6`) so content aligns to the sheet edge while the 3px focus ring of a full-width
123
+ // control keeps 24px of room and never clips against the scroll container's computed
124
+ // `overflow-x`. `py-1`/`scroll-py-1` keep a focused control's ring visible at the scroll edges.
125
+ // Use this instead of a hand-rolled `<div className="overflow-y-auto">` (which clips rings).
126
+ /* @__PURE__ */ jsx(
127
+ "div",
128
+ {
129
+ "data-slot": "sheet-body",
130
+ className: cn(
131
+ "-mx-[var(--sheet-pad-x)] min-h-0 flex-1 scroll-py-1 overflow-y-auto px-[var(--sheet-pad-x)] py-1",
132
+ className
133
+ ),
134
+ ...props
135
+ }
136
+ )
137
+ );
138
+ var SheetFooter = ({ className, ...props }) => (
139
+ // Pinned action bar (Ant Design Drawer footer): sticks to the bottom, full-bleed top border, actions
140
+ // RIGHT-aligned (primary rightmost). A destructive / clear / reset action goes far-LEFT — give it
141
+ // `className="mr-auto"`. See cardinal rule "Drawer & dialog footer layout".
142
+ // Owns its full vertical padding (symmetric 16/16) via `py-4`; `-mb-6` cancels SheetContent's
143
+ // `p-6` bottom so the footer doesn't inherit an asymmetric 16-top / 24-bottom rhythm.
144
+ /* @__PURE__ */ jsx(
145
+ "div",
146
+ {
147
+ "data-slot": "sheet-footer",
148
+ className: cn(
149
+ "border-border -mx-[var(--sheet-pad-x)] mt-auto -mb-[var(--sheet-pad-y)] flex flex-wrap items-center justify-end gap-2 border-t px-[var(--sheet-pad-x)] py-[var(--sheet-pad-y)]",
150
+ className
151
+ ),
152
+ ...props
153
+ }
154
+ )
155
+ );
156
+ var SheetTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
157
+ DialogPrimitive.Title,
158
+ {
159
+ ref,
160
+ "data-slot": "sheet-title",
161
+ className: cn("text-foreground text-lg font-medium", className),
162
+ ...props
163
+ }
164
+ ));
165
+ SheetTitle.displayName = DialogPrimitive.Title.displayName;
166
+ var SheetDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
167
+ DialogPrimitive.Description,
168
+ {
169
+ ref,
170
+ "data-slot": "sheet-description",
171
+ className: cn("text-muted-foreground text-sm", className),
172
+ ...props
173
+ }
174
+ ));
175
+ SheetDescription.displayName = DialogPrimitive.Description.displayName;
176
+
177
+ export { Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger };
@@ -1,7 +1,7 @@
1
- import { humanError } from './chunk-FK5QEFVY.js';
1
+ import { humanError } from './chunk-GDHDJAVB.js';
2
2
  import { Flex } from './chunk-INIIF7F7.js';
3
3
  import { Button } from './chunk-M4PZNAMV.js';
4
- import { useTranslation } from './chunk-TXRYSMOD.js';
4
+ import { useTranslation } from './chunk-H2TX3OPW.js';
5
5
  import { cn } from './chunk-U7N2A7A3.js';
6
6
  import * as React from 'react';
7
7
  import { Info, CheckCircle2, TriangleAlert, AlertCircle, X, RefreshCw } from 'lucide-react';
@@ -1,6 +1,6 @@
1
- import { Input } from './chunk-VOHTRR5X.js';
1
+ import { Input } from './chunk-BNXPDUO4.js';
2
2
  import { Label } from './chunk-7PWBC4BY.js';
3
- import { useTranslation } from './chunk-TXRYSMOD.js';
3
+ import { useTranslation } from './chunk-H2TX3OPW.js';
4
4
  import { useDebouncedValue } from './chunk-LFW37FGG.js';
5
5
  import { cn } from './chunk-U7N2A7A3.js';
6
6
  import * as React from 'react';
@@ -1,5 +1,5 @@
1
- import { Input } from './chunk-VOHTRR5X.js';
2
- import { useTranslation } from './chunk-TXRYSMOD.js';
1
+ import { Input } from './chunk-BNXPDUO4.js';
2
+ import { useTranslation } from './chunk-H2TX3OPW.js';
3
3
  import { cn } from './chunk-U7N2A7A3.js';
4
4
  import * as React2 from 'react';
5
5
  import { EyeOff, Eye, Minus, Star, X } from 'lucide-react';