@povio/ui 2.3.0-rc.3 → 2.3.0-rc.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/dist/assets/icons/AlignCenter.js +26 -11
  2. package/dist/assets/icons/AlignLeft.js +26 -11
  3. package/dist/assets/icons/AlignLeftRight.js +26 -11
  4. package/dist/assets/icons/AlignRight.js +26 -11
  5. package/dist/assets/icons/ArrowDropDown.js +26 -11
  6. package/dist/assets/icons/ArrowDropUp.js +26 -11
  7. package/dist/assets/icons/ArrowLeft.js +26 -11
  8. package/dist/assets/icons/ArrowRight.js +26 -11
  9. package/dist/assets/icons/Bold.js +26 -11
  10. package/dist/assets/icons/BulletedList.js +26 -11
  11. package/dist/assets/icons/Calendar.js +28 -13
  12. package/dist/assets/icons/Check.js +28 -13
  13. package/dist/assets/icons/CheckCircle.js +26 -11
  14. package/dist/assets/icons/CheckboxCheckmark.js +29 -14
  15. package/dist/assets/icons/CheckboxIndeterminate.js +29 -14
  16. package/dist/assets/icons/ChevronDown.js +28 -13
  17. package/dist/assets/icons/ChevronLeft.js +28 -13
  18. package/dist/assets/icons/ChevronRight.js +28 -13
  19. package/dist/assets/icons/ChevronUp.js +28 -13
  20. package/dist/assets/icons/ChevronsLeft.js +28 -13
  21. package/dist/assets/icons/ChevronsRight.js +28 -13
  22. package/dist/assets/icons/Clock.js +26 -11
  23. package/dist/assets/icons/Close.js +26 -11
  24. package/dist/assets/icons/DateTime.js +35 -14
  25. package/dist/assets/icons/DragIndicator.js +26 -11
  26. package/dist/assets/icons/File.js +28 -13
  27. package/dist/assets/icons/Highlight.js +26 -11
  28. package/dist/assets/icons/HighlightOn.js +49 -15
  29. package/dist/assets/icons/Home.js +26 -11
  30. package/dist/assets/icons/Info.js +37 -16
  31. package/dist/assets/icons/Italic.js +26 -11
  32. package/dist/assets/icons/Link.js +26 -11
  33. package/dist/assets/icons/Menu.js +26 -11
  34. package/dist/assets/icons/NumberedList.js +26 -11
  35. package/dist/assets/icons/PointerHorizontal.js +26 -11
  36. package/dist/assets/icons/PointerVertical.js +26 -11
  37. package/dist/assets/icons/Search.js +26 -11
  38. package/dist/assets/icons/Send.js +28 -13
  39. package/dist/assets/icons/Strikethrough.js +26 -11
  40. package/dist/assets/icons/TextColor.js +48 -14
  41. package/dist/assets/icons/Today.js +26 -11
  42. package/dist/assets/icons/Underlined.js +28 -13
  43. package/dist/assets/icons/Upload.js +35 -14
  44. package/dist/assets/icons/Visibility.js +26 -11
  45. package/dist/assets/icons/VisibilityOff.js +26 -11
  46. package/dist/assets/icons/WarningFilled.js +28 -13
  47. package/dist/components/Breadcrumbs/Breadcrumbs.js +207 -56
  48. package/dist/components/Menu/Menu.js +18 -2
  49. package/dist/components/Menu/MenuDesktop.js +41 -7
  50. package/dist/components/Menu/MenuItem.js +32 -9
  51. package/dist/components/Menu/MenuMobile.js +97 -38
  52. package/dist/components/Menu/MenuPopover.js +105 -29
  53. package/dist/components/buttons/IconButton/IconButton.js +40 -8
  54. package/dist/components/buttons/InlineIconButton/InlineIconButton.js +34 -9
  55. package/dist/components/buttons/PillButton/PillButton.js +55 -17
  56. package/dist/components/buttons/SplitButton/SplitButton.js +103 -18
  57. package/dist/components/buttons/TextButton/TextButton.js +30 -8
  58. package/dist/components/buttons/ToggleButton/ToggleButton.js +28 -8
  59. package/dist/components/buttons/shared/ButtonContent.js +80 -22
  60. package/dist/components/inputs/Checkbox/Checkbox.d.ts +1 -0
  61. package/dist/components/inputs/Checkbox/Checkbox.js +188 -34
  62. package/dist/components/inputs/Checkbox/CheckboxCheckmark.js +24 -10
  63. package/dist/components/inputs/DateTime/DatePicker/DatePicker.d.ts +1 -0
  64. package/dist/components/inputs/DateTime/DatePicker/DatePicker.js +268 -87
  65. package/dist/components/inputs/DateTime/DateRangePicker/DateRangePicker.d.ts +1 -0
  66. package/dist/components/inputs/DateTime/DateRangePicker/DateRangePicker.js +348 -182
  67. package/dist/components/inputs/DateTime/DateTimePicker/DateTimePicker.d.ts +1 -0
  68. package/dist/components/inputs/DateTime/DateTimePicker/DateTimePicker.js +178 -69
  69. package/dist/components/inputs/DateTime/TimePicker/TimePicker.d.ts +1 -0
  70. package/dist/components/inputs/DateTime/TimePicker/TimePicker.js +530 -157
  71. package/dist/components/inputs/DateTime/shared/Calendar.js +333 -137
  72. package/dist/components/inputs/DateTime/shared/CalendarCell.d.ts +2 -1
  73. package/dist/components/inputs/DateTime/shared/CalendarCell.js +301 -102
  74. package/dist/components/inputs/DateTime/shared/CalendarGrid.d.ts +2 -1
  75. package/dist/components/inputs/DateTime/shared/CalendarGrid.js +146 -33
  76. package/dist/components/inputs/DateTime/shared/CalendarHeader.js +245 -90
  77. package/dist/components/inputs/DateTime/shared/CalendarSelectHeader.js +318 -137
  78. package/dist/components/inputs/DateTime/shared/DateField.js +311 -112
  79. package/dist/components/inputs/DateTime/shared/DatePickerInput.d.ts +7 -1
  80. package/dist/components/inputs/DateTime/shared/DatePickerInput.js +376 -146
  81. package/dist/components/inputs/DateTime/shared/DateSegmentItem.js +94 -21
  82. package/dist/components/inputs/DateTime/shared/DateTimeDialog.js +81 -27
  83. package/dist/components/inputs/DateTime/shared/DateTimeDialogFooter.js +59 -10
  84. package/dist/components/inputs/DateTime/shared/MonthPicker.js +103 -58
  85. package/dist/components/inputs/DateTime/shared/RangeCalendar.js +193 -82
  86. package/dist/components/inputs/DateTime/shared/TimeField.js +27 -8
  87. package/dist/components/inputs/DateTime/shared/TimePickerForm.js +279 -110
  88. package/dist/components/inputs/DateTime/shared/TimePickerInput.d.ts +3 -1
  89. package/dist/components/inputs/DateTime/shared/TimePickerInput.js +208 -70
  90. package/dist/components/inputs/DateTime/shared/YearPicker.js +119 -68
  91. package/dist/components/inputs/File/FileUpload.js +86 -44
  92. package/dist/components/inputs/File/FileUploadContainer.js +15 -7
  93. package/dist/components/inputs/File/InputUpload.js +317 -79
  94. package/dist/components/inputs/File/shared/FileCard.js +104 -41
  95. package/dist/components/inputs/File/shared/FileCardList.js +47 -12
  96. package/dist/components/inputs/File/shared/FileUploadContent.js +175 -44
  97. package/dist/components/inputs/File/shared/FileUploadContentEmpty.js +149 -46
  98. package/dist/components/inputs/File/shared/FileUploadContentError.js +234 -93
  99. package/dist/components/inputs/File/shared/FileUploadContentFilled.js +230 -97
  100. package/dist/components/inputs/File/shared/FileUploadContentLoading.js +199 -55
  101. package/dist/components/inputs/File/shared/InputUploadContent.js +148 -35
  102. package/dist/components/inputs/File/shared/InputUploadFilled.js +49 -8
  103. package/dist/components/inputs/File/shared/ProgressBar.js +48 -9
  104. package/dist/components/inputs/FormField/FormField.js +119 -37
  105. package/dist/components/inputs/FormField/FormFieldError.js +25 -5
  106. package/dist/components/inputs/FormField/FormFieldHeader.js +79 -22
  107. package/dist/components/inputs/FormField/FormFieldHeaderClose.js +31 -7
  108. package/dist/components/inputs/FormField/FormFieldHelper.js +26 -6
  109. package/dist/components/inputs/FormField/FormFieldLabel.js +40 -9
  110. package/dist/components/inputs/Input/NumberInput/NumberInput.js +392 -123
  111. package/dist/components/inputs/Input/NumberRangeInput/NumberRangeField.js +541 -116
  112. package/dist/components/inputs/Input/NumberRangeInput/NumberRangeInput.js +463 -146
  113. package/dist/components/inputs/Input/PasswordInput/PasswordInput.js +48 -9
  114. package/dist/components/inputs/Input/TextArea/TextArea.js +298 -89
  115. package/dist/components/inputs/Input/TextInput/TextInput.js +370 -121
  116. package/dist/components/inputs/Input/shared/InputContent.js +190 -58
  117. package/dist/components/inputs/Inputs/Form.js +40 -11
  118. package/dist/components/inputs/Inputs/InputItem.d.ts +0 -1
  119. package/dist/components/inputs/Inputs/InputItem.js +65 -16
  120. package/dist/components/inputs/Inputs/Inputs.js +37 -11
  121. package/dist/components/inputs/RadioGroup/RadioGroup.d.ts +1 -0
  122. package/dist/components/inputs/RadioGroup/RadioGroup.js +333 -107
  123. package/dist/components/inputs/Selection/Autocomplete/Autocomplete.js +145 -50
  124. package/dist/components/inputs/Selection/Autocomplete/QueryAutocomplete.js +3 -2
  125. package/dist/components/inputs/Selection/Select/QuerySelect.js +107 -27
  126. package/dist/components/inputs/Selection/Select/Select.js +139 -44
  127. package/dist/components/inputs/Selection/shared/SelectBase.js +69 -20
  128. package/dist/components/inputs/Selection/shared/SelectDesktop.js +390 -143
  129. package/dist/components/inputs/Selection/shared/SelectInput.d.ts +2 -2
  130. package/dist/components/inputs/Selection/shared/SelectInput.js +326 -136
  131. package/dist/components/inputs/Selection/shared/SelectInputTags.js +99 -25
  132. package/dist/components/inputs/Selection/shared/SelectListBox.js +163 -51
  133. package/dist/components/inputs/Selection/shared/SelectListBoxItem.js +85 -35
  134. package/dist/components/inputs/Selection/shared/SelectListBoxItemSelectAll.js +69 -16
  135. package/dist/components/inputs/Selection/shared/SelectListBoxLoadingItem.js +70 -21
  136. package/dist/components/inputs/Selection/shared/SelectListBoxSelectionBar.js +58 -9
  137. package/dist/components/inputs/Selection/shared/StaticSelectTrailingContent.d.ts +9 -0
  138. package/dist/components/inputs/Selection/shared/StaticSelectTrailingContent.js +47 -0
  139. package/dist/components/inputs/Selection/shared/select.context.d.ts +2 -2
  140. package/dist/components/inputs/Selection/shared/select.context.js +44 -38
  141. package/dist/components/inputs/Selection/shared/selectInput.cva.d.ts +5 -0
  142. package/dist/components/inputs/Selection/shared/selectInput.cva.js +5 -0
  143. package/dist/components/inputs/Selection/shared/useSelectItems.js +109 -49
  144. package/dist/components/inputs/Skeleton/InputFrame.d.ts +2 -0
  145. package/dist/components/inputs/Skeleton/InputFrame.js +444 -124
  146. package/dist/components/inputs/Slider/Slider.js +247 -74
  147. package/dist/components/inputs/TextEditor/TextEditor.js +447 -103
  148. package/dist/components/inputs/TextEditor/Toolbar/ColorPicker.js +37 -11
  149. package/dist/components/inputs/TextEditor/Toolbar/ColorPickerDropdown.js +102 -30
  150. package/dist/components/inputs/TextEditor/Toolbar/HyperlinkAction.js +194 -45
  151. package/dist/components/inputs/TextEditor/Toolbar/TextAlignSelect.js +88 -28
  152. package/dist/components/inputs/TextEditor/Toolbar/TextColorSelect.js +48 -14
  153. package/dist/components/inputs/TextEditor/Toolbar/TextEditorToolbar.js +66 -19
  154. package/dist/components/inputs/TextEditor/Toolbar/TextHighlightSelect.js +49 -15
  155. package/dist/components/inputs/TextEditor/Toolbar/TextListActions.js +92 -32
  156. package/dist/components/inputs/TextEditor/Toolbar/TextMarksActions.js +126 -54
  157. package/dist/components/inputs/TextEditor/Toolbar/TextStyleSelect.js +141 -38
  158. package/dist/components/inputs/Toggle/Toggle.d.ts +1 -0
  159. package/dist/components/inputs/Toggle/Toggle.js +206 -41
  160. package/dist/components/inputs/shared/CheckContent.js +21 -10
  161. package/dist/components/inputs/shared/InputClear.js +78 -21
  162. package/dist/components/inputs/shared/TooltipWrapper.js +47 -12
  163. package/dist/components/inputs/shared/input.cva.js +13 -3
  164. package/dist/components/inputs/shared/useStaticInputHandoff.d.ts +1 -0
  165. package/dist/components/inputs/shared/useStaticInputHandoff.js +87 -34
  166. package/dist/components/navigation/Accordion/Accordion.js +69 -22
  167. package/dist/components/navigation/Accordion/AccordionItem.js +86 -41
  168. package/dist/components/navigation/Stepper/Stepper.js +67 -22
  169. package/dist/components/navigation/Stepper/StepperItem.js +104 -31
  170. package/dist/components/navigation/Stepper/StepperSeparator.js +23 -5
  171. package/dist/components/overlays/ActionModal/ActionModal.js +169 -35
  172. package/dist/components/overlays/BottomSheet/BottomSheet.js +96 -23
  173. package/dist/components/overlays/BottomSheet/BottomSheetHeader.js +48 -8
  174. package/dist/components/overlays/Drawer/Drawer.js +62 -20
  175. package/dist/components/overlays/ResponsivePopover/ResponsivePopover.js +83 -27
  176. package/dist/components/overlays/Tooltip/Tooltip.js +137 -28
  177. package/dist/components/overlays/Tooltip/TooltipEllipsis.js +37 -12
  178. package/dist/components/segment/Segment.js +218 -57
  179. package/dist/components/segment/SegmentItem.js +67 -10
  180. package/dist/components/shared/pagination/Pagination.js +108 -22
  181. package/dist/components/shared/pagination/PaginationList.js +167 -64
  182. package/dist/components/status/Alert/Alert.js +97 -30
  183. package/dist/components/status/Loader/Loader.js +77 -22
  184. package/dist/components/status/Toast/Toast.js +21 -13
  185. package/dist/components/status/Toast/useToast.js +62 -57
  186. package/dist/components/table/ColumnConfig.js +158 -54
  187. package/dist/components/table/InfiniteTable.js +67 -16
  188. package/dist/components/table/PaginatedTable.js +84 -18
  189. package/dist/components/table/Table.js +28 -27
  190. package/dist/components/text/Link/Link.js +19 -7
  191. package/dist/components/text/Typography/Typography.js +23 -8
  192. package/dist/config/confirmation.context.js +1 -1
  193. package/dist/config/link.context.js +23 -9
  194. package/dist/config/router.context.js +42 -16
  195. package/dist/config/theme.context.js +98 -45
  196. package/dist/config/uiConfig.context.d.ts +4 -4
  197. package/dist/config/uiConfig.context.js +50 -11
  198. package/dist/config/uiStyle.context.js +15 -5
  199. package/dist/helpers/dynamicInputs.d.ts +1 -1
  200. package/dist/hooks/useBreakpoint.js +16 -3
  201. package/dist/hooks/useDebounceCallback.js +51 -17
  202. package/dist/hooks/useFilters.js +125 -64
  203. package/dist/hooks/useForm.js +42 -8
  204. package/dist/hooks/useFormAutosave.js +101 -30
  205. package/dist/hooks/useIntersectionObserver.js +86 -32
  206. package/dist/hooks/useLocalStorage.js +43 -10
  207. package/dist/hooks/useLongPressRepeat.js +55 -20
  208. package/dist/hooks/usePagination.js +49 -19
  209. package/dist/hooks/useQueryAutocomplete.js +1 -0
  210. package/dist/hooks/useScrollableListBox.js +37 -16
  211. package/dist/hooks/useSorting.js +69 -28
  212. package/dist/hooks/useStateAndRef.js +21 -7
  213. package/dist/hooks/useTableColumnConfig.js +124 -31
  214. package/dist/hooks/useTranslationMemo.js +25 -5
  215. package/dist/index.js +2 -2
  216. package/dist/utils/date-time.utils.d.ts +2 -0
  217. package/dist/utils/date-time.utils.js +17 -13
  218. package/package.json +1 -1
@@ -25,6 +25,7 @@ interface DateTimePickerBaseProps extends FormFieldProps, InputVariantProps, Omi
25
25
  timeZone?: string;
26
26
  format?: string;
27
27
  onBlur?: (e: FocusEvent<HTMLInputElement>) => void;
28
+ fireBlurOnChange?: boolean;
28
29
  }
29
30
  export interface DateTimePickerProps extends Omit<DateTimePickerBaseProps, "value" | "onChange"> {
30
31
  value?: string | null;
@@ -13,18 +13,19 @@ import { TooltipWrapper } from "../../shared/TooltipWrapper.js";
13
13
  import { InputFrame } from "../../Skeleton/InputFrame.js";
14
14
  import { useStaticInputHandoff } from "../../shared/useStaticInputHandoff.js";
15
15
  import { useDebounceCallback } from "../../../../hooks/useDebounceCallback.js";
16
+ import { c } from "react/compiler-runtime";
16
17
  import { jsx, jsxs } from "react/jsx-runtime";
17
18
  import { clsx } from "clsx";
18
19
  import { useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
19
20
  import { useDatePicker, useLocale } from "react-aria";
20
21
  import { mergeRefs } from "@react-aria/utils";
21
- import { Controller, useWatch } from "react-hook-form";
22
- import { Time, createCalendar, getLocalTimeZone, now, toCalendarDateTime, today } from "@internationalized/date";
22
+ import { Controller } from "react-hook-form";
23
+ import { Time, createCalendar, toCalendarDate, toCalendarDateTime, today } from "@internationalized/date";
23
24
  import { useCalendarState, useDatePickerState } from "react-stately";
24
25
  //#region src/components/inputs/DateTime/DateTimePicker/DateTimePicker.tsx
25
26
  var DateTimePickerBase = (props) => {
26
27
  const ui = UIConfig.useConfig();
27
- const { ref, label, tooltipText, helperText, isRequired, rightContent, isDisabled, isDirty, headerClassName, errorClassName, isHeaderHidden, error, onChange, onBlur, value, disableDropdown, isTimeOptional, placeholder, inputClassName, hideLabel: hideLabelProp, variant: variantProp, as: asProp, size: sizeProp, isClearable: isClearableProp, todayIcon: todayIconProp, todayIconButtonSize: todayIconButtonSizeProp, todayIconPlacement: todayIconPlacementProp, shouldForceLeadingZeros: shouldForceLeadingZerosProp, disableManualEntry: disableManualEntryProp, shouldUpdateDateOnMonthYearChange: shouldUpdateDateOnMonthYearChangeProp, timeZone, autoFixYear: autoFixYearProp, format, setDateValueOnDateSelection: setDateValueOnDateSelectionProp, ...rest } = props;
28
+ const { ref, label, tooltipText, helperText, isRequired, rightContent, isDisabled, isDirty, headerClassName, errorClassName, isHeaderHidden, error, onChange, onBlur, value, disableDropdown, isTimeOptional, placeholder, inputClassName, hideLabel: hideLabelProp, variant: variantProp, as: asProp, size: sizeProp, isClearable: isClearableProp, todayIcon: todayIconProp, todayIconButtonSize: todayIconButtonSizeProp, todayIconPlacement: todayIconPlacementProp, shouldForceLeadingZeros: shouldForceLeadingZerosProp, disableManualEntry: disableManualEntryProp, shouldUpdateDateOnMonthYearChange: shouldUpdateDateOnMonthYearChangeProp, timeZone: _timeZone, autoFixYear: autoFixYearProp, fireBlurOnChange: fireBlurOnChangeProp, format, setDateValueOnDateSelection: setDateValueOnDateSelectionProp, ...rest } = props;
28
29
  const hideLabel = hideLabelProp ?? ui.input.hideLabel;
29
30
  const variant = variantProp ?? ui.input.variant;
30
31
  const as = asProp ?? ui.input.as;
@@ -37,9 +38,9 @@ var DateTimePickerBase = (props) => {
37
38
  const disableManualEntry = disableManualEntryProp ?? ui.dateInput.disableManualEntry;
38
39
  const shouldUpdateDateOnMonthYearChange = shouldUpdateDateOnMonthYearChangeProp ?? ui.dateInput.shouldUpdateDateOnMonthYearChange;
39
40
  const autoFixYear = autoFixYearProp ?? ui.dateInput.autoFixYear;
41
+ const fireBlurOnChange = fireBlurOnChangeProp ?? ui.dateInput.fireBlurOnChange;
40
42
  const setDateValueOnDateSelection = setDateValueOnDateSelectionProp ?? ui.dateInput.setDateValueOnDateSelection;
41
- let effectiveTimeZone = getLocalTimeZone();
42
- if (timeZone) effectiveTimeZone = timeZone;
43
+ const effectiveTimeZone = "UTC";
43
44
  const formFieldProps = {
44
45
  error,
45
46
  label,
@@ -57,16 +58,20 @@ var DateTimePickerBase = (props) => {
57
58
  const datePickerRef = useMemo(() => ({ get current() {
58
59
  return datePickerInputRef.current?.getContainer?.() || null;
59
60
  } }), []);
60
- useImperativeHandle(ref, () => ({ clear: () => {
61
- datePickerInputRef.current?.clear();
62
- } }));
61
+ useImperativeHandle(ref, () => ({
62
+ clear: () => {
63
+ datePickerInputRef.current?.clear();
64
+ },
65
+ getContainer: () => datePickerInputRef.current?.getContainer?.() ?? null
66
+ }));
63
67
  const handleBlur = (val) => {
64
68
  onBlur?.({ target: { value: val } });
65
69
  };
66
70
  const { callback: debouncedBlur } = useDebounceCallback(handleBlur, { delay: 500 });
71
+ const normalizedValue = value ?? null;
67
72
  const dialogState = useDatePickerState({
68
73
  ...rest,
69
- defaultValue: value || rest.defaultValue,
74
+ defaultValue: normalizedValue ?? rest.defaultValue ?? null,
70
75
  shouldCloseOnSelect: false,
71
76
  granularity: "minute",
72
77
  hideTimeZone: true,
@@ -78,12 +83,12 @@ var DateTimePickerBase = (props) => {
78
83
  const state = useDatePickerState({
79
84
  ...rest,
80
85
  shouldForceLeadingZeros,
81
- value,
82
- onChange: (val) => {
83
- onChange?.(val);
84
- dialogState.setValue(val);
85
- calendarState.setFocusedDate(val || today(getLocalTimeZone()));
86
- debouncedBlur(val);
86
+ value: normalizedValue,
87
+ onChange: (val_0) => {
88
+ onChange?.(val_0);
89
+ dialogState.setValue(val_0);
90
+ calendarState.setFocusedDate(val_0 || today(effectiveTimeZone));
91
+ if (fireBlurOnChange) debouncedBlur(val_0);
87
92
  },
88
93
  shouldCloseOnSelect: false,
89
94
  granularity: "minute",
@@ -122,7 +127,7 @@ var DateTimePickerBase = (props) => {
122
127
  const newValue = dialogState.value;
123
128
  state.setValue(newValue);
124
129
  state.toggle();
125
- handleBlur(newValue);
130
+ if (fireBlurOnChange) handleBlur(newValue);
126
131
  };
127
132
  const onMonthYearChange = (selectedDate) => {
128
133
  if (!shouldUpdateDateOnMonthYearChange) return;
@@ -140,8 +145,16 @@ var DateTimePickerBase = (props) => {
140
145
  calendarState.setFocusedDate(selectedDate);
141
146
  };
142
147
  const onTodayPress = () => {
143
- dialogState.setValue(toCalendarDateTime(now(effectiveTimeZone)));
148
+ const currentValue = DateTimeUtils.getCurrentWallClockCalendarDateTime();
149
+ dialogState.setValue(currentValue);
150
+ calendarState.setFocusedDate(toCalendarDate(currentValue));
151
+ };
152
+ const onInputClear = () => {
153
+ onChange?.(null);
154
+ state.setValue(null);
155
+ dialogState.setValue(null);
144
156
  calendarState.setFocusedDate(today(effectiveTimeZone));
157
+ if (fireBlurOnChange) handleBlur(null);
145
158
  };
146
159
  const onOpenChange = (isOpen) => {
147
160
  state.toggle();
@@ -154,7 +167,7 @@ var DateTimePickerBase = (props) => {
154
167
  dialogState.setValue(state.value);
155
168
  return;
156
169
  }
157
- const textValue = e.currentTarget.textContent;
170
+ const textValue = e?.currentTarget.textContent ?? null;
158
171
  const dateTimeValue = DateTimeUtils.formatTextDateToCalendarDateTime(textValue, effectiveTimeZone, locale);
159
172
  if (dateTimeValue) {
160
173
  state.setValue(dateTimeValue);
@@ -178,11 +191,14 @@ var DateTimePickerBase = (props) => {
178
191
  groupProps,
179
192
  fieldProps: {
180
193
  ...fieldProps,
181
- onBlur: (e) => {
182
- fieldProps.onBlur?.(e);
183
- onInputBlur(e);
194
+ onBlur: (e_0) => {
195
+ fieldProps.onBlur?.(e_0);
196
+ onInputBlur(e_0);
184
197
  }
185
198
  },
199
+ fieldValue: normalizedValue,
200
+ isValueControlled: true,
201
+ hasValue: normalizedValue != null,
186
202
  buttonProps,
187
203
  isDirty,
188
204
  isDisabled,
@@ -204,7 +220,9 @@ var DateTimePickerBase = (props) => {
204
220
  className: inputClassName,
205
221
  timeZone: effectiveTimeZone,
206
222
  isTimeOptional,
207
- format
223
+ format,
224
+ fireBlurOnChange,
225
+ onClear: onInputClear
208
226
  }), (!disableDropdown || disableManualEntry) && /* @__PURE__ */ jsx(DateTimeDialog, {
209
227
  footer: /* @__PURE__ */ jsx(DateTimeDialogFooter, {
210
228
  isDisabled,
@@ -231,7 +249,9 @@ var DateTimePickerBase = (props) => {
231
249
  })
232
250
  });
233
251
  };
234
- var DateTimePicker = ({ fullIso = true, renderStaticInput, ...props }) => {
252
+ var DateTimePickerInner = (t0) => {
253
+ const $ = c(9);
254
+ const { fullIso: t1, renderStaticInput, isFormControlDisabled, ...props } = t0;
235
255
  const ui = UIConfig.useConfig();
236
256
  const datePickerInputContentRowCva = UIStyle.useCva("datePickerInput.contentRowCva", datePickerInputContentRow);
237
257
  const { locale } = useLocale();
@@ -242,30 +262,13 @@ var DateTimePicker = ({ fullIso = true, renderStaticInput, ...props }) => {
242
262
  inputRef,
243
263
  renderInput,
244
264
  setRenderInput,
245
- getFocusTarget: (input) => {
246
- return (input.getContainer?.() ?? input).querySelector("input, button, [tabindex]:not([tabindex='-1'])");
247
- }
265
+ getFocusTarget: _temp
248
266
  });
249
- const watchedValue = "formControl" in props && props.formControl ? useWatch({
250
- control: props.formControl.control,
251
- name: props.formControl.name
252
- }) : props.value;
253
- let isFormControlDisabled = false;
254
- if ("formControl" in props && props.formControl) isFormControlDisabled = !!props.formControl.control._options?.disabled;
255
- const rawValue = watchedValue ?? props.value ?? null;
256
- let effectiveTimeZone = getLocalTimeZone();
257
- if (props.timeZone) effectiveTimeZone = props.timeZone;
258
- const formatDateValue = (dateValue) => {
259
- if (dateValue === null) return null;
260
- if (fullIso) return DateTimeUtils.fromDateValueToISO(dateValue, effectiveTimeZone);
261
- return DateTimeUtils.fromDateValueToISO(dateValue, effectiveTimeZone);
262
- };
263
- const parseDateValue = (isoString) => {
264
- if (isoString == null) return isoString;
265
- return DateTimeUtils.fromUTCISOToCalendarDateTime(isoString, effectiveTimeZone);
266
- };
267
+ const normalizedValue = props.value ?? null;
268
+ const formatDateValue = _temp2;
269
+ const parseDateValue = _temp3;
267
270
  if (!renderInput) {
268
- const dateTimeValue = rawValue ? parseDateValue(rawValue) : null;
271
+ const dateTimeValue = normalizedValue ? parseDateValue(normalizedValue) : null;
269
272
  const as = props.as ?? ui.input.as;
270
273
  const size = props.size ?? ui.input.size;
271
274
  const isDisabled = isFormControlDisabled || !!props.isDisabled;
@@ -291,47 +294,153 @@ var DateTimePicker = ({ fullIso = true, renderStaticInput, ...props }) => {
291
294
  contentWrapperClassName: datePickerInputContentRowCva({ size }),
292
295
  labelPlacement: "content-row",
293
296
  dataAttributes: {
294
- dataIsEmpty: dateTimeValue === null,
295
- dataIsFilled: dateTimeValue !== null,
297
+ dataIsEmpty: dateTimeValue == null,
298
+ dataIsFilled: dateTimeValue != null,
296
299
  dataIsDirty: props.isDirty,
297
300
  dataIsRequired: props.isRequired,
298
301
  dataIsDisabled: isDisabled,
299
302
  dataDisabled: isDisabled,
300
303
  dataInvalid: !!props.error,
301
- dataHasSelection: dateTimeValue !== null
304
+ dataHasSelection: dateTimeValue != null
302
305
  },
303
306
  renderStatic: true,
304
307
  onStaticInteract: renderRealInput,
305
308
  actionContent: staticTodayIcon,
306
309
  actionContentPlacement: todayIconPlacement === "fieldLabel" ? "content-row" : "content-wrapper",
310
+ wrapContentAndTrailing: true,
311
+ contentAndTrailingClassName: "gap-2!",
307
312
  trailingClassName: "py-0! pl-0!",
308
313
  trailingContent: showDropdown ? ui.dateInput.dateTimeIcon : void 0,
309
314
  children: staticSegments
310
315
  });
311
316
  }
312
- if ("formControl" in props && props.formControl) {
313
- const { formControl, ref, ...innerProps } = props;
314
- return /* @__PURE__ */ jsx(Controller, {
315
- control: formControl.control,
316
- name: formControl.name,
317
- render: ({ field, fieldState: { error, isDirty } }) => /* @__PURE__ */ jsx(DateTimePickerBase, {
318
- ...innerProps,
319
- ref: mergeRefs(ref, field.ref, inputRef),
320
- value: parseDateValue(field.value),
321
- onChange: (value) => field.onChange(formatDateValue(value)),
322
- onBlur: field.onBlur,
323
- isDirty,
324
- isDisabled: field.disabled || props.isDisabled,
325
- error: props.error ?? error?.message
326
- })
317
+ const T0 = DateTimePickerBase;
318
+ const t2 = mergeRefs(props.ref, inputRef);
319
+ const t3 = parseDateValue(normalizedValue);
320
+ let t4;
321
+ if ($[0] !== formatDateValue || $[1] !== props) {
322
+ t4 = (value) => props.onChange?.(formatDateValue(value));
323
+ $[0] = formatDateValue;
324
+ $[1] = props;
325
+ $[2] = t4;
326
+ } else t4 = $[2];
327
+ let t5;
328
+ if ($[3] !== T0 || $[4] !== props || $[5] !== t2 || $[6] !== t3 || $[7] !== t4) {
329
+ t5 = /* @__PURE__ */ jsx(T0, {
330
+ ...props,
331
+ ref: t2,
332
+ value: t3,
333
+ onChange: t4
327
334
  });
335
+ $[3] = T0;
336
+ $[4] = props;
337
+ $[5] = t2;
338
+ $[6] = t3;
339
+ $[7] = t4;
340
+ $[8] = t5;
341
+ } else t5 = $[8];
342
+ return t5;
343
+ };
344
+ var DateTimePicker = (t0) => {
345
+ const $ = c(24);
346
+ let props;
347
+ let renderStaticInput;
348
+ let t1;
349
+ if ($[0] !== t0) {
350
+ ({fullIso: t1, renderStaticInput, ...props} = t0);
351
+ $[0] = t0;
352
+ $[1] = props;
353
+ $[2] = renderStaticInput;
354
+ $[3] = t1;
355
+ } else {
356
+ props = $[1];
357
+ renderStaticInput = $[2];
358
+ t1 = $[3];
328
359
  }
329
- return /* @__PURE__ */ jsx(DateTimePickerBase, {
330
- ...props,
331
- ref: mergeRefs(props.ref, inputRef),
332
- value: parseDateValue(props.value),
333
- onChange: (value) => props.onChange?.(formatDateValue(value))
334
- });
360
+ const fullIso = t1 === void 0 ? true : t1;
361
+ if ("formControl" in props && props.formControl) {
362
+ let formControl;
363
+ let innerProps;
364
+ let ref;
365
+ if ($[4] !== props) {
366
+ ({formControl, ref, ...innerProps} = props);
367
+ $[4] = props;
368
+ $[5] = formControl;
369
+ $[6] = innerProps;
370
+ $[7] = ref;
371
+ } else {
372
+ formControl = $[5];
373
+ innerProps = $[6];
374
+ ref = $[7];
375
+ }
376
+ const controlWithOptions = formControl.control;
377
+ let t2;
378
+ if ($[8] !== controlWithOptions._options?.disabled || $[9] !== fullIso || $[10] !== innerProps || $[11] !== props.error || $[12] !== props.isDisabled || $[13] !== ref || $[14] !== renderStaticInput) {
379
+ t2 = (t3) => {
380
+ const { field, fieldState: t4 } = t3;
381
+ const { error, isDirty } = t4;
382
+ return /* @__PURE__ */ jsx(DateTimePickerInner, {
383
+ ...innerProps,
384
+ ref: mergeRefs(ref, field.ref),
385
+ value: field.value,
386
+ onChange: field.onChange,
387
+ onBlur: field.onBlur,
388
+ isDirty,
389
+ isDisabled: field.disabled || props.isDisabled,
390
+ isFormControlDisabled: !!controlWithOptions._options?.disabled,
391
+ error: props.error ?? error?.message,
392
+ fullIso,
393
+ renderStaticInput
394
+ });
395
+ };
396
+ $[8] = controlWithOptions._options?.disabled;
397
+ $[9] = fullIso;
398
+ $[10] = innerProps;
399
+ $[11] = props.error;
400
+ $[12] = props.isDisabled;
401
+ $[13] = ref;
402
+ $[14] = renderStaticInput;
403
+ $[15] = t2;
404
+ } else t2 = $[15];
405
+ let t3;
406
+ if ($[16] !== formControl.control || $[17] !== formControl.name || $[18] !== t2) {
407
+ t3 = /* @__PURE__ */ jsx(Controller, {
408
+ control: formControl.control,
409
+ name: formControl.name,
410
+ render: t2
411
+ });
412
+ $[16] = formControl.control;
413
+ $[17] = formControl.name;
414
+ $[18] = t2;
415
+ $[19] = t3;
416
+ } else t3 = $[19];
417
+ return t3;
418
+ }
419
+ let t2;
420
+ if ($[20] !== fullIso || $[21] !== props || $[22] !== renderStaticInput) {
421
+ t2 = /* @__PURE__ */ jsx(DateTimePickerInner, {
422
+ ...props,
423
+ fullIso,
424
+ renderStaticInput
425
+ });
426
+ $[20] = fullIso;
427
+ $[21] = props;
428
+ $[22] = renderStaticInput;
429
+ $[23] = t2;
430
+ } else t2 = $[23];
431
+ return t2;
335
432
  };
433
+ function _temp(input) {
434
+ const container = input.getContainer?.() ?? input;
435
+ return container instanceof HTMLElement ? container.querySelector("input, button, [tabindex]:not([tabindex='-1'])") : null;
436
+ }
437
+ function _temp2(dateValue) {
438
+ if (dateValue === null) return null;
439
+ return DateTimeUtils.fromDateValueFieldsToUTCISO(dateValue);
440
+ }
441
+ function _temp3(isoString) {
442
+ if (isoString == null) return isoString;
443
+ return DateTimeUtils.fromUTCISOToCalendarDateTime(isoString, "UTC");
444
+ }
336
445
  //#endregion
337
446
  export { DateTimePicker };
@@ -14,6 +14,7 @@ interface TimePickerBaseProps extends FormFieldProps, InputVariantProps, Omit<Ar
14
14
  placeholder?: string;
15
15
  inputClassName?: string;
16
16
  onBlur?: (e: FocusEvent<HTMLInputElement>) => void;
17
+ fireBlurOnChange?: boolean;
17
18
  }
18
19
  export interface TimePickerProps extends Omit<TimePickerBaseProps, "value" | "onChange"> {
19
20
  value?: string | null;