@godxjp/ui 13.0.0 → 13.2.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 (103) hide show
  1. package/dist/{checkbox-CwfNgQ9d.d.ts → checkbox-DKaBna6z.d.ts} +1 -1
  2. package/dist/{chunk-55S5N667.js → chunk-33AJDSML.js} +1 -1
  3. package/dist/{chunk-VNQ2NW22.js → chunk-4ADB5EKN.js} +3 -3
  4. package/dist/{chunk-WIRQNCCP.js → chunk-5NIGHXT5.js} +2 -2
  5. package/dist/{chunk-AKFR72DQ.js → chunk-74OPJG3N.js} +48 -50
  6. package/dist/{chunk-MTJHEQ46.js → chunk-BABHI2W7.js} +49 -51
  7. package/dist/{chunk-M4PZNAMV.js → chunk-E6J7ZTDM.js} +17 -8
  8. package/dist/{chunk-KQ36FDEE.js → chunk-HBOL5LSC.js} +1 -1
  9. package/dist/{chunk-XUEDRPWF.js → chunk-IMERLXSC.js} +2 -2
  10. package/dist/{chunk-NVNDO3FI.js → chunk-JAEA2IBC.js} +2 -2
  11. package/dist/{chunk-572FHZ3M.js → chunk-LEVFHRHU.js} +2 -2
  12. package/dist/{chunk-RX2F2U6D.js → chunk-NXF64JCT.js} +27 -14
  13. package/dist/{chunk-IYLJQVKV.js → chunk-SSNPCHG6.js} +2 -2
  14. package/dist/{chunk-CRERCLIZ.js → chunk-TBJBVEIP.js} +21 -2
  15. package/dist/{chunk-YVZPAN2W.js → chunk-UVJE3FYT.js} +1 -1
  16. package/dist/{chunk-IZGLEPGW.js → chunk-XGXI52Z7.js} +21 -4
  17. package/dist/{chunk-IWAIIBSW.js → chunk-XY2QN4VR.js} +1 -1
  18. package/dist/{chunk-XTVUYEJD.js → chunk-Z37463ZK.js} +60 -2
  19. package/dist/{chunk-WNOX32KG.js → chunk-Z652BSX7.js} +3 -3
  20. package/dist/{chunk-5KK3KJ6L.js → chunk-ZKUB7DHO.js} +1 -1
  21. package/dist/components/admin/index.d.ts +9 -9
  22. package/dist/components/admin/index.js +27 -27
  23. package/dist/components/data-display/badge.d.ts +8 -5
  24. package/dist/components/data-display/badge.js +1 -1
  25. package/dist/components/data-display/index.d.ts +4 -4
  26. package/dist/components/data-display/index.js +6 -6
  27. package/dist/components/data-entry/calendar.d.ts +3 -3
  28. package/dist/components/data-entry/calendar.js +2 -2
  29. package/dist/components/data-entry/cascader.d.ts +3 -3
  30. package/dist/components/data-entry/cascader.js +2 -2
  31. package/dist/components/data-entry/checkbox.d.ts +4 -4
  32. package/dist/components/data-entry/color-picker.d.ts +3 -3
  33. package/dist/components/data-entry/date-picker.d.ts +3 -3
  34. package/dist/components/data-entry/date-picker.js +3 -3
  35. package/dist/components/data-entry/date-range-picker.d.ts +3 -3
  36. package/dist/components/data-entry/date-range-picker.js +3 -3
  37. package/dist/components/data-entry/index.d.ts +5 -5
  38. package/dist/components/data-entry/index.js +19 -19
  39. package/dist/components/data-entry/radio.d.ts +3 -3
  40. package/dist/components/data-entry/select.d.ts +3 -3
  41. package/dist/components/data-entry/select.js +2 -2
  42. package/dist/components/data-entry/slider.d.ts +3 -3
  43. package/dist/components/data-entry/slider.js +1 -1
  44. package/dist/components/data-entry/switch.d.ts +3 -3
  45. package/dist/components/data-entry/time-picker.d.ts +3 -3
  46. package/dist/components/data-entry/time-picker.js +2 -2
  47. package/dist/components/data-entry/transfer.d.ts +4 -4
  48. package/dist/components/data-entry/transfer.js +4 -4
  49. package/dist/components/data-entry/tree-select.d.ts +3 -3
  50. package/dist/components/data-entry/tree-select.js +3 -3
  51. package/dist/components/data-entry/upload.d.ts +4 -4
  52. package/dist/components/data-entry/upload.js +6 -6
  53. package/dist/components/data-grid/index.js +5 -5
  54. package/dist/components/feedback/alert.d.ts +3 -3
  55. package/dist/components/feedback/alert.js +2 -2
  56. package/dist/components/feedback/dialog.d.ts +2 -2
  57. package/dist/components/feedback/dialog.js +4 -4
  58. package/dist/components/feedback/index.d.ts +2 -2
  59. package/dist/components/feedback/index.js +7 -7
  60. package/dist/components/feedback/sheet.d.ts +1 -1
  61. package/dist/components/feedback/sheet.js +1 -1
  62. package/dist/components/general/button.d.ts +5 -3
  63. package/dist/components/general/button.js +1 -1
  64. package/dist/components/general/index.d.ts +34 -3
  65. package/dist/components/general/index.js +46 -2
  66. package/dist/components/layout/index.js +3 -3
  67. package/dist/components/navigation/index.d.ts +6 -6
  68. package/dist/components/navigation/index.js +7 -7
  69. package/dist/components/navigation/pagination.d.ts +3 -3
  70. package/dist/components/navigation/pagination.js +3 -3
  71. package/dist/components/navigation/steps.d.ts +4 -4
  72. package/dist/components/query/index.d.ts +3 -3
  73. package/dist/components/query/index.js +2 -2
  74. package/dist/components/ui/index.d.ts +7 -7
  75. package/dist/components/ui/index.js +24 -24
  76. package/dist/{data-display.prop-BOtnzI17.d.ts → data-display.prop-BCC2zOTq.d.ts} +2 -2
  77. package/dist/{data-entry.prop-BGxD81Lf.d.ts → data-entry.prop-BGlwRXlJ.d.ts} +4 -2
  78. package/dist/{data-table-DO-gU4wJ.d.ts → data-table-B6HC3EFK.d.ts} +3 -3
  79. package/dist/{data.prop-D4uDw_SW.d.ts → data.prop-H9nROsUg.d.ts} +1 -1
  80. package/dist/{feedback.prop-CtrL24E1.d.ts → feedback.prop-sEx89LTF.d.ts} +1 -1
  81. package/dist/{filter-bar-tEwfKthz.d.ts → filter-bar-DPMQmIpX.d.ts} +1 -1
  82. package/dist/general.prop-4ERae5Sj.d.ts +46 -0
  83. package/dist/index.d.ts +9 -9
  84. package/dist/index.js +35 -35
  85. package/dist/interaction.prop-B44hePpl.d.ts +46 -0
  86. package/dist/{navigation.prop-Cc_Iu87S.d.ts → navigation.prop-DMbjEig7.d.ts} +1 -1
  87. package/dist/props/components/index.d.ts +8 -8
  88. package/dist/props/index.d.ts +8 -8
  89. package/dist/props/index.js +1 -1
  90. package/dist/props/registry.d.ts +47 -2
  91. package/dist/props/registry.js +1 -1
  92. package/dist/props/vocabulary/index.d.ts +2 -2
  93. package/dist/{query.prop-CyNxaCHe.d.ts → query.prop-cp6fEgOD.d.ts} +1 -1
  94. package/dist/{search-input-BPtjUAa1.d.ts → search-input-CxGW8_7q.d.ts} +1 -1
  95. package/dist/styles/badge-layout.css +4 -0
  96. package/dist/styles/dialog-layout.css +30 -11
  97. package/dist/styles/index.css +1 -0
  98. package/dist/styles/text-layout.css +119 -0
  99. package/package.json +1 -1
  100. package/dist/general.prop-1GgJkf4b.d.ts +0 -16
  101. package/dist/interaction.prop-R77MnAMZ.d.ts +0 -31
  102. package/dist/{chunk-DEUHS5A2.js → chunk-QATON677.js} +1 -1
  103. package/dist/{chunk-XZXE5KVV.js → chunk-ZFBIKJSJ.js} +1 -1
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
- import { b as CheckboxGroupProp } from './data-entry.prop-BGxD81Lf.js';
4
+ import { b as CheckboxGroupProp } from './data-entry.prop-BGlwRXlJ.js';
5
5
 
6
6
  declare function CheckboxGroup({ value: controlledValue, defaultValue, onValueChange, options, orientation, disabled, name, className, children, }: CheckboxGroupProp): react_jsx_runtime.JSX.Element;
7
7
 
@@ -1,6 +1,6 @@
1
1
  import { normalizeTreeOptions, formatPathLabels, getNodeByPath, filterTreeOptions, pathsEqual, pathKey } from './chunk-SMLKNECP.js';
2
2
  import { Command, CommandInput } from './chunk-3R3QVJCB.js';
3
- import { Button } from './chunk-M4PZNAMV.js';
3
+ import { Button } from './chunk-E6J7ZTDM.js';
4
4
  import { Popover, PopoverTrigger, PopoverContent } from './chunk-DY5C44UP.js';
5
5
  import { ScrollArea, ScrollBar } from './chunk-3KPEZ5CF.js';
6
6
  import { controlOpenRingClass } from './chunk-B4K4BXEF.js';
@@ -1,7 +1,7 @@
1
+ import { Slider } from './chunk-TBJBVEIP.js';
1
2
  import { formatBytes } from './chunk-GDHDJAVB.js';
2
- import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './chunk-WNOX32KG.js';
3
- import { Slider } from './chunk-CRERCLIZ.js';
4
- import { Button } from './chunk-M4PZNAMV.js';
3
+ import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './chunk-Z652BSX7.js';
4
+ import { Button } from './chunk-E6J7ZTDM.js';
5
5
  import { controlIconClass } from './chunk-B4K4BXEF.js';
6
6
  import { useTranslation } from './chunk-H2TX3OPW.js';
7
7
  import { cn } from './chunk-U7N2A7A3.js';
@@ -1,5 +1,5 @@
1
- import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-RX2F2U6D.js';
2
- import { Button } from './chunk-M4PZNAMV.js';
1
+ import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-NXF64JCT.js';
2
+ import { Button } from './chunk-E6J7ZTDM.js';
3
3
  import { useOptionalAppContext, useTranslation, APP_TIME_FORMAT_OPTIONS, getTimeFormatLabel, resolveTimezonePickerOptions, getTimezoneLabel, APP_LOCALES } from './chunk-H2TX3OPW.js';
4
4
  import { APP_DATE_FORMAT_OPTIONS, getDateFormatLabel } from './chunk-JEIUEOTJ.js';
5
5
  import { cn } from './chunk-U7N2A7A3.js';
@@ -1,13 +1,13 @@
1
- import { Calendar } from './chunk-KQ36FDEE.js';
1
+ import { Calendar } from './chunk-HBOL5LSC.js';
2
2
  import { Input } from './chunk-BNXPDUO4.js';
3
- import { Button } from './chunk-M4PZNAMV.js';
4
- import { Popover, PopoverTrigger, PopoverContent } from './chunk-DY5C44UP.js';
3
+ import { Button } from './chunk-E6J7ZTDM.js';
4
+ import { Popover, PopoverAnchor, PopoverTrigger, PopoverContent } from './chunk-DY5C44UP.js';
5
5
  import { useTranslation, usePickerLocales } from './chunk-H2TX3OPW.js';
6
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';
10
- import { jsxs, jsx } from 'react/jsx-runtime';
10
+ import { jsx, jsxs } from 'react/jsx-runtime';
11
11
 
12
12
  var ISO_HINT = "yyyy-mm-dd";
13
13
  function DateRangePicker({
@@ -47,7 +47,7 @@ function DateRangePicker({
47
47
  const next = { from: value?.from, to: value?.to, [edge]: parsed };
48
48
  emit(next.from || next.to ? next : void 0);
49
49
  };
50
- return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-1", className), children: [
50
+ return /* @__PURE__ */ jsx(Popover, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsx(PopoverAnchor, { asChild: true, children: /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-1", className), children: [
51
51
  /* @__PURE__ */ jsx(
52
52
  Input,
53
53
  {
@@ -114,51 +114,49 @@ function DateRangePicker({
114
114
  }
115
115
  }
116
116
  ),
117
- /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
118
- /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
119
- Button,
120
- {
121
- type: "button",
122
- variant: "ghost",
123
- size: "icon",
124
- disabled,
125
- tabIndex: -1,
126
- "aria-label": t("dataEntry.dateRangePicker.openCalendar") ?? "Open calendar",
127
- className: "text-muted-foreground shrink-0 hover:bg-transparent",
128
- children: /* @__PURE__ */ jsx(CalendarIcon, { className: "size-4 shrink-0", "aria-hidden": "true" })
129
- }
130
- ) }),
131
- /* @__PURE__ */ jsx(
132
- PopoverContent,
133
- {
134
- className: "w-auto p-0",
135
- align: "end",
136
- onOpenAutoFocus: (event) => event.preventDefault(),
137
- children: /* @__PURE__ */ jsx(
138
- Calendar,
139
- {
140
- mode: "range",
141
- selected: value,
142
- defaultMonth: value?.from,
143
- numberOfMonths: 2,
144
- onSelect: (range) => {
145
- emit(range);
146
- setFromText(toIsoDate(range?.from));
147
- setToText(toIsoDate(range?.to));
148
- },
149
- locale: dayPickerLocale,
150
- disabled: [
151
- ...fromDate ? [{ before: fromDate }] : [],
152
- ...toDate ? [{ after: toDate }] : []
153
- ],
154
- startMonth: fromDate,
155
- endMonth: toDate
156
- }
157
- )
158
- }
159
- )
160
- ] })
161
- ] });
117
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
118
+ Button,
119
+ {
120
+ type: "button",
121
+ variant: "ghost",
122
+ size: "icon",
123
+ disabled,
124
+ tabIndex: -1,
125
+ "aria-label": t("dataEntry.dateRangePicker.openCalendar") ?? "Open calendar",
126
+ className: "text-muted-foreground shrink-0 hover:bg-transparent",
127
+ children: /* @__PURE__ */ jsx(CalendarIcon, { className: "size-4 shrink-0", "aria-hidden": "true" })
128
+ }
129
+ ) }),
130
+ /* @__PURE__ */ jsx(
131
+ PopoverContent,
132
+ {
133
+ className: "w-auto p-0",
134
+ align: "start",
135
+ onOpenAutoFocus: (event) => event.preventDefault(),
136
+ children: /* @__PURE__ */ jsx(
137
+ Calendar,
138
+ {
139
+ mode: "range",
140
+ selected: value,
141
+ defaultMonth: value?.from,
142
+ numberOfMonths: 2,
143
+ onSelect: (range) => {
144
+ emit(range);
145
+ setFromText(toIsoDate(range?.from));
146
+ setToText(toIsoDate(range?.to));
147
+ },
148
+ locale: dayPickerLocale,
149
+ disabled: [
150
+ ...fromDate ? [{ before: fromDate }] : [],
151
+ ...toDate ? [{ after: toDate }] : []
152
+ ],
153
+ startMonth: fromDate,
154
+ endMonth: toDate
155
+ }
156
+ )
157
+ }
158
+ )
159
+ ] }) }) });
162
160
  }
163
161
 
164
162
  export { DateRangePicker };
@@ -1,13 +1,13 @@
1
- import { Calendar } from './chunk-KQ36FDEE.js';
1
+ import { Calendar } from './chunk-HBOL5LSC.js';
2
2
  import { Input } from './chunk-BNXPDUO4.js';
3
- import { Button } from './chunk-M4PZNAMV.js';
4
- import { Popover, PopoverTrigger, PopoverContent } from './chunk-DY5C44UP.js';
3
+ import { Button } from './chunk-E6J7ZTDM.js';
4
+ import { Popover, PopoverAnchor, PopoverTrigger, PopoverContent } from './chunk-DY5C44UP.js';
5
5
  import { useTranslation, usePickerLocales } from './chunk-H2TX3OPW.js';
6
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';
10
- import { jsxs, jsx } from 'react/jsx-runtime';
10
+ import { jsx, jsxs } from 'react/jsx-runtime';
11
11
 
12
12
  var ISO_HINT = "yyyy-mm-dd";
13
13
  function DatePicker({
@@ -50,8 +50,8 @@ function DatePicker({
50
50
  emit(parsed);
51
51
  }
52
52
  };
53
- return /* @__PURE__ */ jsxs("div", { className: cn("relative", className), children: [
54
- /* @__PURE__ */ jsx(
53
+ return /* @__PURE__ */ jsx(Popover, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxs("div", { className: cn("relative", className), children: [
54
+ /* @__PURE__ */ jsx(PopoverAnchor, { asChild: true, children: /* @__PURE__ */ jsx(
55
55
  Input,
56
56
  {
57
57
  id,
@@ -85,51 +85,49 @@ function DatePicker({
85
85
  setText(parsed ? toIsoDate(parsed) : toIsoDate(value));
86
86
  }
87
87
  }
88
- ),
89
- /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
90
- /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
91
- Button,
92
- {
93
- type: "button",
94
- variant: "ghost",
95
- size: "icon",
96
- disabled,
97
- tabIndex: -1,
98
- "aria-label": t("dataEntry.datePicker.openCalendar") ?? "Open calendar",
99
- className: "text-muted-foreground absolute inset-y-0 end-0 h-full px-2 hover:bg-transparent",
100
- children: /* @__PURE__ */ jsx(CalendarIcon, { className: "size-4 shrink-0", "aria-hidden": "true" })
101
- }
102
- ) }),
103
- /* @__PURE__ */ jsx(
104
- PopoverContent,
105
- {
106
- className: "w-auto p-0",
107
- align: "end",
108
- onOpenAutoFocus: (event) => event.preventDefault(),
109
- children: /* @__PURE__ */ jsx(
110
- Calendar,
111
- {
112
- mode: "single",
113
- selected: value,
114
- defaultMonth: value,
115
- onSelect: (date) => {
116
- emit(date);
117
- setText(toIsoDate(date));
118
- setOpen(false);
119
- },
120
- locale: dayPickerLocale,
121
- disabled: [
122
- ...fromDate ? [{ before: fromDate }] : [],
123
- ...toDate ? [{ after: toDate }] : []
124
- ],
125
- startMonth: fromDate,
126
- endMonth: toDate
127
- }
128
- )
129
- }
130
- )
131
- ] })
132
- ] });
88
+ ) }),
89
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
90
+ Button,
91
+ {
92
+ type: "button",
93
+ variant: "ghost",
94
+ size: "icon",
95
+ disabled,
96
+ tabIndex: -1,
97
+ "aria-label": t("dataEntry.datePicker.openCalendar") ?? "Open calendar",
98
+ className: "text-muted-foreground absolute inset-y-0 end-0 h-full px-2 hover:bg-transparent",
99
+ children: /* @__PURE__ */ jsx(CalendarIcon, { className: "size-4 shrink-0", "aria-hidden": "true" })
100
+ }
101
+ ) }),
102
+ /* @__PURE__ */ jsx(
103
+ PopoverContent,
104
+ {
105
+ className: "w-auto p-0",
106
+ align: "start",
107
+ onOpenAutoFocus: (event) => event.preventDefault(),
108
+ children: /* @__PURE__ */ jsx(
109
+ Calendar,
110
+ {
111
+ mode: "single",
112
+ selected: value,
113
+ defaultMonth: value,
114
+ onSelect: (date) => {
115
+ emit(date);
116
+ setText(toIsoDate(date));
117
+ setOpen(false);
118
+ },
119
+ locale: dayPickerLocale,
120
+ disabled: [
121
+ ...fromDate ? [{ before: fromDate }] : [],
122
+ ...toDate ? [{ after: toDate }] : []
123
+ ],
124
+ startMonth: fromDate,
125
+ endMonth: toDate
126
+ }
127
+ )
128
+ }
129
+ )
130
+ ] }) });
133
131
  }
134
132
 
135
133
  export { DatePicker };
@@ -10,6 +10,7 @@ var buttonVariants = cva("ui-button", {
10
10
  default: "ui-button--default bg-primary text-primary-foreground hover:bg-primary/90",
11
11
  destructive: "ui-button--destructive bg-destructive text-destructive-foreground hover:bg-destructive/90 focus-visible:ring-destructive/20",
12
12
  outline: "ui-button--outline border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",
13
+ dashed: "ui-button--dashed border border-dashed bg-background hover:bg-accent hover:text-accent-foreground",
13
14
  secondary: "ui-button--secondary bg-secondary text-secondary-foreground hover:bg-secondary/80",
14
15
  ghost: "ui-button--ghost hover:bg-accent hover:text-accent-foreground",
15
16
  link: "ui-button--link text-primary underline-offset-4 hover:underline"
@@ -17,19 +18,26 @@ var buttonVariants = cva("ui-button", {
17
18
  size: {
18
19
  default: "ui-button--default-size py-2 has-[>svg]:px-3",
19
20
  md: "ui-button--default-size py-2 has-[>svg]:px-3",
20
- xs: "h-[calc(var(--control-height)-0.75rem)] gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
21
- sm: "ui-button--sm gap-1.5 rounded-md has-[>svg]:px-2.5",
22
- lg: "ui-button--lg rounded-md has-[>svg]:px-4",
21
+ xs: "h-[calc(var(--control-height)-0.75rem)] gap-1 px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
22
+ sm: "ui-button--sm gap-1.5 has-[>svg]:px-2.5",
23
+ lg: "ui-button--lg has-[>svg]:px-4",
23
24
  icon: "ui-button--icon",
24
- "icon-xs": "size-[calc(var(--control-height)-0.75rem)] rounded-md [&_svg:not([class*='size-'])]:size-3",
25
+ "icon-xs": "size-[calc(var(--control-height)-0.75rem)] [&_svg:not([class*='size-'])]:size-3",
25
26
  "icon-sm": "size-[calc(var(--control-height)-0.5rem)]",
26
27
  "icon-lg": "size-[calc(var(--control-height)+0.25rem)]"
28
+ },
29
+ // Single source of corner radius (deterministic — no competing rounded-* utility): default uses
30
+ // the control radius token, pill is fully rounded, sharp is square.
31
+ shape: {
32
+ default: "rounded-md",
33
+ pill: "rounded-[var(--radius-pill)]",
34
+ sharp: "rounded-[var(--radius-sharp)]"
27
35
  }
28
36
  },
29
- defaultVariants: { variant: "default", size: "default" }
37
+ defaultVariants: { variant: "default", size: "default", shape: "default" }
30
38
  });
31
39
  var Button = React.forwardRef(
32
- ({ className, variant, size, asChild = false, ...props }, ref) => {
40
+ ({ className, variant, size, shape, asChild = false, ...props }, ref) => {
33
41
  const Comp = asChild ? Slot : "button";
34
42
  return /* @__PURE__ */ jsx(
35
43
  Comp,
@@ -37,13 +45,14 @@ var Button = React.forwardRef(
37
45
  "data-slot": "button",
38
46
  "data-variant": variant ?? "default",
39
47
  "data-size": size ?? "default",
48
+ "data-shape": shape ?? "default",
40
49
  className: cn(
41
- "inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none",
50
+ "inline-flex shrink-0 items-center justify-center gap-2 text-sm font-medium whitespace-nowrap transition-all outline-none",
42
51
  "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
43
52
  "disabled:pointer-events-none disabled:opacity-50",
44
53
  "aria-invalid:border-destructive aria-invalid:ring-destructive/20",
45
54
  "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
46
- buttonVariants({ variant, size, className })
55
+ buttonVariants({ variant, size, shape, className })
47
56
  ),
48
57
  ref,
49
58
  ...props
@@ -1,4 +1,4 @@
1
- import { buttonVariants } from './chunk-M4PZNAMV.js';
1
+ import { buttonVariants } from './chunk-E6J7ZTDM.js';
2
2
  import { controlIconSmClass } from './chunk-B4K4BXEF.js';
3
3
  import { cn } from './chunk-U7N2A7A3.js';
4
4
  import { ChevronLeft, ChevronRight } from 'lucide-react';
@@ -101,7 +101,7 @@ var SheetHeader = ({
101
101
  "data-slot": "sheet-header",
102
102
  "data-tone": tone,
103
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)]",
104
+ "-mx-[var(--sheet-pad-x)] -mt-[var(--sheet-pad-y)] flex flex-col gap-1.5 px-[var(--sheet-pad-x)] py-[var(--sheet-pad-y)]",
105
105
  overlayHeaderToneClass[tone],
106
106
  className
107
107
  ),
@@ -146,7 +146,7 @@ var SheetFooter = ({ className, ...props }) => (
146
146
  {
147
147
  "data-slot": "sheet-footer",
148
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)]",
149
+ "-mx-[var(--sheet-pad-x)] mt-auto -mb-[var(--sheet-pad-y)] flex flex-wrap items-center justify-end gap-2 px-[var(--sheet-pad-x)] py-[var(--sheet-pad-y)]",
150
150
  className
151
151
  ),
152
152
  ...props
@@ -1,7 +1,7 @@
1
- import { SearchInput } from './chunk-XZXE5KVV.js';
2
1
  import { reactNodeText } from './chunk-SMLKNECP.js';
2
+ import { SearchInput } from './chunk-ZFBIKJSJ.js';
3
3
  import { Checkbox } from './chunk-BE6GJGKJ.js';
4
- import { Button } from './chunk-M4PZNAMV.js';
4
+ import { Button } from './chunk-E6J7ZTDM.js';
5
5
  import { ScrollArea } from './chunk-3KPEZ5CF.js';
6
6
  import { useTranslation } from './chunk-H2TX3OPW.js';
7
7
  import { cn } from './chunk-U7N2A7A3.js';
@@ -1,5 +1,5 @@
1
- import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-RX2F2U6D.js';
2
- import { Button } from './chunk-M4PZNAMV.js';
1
+ import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-NXF64JCT.js';
2
+ import { Button } from './chunk-E6J7ZTDM.js';
3
3
  import { useTranslation } from './chunk-H2TX3OPW.js';
4
4
  import { cn } from './chunk-U7N2A7A3.js';
5
5
  import * as React from 'react';
@@ -1,18 +1,19 @@
1
1
  import { Command, CommandList, CommandItem, CommandGroup } from './chunk-3R3QVJCB.js';
2
2
  import { Input } from './chunk-BNXPDUO4.js';
3
- import { Button } from './chunk-M4PZNAMV.js';
3
+ import { Button } from './chunk-E6J7ZTDM.js';
4
4
  import { Popover, PopoverTrigger, PopoverContent } from './chunk-DY5C44UP.js';
5
5
  import { controlTriggerClass, controlOpenRingClass } from './chunk-B4K4BXEF.js';
6
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
  };
@@ -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,7 +1,7 @@
1
1
  import { EmptyState } from './chunk-YD7V2HGZ.js';
2
- import { Flex, densityClass } from './chunk-INIIF7F7.js';
3
2
  import { Checkbox } from './chunk-BE6GJGKJ.js';
4
- import { Button } from './chunk-M4PZNAMV.js';
3
+ import { Flex, densityClass } from './chunk-INIIF7F7.js';
4
+ import { Button } from './chunk-E6J7ZTDM.js';
5
5
  import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from './chunk-IJ5ALJGA.js';
6
6
  import { tableCellPaddingClass, tableRowHeightClass, controlIconSmClass } from './chunk-B4K4BXEF.js';
7
7
  import { useTranslation } from './chunk-H2TX3OPW.js';
@@ -4,11 +4,21 @@ import * as SliderPrimitive from '@radix-ui/react-slider';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
5
5
 
6
6
  var Slider = React.forwardRef(
7
- ({ className, defaultValue, value, min = 0, max = 100, ...props }, ref) => {
7
+ ({
8
+ className,
9
+ defaultValue,
10
+ value,
11
+ min = 0,
12
+ max = 100,
13
+ "aria-label": ariaLabel,
14
+ "aria-labelledby": ariaLabelledby,
15
+ ...props
16
+ }, ref) => {
8
17
  const values = React.useMemo(
9
18
  () => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],
10
19
  [defaultValue, max, min, value]
11
20
  );
21
+ const thumbLabel = (index) => ariaLabel != null && values.length > 1 ? `${ariaLabel} ${index + 1}` : ariaLabel;
12
22
  return /* @__PURE__ */ jsxs(
13
23
  SliderPrimitive.Root,
14
24
  {
@@ -22,7 +32,16 @@ var Slider = React.forwardRef(
22
32
  ...props,
23
33
  children: [
24
34
  /* @__PURE__ */ jsx(SliderPrimitive.Track, { "data-slot": "slider-track", className: "ui-slider-track", children: /* @__PURE__ */ jsx(SliderPrimitive.Range, { "data-slot": "slider-range", className: "ui-slider-range" }) }),
25
- values.map((_, index) => /* @__PURE__ */ jsx(SliderPrimitive.Thumb, { "data-slot": "slider-thumb", className: "ui-slider-thumb" }, index))
35
+ values.map((_, index) => /* @__PURE__ */ jsx(
36
+ SliderPrimitive.Thumb,
37
+ {
38
+ "data-slot": "slider-thumb",
39
+ className: "ui-slider-thumb",
40
+ "aria-label": thumbLabel(index),
41
+ "aria-labelledby": ariaLabelledby
42
+ },
43
+ index
44
+ ))
26
45
  ]
27
46
  }
28
47
  );
@@ -1,6 +1,6 @@
1
1
  import { humanError } from './chunk-GDHDJAVB.js';
2
2
  import { Flex } from './chunk-INIIF7F7.js';
3
- import { Button } from './chunk-M4PZNAMV.js';
3
+ import { Button } from './chunk-E6J7ZTDM.js';
4
4
  import { useTranslation } from './chunk-H2TX3OPW.js';
5
5
  import { cn } from './chunk-U7N2A7A3.js';
6
6
  import * as React from 'react';
@@ -35,10 +35,17 @@ var badgeVariants = cva(
35
35
  variant: {
36
36
  default: "border-transparent bg-primary text-primary-foreground",
37
37
  secondary: "border-transparent bg-secondary text-secondary-foreground",
38
- outline: "text-foreground"
38
+ outline: "text-foreground",
39
+ dashed: "border-dashed text-foreground"
40
+ },
41
+ // Corner shape — default inherits the badge radius token; pill/sharp override via the tokens.
42
+ shape: {
43
+ default: "",
44
+ pill: "rounded-[var(--radius-pill)]",
45
+ sharp: "rounded-[var(--radius-sharp)]"
39
46
  }
40
47
  },
41
- defaultVariants: { variant: "default" }
48
+ defaultVariants: { variant: "default", shape: "default" }
42
49
  }
43
50
  );
44
51
  var badgeToneClass = {
@@ -50,7 +57,16 @@ var badgeToneClass = {
50
57
  muted: cn("border-transparent", toneMutedClass),
51
58
  neutral: cn("border-transparent", toneNeutralClass)
52
59
  };
53
- function Badge({ className, variant, tone, icon, status, children, ...props }) {
60
+ function Badge({
61
+ className,
62
+ variant,
63
+ shape,
64
+ tone,
65
+ icon,
66
+ status,
67
+ children,
68
+ ...props
69
+ }) {
54
70
  const { t } = useTranslation();
55
71
  const statusDef = status ? STATUS_MAP[status] ?? { tone: "neutral", icon: Circle } : null;
56
72
  const resolvedTone = tone ?? statusDef?.tone ?? "default";
@@ -61,8 +77,9 @@ function Badge({ className, variant, tone, icon, status, children, ...props }) {
61
77
  {
62
78
  "data-slot": "badge",
63
79
  "data-tone": resolvedTone,
80
+ "data-shape": shape ?? "default",
64
81
  className: cn(
65
- badgeVariants({ variant: variant ?? "default" }),
82
+ badgeVariants({ variant: variant ?? "default", shape: shape ?? "default" }),
66
83
  badgeToneClass[resolvedTone],
67
84
  className
68
85
  ),
@@ -1,7 +1,7 @@
1
1
  import { normalizeTreeOptions, collectAllExpandableKeys, filterVisibleTree, flattenVisibleTree, findNodeByValue, reactNodeText, getDescendantValues } from './chunk-SMLKNECP.js';
2
2
  import { Command, CommandInput } from './chunk-3R3QVJCB.js';
3
3
  import { Checkbox } from './chunk-BE6GJGKJ.js';
4
- import { Button } from './chunk-M4PZNAMV.js';
4
+ import { Button } from './chunk-E6J7ZTDM.js';
5
5
  import { Popover, PopoverTrigger, PopoverContent } from './chunk-DY5C44UP.js';
6
6
  import { ScrollArea } from './chunk-3KPEZ5CF.js';
7
7
  import { controlOpenRingClass } from './chunk-B4K4BXEF.js';