@spear-ai/spectral 1.9.1 → 1.10.1

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 (241) hide show
  1. package/README.md +6 -5
  2. package/dist/.js +113 -239
  3. package/dist/Accordion-CDXdSAST.js +363 -0
  4. package/dist/Accordion.js +3 -498
  5. package/dist/Alert/AlertBase.js +69 -152
  6. package/dist/Alert.js +58 -106
  7. package/dist/AnimatePresence-D-9jXfgI.js +178 -0
  8. package/dist/App.js +6 -6
  9. package/dist/Avatar.js +83 -65
  10. package/dist/Badge.d.ts +1 -3
  11. package/dist/Badge.js +21 -25
  12. package/dist/Button.js +102 -178
  13. package/dist/ButtonGroup/ButtonGroupButton.js +38 -40
  14. package/dist/ButtonGroup.js +55 -59
  15. package/dist/ButtonIcon.js +58 -134
  16. package/dist/Calendar-s4lyijkn.js +3109 -0
  17. package/dist/Checkbox/CheckboxBase.js +94 -126
  18. package/dist/Checkbox.d.ts +1 -1
  19. package/dist/Checkbox.js +40 -105
  20. package/dist/Combobox/ComboboxBase.js +2 -79
  21. package/dist/Combobox.js +106 -172
  22. package/dist/ComboboxBase-D8Nf4xC-.js +491 -0
  23. package/dist/ControlGroup/ControlGroupSelect.d.ts +1 -1
  24. package/dist/ControlGroup/ControlGroupSelect.js +85 -101
  25. package/dist/ControlGroup.js +45 -48
  26. package/dist/DataCard/Card.js +37 -12
  27. package/dist/DataCard.d.ts +1 -1
  28. package/dist/DataCard.js +36 -16
  29. package/dist/DateTimePicker/Calendar.js +2 -2967
  30. package/dist/DateTimePicker/DateTimeDisplayInput.d.ts +1 -1
  31. package/dist/DateTimePicker/DateTimeDisplayInput.js +379 -275
  32. package/dist/DateTimePicker/DateTimeInput.d.ts +1 -1
  33. package/dist/DateTimePicker/DateTimeInput.js +133 -141
  34. package/dist/DateTimePicker/DateTimeUtils.js +2 -2193
  35. package/dist/DateTimePicker/TimePeriodSelect.d.ts +1 -1
  36. package/dist/DateTimePicker/TimePeriodSelect.js +45 -20
  37. package/dist/DateTimePicker/TimePicker.d.ts +1 -1
  38. package/dist/DateTimePicker/TimePicker.js +76 -60
  39. package/dist/DateTimePicker.d.ts +2 -2
  40. package/dist/DateTimePicker.js +87 -205
  41. package/dist/DateTimeUtils-DVvG6H-p.js +2098 -0
  42. package/dist/Dialog.js +74 -74
  43. package/dist/Drawer.js +67 -37
  44. package/dist/HoverCard-CYDsIiVK.js +201 -0
  45. package/dist/HoverCard.d.ts +1 -1
  46. package/dist/HoverCard.js +2 -218
  47. package/dist/Icons/AnalyzeIcon.js +50 -57
  48. package/dist/Icons/AnnotationsIcon.js +20 -15
  49. package/dist/Icons/ApprovedIcon.js +26 -18
  50. package/dist/Icons/ArrowDownIcon.js +20 -6
  51. package/dist/Icons/ArrowUpIcon.js +20 -6
  52. package/dist/Icons/BoxToolIcon.js +17 -12
  53. package/dist/Icons/CalendarIcon.js +43 -20
  54. package/dist/Icons/CheckCircleIcon.js +26 -10
  55. package/dist/Icons/CheckSquareIcon.js +26 -10
  56. package/dist/Icons/CheckmarkIcon.js +22 -9
  57. package/dist/Icons/ChevronDownIcon.js +22 -9
  58. package/dist/Icons/ChevronUpIcon.js +22 -9
  59. package/dist/Icons/ClockIcon.js +26 -18
  60. package/dist/Icons/CloseCircleIcon.js +26 -10
  61. package/dist/Icons/CloseIcon.js +18 -9
  62. package/dist/Icons/DashboardIcon.js +36 -10
  63. package/dist/Icons/DatabaseIcon.js +36 -19
  64. package/dist/Icons/DeleteIcon.js +36 -19
  65. package/dist/Icons/DurationIcon.js +57 -22
  66. package/dist/Icons/EditIcon.js +26 -27
  67. package/dist/Icons/EmailIcon.js +26 -10
  68. package/dist/Icons/EraserIcon.js +41 -25
  69. package/dist/Icons/ErrorIcon.js +27 -11
  70. package/dist/Icons/EyeClosedIcon.js +29 -13
  71. package/dist/Icons/EyeClosedIcon2.js +27 -11
  72. package/dist/Icons/EyeOpenIcon.js +22 -9
  73. package/dist/Icons/FileDownloadIcon.js +43 -20
  74. package/dist/Icons/GoToFirstIcon.js +26 -9
  75. package/dist/Icons/GoToLastIcon.js +26 -9
  76. package/dist/Icons/HarmonicCursorsIcon.js +23 -9
  77. package/dist/Icons/IconBase.d.ts +3 -3
  78. package/dist/Icons/IconBase.js +49 -66
  79. package/dist/Icons/InfoIcon.js +36 -10
  80. package/dist/Icons/KeyboardIcon.js +26 -27
  81. package/dist/Icons/LabelIcon.js +19 -14
  82. package/dist/Icons/LassoIcon.js +36 -28
  83. package/dist/Icons/LineToolIcon.js +48 -39
  84. package/dist/Icons/LiveViewIcon.js +50 -12
  85. package/dist/Icons/LoaderIcon.js +67 -27
  86. package/dist/Icons/LocationIcon.js +26 -27
  87. package/dist/Icons/LogoutIcon.js +20 -15
  88. package/dist/Icons/MeasureIcon.js +78 -25
  89. package/dist/Icons/MessagesIcon.js +33 -18
  90. package/dist/Icons/MetadataIcon.js +20 -15
  91. package/dist/Icons/MinusIcon.d.ts +1 -1
  92. package/dist/Icons/MinusIcon.js +18 -6
  93. package/dist/Icons/OntologyIcon.js +87 -71
  94. package/dist/Icons/PanelIconClose.js +28 -10
  95. package/dist/Icons/PanelIconOpen.js +28 -10
  96. package/dist/Icons/PlayIcon.js +20 -6
  97. package/dist/Icons/PlusIcon.js +20 -14
  98. package/dist/Icons/PolygonIcon.js +50 -39
  99. package/dist/Icons/ProgressCheckIcon.d.ts +5 -0
  100. package/dist/Icons/ProgressCheckIcon.js +58 -0
  101. package/dist/Icons/ResetIcon.js +17 -12
  102. package/dist/Icons/ReviewedIcon.js +36 -19
  103. package/dist/Icons/ScissorsIcon.js +22 -17
  104. package/dist/Icons/SearchIcon.js +26 -9
  105. package/dist/Icons/SettingsIcon.js +26 -27
  106. package/dist/Icons/SortAscendingIcon.js +50 -12
  107. package/dist/Icons/SortAtoZIcon.js +50 -12
  108. package/dist/Icons/SortDescendingIcon.js +50 -12
  109. package/dist/Icons/SortZtoAIcon.js +50 -12
  110. package/dist/Icons/StackIcon.js +26 -9
  111. package/dist/Icons/StarIcon.js +20 -6
  112. package/dist/Icons/TrashIcon.js +17 -12
  113. package/dist/Icons/UndoIcon.js +20 -15
  114. package/dist/Icons/User2Icon.js +26 -10
  115. package/dist/Icons/UserIcon.js +19 -14
  116. package/dist/Icons/WarningIcon.js +19 -14
  117. package/dist/Icons/ZoomAllIcon.js +71 -15
  118. package/dist/Icons/ZoomXIcon.js +36 -10
  119. package/dist/Icons/ZoomYIcon.js +36 -10
  120. package/dist/Icons/index.d.ts +1 -0
  121. package/dist/Icons.js +68 -136
  122. package/dist/IconsAnimated/PanelLeftCloseIcon.js +66 -36
  123. package/dist/IconsAnimated/PanelLeftOpenIcon.js +66 -36
  124. package/dist/IconsAnimated.js +3 -6
  125. package/dist/Input/InputUtils.js +51 -52
  126. package/dist/Input.js +132 -185
  127. package/dist/InputNumeric.d.ts +14 -0
  128. package/dist/InputNumeric.js +137 -0
  129. package/dist/InputOTP-cVn5Bzyp.js +461 -0
  130. package/dist/InputOTP.js +2 -382
  131. package/dist/Kbd.d.ts +1 -1
  132. package/dist/Kbd.js +182 -86
  133. package/dist/Label.js +12 -14
  134. package/dist/MultiSelect/MultiSelectBase.js +331 -403
  135. package/dist/MultiSelect.d.ts +1 -1
  136. package/dist/MultiSelect.js +23 -23
  137. package/dist/Popover.js +28 -32
  138. package/dist/RadioButton.d.ts +17 -0
  139. package/dist/RadioButton.js +33 -0
  140. package/dist/RadioButtonGroup/RadioButtonGroupBase.d.ts +3 -1
  141. package/dist/RadioButtonGroup/RadioButtonGroupBase.js +49 -46
  142. package/dist/RadioButtonGroup.d.ts +1 -1
  143. package/dist/RadioButtonGroup.js +11 -8
  144. package/dist/RadioGroup-w_q6RGEK.js +447 -0
  145. package/dist/RadioGroup.js +2 -505
  146. package/dist/Select.js +163 -186
  147. package/dist/Separator.js +16 -19
  148. package/dist/Skeleton.js +10 -6
  149. package/dist/Slider-BzzZT3Zm.js +490 -0
  150. package/dist/Slider.js +2 -562
  151. package/dist/SpectralProvider.js +8 -5
  152. package/dist/Switch/SwitchBase.js +91 -95
  153. package/dist/Switch-CVzRJ-0n.js +126 -0
  154. package/dist/Switch.d.ts +1 -1
  155. package/dist/Switch.js +2 -134
  156. package/dist/Tabs/TabsBase.js +242 -250
  157. package/dist/Tabs/tabsUtils.js +65 -73
  158. package/dist/Tabs.d.ts +1 -1
  159. package/dist/Tabs.js +73 -103
  160. package/dist/Textarea/TextareaUtils.js +35 -46
  161. package/dist/Textarea.js +83 -160
  162. package/dist/Toast-9zqXxKKO.js +711 -0
  163. package/dist/Toast.js +2 -885
  164. package/dist/Toggle/ToggleBase.js +46 -56
  165. package/dist/Toggle.d.ts +1 -1
  166. package/dist/Toggle.js +52 -62
  167. package/dist/ToggleGroup/ToggleGroupBase.js +128 -104
  168. package/dist/ToggleGroup.d.ts +1 -1
  169. package/dist/ToggleGroup.js +52 -63
  170. package/dist/Tooltip-D1K8kY1y.js +389 -0
  171. package/dist/Tooltip.js +2 -365
  172. package/dist/Tray.js +174 -217
  173. package/dist/chunk-h9knIhTc.js +20 -0
  174. package/dist/clsx-jM1GlMvB.js +16 -0
  175. package/dist/dist-3Af8168y.js +913 -0
  176. package/dist/dist-7HRQ5IKN.js +249 -0
  177. package/dist/dist-B2k1iWFp.js +129 -0
  178. package/dist/dist-B4FgboI8.js +122 -0
  179. package/dist/dist-B4g6zpUF.js +33 -0
  180. package/dist/dist-B9tup-4O.js +216 -0
  181. package/dist/dist-BK1K0g9W.js +29 -0
  182. package/dist/dist-Bfjk-jx9.js +28 -0
  183. package/dist/dist-Bft31cJh.js +65 -0
  184. package/dist/dist-BtdmHAzK.js +190 -0
  185. package/dist/dist-C0Hifjgh.js +1287 -0
  186. package/dist/dist-CGzgmYB9.js +68 -0
  187. package/dist/dist-ClmepHp4.js +10 -0
  188. package/dist/dist-D8Wb_MX9.js +6 -0
  189. package/dist/dist-Dtvmk11N.js +12 -0
  190. package/dist/dist-fW81qjVl.js +677 -0
  191. package/dist/dist-s1uWaZYZ.js +11 -0
  192. package/dist/es2015-YHaMV-St.js +701 -0
  193. package/dist/hooks/useAccordionAutoScroll.js +66 -67
  194. package/dist/hooks/useControllableState.js +14 -13
  195. package/dist/hooks/useConvertToOklch.d.ts +3 -0
  196. package/dist/hooks/useConvertToOklch.d.ts.map +1 -0
  197. package/dist/hooks/useConvertToOklch.js +51 -0
  198. package/dist/hooks/useTheme.js +21 -17
  199. package/dist/index.d.ts +3 -1
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/main.js +18954 -27224
  202. package/dist/primitives/button.js +39 -41
  203. package/dist/primitives/input-group.js +57 -73
  204. package/dist/primitives/input.js +11 -20
  205. package/dist/primitives/popover.js +34 -28
  206. package/dist/primitives/select.js +70 -138
  207. package/dist/primitives/slot.js +32 -31
  208. package/dist/primitives/textarea.js +10 -16
  209. package/dist/proxy-Dn10Pl_g.js +4920 -0
  210. package/dist/styles/main.css +2 -1
  211. package/dist/styles/spectral.css +1 -1
  212. package/dist/twUtils-VNWgstKL.js +1673 -0
  213. package/dist/use-animation-CBUDycyW.js +57 -0
  214. package/dist/utils/constants.js +4 -4
  215. package/dist/utils/formFieldUtils.js +136 -148
  216. package/dist/utils/sharedUtils.js +26 -7
  217. package/dist/utils/twUtils.js +2 -2919
  218. package/package.json +24 -28
  219. package/dist/ComboboxBase-CxNxYtdT.js +0 -408
  220. package/dist/clsx-OuTLNxxd.js +0 -16
  221. package/dist/index-0ioNhtNM.js +0 -10
  222. package/dist/index-6oYKCvIn.js +0 -677
  223. package/dist/index-BFOf48AQ.js +0 -69
  224. package/dist/index-BZPx6jYI.js +0 -8
  225. package/dist/index-BlHU_t18.js +0 -142
  226. package/dist/index-Bm1RbF6w.js +0 -1037
  227. package/dist/index-Bv2OIg5P.js +0 -225
  228. package/dist/index-CKEI0pDv.js +0 -56
  229. package/dist/index-CM_hWgfC.js +0 -32
  230. package/dist/index-C_YVr64u.js +0 -1538
  231. package/dist/index-Cl8VeY0o.js +0 -149
  232. package/dist/index-CwSyIPrv.js +0 -13
  233. package/dist/index-D29mdTf5.js +0 -34
  234. package/dist/index-DEYs15GP.js +0 -66
  235. package/dist/index-Dc0No4pV.js +0 -233
  236. package/dist/index-T6XEa11q.js +0 -822
  237. package/dist/index-pBCLb6Gr.js +0 -240
  238. package/dist/index-psiVrsnE.js +0 -27
  239. package/dist/index-rKs9bXHr.js +0 -6
  240. package/dist/proxy-CO_-Vget.js +0 -4975
  241. package/dist/use-animation-DhEPRwZ3.js +0 -62
@@ -1,277 +1,381 @@
1
1
  "use client";
2
2
  import "../styles/main.css";
3
- import { jsxs as O, jsx as b } from "react/jsx-runtime";
4
- import { getResolvedLocale as ee, getLocalizedPeriodLabels as te, formatSelectPeriodLabel as re } from "./DateTimeUtils.js";
5
- import { Label as ne } from "../Label.js";
6
- import { useControllableState as ae } from "../hooks/useControllableState.js";
7
- import { getInputClasses as ie } from "../utils/formFieldUtils.js";
8
- import { cn as U } from "../utils/twUtils.js";
9
- import { forwardRef as se, useRef as E, useMemo as D, useCallback as w, useEffect as oe } from "react";
10
- const v = {
11
- month: { type: "month", min: 1, max: 12, length: 2 },
12
- day: { type: "day", min: 1, max: 31, length: 2 },
13
- year: { type: "year", min: 1900, max: 2100, length: 4 },
14
- hour12: { type: "hour", min: 1, max: 12, length: 2 },
15
- hour24: { type: "hour", min: 0, max: 23, length: 2 },
16
- minute: { type: "minute", min: 0, max: 59, length: 2 },
17
- period: { type: "period", min: 0, max: 1, length: 2 }
18
- }, ue = (k, e) => k === 2 ? e % 4 === 0 && e % 100 !== 0 || e % 400 === 0 ? 29 : 28 : [4, 6, 9, 11].includes(k) ? 30 : 31, ce = ({ ariaLabel: k, config: e, disabled: y, onLeftFocus: I, onRightFocus: m, onValueChange: u, periodLabels: h, value: s }) => {
19
- const o = E(null), a = E(""), c = E(!1), M = D(() => {
20
- switch (e.type) {
21
- case "month":
22
- return "MM";
23
- case "day":
24
- return "dd";
25
- case "year":
26
- return "yyyy";
27
- case "hour":
28
- return e.max === 23 ? "HH" : "hh";
29
- case "minute":
30
- return "mm";
31
- case "period":
32
- return (h?.am ?? "am").toLowerCase();
33
- default:
34
- return "––";
35
- }
36
- }, [e.type, e.max, h]), d = D(() => s === void 0 ? M : e.type === "period" ? (s === 0 ? h?.am ?? "am" : h?.pm ?? "pm").toLowerCase() : s.toString().padStart(e.length, "0"), [s, e, h, M]);
37
- oe(() => {
38
- o.current && !c.current && (o.current.value = d);
39
- }, [d]);
40
- const x = w(() => {
41
- const t = a.current;
42
- if (t) {
43
- let r = parseInt(t, 10);
44
- isNaN(r) || (r = Math.max(e.min, Math.min(e.max, r)), u(r));
45
- }
46
- a.current = "", c.current = !1, o.current && (o.current.value = d);
47
- }, [e.min, e.max, d, u]), R = w(
48
- (t) => {
49
- if (!y) {
50
- if (t.key === "Tab") {
51
- x();
52
- return;
53
- }
54
- if (t.key === "ArrowRight") {
55
- t.preventDefault(), x(), m?.();
56
- return;
57
- }
58
- if (t.key === "ArrowLeft") {
59
- t.preventDefault(), x(), I?.();
60
- return;
61
- }
62
- if (e.type === "period") {
63
- t.preventDefault(), t.key === "ArrowUp" || t.key === "ArrowDown" ? u(s === 0 ? 1 : 0) : t.key.toLowerCase() === "a" ? u(0) : t.key.toLowerCase() === "p" && u(1);
64
- return;
65
- }
66
- if (t.key === "ArrowUp") {
67
- t.preventDefault(), a.current = "", c.current = !1;
68
- const r = s === void 0 || s >= e.max ? e.min : s + 1;
69
- u(r);
70
- return;
71
- }
72
- if (t.key === "ArrowDown") {
73
- t.preventDefault(), a.current = "", c.current = !1;
74
- const r = s === void 0 || s <= e.min ? e.max : s - 1;
75
- u(r);
76
- return;
77
- }
78
- if (t.key === "Home") {
79
- t.preventDefault(), a.current = "", c.current = !1, u(e.min);
80
- return;
81
- }
82
- if (t.key === "End") {
83
- t.preventDefault(), a.current = "", c.current = !1, u(e.max);
84
- return;
85
- }
86
- if (t.key >= "0" && t.key <= "9") {
87
- t.preventDefault();
88
- const r = a.current + t.key, l = parseInt(r, 10);
89
- if (e.length === 2)
90
- if (r.length >= 2) {
91
- const L = Math.max(e.min, Math.min(e.max, l));
92
- a.current = "", c.current = !1, u(L), m?.();
93
- } else if (l * 10 > e.max) {
94
- const L = Math.max(e.min, Math.min(e.max, l));
95
- a.current = "", c.current = !1, u(L), m?.();
96
- } else
97
- a.current = r, c.current = !0, o.current && (o.current.value = r);
98
- else if (e.length === 4)
99
- if (r.length >= 4) {
100
- const L = Math.max(e.min, Math.min(e.max, l));
101
- a.current = "", c.current = !1, u(L), m?.();
102
- } else
103
- a.current = r, c.current = !0, o.current && (o.current.value = r);
104
- return;
105
- }
106
- if (t.key === "Backspace")
107
- if (t.preventDefault(), a.current) {
108
- const r = a.current.slice(0, -1);
109
- a.current = r, c.current = r.length > 0, o.current && (o.current.value = r || d);
110
- } else s !== void 0 && (a.current = "", c.current = !0, u(e.min), o.current && (o.current.value = M));
111
- }
112
- },
113
- [y, e, s, d, M, u, I, m, x]
114
- ), T = w(() => {
115
- a.current && x();
116
- }, [x]), S = w(() => {
117
- c.current || (a.current = "");
118
- const t = o.current;
119
- if (t) {
120
- const r = t.value.length;
121
- t.setSelectionRange(r, r);
122
- }
123
- }, []), Y = w(() => {
124
- o.current && (o.current.value = a.current || d);
125
- }, [d]), H = w(() => {
126
- switch (e.type) {
127
- case "year":
128
- return { width: 46, paddingLeft: 0 };
129
- case "period":
130
- return { width: 28, paddingLeft: 0, marginLeft: 4 };
131
- case "month":
132
- return { width: 28, paddingLeft: 0 };
133
- case "day":
134
- return { width: 28, paddingLeft: 0 };
135
- case "hour":
136
- return { width: 28, paddingLeft: 0 };
137
- case "minute":
138
- return { width: 30, paddingLeft: 0 };
139
- default:
140
- return { width: 24, paddingLeft: 0 };
141
- }
142
- }, [e.type]), p = D(() => H(), [H]), g = D(() => s === void 0, [s]);
143
- return /* @__PURE__ */ b(
144
- "input",
145
- {
146
- "aria-label": k,
147
- "aria-valuemax": e.max,
148
- "aria-valuemin": e.min,
149
- "aria-valuenow": s,
150
- className: U(
151
- "inline-flex items-center justify-center rounded text-center tabular-nums",
152
- "border-none bg-transparent outline-none",
153
- "focus:bg-bg-tertiary focus:text-text-primary focus:ring-accent focus:ring-1",
154
- "hover:bg-bg-secondary",
155
- y && "cursor-not-allowed opacity-50",
156
- g && "text-text-placeholder text-sm"
157
- ),
158
- "data-segment": e.type,
159
- defaultValue: d,
160
- disabled: y,
161
- inputMode: "numeric",
162
- onBlur: T,
163
- onChange: Y,
164
- onFocus: S,
165
- onKeyDown: R,
166
- ref: o,
167
- role: "spinbutton",
168
- style: p,
169
- tabIndex: y ? -1 : 0
170
- }
171
- );
172
- }, le = se(
173
- ({
174
- className: k,
175
- defaultValue: e,
176
- disabled: y,
177
- endIcon: I,
178
- hourFormat: m = "12",
179
- id: u,
180
- label: h,
181
- locale: s,
182
- onChange: o,
183
- showTime: a = !0,
184
- state: c = "default",
185
- value: M,
186
- // Legacy props (deprecated)
187
- date: d,
188
- onDateChange: x,
189
- ...R
190
- }, T) => {
191
- const S = E(null), Y = M ?? d, H = o ?? x, [p, g] = ae({
192
- defaultValue: e,
193
- onChange: H,
194
- value: Y
195
- }), t = D(() => ee(s), [s]), r = D(() => te(t), [t]), l = D(() => {
196
- if (!p) return { month: void 0, day: void 0, year: void 0, hour: void 0, minute: void 0, period: void 0 };
197
- const i = p.getHours();
198
- let n, f;
199
- return m === "24" ? (n = i, f = 0) : (f = i >= 12 ? 1 : 0, n = i % 12, n === 0 && (n = 12)), {
200
- month: p.getMonth() + 1,
201
- day: p.getDate(),
202
- year: p.getFullYear(),
203
- hour: n,
204
- minute: p.getMinutes(),
205
- period: f
206
- };
207
- }, [p, m]), L = l.month !== void 0 && l.day !== void 0 && l.year !== void 0, _ = w(
208
- (i) => {
209
- const n = { ...l, ...i };
210
- if (n.month === void 0 && n.day === void 0 && n.year === void 0) {
211
- g(void 0);
212
- return;
213
- }
214
- const f = /* @__PURE__ */ new Date(), A = (n.month ?? f.getMonth() + 1) - 1, P = n.day ?? f.getDate(), N = n.year ?? f.getFullYear(), j = ue(A + 1, N), G = Math.min(P, j), W = l.month !== void 0 && l.day !== void 0 && l.year !== void 0, X = n.month !== void 0 && n.day !== void 0 && n.year !== void 0, B = !W && X;
215
- let C;
216
- if (m === "24")
217
- C = B ? 0 : n.hour ?? 0;
218
- else {
219
- const F = B ? 12 : n.hour ?? 12, V = B ? 1 : n.period ?? 0, K = F, J = V;
220
- K === 12 ? C = J === 0 ? 0 : 12 : C = J === 0 ? K : K + 12;
221
- }
222
- const Z = B ? 0 : n.minute ?? 0, $ = new Date(N, A, G, C, Z, 0, 0);
223
- g($);
224
- },
225
- [l, m, g]
226
- ), q = D(() => {
227
- const i = [
228
- { key: "month", config: v.month, ariaLabel: "Month" },
229
- { key: "day", config: v.day, ariaLabel: "Day" },
230
- { key: "year", config: v.year, ariaLabel: "Year" }
231
- ];
232
- if (!a) return i;
233
- const n = m === "24" ? [
234
- { key: "hour", config: v.hour24, ariaLabel: "Hours" },
235
- { key: "minute", config: v.minute, ariaLabel: "Minutes" }
236
- ] : [
237
- { key: "hour", config: v.hour12, ariaLabel: "Hours" },
238
- { key: "minute", config: v.minute, ariaLabel: "Minutes" },
239
- { key: "period", config: v.period, ariaLabel: re(r, "Select {am} or {pm}") }
240
- ];
241
- return [...i, ...n];
242
- }, [a, m, r]), z = w((i) => {
243
- S.current?.querySelectorAll("[role='spinbutton']")[i]?.focus();
244
- }, []), Q = U(ie(c, k));
245
- return /* @__PURE__ */ O("div", { className: "flex flex-col gap-1.5", children: [
246
- h && /* @__PURE__ */ b(ne, { className: "text-text-primary text-sm font-medium", htmlFor: u, children: h }),
247
- /* @__PURE__ */ O("div", { className: U(Q, "relative", (y ?? c === "disabled") && "cursor-not-allowed", k), "data-slot": "datetime-display-input", id: u ?? "datetime-display-input", ref: T ?? S, ...R, children: [
248
- /* @__PURE__ */ b("div", { className: "flex items-center", ref: S, children: q.map((i, n) => {
249
- const f = ["month", "day", "year"].includes(i.key), A = ["hour", "minute", "period"].includes(i.key), P = i.key === "year", N = i.key === "hour", j = y ?? (A && !L);
250
- return /* @__PURE__ */ O("span", { className: "flex items-center", children: [
251
- N && /* @__PURE__ */ b("span", { "aria-hidden": "true", className: "text-text-secondary select-none", children: ", " }),
252
- /* @__PURE__ */ b(
253
- ce,
254
- {
255
- ariaLabel: i.ariaLabel,
256
- config: i.config,
257
- disabled: j,
258
- onLeftFocus: () => n > 0 && z(n - 1),
259
- onRightFocus: () => n < q.length - 1 && z(n + 1),
260
- onValueChange: (G) => _({ [i.key]: G }),
261
- periodLabels: r,
262
- value: l[i.key]
263
- }
264
- ),
265
- f && !P && /* @__PURE__ */ b("span", { "aria-hidden": "true", className: "text-text-secondary select-none", children: "/" }),
266
- N && /* @__PURE__ */ b("span", { "aria-hidden": "true", className: "text-inherit select-none", children: ":" })
267
- ] }, i.key);
268
- }) }),
269
- I
270
- ] })
271
- ] });
272
- }
273
- );
274
- le.displayName = "DateTimeDisplayInput";
275
- export {
276
- le as DateTimeDisplayInput
277
- };
3
+ import { t as e } from "../twUtils-VNWgstKL.js";
4
+ import { getInputClasses as t } from "../utils/formFieldUtils.js";
5
+ import { useControllableState as n } from "../hooks/useControllableState.js";
6
+ import { Label as r } from "../Label.js";
7
+ import { S as i, b as a, f as o } from "../DateTimeUtils-DVvG6H-p.js";
8
+ import { forwardRef as s, useCallback as c, useEffect as l, useMemo as u, useRef as d } from "react";
9
+ import { jsx as f, jsxs as p } from "react/jsx-runtime";
10
+ //#region src/components/DateTimePicker/DateTimeDisplayInput.tsx
11
+ var m = {
12
+ month: {
13
+ type: "month",
14
+ min: 1,
15
+ max: 12,
16
+ length: 2
17
+ },
18
+ day: {
19
+ type: "day",
20
+ min: 1,
21
+ max: 31,
22
+ length: 2
23
+ },
24
+ year: {
25
+ type: "year",
26
+ min: 1900,
27
+ max: 2100,
28
+ length: 4
29
+ },
30
+ hour12: {
31
+ type: "hour",
32
+ min: 1,
33
+ max: 12,
34
+ length: 2
35
+ },
36
+ hour24: {
37
+ type: "hour",
38
+ min: 0,
39
+ max: 23,
40
+ length: 2
41
+ },
42
+ minute: {
43
+ type: "minute",
44
+ min: 0,
45
+ max: 59,
46
+ length: 2
47
+ },
48
+ period: {
49
+ type: "period",
50
+ min: 0,
51
+ max: 1,
52
+ length: 2
53
+ }
54
+ }, h = (e, t) => e === 2 ? t % 4 == 0 && t % 100 != 0 || t % 400 == 0 ? 29 : 28 : [
55
+ 4,
56
+ 6,
57
+ 9,
58
+ 11
59
+ ].includes(e) ? 30 : 31, g = ({ ariaLabel: t, config: n, disabled: r, onLeftFocus: i, onRightFocus: a, onValueChange: o, periodLabels: s, value: p }) => {
60
+ let m = d(null), h = d(""), g = d(!1), _ = u(() => {
61
+ switch (n.type) {
62
+ case "month": return "MM";
63
+ case "day": return "dd";
64
+ case "year": return "yyyy";
65
+ case "hour": return n.max === 23 ? "HH" : "hh";
66
+ case "minute": return "mm";
67
+ case "period": return (s?.am ?? "am").toLowerCase();
68
+ default: return "––";
69
+ }
70
+ }, [
71
+ n.type,
72
+ n.max,
73
+ s
74
+ ]), v = u(() => p === void 0 ? _ : n.type === "period" ? (p === 0 ? s?.am ?? "am" : s?.pm ?? "pm").toLowerCase() : p.toString().padStart(n.length, "0"), [
75
+ p,
76
+ n,
77
+ s,
78
+ _
79
+ ]);
80
+ l(() => {
81
+ m.current && !g.current && (m.current.value = v);
82
+ }, [v]);
83
+ let y = c(() => {
84
+ let e = h.current;
85
+ if (e) {
86
+ let t = parseInt(e, 10);
87
+ isNaN(t) || (t = Math.max(n.min, Math.min(n.max, t)), o(t));
88
+ }
89
+ h.current = "", g.current = !1, m.current && (m.current.value = v);
90
+ }, [
91
+ n.min,
92
+ n.max,
93
+ v,
94
+ o
95
+ ]), b = c((e) => {
96
+ if (!r) {
97
+ if (e.key === "Tab") {
98
+ y();
99
+ return;
100
+ }
101
+ if (e.key === "ArrowRight") {
102
+ e.preventDefault(), y(), a?.();
103
+ return;
104
+ }
105
+ if (e.key === "ArrowLeft") {
106
+ e.preventDefault(), y(), i?.();
107
+ return;
108
+ }
109
+ if (n.type === "period") {
110
+ e.preventDefault(), e.key === "ArrowUp" || e.key === "ArrowDown" ? o(p === 0 ? 1 : 0) : e.key.toLowerCase() === "a" ? o(0) : e.key.toLowerCase() === "p" && o(1);
111
+ return;
112
+ }
113
+ if (e.key === "ArrowUp") {
114
+ e.preventDefault(), h.current = "", g.current = !1, o(p === void 0 || p >= n.max ? n.min : p + 1);
115
+ return;
116
+ }
117
+ if (e.key === "ArrowDown") {
118
+ e.preventDefault(), h.current = "", g.current = !1, o(p === void 0 || p <= n.min ? n.max : p - 1);
119
+ return;
120
+ }
121
+ if (e.key === "Home") {
122
+ e.preventDefault(), h.current = "", g.current = !1, o(n.min);
123
+ return;
124
+ }
125
+ if (e.key === "End") {
126
+ e.preventDefault(), h.current = "", g.current = !1, o(n.max);
127
+ return;
128
+ }
129
+ if (e.key >= "0" && e.key <= "9") {
130
+ e.preventDefault();
131
+ let t = h.current + e.key, r = parseInt(t, 10);
132
+ if (n.length === 2) if (t.length >= 2) {
133
+ let e = Math.max(n.min, Math.min(n.max, r));
134
+ h.current = "", g.current = !1, o(e), a?.();
135
+ } else if (r * 10 > n.max) {
136
+ let e = Math.max(n.min, Math.min(n.max, r));
137
+ h.current = "", g.current = !1, o(e), a?.();
138
+ } else h.current = t, g.current = !0, m.current && (m.current.value = t);
139
+ else if (n.length === 4) if (t.length >= 4) {
140
+ let e = Math.max(n.min, Math.min(n.max, r));
141
+ h.current = "", g.current = !1, o(e), a?.();
142
+ } else h.current = t, g.current = !0, m.current && (m.current.value = t);
143
+ return;
144
+ }
145
+ if (e.key === "Backspace") if (e.preventDefault(), h.current) {
146
+ let e = h.current.slice(0, -1);
147
+ h.current = e, g.current = e.length > 0, m.current && (m.current.value = e || v);
148
+ } else p !== void 0 && (h.current = "", g.current = !0, o(n.min), m.current && (m.current.value = _));
149
+ }
150
+ }, [
151
+ r,
152
+ n,
153
+ p,
154
+ v,
155
+ _,
156
+ o,
157
+ i,
158
+ a,
159
+ y
160
+ ]), x = c(() => {
161
+ h.current && y();
162
+ }, [y]), S = c(() => {
163
+ g.current || (h.current = "");
164
+ let e = m.current;
165
+ if (e) {
166
+ let t = e.value.length;
167
+ e.setSelectionRange(t, t);
168
+ }
169
+ }, []), C = c(() => {
170
+ m.current && (m.current.value = h.current || v);
171
+ }, [v]), w = c(() => {
172
+ switch (n.type) {
173
+ case "year": return {
174
+ width: 46,
175
+ paddingLeft: 0
176
+ };
177
+ case "period": return {
178
+ width: 28,
179
+ paddingLeft: 0,
180
+ marginLeft: 4
181
+ };
182
+ case "month": return {
183
+ width: 28,
184
+ paddingLeft: 0
185
+ };
186
+ case "day": return {
187
+ width: 28,
188
+ paddingLeft: 0
189
+ };
190
+ case "hour": return {
191
+ width: 28,
192
+ paddingLeft: 0
193
+ };
194
+ case "minute": return {
195
+ width: 30,
196
+ paddingLeft: 0
197
+ };
198
+ default: return {
199
+ width: 24,
200
+ paddingLeft: 0
201
+ };
202
+ }
203
+ }, [n.type]), T = u(() => w(), [w]), E = u(() => p === void 0, [p]);
204
+ return /* @__PURE__ */ f("input", {
205
+ "aria-label": t,
206
+ "aria-valuemax": n.max,
207
+ "aria-valuemin": n.min,
208
+ "aria-valuenow": p,
209
+ className: e("rounded inline-flex items-center justify-center text-center tabular-nums", "border-none bg-transparent outline-none", "focus:bg-bg-tertiary focus:text-text-primary focus:ring-1 focus:ring-accent", "hover:bg-bg-secondary", r && "cursor-not-allowed opacity-50", E && "text-text-placeholder text-sm"),
210
+ "data-segment": n.type,
211
+ defaultValue: v,
212
+ disabled: r,
213
+ inputMode: "numeric",
214
+ onBlur: x,
215
+ onChange: C,
216
+ onFocus: S,
217
+ onKeyDown: b,
218
+ ref: m,
219
+ role: "spinbutton",
220
+ style: T,
221
+ tabIndex: r ? -1 : 0
222
+ });
223
+ }, _ = s(({ className: s, defaultValue: l, disabled: _, endIcon: v, hourFormat: y = "12", id: b, label: x, locale: S, onChange: C, showTime: w = !0, state: T = "default", value: E, date: D, onDateChange: O, ...k }, A) => {
224
+ let j = d(null), [M, N] = n({
225
+ defaultValue: l,
226
+ onChange: C ?? O,
227
+ value: E ?? D
228
+ }), P = u(() => i(S), [S]), F = u(() => a(P), [P]), I = u(() => {
229
+ if (!M) return {
230
+ month: void 0,
231
+ day: void 0,
232
+ year: void 0,
233
+ hour: void 0,
234
+ minute: void 0,
235
+ period: void 0
236
+ };
237
+ let e = M.getHours(), t, n;
238
+ return y === "24" ? (t = e, n = 0) : (n = e >= 12 ? 1 : 0, t = e % 12, t === 0 && (t = 12)), {
239
+ month: M.getMonth() + 1,
240
+ day: M.getDate(),
241
+ year: M.getFullYear(),
242
+ hour: t,
243
+ minute: M.getMinutes(),
244
+ period: n
245
+ };
246
+ }, [M, y]), L = I.month !== void 0 && I.day !== void 0 && I.year !== void 0, R = c((e) => {
247
+ let t = {
248
+ ...I,
249
+ ...e
250
+ };
251
+ if (t.month === void 0 && t.day === void 0 && t.year === void 0) {
252
+ N(void 0);
253
+ return;
254
+ }
255
+ let n = /* @__PURE__ */ new Date(), r = (t.month ?? n.getMonth() + 1) - 1, i = t.day ?? n.getDate(), a = t.year ?? n.getFullYear(), o = h(r + 1, a), s = Math.min(i, o), c = I.month !== void 0 && I.day !== void 0 && I.year !== void 0, l = t.month !== void 0 && t.day !== void 0 && t.year !== void 0, u = !c && l, d;
256
+ if (y === "24") d = u ? 0 : t.hour ?? 0;
257
+ else {
258
+ let e = u ? 12 : t.hour ?? 12, n = u ? 1 : t.period ?? 0, r = e, i = n;
259
+ d = r === 12 ? i === 0 ? 0 : 12 : i === 0 ? r : r + 12;
260
+ }
261
+ let f = u ? 0 : t.minute ?? 0;
262
+ N(new Date(a, r, s, d, f, 0, 0));
263
+ }, [
264
+ I,
265
+ y,
266
+ N
267
+ ]), z = u(() => {
268
+ let e = [
269
+ {
270
+ key: "month",
271
+ config: m.month,
272
+ ariaLabel: "Month"
273
+ },
274
+ {
275
+ key: "day",
276
+ config: m.day,
277
+ ariaLabel: "Day"
278
+ },
279
+ {
280
+ key: "year",
281
+ config: m.year,
282
+ ariaLabel: "Year"
283
+ }
284
+ ];
285
+ if (!w) return e;
286
+ let t = y === "24" ? [{
287
+ key: "hour",
288
+ config: m.hour24,
289
+ ariaLabel: "Hours"
290
+ }, {
291
+ key: "minute",
292
+ config: m.minute,
293
+ ariaLabel: "Minutes"
294
+ }] : [
295
+ {
296
+ key: "hour",
297
+ config: m.hour12,
298
+ ariaLabel: "Hours"
299
+ },
300
+ {
301
+ key: "minute",
302
+ config: m.minute,
303
+ ariaLabel: "Minutes"
304
+ },
305
+ {
306
+ key: "period",
307
+ config: m.period,
308
+ ariaLabel: o(F, "Select {am} or {pm}")
309
+ }
310
+ ];
311
+ return [...e, ...t];
312
+ }, [
313
+ w,
314
+ y,
315
+ F
316
+ ]), B = c((e) => {
317
+ (j.current?.querySelectorAll("[role='spinbutton']")[e])?.focus();
318
+ }, []), V = e(t(T, s));
319
+ return /* @__PURE__ */ p("div", {
320
+ className: "gap-1.5 flex flex-col",
321
+ children: [x && /* @__PURE__ */ f(r, {
322
+ className: "text-sm font-medium text-text-primary",
323
+ htmlFor: b,
324
+ children: x
325
+ }), /* @__PURE__ */ p("div", {
326
+ className: e(V, "relative", (_ ?? T === "disabled") && "cursor-not-allowed", s),
327
+ "data-slot": "datetime-display-input",
328
+ id: b ?? "datetime-display-input",
329
+ ref: A ?? j,
330
+ ...k,
331
+ children: [/* @__PURE__ */ f("div", {
332
+ className: "flex items-center",
333
+ ref: j,
334
+ children: z.map((e, t) => {
335
+ let n = [
336
+ "month",
337
+ "day",
338
+ "year"
339
+ ].includes(e.key), r = [
340
+ "hour",
341
+ "minute",
342
+ "period"
343
+ ].includes(e.key), i = e.key === "year", a = e.key === "hour", o = _ ?? (r && !L);
344
+ return /* @__PURE__ */ p("span", {
345
+ className: "flex items-center",
346
+ children: [
347
+ a && /* @__PURE__ */ f("span", {
348
+ "aria-hidden": "true",
349
+ className: "text-text-secondary select-none",
350
+ children: ",\xA0"
351
+ }),
352
+ /* @__PURE__ */ f(g, {
353
+ ariaLabel: e.ariaLabel,
354
+ config: e.config,
355
+ disabled: o,
356
+ onLeftFocus: () => t > 0 && B(t - 1),
357
+ onRightFocus: () => t < z.length - 1 && B(t + 1),
358
+ onValueChange: (t) => R({ [e.key]: t }),
359
+ periodLabels: F,
360
+ value: I[e.key]
361
+ }),
362
+ n && !i && /* @__PURE__ */ f("span", {
363
+ "aria-hidden": "true",
364
+ className: "text-text-secondary select-none",
365
+ children: "/"
366
+ }),
367
+ a && /* @__PURE__ */ f("span", {
368
+ "aria-hidden": "true",
369
+ className: "text-inherit select-none",
370
+ children: ":"
371
+ })
372
+ ]
373
+ }, e.key);
374
+ })
375
+ }), v]
376
+ })]
377
+ });
378
+ });
379
+ _.displayName = "DateTimeDisplayInput";
380
+ //#endregion
381
+ export { _ as DateTimeDisplayInput };