@bigbinary/neeto-atoms 1.0.103 → 1.0.105
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.
- package/dist/{Avatar-ChF94Ken.js → Avatar-Dg5-X_dH.js} +8 -2
- package/dist/Avatar-Dg5-X_dH.js.map +1 -0
- package/dist/{Checkbox-DiAngQvO.js → Checkbox-BalUzegZ.js} +26 -7
- package/dist/Checkbox-BalUzegZ.js.map +1 -0
- package/dist/{Combobox-DriZMj4f.js → Combobox-NgubHftk.js} +2 -2
- package/dist/{Combobox-DriZMj4f.js.map → Combobox-NgubHftk.js.map} +1 -1
- package/dist/{DataTable-CwWARMEv.js → DataTable-mxDU-16D.js} +75 -55
- package/dist/DataTable-mxDU-16D.js.map +1 -0
- package/dist/{DatePicker-Uf_h3ohA.js → DatePicker-BoXx1Wve.js} +13 -4
- package/dist/DatePicker-BoXx1Wve.js.map +1 -0
- package/dist/{Dialog-D8C0-nEo.js → Dialog-Yw34WDqY.js} +2 -2
- package/dist/Dialog-Yw34WDqY.js.map +1 -0
- package/dist/{HelpIcon-CbnRiSjn.js → HelpIcon-xh488VXs.js} +11 -3
- package/dist/HelpIcon-xh488VXs.js.map +1 -0
- package/dist/{Input-CuIurquS.js → Input-W8foyOcS.js} +35 -7
- package/dist/Input-W8foyOcS.js.map +1 -0
- package/dist/{Label-DjOaTM4Q.js → Label-B-R4PNNq.js} +2 -2
- package/dist/{Label-DjOaTM4Q.js.map → Label-B-R4PNNq.js.map} +1 -1
- package/dist/{MultiEmailInput-BB334s4C.js → MultiEmailInput-Bzd2dPFC.js} +68 -25
- package/dist/MultiEmailInput-Bzd2dPFC.js.map +1 -0
- package/dist/{RadioGroup-CpgVdPzz.js → RadioGroup-CBXByAMW.js} +63 -34
- package/dist/RadioGroup-CBXByAMW.js.map +1 -0
- package/dist/{Select-YWCfd2p1.js → Select-ZWR0HFCa.js} +255 -94
- package/dist/Select-ZWR0HFCa.js.map +1 -0
- package/dist/{SelectFieldWrapper-D98IWsW5.js → SelectFieldWrapper-D370CD4o.js} +8 -1
- package/dist/SelectFieldWrapper-D370CD4o.js.map +1 -0
- package/dist/{Slider-Bokg8-oi.js → Slider-CxQdlyHZ.js} +32 -7
- package/dist/Slider-CxQdlyHZ.js.map +1 -0
- package/dist/{Stepper-DO7EBWYL.js → Stepper-GK8gDn-s.js} +2 -1
- package/dist/Stepper-GK8gDn-s.js.map +1 -0
- package/dist/{Switch-Am2l2UdV.js → Switch-C9fqpoNR.js} +16 -2
- package/dist/Switch-C9fqpoNR.js.map +1 -0
- package/dist/{Tabs-ModAabFc.js → Tabs-DaXiF_67.js} +3 -3
- package/dist/Tabs-DaXiF_67.js.map +1 -0
- package/dist/{Textarea-CMGZZ4rL.js → Textarea-CUe09-sr.js} +34 -7
- package/dist/Textarea-CUe09-sr.js.map +1 -0
- package/dist/{TimePicker-Ca7iF-a_.js → TimePicker-BixF9wdU.js} +21 -4
- package/dist/TimePicker-BixF9wdU.js.map +1 -0
- package/dist/{Toastr-Cka6pudu.js → Toastr-CXqmoXjn.js} +9 -2
- package/dist/Toastr-CXqmoXjn.js.map +1 -0
- package/dist/{TreeSelect-wYDOZ5yD.js → TreeSelect-rrTHwY42.js} +3 -2
- package/dist/TreeSelect-rrTHwY42.js.map +1 -0
- package/dist/cjs/{Avatar-DGuMcBnh.js → Avatar-D2k6WnzD.js} +8 -2
- package/dist/cjs/Avatar-D2k6WnzD.js.map +1 -0
- package/dist/cjs/{Checkbox-7lX2aMKA.js → Checkbox-83g1FDsc.js} +26 -7
- package/dist/cjs/Checkbox-83g1FDsc.js.map +1 -0
- package/dist/cjs/{Combobox-BE8LT4yq.js → Combobox-PAGcNUr6.js} +2 -2
- package/dist/cjs/{Combobox-BE8LT4yq.js.map → Combobox-PAGcNUr6.js.map} +1 -1
- package/dist/cjs/{DataTable-ChgPVrRB.js → DataTable-OtA15NKE.js} +75 -55
- package/dist/cjs/DataTable-OtA15NKE.js.map +1 -0
- package/dist/cjs/{DatePicker-Czp9QLy0.js → DatePicker-DtmJ-VkV.js} +13 -4
- package/dist/cjs/DatePicker-DtmJ-VkV.js.map +1 -0
- package/dist/cjs/{Dialog-DNv7j7ts.js → Dialog-ZUHGaoAE.js} +2 -2
- package/dist/cjs/Dialog-ZUHGaoAE.js.map +1 -0
- package/dist/cjs/{HelpIcon-QpZY6Zmc.js → HelpIcon-BF1ePUQf.js} +11 -3
- package/dist/cjs/HelpIcon-BF1ePUQf.js.map +1 -0
- package/dist/cjs/{Input-lWo0YoZ9.js → Input-DIq7T9D0.js} +35 -7
- package/dist/cjs/Input-DIq7T9D0.js.map +1 -0
- package/dist/cjs/{Label-D8RFE9hd.js → Label-CpsdGBV8.js} +2 -2
- package/dist/cjs/{Label-D8RFE9hd.js.map → Label-CpsdGBV8.js.map} +1 -1
- package/dist/cjs/{MultiEmailInput-BlIqzq-o.js → MultiEmailInput-FNRR9b74.js} +68 -25
- package/dist/cjs/MultiEmailInput-FNRR9b74.js.map +1 -0
- package/dist/cjs/{RadioGroup-DCEw94Dk.js → RadioGroup-B-u8rdbf.js} +63 -34
- package/dist/cjs/RadioGroup-B-u8rdbf.js.map +1 -0
- package/dist/cjs/{Select-Bs5Fp3wj.js → Select-VQCROyX1.js} +258 -97
- package/dist/cjs/Select-VQCROyX1.js.map +1 -0
- package/dist/cjs/{SelectFieldWrapper-BLVvwUcK.js → SelectFieldWrapper-CIh_atln.js} +8 -1
- package/dist/cjs/SelectFieldWrapper-CIh_atln.js.map +1 -0
- package/dist/cjs/{Slider-CRmd_VMs.js → Slider-DIUSlx_m.js} +32 -7
- package/dist/cjs/Slider-DIUSlx_m.js.map +1 -0
- package/dist/cjs/{Stepper-BtZG_XmC.js → Stepper-BZBdL6JW.js} +2 -1
- package/dist/cjs/Stepper-BZBdL6JW.js.map +1 -0
- package/dist/cjs/{Switch-DY7bdiEz.js → Switch-BbRK3HUZ.js} +16 -2
- package/dist/cjs/Switch-BbRK3HUZ.js.map +1 -0
- package/dist/cjs/{Tabs-CA0QAWp0.js → Tabs-BQl63Ewe.js} +3 -3
- package/dist/cjs/Tabs-BQl63Ewe.js.map +1 -0
- package/dist/cjs/{Textarea-Cw7Uea82.js → Textarea-bxleSw86.js} +34 -7
- package/dist/cjs/Textarea-bxleSw86.js.map +1 -0
- package/dist/cjs/{TimePicker-DW7OM3IE.js → TimePicker-lJ2985nh.js} +21 -4
- package/dist/cjs/TimePicker-lJ2985nh.js.map +1 -0
- package/dist/cjs/{Toastr-E0yLh_MW.js → Toastr-9DXjD-Mq.js} +9 -2
- package/dist/cjs/Toastr-9DXjD-Mq.js.map +1 -0
- package/dist/cjs/{TreeSelect-C9BSJt1d.js → TreeSelect-DDQx8FPS.js} +3 -2
- package/dist/cjs/TreeSelect-DDQx8FPS.js.map +1 -0
- package/dist/cjs/components/Avatar.js +1 -1
- package/dist/cjs/components/Checkbox.js +4 -2
- package/dist/cjs/components/Checkbox.js.map +1 -1
- package/dist/cjs/components/DataTable.js +2 -1
- package/dist/cjs/components/DataTable.js.map +1 -1
- package/dist/cjs/components/DatePicker.js +4 -2
- package/dist/cjs/components/DatePicker.js.map +1 -1
- package/dist/cjs/components/Dialog.js +1 -1
- package/dist/cjs/components/DropdownMenu.js +3 -1
- package/dist/cjs/components/DropdownMenu.js.map +1 -1
- package/dist/cjs/components/Input.js +4 -2
- package/dist/cjs/components/Input.js.map +1 -1
- package/dist/cjs/components/Label.js +2 -2
- package/dist/cjs/components/MultiEmailInput.js +4 -2
- package/dist/cjs/components/MultiEmailInput.js.map +1 -1
- package/dist/cjs/components/RadioGroup.js +4 -2
- package/dist/cjs/components/RadioGroup.js.map +1 -1
- package/dist/cjs/components/Select.js +7 -6
- package/dist/cjs/components/Select.js.map +1 -1
- package/dist/cjs/components/Slider.js +4 -2
- package/dist/cjs/components/Slider.js.map +1 -1
- package/dist/cjs/components/Stepper.js +1 -1
- package/dist/cjs/components/Switch.js +4 -2
- package/dist/cjs/components/Switch.js.map +1 -1
- package/dist/cjs/components/Tabs.js +2 -2
- package/dist/cjs/components/Textarea.js +4 -2
- package/dist/cjs/components/Textarea.js.map +1 -1
- package/dist/cjs/components/TimePicker.js +4 -2
- package/dist/cjs/components/TimePicker.js.map +1 -1
- package/dist/cjs/components/Toastr.js +1 -1
- package/dist/cjs/components/TreeSelect.js +3 -3
- package/dist/cjs/components/index.js +23 -22
- package/dist/cjs/components/index.js.map +1 -1
- package/dist/cjs/fieldIds-DiVU6GVS.js +14 -0
- package/dist/cjs/fieldIds-DiVU6GVS.js.map +1 -0
- package/dist/cjs/formik/BlockNavigation.js +1 -1
- package/dist/cjs/formik/Checkbox.js +4 -2
- package/dist/cjs/formik/Checkbox.js.map +1 -1
- package/dist/cjs/formik/Input.js +4 -2
- package/dist/cjs/formik/Input.js.map +1 -1
- package/dist/cjs/formik/MultiEmailInput.js +4 -2
- package/dist/cjs/formik/MultiEmailInput.js.map +1 -1
- package/dist/cjs/formik/RadioGroup.js +4 -2
- package/dist/cjs/formik/RadioGroup.js.map +1 -1
- package/dist/cjs/formik/Select.js +7 -6
- package/dist/cjs/formik/Select.js.map +1 -1
- package/dist/cjs/formik/Slider.js +4 -2
- package/dist/cjs/formik/Slider.js.map +1 -1
- package/dist/cjs/formik/Switch.js +4 -2
- package/dist/cjs/formik/Switch.js.map +1 -1
- package/dist/cjs/formik/Textarea.js +4 -2
- package/dist/cjs/formik/Textarea.js.map +1 -1
- package/dist/cjs/formik/TreeSelect.js +3 -3
- package/dist/cjs/formik/index.js +16 -15
- package/dist/cjs/formik/index.js.map +1 -1
- package/dist/cjs/hyphenize-BTrVNVv3.js +13 -0
- package/dist/cjs/hyphenize-BTrVNVv3.js.map +1 -0
- package/dist/cjs/index.js +23 -22
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/primitives/AlertDialog.js +6 -38
- package/dist/cjs/primitives/AlertDialog.js.map +1 -1
- package/dist/cjs/primitives/Combobox.js +2 -2
- package/dist/cjs/primitives/Field.js +1 -1
- package/dist/cjs/primitives/index.js +2 -2
- package/dist/components/Avatar.js +1 -1
- package/dist/components/Checkbox/Checkbox.d.ts +2 -0
- package/dist/components/Checkbox.js +4 -2
- package/dist/components/Checkbox.js.map +1 -1
- package/dist/components/DataTable.js +2 -1
- package/dist/components/DataTable.js.map +1 -1
- package/dist/components/DatePicker/DatePickerField.d.ts +1 -0
- package/dist/components/DatePicker/DatePickerTrigger.d.ts +1 -0
- package/dist/components/DatePicker/types.d.ts +2 -0
- package/dist/components/DatePicker.js +4 -2
- package/dist/components/DatePicker.js.map +1 -1
- package/dist/components/Dialog.js +1 -1
- package/dist/components/DropdownMenu.js +3 -1
- package/dist/components/DropdownMenu.js.map +1 -1
- package/dist/components/Input/Input.d.ts +2 -0
- package/dist/components/Input.js +4 -2
- package/dist/components/Input.js.map +1 -1
- package/dist/components/Label.js +2 -2
- package/dist/components/MultiEmailInput/types.d.ts +2 -0
- package/dist/components/MultiEmailInput.js +4 -2
- package/dist/components/MultiEmailInput.js.map +1 -1
- package/dist/components/RadioGroup/RadioGroup.d.ts +4 -0
- package/dist/components/RadioGroup.js +4 -2
- package/dist/components/RadioGroup.js.map +1 -1
- package/dist/components/Select/MultiSelectCombobox.types.d.ts +6 -0
- package/dist/components/Select/SelectAnchor.d.ts +19 -1
- package/dist/components/Select/SelectCombobox.types.d.ts +12 -2
- package/dist/components/Select/SelectFieldWrapper.d.ts +7 -1
- package/dist/components/Select/constants.d.ts +1 -0
- package/dist/components/Select/hooks/useCreatableItems.d.ts +3 -1
- package/dist/components/Select/hooks/useMultiSelectState.d.ts +8 -2
- package/dist/components/Select/hooks/useSelectState.d.ts +8 -2
- package/dist/components/Select/types.d.ts +23 -0
- package/dist/components/Select/utils.d.ts +13 -0
- package/dist/components/Select.js +7 -6
- package/dist/components/Select.js.map +1 -1
- package/dist/components/Slider/Slider.d.ts +2 -0
- package/dist/components/Slider.js +4 -2
- package/dist/components/Slider.js.map +1 -1
- package/dist/components/Stepper.js +1 -1
- package/dist/components/Switch/Switch.d.ts +2 -0
- package/dist/components/Switch.js +4 -2
- package/dist/components/Switch.js.map +1 -1
- package/dist/components/Tabs.js +2 -2
- package/dist/components/Textarea/Textarea.d.ts +2 -0
- package/dist/components/Textarea.js +4 -2
- package/dist/components/Textarea.js.map +1 -1
- package/dist/components/TimePicker/types.d.ts +2 -0
- package/dist/components/TimePicker.js +4 -2
- package/dist/components/TimePicker.js.map +1 -1
- package/dist/components/Toastr.js +1 -1
- package/dist/components/TreeSelect.js +3 -3
- package/dist/components/index.js +23 -22
- package/dist/components/index.js.map +1 -1
- package/dist/fieldIds-VpluAAMl.js +11 -0
- package/dist/fieldIds-VpluAAMl.js.map +1 -0
- package/dist/formik/BlockNavigation.js +1 -1
- package/dist/formik/Checkbox.js +4 -2
- package/dist/formik/Checkbox.js.map +1 -1
- package/dist/formik/Input.js +4 -2
- package/dist/formik/Input.js.map +1 -1
- package/dist/formik/MultiEmailInput.js +4 -2
- package/dist/formik/MultiEmailInput.js.map +1 -1
- package/dist/formik/RadioGroup.js +4 -2
- package/dist/formik/RadioGroup.js.map +1 -1
- package/dist/formik/Select.js +7 -6
- package/dist/formik/Select.js.map +1 -1
- package/dist/formik/Slider.js +4 -2
- package/dist/formik/Slider.js.map +1 -1
- package/dist/formik/Switch.js +4 -2
- package/dist/formik/Switch.js.map +1 -1
- package/dist/formik/Textarea.js +4 -2
- package/dist/formik/Textarea.js.map +1 -1
- package/dist/formik/TreeSelect.js +3 -3
- package/dist/formik/index.js +16 -15
- package/dist/formik/index.js.map +1 -1
- package/dist/hyphenize-TRhMI0tl.js +11 -0
- package/dist/hyphenize-TRhMI0tl.js.map +1 -0
- package/dist/index.js +23 -22
- package/dist/index.js.map +1 -1
- package/dist/primitives/AlertDialog.js +6 -38
- package/dist/primitives/AlertDialog.js.map +1 -1
- package/dist/primitives/Combobox.js +2 -2
- package/dist/primitives/Field.js +1 -1
- package/dist/primitives/index.js +2 -2
- package/dist/utils/fieldIds.d.ts +1 -1
- package/dist/utils/hyphenize.d.ts +1 -1
- package/package.json +1 -1
- package/dist/Avatar-ChF94Ken.js.map +0 -1
- package/dist/Checkbox-DiAngQvO.js.map +0 -1
- package/dist/DataTable-CwWARMEv.js.map +0 -1
- package/dist/DatePicker-Uf_h3ohA.js.map +0 -1
- package/dist/Dialog-D8C0-nEo.js.map +0 -1
- package/dist/HelpIcon-CbnRiSjn.js.map +0 -1
- package/dist/Input-CuIurquS.js.map +0 -1
- package/dist/MultiEmailInput-BB334s4C.js.map +0 -1
- package/dist/RadioGroup-CpgVdPzz.js.map +0 -1
- package/dist/Select-YWCfd2p1.js.map +0 -1
- package/dist/SelectFieldWrapper-D98IWsW5.js.map +0 -1
- package/dist/Slider-Bokg8-oi.js.map +0 -1
- package/dist/Stepper-DO7EBWYL.js.map +0 -1
- package/dist/Switch-Am2l2UdV.js.map +0 -1
- package/dist/Tabs-ModAabFc.js.map +0 -1
- package/dist/Textarea-CMGZZ4rL.js.map +0 -1
- package/dist/TimePicker-Ca7iF-a_.js.map +0 -1
- package/dist/Toastr-Cka6pudu.js.map +0 -1
- package/dist/TreeSelect-wYDOZ5yD.js.map +0 -1
- package/dist/cjs/Avatar-DGuMcBnh.js.map +0 -1
- package/dist/cjs/Checkbox-7lX2aMKA.js.map +0 -1
- package/dist/cjs/DataTable-ChgPVrRB.js.map +0 -1
- package/dist/cjs/DatePicker-Czp9QLy0.js.map +0 -1
- package/dist/cjs/Dialog-DNv7j7ts.js.map +0 -1
- package/dist/cjs/HelpIcon-QpZY6Zmc.js.map +0 -1
- package/dist/cjs/Input-lWo0YoZ9.js.map +0 -1
- package/dist/cjs/MultiEmailInput-BlIqzq-o.js.map +0 -1
- package/dist/cjs/RadioGroup-DCEw94Dk.js.map +0 -1
- package/dist/cjs/Select-Bs5Fp3wj.js.map +0 -1
- package/dist/cjs/SelectFieldWrapper-BLVvwUcK.js.map +0 -1
- package/dist/cjs/Slider-CRmd_VMs.js.map +0 -1
- package/dist/cjs/Stepper-BtZG_XmC.js.map +0 -1
- package/dist/cjs/Switch-DY7bdiEz.js.map +0 -1
- package/dist/cjs/Tabs-CA0QAWp0.js.map +0 -1
- package/dist/cjs/Textarea-Cw7Uea82.js.map +0 -1
- package/dist/cjs/TimePicker-DW7OM3IE.js.map +0 -1
- package/dist/cjs/Toastr-E0yLh_MW.js.map +0 -1
- package/dist/cjs/TreeSelect-C9BSJt1d.js.map +0 -1
- package/dist/cjs/hyphenize-B8IGPzjp.js +0 -8
- package/dist/cjs/hyphenize-B8IGPzjp.js.map +0 -1
- package/dist/hyphenize-BU4K8zjb.js +0 -6
- package/dist/hyphenize-BU4K8zjb.js.map +0 -1
|
@@ -7,6 +7,7 @@ import { u as useControlledOpen, l as isFixedWidthFormat, m as buildRangeMaskTem
|
|
|
7
7
|
import pureDayjs from 'dayjs';
|
|
8
8
|
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
9
9
|
import { dayjs } from '@bigbinary/neeto-commons-frontend/utils';
|
|
10
|
+
import { b as buildTestIdPrefix } from './fieldIds-VpluAAMl.js';
|
|
10
11
|
import { Button } from './primitives/Button.js';
|
|
11
12
|
import { Field, FieldLabel, FieldContent, FieldError, FieldDescription } from './primitives/Field.js';
|
|
12
13
|
import { c as createLucideIcon } from './createLucideIcon-C8ycilSN.js';
|
|
@@ -232,6 +233,7 @@ const TimezoneSelect = ({
|
|
|
232
233
|
/* @__PURE__ */ jsx(
|
|
233
234
|
"select",
|
|
234
235
|
{
|
|
236
|
+
"data-testid": "timezone-select",
|
|
235
237
|
value: value ?? "",
|
|
236
238
|
onChange: (e) => onChange(e.target.value || void 0),
|
|
237
239
|
className: cn(
|
|
@@ -292,6 +294,7 @@ const DatePickerField = forwardRef(
|
|
|
292
294
|
labelProps,
|
|
293
295
|
errorId,
|
|
294
296
|
helpTextId,
|
|
297
|
+
errorTestId,
|
|
295
298
|
children
|
|
296
299
|
}, ref) => /* @__PURE__ */ jsxs(
|
|
297
300
|
Field,
|
|
@@ -313,7 +316,7 @@ const DatePickerField = forwardRef(
|
|
|
313
316
|
),
|
|
314
317
|
/* @__PURE__ */ jsxs(FieldContent, { children: [
|
|
315
318
|
children,
|
|
316
|
-
!!error && /* @__PURE__ */ jsx(FieldError, { id: errorId, children: error }),
|
|
319
|
+
!!error && /* @__PURE__ */ jsx(FieldError, { id: errorId, "data-testid": errorTestId, children: error }),
|
|
317
320
|
helpText && /* @__PURE__ */ jsx(FieldDescription, { id: helpTextId, children: helpText })
|
|
318
321
|
] })
|
|
319
322
|
]
|
|
@@ -335,6 +338,7 @@ const DatePickerTrigger = forwardRef(
|
|
|
335
338
|
iconSizeClass,
|
|
336
339
|
label,
|
|
337
340
|
ariaDescribedBy,
|
|
341
|
+
inputTestId,
|
|
338
342
|
placeholder,
|
|
339
343
|
inputText,
|
|
340
344
|
allowClear,
|
|
@@ -376,6 +380,7 @@ const DatePickerTrigger = forwardRef(
|
|
|
376
380
|
"aria-label": label || "Pick a date",
|
|
377
381
|
"aria-describedby": ariaDescribedBy,
|
|
378
382
|
"aria-invalid": !!error || void 0,
|
|
383
|
+
"data-testid": inputTestId,
|
|
379
384
|
placeholder,
|
|
380
385
|
value: inputText,
|
|
381
386
|
onChange: onInputChange,
|
|
@@ -402,7 +407,7 @@ const DatePickerTrigger = forwardRef(
|
|
|
402
407
|
),
|
|
403
408
|
"aria-label": "Clear date",
|
|
404
409
|
tabIndex: -1,
|
|
405
|
-
children: /* @__PURE__ */ jsx(X, { className: iconSizeClass })
|
|
410
|
+
children: /* @__PURE__ */ jsx(X, { className: iconSizeClass, "data-testid": "date-time-clear-icon" })
|
|
406
411
|
}
|
|
407
412
|
)
|
|
408
413
|
]
|
|
@@ -701,7 +706,8 @@ const DatePicker = forwardRef(
|
|
|
701
706
|
side = "bottom",
|
|
702
707
|
align = "start",
|
|
703
708
|
trigger,
|
|
704
|
-
weekStartsOn = 0
|
|
709
|
+
weekStartsOn = 0,
|
|
710
|
+
dataTestId
|
|
705
711
|
}, ref) => {
|
|
706
712
|
const generatedId = useId();
|
|
707
713
|
const errorId = `error_${generatedId}`;
|
|
@@ -1069,6 +1075,7 @@ const DatePicker = forwardRef(
|
|
|
1069
1075
|
if (dateVal instanceof Date) setCalendarMonth(dateVal);
|
|
1070
1076
|
}, [open]);
|
|
1071
1077
|
const hasField = !!(label || error || helpText);
|
|
1078
|
+
const testIdPrefix = buildTestIdPrefix(dataTestId, label);
|
|
1072
1079
|
const showFooter = showTime || needConfirm || !!onTimezoneChange;
|
|
1073
1080
|
const todayDate = toBrowserLocalDate(/* @__PURE__ */ new Date());
|
|
1074
1081
|
const handleGridPickerSelect = (date) => {
|
|
@@ -1131,6 +1138,7 @@ const DatePicker = forwardRef(
|
|
|
1131
1138
|
iconSizeClass: sizeConfig.icon,
|
|
1132
1139
|
label,
|
|
1133
1140
|
ariaDescribedBy,
|
|
1141
|
+
inputTestId: dataTestId || label ? `${testIdPrefix}-input` : "picker-input",
|
|
1134
1142
|
placeholder: placeholder ?? defaultPlaceholder,
|
|
1135
1143
|
inputText,
|
|
1136
1144
|
allowClear,
|
|
@@ -1283,6 +1291,7 @@ const DatePicker = forwardRef(
|
|
|
1283
1291
|
labelProps,
|
|
1284
1292
|
errorId,
|
|
1285
1293
|
helpTextId,
|
|
1294
|
+
errorTestId: `${testIdPrefix}-input-error`,
|
|
1286
1295
|
children: triggerContent
|
|
1287
1296
|
}
|
|
1288
1297
|
);
|
|
@@ -1291,4 +1300,4 @@ const DatePicker = forwardRef(
|
|
|
1291
1300
|
DatePicker.displayName = "DatePicker";
|
|
1292
1301
|
|
|
1293
1302
|
export { DatePicker as D };
|
|
1294
|
-
//# sourceMappingURL=DatePicker-
|
|
1303
|
+
//# sourceMappingURL=DatePicker-BoXx1Wve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePicker-BoXx1Wve.js","sources":["../node_modules/lucide-react/dist/esm/icons/calendar.js","../src/components/DatePicker/constants.ts","../src/components/DatePicker/utils.ts","../src/components/DatePicker/TimezoneSelect.tsx","../src/components/DatePicker/DatePickerFooter.tsx","../src/components/DatePicker/DatePickerField.tsx","../src/components/DatePicker/DatePickerTrigger.tsx","../src/components/DatePicker/MonthPicker.tsx","../src/components/DatePicker/RangeCalendar.tsx","../src/components/DatePicker/useRangePicker.ts","../src/components/DatePicker/YearPicker.tsx","../src/components/DatePicker/DatePicker.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }],\n [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"4\", rx: \"2\", key: \"1hopcy\" }],\n [\"path\", { d: \"M3 10h18\", key: \"8toen8\" }]\n];\nconst Calendar = createLucideIcon(\"calendar\", __iconNode);\n\nexport { __iconNode, Calendar as default };\n//# sourceMappingURL=calendar.js.map\n","import type { TimeValue } from \"../TimePicker/types\";\n\nexport const DEFAULT_DATE_FORMAT = \"dd/MM/yyyy\";\nexport const DEFAULT_TIME_FORMAT = \"HH:mm:ss\";\n\nexport const INITIAL_TIME_VALUE: TimeValue = {\n hours: 0,\n minutes: 0,\n seconds: 0,\n};\n\nexport const SIZE_CONFIG = {\n small: {\n trigger: \"h-8 md:h-7\",\n input: \"text-base md:text-xs\",\n icon: \"size-3.5\",\n },\n medium: {\n trigger: \"h-8\",\n input: \"text-base md:text-sm\",\n icon: \"size-4\",\n },\n large: {\n trigger: \"h-10\",\n input: \"text-base md:text-sm\",\n icon: \"size-5\",\n },\n} as const;\n","import pureDayjs from \"dayjs\";\nimport type { Dayjs } from \"dayjs\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat\";\nimport { dayjs } from \"@bigbinary/neeto-commons-frontend/utils\";\n\nimport type { TimeValue } from \"../TimePicker/types\";\n\npureDayjs.extend(customParseFormat);\n\n/**\n * Reverse timezone conversion: extract date/time values from a timezone-aware\n * dayjs and create a browser-local Date. This undoes applyTimezone so that\n * Calendar and input display the correct date after a controlled round-trip.\n */\nexport const toBrowserLocalDate = (date: Date): Date => {\n const d = dayjs(date);\n\n return new Date(\n d.year(),\n d.month(),\n d.date(),\n d.hour(),\n d.minute(),\n d.second()\n );\n};\n\nexport const toNativeDate = (value: unknown): Date | null => {\n if (value == null) return null;\n if (value instanceof Date) return value;\n\n if (typeof (value as { toDate?: () => Date }).toDate === \"function\") {\n return toBrowserLocalDate((value as { toDate: () => Date }).toDate());\n }\n\n if (typeof value === \"string\") {\n const parsed = new Date(value);\n if (!isNaN(parsed.getTime())) return toBrowserLocalDate(parsed);\n }\n\n return null;\n};\n\nexport const coerceDateValue = (\n value: unknown,\n type: \"date\" | \"range\"\n): Date | [Date | null, Date | null] | null => {\n if (value == null) return null;\n if (type === \"range\" && Array.isArray(value)) {\n return [toNativeDate(value[0]), toNativeDate(value[1])];\n }\n\n return toNativeDate(value);\n};\n\nexport const getInitialCalendarMonth = (\n value: unknown,\n defaultValue: unknown,\n type: \"date\" | \"range\"\n): Date => {\n const initial = coerceDateValue(value ?? defaultValue, type);\n if (initial instanceof Date) return initial;\n if (Array.isArray(initial) && initial[0] instanceof Date) return initial[0];\n\n return new Date();\n};\n\nconst normalizeToDayjsFormat = (fmt: string): string =>\n fmt\n .replace(/\\byyyy\\b/g, \"YYYY\")\n .replace(/\\byy\\b/g, \"YY\")\n .replace(/\\bdd\\b/g, \"DD\")\n .replace(/\\bd\\b/g, \"D\");\n\nconst normalizeToDateFnsFormat = (fmt: string): string =>\n fmt\n .replace(/YYYY/g, \"yyyy\")\n .replace(/YY/g, \"yy\")\n .replace(/DD/g, \"dd\")\n .replace(/\\bD\\b/g, \"d\");\n\n/**\n * Format a date for display using browser-local time.\n * Calendar and input always show browser-local dates.\n */\nexport const formatDate = (date: Date | null, formatStr: string): string => {\n if (!date) return \"\";\n\n try {\n return pureDayjs(date).format(normalizeToDayjsFormat(formatStr));\n } catch {\n return \"\";\n }\n};\n\n/**\n * Parse a date string using browser-local pureDayjs (not timezone-aware).\n * The user types in browser-local time; timezone conversion happens\n * later in commitValue via applyTimezone.\n */\nexport const parseDate = (str: string, formatStr: string): Date | null => {\n if (!str) return null;\n\n const dayjsFmt = normalizeToDayjsFormat(formatStr);\n const parsed = pureDayjs(str, dayjsFmt);\n if (parsed.isValid()) return parsed.toDate();\n\n const fallbackFormats = [\n \"DD/MM/YYYY\",\n \"MM/DD/YYYY\",\n \"YYYY-MM-DD\",\n \"DD-MM-YYYY\",\n \"DD/MM/YYYY HH:mm:ss\",\n \"DD/MM/YYYY HH:mm\",\n ];\n\n for (const fmt of fallbackFormats) {\n if (fmt === dayjsFmt) continue;\n\n const attempt = pureDayjs(str, fmt);\n if (attempt.isValid()) return attempt.toDate();\n }\n\n return null;\n};\n\nexport const applyTimeToDate = (date: Date, time: TimeValue): Date => {\n const result = new Date(date);\n result.setHours(time.hours, time.minutes, time.seconds ?? 0, 0);\n\n return result;\n};\n\n/**\n * Reinterpret a native Date's browser-local time values in the user's configured timezone.\n * Formats in browser-local time (pureDayjs), then reparses through timezone-aware dayjs.\n * Matches neetoUI's getTimezoneAppliedDateTime behavior.\n */\nexport const applyTimezone = (date: Date): Date => {\n const dateStr = pureDayjs(date).format(\"YYYY-MM-DD HH:mm:ss\");\n\n return dayjs(dateStr).toDate();\n};\n\nexport const toUserTzDayjs = (date: Date): Dayjs =>\n dayjs(pureDayjs(date).format(\"YYYY-MM-DD HH:mm:ss\"));\n\nexport const toDayjs = (date: Date): Dayjs => dayjs(date);\n\nexport const getDisplayFormat = (\n dateFormat: string,\n timeFormat: string,\n showTime: boolean\n): string => {\n const fmt = showTime ? `${dateFormat} ${timeFormat}` : dateFormat;\n\n return normalizeToDateFnsFormat(fmt);\n};\n\nexport const getDatePlaceholder = (\n dateFormat: string,\n timeFormat: string,\n showTime: boolean,\n type: \"date\" | \"range\"\n): string => {\n const single = showTime\n ? `${dateFormat.toUpperCase()} ${timeFormat}`\n : dateFormat.toUpperCase();\n\n return type === \"range\" ? `${single} - ${single}` : single;\n};\n\nexport const isDatePartComplete = (\n part: string,\n maskEnabled: boolean,\n singleDateLen: number\n): boolean => (maskEnabled ? part.length >= singleDateLen : part.length > 0);\n\nexport const parseRangeText = (\n text: string,\n displayFormat: string,\n maskEnabled: boolean,\n singleDateLen: number\n): [Date, Date] | null => {\n const parts = text.split(\" - \");\n if (parts.length !== 2) return null;\n\n if (\n !isDatePartComplete(parts[0], maskEnabled, singleDateLen) ||\n !isDatePartComplete(parts[1], maskEnabled, singleDateLen)\n )\n return null;\n\n const from = parseDate(parts[0], displayFormat);\n const to = parseDate(parts[1], displayFormat);\n\n return from && to ? [from, to] : null;\n};\n\nexport const startOfWeek = (date: Date, weekStartsOn = 0): Date => {\n const d = new Date(date);\n const diff = (d.getDay() - weekStartsOn + 7) % 7;\n d.setDate(d.getDate() - diff);\n d.setHours(0, 0, 0, 0);\n\n return d;\n};\n\nexport const weekDaysFrom = (start: Date): Date[] =>\n Array.from({ length: 7 }, (_, i) => {\n const d = new Date(start);\n d.setDate(start.getDate() + i);\n\n return d;\n });\n\nexport const isMonthDisabled = (\n monthDate: Date,\n minDate?: Date,\n maxDate?: Date\n): boolean => {\n const monthStart = new Date(monthDate.getFullYear(), monthDate.getMonth(), 1);\n const monthEnd = new Date(\n monthDate.getFullYear(),\n monthDate.getMonth() + 1,\n 0,\n 23,\n 59,\n 59,\n 999\n );\n if (maxDate && monthStart > maxDate) return true;\n if (minDate && monthEnd < minDate) return true;\n\n return false;\n};\n\nexport const isYearDisabled = (\n yearDate: Date,\n minDate?: Date,\n maxDate?: Date\n): boolean => {\n const yearStart = new Date(yearDate.getFullYear(), 0, 1);\n const yearEnd = new Date(yearDate.getFullYear(), 11, 31, 23, 59, 59, 999);\n if (maxDate && yearStart > maxDate) return true;\n if (minDate && yearEnd < minDate) return true;\n\n return false;\n};\n\nexport const buildMonth = (year: number, month: number): Date =>\n new Date(year, month, 1);\n\nexport const isSameMonth = (a: Date | null, b: Date): boolean =>\n !!a && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n\nexport const isSameDay = (a: Date | null, b: Date | null): boolean =>\n !!a &&\n !!b &&\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate();\n\nexport const orderRange = (\n from: Date | null,\n to: Date | null\n): [Date | null, Date | null] => {\n if (from && to && from.getTime() > to.getTime()) return [to, from];\n\n return [from, to];\n};\n\nexport const parseGridcellDay = (target: EventTarget | null): Date | null => {\n const el = target as HTMLElement | null;\n const cell = el?.closest('[role=\"gridcell\"][data-day]');\n const dayAttr = cell?.getAttribute(\"data-day\");\n if (!dayAttr) return null;\n\n // react-day-picker emits \"YYYY-MM-DD\". `new Date(\"YYYY-MM-DD\")` parses as UTC\n // midnight, which shifts the date by the local TZ offset (e.g. shows as 05:30\n // AM in IST). Parse the parts directly to get local midnight.\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(dayAttr);\n if (match) return new Date(+match[1], +match[2] - 1, +match[3]);\n\n const parsed = new Date(dayAttr);\n\n return Number.isNaN(parsed.getTime()) ? null : parsed;\n};\n\nexport const computeRangePreview = ({\n pendingRange,\n committed,\n hoveredDate,\n rangeStep,\n}: {\n pendingRange: [Date | null, Date | null] | null;\n committed: [Date | null, Date | null] | null;\n hoveredDate: Date | null;\n rangeStep: \"from\" | \"to\";\n}): { from: Date | null; to: Date | null } => {\n let from = pendingRange ? pendingRange[0] : (committed?.[0] ?? null);\n let to = pendingRange ? pendingRange[1] : (committed?.[1] ?? null);\n\n if (hoveredDate) {\n if (rangeStep === \"from\" && !pendingRange?.[0]) {\n from = hoveredDate;\n if (to && hoveredDate.getTime() > to.getTime()) to = null;\n } else if (\n rangeStep === \"to\" &&\n !pendingRange?.[1] &&\n !isSameDay(from, hoveredDate)\n ) {\n to = hoveredDate;\n if (from && hoveredDate.getTime() < from.getTime()) from = null;\n }\n }\n\n [from, to] = orderRange(from, to);\n\n return { from, to };\n};\n\nexport const decadeStartFor = (year: number): number =>\n Math.floor(year / 10) * 10;\n","import React from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\n\ninterface TimezoneSelectProps {\n value?: string;\n onChange: (tz: string | undefined) => void;\n className?: string;\n}\n\nconst TIMEZONE_OPTIONS = [\n { label: \"Local\", value: \"\" },\n { label: \"UTC\", value: \"utc\" },\n] as const;\n\nconst TimezoneSelect: React.FC<TimezoneSelectProps> = ({\n value,\n onChange,\n className,\n}) => (\n <div className={cn(\"flex items-center gap-1.5 text-sm\", className)}>\n <span className=\"text-muted-foreground text-xs\">Timezone</span>\n <select\n data-testid=\"timezone-select\"\n value={value ?? \"\"}\n onChange={e => onChange(e.target.value || undefined)}\n className={cn(\n \"rounded-md border border-input bg-background px-2 py-0.5 text-xs\",\n \"focus:outline-none focus:ring-1 focus:ring-ring\"\n )}\n aria-label=\"Select timezone\"\n >\n {TIMEZONE_OPTIONS.map(opt => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n);\n\nTimezoneSelect.displayName = \"TimezoneSelect\";\n\nexport { TimezoneSelect };\n","import React from \"react\";\n\nimport { Button } from \"src/primitives/Button\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { TimezoneSelect } from \"./TimezoneSelect\";\n\ninterface DatePickerFooterProps {\n showTime?: boolean;\n needConfirm?: boolean;\n timezone?: string;\n onTimezoneChange?: (tz: string | undefined) => void;\n onNow: () => void;\n onOk: () => void;\n okLabel?: string;\n className?: string;\n}\n\nconst DatePickerFooter: React.FC<DatePickerFooterProps> = ({\n showTime,\n needConfirm,\n timezone,\n onTimezoneChange,\n onNow,\n onOk,\n okLabel = \"OK\",\n className,\n}) => {\n const showOkButton = showTime || needConfirm;\n\n return (\n <div\n className={cn(\n \"flex items-center border-t border-border px-3 py-2\",\n className\n )}\n >\n <Button variant=\"ghost\" size=\"sm\" onClick={onNow} className=\"text-xs\">\n Now\n </Button>\n <div className=\"flex-1\" />\n {onTimezoneChange && (\n <TimezoneSelect\n value={timezone}\n onChange={onTimezoneChange}\n className=\"me-2\"\n />\n )}\n {showOkButton && (\n <Button size=\"sm\" onClick={onOk} className=\"text-xs\">\n {okLabel}\n </Button>\n )}\n </div>\n );\n};\n\nDatePickerFooter.displayName = \"DatePickerFooter\";\n\nexport { DatePickerFooter };\n","import React, { forwardRef } from \"react\";\n\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\n\ninterface DatePickerFieldProps {\n disabled: boolean;\n error: React.ReactNode | undefined;\n className?: string;\n label?: React.ReactNode;\n required?: boolean;\n helpText?: React.ReactNode;\n labelProps?: Record<string, unknown>;\n errorId: string;\n helpTextId: string;\n errorTestId?: string;\n children: React.ReactNode;\n}\n\nexport const DatePickerField = forwardRef<HTMLDivElement, DatePickerFieldProps>(\n (\n {\n disabled,\n error,\n className,\n label,\n required,\n helpText,\n labelProps,\n errorId,\n helpTextId,\n errorTestId,\n children,\n },\n ref\n ) => (\n <Field\n ref={ref}\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n >\n {label && (\n <FieldLabel\n {...(labelProps as React.ComponentProps<typeof FieldLabel>)}\n >\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n <FieldContent>\n {children}\n {!!error && (\n <FieldError id={errorId} data-testid={errorTestId}>\n {error}\n </FieldError>\n )}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </FieldContent>\n </Field>\n )\n);\n\nDatePickerField.displayName = \"DatePickerField\";\n","import React, { forwardRef } from \"react\";\n\nimport { CalendarIcon, X } from \"lucide-react\";\n\nimport { PopoverAnchor } from \"src/primitives/Popover\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\ninterface DatePickerTriggerProps {\n containerRef: React.RefObject<HTMLDivElement | null>;\n inputRef: React.RefObject<HTMLInputElement | null>;\n disabled: boolean;\n error: React.ReactNode | undefined;\n hasField: boolean;\n className?: string;\n triggerSizeClass: string;\n inputSizeClass: string;\n iconSizeClass: string;\n label?: React.ReactNode;\n ariaDescribedBy?: string;\n inputTestId?: string;\n placeholder: string;\n inputText: string;\n allowClear: boolean;\n timezone?: string;\n onInputChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onInputKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n onInputFocus: () => void;\n onInputBlur: (e: React.FocusEvent<HTMLInputElement>) => void;\n onClear: (e: React.MouseEvent) => void;\n}\n\nexport const DatePickerTrigger = forwardRef<\n HTMLDivElement,\n DatePickerTriggerProps\n>(\n (\n {\n containerRef,\n inputRef,\n disabled,\n error,\n hasField,\n className,\n triggerSizeClass,\n inputSizeClass,\n iconSizeClass,\n label,\n ariaDescribedBy,\n inputTestId,\n placeholder,\n inputText,\n allowClear,\n timezone,\n onInputChange,\n onInputKeyDown,\n onInputFocus,\n onInputBlur,\n onClear,\n },\n _ref\n ) => (\n <PopoverAnchor asChild>\n <div\n ref={containerRef}\n className={cn(\n \"relative flex w-full cursor-text items-center gap-2 rounded-md border border-input bg-transparent pe-8 ps-3\",\n \"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2\",\n disabled && \"cursor-not-allowed opacity-50\",\n !!error && \"border-destructive ring-destructive/20 ring-3\",\n triggerSizeClass,\n !hasField && className\n )}\n onClick={() => {\n if (disabled) return;\n\n inputRef.current?.focus();\n }}\n >\n <CalendarIcon\n className={cn(\"shrink-0 text-muted-foreground\", iconSizeClass)}\n />\n <input\n ref={inputRef}\n type=\"text\"\n disabled={disabled}\n aria-label={(label as string) || \"Pick a date\"}\n aria-describedby={ariaDescribedBy}\n aria-invalid={!!error || undefined}\n data-testid={inputTestId}\n placeholder={placeholder}\n value={inputText}\n onChange={onInputChange}\n onKeyDown={onInputKeyDown}\n onFocus={onInputFocus}\n onBlur={onInputBlur}\n className={cn(\n \"min-w-0 flex-1 bg-transparent outline-none placeholder:text-muted-foreground\",\n \"disabled:cursor-not-allowed\",\n inputSizeClass\n )}\n />\n {timezone && (\n <span className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground\">\n {timezone.toUpperCase()}\n </span>\n )}\n {allowClear && (\n <button\n type=\"button\"\n onPointerDown={e => e.preventDefault()}\n onClick={onClear}\n className={cn(\n \"absolute inset-y-0 end-2 flex items-center text-muted-foreground hover:text-foreground focus:outline-none\",\n !(inputText && !disabled) && \"invisible\"\n )}\n aria-label=\"Clear date\"\n tabIndex={-1}\n >\n <X className={iconSizeClass} data-testid=\"date-time-clear-icon\" />\n </button>\n )}\n </div>\n </PopoverAnchor>\n )\n);\n\nDatePickerTrigger.displayName = \"DatePickerTrigger\";\n","import { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\n\nimport { Button } from \"src/primitives/Button\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { buildMonth, isSameMonth } from \"./utils\";\n\ninterface MonthPickerProps {\n /** Currently selected date (used to highlight the active month). */\n value: Date | null;\n /** Year currently shown in the grid. */\n displayedYear: number;\n /** Callback when the user navigates to a different year. */\n onYearChange: (year: number) => void;\n /** Callback when a month is picked. */\n onSelect: (date: Date) => void;\n /** Predicate to disable an entire month (any day in it returning true disables the month). */\n isDisabled?: (date: Date) => boolean;\n /** Locale code for month-name formatting. */\n locale?: string;\n}\n\nconst MonthPicker = ({\n value,\n displayedYear,\n onYearChange,\n onSelect,\n isDisabled,\n locale,\n}: MonthPickerProps) => {\n const months = Array.from({ length: 12 }, (_, m) =>\n buildMonth(displayedYear, m)\n );\n const monthName = (date: Date) =>\n date.toLocaleString(locale, { month: \"short\" });\n\n return (\n <div className=\"bg-background flex w-[16rem] flex-col gap-3 p-2\">\n <div className=\"flex items-center justify-between\">\n <Button\n aria-label=\"Previous year\"\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => onYearChange(displayedYear - 1)}\n >\n <ChevronLeftIcon className=\"size-4 rtl:rotate-180\" />\n </Button>\n <span className=\"text-sm font-medium\">{displayedYear}</span>\n <Button\n aria-label=\"Next year\"\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => onYearChange(displayedYear + 1)}\n >\n <ChevronRightIcon className=\"size-4 rtl:rotate-180\" />\n </Button>\n </div>\n <div className=\"grid grid-cols-3 gap-2\">\n {months.map(monthDate => {\n const disabled = isDisabled?.(monthDate) ?? false;\n const selected = isSameMonth(value, monthDate);\n\n return (\n <button\n aria-pressed={selected}\n className={cn(\n \"rounded-md py-2 text-sm transition-colors\",\n \"hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50\",\n selected &&\n \"bg-primary text-primary-foreground hover:bg-primary\"\n )}\n disabled={disabled}\n key={monthDate.getMonth()}\n type=\"button\"\n onClick={() => onSelect(monthDate)}\n >\n {monthName(monthDate)}\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n\nexport { MonthPicker };\n","import type React from \"react\";\nimport type { DateRange } from \"react-day-picker\";\n\nimport { Calendar } from \"src/primitives/Calendar\";\n\ninterface RangeCalendarProps {\n todayDate: Date;\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n month: Date;\n onMonthChange: (date: Date) => void;\n selected: DateRange | undefined;\n onSelect: (range: DateRange | undefined, triggerDate: Date) => void;\n disabled: (date: Date) => boolean;\n fromDate?: Date;\n toDate?: Date;\n onHoverIn: (e: React.MouseEvent<HTMLElement>) => void;\n onHoverOut: () => void;\n numberOfMonths?: number;\n}\n\nexport const RangeCalendar = ({\n todayDate,\n weekStartsOn,\n month,\n onMonthChange,\n selected,\n onSelect,\n disabled,\n fromDate,\n toDate,\n onHoverIn,\n onHoverOut,\n numberOfMonths = 2,\n}: RangeCalendarProps) => (\n <div onMouseOver={onHoverIn} onMouseLeave={onHoverOut}>\n <Calendar\n mode=\"range\"\n numberOfMonths={numberOfMonths}\n captionLayout=\"dropdown\"\n today={todayDate}\n weekStartsOn={weekStartsOn}\n className=\"[&_[data-outside][data-selected=true]]:!bg-transparent [&_[data-outside][data-selected=true]]:after:!bg-transparent [&_[data-outside]_button]:!bg-transparent [&_[data-outside]_button]:!text-muted-foreground\"\n month={month}\n onMonthChange={onMonthChange}\n selected={selected}\n onSelect={onSelect}\n disabled={disabled}\n {...(fromDate && { fromDate })}\n {...(toDate && { toDate })}\n />\n </div>\n);\n","import { useCallback, useMemo, useState } from \"react\";\nimport type { DateRange } from \"react-day-picker\";\n\nimport { computeRangePreview, orderRange, parseGridcellDay } from \"./utils\";\n\ntype RangeTuple = [Date | null, Date | null];\n\ninterface UseRangePickerOptions {\n currentValue: unknown;\n showTime: boolean;\n needConfirm: boolean;\n commitValue: (value: Date | [Date, Date] | null) => void;\n setOpen: (open: boolean) => void;\n}\n\nexport const useRangePicker = ({\n currentValue,\n showTime,\n needConfirm,\n commitValue,\n setOpen,\n}: UseRangePickerOptions) => {\n const [pendingRange, setPendingRange] = useState<RangeTuple | null>(null);\n const [rangeSelectionStep, setRangeSelectionStep] = useState<\"from\" | \"to\">(\n \"from\"\n );\n const [hoveredDate, setHoveredDate] = useState<Date | null>(null);\n\n const committed = (currentValue as RangeTuple | null) ?? null;\n\n const resetTransientState = useCallback(() => {\n setPendingRange(null);\n setRangeSelectionStep(\"from\");\n setHoveredDate(null);\n }, []);\n\n const handleRangeSelect = useCallback(\n (_range: { from?: Date; to?: Date } | undefined, triggerDate: Date) => {\n if (!triggerDate) return;\n\n if (showTime || needConfirm) {\n if (rangeSelectionStep === \"from\") {\n const existingTo = pendingRange?.[1] ?? committed?.[1] ?? null;\n const nextTo =\n existingTo && triggerDate <= existingTo ? existingTo : null;\n setPendingRange([triggerDate, nextTo]);\n } else {\n const existingFrom = pendingRange?.[0] ?? committed?.[0] ?? null;\n const nextFrom =\n existingFrom && triggerDate >= existingFrom ? existingFrom : null;\n setPendingRange([nextFrom, triggerDate]);\n }\n\n return;\n }\n\n if (rangeSelectionStep === \"from\" || !pendingRange?.[0]) {\n const existingTo = pendingRange?.[1] ?? committed?.[1] ?? null;\n const nextTo =\n existingTo && triggerDate <= existingTo ? existingTo : null;\n setPendingRange([triggerDate, nextTo]);\n setRangeSelectionStep(\"to\");\n\n return;\n }\n\n const [from, to] = orderRange(pendingRange[0], triggerDate) as [\n Date,\n Date,\n ];\n\n setRangeSelectionStep(\"from\");\n setPendingRange(null);\n\n commitValue([from, to]);\n setOpen(false);\n },\n [\n rangeSelectionStep,\n pendingRange,\n committed,\n showTime,\n needConfirm,\n commitValue,\n setOpen,\n ]\n );\n\n const handleHoverIn = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const parsed = parseGridcellDay(e.target);\n if (!parsed) return;\n\n if (hoveredDate && hoveredDate.getTime() === parsed.getTime()) return;\n\n setHoveredDate(parsed);\n },\n [hoveredDate]\n );\n\n const handleHoverOut = useCallback(() => setHoveredDate(null), []);\n\n const memoizedRangeSelected = useMemo<DateRange | undefined>(() => {\n const { from, to } = computeRangePreview({\n pendingRange,\n committed,\n hoveredDate,\n rangeStep: rangeSelectionStep,\n });\n\n if (!from && !to) return undefined;\n\n return { from: from ?? undefined, to: to ?? undefined };\n }, [pendingRange, committed, hoveredDate, rangeSelectionStep]);\n\n const getPreviewParts = useCallback(\n () =>\n computeRangePreview({\n pendingRange,\n committed,\n hoveredDate,\n rangeStep: rangeSelectionStep,\n }),\n [pendingRange, committed, hoveredDate, rangeSelectionStep]\n );\n\n return {\n pendingRange,\n rangeSelectionStep,\n setRangeSelectionStep,\n hoveredDate,\n handleRangeSelect,\n handleHoverIn,\n handleHoverOut,\n memoizedRangeSelected,\n getPreviewParts,\n resetTransientState,\n };\n};\n","import { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\n\nimport { Button } from \"src/primitives/Button\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { decadeStartFor } from \"./utils\";\n\ninterface YearPickerProps {\n /** Currently selected date (used to highlight the active year). */\n value: Date | null;\n /** A year inside the decade currently shown in the grid. */\n displayedYear: number;\n /** Callback when the user navigates to a different decade (receives any year inside it). */\n onYearChange: (year: number) => void;\n /** Callback when a year is picked. */\n onSelect: (date: Date) => void;\n /** Predicate to disable an entire year (e.g. when out of min/max range). */\n isDisabled?: (date: Date) => boolean;\n}\n\nconst YearPicker = ({\n value,\n displayedYear,\n onYearChange,\n onSelect,\n isDisabled,\n}: YearPickerProps) => {\n const decadeStart = decadeStartFor(displayedYear);\n const years = Array.from({ length: 12 }, (_, i) => decadeStart - 1 + i);\n const selectedYear = value?.getFullYear();\n\n return (\n <div className=\"bg-background flex w-[16rem] flex-col gap-3 p-2\">\n <div className=\"flex items-center justify-between\">\n <Button\n aria-label=\"Previous decade\"\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => onYearChange(decadeStart - 10)}\n >\n <ChevronLeftIcon className=\"size-4 rtl:rotate-180\" />\n </Button>\n <span className=\"text-sm font-medium\">\n {decadeStart}-{decadeStart + 9}\n </span>\n <Button\n aria-label=\"Next decade\"\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => onYearChange(decadeStart + 10)}\n >\n <ChevronRightIcon className=\"size-4 rtl:rotate-180\" />\n </Button>\n </div>\n <div className=\"grid grid-cols-3 gap-2\">\n {years.map(year => {\n const yearDate = new Date(year, 0, 1);\n const disabled = isDisabled?.(yearDate) ?? false;\n const selected = selectedYear === year;\n const outsideDecade = year < decadeStart || year > decadeStart + 9;\n\n return (\n <button\n aria-pressed={selected}\n className={cn(\n \"rounded-md py-2 text-sm transition-colors\",\n \"hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50\",\n outsideDecade && \"text-muted-foreground\",\n selected &&\n \"bg-primary text-primary-foreground hover:bg-primary\"\n )}\n disabled={disabled}\n key={year}\n type=\"button\"\n onClick={() => onSelect(yearDate)}\n >\n {year}\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n\nexport { YearPicker };\n","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { Calendar } from \"src/primitives/Calendar\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"src/primitives/Popover\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { useControlledOpen } from \"src/hooks/useControlledOpen\";\nimport { useCursorRestore } from \"src/hooks/useCursorRestore\";\nimport { useOutsideClickClose } from \"src/hooks/useOutsideClickClose\";\n\nimport type { DatePickerProps } from \"./types\";\nimport {\n DEFAULT_DATE_FORMAT,\n DEFAULT_TIME_FORMAT,\n INITIAL_TIME_VALUE,\n SIZE_CONFIG,\n} from \"./constants\";\nimport {\n applyTimeToDate,\n toBrowserLocalDate,\n coerceDateValue,\n formatDate,\n getDatePlaceholder,\n getDisplayFormat,\n getInitialCalendarMonth,\n isDatePartComplete,\n isMonthDisabled,\n isYearDisabled,\n orderRange,\n parseDate,\n parseRangeText,\n startOfWeek,\n toNativeDate,\n toUserTzDayjs,\n weekDaysFrom,\n} from \"./utils\";\nimport {\n applyMask,\n buildMaskTemplate,\n buildRangeMaskTemplate,\n isFixedWidthFormat,\n} from \"src/utils/inputMask\";\nimport { buildTestIdPrefix } from \"src/utils/fieldIds\";\nimport { DatePickerFooter } from \"./DatePickerFooter\";\nimport { DatePickerField } from \"./DatePickerField\";\nimport { DatePickerTrigger } from \"./DatePickerTrigger\";\nimport { MonthPicker } from \"./MonthPicker\";\nimport { RangeCalendar } from \"./RangeCalendar\";\nimport { useRangePicker } from \"./useRangePicker\";\nimport { YearPicker } from \"./YearPicker\";\nimport { TimePickerPanel } from \"../TimePicker/TimePickerPanel\";\nimport { dateToTimeValue } from \"../TimePicker/utils\";\n\nconst DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n onBlur,\n type = \"date\",\n dateFormat = DEFAULT_DATE_FORMAT,\n timeFormat = DEFAULT_TIME_FORMAT,\n showTime = false,\n timePickerFormat,\n showSeconds = false,\n minDate,\n maxDate,\n disabledDate,\n placeholder,\n label,\n error,\n helpText,\n size = \"medium\",\n disabled = false,\n allowClear = true,\n required = false,\n timezone,\n onTimezoneChange,\n onOk,\n needConfirm = false,\n open: openProp,\n onOpenChange,\n className,\n labelProps,\n picker = \"date\",\n side = \"bottom\",\n align = \"start\",\n trigger,\n weekStartsOn = 0,\n dataTestId,\n },\n ref\n ) => {\n const generatedId = useId();\n const errorId = `error_${generatedId}`;\n const helpTextId = `helpText_${generatedId}`;\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const cursorPosRef = useRef<number | null>(null);\n\n const popoverContentId = useRef(\n `datepicker-popover-${generatedId}`\n ).current;\n\n const { open, setOpen } = useControlledOpen(openProp, onOpenChange);\n\n const [internalValue, setInternalValue] = useState(\n coerceDateValue(defaultValue, type) ?? null\n );\n\n const [calendarMonth, setCalendarMonth] = useState(() =>\n getInitialCalendarMonth(value, defaultValue, type)\n );\n\n const [pendingDate, setPendingDate] = useState<Date | null>(null);\n const [pendingTime, setPendingTime] = useState(INITIAL_TIME_VALUE);\n const [pendingTimeTo, setPendingTimeTo] = useState(INITIAL_TIME_VALUE);\n\n const currentValue = useMemo(\n () =>\n value !== undefined ? coerceDateValue(value, type) : internalValue,\n [value, type, internalValue]\n );\n\n const normalizedMinDate = useMemo(\n () => toNativeDate(minDate) ?? undefined,\n [minDate]\n );\n const normalizedMaxDate = useMemo(\n () => toNativeDate(maxDate) ?? undefined,\n [maxDate]\n );\n\n const displayFormat = getDisplayFormat(dateFormat, timeFormat, showTime);\n const sizeConfig = SIZE_CONFIG[size];\n const maskEnabled = isFixedWidthFormat(displayFormat);\n const effectiveTimePickerFormat: \"12\" | \"24\" =\n timePickerFormat ?? (/\\ba\\b/i.test(timeFormat) ? \"12\" : \"24\");\n\n const defaultPlaceholder = getDatePlaceholder(\n dateFormat,\n timeFormat,\n showTime,\n type\n );\n\n const maskTemplate = useMemo(\n () =>\n maskEnabled\n ? type === \"range\"\n ? buildRangeMaskTemplate(displayFormat)\n : buildMaskTemplate(displayFormat)\n : null,\n [displayFormat, type, maskEnabled]\n );\n\n const singleDateLen = useMemo(\n () => buildMaskTemplate(displayFormat).pattern.length,\n [displayFormat]\n );\n\n const calendarDisabled = useCallback(\n (date: Date) => {\n if (disabledDate?.(date)) return true;\n if (\n normalizedMinDate &&\n date < new Date(new Date(normalizedMinDate).setHours(0, 0, 0, 0))\n )\n return true;\n if (\n normalizedMaxDate &&\n date > new Date(new Date(normalizedMaxDate).setHours(23, 59, 59, 999))\n )\n return true;\n\n return false;\n },\n [normalizedMinDate, normalizedMaxDate, disabledDate]\n );\n\n const getDisplayText = useCallback(() => {\n if (type !== \"range\") {\n return formatDate(currentValue as Date | null, displayFormat);\n }\n\n const rangeValue = currentValue as [Date | null, Date | null] | null;\n if (!rangeValue || (!rangeValue[0] && !rangeValue[1])) return \"\";\n\n const from = rangeValue[0]\n ? formatDate(rangeValue[0], displayFormat)\n : \"\";\n const to = rangeValue[1] ? formatDate(rangeValue[1], displayFormat) : \"\";\n\n return `${from} - ${to}`;\n }, [currentValue, displayFormat, type]);\n\n const [inputText, setInputText] = useState(() => getDisplayText());\n\n const commitValue = (date: Date | [Date, Date] | null) => {\n if (date === null) {\n setInternalValue(null);\n if (type === \"range\") {\n onChange?.([null, null], [\"\", \"\"]);\n } else {\n onChange?.(null, \"\");\n }\n setInputText(\"\");\n\n return;\n }\n\n const toSerializableDayjs = (d: Date) => {\n const userTzDayjs = toUserTzDayjs(d);\n if (showTime) return userTzDayjs;\n\n return userTzDayjs.hour(12).minute(0).second(0).millisecond(0);\n };\n\n if (Array.isArray(date)) {\n setInternalValue(date);\n const formatted: [string, string] = [\n formatDate(date[0], displayFormat),\n formatDate(date[1], displayFormat),\n ];\n onChange?.(\n [toSerializableDayjs(date[0]), toSerializableDayjs(date[1])],\n formatted\n );\n setInputText(`${formatted[0]} - ${formatted[1]}`);\n\n return;\n }\n\n setInternalValue(date);\n const formatted = formatDate(date, displayFormat);\n onChange?.(toSerializableDayjs(date), formatted);\n setInputText(formatted);\n };\n\n const {\n pendingRange,\n rangeSelectionStep,\n setRangeSelectionStep,\n handleRangeSelect,\n handleHoverIn,\n handleHoverOut,\n memoizedRangeSelected,\n getPreviewParts,\n resetTransientState,\n } = useRangePicker({\n currentValue,\n showTime,\n needConfirm,\n commitValue,\n setOpen,\n });\n\n useEffect(() => {\n if (type !== \"range\" || !open) return;\n\n const { from, to } = getPreviewParts();\n const fromWithTime =\n from && showTime ? applyTimeToDate(from, pendingTime) : from;\n const toWithTime =\n to && showTime ? applyTimeToDate(to, pendingTimeTo) : to;\n const fromText = fromWithTime\n ? formatDate(fromWithTime, displayFormat)\n : \"\";\n const toText = toWithTime ? formatDate(toWithTime, displayFormat) : \"\";\n\n setInputText(fromText || toText ? `${fromText} - ${toText}` : \"\");\n }, [\n type,\n open,\n getPreviewParts,\n displayFormat,\n showTime,\n pendingTime,\n pendingTimeTo,\n ]);\n\n const parseAndApplyRange = (text: string, cursorPos: number | null) => {\n const parts = text.split(\" - \");\n const separatorIdx = text.indexOf(\" - \");\n const editingTo =\n separatorIdx >= 0 && cursorPos !== null && cursorPos > separatorIdx + 2;\n\n if (editingTo) {\n const to = parseDate(parts[1] ?? \"\", displayFormat);\n if (to) setCalendarMonth(to);\n } else {\n if (!isDatePartComplete(parts[0] ?? \"\", maskEnabled, singleDateLen))\n return;\n\n const from = parseDate(parts[0] ?? \"\", displayFormat);\n if (from) setCalendarMonth(from);\n }\n\n const range = parseRangeText(\n text,\n displayFormat,\n maskEnabled,\n singleDateLen\n );\n\n if (range) commitValue(range);\n };\n\n const commitPendingOnClose = useCallback(() => {\n const hasOkButton = showTime || needConfirm;\n if (!hasOkButton || !pendingDate) {\n setInputText(getDisplayText());\n\n return;\n }\n\n const finalDate = showTime\n ? applyTimeToDate(pendingDate, pendingTime)\n : pendingDate;\n\n const currentSingle =\n type === \"date\" ? (currentValue as Date | null) : null;\n\n const isSame =\n currentSingle && finalDate.getTime() === currentSingle.getTime();\n\n if (isSame) {\n setInputText(getDisplayText());\n\n return;\n }\n\n commitValue(finalDate);\n }, [\n showTime,\n needConfirm,\n pendingDate,\n pendingTime,\n type,\n currentValue,\n getDisplayText,\n onChange,\n ]);\n\n const closePopover = useCallback(() => {\n if (type === \"range\" && pendingRange?.[0] && pendingRange?.[1]) {\n const [fromBase, toBase] = orderRange(\n pendingRange[0],\n pendingRange[1]\n ) as [Date, Date];\n const fromFinal = showTime\n ? applyTimeToDate(fromBase, pendingTime)\n : fromBase;\n const toFinal = showTime\n ? applyTimeToDate(toBase, pendingTimeTo)\n : toBase;\n commitValue([fromFinal, toFinal]);\n } else {\n commitPendingOnClose();\n }\n resetTransientState();\n setOpen(false);\n }, [\n commitPendingOnClose,\n setOpen,\n type,\n pendingRange,\n pendingTime,\n pendingTimeTo,\n showTime,\n resetTransientState,\n ]);\n\n useOutsideClickClose({\n enabled: open,\n containerRef,\n popoverElementId: popoverContentId,\n onClose: closePopover,\n });\n\n const openPopover = () => {\n setOpen(true);\n resetTransientState();\n\n if (type === \"range\") {\n const rangeVal = currentValue as [Date | null, Date | null] | null;\n const fromDate = rangeVal?.[0] ?? null;\n const toDate = rangeVal?.[1] ?? null;\n setPendingDate(null);\n setPendingTime(\n fromDate ? dateToTimeValue(fromDate) : INITIAL_TIME_VALUE\n );\n setPendingTimeTo(toDate ? dateToTimeValue(toDate) : INITIAL_TIME_VALUE);\n\n return;\n }\n\n const dateVal = currentValue as Date | null;\n if (!dateVal) {\n setPendingDate(null);\n setPendingTime(INITIAL_TIME_VALUE);\n\n return;\n }\n\n setCalendarMonth(dateVal);\n setPendingDate(dateVal);\n setPendingTime(dateToTimeValue(dateVal));\n };\n\n const handleDateSelect = (selected: Date | undefined) => {\n if (!selected) return;\n\n setCalendarMonth(selected);\n\n if (showTime || needConfirm) {\n setPendingDate(selected);\n\n return;\n }\n\n commitValue(selected);\n setOpen(false);\n };\n\n const handleNow = () => {\n const now = toBrowserLocalDate(new Date());\n\n if (showTime || needConfirm) {\n setPendingDate(now);\n setPendingTime(dateToTimeValue(now));\n\n return;\n }\n\n commitValue(now);\n setOpen(false);\n };\n\n const handleOk = () => {\n if (type === \"range\" && (showTime || needConfirm)) {\n const committedRange = currentValue as\n | [Date | null, Date | null]\n | null;\n const fromValue = pendingRange?.[0] ?? committedRange?.[0] ?? null;\n const toValue = pendingRange?.[1] ?? committedRange?.[1] ?? null;\n\n if (rangeSelectionStep === \"from\" && fromValue) {\n setRangeSelectionStep(\"to\");\n setCalendarMonth(\n new Date(fromValue.getFullYear(), fromValue.getMonth(), 1)\n );\n if (showTime && pendingRange?.[0]) {\n setPendingTimeTo(INITIAL_TIME_VALUE);\n }\n\n return;\n }\n\n if (rangeSelectionStep === \"to\" && fromValue && toValue) {\n const [fromBase, toBase] = orderRange(fromValue, toValue) as [\n Date,\n Date,\n ];\n const fromFinal = showTime\n ? applyTimeToDate(fromBase, pendingTime)\n : fromBase;\n const toFinal = showTime\n ? applyTimeToDate(toBase, pendingTimeTo)\n : toBase;\n commitValue([fromFinal, toFinal]);\n onOk?.([fromFinal, toFinal]);\n resetTransientState();\n setOpen(false);\n\n return;\n }\n\n return;\n }\n\n if (pendingDate) {\n const finalDate = showTime\n ? applyTimeToDate(pendingDate, pendingTime)\n : pendingDate;\n\n commitValue(finalDate);\n onOk?.(finalDate);\n }\n setOpen(false);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n commitValue(null);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n let text = e.target.value;\n\n if (maskTemplate) {\n const masked = applyMask(\n text,\n maskTemplate,\n inputText,\n e.target.selectionStart\n );\n\n text = masked.text;\n cursorPosRef.current = masked.cursorPosition;\n }\n\n setInputText(text);\n\n if (type === \"range\") {\n parseAndApplyRange(text, e.target.selectionStart);\n\n return;\n }\n\n const isComplete = maskTemplate\n ? text.length >= maskTemplate.pattern.length\n : true;\n\n if (!isComplete) return;\n\n const parsed = parseDate(text, displayFormat);\n if (!parsed) return;\n\n setCalendarMonth(parsed);\n\n if (showTime || needConfirm) {\n setPendingDate(parsed);\n setPendingTime(dateToTimeValue(parsed));\n\n return;\n }\n\n commitValue(parsed);\n };\n\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\") {\n setPendingDate(null);\n setPendingTime(INITIAL_TIME_VALUE);\n setInputText(getDisplayText());\n setOpen(false);\n\n return;\n }\n\n if (e.key !== \"Enter\") return;\n\n if (type === \"range\") {\n const range = parseRangeText(\n inputText,\n displayFormat,\n maskEnabled,\n singleDateLen\n );\n if (range) commitValue(range);\n } else {\n const parsed = parseDate(inputText, displayFormat);\n if (parsed) commitValue(parsed);\n }\n\n setOpen(false);\n };\n\n const handleInputBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n const next = e.relatedTarget as HTMLElement | null;\n if (next && containerRef.current?.contains(next)) return;\n\n const popoverEl = document.getElementById(popoverContentId);\n if (next && popoverEl?.contains(next)) return;\n\n onBlur?.(e);\n };\n\n useEffect(() => {\n if (!open) setInputText(getDisplayText());\n }, [getDisplayText, open]);\n\n useCursorRestore([{ inputRef, cursorRef: cursorPosRef }]);\n\n useEffect(() => {\n if (!open || type !== \"date\") return;\n\n const dateVal = currentValue as Date | null;\n if (dateVal instanceof Date) setCalendarMonth(dateVal);\n }, [open]);\n\n const hasField = !!(label || error || helpText);\n const testIdPrefix = buildTestIdPrefix(dataTestId, label);\n const showFooter = showTime || needConfirm || !!onTimezoneChange;\n const todayDate = toBrowserLocalDate(new Date());\n\n const handleGridPickerSelect = (date: Date) => {\n commitValue(date);\n setOpen(false);\n };\n\n const handleSingleDateSelectWithPicker = (selected: Date | undefined) => {\n if (!selected) return handleDateSelect(undefined);\n\n handleDateSelect(\n picker === \"week\" ? startOfWeek(selected, weekStartsOn) : selected\n );\n };\n\n const weekHighlightProps = (() => {\n if (picker !== \"week\" || type !== \"date\" || !currentValue) return {};\n\n const weekStart = startOfWeek(currentValue as Date, weekStartsOn);\n const weekDays = weekDaysFrom(weekStart);\n\n return {\n modifiers: {\n weekStart: [weekDays[0]],\n weekMiddle: weekDays.slice(1, 6),\n weekEnd: [weekDays[6]],\n },\n modifiersClassNames: {\n weekStart:\n \"!bg-primary !text-primary-foreground !rounded-e-none hover:!bg-primary\",\n weekMiddle:\n \"!bg-primary !text-primary-foreground !rounded-none hover:!bg-primary\",\n weekEnd:\n \"!bg-primary !text-primary-foreground !rounded-s-none hover:!bg-primary\",\n },\n };\n })();\n\n const weekRowHoverClassName =\n picker === \"week\"\n ? \"[&_button]:!transition-none [&:hover_button]:!bg-primary [&:hover_button]:!text-primary-foreground [&:hover_button]:!rounded-none [&:hover_button]:cursor-pointer\"\n : undefined;\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n const calendarSelected = () => {\n if (showTime || needConfirm) {\n return pendingDate ?? (currentValue as Date | undefined) ?? undefined;\n }\n\n return (currentValue as Date | undefined) ?? undefined;\n };\n\n const handleTriggerOpenChange = (nextOpen: boolean) => {\n if (nextOpen === open) return;\n\n if (nextOpen) openPopover();\n else closePopover();\n };\n\n const triggerContent = (\n <Popover\n open={open}\n onOpenChange={trigger ? handleTriggerOpenChange : undefined}\n >\n {trigger ? (\n <PopoverTrigger asChild>{trigger}</PopoverTrigger>\n ) : (\n <DatePickerTrigger\n containerRef={containerRef}\n inputRef={inputRef}\n disabled={disabled}\n error={error}\n hasField={hasField}\n className={className}\n triggerSizeClass={sizeConfig.trigger}\n inputSizeClass={sizeConfig.input}\n iconSizeClass={sizeConfig.icon}\n label={label}\n ariaDescribedBy={ariaDescribedBy}\n inputTestId={\n dataTestId || label ? `${testIdPrefix}-input` : \"picker-input\"\n }\n placeholder={placeholder ?? defaultPlaceholder}\n inputText={inputText}\n allowClear={allowClear}\n timezone={timezone}\n onInputChange={handleInputChange}\n onInputKeyDown={handleInputKeyDown}\n onInputFocus={() => {\n if (!open) openPopover();\n }}\n onInputBlur={handleInputBlur}\n onClear={handleClear}\n />\n )}\n {open && (\n <PopoverContent\n id={popoverContentId}\n className=\"w-auto p-0\"\n align={align}\n side={side}\n onOpenAutoFocus={e => e.preventDefault()}\n onCloseAutoFocus={e => e.preventDefault()}\n onPointerDownOutside={e => e.preventDefault()}\n onInteractOutside={e => e.preventDefault()}\n >\n <div className={cn(\"flex\", showTime && \"flex-row\")}>\n {type === \"date\" && picker === \"month\" ? (\n <MonthPicker\n value={(currentValue as Date | null) ?? null}\n displayedYear={calendarMonth.getFullYear()}\n onYearChange={year =>\n setCalendarMonth(\n new Date(year, calendarMonth.getMonth(), 1)\n )\n }\n onSelect={handleGridPickerSelect}\n isDisabled={date =>\n isMonthDisabled(date, normalizedMinDate, normalizedMaxDate)\n }\n />\n ) : type === \"date\" && picker === \"year\" ? (\n <YearPicker\n value={(currentValue as Date | null) ?? null}\n displayedYear={calendarMonth.getFullYear()}\n onYearChange={year => setCalendarMonth(new Date(year, 0, 1))}\n onSelect={handleGridPickerSelect}\n isDisabled={date =>\n isYearDisabled(date, normalizedMinDate, normalizedMaxDate)\n }\n />\n ) : type === \"date\" ? (\n <Calendar\n mode=\"single\"\n captionLayout=\"dropdown\"\n today={todayDate}\n month={calendarMonth}\n onMonthChange={setCalendarMonth}\n selected={calendarSelected()}\n onSelect={handleSingleDateSelectWithPicker}\n disabled={calendarDisabled}\n weekStartsOn={weekStartsOn}\n classNames={\n weekRowHoverClassName\n ? { week: cn(\"mt-2 flex w-full\", weekRowHoverClassName) }\n : undefined\n }\n {...weekHighlightProps}\n {...(normalizedMinDate && { fromDate: normalizedMinDate })}\n {...(normalizedMaxDate && { toDate: normalizedMaxDate })}\n />\n ) : showTime ? (\n <>\n <RangeCalendar\n todayDate={todayDate}\n weekStartsOn={weekStartsOn}\n month={calendarMonth}\n onMonthChange={setCalendarMonth}\n selected={memoizedRangeSelected}\n onSelect={handleRangeSelect}\n disabled={calendarDisabled}\n fromDate={normalizedMinDate}\n toDate={normalizedMaxDate}\n onHoverIn={handleHoverIn}\n onHoverOut={handleHoverOut}\n numberOfMonths={1}\n />\n <div className=\"border-inline-start border-border pt-2\">\n <TimePickerPanel\n value={\n rangeSelectionStep === \"from\"\n ? pendingTime\n : pendingTimeTo\n }\n onChange={\n rangeSelectionStep === \"from\"\n ? setPendingTime\n : setPendingTimeTo\n }\n format={effectiveTimePickerFormat}\n showSeconds={showSeconds}\n disabled={disabled}\n />\n </div>\n </>\n ) : (\n <RangeCalendar\n todayDate={todayDate}\n weekStartsOn={weekStartsOn}\n month={calendarMonth}\n onMonthChange={setCalendarMonth}\n selected={memoizedRangeSelected}\n onSelect={handleRangeSelect}\n disabled={calendarDisabled}\n fromDate={normalizedMinDate}\n toDate={normalizedMaxDate}\n onHoverIn={handleHoverIn}\n onHoverOut={handleHoverOut}\n />\n )}\n {showTime && type !== \"range\" && (\n <div className=\"border-inline-start border-border\">\n <TimePickerPanel\n value={pendingTime}\n onChange={setPendingTime}\n format={effectiveTimePickerFormat}\n showSeconds={showSeconds}\n disabled={disabled}\n />\n </div>\n )}\n </div>\n {showFooter && (\n <DatePickerFooter\n showTime={showTime}\n needConfirm={needConfirm}\n timezone={timezone}\n onTimezoneChange={onTimezoneChange}\n onNow={handleNow}\n onOk={handleOk}\n okLabel={\n type === \"range\" &&\n (showTime || needConfirm) &&\n rangeSelectionStep === \"from\"\n ? \"Next\"\n : \"OK\"\n }\n />\n )}\n </PopoverContent>\n )}\n </Popover>\n );\n\n if (!hasField) {\n return (\n <div ref={ref} className={className}>\n {triggerContent}\n </div>\n );\n }\n\n return (\n <DatePickerField\n ref={ref}\n disabled={disabled}\n error={error}\n className={className}\n label={label}\n required={required}\n helpText={helpText}\n labelProps={labelProps}\n errorId={errorId}\n helpTextId={helpTextId}\n errorTestId={`${testIdPrefix}-input-error`}\n >\n {triggerContent}\n </DatePickerField>\n );\n }\n);\n\nDatePicker.displayName = \"DatePicker\";\n\nexport { DatePicker };\n"],"names":["CalendarIcon","ChevronLeftIcon","ChevronRightIcon","Calendar","formatted"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -19,7 +19,7 @@ const DialogHeader = forwardRef(({ children, className, description, dataTestid,
|
|
|
19
19
|
...otherProps,
|
|
20
20
|
children: [
|
|
21
21
|
children,
|
|
22
|
-
description && /* @__PURE__ */ jsx(DialogDescription, { children: description })
|
|
22
|
+
description && /* @__PURE__ */ jsx(DialogDescription, { "data-testid": "dialog-header-desc", children: description })
|
|
23
23
|
]
|
|
24
24
|
}
|
|
25
25
|
));
|
|
@@ -123,4 +123,4 @@ Dialog.Footer = DialogFooter;
|
|
|
123
123
|
Dialog.Title = DialogTitle;
|
|
124
124
|
|
|
125
125
|
export { Dialog as D };
|
|
126
|
-
//# sourceMappingURL=Dialog-
|
|
126
|
+
//# sourceMappingURL=Dialog-Yw34WDqY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dialog-Yw34WDqY.js","sources":["../src/components/Dialog/constants.ts","../src/components/Dialog/Dialog.tsx"],"sourcesContent":["import type { DialogSize } from \"./Dialog\";\n\nexport const SIZE_CLASS_MAP: Record<DialogSize, string> = {\n small: \"sm:max-w-sm\",\n medium: \"sm:max-w-md\",\n large: \"sm:max-w-lg\",\n fullScreen: \"h-screen w-screen max-w-none rounded-none sm:max-w-none\",\n};\n","import React, { forwardRef, type ReactNode, type RefObject } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Dialog as PrimitiveDialog,\n DialogContent as PrimitiveDialogContent,\n DialogDescription,\n DialogFooter as PrimitiveDialogFooter,\n DialogHeader as PrimitiveDialogHeader,\n DialogTitle as PrimitiveDialogTitle,\n} from \"src/primitives/Dialog\";\n\nimport { SIZE_CLASS_MAP } from \"./constants\";\n\nexport type DialogSize = \"small\" | \"medium\" | \"large\" | \"fullScreen\";\n\n/** Radix Dialog.Content props we forward via ...otherProps. */\ntype DialogContentProps = React.ComponentProps<typeof PrimitiveDialogContent>;\n\nexport interface DialogProps extends Omit<\n DialogContentProps,\n | \"children\"\n | \"className\"\n | \"showCloseButton\"\n | \"onEscapeKeyDown\"\n | \"onInteractOutside\"\n> {\n /** Size of the dialog. */\n size?: DialogSize;\n /** Whether the dialog is open. */\n isOpen?: boolean;\n /** Callback invoked when the dialog is closed. */\n onClose?: () => void;\n /** Content rendered inside the dialog. */\n children?: ReactNode;\n /** Additional CSS class names applied to the dialog content. */\n className?: string;\n /** Close on pressing the Esc key. */\n closeOnEsc?: boolean;\n /** Show the close button. */\n closeButton?: boolean;\n /** Additional CSS class names applied to the backdrop/overlay. */\n backdropClassName?: string;\n /** Close on clicking outside the dialog. */\n closeOnOutsideClick?: boolean;\n /** Ref of the element to receive focus when the dialog opens. */\n initialFocusRef?: RefObject<HTMLElement | null>;\n /** Ref of the element to receive focus when the dialog closes. */\n finalFocusRef?: RefObject<HTMLElement | null>;\n /** Whether to block body scroll when the dialog is mounted. Maps to Radix `modal` prop. */\n blockScrollOnMount?: boolean;\n /** Force children to re-render even when the dialog is closed. */\n forceRender?: boolean;\n /** Radix Dialog `modal` prop — takes precedence over blockScrollOnMount. */\n modal?: boolean;\n /** Radix Dialog `defaultOpen` prop. */\n defaultOpen?: boolean;\n}\n\ninterface DialogSubcomponentProps extends React.ComponentProps<\"div\"> {\n children?: ReactNode;\n className?: string;\n /** Custom data-testid attribute. */\n dataTestid?: string;\n}\n\nconst DialogHeader = forwardRef<\n HTMLDivElement,\n DialogSubcomponentProps & { description?: string }\n>(({ children, className, description, dataTestid, ...otherProps }, ref) => (\n <PrimitiveDialogHeader\n ref={ref}\n className={cn(className)}\n data-testid={dataTestid ?? \"dialog-header\"}\n {...otherProps}\n >\n {children}\n {description && (\n <DialogDescription data-testid=\"dialog-header-desc\">\n {description}\n </DialogDescription>\n )}\n </PrimitiveDialogHeader>\n));\nDialogHeader.displayName = \"Dialog.Header\";\n\nconst DialogBody = forwardRef<HTMLDivElement, DialogSubcomponentProps>(\n ({ children, className, dataTestid, ...otherProps }, ref) => (\n <div\n ref={ref}\n data-slot=\"dialog-body\"\n data-testid={dataTestid ?? \"dialog-body\"}\n className={cn(\"text-sm text-foreground\", className)}\n {...otherProps}\n >\n {children}\n </div>\n )\n);\nDialogBody.displayName = \"Dialog.Body\";\n\nconst DialogFooter = forwardRef<HTMLDivElement, DialogSubcomponentProps>(\n ({ children, className, dataTestid, ...otherProps }, ref) => (\n <PrimitiveDialogFooter\n ref={ref}\n className={cn(className)}\n data-testid={dataTestid ?? \"dialog-footer\"}\n {...otherProps}\n >\n {children}\n </PrimitiveDialogFooter>\n )\n);\nDialogFooter.displayName = \"Dialog.Footer\";\n\nconst DialogTitle = forwardRef<\n HTMLHeadingElement,\n React.ComponentProps<typeof PrimitiveDialogTitle>\n>(({ children, className, ...otherProps }, ref) => (\n <PrimitiveDialogTitle\n ref={ref}\n className={cn(\"text-2xl font-semibold\", className)}\n {...otherProps}\n >\n {children}\n </PrimitiveDialogTitle>\n));\nDialogTitle.displayName = \"Dialog.Title\";\n\nconst Dialog = forwardRef<HTMLDivElement, DialogProps>(\n (\n {\n size = \"medium\",\n isOpen = false,\n onClose = () => {},\n children,\n className,\n closeOnEsc = true,\n closeButton = true,\n backdropClassName,\n closeOnOutsideClick = true,\n initialFocusRef,\n finalFocusRef,\n blockScrollOnMount = true,\n forceRender = false,\n modal: modalProp,\n defaultOpen,\n ...otherContentProps\n },\n ref\n ) => {\n // Base UI consolidates the per-interaction dismiss callbacks\n // (onEscapeKeyDown / onInteractOutside) into onOpenChange's eventDetails.\n const handleOpenChange: React.ComponentProps<\n typeof PrimitiveDialog\n >[\"onOpenChange\"] = (open, eventDetails) => {\n if (open) return;\n if (\n (eventDetails.reason === \"escape-key\" && !closeOnEsc) ||\n (eventDetails.reason === \"outside-press\" && !closeOnOutsideClick)\n ) {\n eventDetails.cancel();\n\n return;\n }\n onClose();\n };\n\n // `modal` prop takes precedence; fall back to blockScrollOnMount\n const resolvedModal = modalProp ?? blockScrollOnMount;\n\n return (\n <PrimitiveDialog\n open={isOpen}\n onOpenChange={handleOpenChange}\n modal={resolvedModal}\n defaultOpen={defaultOpen}\n >\n <PrimitiveDialogContent\n ref={ref}\n showCloseButton={closeButton}\n keepMounted={forceRender || undefined}\n overlayClassName={backdropClassName}\n initialFocus={initialFocusRef ?? undefined}\n finalFocus={finalFocusRef ?? undefined}\n className={cn(SIZE_CLASS_MAP[size], className)}\n data-testid=\"dialog-wrapper\"\n {...otherContentProps}\n >\n {children}\n </PrimitiveDialogContent>\n </PrimitiveDialog>\n );\n }\n) as React.ForwardRefExoticComponent<\n DialogProps & React.RefAttributes<HTMLDivElement>\n> & {\n Header: typeof DialogHeader;\n Body: typeof DialogBody;\n Footer: typeof DialogFooter;\n Title: typeof DialogTitle;\n};\n\nDialog.displayName = \"Dialog\";\nDialog.Header = DialogHeader;\nDialog.Body = DialogBody;\nDialog.Footer = DialogFooter;\nDialog.Title = DialogTitle;\n\nexport { Dialog };\n"],"names":["PrimitiveDialogHeader","PrimitiveDialogFooter","PrimitiveDialogTitle","PrimitiveDialog","PrimitiveDialogContent"],"mappings":"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"}
|
|
@@ -45,14 +45,22 @@ const HelpIcon = (helpIconProps) => {
|
|
|
45
45
|
if (helpIconProps.popoverProps) {
|
|
46
46
|
const { title, description, helpLinkProps } = helpIconProps.popoverProps;
|
|
47
47
|
return /* @__PURE__ */ jsxs(Popover, { trigger: iconElement, children: [
|
|
48
|
-
title && /* @__PURE__ */ jsx(Popover.Title, { children: title }),
|
|
49
|
-
description && /* @__PURE__ */ jsx(
|
|
48
|
+
title && /* @__PURE__ */ jsx(Popover.Title, { "data-testid": "help-popover-title", children: title }),
|
|
49
|
+
description && /* @__PURE__ */ jsx(
|
|
50
|
+
"p",
|
|
51
|
+
{
|
|
52
|
+
className: "text-sm text-muted-foreground",
|
|
53
|
+
"data-testid": "help-popover-description",
|
|
54
|
+
children: description
|
|
55
|
+
}
|
|
56
|
+
),
|
|
50
57
|
helpLinkProps && /* @__PURE__ */ jsx(
|
|
51
58
|
Button,
|
|
52
59
|
{
|
|
53
60
|
variant: "link",
|
|
54
61
|
size: "sm",
|
|
55
62
|
className: "mt-1 h-auto self-start p-0",
|
|
63
|
+
"data-testid": "help-popover-link-button",
|
|
56
64
|
...helpLinkProps,
|
|
57
65
|
href: helpLinkProps.href
|
|
58
66
|
}
|
|
@@ -70,4 +78,4 @@ const HelpIcon = (helpIconProps) => {
|
|
|
70
78
|
};
|
|
71
79
|
|
|
72
80
|
export { HelpIcon as H };
|
|
73
|
-
//# sourceMappingURL=HelpIcon-
|
|
81
|
+
//# sourceMappingURL=HelpIcon-xh488VXs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HelpIcon-xh488VXs.js","sources":["../node_modules/lucide-react/dist/esm/icons/circle-question-mark.js","../src/shared/HelpIcon.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst CircleQuestionMark = createLucideIcon(\"circle-question-mark\", __iconNode);\n\nexport { __iconNode, CircleQuestionMark as default };\n//# sourceMappingURL=circle-question-mark.js.map\n","import type React from \"react\";\n\nimport { CircleHelpIcon } from \"lucide-react\";\n\nimport { Button, type ButtonProps } from \"src/components/Button\";\nimport { Popover } from \"src/components/Popover\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\nimport { renderIcon, type IconProp } from \"src/shared/renderIcon\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nconst SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n auto: \"top\",\n};\n\nexport interface HelpIconTooltipProps {\n /** Tooltip content. */\n content?: React.ReactNode;\n /** Tooltip position. */\n position?: string;\n}\n\nexport interface HelpIconPopoverProps {\n /** Popover title. */\n title?: React.ReactNode;\n /** Popover description. */\n description?: React.ReactNode;\n /** Props for an optional help link button inside the popover. */\n helpLinkProps?: ButtonProps;\n}\n\nexport interface HelpIconProps {\n /** Click handler on the help icon. */\n onClick?: () => void;\n /** Custom icon. Defaults to CircleHelpIcon. */\n icon?: IconProp;\n /** Show a tooltip on hover. */\n tooltipProps?: HelpIconTooltipProps;\n /** Show a popover on hover with title, description, and optional link. */\n popoverProps?: HelpIconPopoverProps;\n /** Additional class name for the help icon. */\n className?: string;\n}\n\nexport const HelpIcon = (helpIconProps: HelpIconProps) => {\n const icon = helpIconProps.icon ?? CircleHelpIcon;\n\n const iconElement = (\n <span\n className={cn(\n \"inline-flex cursor-help text-muted-foreground transition-colors hover:text-foreground\",\n helpIconProps.onClick && \"cursor-pointer\",\n helpIconProps.className\n )}\n onClick={helpIconProps.onClick}\n >\n {renderIcon(icon, \"size-3.5\")}\n </span>\n );\n\n if (helpIconProps.popoverProps) {\n const { title, description, helpLinkProps } = helpIconProps.popoverProps;\n\n return (\n <Popover trigger={iconElement}>\n {title && (\n <Popover.Title data-testid=\"help-popover-title\">\n {title}\n </Popover.Title>\n )}\n {description && (\n <p\n className=\"text-sm text-muted-foreground\"\n data-testid=\"help-popover-description\"\n >\n {description}\n </p>\n )}\n {helpLinkProps && (\n <Button\n variant=\"link\"\n size=\"sm\"\n className=\"mt-1 h-auto self-start p-0\"\n data-testid=\"help-popover-link-button\"\n {...helpLinkProps}\n href={helpLinkProps.href}\n />\n )}\n </Popover>\n );\n }\n\n if (helpIconProps.tooltipProps?.content) {\n const side =\n SIDE_MAP[helpIconProps.tooltipProps.position ?? \"auto\"] ?? \"top\";\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>{iconElement}</TooltipTrigger>\n <TooltipContent side={side}>\n {helpIconProps.tooltipProps.content}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return iconElement;\n};\n"],"names":["CircleHelpIcon"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAM,UAAU,GAAG;AACnB,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC5D,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,sCAAsC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AACxE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE;AAC7C,CAAC;AACD,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,sBAAsB,EAAE,UAAU,CAAC;;ACC/E,MAAM,QAAA,GAAgE;AAAA,EACpE,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAA;AA+BO,MAAM,QAAA,GAAW,CAAC,aAAA,KAAiC;AACxD,EAAA,MAAM,IAAA,GAAO,cAAc,IAAA,IAAQA,kBAAA;AAEnC,EAAA,MAAM,WAAA,mBACJ,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,uFAAA;AAAA,QACA,cAAc,OAAA,IAAW,gBAAA;AAAA,QACzB,aAAA,CAAc;AAAA,OAChB;AAAA,MACA,SAAS,aAAA,CAAc,OAAA;AAAA,MAEtB,QAAA,EAAA,UAAA,CAAW,MAAM,UAAU;AAAA;AAAA,GAC9B;AAGF,EAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,IAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAa,aAAA,KAAkB,aAAA,CAAc,YAAA;AAE5D,IAAA,uBACE,IAAA,CAAC,OAAA,EAAA,EAAQ,OAAA,EAAS,WAAA,EACf,QAAA,EAAA;AAAA,MAAA,KAAA,wBACE,OAAA,CAAQ,KAAA,EAAR,EAAc,aAAA,EAAY,sBACxB,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,MAED,WAAA,oBACC,GAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,+BAAA;AAAA,UACV,aAAA,EAAY,0BAAA;AAAA,UAEX,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,MAED,aAAA,oBACC,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAK,IAAA;AAAA,UACL,SAAA,EAAU,4BAAA;AAAA,UACV,aAAA,EAAY,0BAAA;AAAA,UACX,GAAG,aAAA;AAAA,UACJ,MAAM,aAAA,CAAc;AAAA;AAAA;AACtB,KAAA,EAEJ,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,aAAA,CAAc,cAAc,OAAA,EAAS;AACvC,IAAA,MAAM,OACJ,QAAA,CAAS,aAAA,CAAc,YAAA,CAAa,QAAA,IAAY,MAAM,CAAA,IAAK,KAAA;AAE7D,IAAA,uBACE,GAAA,CAAC,eAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAE,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,sBACrC,GAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EACb,QAAA,EAAA,aAAA,CAAc,aAAa,OAAA,EAC9B;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,OAAO,WAAA;AACT;;;;","x_google_ignoreList":[0]}
|
|
@@ -3,6 +3,7 @@ import { forwardRef, useId, useState } from 'react';
|
|
|
3
3
|
import { c as cn } from './utils-BJnb9o5c.js';
|
|
4
4
|
import { Field, FieldLabel, FieldContent, FieldError, FieldDescription } from './primitives/Field.js';
|
|
5
5
|
import { InputGroup, InputGroupAddon, InputGroupText, InputGroupInput } from './primitives/InputGroup.js';
|
|
6
|
+
import { b as buildTestIdPrefix } from './fieldIds-VpluAAMl.js';
|
|
6
7
|
import { w as withIconSize } from './withIconSize-BonoFXeH.js';
|
|
7
8
|
|
|
8
9
|
const SIZE_CONFIG = {
|
|
@@ -101,6 +102,7 @@ const Input = forwardRef(
|
|
|
101
102
|
precision = -1,
|
|
102
103
|
labelProps,
|
|
103
104
|
className = "",
|
|
105
|
+
dataTestId,
|
|
104
106
|
onBlur,
|
|
105
107
|
onChange,
|
|
106
108
|
value: controlledValue,
|
|
@@ -165,9 +167,11 @@ const Input = forwardRef(
|
|
|
165
167
|
const ariaDescribedBy = [error ? errorId : null, helpText ? helpTextId : null].filter(Boolean).join(" ") || void 0;
|
|
166
168
|
const hasField = !!(label || error || helpText);
|
|
167
169
|
const sizeConfig = SIZE_CONFIG[size];
|
|
170
|
+
const testIdPrefix = buildTestIdPrefix(dataTestId, label);
|
|
168
171
|
const inputGroup = /* @__PURE__ */ jsxs(
|
|
169
172
|
InputGroup,
|
|
170
173
|
{
|
|
174
|
+
"data-testid": `${testIdPrefix}-input`,
|
|
171
175
|
className: cn(
|
|
172
176
|
sizeConfig.group,
|
|
173
177
|
nakedInput && "border-0 shadow-none has-[[data-slot=input-group-control]:focus-visible]:ring-0 has-[[data-slot=input-group-control]:focus-visible]:border-transparent",
|
|
@@ -195,6 +199,7 @@ const Input = forwardRef(
|
|
|
195
199
|
"aria-invalid": !!error || void 0,
|
|
196
200
|
"aria-describedby": ariaDescribedBy,
|
|
197
201
|
className: cn(sizeConfig.input, nakedInput && "px-0"),
|
|
202
|
+
"data-testid": `${testIdPrefix}-input-field`,
|
|
198
203
|
value,
|
|
199
204
|
onBlur: handleBlur,
|
|
200
205
|
onChange: handleChange,
|
|
@@ -213,15 +218,24 @@ const Input = forwardRef(
|
|
|
213
218
|
return /* @__PURE__ */ jsxs(
|
|
214
219
|
Field,
|
|
215
220
|
{
|
|
221
|
+
"data-testid": "nui-input-wrapper",
|
|
216
222
|
"data-disabled": disabled || void 0,
|
|
217
223
|
"data-invalid": !!error || void 0,
|
|
218
224
|
className,
|
|
219
225
|
children: [
|
|
220
226
|
(label || isCharacterLimitVisible) && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
221
|
-
label && /* @__PURE__ */ jsxs(
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
227
|
+
label && /* @__PURE__ */ jsxs(
|
|
228
|
+
FieldLabel,
|
|
229
|
+
{
|
|
230
|
+
htmlFor: id,
|
|
231
|
+
"data-testid": `${testIdPrefix}-input-label`,
|
|
232
|
+
...labelProps,
|
|
233
|
+
children: [
|
|
234
|
+
label,
|
|
235
|
+
required && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-destructive", children: "*" })
|
|
236
|
+
]
|
|
237
|
+
}
|
|
238
|
+
),
|
|
225
239
|
isCharacterLimitVisible && /* @__PURE__ */ jsxs(
|
|
226
240
|
"span",
|
|
227
241
|
{
|
|
@@ -239,8 +253,22 @@ const Input = forwardRef(
|
|
|
239
253
|
] }),
|
|
240
254
|
/* @__PURE__ */ jsxs(FieldContent, { children: [
|
|
241
255
|
inputGroup,
|
|
242
|
-
!!error && /* @__PURE__ */ jsx(
|
|
243
|
-
|
|
256
|
+
!!error && /* @__PURE__ */ jsx(
|
|
257
|
+
FieldError,
|
|
258
|
+
{
|
|
259
|
+
id: errorId,
|
|
260
|
+
"data-testid": `${testIdPrefix}-input-error`,
|
|
261
|
+
children: error
|
|
262
|
+
}
|
|
263
|
+
),
|
|
264
|
+
helpText && /* @__PURE__ */ jsx(
|
|
265
|
+
FieldDescription,
|
|
266
|
+
{
|
|
267
|
+
id: helpTextId,
|
|
268
|
+
"data-testid": `${testIdPrefix}-input-help`,
|
|
269
|
+
children: helpText
|
|
270
|
+
}
|
|
271
|
+
)
|
|
244
272
|
] })
|
|
245
273
|
]
|
|
246
274
|
}
|
|
@@ -250,4 +278,4 @@ const Input = forwardRef(
|
|
|
250
278
|
Input.displayName = "Input";
|
|
251
279
|
|
|
252
280
|
export { Input as I };
|
|
253
|
-
//# sourceMappingURL=Input-
|
|
281
|
+
//# sourceMappingURL=Input-W8foyOcS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Input-W8foyOcS.js","sources":["../src/components/Input/constants.ts","../src/components/Input/utils.ts","../src/components/Input/Input.tsx"],"sourcesContent":["// Mobile (<768px) uses 16px input font-size to prevent iOS Safari auto-zoom\n// on focus. Desktop (md+) keeps the original text sizes. Small variant also\n// bumps its height on mobile so 16px text doesn't look cramped in a 28px\n// container; medium and large keep their desktop heights.\nexport const SIZE_CONFIG = {\n small: {\n group: \"h-8 md:h-7\",\n input: \"text-base md:text-xs px-2\",\n addonStart: \"ps-1.5\",\n addonEnd: \"pe-1.5\",\n icon: \"size-3.5\",\n },\n medium: {\n group: \"h-8\",\n input: \"text-base md:text-sm\",\n addonStart: \"ps-2\",\n addonEnd: \"pe-2\",\n icon: \"size-4\",\n },\n large: {\n group: \"h-10\",\n input: \"text-base md:text-sm\",\n addonStart: \"ps-2.5\",\n addonEnd: \"pe-2.5\",\n icon: \"size-5\",\n },\n};\n","import React from \"react\";\n\nexport function toFixed(numStr: string, prec: number): string {\n const num = Number(numStr);\n if (Number.isNaN(num)) return numStr;\n\n return num.toFixed(prec);\n}\n\nexport function formatWithPrecision(\n value: string | number | undefined,\n precision: number\n): string | undefined {\n if (precision < 0 || !value) return value as string | undefined;\n\n const str = value.toString();\n const trimmed = str.trim();\n if (trimmed !== \"\" && !Number.isNaN(Number(trimmed)))\n return toFixed(str, precision);\n\n return str;\n}\n\nexport function enforceDecimalPrecision(\n value: string,\n precision: number\n): string {\n if (precision < 0 || !value) return value;\n\n const valueStr = value.toString();\n if (precision === 0) return valueStr.split(\".\")[0];\n\n const regex = new RegExp(`^\\\\d*\\\\.?\\\\d{0,${precision}}$`);\n if (regex.test(valueStr)) return value;\n\n const parts = valueStr.split(\".\");\n if (parts.length === 1) return parts[0];\n\n return `${parts[0]}.${parts[1].substring(0, precision)}`;\n}\n\nexport function formatWithRejectCharsRegex(\n value: string,\n rejectCharsRegex?: RegExp\n): string {\n if (!rejectCharsRegex) return value;\n\n const globalRegex = new RegExp(rejectCharsRegex, \"g\");\n\n return value.replace(globalRegex, \"\");\n}\n\nexport function getTrimmedValue(\n value: string | number,\n disableTrimOnBlur: boolean\n): string | number {\n if (disableTrimOnBlur || typeof value !== \"string\") return value;\n\n return value.trim();\n}\n\nexport function preserveCursor(\n e: React.ChangeEvent<HTMLInputElement>,\n updateValueFn: () => React.ChangeEvent<HTMLInputElement>\n) {\n const input = e.target;\n const prevCursor = input.selectionStart;\n const prevValue = input.value;\n\n const updatedEvent = updateValueFn();\n\n const lengthDiff = input.value.length - prevValue.length;\n const newCursor = Math.max(0, (prevCursor ?? 0) + lengthDiff);\n\n const restore = () => {\n if (document.activeElement !== input) return;\n if (input.type === \"number\") return;\n\n input.setSelectionRange(newCursor, newCursor);\n };\n\n // Schedule via microtask (fires before paint, before any other event handlers run)\n // and fall back to RAF only if the microtask didn't run for some reason.\n // Leaving both armed races stale RAFs against subsequent keystrokes' onChange,\n // which corrupts cursor position under fast typing (jsdom + user-event).\n const rafId = requestAnimationFrame(restore);\n queueMicrotask(() => {\n cancelAnimationFrame(rafId);\n restore();\n });\n\n return updatedEvent;\n}\n","import React, { forwardRef, useId, useState } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupText,\n InputGroupInput,\n} from \"src/primitives/InputGroup\";\nimport { buildTestIdPrefix } from \"src/utils/fieldIds\";\nimport { withIconSize, type IconLike } from \"src/utils/withIconSize\";\n\nimport { SIZE_CONFIG } from \"./constants\";\nimport {\n formatWithPrecision,\n enforceDecimalPrecision,\n formatWithRejectCharsRegex,\n getTrimmedValue,\n preserveCursor,\n} from \"./utils\";\n\ntype InputSize = \"small\" | \"medium\" | \"large\";\n\nexport interface InputProps extends Omit<\n React.ComponentProps<\"input\">,\n \"size\" | \"prefix\" | \"value\"\n> {\n /** Controlled value. */\n value?: string | number;\n /** Size of the input. */\n size?: InputSize;\n /** Input type. */\n type?: string;\n /** Label displayed above the input. */\n label?: string;\n /** Error message displayed below the input. */\n error?: string;\n /** Help text displayed below the input. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Content rendered before the input. Accepts an element, a component\n * reference (e.g. `Search` from lucide-react), or any other React node. */\n prefix?: IconLike;\n /** Content rendered after the input. Accepts an element, a component\n * reference (e.g. `Search` from lucide-react), or any other React node. */\n suffix?: IconLike;\n /** Removes borders from the input. */\n nakedInput?: boolean;\n /** HTML size attribute for the input element. */\n contentSize?: number;\n /** Maximum character limit. Counter visible at 85%. */\n maxLength?: number;\n /** Allow typing past maxLength, show error styling on count. */\n unlimitedChars?: boolean;\n /** Regex to reject matching characters from input. */\n rejectCharsRegex?: RegExp;\n /** Prevent trimming whitespace on blur. */\n disableTrimOnBlur?: boolean;\n /** Decimal places for number formatting. -1 to disable. */\n precision?: number;\n /** Props forwarded to the Label element. */\n labelProps?: React.ComponentProps<typeof FieldLabel>;\n /** Additional class name for the outermost wrapper. */\n className?: string;\n /** Prefix for the field's testid family(label, input, error, help). Falls back to the hyphenized label. */\n dataTestId?: string;\n}\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n size = \"medium\",\n type = \"text\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n prefix = null,\n suffix = null,\n disabled = false,\n nakedInput = false,\n contentSize,\n required = false,\n maxLength,\n unlimitedChars = false,\n rejectCharsRegex,\n disableTrimOnBlur = false,\n precision = -1,\n labelProps,\n className = \"\",\n dataTestId,\n onBlur,\n onChange,\n value: controlledValue,\n ...otherProps\n },\n ref\n ) => {\n const generatedId = useId();\n const id = otherProps.id ?? generatedId;\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n\n // Controlled / uncontrolled value tracking\n const [valueInternal, setValueInternal] = useState(controlledValue);\n const isControlled = controlledValue !== undefined;\n\n const value =\n formatWithPrecision(controlledValue, precision) ?? valueInternal ?? \"\";\n const valueLength = value?.toString().length || 0;\n\n const isMaxLengthPresent = !!maxLength || maxLength === 0;\n const isCharacterLimitVisible =\n isMaxLengthPresent && valueLength >= maxLength! * 0.85;\n const maxLengthError = unlimitedChars && valueLength > maxLength!;\n\n // --- Handlers ---\n\n const onChangeInternal = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setValueInternal(e.target.value);\n }\n onChange?.(e);\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (type === \"file\") {\n onChangeInternal(e);\n\n return;\n }\n\n let formattedValue = formatWithRejectCharsRegex(\n e.target.value,\n rejectCharsRegex\n );\n formattedValue = enforceDecimalPrecision(formattedValue, precision);\n\n if (formattedValue !== e.target.value) {\n preserveCursor(e, () => {\n const syntheticEvent = Object.create(e, {\n target: { value: { ...e.target, value: formattedValue } },\n });\n e.target.value = formattedValue;\n onChangeInternal(syntheticEvent);\n\n return syntheticEvent;\n });\n } else {\n onChangeInternal(e);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n if (type === \"file\") {\n onBlur?.(e);\n\n return;\n }\n\n const trimmedValue = getTrimmedValue(value, disableTrimOnBlur);\n const formattedValue = formatWithPrecision(trimmedValue, precision);\n\n if (formattedValue !== undefined && formattedValue !== value) {\n e.target.value = formattedValue.toString();\n handleChange(e as unknown as React.ChangeEvent<HTMLInputElement>);\n }\n\n onBlur?.(e);\n };\n\n const handleWheel = (e: React.WheelEvent<HTMLInputElement>) => {\n if (type === \"number\") (e.target as HTMLInputElement).blur();\n };\n\n // --- aria-describedby ---\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n // --- Render ---\n\n const hasField = !!(label || error || helpText);\n const sizeConfig = SIZE_CONFIG[size];\n const testIdPrefix = buildTestIdPrefix(dataTestId, label);\n\n const inputGroup = (\n <InputGroup\n data-testid={`${testIdPrefix}-input`}\n className={cn(\n sizeConfig.group,\n nakedInput &&\n \"border-0 shadow-none has-[[data-slot=input-group-control]:focus-visible]:ring-0 has-[[data-slot=input-group-control]:focus-visible]:border-transparent\",\n !!error &&\n !nakedInput &&\n \"border-destructive ring-destructive/20 ring-3\",\n !hasField && className\n )}\n >\n {prefix && (\n <InputGroupAddon\n align=\"inline-start\"\n className={sizeConfig.addonStart}\n >\n <InputGroupText>\n {withIconSize(prefix, sizeConfig.icon)}\n </InputGroupText>\n </InputGroupAddon>\n )}\n <InputGroupInput\n ref={ref}\n id={id}\n type={type}\n disabled={disabled}\n required={required}\n size={contentSize}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n className={cn(sizeConfig.input, nakedInput && \"px-0\")}\n data-testid={`${testIdPrefix}-input-field`}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n onWheel={handleWheel}\n {...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {})}\n {...otherProps}\n />\n {suffix && (\n <InputGroupAddon align=\"inline-end\" className={sizeConfig.addonEnd}>\n <InputGroupText>\n {withIconSize(suffix, sizeConfig.icon)}\n </InputGroupText>\n </InputGroupAddon>\n )}\n </InputGroup>\n );\n\n if (!hasField) {\n return inputGroup;\n }\n\n return (\n <Field\n data-testid=\"nui-input-wrapper\"\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n >\n {(label || isCharacterLimitVisible) && (\n <div className=\"flex items-center justify-between\">\n {label && (\n <FieldLabel\n htmlFor={id}\n data-testid={`${testIdPrefix}-input-label`}\n {...labelProps}\n >\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n {isCharacterLimitVisible && (\n <span\n className={cn(\n \"text-xs tabular-nums\",\n maxLengthError ? \"text-destructive\" : \"text-muted-foreground\"\n )}\n >\n {valueLength}/{maxLength}\n </span>\n )}\n </div>\n )}\n <FieldContent>\n {inputGroup}\n {!!error && (\n <FieldError\n id={errorId}\n data-testid={`${testIdPrefix}-input-error`}\n >\n {error}\n </FieldError>\n )}\n {helpText && (\n <FieldDescription\n id={helpTextId}\n data-testid={`${testIdPrefix}-input-help`}\n >\n {helpText}\n </FieldDescription>\n )}\n </FieldContent>\n </Field>\n );\n }\n);\n\nInput.displayName = \"Input\";\n\nexport { Input };\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { forwardRef } from 'react';
|
|
3
|
-
import { H as HelpIcon } from './HelpIcon-
|
|
3
|
+
import { H as HelpIcon } from './HelpIcon-xh488VXs.js';
|
|
4
4
|
import { Label as Label$1 } from './primitives/Label.js';
|
|
5
5
|
import { c as cn } from './utils-BJnb9o5c.js';
|
|
6
6
|
|
|
@@ -14,4 +14,4 @@ const Label = forwardRef(
|
|
|
14
14
|
Label.displayName = "Label";
|
|
15
15
|
|
|
16
16
|
export { Label as L };
|
|
17
|
-
//# sourceMappingURL=Label-
|
|
17
|
+
//# sourceMappingURL=Label-B-R4PNNq.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Label-
|
|
1
|
+
{"version":3,"file":"Label-B-R4PNNq.js","sources":["../src/components/Label/Label.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\n\nimport { HelpIcon, type HelpIconProps } from \"src/shared/HelpIcon\";\nimport { Label as PrimitiveLabel } from \"src/primitives/Label\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nexport type { HelpIconProps };\n\nexport interface LabelProps extends React.ComponentProps<\n typeof PrimitiveLabel\n> {\n /** Shows a red asterisk after the label text. */\n required?: boolean;\n /** Props for the help icon (tooltip or popover mode). */\n helpIconProps?: HelpIconProps;\n /** Additional CSS class names. */\n className?: string;\n}\n\nconst Label = forwardRef<HTMLLabelElement, LabelProps>(\n ({ required, helpIconProps, className, children, ...otherProps }, ref) => (\n <PrimitiveLabel ref={ref} className={cn(className)} {...otherProps}>\n {children}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n {helpIconProps && <HelpIcon {...helpIconProps} />}\n </PrimitiveLabel>\n )\n);\n\nLabel.displayName = \"Label\";\n\nexport { Label };\n"],"names":["PrimitiveLabel"],"mappings":";;;;;;AAmBA,MAAM,KAAA,GAAQ,UAAA;AAAA,EACZ,CAAC,EAAE,QAAA,EAAU,eAAe,SAAA,EAAW,QAAA,EAAU,GAAG,UAAA,EAAW,EAAG,GAAA,qBAChE,IAAA,CAACA,WAAe,GAAA,EAAU,SAAA,EAAW,GAAG,SAAS,CAAA,EAAI,GAAG,UAAA,EACrD,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,IACA,4BACC,GAAA,CAAC,MAAA,EAAA,EAAK,eAAY,MAAA,EAAO,SAAA,EAAU,oBAAmB,QAAA,EAAA,GAAA,EAEtD,CAAA;AAAA,IAED,aAAA,oBAAiB,GAAA,CAAC,QAAA,EAAA,EAAU,GAAG,aAAA,EAAe;AAAA,GAAA,EACjD;AAEJ;AAEA,KAAA,CAAM,WAAA,GAAc,OAAA;;;;"}
|