@allxsmith/bestax-bulma 5.55.0 → 5.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bestax.css +1 -1
- package/dist/bestax.css.map +1 -1
- package/dist/esm/columns/Column.js +1 -0
- package/dist/esm/columns/Column.js.map +1 -1
- package/dist/esm/columns/Columns.js +1 -0
- package/dist/esm/columns/Columns.js.map +1 -1
- package/dist/esm/components/Avatar.js +1 -0
- package/dist/esm/components/Avatar.js.map +1 -1
- package/dist/esm/components/Avatars.js +1 -0
- package/dist/esm/components/Avatars.js.map +1 -1
- package/dist/esm/components/Badge.js +1 -0
- package/dist/esm/components/Badge.js.map +1 -1
- package/dist/esm/components/Breadcrumb.js +1 -0
- package/dist/esm/components/Breadcrumb.js.map +1 -1
- package/dist/esm/components/Card.js +1 -0
- package/dist/esm/components/Card.js.map +1 -1
- package/dist/esm/components/Carousel.js +1 -0
- package/dist/esm/components/Carousel.js.map +1 -1
- package/dist/esm/components/Collapse.js +1 -0
- package/dist/esm/components/Collapse.js.map +1 -1
- package/dist/esm/components/Collapses.js +1 -0
- package/dist/esm/components/Collapses.js.map +1 -1
- package/dist/esm/components/Command.js +1 -0
- package/dist/esm/components/Command.js.map +1 -1
- package/dist/esm/components/ContextMenu.js +1 -0
- package/dist/esm/components/ContextMenu.js.map +1 -1
- package/dist/esm/components/DataTable.js +1 -0
- package/dist/esm/components/DataTable.js.map +1 -1
- package/dist/esm/components/Dialog.js +1 -0
- package/dist/esm/components/Dialog.js.map +1 -1
- package/dist/esm/components/Dropdown.js +1 -0
- package/dist/esm/components/Dropdown.js.map +1 -1
- package/dist/esm/components/EmptyState.js +1 -0
- package/dist/esm/components/EmptyState.js.map +1 -1
- package/dist/esm/components/HoverCard.js +1 -0
- package/dist/esm/components/HoverCard.js.map +1 -1
- package/dist/esm/components/Loading.js +1 -0
- package/dist/esm/components/Loading.js.map +1 -1
- package/dist/esm/components/Menu.js +1 -0
- package/dist/esm/components/Menu.js.map +1 -1
- package/dist/esm/components/Message.js +1 -0
- package/dist/esm/components/Message.js.map +1 -1
- package/dist/esm/components/Modal.js +1 -0
- package/dist/esm/components/Modal.js.map +1 -1
- package/dist/esm/components/Navbar.js +1 -0
- package/dist/esm/components/Navbar.js.map +1 -1
- package/dist/esm/components/Pagination.js +1 -0
- package/dist/esm/components/Pagination.js.map +1 -1
- package/dist/esm/components/Panel.js +1 -0
- package/dist/esm/components/Panel.js.map +1 -1
- package/dist/esm/components/Popover.js +1 -0
- package/dist/esm/components/Popover.js.map +1 -1
- package/dist/esm/components/Reveal.js +1 -0
- package/dist/esm/components/Reveal.js.map +1 -1
- package/dist/esm/components/ScrollArea.js +1 -0
- package/dist/esm/components/ScrollArea.js.map +1 -1
- package/dist/esm/components/SegmentedControl.js +1 -0
- package/dist/esm/components/SegmentedControl.js.map +1 -1
- package/dist/esm/components/Sidebar.js +1 -0
- package/dist/esm/components/Sidebar.js.map +1 -1
- package/dist/esm/components/Steps.js +1 -0
- package/dist/esm/components/Steps.js.map +1 -1
- package/dist/esm/components/Tabs.js +1 -0
- package/dist/esm/components/Tabs.js.map +1 -1
- package/dist/esm/components/Timeline.js +1 -0
- package/dist/esm/components/Timeline.js.map +1 -1
- package/dist/esm/components/Toast.js +1 -0
- package/dist/esm/components/Toast.js.map +1 -1
- package/dist/esm/components/Tooltip.js +1 -0
- package/dist/esm/components/Tooltip.js.map +1 -1
- package/dist/esm/components/TreeView.js +1 -0
- package/dist/esm/components/TreeView.js.map +1 -1
- package/dist/esm/components/collapsesContext.js +1 -0
- package/dist/esm/components/collapsesContext.js.map +1 -1
- package/dist/esm/components/useDataTable.js +28 -0
- package/dist/esm/components/useDataTable.js.map +1 -1
- package/dist/esm/elements/Block.js +1 -0
- package/dist/esm/elements/Block.js.map +1 -1
- package/dist/esm/elements/Box.js +1 -0
- package/dist/esm/elements/Box.js.map +1 -1
- package/dist/esm/elements/Button.js +1 -0
- package/dist/esm/elements/Button.js.map +1 -1
- package/dist/esm/elements/Buttons.js +1 -0
- package/dist/esm/elements/Buttons.js.map +1 -1
- package/dist/esm/elements/Code.js +1 -0
- package/dist/esm/elements/Code.js.map +1 -1
- package/dist/esm/elements/ColorSwatch.js +1 -0
- package/dist/esm/elements/ColorSwatch.js.map +1 -1
- package/dist/esm/elements/Content.js +1 -0
- package/dist/esm/elements/Content.js.map +1 -1
- package/dist/esm/elements/Delete.js +1 -0
- package/dist/esm/elements/Delete.js.map +1 -1
- package/dist/esm/elements/DescriptionList.js +1 -0
- package/dist/esm/elements/DescriptionList.js.map +1 -1
- package/dist/esm/elements/Divider.js +1 -0
- package/dist/esm/elements/Divider.js.map +1 -1
- package/dist/esm/elements/Emphasis.js +1 -0
- package/dist/esm/elements/Emphasis.js.map +1 -1
- package/dist/esm/elements/Figure.js +1 -0
- package/dist/esm/elements/Figure.js.map +1 -1
- package/dist/esm/elements/Icon.js +1 -0
- package/dist/esm/elements/Icon.js.map +1 -1
- package/dist/esm/elements/IconText.js +1 -0
- package/dist/esm/elements/IconText.js.map +1 -1
- package/dist/esm/elements/Image.js +1 -0
- package/dist/esm/elements/Image.js.map +1 -1
- package/dist/esm/elements/Kbd.js +1 -0
- package/dist/esm/elements/Kbd.js.map +1 -1
- package/dist/esm/elements/Link.js +1 -0
- package/dist/esm/elements/Link.js.map +1 -1
- package/dist/esm/elements/LinkButton.js +1 -0
- package/dist/esm/elements/LinkButton.js.map +1 -1
- package/dist/esm/elements/ListItem.js +1 -0
- package/dist/esm/elements/ListItem.js.map +1 -1
- package/dist/esm/elements/Loader.js +1 -0
- package/dist/esm/elements/Loader.js.map +1 -1
- package/dist/esm/elements/Notification.js +1 -0
- package/dist/esm/elements/Notification.js.map +1 -1
- package/dist/esm/elements/OrderedList.js +1 -0
- package/dist/esm/elements/OrderedList.js.map +1 -1
- package/dist/esm/elements/Paragraph.js +1 -0
- package/dist/esm/elements/Paragraph.js.map +1 -1
- package/dist/esm/elements/Pre.js +1 -0
- package/dist/esm/elements/Pre.js.map +1 -1
- package/dist/esm/elements/Progress.js +1 -0
- package/dist/esm/elements/Progress.js.map +1 -1
- package/dist/esm/elements/RingProgress.js +1 -0
- package/dist/esm/elements/RingProgress.js.map +1 -1
- package/dist/esm/elements/Skeleton.js +1 -0
- package/dist/esm/elements/Skeleton.js.map +1 -1
- package/dist/esm/elements/Span.js +1 -0
- package/dist/esm/elements/Span.js.map +1 -1
- package/dist/esm/elements/Strong.js +1 -0
- package/dist/esm/elements/Strong.js.map +1 -1
- package/dist/esm/elements/SubTitle.js +1 -0
- package/dist/esm/elements/SubTitle.js.map +1 -1
- package/dist/esm/elements/Table.js +1 -0
- package/dist/esm/elements/Table.js.map +1 -1
- package/dist/esm/elements/Tag.js +1 -0
- package/dist/esm/elements/Tag.js.map +1 -1
- package/dist/esm/elements/Tags.js +1 -0
- package/dist/esm/elements/Tags.js.map +1 -1
- package/dist/esm/elements/Tbody.js +1 -0
- package/dist/esm/elements/Tbody.js.map +1 -1
- package/dist/esm/elements/Td.js +1 -0
- package/dist/esm/elements/Td.js.map +1 -1
- package/dist/esm/elements/Tfoot.js +1 -0
- package/dist/esm/elements/Tfoot.js.map +1 -1
- package/dist/esm/elements/Th.js +1 -0
- package/dist/esm/elements/Th.js.map +1 -1
- package/dist/esm/elements/Thead.js +1 -0
- package/dist/esm/elements/Thead.js.map +1 -1
- package/dist/esm/elements/Title.js +1 -0
- package/dist/esm/elements/Title.js.map +1 -1
- package/dist/esm/elements/ToggleButton.js +1 -0
- package/dist/esm/elements/ToggleButton.js.map +1 -1
- package/dist/esm/elements/Tr.js +1 -0
- package/dist/esm/elements/Tr.js.map +1 -1
- package/dist/esm/elements/UnorderedList.js +1 -0
- package/dist/esm/elements/UnorderedList.js.map +1 -1
- package/dist/esm/elements/iconProps.js +1 -0
- package/dist/esm/elements/iconProps.js.map +1 -1
- package/dist/esm/form/Autocomplete.js +1 -0
- package/dist/esm/form/Autocomplete.js.map +1 -1
- package/dist/esm/form/Checkbox.js +1 -0
- package/dist/esm/form/Checkbox.js.map +1 -1
- package/dist/esm/form/CheckboxCard.js +1 -0
- package/dist/esm/form/CheckboxCard.js.map +1 -1
- package/dist/esm/form/Checkboxes.js +1 -0
- package/dist/esm/form/Checkboxes.js.map +1 -1
- package/dist/esm/form/ColorInput.js +69 -0
- package/dist/esm/form/ColorInput.js.map +1 -0
- package/dist/esm/form/ColorInputBase.js +199 -0
- package/dist/esm/form/ColorInputBase.js.map +1 -0
- package/dist/esm/form/ColorPicker.js +5 -20
- package/dist/esm/form/ColorPicker.js.map +1 -1
- package/dist/esm/form/Combobox.js +1 -0
- package/dist/esm/form/Combobox.js.map +1 -1
- package/dist/esm/form/Control.js +1 -0
- package/dist/esm/form/Control.js.map +1 -1
- package/dist/esm/form/DateInput.js +1 -0
- package/dist/esm/form/DateInput.js.map +1 -1
- package/dist/esm/form/DateInputBase.js +1 -0
- package/dist/esm/form/DateInputBase.js.map +1 -1
- package/dist/esm/form/DateRangeInput.js +1 -0
- package/dist/esm/form/DateRangeInput.js.map +1 -1
- package/dist/esm/form/DateRangeInputBase.js +1 -0
- package/dist/esm/form/DateRangeInputBase.js.map +1 -1
- package/dist/esm/form/DateTimeInput.js +1 -0
- package/dist/esm/form/DateTimeInput.js.map +1 -1
- package/dist/esm/form/DateTimeInputBase.js +1 -0
- package/dist/esm/form/DateTimeInputBase.js.map +1 -1
- package/dist/esm/form/Dropzone.js +1 -0
- package/dist/esm/form/Dropzone.js.map +1 -1
- package/dist/esm/form/Field.js +1 -0
- package/dist/esm/form/Field.js.map +1 -1
- package/dist/esm/form/Fieldset.js +1 -0
- package/dist/esm/form/Fieldset.js.map +1 -1
- package/dist/esm/form/File.js +1 -0
- package/dist/esm/form/File.js.map +1 -1
- package/dist/esm/form/FormContext.js +1 -0
- package/dist/esm/form/FormContext.js.map +1 -1
- package/dist/esm/form/Input.js +1 -0
- package/dist/esm/form/Input.js.map +1 -1
- package/dist/esm/form/InputBase.js +1 -0
- package/dist/esm/form/InputBase.js.map +1 -1
- package/dist/esm/form/Numberinput.js +1 -0
- package/dist/esm/form/Numberinput.js.map +1 -1
- package/dist/esm/form/PinInput.js +1 -0
- package/dist/esm/form/PinInput.js.map +1 -1
- package/dist/esm/form/Radio.js +1 -0
- package/dist/esm/form/Radio.js.map +1 -1
- package/dist/esm/form/RadioCard.js +1 -0
- package/dist/esm/form/RadioCard.js.map +1 -1
- package/dist/esm/form/Radios.js +1 -0
- package/dist/esm/form/Radios.js.map +1 -1
- package/dist/esm/form/Rate.js +1 -0
- package/dist/esm/form/Rate.js.map +1 -1
- package/dist/esm/form/Select.js +1 -0
- package/dist/esm/form/Select.js.map +1 -1
- package/dist/esm/form/SelectBase.js +1 -0
- package/dist/esm/form/SelectBase.js.map +1 -1
- package/dist/esm/form/Slider.js +1 -0
- package/dist/esm/form/Slider.js.map +1 -1
- package/dist/esm/form/Switch.js +1 -0
- package/dist/esm/form/Switch.js.map +1 -1
- package/dist/esm/form/Taginput.js +1 -0
- package/dist/esm/form/Taginput.js.map +1 -1
- package/dist/esm/form/TextArea.js +1 -0
- package/dist/esm/form/TextArea.js.map +1 -1
- package/dist/esm/form/TextAreaBase.js +1 -0
- package/dist/esm/form/TextAreaBase.js.map +1 -1
- package/dist/esm/form/TimeInput.js +1 -0
- package/dist/esm/form/TimeInput.js.map +1 -1
- package/dist/esm/form/TimeInputBase.js +1 -0
- package/dist/esm/form/TimeInputBase.js.map +1 -1
- package/dist/esm/form/_colorInternals/EyeDropperButton.js +41 -0
- package/dist/esm/form/_colorInternals/EyeDropperButton.js.map +1 -0
- package/dist/esm/form/_colorInternals/pickerState.js +5 -4
- package/dist/esm/form/_colorInternals/pickerState.js.map +1 -1
- package/dist/esm/form/_pickerInternals/Calendar.js +1 -0
- package/dist/esm/form/_pickerInternals/Calendar.js.map +1 -1
- package/dist/esm/form/_pickerInternals/PickerPopover.js +1 -0
- package/dist/esm/form/_pickerInternals/PickerPopover.js.map +1 -1
- package/dist/esm/form/_pickerInternals/TimeWheels.js +1 -0
- package/dist/esm/form/_pickerInternals/TimeWheels.js.map +1 -1
- package/dist/esm/form/_pickerInternals/useLocaleDefaults.js +1 -0
- package/dist/esm/form/_pickerInternals/useLocaleDefaults.js.map +1 -1
- package/dist/esm/form/_pickerInternals/useNativeMobilePicker.js +1 -0
- package/dist/esm/form/_pickerInternals/useNativeMobilePicker.js.map +1 -1
- package/dist/esm/form/_pickerInternals/useSegmentedEntry.js +1 -0
- package/dist/esm/form/_pickerInternals/useSegmentedEntry.js.map +1 -1
- package/dist/esm/form/controlLoading.js +1 -0
- package/dist/esm/form/controlLoading.js.map +1 -1
- package/dist/esm/form/groupFieldset.js +1 -0
- package/dist/esm/form/groupFieldset.js.map +1 -1
- package/dist/esm/form/useAutoLabelId.js +1 -0
- package/dist/esm/form/useAutoLabelId.js.map +1 -1
- package/dist/esm/grid/Cell.js +1 -0
- package/dist/esm/grid/Cell.js.map +1 -1
- package/dist/esm/grid/Grid.js +1 -0
- package/dist/esm/grid/Grid.js.map +1 -1
- package/dist/esm/helpers/ClientOnly.js +1 -0
- package/dist/esm/helpers/ClientOnly.js.map +1 -1
- package/dist/esm/helpers/Config.js +1 -0
- package/dist/esm/helpers/Config.js.map +1 -1
- package/dist/esm/helpers/LocaleProvider.js +1 -0
- package/dist/esm/helpers/LocaleProvider.js.map +1 -1
- package/dist/esm/helpers/Theme.js +1 -0
- package/dist/esm/helpers/Theme.js.map +1 -1
- package/dist/esm/helpers/flattenChildren.js +1 -0
- package/dist/esm/helpers/flattenChildren.js.map +1 -1
- package/dist/esm/helpers/inertProps.js +1 -0
- package/dist/esm/helpers/inertProps.js.map +1 -1
- package/dist/esm/helpers/localeFormat.js +1 -0
- package/dist/esm/helpers/localeFormat.js.map +1 -1
- package/dist/esm/helpers/overlayStack.js +1 -0
- package/dist/esm/helpers/overlayStack.js.map +1 -1
- package/dist/esm/helpers/portal.js +1 -0
- package/dist/esm/helpers/portal.js.map +1 -1
- package/dist/esm/helpers/scrollLock.js +1 -0
- package/dist/esm/helpers/scrollLock.js.map +1 -1
- package/dist/esm/helpers/statusRegion.js +1 -0
- package/dist/esm/helpers/statusRegion.js.map +1 -1
- package/dist/esm/helpers/typeahead.js +1 -0
- package/dist/esm/helpers/typeahead.js.map +1 -1
- package/dist/esm/helpers/useAnchoredPosition.js +1 -0
- package/dist/esm/helpers/useAnchoredPosition.js.map +1 -1
- package/dist/esm/helpers/useBulmaClasses.js +1 -0
- package/dist/esm/helpers/useBulmaClasses.js.map +1 -1
- package/dist/esm/helpers/useClientLayoutEffect.js +1 -0
- package/dist/esm/helpers/useClientLayoutEffect.js.map +1 -1
- package/dist/esm/helpers/useColorClasses.js +1 -0
- package/dist/esm/helpers/useColorClasses.js.map +1 -1
- package/dist/esm/helpers/useComboboxEngine.js +1 -0
- package/dist/esm/helpers/useComboboxEngine.js.map +1 -1
- package/dist/esm/helpers/useContextMenuTrigger.js +1 -0
- package/dist/esm/helpers/useContextMenuTrigger.js.map +1 -1
- package/dist/esm/helpers/useFlexboxClasses.js +1 -0
- package/dist/esm/helpers/useFlexboxClasses.js.map +1 -1
- package/dist/esm/helpers/useFocusTrap.js +1 -0
- package/dist/esm/helpers/useFocusTrap.js.map +1 -1
- package/dist/esm/helpers/useHoverOpen.js +1 -0
- package/dist/esm/helpers/useHoverOpen.js.map +1 -1
- package/dist/esm/helpers/useInertSiblings.js +1 -0
- package/dist/esm/helpers/useInertSiblings.js.map +1 -1
- package/dist/esm/helpers/useIsHydrated.js +1 -0
- package/dist/esm/helpers/useIsHydrated.js.map +1 -1
- package/dist/esm/helpers/useLatestRef.js +1 -0
- package/dist/esm/helpers/useLatestRef.js.map +1 -1
- package/dist/esm/helpers/useMenuKeys.js +1 -0
- package/dist/esm/helpers/useMenuKeys.js.map +1 -1
- package/dist/esm/helpers/useOtherClasses.js +1 -0
- package/dist/esm/helpers/useOtherClasses.js.map +1 -1
- package/dist/esm/helpers/useSpacingClasses.js +1 -0
- package/dist/esm/helpers/useSpacingClasses.js.map +1 -1
- package/dist/esm/helpers/useTreeView.js +1 -0
- package/dist/esm/helpers/useTreeView.js.map +1 -1
- package/dist/esm/helpers/useTypographyClasses.js +1 -0
- package/dist/esm/helpers/useTypographyClasses.js.map +1 -1
- package/dist/esm/helpers/useVisibilityClasses.js +1 -0
- package/dist/esm/helpers/useVisibilityClasses.js.map +1 -1
- package/dist/esm/layout/Container.js +1 -0
- package/dist/esm/layout/Container.js.map +1 -1
- package/dist/esm/layout/Footer.js +1 -0
- package/dist/esm/layout/Footer.js.map +1 -1
- package/dist/esm/layout/Hero.js +1 -0
- package/dist/esm/layout/Hero.js.map +1 -1
- package/dist/esm/layout/Level.js +1 -0
- package/dist/esm/layout/Level.js.map +1 -1
- package/dist/esm/layout/Media.js +1 -0
- package/dist/esm/layout/Media.js.map +1 -1
- package/dist/esm/layout/Section.js +1 -0
- package/dist/esm/layout/Section.js.map +1 -1
- package/dist/esm/layout/Splitter.js +1 -0
- package/dist/esm/layout/Splitter.js.map +1 -1
- package/dist/extras.css +1 -1
- package/dist/extras.css.map +1 -1
- package/dist/index.cjs +300 -22
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +2 -0
- package/dist/index.esm.js.map +1 -1
- package/dist/types/components/DataTable.d.ts +1 -1
- package/dist/types/components/useDataTable.d.ts +36 -0
- package/dist/types/form/ColorInput.d.ts +76 -0
- package/dist/types/form/ColorInputBase.d.ts +108 -0
- package/dist/types/form/ColorPicker.d.ts +5 -0
- package/dist/types/form/_colorInternals/EyeDropperButton.d.ts +8 -0
- package/dist/types/form/_colorInternals/pickerState.d.ts +7 -1
- package/dist/types/index.d.ts +4 -0
- package/dist/types-cjs/components/DataTable.d.ts +1 -1
- package/dist/types-cjs/components/useDataTable.d.ts +36 -0
- package/dist/types-cjs/form/ColorInput.d.ts +76 -0
- package/dist/types-cjs/form/ColorInputBase.d.ts +108 -0
- package/dist/types-cjs/form/ColorPicker.d.ts +5 -0
- package/dist/types-cjs/form/_colorInternals/EyeDropperButton.d.ts +8 -0
- package/dist/types-cjs/form/_colorInternals/pickerState.d.ts +7 -1
- package/dist/types-cjs/index.d.ts +4 -0
- package/dist/versions/bestax-no-dark-mode.css +1 -1
- package/dist/versions/bestax-no-dark-mode.css.map +1 -1
- package/dist/versions/bestax-no-helpers-prefixed.css +1 -1
- package/dist/versions/bestax-no-helpers-prefixed.css.map +1 -1
- package/dist/versions/bestax-no-helpers.css +1 -1
- package/dist/versions/bestax-no-helpers.css.map +1 -1
- package/dist/versions/bestax-prefixed.css +1 -1
- package/dist/versions/bestax-prefixed.css.map +1 -1
- package/package.json +2 -1
- package/src/scss/form/_colorinput.scss +109 -0
- package/src/scss/form/_index.scss +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimeInputBase.js","sources":["../../../src/form/DateTimeInputBase.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { classNames, usePrefixedClassNames } from '../helpers/classNames';\nimport { useBulmaClasses, BulmaClassesProps } from '../helpers/useBulmaClasses';\nimport {\n PickerPosition,\n HourFormat,\n DayOfWeek,\n PickerLabels,\n mergeLabels,\n} from './_pickerInternals/pickerTypes';\nimport {\n formatDateTime,\n formatTime,\n hourCycleFromFormat,\n parseDate,\n DateFormatOption,\n DEFAULT_DATETIME_FORMAT,\n} from './_pickerInternals/formatters';\nimport {\n isWithin,\n setTimeOfDay,\n clampDate,\n FIRST_YEAR,\n floorMin,\n isSameDay,\n makeDate,\n} from './_pickerInternals/dateUtils';\nimport { Calendar, CALENDAR_FOCUSED_CELL } from './_pickerInternals/Calendar';\nimport { TimeWheels } from './_pickerInternals/TimeWheels';\nimport { PickerPopover } from './_pickerInternals/PickerPopover';\nimport { useNativeMobilePicker } from './_pickerInternals/useNativeMobilePicker';\nimport { useSegmentedEntry } from './_pickerInternals/useSegmentedEntry';\nimport {\n hasOwnDayNames,\n usePickerFirstDayOfWeek,\n usePickerLocale,\n usePickerLocaleScope,\n} from './_pickerInternals/useLocaleDefaults';\nimport { useControlLoading } from './controlLoading';\nimport { useFieldLabelTarget, useFieldsetDisabled } from './FormContext';\nimport { Icon } from '../elements/Icon';\nimport { getActiveElementInTree } from '../helpers/shadowDom';\nimport { inertProps } from '../helpers/inertProps';\n\n// The year is padded to four digits, as `datetime-local` requires. HTML has\n// no such shape for a year before 1, so a date then is empty, as that input\n// would make it.\nconst toIsoDateTime = (d: Date, withSeconds: boolean): string => {\n if (d.getFullYear() < FIRST_YEAR) return '';\n const yyyy = String(d.getFullYear()).padStart(4, '0');\n const mo = String(d.getMonth() + 1).padStart(2, '0');\n const dd = String(d.getDate()).padStart(2, '0');\n const hh = String(d.getHours()).padStart(2, '0');\n const mm = String(d.getMinutes()).padStart(2, '0');\n const ss = String(d.getSeconds()).padStart(2, '0');\n return withSeconds\n ? `${yyyy}-${mo}-${dd}T${hh}:${mm}:${ss}`\n : `${yyyy}-${mo}-${dd}T${hh}:${mm}`;\n};\n\nconst fromIsoDateTime = (s: string): Date | null => {\n // The HTML datetime-local value may carry fractional seconds (the spec\n // allows them and some engines normalize to `:ss.sss`); accept and drop.\n // Its year is four or more digits, as `toIsoDateTime` writes one past 9999.\n const m =\n /^(\\d{4,})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.\\d{1,3})?)?$/.exec(\n s\n );\n if (!m) return null;\n const d = makeDate(Number(m[1]), Number(m[2]) - 1, Number(m[3]));\n d.setHours(Number(m[4]), Number(m[5]), m[6] ? Number(m[6]) : 0, 0);\n return d;\n};\n\n/**\n * Props for the raw DateTimeInput base. Use the higher-level `DateTimeInput`\n * for Field/Control composition. Combines the prop set of `DateInputBaseProps`\n * and `TimeInputBaseProps`.\n */\nexport interface DateTimeInputBaseProps\n extends\n Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n | 'value'\n | 'defaultValue'\n | 'onChange'\n | 'size'\n | 'color'\n | 'min'\n | 'max'\n | 'type'\n | 'popover'\n >,\n Omit<BulmaClassesProps, 'color'> {\n /** Controlled selected date-time. */\n value?: Date | null;\n /** Initial value for uncontrolled usage. */\n defaultValue?: Date | null;\n /**\n * Fired when either the date or time portion changes. Picking a day keeps\n * the value's whole time of day, down to seconds and milliseconds the field\n * doesn't show, and `min` and `max` judge the picked day at that time. An\n * empty field's day is picked at midnight.\n */\n onChange?: (d: Date | null) => void;\n /** Fired when the popover opens. */\n onOpen?: () => void;\n /** Fired when the popover closes. */\n onClose?: () => void;\n /**\n * Lower bound for the combined date-time. A `min` before year 1 is raised\n * to midnight on 1 January of year 1, where the range starts without one\n * too: HTML's datetime-local input holds no earlier year, so the calendar,\n * the time wheels and typing stop there.\n */\n min?: Date;\n /** Upper bound for the combined date-time. */\n max?: Date;\n /** Disable the input. */\n disabled?: boolean;\n /** Read-only input. */\n readOnly?: boolean;\n /** Placeholder text. */\n placeholder?: string;\n /**\n * Token format string or `Intl.DateTimeFormat` options. Default `'YYYY-MM-DD HH:mm'`.\n * @defaultValue 'YYYY-MM-DD HH:mm'\n */\n format?: DateFormatOption;\n /**\n * Custom parser. Enter and leaving the field call it only if the user\n * changed the text, so focus passing through commits nothing and the value\n * keeps what the format leaves out, such as seconds.\n */\n parse?: (s: string) => Date | null;\n /**\n * BCP-47 locale tag for day/month names and Intl formatting. Unset, it is\n * the `locale` of a `LocaleProvider` around the picker, and with neither,\n * `Intl` uses the runtime's own locale. On a server render that is the\n * server's, so an `inline` calendar rendered there names its days in the\n * server's language and the browser's own render names them in the\n * browser's: give it a locale, here or through a `LocaleProvider`, where\n * the two can differ.\n */\n locale?: string;\n /** Render the panel inline (no popover). */\n inline?: boolean;\n /** Use `<input type=\"datetime-local\">` on coarse-pointer devices. */\n mobileNative?: boolean | 'auto';\n /** Allow segmented keyboard typing (type the date-time directly across all segments). `false` makes the field picker-only. */\n editable?: boolean;\n /** Whether the calendar + time popover exists. `false` makes the field input-only (segmented typing with no popover). Default `true`. */\n popover?: boolean;\n /**\n * Open the popover on focus. Default `true`. Focus that a closing popover\n * hands back to the input leaves it closed. Dismissing it commits nothing:\n * an empty field stays empty, and leaving afterwards commits only what was\n * typed since. With it off, the launcher or Alt+ArrowDown opens it.\n */\n openOnFocus?: boolean;\n /** Off by default — users typically tweak both halves before committing. */\n closeOnSelect?: boolean;\n /** Popover anchor position. */\n position?: PickerPosition;\n /**\n * Render the popover through a portal, into the `portalContainer` a\n * `ConfigProvider` sets, `document.body` by default.\n */\n appendToBody?: boolean;\n /**\n * Bulma color modifier for the input, also carried by the calendar and the\n * time wheels, where it colors the selected date and the selection band.\n * Today's date and the calendar's keyboard focus ring take the color's\n * `-on-scheme` variant, which Bulma adjusts to contrast with the background,\n * so pale colors stay readable. A focused wheel's ring is\n * drawn inside the band in the color's `-invert`, like the selected value,\n * so it shows on the fill. Unset, they use their\n * `--bulma-dateinput-*` and `--bulma-timeinput-wheel-*` variables, which\n * follow `primary` by default. The footer's time pill and Done button do not\n * follow `color`.\n */\n color?: 'primary' | 'link' | 'info' | 'success' | 'warning' | 'danger';\n /** Size variant. */\n size?: 'small' | 'medium' | 'large';\n /** Rounded input corners. */\n isRounded?: boolean;\n // date subset\n /** Disable specific dates. Blocked dates are also rejected during manual typing (the predicate receives the full candidate date-time — prefer day-based checks). */\n shouldDisableDate?: (d: Date) => boolean;\n /** Convenience array of disabled dates, matched by calendar day; also rejected by manual typing. */\n unselectableDates?: Date[];\n /**\n * Day the week starts on (0 = Sunday). Unset inside a `LocaleProvider`,\n * it is the first day of the week in the picker's locale, its own `locale`\n * or else the provider's, such as Monday for `\"de\"`. Elsewhere, with no\n * locale from either, or with seven `dayNames` of your own, it is Sunday:\n * set it with `dayNames` to start the week on another day.\n * @defaultValue 0\n */\n firstDayOfWeek?: DayOfWeek;\n /**\n * Override the 7 day-name labels (in calendar order, post-rotation). They\n * are shown exactly as given, from the first column, so they have to start\n * on the day the week does. With them, an unset `firstDayOfWeek` stays\n * Sunday even inside a `LocaleProvider`, so names written Sunday first keep\n * matching their columns; to start on the locale's day, set\n * `firstDayOfWeek` too and list the names from that day.\n */\n dayNames?: string[];\n /** Override the 12 month-name labels. */\n monthNames?: string[];\n /** Show dimmed dates from adjacent months. */\n nearbyMonthDays?: boolean;\n // time subset\n /** Time format. */\n hourFormat?: HourFormat;\n /** Show seconds column. Note: iOS Safari's native datetime-local picker UI does not include a seconds wheel; pass `mobileNative={false}` if you need one on iOS. */\n enableSeconds?: boolean;\n /** Hour step. */\n incrementHours?: number;\n /** Step between minute-wheel values (`1` = every minute, iOS-style). */\n incrementMinutes?: number;\n /** Step between second-wheel values (only with `enableSeconds`). */\n incrementSeconds?: number;\n /** Block specific times. Blocked times are also rejected during manual typing. */\n unselectableTimes?: (d: Date) => boolean;\n /** Decorative left icon glyph for the wrapping `Control` (shown by default). Set `''` to hide. */\n iconLeftName?: string;\n /**\n * Show a clickable launcher button on the right that toggles the popover.\n * Hidden by default while a `Control` it sits in shows its `isLoading`\n * spinner, which shares that right edge.\n * @defaultValue true\n */\n triggerIcon?: boolean;\n /** Glyph for the right launcher button. */\n triggerIconName?: string;\n /** Play a short audible tick on each time-wheel crossing. Default `false`. */\n audioTick?: boolean;\n /** Auto-route tactile feedback per wheel tick (vibrate on Android, audio thunk on iOS). Default `false`. */\n haptics?: boolean;\n /**\n * Optional translatable string overrides. In a 12-hour picker, `ampm`\n * names the AM/PM column, `'AM/PM'` by default.\n */\n labels?: PickerLabels;\n}\n\n/**\n * Raw DateTimeInput — combined input + calendar + time spinner without\n * Field/Control wrapping. Use `DateTimeInput` for the convenience wrapper.\n *\n * @function\n * @param {DateTimeInputBaseProps} props\n * @returns {JSX.Element}\n */\nexport const DateTimeInputBase = forwardRef<\n HTMLInputElement,\n DateTimeInputBaseProps\n>((props, ref) => {\n const {\n value: controlledValue,\n defaultValue,\n onChange,\n onOpen,\n onClose,\n min,\n max,\n disabled: disabledProp,\n readOnly,\n placeholder,\n format,\n parse,\n locale: localeProp,\n inline = false,\n mobileNative = 'auto',\n editable = true,\n popover = true,\n openOnFocus = true,\n closeOnSelect = false,\n position = 'bottom-left',\n appendToBody = false,\n color,\n size,\n isRounded,\n shouldDisableDate,\n unselectableDates,\n firstDayOfWeek: firstDayOfWeekProp,\n dayNames,\n monthNames,\n nearbyMonthDays = true,\n hourFormat = '24',\n enableSeconds = false,\n incrementHours = 1,\n // Step between visible wheel values; 1 gives the iOS-style every-minute wheel.\n incrementMinutes = 1,\n incrementSeconds = 1,\n unselectableTimes,\n className,\n name,\n form,\n required,\n id: idProp,\n onFocus,\n onClick,\n onKeyDown,\n onBlur,\n iconLeftName: _iconLeftName,\n triggerIcon: triggerIconProp,\n triggerIconName = 'chevron-down',\n audioTick = false,\n haptics = false,\n labels,\n ...rest\n } = props;\n // A LocaleProvider around the picker sets its default locale and, through\n // that locale, the day its week starts on.\n const locale = usePickerLocale(localeProp);\n // Its own language and direction, which its root and a portaled panel\n // carry inside a provider.\n const localeScope = usePickerLocaleScope(localeProp, props.dir);\n const firstDayOfWeek = usePickerFirstDayOfWeek(\n firstDayOfWeekProp,\n locale,\n hasOwnDayNames(dayNames)\n );\n const disabled = useFieldsetDisabled(disabledProp);\n // Inside a labeled Field the input takes the id the label points at\n // when the caller set none, as InputBase does, and the popover's ids\n // follow it. Inline there is no input to name, so nothing takes the\n // Field's id or builds on it.\n const id = useFieldLabelTarget(idProp, !inline);\n // The launcher gives way to the loading spinner of a Control this sits in.\n const controlLoading = useControlLoading();\n const triggerIcon = triggerIconProp ?? !controlLoading;\n const t = mergeLabels(labels);\n\n // Platform-appropriate feedback routing for the time wheel: on iOS (no\n // navigator.vibrate) the audio thunk fills in; on Android the real haptic\n // fires and no audio is layered on. `audioTick` always wins.\n const hasVibrate =\n typeof navigator !== 'undefined' && typeof navigator.vibrate === 'function';\n const effectiveAudioTick = audioTick || (haptics && !hasVibrate);\n\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = useState<Date | null>(\n defaultValue ?? null\n );\n const value = isControlled ? (controlledValue ?? null) : internalValue;\n\n // Nothing before year 1 is in range, as in HTML's date inputs.\n const lowerBound = useMemo(() => floorMin(min), [min]);\n\n const initialFocused = useMemo(\n () => clampDate(value ?? new Date(), lowerBound, max),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n const [focusedDate, setFocusedDate] = useState<Date>(initialFocused);\n // Re-clamp focusedDate when min/max change so the focused cell stays valid.\n useEffect(() => {\n setFocusedDate(prev => clampDate(prev, lowerBound, max));\n }, [lowerBound, max]);\n\n const defaultFormat: DateFormatOption =\n format ??\n (hourFormat === '12'\n ? enableSeconds\n ? 'YYYY-MM-DD hh:mm:ss A'\n : 'YYYY-MM-DD hh:mm A'\n : enableSeconds\n ? 'YYYY-MM-DD HH:mm:ss'\n : DEFAULT_DATETIME_FORMAT);\n\n // The displayed format is the source of truth for the hour cycle: an explicit\n // 12-hour `format` must drive a 12-hour wheel + pill even when `hourFormat`\n // was left at its default. Fall back to the raw prop only when the cycle\n // can't be read from the format (an Intl-options object, or no hour token).\n const effectiveHourFormat = hourCycleFromFormat(defaultFormat) ?? hourFormat;\n\n const [open, setOpenState] = useState(false);\n // The time wheels are collapsed by default (iOS-style); the user reveals\n // them by clicking the time value in the footer.\n const [timeOpen, setTimeOpen] = useState(false);\n const [text, setText] = useState<string>(\n value ? formatDateTime(value, defaultFormat, locale) : ''\n );\n\n const inputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n // Snapshot of the value when the popover opens, so Reset can revert the\n // edits made in this session (reverting to empty if it opened empty).\n const valueAtOpenRef = useRef<Date | null>(null);\n const reactId = useId();\n const popoverId = id ? `${id}-popover` : `picker-${reactId}`;\n const timeWheelsId = `${popoverId}-time`;\n\n const { bulmaHelperClasses, rest: cleanRest } = useBulmaClasses(rest);\n\n const { shouldUseNative, isSmallViewport } = useNativeMobilePicker({\n force: mobileNative === 'auto' ? undefined : mobileNative,\n });\n const useNative = !inline && shouldUseNative;\n const wheelItemHeight = isSmallViewport ? 40 : 32;\n\n // Time-only format for the footer's \"Time 5:07 PM\" display.\n const timeDisplayFormat =\n effectiveHourFormat === '12'\n ? enableSeconds\n ? 'h:mm:ss A'\n : 'h:mm A'\n : enableSeconds\n ? 'HH:mm:ss'\n : 'HH:mm';\n\n const inputClass = usePrefixedClassNames('input', {\n [`is-${color}`]: !!color,\n [`is-${size}`]: !!size,\n 'is-rounded': isRounded,\n });\n const containerClass = usePrefixedClassNames('datetimeinput-container');\n const triggerClass = usePrefixedClassNames('datetimeinput-trigger');\n const panelClass = usePrefixedClassNames('datetimeinput');\n const calendarWrapClass = usePrefixedClassNames(\n 'datetimeinput-calendar-wrap'\n );\n const timeOverlayClass = usePrefixedClassNames('datetimeinput-time-overlay');\n const timeCardClass = usePrefixedClassNames('datetimeinput-time-card');\n const footerClass = usePrefixedClassNames('datetimeinput-footer');\n const footerTimeClass = usePrefixedClassNames('datetimeinput-footer-time');\n const footerActionsClass = usePrefixedClassNames(\n 'datetimeinput-footer-actions'\n );\n const footerResetClass = usePrefixedClassNames('datetimeinput-footer-reset');\n const footerDoneClass = usePrefixedClassNames('datetimeinput-footer-done');\n const footerTimePillClass = usePrefixedClassNames(\n 'datetimeinput-footer-time-pill'\n );\n\n // What the latest request asked for, so a second request in the same event\n // sees it before React renders. The callbacks fire here rather than in a\n // state updater, which StrictMode calls twice, and after the state is set,\n // so a request a callback makes is the one that lands last.\n const requestedOpenRef = useRef(false);\n const setOpen = useCallback(\n (next: boolean) => {\n if (requestedOpenRef.current === next) return;\n requestedOpenRef.current = next;\n setOpenState(next);\n if (next) {\n valueAtOpenRef.current = value;\n onOpen?.();\n } else {\n onClose?.();\n }\n },\n [onOpen, onClose, value]\n );\n\n useEffect(() => {\n setText(value ? formatDateTime(value, defaultFormat, locale) : '');\n }, [value, defaultFormat, locale]);\n\n // Collapse the time wheels whenever the popover closes.\n useEffect(() => {\n if (!open) setTimeOpen(false);\n }, [open]);\n\n // The footer's Time button opens the wheels, and the hours wheel takes\n // focus so the keys turn it straight away. The calendar they cover is\n // inert meanwhile, so no tab stop, pointer or screen reader reaches a day\n // behind them. Closing the wheels hands focus back to the button: focus\n // in them would fall to the page as they unmount, and a pointer press\n // outside them has already dropped it on the panel or the page. Focus the\n // keys moved on to the footer, such as Reset, stays there.\n const panelRef = useRef<HTMLDivElement>(null);\n const timeButtonRef = useRef<HTMLButtonElement>(null);\n const timeOverlayRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (!timeOpen) return;\n timeOverlayRef.current\n ?.querySelector<HTMLElement>('[role=\"spinbutton\"]')\n ?.focus();\n }, [timeOpen]);\n const closeTime = useCallback(() => {\n const panel = panelRef.current;\n const active = getActiveElementInTree(panel);\n const movedOn =\n !!panel?.contains(active) && !timeOverlayRef.current?.contains(active);\n if (!movedOn) timeButtonRef.current?.focus();\n setTimeOpen(false);\n }, []);\n\n const commitValue = useCallback(\n (next: Date | null) => {\n if (!isControlled) setInternalValue(next);\n // Keep the calendar's focused cell tracking typed / parsed values.\n if (next) setFocusedDate(next);\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n // A picked day takes the value's whole time of day, seconds and all, or\n // midnight in an empty field. The day handed over by the keyboard is the\n // calendar's focused date, which can carry the time of the clock it\n // started from, so none of its time is kept.\n const handleDateSelect = useCallback(\n (d: Date) => {\n const merged = setTimeOfDay(d, {\n hours: value?.getHours() ?? 0,\n minutes: value?.getMinutes() ?? 0,\n seconds: value?.getSeconds() ?? 0,\n milliseconds: value?.getMilliseconds() ?? 0,\n });\n if (!isWithin(merged, lowerBound, max)) return;\n commitValue(merged);\n setFocusedDate(d);\n },\n [value, lowerBound, max, commitValue]\n );\n\n // The wheels set the value's time. An empty field starts from the focused\n // day, at the whole minute or second the wheels show.\n const handleTimeChange = useCallback(\n (parts: { hours: number; minutes: number; seconds?: number }) => {\n const next = value\n ? setTimeOfDay(value, parts)\n : setTimeOfDay(focusedDate, {\n ...parts,\n seconds: parts.seconds ?? 0,\n milliseconds: 0,\n });\n if (!isWithin(next, lowerBound, max)) return;\n commitValue(next);\n },\n [value, focusedDate, lowerBound, max, commitValue]\n );\n\n const tryParse = useCallback(\n (s: string): Date | null => {\n const trimmed = s.trim();\n if (!trimmed) return null;\n if (parse) return parse(trimmed);\n const fmt = typeof defaultFormat === 'string' ? defaultFormat : undefined;\n return parseDate(trimmed, fmt ?? DEFAULT_DATETIME_FORMAT, locale);\n },\n [parse, defaultFormat, locale]\n );\n\n // The Date the user edits when starting without a current value: now, at\n // the whole minute, or the whole second with `enableSeconds`.\n const makeBaseDate = useCallback(\n (): Date =>\n setTimeOfDay(new Date(), {\n seconds: enableSeconds ? undefined : 0,\n milliseconds: 0,\n }),\n [enableSeconds]\n );\n\n const inputReadOnlyAttr = !!readOnly || !editable;\n const canOpen = !!popover && !disabled && !readOnly;\n\n // Blocking predicate for manual entry, combining the calendar's\n // disabled-day logic with the wheels' unselectable-times predicate. The\n // candidate passed in carries the full date-time, so date predicates\n // should use day-based checks.\n const isBlocked = useMemo(() => {\n if (!shouldDisableDate && !unselectableDates?.length && !unselectableTimes)\n return undefined;\n return (d: Date) =>\n !!shouldDisableDate?.(d) ||\n !!unselectableDates?.some(u => isSameDay(u, d)) ||\n !!unselectableTimes?.(d);\n }, [shouldDisableDate, unselectableDates, unselectableTimes]);\n\n const { inputHandlers } = useSegmentedEntry({\n format: defaultFormat,\n value,\n commitValue,\n formatFn: formatDateTime,\n tryParse,\n text,\n setText,\n makeBaseDate,\n locale,\n min: lowerBound,\n max,\n isBlocked,\n disabled,\n readOnly,\n editable,\n popover,\n openOnFocus,\n closeOnSelect,\n isOpen: open,\n setOpen,\n inputRef,\n containerRef,\n onFocus,\n onClick,\n onKeyDown,\n onBlur,\n });\n\n const combinedRef = useCallback(\n (node: HTMLInputElement | null) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current =\n node;\n if (typeof ref === 'function') ref(node);\n else if (ref)\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n },\n [ref]\n );\n\n if (useNative) {\n const nativeStep = enableSeconds ? incrementSeconds : incrementMinutes * 60;\n return (\n <input\n {...localeScope.rootAttrs}\n {...cleanRest}\n ref={combinedRef}\n type=\"datetime-local\"\n step={nativeStep}\n className={classNames(inputClass, bulmaHelperClasses, className)}\n value={value ? toIsoDateTime(value, enableSeconds) : ''}\n onChange={e => {\n const parsed = e.target.value\n ? fromIsoDateTime(e.target.value)\n : null;\n commitValue(parsed);\n }}\n min={min ? toIsoDateTime(lowerBound, enableSeconds) : undefined}\n max={max ? toIsoDateTime(max, enableSeconds) : undefined}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n name={name}\n form={form}\n required={required}\n id={id}\n />\n );\n }\n\n const spinnerValue = {\n hours: value?.getHours() ?? 0,\n minutes: value?.getMinutes() ?? 0,\n seconds: enableSeconds ? (value?.getSeconds() ?? 0) : undefined,\n };\n\n const panel = (\n <div\n ref={panelRef}\n className={panelClass}\n onKeyDown={e => {\n // First Escape collapses the floating time wheels; the popover's own\n // Escape handler (which closes the whole panel) only sees the second.\n if (timeOpen && e.key === 'Escape') {\n e.stopPropagation();\n closeTime();\n }\n }}\n >\n <div className={calendarWrapClass}>\n <div {...inertProps(timeOpen)}>\n <Calendar\n value={value}\n focusedDate={focusedDate}\n onSelect={handleDateSelect}\n onFocusedDateChange={setFocusedDate}\n min={min}\n max={max}\n shouldDisableDate={shouldDisableDate}\n unselectableDates={unselectableDates}\n firstDayOfWeek={firstDayOfWeek}\n locale={locale}\n dayNames={dayNames}\n monthNames={monthNames}\n nearbyMonthDays={nearbyMonthDays}\n color={color}\n size={size}\n id={`${popoverId}-cal`}\n autoFocusCell={open}\n labels={labels}\n />\n </div>\n {timeOpen && (\n <div\n ref={timeOverlayRef}\n className={timeOverlayClass}\n onClick={e => {\n // Tap outside the wheel card (on the covered calendar area)\n // collapses the wheels without selecting a date, matching the\n // native behavior.\n if (e.target === e.currentTarget) closeTime();\n }}\n >\n <div className={timeCardClass}>\n <TimeWheels\n value={spinnerValue}\n onChange={handleTimeChange}\n hourFormat={effectiveHourFormat}\n enableSeconds={enableSeconds}\n incrementHours={incrementHours}\n incrementMinutes={incrementMinutes}\n incrementSeconds={incrementSeconds}\n unselectableTimes={unselectableTimes}\n color={color}\n size={size}\n disabled={disabled}\n id={timeWheelsId}\n labels={labels}\n itemHeight={wheelItemHeight}\n audioTick={effectiveAudioTick}\n // Enter on a wheel commits the time, which the wheels already\n // did live, and closes: the popover, or inline, where there\n // is no popover, the wheels, as Escape does.\n onCommit={() => (inline ? closeTime() : setOpen(false))}\n />\n </div>\n </div>\n )}\n </div>\n <div className={footerClass}>\n <button\n ref={timeButtonRef}\n type=\"button\"\n className={footerTimeClass}\n onClick={() => (timeOpen ? closeTime() : setTimeOpen(true))}\n aria-expanded={timeOpen}\n // The wheels exist only while open, so only then is there an\n // element for the button to name.\n aria-controls={timeOpen ? timeWheelsId : undefined}\n disabled={disabled}\n >\n <span>{t.time}</span>\n <span className={footerTimePillClass}>\n {value ? formatTime(value, timeDisplayFormat, locale) : '—'}\n </span>\n </button>\n <div className={footerActionsClass}>\n <button\n type=\"button\"\n className={footerResetClass}\n onClick={() => commitValue(valueAtOpenRef.current)}\n >\n {t.reset}\n </button>\n <button\n type=\"button\"\n className={footerDoneClass}\n aria-label={t.done}\n onClick={() => setOpen(false)}\n >\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" aria-hidden=\"true\">\n <path\n d=\"M5 11l4 4 8-8\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n </div>\n </div>\n );\n\n if (inline) {\n return (\n <div\n {...localeScope.rootAttrs}\n {...cleanRest}\n ref={containerRef}\n className={classNames(containerClass, bulmaHelperClasses, className)}\n >\n {panel}\n {name && (\n <input\n type=\"hidden\"\n name={name}\n form={form}\n value={value ? toIsoDateTime(value, enableSeconds) : ''}\n required={required}\n />\n )}\n </div>\n );\n }\n\n return (\n <div\n ref={containerRef}\n className={classNames(containerClass, bulmaHelperClasses, className)}\n {...localeScope.rootAttrs}\n {...cleanRest}\n >\n <input\n ref={combinedRef}\n type=\"text\"\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-controls={popoverId}\n autoComplete=\"off\"\n className={inputClass}\n value={text}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={inputReadOnlyAttr}\n name={name}\n form={form}\n required={required}\n id={id}\n {...inputHandlers}\n />\n {popover && triggerIcon && (\n <button\n type=\"button\"\n className={triggerClass}\n onClick={() => {\n if (canOpen) setOpen(!open);\n }}\n disabled={!canOpen}\n aria-label={t.chooseDateTime}\n aria-haspopup=\"dialog\"\n aria-controls={popoverId}\n aria-expanded={open}\n tabIndex={canOpen ? 0 : -1}\n >\n <Icon name={triggerIconName} size={size} />\n </button>\n )}\n {popover && (\n <PickerPopover\n localeScope={localeScope.panel}\n isOpen={open}\n onClose={() => setOpen(false)}\n anchorRef={containerRef}\n position={position}\n appendToBody={appendToBody}\n ariaLabel={t.chooseDateTime}\n id={popoverId}\n restoreFocusRef={inputRef}\n initialFocusSelector={CALENDAR_FOCUSED_CELL}\n >\n {panel}\n </PickerPopover>\n )}\n </div>\n );\n});\n\nDateTimeInputBase.displayName = 'DateTimeInputBase';\n\nexport default DateTimeInputBase;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DateTimeInputBase.js","sources":["../../../src/form/DateTimeInputBase.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { classNames, usePrefixedClassNames } from '../helpers/classNames';\nimport { useBulmaClasses, BulmaClassesProps } from '../helpers/useBulmaClasses';\nimport {\n PickerPosition,\n HourFormat,\n DayOfWeek,\n PickerLabels,\n mergeLabels,\n} from './_pickerInternals/pickerTypes';\nimport {\n formatDateTime,\n formatTime,\n hourCycleFromFormat,\n parseDate,\n DateFormatOption,\n DEFAULT_DATETIME_FORMAT,\n} from './_pickerInternals/formatters';\nimport {\n isWithin,\n setTimeOfDay,\n clampDate,\n FIRST_YEAR,\n floorMin,\n isSameDay,\n makeDate,\n} from './_pickerInternals/dateUtils';\nimport { Calendar, CALENDAR_FOCUSED_CELL } from './_pickerInternals/Calendar';\nimport { TimeWheels } from './_pickerInternals/TimeWheels';\nimport { PickerPopover } from './_pickerInternals/PickerPopover';\nimport { useNativeMobilePicker } from './_pickerInternals/useNativeMobilePicker';\nimport { useSegmentedEntry } from './_pickerInternals/useSegmentedEntry';\nimport {\n hasOwnDayNames,\n usePickerFirstDayOfWeek,\n usePickerLocale,\n usePickerLocaleScope,\n} from './_pickerInternals/useLocaleDefaults';\nimport { useControlLoading } from './controlLoading';\nimport { useFieldLabelTarget, useFieldsetDisabled } from './FormContext';\nimport { Icon } from '../elements/Icon';\nimport { getActiveElementInTree } from '../helpers/shadowDom';\nimport { inertProps } from '../helpers/inertProps';\n\n// The year is padded to four digits, as `datetime-local` requires. HTML has\n// no such shape for a year before 1, so a date then is empty, as that input\n// would make it.\nconst toIsoDateTime = (d: Date, withSeconds: boolean): string => {\n if (d.getFullYear() < FIRST_YEAR) return '';\n const yyyy = String(d.getFullYear()).padStart(4, '0');\n const mo = String(d.getMonth() + 1).padStart(2, '0');\n const dd = String(d.getDate()).padStart(2, '0');\n const hh = String(d.getHours()).padStart(2, '0');\n const mm = String(d.getMinutes()).padStart(2, '0');\n const ss = String(d.getSeconds()).padStart(2, '0');\n return withSeconds\n ? `${yyyy}-${mo}-${dd}T${hh}:${mm}:${ss}`\n : `${yyyy}-${mo}-${dd}T${hh}:${mm}`;\n};\n\nconst fromIsoDateTime = (s: string): Date | null => {\n // The HTML datetime-local value may carry fractional seconds (the spec\n // allows them and some engines normalize to `:ss.sss`); accept and drop.\n // Its year is four or more digits, as `toIsoDateTime` writes one past 9999.\n const m =\n /^(\\d{4,})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.\\d{1,3})?)?$/.exec(\n s\n );\n if (!m) return null;\n const d = makeDate(Number(m[1]), Number(m[2]) - 1, Number(m[3]));\n d.setHours(Number(m[4]), Number(m[5]), m[6] ? Number(m[6]) : 0, 0);\n return d;\n};\n\n/**\n * Props for the raw DateTimeInput base. Use the higher-level `DateTimeInput`\n * for Field/Control composition. Combines the prop set of `DateInputBaseProps`\n * and `TimeInputBaseProps`.\n */\nexport interface DateTimeInputBaseProps\n extends\n Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n | 'value'\n | 'defaultValue'\n | 'onChange'\n | 'size'\n | 'color'\n | 'min'\n | 'max'\n | 'type'\n | 'popover'\n >,\n Omit<BulmaClassesProps, 'color'> {\n /** Controlled selected date-time. */\n value?: Date | null;\n /** Initial value for uncontrolled usage. */\n defaultValue?: Date | null;\n /**\n * Fired when either the date or time portion changes. Picking a day keeps\n * the value's whole time of day, down to seconds and milliseconds the field\n * doesn't show, and `min` and `max` judge the picked day at that time. An\n * empty field's day is picked at midnight.\n */\n onChange?: (d: Date | null) => void;\n /** Fired when the popover opens. */\n onOpen?: () => void;\n /** Fired when the popover closes. */\n onClose?: () => void;\n /**\n * Lower bound for the combined date-time. A `min` before year 1 is raised\n * to midnight on 1 January of year 1, where the range starts without one\n * too: HTML's datetime-local input holds no earlier year, so the calendar,\n * the time wheels and typing stop there.\n */\n min?: Date;\n /** Upper bound for the combined date-time. */\n max?: Date;\n /** Disable the input. */\n disabled?: boolean;\n /** Read-only input. */\n readOnly?: boolean;\n /** Placeholder text. */\n placeholder?: string;\n /**\n * Token format string or `Intl.DateTimeFormat` options. Default `'YYYY-MM-DD HH:mm'`.\n * @defaultValue 'YYYY-MM-DD HH:mm'\n */\n format?: DateFormatOption;\n /**\n * Custom parser. Enter and leaving the field call it only if the user\n * changed the text, so focus passing through commits nothing and the value\n * keeps what the format leaves out, such as seconds.\n */\n parse?: (s: string) => Date | null;\n /**\n * BCP-47 locale tag for day/month names and Intl formatting. Unset, it is\n * the `locale` of a `LocaleProvider` around the picker, and with neither,\n * `Intl` uses the runtime's own locale. On a server render that is the\n * server's, so an `inline` calendar rendered there names its days in the\n * server's language and the browser's own render names them in the\n * browser's: give it a locale, here or through a `LocaleProvider`, where\n * the two can differ.\n */\n locale?: string;\n /** Render the panel inline (no popover). */\n inline?: boolean;\n /** Use `<input type=\"datetime-local\">` on coarse-pointer devices. */\n mobileNative?: boolean | 'auto';\n /** Allow segmented keyboard typing (type the date-time directly across all segments). `false` makes the field picker-only. */\n editable?: boolean;\n /** Whether the calendar + time popover exists. `false` makes the field input-only (segmented typing with no popover). Default `true`. */\n popover?: boolean;\n /**\n * Open the popover on focus. Default `true`. Focus that a closing popover\n * hands back to the input leaves it closed. Dismissing it commits nothing:\n * an empty field stays empty, and leaving afterwards commits only what was\n * typed since. With it off, the launcher or Alt+ArrowDown opens it.\n */\n openOnFocus?: boolean;\n /** Off by default — users typically tweak both halves before committing. */\n closeOnSelect?: boolean;\n /** Popover anchor position. */\n position?: PickerPosition;\n /**\n * Render the popover through a portal, into the `portalContainer` a\n * `ConfigProvider` sets, `document.body` by default.\n */\n appendToBody?: boolean;\n /**\n * Bulma color modifier for the input, also carried by the calendar and the\n * time wheels, where it colors the selected date and the selection band.\n * Today's date and the calendar's keyboard focus ring take the color's\n * `-on-scheme` variant, which Bulma adjusts to contrast with the background,\n * so pale colors stay readable. A focused wheel's ring is\n * drawn inside the band in the color's `-invert`, like the selected value,\n * so it shows on the fill. Unset, they use their\n * `--bulma-dateinput-*` and `--bulma-timeinput-wheel-*` variables, which\n * follow `primary` by default. The footer's time pill and Done button do not\n * follow `color`.\n */\n color?: 'primary' | 'link' | 'info' | 'success' | 'warning' | 'danger';\n /** Size variant. */\n size?: 'small' | 'medium' | 'large';\n /** Rounded input corners. */\n isRounded?: boolean;\n // date subset\n /** Disable specific dates. Blocked dates are also rejected during manual typing (the predicate receives the full candidate date-time — prefer day-based checks). */\n shouldDisableDate?: (d: Date) => boolean;\n /** Convenience array of disabled dates, matched by calendar day; also rejected by manual typing. */\n unselectableDates?: Date[];\n /**\n * Day the week starts on (0 = Sunday). Unset inside a `LocaleProvider`,\n * it is the first day of the week in the picker's locale, its own `locale`\n * or else the provider's, such as Monday for `\"de\"`. Elsewhere, with no\n * locale from either, or with seven `dayNames` of your own, it is Sunday:\n * set it with `dayNames` to start the week on another day.\n * @defaultValue 0\n */\n firstDayOfWeek?: DayOfWeek;\n /**\n * Override the 7 day-name labels (in calendar order, post-rotation). They\n * are shown exactly as given, from the first column, so they have to start\n * on the day the week does. With them, an unset `firstDayOfWeek` stays\n * Sunday even inside a `LocaleProvider`, so names written Sunday first keep\n * matching their columns; to start on the locale's day, set\n * `firstDayOfWeek` too and list the names from that day.\n */\n dayNames?: string[];\n /** Override the 12 month-name labels. */\n monthNames?: string[];\n /** Show dimmed dates from adjacent months. */\n nearbyMonthDays?: boolean;\n // time subset\n /** Time format. */\n hourFormat?: HourFormat;\n /** Show seconds column. Note: iOS Safari's native datetime-local picker UI does not include a seconds wheel; pass `mobileNative={false}` if you need one on iOS. */\n enableSeconds?: boolean;\n /** Hour step. */\n incrementHours?: number;\n /** Step between minute-wheel values (`1` = every minute, iOS-style). */\n incrementMinutes?: number;\n /** Step between second-wheel values (only with `enableSeconds`). */\n incrementSeconds?: number;\n /** Block specific times. Blocked times are also rejected during manual typing. */\n unselectableTimes?: (d: Date) => boolean;\n /** Decorative left icon glyph for the wrapping `Control` (shown by default). Set `''` to hide. */\n iconLeftName?: string;\n /**\n * Show a clickable launcher button on the right that toggles the popover.\n * Hidden by default while a `Control` it sits in shows its `isLoading`\n * spinner, which shares that right edge.\n * @defaultValue true\n */\n triggerIcon?: boolean;\n /** Glyph for the right launcher button. */\n triggerIconName?: string;\n /** Play a short audible tick on each time-wheel crossing. Default `false`. */\n audioTick?: boolean;\n /** Auto-route tactile feedback per wheel tick (vibrate on Android, audio thunk on iOS). Default `false`. */\n haptics?: boolean;\n /**\n * Optional translatable string overrides. In a 12-hour picker, `ampm`\n * names the AM/PM column, `'AM/PM'` by default.\n */\n labels?: PickerLabels;\n}\n\n/**\n * Raw DateTimeInput — combined input + calendar + time spinner without\n * Field/Control wrapping. Use `DateTimeInput` for the convenience wrapper.\n *\n * @function\n * @param {DateTimeInputBaseProps} props\n * @returns {JSX.Element}\n */\nexport const DateTimeInputBase = forwardRef<\n HTMLInputElement,\n DateTimeInputBaseProps\n>((props, ref) => {\n const {\n value: controlledValue,\n defaultValue,\n onChange,\n onOpen,\n onClose,\n min,\n max,\n disabled: disabledProp,\n readOnly,\n placeholder,\n format,\n parse,\n locale: localeProp,\n inline = false,\n mobileNative = 'auto',\n editable = true,\n popover = true,\n openOnFocus = true,\n closeOnSelect = false,\n position = 'bottom-left',\n appendToBody = false,\n color,\n size,\n isRounded,\n shouldDisableDate,\n unselectableDates,\n firstDayOfWeek: firstDayOfWeekProp,\n dayNames,\n monthNames,\n nearbyMonthDays = true,\n hourFormat = '24',\n enableSeconds = false,\n incrementHours = 1,\n // Step between visible wheel values; 1 gives the iOS-style every-minute wheel.\n incrementMinutes = 1,\n incrementSeconds = 1,\n unselectableTimes,\n className,\n name,\n form,\n required,\n id: idProp,\n onFocus,\n onClick,\n onKeyDown,\n onBlur,\n iconLeftName: _iconLeftName,\n triggerIcon: triggerIconProp,\n triggerIconName = 'chevron-down',\n audioTick = false,\n haptics = false,\n labels,\n ...rest\n } = props;\n // A LocaleProvider around the picker sets its default locale and, through\n // that locale, the day its week starts on.\n const locale = usePickerLocale(localeProp);\n // Its own language and direction, which its root and a portaled panel\n // carry inside a provider.\n const localeScope = usePickerLocaleScope(localeProp, props.dir);\n const firstDayOfWeek = usePickerFirstDayOfWeek(\n firstDayOfWeekProp,\n locale,\n hasOwnDayNames(dayNames)\n );\n const disabled = useFieldsetDisabled(disabledProp);\n // Inside a labeled Field the input takes the id the label points at\n // when the caller set none, as InputBase does, and the popover's ids\n // follow it. Inline there is no input to name, so nothing takes the\n // Field's id or builds on it.\n const id = useFieldLabelTarget(idProp, !inline);\n // The launcher gives way to the loading spinner of a Control this sits in.\n const controlLoading = useControlLoading();\n const triggerIcon = triggerIconProp ?? !controlLoading;\n const t = mergeLabels(labels);\n\n // Platform-appropriate feedback routing for the time wheel: on iOS (no\n // navigator.vibrate) the audio thunk fills in; on Android the real haptic\n // fires and no audio is layered on. `audioTick` always wins.\n const hasVibrate =\n typeof navigator !== 'undefined' && typeof navigator.vibrate === 'function';\n const effectiveAudioTick = audioTick || (haptics && !hasVibrate);\n\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = useState<Date | null>(\n defaultValue ?? null\n );\n const value = isControlled ? (controlledValue ?? null) : internalValue;\n\n // Nothing before year 1 is in range, as in HTML's date inputs.\n const lowerBound = useMemo(() => floorMin(min), [min]);\n\n const initialFocused = useMemo(\n () => clampDate(value ?? new Date(), lowerBound, max),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n const [focusedDate, setFocusedDate] = useState<Date>(initialFocused);\n // Re-clamp focusedDate when min/max change so the focused cell stays valid.\n useEffect(() => {\n setFocusedDate(prev => clampDate(prev, lowerBound, max));\n }, [lowerBound, max]);\n\n const defaultFormat: DateFormatOption =\n format ??\n (hourFormat === '12'\n ? enableSeconds\n ? 'YYYY-MM-DD hh:mm:ss A'\n : 'YYYY-MM-DD hh:mm A'\n : enableSeconds\n ? 'YYYY-MM-DD HH:mm:ss'\n : DEFAULT_DATETIME_FORMAT);\n\n // The displayed format is the source of truth for the hour cycle: an explicit\n // 12-hour `format` must drive a 12-hour wheel + pill even when `hourFormat`\n // was left at its default. Fall back to the raw prop only when the cycle\n // can't be read from the format (an Intl-options object, or no hour token).\n const effectiveHourFormat = hourCycleFromFormat(defaultFormat) ?? hourFormat;\n\n const [open, setOpenState] = useState(false);\n // The time wheels are collapsed by default (iOS-style); the user reveals\n // them by clicking the time value in the footer.\n const [timeOpen, setTimeOpen] = useState(false);\n const [text, setText] = useState<string>(\n value ? formatDateTime(value, defaultFormat, locale) : ''\n );\n\n const inputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n // Snapshot of the value when the popover opens, so Reset can revert the\n // edits made in this session (reverting to empty if it opened empty).\n const valueAtOpenRef = useRef<Date | null>(null);\n const reactId = useId();\n const popoverId = id ? `${id}-popover` : `picker-${reactId}`;\n const timeWheelsId = `${popoverId}-time`;\n\n const { bulmaHelperClasses, rest: cleanRest } = useBulmaClasses(rest);\n\n const { shouldUseNative, isSmallViewport } = useNativeMobilePicker({\n force: mobileNative === 'auto' ? undefined : mobileNative,\n });\n const useNative = !inline && shouldUseNative;\n const wheelItemHeight = isSmallViewport ? 40 : 32;\n\n // Time-only format for the footer's \"Time 5:07 PM\" display.\n const timeDisplayFormat =\n effectiveHourFormat === '12'\n ? enableSeconds\n ? 'h:mm:ss A'\n : 'h:mm A'\n : enableSeconds\n ? 'HH:mm:ss'\n : 'HH:mm';\n\n const inputClass = usePrefixedClassNames('input', {\n [`is-${color}`]: !!color,\n [`is-${size}`]: !!size,\n 'is-rounded': isRounded,\n });\n const containerClass = usePrefixedClassNames('datetimeinput-container');\n const triggerClass = usePrefixedClassNames('datetimeinput-trigger');\n const panelClass = usePrefixedClassNames('datetimeinput');\n const calendarWrapClass = usePrefixedClassNames(\n 'datetimeinput-calendar-wrap'\n );\n const timeOverlayClass = usePrefixedClassNames('datetimeinput-time-overlay');\n const timeCardClass = usePrefixedClassNames('datetimeinput-time-card');\n const footerClass = usePrefixedClassNames('datetimeinput-footer');\n const footerTimeClass = usePrefixedClassNames('datetimeinput-footer-time');\n const footerActionsClass = usePrefixedClassNames(\n 'datetimeinput-footer-actions'\n );\n const footerResetClass = usePrefixedClassNames('datetimeinput-footer-reset');\n const footerDoneClass = usePrefixedClassNames('datetimeinput-footer-done');\n const footerTimePillClass = usePrefixedClassNames(\n 'datetimeinput-footer-time-pill'\n );\n\n // What the latest request asked for, so a second request in the same event\n // sees it before React renders. The callbacks fire here rather than in a\n // state updater, which StrictMode calls twice, and after the state is set,\n // so a request a callback makes is the one that lands last.\n const requestedOpenRef = useRef(false);\n const setOpen = useCallback(\n (next: boolean) => {\n if (requestedOpenRef.current === next) return;\n requestedOpenRef.current = next;\n setOpenState(next);\n if (next) {\n valueAtOpenRef.current = value;\n onOpen?.();\n } else {\n onClose?.();\n }\n },\n [onOpen, onClose, value]\n );\n\n useEffect(() => {\n setText(value ? formatDateTime(value, defaultFormat, locale) : '');\n }, [value, defaultFormat, locale]);\n\n // Collapse the time wheels whenever the popover closes.\n useEffect(() => {\n if (!open) setTimeOpen(false);\n }, [open]);\n\n // The footer's Time button opens the wheels, and the hours wheel takes\n // focus so the keys turn it straight away. The calendar they cover is\n // inert meanwhile, so no tab stop, pointer or screen reader reaches a day\n // behind them. Closing the wheels hands focus back to the button: focus\n // in them would fall to the page as they unmount, and a pointer press\n // outside them has already dropped it on the panel or the page. Focus the\n // keys moved on to the footer, such as Reset, stays there.\n const panelRef = useRef<HTMLDivElement>(null);\n const timeButtonRef = useRef<HTMLButtonElement>(null);\n const timeOverlayRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (!timeOpen) return;\n timeOverlayRef.current\n ?.querySelector<HTMLElement>('[role=\"spinbutton\"]')\n ?.focus();\n }, [timeOpen]);\n const closeTime = useCallback(() => {\n const panel = panelRef.current;\n const active = getActiveElementInTree(panel);\n const movedOn =\n !!panel?.contains(active) && !timeOverlayRef.current?.contains(active);\n if (!movedOn) timeButtonRef.current?.focus();\n setTimeOpen(false);\n }, []);\n\n const commitValue = useCallback(\n (next: Date | null) => {\n if (!isControlled) setInternalValue(next);\n // Keep the calendar's focused cell tracking typed / parsed values.\n if (next) setFocusedDate(next);\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n // A picked day takes the value's whole time of day, seconds and all, or\n // midnight in an empty field. The day handed over by the keyboard is the\n // calendar's focused date, which can carry the time of the clock it\n // started from, so none of its time is kept.\n const handleDateSelect = useCallback(\n (d: Date) => {\n const merged = setTimeOfDay(d, {\n hours: value?.getHours() ?? 0,\n minutes: value?.getMinutes() ?? 0,\n seconds: value?.getSeconds() ?? 0,\n milliseconds: value?.getMilliseconds() ?? 0,\n });\n if (!isWithin(merged, lowerBound, max)) return;\n commitValue(merged);\n setFocusedDate(d);\n },\n [value, lowerBound, max, commitValue]\n );\n\n // The wheels set the value's time. An empty field starts from the focused\n // day, at the whole minute or second the wheels show.\n const handleTimeChange = useCallback(\n (parts: { hours: number; minutes: number; seconds?: number }) => {\n const next = value\n ? setTimeOfDay(value, parts)\n : setTimeOfDay(focusedDate, {\n ...parts,\n seconds: parts.seconds ?? 0,\n milliseconds: 0,\n });\n if (!isWithin(next, lowerBound, max)) return;\n commitValue(next);\n },\n [value, focusedDate, lowerBound, max, commitValue]\n );\n\n const tryParse = useCallback(\n (s: string): Date | null => {\n const trimmed = s.trim();\n if (!trimmed) return null;\n if (parse) return parse(trimmed);\n const fmt = typeof defaultFormat === 'string' ? defaultFormat : undefined;\n return parseDate(trimmed, fmt ?? DEFAULT_DATETIME_FORMAT, locale);\n },\n [parse, defaultFormat, locale]\n );\n\n // The Date the user edits when starting without a current value: now, at\n // the whole minute, or the whole second with `enableSeconds`.\n const makeBaseDate = useCallback(\n (): Date =>\n setTimeOfDay(new Date(), {\n seconds: enableSeconds ? undefined : 0,\n milliseconds: 0,\n }),\n [enableSeconds]\n );\n\n const inputReadOnlyAttr = !!readOnly || !editable;\n const canOpen = !!popover && !disabled && !readOnly;\n\n // Blocking predicate for manual entry, combining the calendar's\n // disabled-day logic with the wheels' unselectable-times predicate. The\n // candidate passed in carries the full date-time, so date predicates\n // should use day-based checks.\n const isBlocked = useMemo(() => {\n if (!shouldDisableDate && !unselectableDates?.length && !unselectableTimes)\n return undefined;\n return (d: Date) =>\n !!shouldDisableDate?.(d) ||\n !!unselectableDates?.some(u => isSameDay(u, d)) ||\n !!unselectableTimes?.(d);\n }, [shouldDisableDate, unselectableDates, unselectableTimes]);\n\n const { inputHandlers } = useSegmentedEntry({\n format: defaultFormat,\n value,\n commitValue,\n formatFn: formatDateTime,\n tryParse,\n text,\n setText,\n makeBaseDate,\n locale,\n min: lowerBound,\n max,\n isBlocked,\n disabled,\n readOnly,\n editable,\n popover,\n openOnFocus,\n closeOnSelect,\n isOpen: open,\n setOpen,\n inputRef,\n containerRef,\n onFocus,\n onClick,\n onKeyDown,\n onBlur,\n });\n\n const combinedRef = useCallback(\n (node: HTMLInputElement | null) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current =\n node;\n if (typeof ref === 'function') ref(node);\n else if (ref)\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n },\n [ref]\n );\n\n if (useNative) {\n const nativeStep = enableSeconds ? incrementSeconds : incrementMinutes * 60;\n return (\n <input\n {...localeScope.rootAttrs}\n {...cleanRest}\n ref={combinedRef}\n type=\"datetime-local\"\n step={nativeStep}\n className={classNames(inputClass, bulmaHelperClasses, className)}\n value={value ? toIsoDateTime(value, enableSeconds) : ''}\n onChange={e => {\n const parsed = e.target.value\n ? fromIsoDateTime(e.target.value)\n : null;\n commitValue(parsed);\n }}\n min={min ? toIsoDateTime(lowerBound, enableSeconds) : undefined}\n max={max ? toIsoDateTime(max, enableSeconds) : undefined}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n name={name}\n form={form}\n required={required}\n id={id}\n />\n );\n }\n\n const spinnerValue = {\n hours: value?.getHours() ?? 0,\n minutes: value?.getMinutes() ?? 0,\n seconds: enableSeconds ? (value?.getSeconds() ?? 0) : undefined,\n };\n\n const panel = (\n <div\n ref={panelRef}\n className={panelClass}\n onKeyDown={e => {\n // First Escape collapses the floating time wheels; the popover's own\n // Escape handler (which closes the whole panel) only sees the second.\n if (timeOpen && e.key === 'Escape') {\n e.stopPropagation();\n closeTime();\n }\n }}\n >\n <div className={calendarWrapClass}>\n <div {...inertProps(timeOpen)}>\n <Calendar\n value={value}\n focusedDate={focusedDate}\n onSelect={handleDateSelect}\n onFocusedDateChange={setFocusedDate}\n min={min}\n max={max}\n shouldDisableDate={shouldDisableDate}\n unselectableDates={unselectableDates}\n firstDayOfWeek={firstDayOfWeek}\n locale={locale}\n dayNames={dayNames}\n monthNames={monthNames}\n nearbyMonthDays={nearbyMonthDays}\n color={color}\n size={size}\n id={`${popoverId}-cal`}\n autoFocusCell={open}\n labels={labels}\n />\n </div>\n {timeOpen && (\n <div\n ref={timeOverlayRef}\n className={timeOverlayClass}\n onClick={e => {\n // Tap outside the wheel card (on the covered calendar area)\n // collapses the wheels without selecting a date, matching the\n // native behavior.\n if (e.target === e.currentTarget) closeTime();\n }}\n >\n <div className={timeCardClass}>\n <TimeWheels\n value={spinnerValue}\n onChange={handleTimeChange}\n hourFormat={effectiveHourFormat}\n enableSeconds={enableSeconds}\n incrementHours={incrementHours}\n incrementMinutes={incrementMinutes}\n incrementSeconds={incrementSeconds}\n unselectableTimes={unselectableTimes}\n color={color}\n size={size}\n disabled={disabled}\n id={timeWheelsId}\n labels={labels}\n itemHeight={wheelItemHeight}\n audioTick={effectiveAudioTick}\n // Enter on a wheel commits the time, which the wheels already\n // did live, and closes: the popover, or inline, where there\n // is no popover, the wheels, as Escape does.\n onCommit={() => (inline ? closeTime() : setOpen(false))}\n />\n </div>\n </div>\n )}\n </div>\n <div className={footerClass}>\n <button\n ref={timeButtonRef}\n type=\"button\"\n className={footerTimeClass}\n onClick={() => (timeOpen ? closeTime() : setTimeOpen(true))}\n aria-expanded={timeOpen}\n // The wheels exist only while open, so only then is there an\n // element for the button to name.\n aria-controls={timeOpen ? timeWheelsId : undefined}\n disabled={disabled}\n >\n <span>{t.time}</span>\n <span className={footerTimePillClass}>\n {value ? formatTime(value, timeDisplayFormat, locale) : '—'}\n </span>\n </button>\n <div className={footerActionsClass}>\n <button\n type=\"button\"\n className={footerResetClass}\n onClick={() => commitValue(valueAtOpenRef.current)}\n >\n {t.reset}\n </button>\n <button\n type=\"button\"\n className={footerDoneClass}\n aria-label={t.done}\n onClick={() => setOpen(false)}\n >\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" aria-hidden=\"true\">\n <path\n d=\"M5 11l4 4 8-8\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n </div>\n </div>\n );\n\n if (inline) {\n return (\n <div\n {...localeScope.rootAttrs}\n {...cleanRest}\n ref={containerRef}\n className={classNames(containerClass, bulmaHelperClasses, className)}\n >\n {panel}\n {name && (\n <input\n type=\"hidden\"\n name={name}\n form={form}\n value={value ? toIsoDateTime(value, enableSeconds) : ''}\n required={required}\n />\n )}\n </div>\n );\n }\n\n return (\n <div\n ref={containerRef}\n className={classNames(containerClass, bulmaHelperClasses, className)}\n {...localeScope.rootAttrs}\n {...cleanRest}\n >\n <input\n ref={combinedRef}\n type=\"text\"\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-controls={popoverId}\n autoComplete=\"off\"\n className={inputClass}\n value={text}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={inputReadOnlyAttr}\n name={name}\n form={form}\n required={required}\n id={id}\n {...inputHandlers}\n />\n {popover && triggerIcon && (\n <button\n type=\"button\"\n className={triggerClass}\n onClick={() => {\n if (canOpen) setOpen(!open);\n }}\n disabled={!canOpen}\n aria-label={t.chooseDateTime}\n aria-haspopup=\"dialog\"\n aria-controls={popoverId}\n aria-expanded={open}\n tabIndex={canOpen ? 0 : -1}\n >\n <Icon name={triggerIconName} size={size} />\n </button>\n )}\n {popover && (\n <PickerPopover\n localeScope={localeScope.panel}\n isOpen={open}\n onClose={() => setOpen(false)}\n anchorRef={containerRef}\n position={position}\n appendToBody={appendToBody}\n ariaLabel={t.chooseDateTime}\n id={popoverId}\n restoreFocusRef={inputRef}\n initialFocusSelector={CALENDAR_FOCUSED_CELL}\n >\n {panel}\n </PickerPopover>\n )}\n </div>\n );\n});\n\nDateTimeInputBase.displayName = 'DateTimeInputBase';\n\nexport default DateTimeInputBase;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/* @allxsmith/bestax-bulma — AI agents: see AGENTS.md in the package root, or https://bestax.io/llms.txt */
|
|
2
|
+
'use client';
|
|
2
3
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
3
4
|
import { forwardRef, useState, useReducer, useRef, useCallback, useEffect, useId } from 'react';
|
|
4
5
|
import { usePrefixedClassNames, classNames, prefixedClassNames } from '../helpers/classNames.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropzone.js","sources":["../../../src/form/Dropzone.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useReducer,\n useRef,\n useState,\n} from 'react';\nimport {\n classNames,\n usePrefixedClassNames,\n prefixedClassNames,\n} from '../helpers/classNames';\nimport { useBulmaClasses, BulmaClassesProps } from '../helpers/useBulmaClasses';\nimport { useConfig } from '../helpers/Config';\nimport { useNumberFormat, NumberFormatter } from '../helpers/localeFormat';\nimport { StatusRegion } from '../helpers/statusRegion';\nimport { warnOnce } from '../helpers/devWarnings';\nimport { Delete } from '../elements/Delete';\nimport {\n useInsideField,\n useInsideControl,\n rendersOwnField,\n useFieldsetDisabled,\n} from './FormContext';\nimport { Field } from './Field';\nimport { FormFieldProps } from './fieldProps';\nimport { useAutoLabelId } from './useAutoLabelId';\n\n/** Why a Dropzone refused a file. */\nexport type DropzoneRejectionCode =\n 'file-invalid-type' | 'file-too-large' | 'too-many-files';\n\n/** A file a Dropzone refused, and why. */\nexport interface DropzoneRejection {\n /** The file. */\n file: File;\n /**\n * Why it was refused: `file-invalid-type` when `accept` doesn't take it, or\n * it's a folder; `file-too-large` when it's over `maxSize`; `too-many-files`\n * when the list is full.\n */\n code: DropzoneRejectionCode;\n}\n\n/**\n * Props for the Dropzone component.\n *\n * @helperProps Helper props go on the `.dropzone` root `<div>`, with\n * `className`. The other attributes go on the `<input>`.\n * @extraProp {string} [accept] - File types it takes, as the native attribute writes them (`.pdf`, `image/*`, `application/pdf`). The picker offers them, and Dropzone checks every pick, drop and paste against them by the same rules, since browsers don't check a dropped file. It goes by a file's name and type, not its contents.\n * @extraProp {boolean} [multiple=false] - Takes several files, and each pick, drop or paste adds to the list. Without it, a new file replaces the one chosen.\n * @extraProp {string} [name] - The files' name in the form's data. The input holds the chosen files, so a plain form submit, `FormData` and React 19 actions all carry them.\n * @extraProp {boolean} [required=false] - The browser's own check: a form won't submit with no file chosen.\n * @extraProp {boolean} [disabled=false] - Disables the input, hides the remove buttons and takes no drops. A disabled `Fieldset` around it does the same.\n * @extraProp {(event: React.ChangeEvent<HTMLInputElement>) => void} [onChange] - Called on the input's `change`, after each pick, drop, paste or removal that changes the files, with `event.target.files` holding the new list.\n * @extraProp {React.Ref<HTMLInputElement>} [ref] - Forwarded to the `<input>`, so `ref.current.showPicker()` opens the picker from a button of your own. A script that writes the input through it, such as `value = ''` to clear it or a form library setting `files`, changes what the input holds and what the next pick, drop or paste adds to, but no event reports the write, so the list shows it only from the next change. To clear the list at once, reset the form, or control it with `files` and set that to `[]`.\n */\nexport interface DropzoneProps\n extends\n Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'color' | 'type' | 'children' | 'value' | 'defaultValue'\n >,\n Omit<BulmaClassesProps, 'color'>,\n FormFieldProps {\n /** Field label, rendered above the zone. It names the input along with the zone's own text, through `htmlFor` (your `id` when you pass one). Inside an outer `Field` it's dropped, and that `Field`'s label names the input. */\n label?: React.ReactNode;\n /** Props for the label element. An explicit `htmlFor` here overrides the automatic association (no id is generated then). */\n labelProps?: React.LabelHTMLAttributes<HTMLLabelElement> & {\n [key: string]: unknown;\n };\n /** Bulma color modifier for the zone, as `File` takes it. */\n color?:\n | 'primary'\n | 'link'\n | 'info'\n | 'success'\n | 'warning'\n | 'danger'\n | 'black'\n | 'dark'\n | 'light'\n | 'white';\n /** Size modifier for the zone. */\n size?: 'small' | 'medium' | 'large';\n /**\n * The zone's text. It's the input's accessible name, so keep it short, and\n * put details such as \"PDF up to 5 MB\" in `hint`. Default: \"Choose or drop\n * a file\", or \"Choose or drop files\" with `multiple`.\n */\n buttonLabel?: React.ReactNode;\n /**\n * An icon above the zone's text. It sits inside the `<label>` that names\n * the input, so leave an `Icon` here unnamed (`<Icon name=\"upload\" />`).\n */\n icon?: React.ReactNode;\n /**\n * A line under the zone that describes the input through\n * `aria-describedby`, such as \"PDF up to 5 MB\".\n */\n hint?: React.ReactNode;\n /** The largest file it takes, in bytes. A bigger one is refused with `file-too-large`. */\n maxSize?: number;\n /**\n * With `multiple`, how many files the list holds at most. A drop that would\n * go over adds files up to the limit and refuses the rest with\n * `too-many-files`.\n */\n maxFiles?: number;\n /**\n * The chosen files, to control the list. The input and the list follow it,\n * and a change you don't take through `onFilesChange` is undone. Setting it\n * to `[]` clears both.\n */\n files?: File[];\n /** Called with the whole list of chosen files each time it changes. */\n onFilesChange?: (files: File[]) => void;\n /** Called with the files a pick, drop or paste refused, and why. */\n onReject?: (rejections: DropzoneRejection[]) => void;\n /**\n * Shows the chosen files under the zone, each with its size and a remove\n * button. Turn it off to show them your own way from `onFilesChange`. The\n * refusals still show.\n */\n showFileList?: boolean;\n /** Takes files pasted while the input has focus, through the same checks as a drop. */\n allowPaste?: boolean;\n /**\n * While it's on the page, stops the browser opening a file dropped outside\n * any drop target, which would leave the page. Drops on other file inputs\n * and on editable fields are left alone.\n */\n preventDocumentDrop?: boolean;\n /** Names a file's remove button, for localization. Default: `` `Remove ${file.name}` ``. */\n removeLabel?: (file: File) => string;\n /**\n * The text shown and announced for a refused file, for localization.\n * Default: the file's name and the reason, such as \"photo.png: only PDF\n * files\".\n */\n rejectionMessage?: (rejection: DropzoneRejection) => string;\n /**\n * What's announced when files are added, for localization. Default: the\n * file's name and \"added\", or a count (\"2 files added\").\n */\n addedMessage?: (files: File[]) => string;\n /** What's announced when a file is removed, for localization. Default: `` `${file.name} removed` ``. */\n removedMessage?: (file: File) => string;\n /**\n * Help or validation message under the Dropzone. It describes the input\n * through `aria-describedby`, after the hint and any refusals.\n */\n message?: React.ReactNode;\n /** Additional CSS classes for the root. */\n className?: string;\n}\n\n/** A file on its way in, and whether it's really a folder. */\ninterface Incoming {\n file: File;\n folder: boolean;\n}\n\n/** A refusal, with whether the file was a folder, which the default message says. */\ninterface Refusal extends DropzoneRejection {\n folder: boolean;\n}\n\n/** Something the status region says, with an id that's new each time. */\ninterface Announcement {\n id: string;\n text: string;\n}\n\nconst noFiles: File[] = [];\nconst noRefusals: Refusal[] = [];\nconst noAnnouncements: Announcement[] = [];\n\nconst describeAnnouncement = (announcement: Announcement) => announcement.text;\n\n/**\n * The tokens of an `accept` attribute that HTML recognizes, lowercased: an\n * extension (`.pdf`), a wildcard (`image/*`) or a MIME type. Others are\n * ignored, as browsers ignore them.\n */\nconst acceptTokens = (accept: string | undefined): string[] =>\n (accept ?? '')\n .split(',')\n .map(token => token.trim().toLowerCase())\n .filter(\n token => token.length > 1 && (token[0] === '.' || token.includes('/'))\n );\n\n/** Whether `accept`'s tokens take a file with this name and type. */\nconst accepts = (tokens: string[], name: string, type: string): boolean => {\n if (tokens.length === 0) return true;\n const lowerName = name.toLowerCase();\n const lowerType = type.toLowerCase();\n return tokens.some(token =>\n token[0] === '.'\n ? lowerName.endsWith(token)\n : token.endsWith('/*')\n ? lowerType.startsWith(token.slice(0, -1))\n : lowerType === token\n );\n};\n\n/** Whether a drag or a clipboard carries files. */\nconst carriesFiles = (data: DataTransfer | null): data is DataTransfer =>\n !!data && Array.from(data.types ?? []).includes('Files');\n\n/** The files a drop or a paste brings, with folders marked. */\nconst incomingFrom = (data: DataTransfer | null): Incoming[] => {\n if (!data) return [];\n const items = Array.from(data.items ?? []).filter(\n item => item.kind === 'file'\n );\n if (items.length === 0) {\n return Array.from(data.files ?? [], file => ({ file, folder: false }));\n }\n const incoming: Incoming[] = [];\n for (const item of items) {\n const file = item.getAsFile();\n if (!file) continue;\n const entry = item.webkitGetAsEntry?.();\n incoming.push({ file, folder: !!entry?.isDirectory });\n }\n return incoming;\n};\n\n/** The same file: one object, or one picked again with the same details. */\nconst sameFile = (a: File, b: File): boolean =>\n a === b ||\n (a.name === b.name && a.size === b.size && a.lastModified === b.lastModified);\n\n/** Whether two lists hold the same files in the same order. */\nconst sameFiles = (\n a: ArrayLike<File> | null | undefined,\n b: readonly File[]\n): boolean =>\n !!a && a.length === b.length && b.every((file, i) => sameFile(a[i], file));\n\n/**\n * Writes files to a file input, through a `DataTransfer`, the one way script\n * can build a `FileList`. Where there's no `DataTransfer` the input is left as\n * it is.\n */\nconst writeFiles = (input: HTMLInputElement, files: readonly File[]) => {\n if (typeof DataTransfer !== 'function') return;\n const transfer = new DataTransfer();\n for (const file of files) transfer.items.add(file);\n input.files = transfer.files;\n};\n\n/** The units a file size is written in, largest first. */\nconst sizeUnits = [\n ['gigabyte', 1e9, 'GB'],\n ['megabyte', 1e6, 'MB'],\n ['kilobyte', 1e3, 'kB'],\n] as const;\n\n/**\n * A file size for display, in decimal units (\"1.2 MB\"), in the locale of a\n * `LocaleProvider` around it, or as English writes it outside one.\n */\nconst formatFileSize = (\n bytes: number,\n formatNumber: NumberFormatter | null\n): string => {\n for (const [unit, factor, symbol] of sizeUnits) {\n if (bytes >= factor) {\n const value = bytes / factor;\n return formatNumber\n ? formatNumber(value, {\n style: 'unit',\n unit,\n unitDisplay: 'short',\n maximumFractionDigits: 1,\n })\n : `${Math.round(value * 10) / 10} ${symbol}`;\n }\n }\n return formatNumber\n ? formatNumber(bytes, { style: 'unit', unit: 'byte', unitDisplay: 'long' })\n : `${bytes} ${bytes === 1 ? 'byte' : 'bytes'}`;\n};\n\n/** A word for each kind of file `accept` names: \"PDF\", \"image\". */\nconst typeNames = (tokens: string[]): string[] => {\n const names: string[] = [];\n for (const token of tokens) {\n let name = token;\n if (token[0] === '.') {\n name = token.slice(1).toUpperCase();\n } else {\n const [type, subtype] = token.split('/');\n const core = subtype.split('+')[0];\n if (subtype === '*') name = type;\n else if (core === 'plain') name = 'text';\n else if (/^[a-z0-9]+$/.test(core)) name = core.toUpperCase();\n }\n if (!names.includes(name)) names.push(name);\n }\n return names;\n};\n\n/** \"A\", \"A or B\", \"A, B, or C\". */\nconst orList = (items: string[]): string =>\n items.length <= 2\n ? items.join(' or ')\n : `${items.slice(0, -1).join(', ')}, or ${items[items.length - 1]}`;\n\n/**\n * The `Dropzone` component is an area to drop files on or click to pick\n * them, which checks each file and lists the chosen ones with a way to remove\n * each.\n *\n * It's Bulma's boxed, full-width file widget with the real\n * `<input type=\"file\">` lying over it, so the input is the one tab stop, the\n * click target and the drop target, and Enter and Space open the picker. The\n * input holds the chosen files: a pick, drop or paste that passes the checks\n * is written to it, so a form submits the files under `name`. It doesn't\n * upload anything.\n *\n * @function\n * @param {DropzoneProps} props - Props for the Dropzone component.\n * @returns {JSX.Element} The rendered dropzone.\n *\n * @example\n * <Dropzone\n * label=\"CV\"\n * name=\"cv\"\n * accept=\".pdf,application/pdf\"\n * maxSize={5_000_000}\n * hint=\"PDF up to 5 MB\"\n * />\n */\nexport const Dropzone = forwardRef<HTMLInputElement, DropzoneProps>(\n (\n {\n // Field props\n label,\n labelSize,\n labelProps,\n horizontal,\n message,\n messageColor,\n fieldClassName,\n color,\n size,\n buttonLabel,\n icon,\n hint,\n maxSize,\n maxFiles,\n files: filesProp,\n onFilesChange,\n onReject,\n showFileList = true,\n allowPaste = true,\n preventDocumentDrop = true,\n removeLabel,\n rejectionMessage,\n addedMessage,\n removedMessage,\n className,\n accept,\n multiple,\n disabled: disabledProp,\n onChange,\n onClick,\n onDragEnter,\n onDragOver,\n onDragLeave,\n onDrop,\n onPaste,\n 'aria-describedby': ariaDescribedBy,\n ...props\n },\n ref\n ) => {\n const disabled = useFieldsetDisabled(disabledProp);\n const controlled = filesProp !== undefined;\n const [ownFiles, setOwnFiles] = useState<File[]>(noFiles);\n const files = filesProp ?? ownFiles;\n // A render the controlled list needs after a change, so that one the app\n // didn't take is undone.\n const [, rerender] = useReducer((n: number) => n + 1, 0);\n const [refusals, setRefusals] = useState<Refusal[]>(noRefusals);\n const [drag, setDrag] = useState<'over' | 'reject' | null>(null);\n const [announcements, setAnnouncements] =\n useState<Announcement[]>(noAnnouncements);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const listRef = useRef<HTMLUListElement>(null);\n // Set while Dropzone dispatches the input's own events, so its change\n // handler hands them on rather than reading them as a pick.\n const dispatchingRef = useRef(false);\n // The row a removal emptied, whose neighbour takes focus.\n const removedRowRef = useRef<number | null>(null);\n const announcedRef = useRef(0);\n // What the input held when it was last clicked (Enter and Space click it\n // too), which a pick adds to: by the time the pick's change arrives, the\n // browser has replaced the input's files with the picked ones.\n const pickBaseRef = useRef<File[] | null>(null);\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current =\n node;\n }\n },\n [ref]\n );\n\n const formatNumber = useNumberFormat();\n const tokens = acceptTokens(accept);\n const sizeText = (bytes: number) => formatFileSize(bytes, formatNumber);\n const countText = (count: number) =>\n formatNumber ? formatNumber(count) : String(count);\n\n // The files a pick, drop or paste builds on, and a removal takes one from.\n // Controlled, that's `files`. Uncontrolled, it's the input itself rather\n // than the list: a script can rewrite the input through the ref, emptying\n // it with `value = ''` or setting its `files`, and no event reports that,\n // so the list catches up only at the next change. Where there's no\n // DataTransfer to write the input with, the list is all there is.\n const current = (): File[] =>\n controlled || typeof DataTransfer !== 'function'\n ? files\n : Array.from((inputRef.current as HTMLInputElement).files as FileList);\n\n const messageFor = (refusal: Refusal): string => {\n const { file, code } = refusal;\n if (rejectionMessage) return rejectionMessage({ file, code });\n if (code === 'file-too-large') {\n return `${file.name}: larger than ${sizeText(maxSize as number)}`;\n }\n if (code === 'too-many-files') {\n const most = multiple ? (maxFiles as number) : 1;\n return `${file.name}: only ${most === 1 ? 'one file' : `${countText(most)} files`}`;\n }\n return refusal.folder\n ? `${file.name}: folders can't be added`\n : `${file.name}: only ${orList(typeNames(tokens))} files`;\n };\n\n const announce = (texts: string[]) => {\n if (texts.length === 0) return;\n const batch = ++announcedRef.current;\n setAnnouncements(texts.map((text, i) => ({ id: `${batch}-${i}`, text })));\n };\n\n /**\n * Makes `next` the chosen files: writes them to the input, and when they\n * differ from the list, dispatches the input's `input` and `change` and\n * reports the new list.\n */\n const commit = (next: File[]) => {\n pickBaseRef.current = null;\n const input = inputRef.current as HTMLInputElement;\n if (!sameFiles(input.files, next)) writeFiles(input, next);\n if (sameFiles(files, next)) return;\n if (controlled) rerender();\n else setOwnFiles(next);\n onFilesChange?.(next);\n dispatchingRef.current = true;\n try {\n input.dispatchEvent(new Event('input', { bubbles: true }));\n input.dispatchEvent(new Event('change', { bubbles: true }));\n } finally {\n dispatchingRef.current = false;\n }\n };\n\n /** Checks the files a pick, drop or paste brings, and takes those that pass. */\n const take = (incoming: Incoming[], base: File[] = current()) => {\n const kept = multiple ? base : noFiles;\n const room = multiple ? (maxFiles ?? Infinity) - kept.length : 1;\n const added: File[] = [];\n const refused: Refusal[] = [];\n for (const { file, folder } of incoming) {\n const code: DropzoneRejectionCode | null =\n folder || !accepts(tokens, file.name, file.type)\n ? 'file-invalid-type'\n : maxSize !== undefined && file.size > maxSize\n ? 'file-too-large'\n : null;\n if (code) {\n refused.push({ file, code, folder });\n } else if (\n multiple &&\n [...kept, ...added].some(f => sameFile(f, file))\n ) {\n // Already in the list: nothing to add, and nothing wrong.\n } else if (added.length >= room) {\n refused.push({ file, code: 'too-many-files', folder });\n } else {\n added.push(file);\n }\n }\n setRefusals(refused.length > 0 ? refused : noRefusals);\n if (refused.length > 0) {\n onReject?.(refused.map(({ file, code }) => ({ file, code })));\n }\n commit(added.length > 0 ? [...kept, ...added] : base);\n const addedText =\n added.length === 0\n ? []\n : [\n addedMessage\n ? addedMessage(added)\n : added.length === 1\n ? `${added[0].name} added`\n : `${countText(added.length)} files added`,\n ];\n announce([...addedText, ...refused.map(messageFor)]);\n };\n\n const remove = (index: number) => {\n const file = files[index];\n removedRowRef.current = index;\n commit(current().filter(held => !sameFile(held, file)));\n announce([\n removedMessage ? removedMessage(file) : `${file.name} removed`,\n ]);\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (dispatchingRef.current) {\n onChange?.(event);\n return;\n }\n // A pick: the browser has put the picked files in the input. They're\n // added to what it held when it was clicked, or, for a picker opened\n // with showPicker(), which clicks nothing, to the list. With none (a\n // cancelled pick, in a browser that clears it), that stays.\n const base = pickBaseRef.current ?? files;\n const picked = Array.from(event.target.files ?? []);\n if (picked.length === 0) commit(base);\n else\n take(\n picked.map(file => ({ file, folder: false })),\n base\n );\n };\n\n const handleClick = (event: React.MouseEvent<HTMLInputElement>) => {\n onClick?.(event);\n pickBaseRef.current = current();\n };\n\n // While files are dragged over the input it's cancelled, which makes the\n // input the drop target and keeps the browser's own drop from running.\n // Disabled, it refuses the drop, so the browser doesn't open the file.\n const handleDragOver = (event: React.DragEvent<HTMLInputElement>) => {\n (event.type === 'dragenter' ? onDragEnter : onDragOver)?.(event);\n if (!carriesFiles(event.dataTransfer)) return;\n event.preventDefault();\n if (disabled) {\n event.dataTransfer.dropEffect = 'none';\n return;\n }\n event.dataTransfer.dropEffect = 'copy';\n // Only the dragged files' types can be read, so a file is known to be\n // refused only when `accept` names no extension and its type is known.\n const room = multiple ? (maxFiles ?? Infinity) - current().length : 1;\n const types = Array.from(event.dataTransfer.items ?? [])\n .filter(item => item.kind === 'file')\n .map(item => item.type);\n const refused =\n room <= 0 ||\n (types.length > 0 &&\n tokens.length > 0 &&\n !tokens.some(token => token[0] === '.') &&\n types.every(type => type !== '' && !accepts(tokens, '', type)));\n setDrag(refused ? 'reject' : 'over');\n };\n\n const handleDragLeave = (event: React.DragEvent<HTMLInputElement>) => {\n onDragLeave?.(event);\n setDrag(null);\n };\n\n const handleDrop = (event: React.DragEvent<HTMLInputElement>) => {\n onDrop?.(event);\n setDrag(null);\n if (!carriesFiles(event.dataTransfer)) return;\n event.preventDefault();\n if (!disabled) take(incomingFrom(event.dataTransfer));\n };\n\n const handlePaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n onPaste?.(event);\n if (!allowPaste || disabled) return;\n const incoming = incomingFrom(event.clipboardData);\n if (incoming.length === 0) return;\n event.preventDefault();\n take(incoming);\n };\n\n // A controlled list: the input follows `files`, and a change the app\n // didn't take is undone.\n useEffect(() => {\n const input = inputRef.current;\n if (controlled && input && !sameFiles(input.files, files)) {\n writeFiles(input, files);\n }\n });\n\n // After a removal, focus goes to the remove button that took the removed\n // one's place, else the one before, else the input.\n useEffect(() => {\n const row = removedRowRef.current;\n if (row === null) return;\n removedRowRef.current = null;\n const buttons = listRef.current?.querySelectorAll('button') ?? [];\n const next = buttons[Math.min(row, buttons.length - 1)];\n (next ?? inputRef.current)?.focus();\n });\n\n // A reset of the input's form empties the input, so the list and the\n // refusals go too. The reset event fires before the form resets, and a\n // listener after this one can still cancel it, so the list is cleared a\n // task later, and only if the reset went ahead.\n const latestRef = useRef({ files, controlled, onFilesChange });\n useEffect(() => {\n latestRef.current = { files, controlled, onFilesChange };\n });\n const formAttribute = props.form;\n useEffect(() => {\n const form = inputRef.current?.form;\n if (!form) return undefined;\n let timer: ReturnType<typeof setTimeout> | undefined;\n const onReset = (event: Event) => {\n timer = setTimeout(() => {\n if (event.defaultPrevented) return;\n const latest = latestRef.current;\n pickBaseRef.current = null;\n setRefusals(noRefusals);\n if (latest.files.length === 0) return;\n if (latest.controlled) rerender();\n else setOwnFiles(noFiles);\n latest.onFilesChange?.(noFiles);\n });\n };\n form.addEventListener('reset', onReset);\n return () => {\n form.removeEventListener('reset', onReset);\n clearTimeout(timer);\n };\n }, [formAttribute]);\n\n // A file dropped just outside the zone would open in the tab. The guard\n // cancels a file drag anywhere nothing else takes it, leaving alone\n // enabled file inputs and editable fields, which take drops of their own,\n // and drops something else already handled. It reads the event's real\n // target, so a file input inside a shadow root is left alone too.\n useEffect(() => {\n if (!preventDocumentDrop) return undefined;\n const guard = (event: DragEvent) => {\n if (event.defaultPrevented || !carriesFiles(event.dataTransfer)) {\n return;\n }\n const target = event.composedPath()[0];\n if (\n target instanceof Element &&\n target.closest(\n 'input[type=\"file\"]:not(:disabled), textarea, [contenteditable]:not([contenteditable=\"false\"])'\n )\n ) {\n return;\n }\n event.preventDefault();\n if (event.type === 'dragover') event.dataTransfer.dropEffect = 'none';\n };\n document.addEventListener('dragover', guard);\n document.addEventListener('drop', guard);\n return () => {\n document.removeEventListener('dragover', guard);\n document.removeEventListener('drop', guard);\n };\n }, [preventDocumentDrop]);\n\n const warnsMaxFiles = maxFiles !== undefined && !multiple;\n useEffect(() => {\n if (warnsMaxFiles) {\n warnOnce(\n 'Dropzone:maxFiles-without-multiple',\n '[bestax-bulma] <Dropzone maxFiles> takes effect only with ' +\n 'multiple. Without it, each new file replaces the one chosen.'\n );\n }\n }, [warnsMaxFiles]);\n\n const insideField = useInsideField();\n const insideControl = useInsideControl();\n const ownField = rendersOwnField('Dropzone', {\n insideField,\n insideControl,\n label,\n message,\n horizontal,\n fieldClassName,\n });\n const { controlId, fieldLabelProps } = useAutoLabelId({\n label,\n id: props.id,\n labelProps,\n rendersLabel: ownField,\n });\n const { classPrefix } = useConfig();\n const pcn = (...args: Parameters<typeof classNames>) =>\n prefixedClassNames(classPrefix, ...args);\n // The input takes `controlId`, so `id` stays out of the spread, where an\n // undefined `id` key would wipe the id the label points at.\n const { id: _id, ...inputProps } = props;\n const { bulmaHelperClasses, rest } = useBulmaClasses(inputProps);\n\n const baseId = useId();\n const hintId = `${baseId}-hint`;\n const refusalsId = `${baseId}-refusals`;\n const messageId = `${baseId}-message`;\n const describedBy =\n [\n ariaDescribedBy,\n hint ? hintId : undefined,\n refusals.length > 0 ? refusalsId : undefined,\n message ? messageId : undefined,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const rootClass = usePrefixedClassNames('dropzone', {\n 'is-dragover': drag === 'over',\n 'is-drag-reject': drag === 'reject',\n 'is-disabled': disabled,\n });\n const zoneClass = usePrefixedClassNames(\n 'file',\n 'is-boxed',\n 'is-fullwidth',\n {\n [`is-${color}`]: !!color,\n [`is-${size}`]: !!size,\n }\n );\n const helpClass = usePrefixedClassNames('help', {\n [`is-${messageColor}`]: !!messageColor,\n });\n\n // Each row's key, from the file's details, which the list keeps unique.\n const seen = new Map<string, number>();\n const keyOf = (file: File) => {\n const key = `${file.name}:${file.size}:${file.lastModified}`;\n const count = seen.get(key) ?? 0;\n seen.set(key, count + 1);\n return count === 0 ? key : `${key}:${count}`;\n };\n\n const dropzoneElement = (\n <div className={classNames(rootClass, bulmaHelperClasses, className)}>\n <div className={zoneClass}>\n <label className={pcn('file-label')}>\n <input\n {...rest}\n ref={setInputRef}\n className={pcn('file-input')}\n type=\"file\"\n id={controlId}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n aria-describedby={describedBy}\n onChange={handleChange}\n onClick={handleClick}\n onDragEnter={handleDragOver}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onPaste={handlePaste}\n />\n <span className={pcn('file-cta')}>\n {icon && <span className={pcn('file-icon')}>{icon}</span>}\n <span className={pcn('file-label')}>\n {buttonLabel ||\n (multiple ? 'Choose or drop files' : 'Choose or drop a file')}\n </span>\n </span>\n </label>\n </div>\n {hint && (\n <p id={hintId} className={pcn('help', 'dropzone-hint')}>\n {hint}\n </p>\n )}\n {showFileList && files.length > 0 && (\n <ul ref={listRef} className={pcn('dropzone-list')}>\n {files.map((file, index) => (\n <li key={keyOf(file)} className={pcn('dropzone-item')}>\n <span className={pcn('dropzone-name')}>{file.name}</span>\n <span className={pcn('dropzone-size')}>\n {sizeText(file.size)}\n </span>\n {!disabled && (\n <Delete\n size=\"small\"\n ariaLabel={\n removeLabel ? removeLabel(file) : `Remove ${file.name}`\n }\n onClick={() => remove(index)}\n />\n )}\n </li>\n ))}\n </ul>\n )}\n {refusals.length > 0 && (\n <div id={refusalsId} className={pcn('dropzone-rejections')}>\n {refusals.map((refusal, index) => (\n <p key={index} className={pcn('help', 'is-danger')}>\n {messageFor(refusal)}\n </p>\n ))}\n </div>\n )}\n <StatusRegion items={announcements} describe={describeAnnouncement} />\n </div>\n );\n\n const messageEl = message ? (\n <p id={messageId} className={helpClass}>\n {message}\n </p>\n ) : null;\n\n if (ownField) {\n return (\n <Field\n label={label}\n labelSize={labelSize}\n labelProps={fieldLabelProps}\n horizontal={horizontal}\n className={fieldClassName}\n >\n {dropzoneElement}\n {messageEl}\n </Field>\n );\n }\n\n return (\n <>\n {dropzoneElement}\n {messageEl}\n </>\n );\n }\n);\n\nDropzone.displayName = 'Dropzone';\n\nexport default Dropzone;\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dropzone.js","sources":["../../../src/form/Dropzone.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useReducer,\n useRef,\n useState,\n} from 'react';\nimport {\n classNames,\n usePrefixedClassNames,\n prefixedClassNames,\n} from '../helpers/classNames';\nimport { useBulmaClasses, BulmaClassesProps } from '../helpers/useBulmaClasses';\nimport { useConfig } from '../helpers/Config';\nimport { useNumberFormat, NumberFormatter } from '../helpers/localeFormat';\nimport { StatusRegion } from '../helpers/statusRegion';\nimport { warnOnce } from '../helpers/devWarnings';\nimport { Delete } from '../elements/Delete';\nimport {\n useInsideField,\n useInsideControl,\n rendersOwnField,\n useFieldsetDisabled,\n} from './FormContext';\nimport { Field } from './Field';\nimport { FormFieldProps } from './fieldProps';\nimport { useAutoLabelId } from './useAutoLabelId';\n\n/** Why a Dropzone refused a file. */\nexport type DropzoneRejectionCode =\n 'file-invalid-type' | 'file-too-large' | 'too-many-files';\n\n/** A file a Dropzone refused, and why. */\nexport interface DropzoneRejection {\n /** The file. */\n file: File;\n /**\n * Why it was refused: `file-invalid-type` when `accept` doesn't take it, or\n * it's a folder; `file-too-large` when it's over `maxSize`; `too-many-files`\n * when the list is full.\n */\n code: DropzoneRejectionCode;\n}\n\n/**\n * Props for the Dropzone component.\n *\n * @helperProps Helper props go on the `.dropzone` root `<div>`, with\n * `className`. The other attributes go on the `<input>`.\n * @extraProp {string} [accept] - File types it takes, as the native attribute writes them (`.pdf`, `image/*`, `application/pdf`). The picker offers them, and Dropzone checks every pick, drop and paste against them by the same rules, since browsers don't check a dropped file. It goes by a file's name and type, not its contents.\n * @extraProp {boolean} [multiple=false] - Takes several files, and each pick, drop or paste adds to the list. Without it, a new file replaces the one chosen.\n * @extraProp {string} [name] - The files' name in the form's data. The input holds the chosen files, so a plain form submit, `FormData` and React 19 actions all carry them.\n * @extraProp {boolean} [required=false] - The browser's own check: a form won't submit with no file chosen.\n * @extraProp {boolean} [disabled=false] - Disables the input, hides the remove buttons and takes no drops. A disabled `Fieldset` around it does the same.\n * @extraProp {(event: React.ChangeEvent<HTMLInputElement>) => void} [onChange] - Called on the input's `change`, after each pick, drop, paste or removal that changes the files, with `event.target.files` holding the new list.\n * @extraProp {React.Ref<HTMLInputElement>} [ref] - Forwarded to the `<input>`, so `ref.current.showPicker()` opens the picker from a button of your own. A script that writes the input through it, such as `value = ''` to clear it or a form library setting `files`, changes what the input holds and what the next pick, drop or paste adds to, but no event reports the write, so the list shows it only from the next change. To clear the list at once, reset the form, or control it with `files` and set that to `[]`.\n */\nexport interface DropzoneProps\n extends\n Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'color' | 'type' | 'children' | 'value' | 'defaultValue'\n >,\n Omit<BulmaClassesProps, 'color'>,\n FormFieldProps {\n /** Field label, rendered above the zone. It names the input along with the zone's own text, through `htmlFor` (your `id` when you pass one). Inside an outer `Field` it's dropped, and that `Field`'s label names the input. */\n label?: React.ReactNode;\n /** Props for the label element. An explicit `htmlFor` here overrides the automatic association (no id is generated then). */\n labelProps?: React.LabelHTMLAttributes<HTMLLabelElement> & {\n [key: string]: unknown;\n };\n /** Bulma color modifier for the zone, as `File` takes it. */\n color?:\n | 'primary'\n | 'link'\n | 'info'\n | 'success'\n | 'warning'\n | 'danger'\n | 'black'\n | 'dark'\n | 'light'\n | 'white';\n /** Size modifier for the zone. */\n size?: 'small' | 'medium' | 'large';\n /**\n * The zone's text. It's the input's accessible name, so keep it short, and\n * put details such as \"PDF up to 5 MB\" in `hint`. Default: \"Choose or drop\n * a file\", or \"Choose or drop files\" with `multiple`.\n */\n buttonLabel?: React.ReactNode;\n /**\n * An icon above the zone's text. It sits inside the `<label>` that names\n * the input, so leave an `Icon` here unnamed (`<Icon name=\"upload\" />`).\n */\n icon?: React.ReactNode;\n /**\n * A line under the zone that describes the input through\n * `aria-describedby`, such as \"PDF up to 5 MB\".\n */\n hint?: React.ReactNode;\n /** The largest file it takes, in bytes. A bigger one is refused with `file-too-large`. */\n maxSize?: number;\n /**\n * With `multiple`, how many files the list holds at most. A drop that would\n * go over adds files up to the limit and refuses the rest with\n * `too-many-files`.\n */\n maxFiles?: number;\n /**\n * The chosen files, to control the list. The input and the list follow it,\n * and a change you don't take through `onFilesChange` is undone. Setting it\n * to `[]` clears both.\n */\n files?: File[];\n /** Called with the whole list of chosen files each time it changes. */\n onFilesChange?: (files: File[]) => void;\n /** Called with the files a pick, drop or paste refused, and why. */\n onReject?: (rejections: DropzoneRejection[]) => void;\n /**\n * Shows the chosen files under the zone, each with its size and a remove\n * button. Turn it off to show them your own way from `onFilesChange`. The\n * refusals still show.\n */\n showFileList?: boolean;\n /** Takes files pasted while the input has focus, through the same checks as a drop. */\n allowPaste?: boolean;\n /**\n * While it's on the page, stops the browser opening a file dropped outside\n * any drop target, which would leave the page. Drops on other file inputs\n * and on editable fields are left alone.\n */\n preventDocumentDrop?: boolean;\n /** Names a file's remove button, for localization. Default: `` `Remove ${file.name}` ``. */\n removeLabel?: (file: File) => string;\n /**\n * The text shown and announced for a refused file, for localization.\n * Default: the file's name and the reason, such as \"photo.png: only PDF\n * files\".\n */\n rejectionMessage?: (rejection: DropzoneRejection) => string;\n /**\n * What's announced when files are added, for localization. Default: the\n * file's name and \"added\", or a count (\"2 files added\").\n */\n addedMessage?: (files: File[]) => string;\n /** What's announced when a file is removed, for localization. Default: `` `${file.name} removed` ``. */\n removedMessage?: (file: File) => string;\n /**\n * Help or validation message under the Dropzone. It describes the input\n * through `aria-describedby`, after the hint and any refusals.\n */\n message?: React.ReactNode;\n /** Additional CSS classes for the root. */\n className?: string;\n}\n\n/** A file on its way in, and whether it's really a folder. */\ninterface Incoming {\n file: File;\n folder: boolean;\n}\n\n/** A refusal, with whether the file was a folder, which the default message says. */\ninterface Refusal extends DropzoneRejection {\n folder: boolean;\n}\n\n/** Something the status region says, with an id that's new each time. */\ninterface Announcement {\n id: string;\n text: string;\n}\n\nconst noFiles: File[] = [];\nconst noRefusals: Refusal[] = [];\nconst noAnnouncements: Announcement[] = [];\n\nconst describeAnnouncement = (announcement: Announcement) => announcement.text;\n\n/**\n * The tokens of an `accept` attribute that HTML recognizes, lowercased: an\n * extension (`.pdf`), a wildcard (`image/*`) or a MIME type. Others are\n * ignored, as browsers ignore them.\n */\nconst acceptTokens = (accept: string | undefined): string[] =>\n (accept ?? '')\n .split(',')\n .map(token => token.trim().toLowerCase())\n .filter(\n token => token.length > 1 && (token[0] === '.' || token.includes('/'))\n );\n\n/** Whether `accept`'s tokens take a file with this name and type. */\nconst accepts = (tokens: string[], name: string, type: string): boolean => {\n if (tokens.length === 0) return true;\n const lowerName = name.toLowerCase();\n const lowerType = type.toLowerCase();\n return tokens.some(token =>\n token[0] === '.'\n ? lowerName.endsWith(token)\n : token.endsWith('/*')\n ? lowerType.startsWith(token.slice(0, -1))\n : lowerType === token\n );\n};\n\n/** Whether a drag or a clipboard carries files. */\nconst carriesFiles = (data: DataTransfer | null): data is DataTransfer =>\n !!data && Array.from(data.types ?? []).includes('Files');\n\n/** The files a drop or a paste brings, with folders marked. */\nconst incomingFrom = (data: DataTransfer | null): Incoming[] => {\n if (!data) return [];\n const items = Array.from(data.items ?? []).filter(\n item => item.kind === 'file'\n );\n if (items.length === 0) {\n return Array.from(data.files ?? [], file => ({ file, folder: false }));\n }\n const incoming: Incoming[] = [];\n for (const item of items) {\n const file = item.getAsFile();\n if (!file) continue;\n const entry = item.webkitGetAsEntry?.();\n incoming.push({ file, folder: !!entry?.isDirectory });\n }\n return incoming;\n};\n\n/** The same file: one object, or one picked again with the same details. */\nconst sameFile = (a: File, b: File): boolean =>\n a === b ||\n (a.name === b.name && a.size === b.size && a.lastModified === b.lastModified);\n\n/** Whether two lists hold the same files in the same order. */\nconst sameFiles = (\n a: ArrayLike<File> | null | undefined,\n b: readonly File[]\n): boolean =>\n !!a && a.length === b.length && b.every((file, i) => sameFile(a[i], file));\n\n/**\n * Writes files to a file input, through a `DataTransfer`, the one way script\n * can build a `FileList`. Where there's no `DataTransfer` the input is left as\n * it is.\n */\nconst writeFiles = (input: HTMLInputElement, files: readonly File[]) => {\n if (typeof DataTransfer !== 'function') return;\n const transfer = new DataTransfer();\n for (const file of files) transfer.items.add(file);\n input.files = transfer.files;\n};\n\n/** The units a file size is written in, largest first. */\nconst sizeUnits = [\n ['gigabyte', 1e9, 'GB'],\n ['megabyte', 1e6, 'MB'],\n ['kilobyte', 1e3, 'kB'],\n] as const;\n\n/**\n * A file size for display, in decimal units (\"1.2 MB\"), in the locale of a\n * `LocaleProvider` around it, or as English writes it outside one.\n */\nconst formatFileSize = (\n bytes: number,\n formatNumber: NumberFormatter | null\n): string => {\n for (const [unit, factor, symbol] of sizeUnits) {\n if (bytes >= factor) {\n const value = bytes / factor;\n return formatNumber\n ? formatNumber(value, {\n style: 'unit',\n unit,\n unitDisplay: 'short',\n maximumFractionDigits: 1,\n })\n : `${Math.round(value * 10) / 10} ${symbol}`;\n }\n }\n return formatNumber\n ? formatNumber(bytes, { style: 'unit', unit: 'byte', unitDisplay: 'long' })\n : `${bytes} ${bytes === 1 ? 'byte' : 'bytes'}`;\n};\n\n/** A word for each kind of file `accept` names: \"PDF\", \"image\". */\nconst typeNames = (tokens: string[]): string[] => {\n const names: string[] = [];\n for (const token of tokens) {\n let name = token;\n if (token[0] === '.') {\n name = token.slice(1).toUpperCase();\n } else {\n const [type, subtype] = token.split('/');\n const core = subtype.split('+')[0];\n if (subtype === '*') name = type;\n else if (core === 'plain') name = 'text';\n else if (/^[a-z0-9]+$/.test(core)) name = core.toUpperCase();\n }\n if (!names.includes(name)) names.push(name);\n }\n return names;\n};\n\n/** \"A\", \"A or B\", \"A, B, or C\". */\nconst orList = (items: string[]): string =>\n items.length <= 2\n ? items.join(' or ')\n : `${items.slice(0, -1).join(', ')}, or ${items[items.length - 1]}`;\n\n/**\n * The `Dropzone` component is an area to drop files on or click to pick\n * them, which checks each file and lists the chosen ones with a way to remove\n * each.\n *\n * It's Bulma's boxed, full-width file widget with the real\n * `<input type=\"file\">` lying over it, so the input is the one tab stop, the\n * click target and the drop target, and Enter and Space open the picker. The\n * input holds the chosen files: a pick, drop or paste that passes the checks\n * is written to it, so a form submits the files under `name`. It doesn't\n * upload anything.\n *\n * @function\n * @param {DropzoneProps} props - Props for the Dropzone component.\n * @returns {JSX.Element} The rendered dropzone.\n *\n * @example\n * <Dropzone\n * label=\"CV\"\n * name=\"cv\"\n * accept=\".pdf,application/pdf\"\n * maxSize={5_000_000}\n * hint=\"PDF up to 5 MB\"\n * />\n */\nexport const Dropzone = forwardRef<HTMLInputElement, DropzoneProps>(\n (\n {\n // Field props\n label,\n labelSize,\n labelProps,\n horizontal,\n message,\n messageColor,\n fieldClassName,\n color,\n size,\n buttonLabel,\n icon,\n hint,\n maxSize,\n maxFiles,\n files: filesProp,\n onFilesChange,\n onReject,\n showFileList = true,\n allowPaste = true,\n preventDocumentDrop = true,\n removeLabel,\n rejectionMessage,\n addedMessage,\n removedMessage,\n className,\n accept,\n multiple,\n disabled: disabledProp,\n onChange,\n onClick,\n onDragEnter,\n onDragOver,\n onDragLeave,\n onDrop,\n onPaste,\n 'aria-describedby': ariaDescribedBy,\n ...props\n },\n ref\n ) => {\n const disabled = useFieldsetDisabled(disabledProp);\n const controlled = filesProp !== undefined;\n const [ownFiles, setOwnFiles] = useState<File[]>(noFiles);\n const files = filesProp ?? ownFiles;\n // A render the controlled list needs after a change, so that one the app\n // didn't take is undone.\n const [, rerender] = useReducer((n: number) => n + 1, 0);\n const [refusals, setRefusals] = useState<Refusal[]>(noRefusals);\n const [drag, setDrag] = useState<'over' | 'reject' | null>(null);\n const [announcements, setAnnouncements] =\n useState<Announcement[]>(noAnnouncements);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const listRef = useRef<HTMLUListElement>(null);\n // Set while Dropzone dispatches the input's own events, so its change\n // handler hands them on rather than reading them as a pick.\n const dispatchingRef = useRef(false);\n // The row a removal emptied, whose neighbour takes focus.\n const removedRowRef = useRef<number | null>(null);\n const announcedRef = useRef(0);\n // What the input held when it was last clicked (Enter and Space click it\n // too), which a pick adds to: by the time the pick's change arrives, the\n // browser has replaced the input's files with the picked ones.\n const pickBaseRef = useRef<File[] | null>(null);\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current =\n node;\n }\n },\n [ref]\n );\n\n const formatNumber = useNumberFormat();\n const tokens = acceptTokens(accept);\n const sizeText = (bytes: number) => formatFileSize(bytes, formatNumber);\n const countText = (count: number) =>\n formatNumber ? formatNumber(count) : String(count);\n\n // The files a pick, drop or paste builds on, and a removal takes one from.\n // Controlled, that's `files`. Uncontrolled, it's the input itself rather\n // than the list: a script can rewrite the input through the ref, emptying\n // it with `value = ''` or setting its `files`, and no event reports that,\n // so the list catches up only at the next change. Where there's no\n // DataTransfer to write the input with, the list is all there is.\n const current = (): File[] =>\n controlled || typeof DataTransfer !== 'function'\n ? files\n : Array.from((inputRef.current as HTMLInputElement).files as FileList);\n\n const messageFor = (refusal: Refusal): string => {\n const { file, code } = refusal;\n if (rejectionMessage) return rejectionMessage({ file, code });\n if (code === 'file-too-large') {\n return `${file.name}: larger than ${sizeText(maxSize as number)}`;\n }\n if (code === 'too-many-files') {\n const most = multiple ? (maxFiles as number) : 1;\n return `${file.name}: only ${most === 1 ? 'one file' : `${countText(most)} files`}`;\n }\n return refusal.folder\n ? `${file.name}: folders can't be added`\n : `${file.name}: only ${orList(typeNames(tokens))} files`;\n };\n\n const announce = (texts: string[]) => {\n if (texts.length === 0) return;\n const batch = ++announcedRef.current;\n setAnnouncements(texts.map((text, i) => ({ id: `${batch}-${i}`, text })));\n };\n\n /**\n * Makes `next` the chosen files: writes them to the input, and when they\n * differ from the list, dispatches the input's `input` and `change` and\n * reports the new list.\n */\n const commit = (next: File[]) => {\n pickBaseRef.current = null;\n const input = inputRef.current as HTMLInputElement;\n if (!sameFiles(input.files, next)) writeFiles(input, next);\n if (sameFiles(files, next)) return;\n if (controlled) rerender();\n else setOwnFiles(next);\n onFilesChange?.(next);\n dispatchingRef.current = true;\n try {\n input.dispatchEvent(new Event('input', { bubbles: true }));\n input.dispatchEvent(new Event('change', { bubbles: true }));\n } finally {\n dispatchingRef.current = false;\n }\n };\n\n /** Checks the files a pick, drop or paste brings, and takes those that pass. */\n const take = (incoming: Incoming[], base: File[] = current()) => {\n const kept = multiple ? base : noFiles;\n const room = multiple ? (maxFiles ?? Infinity) - kept.length : 1;\n const added: File[] = [];\n const refused: Refusal[] = [];\n for (const { file, folder } of incoming) {\n const code: DropzoneRejectionCode | null =\n folder || !accepts(tokens, file.name, file.type)\n ? 'file-invalid-type'\n : maxSize !== undefined && file.size > maxSize\n ? 'file-too-large'\n : null;\n if (code) {\n refused.push({ file, code, folder });\n } else if (\n multiple &&\n [...kept, ...added].some(f => sameFile(f, file))\n ) {\n // Already in the list: nothing to add, and nothing wrong.\n } else if (added.length >= room) {\n refused.push({ file, code: 'too-many-files', folder });\n } else {\n added.push(file);\n }\n }\n setRefusals(refused.length > 0 ? refused : noRefusals);\n if (refused.length > 0) {\n onReject?.(refused.map(({ file, code }) => ({ file, code })));\n }\n commit(added.length > 0 ? [...kept, ...added] : base);\n const addedText =\n added.length === 0\n ? []\n : [\n addedMessage\n ? addedMessage(added)\n : added.length === 1\n ? `${added[0].name} added`\n : `${countText(added.length)} files added`,\n ];\n announce([...addedText, ...refused.map(messageFor)]);\n };\n\n const remove = (index: number) => {\n const file = files[index];\n removedRowRef.current = index;\n commit(current().filter(held => !sameFile(held, file)));\n announce([\n removedMessage ? removedMessage(file) : `${file.name} removed`,\n ]);\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (dispatchingRef.current) {\n onChange?.(event);\n return;\n }\n // A pick: the browser has put the picked files in the input. They're\n // added to what it held when it was clicked, or, for a picker opened\n // with showPicker(), which clicks nothing, to the list. With none (a\n // cancelled pick, in a browser that clears it), that stays.\n const base = pickBaseRef.current ?? files;\n const picked = Array.from(event.target.files ?? []);\n if (picked.length === 0) commit(base);\n else\n take(\n picked.map(file => ({ file, folder: false })),\n base\n );\n };\n\n const handleClick = (event: React.MouseEvent<HTMLInputElement>) => {\n onClick?.(event);\n pickBaseRef.current = current();\n };\n\n // While files are dragged over the input it's cancelled, which makes the\n // input the drop target and keeps the browser's own drop from running.\n // Disabled, it refuses the drop, so the browser doesn't open the file.\n const handleDragOver = (event: React.DragEvent<HTMLInputElement>) => {\n (event.type === 'dragenter' ? onDragEnter : onDragOver)?.(event);\n if (!carriesFiles(event.dataTransfer)) return;\n event.preventDefault();\n if (disabled) {\n event.dataTransfer.dropEffect = 'none';\n return;\n }\n event.dataTransfer.dropEffect = 'copy';\n // Only the dragged files' types can be read, so a file is known to be\n // refused only when `accept` names no extension and its type is known.\n const room = multiple ? (maxFiles ?? Infinity) - current().length : 1;\n const types = Array.from(event.dataTransfer.items ?? [])\n .filter(item => item.kind === 'file')\n .map(item => item.type);\n const refused =\n room <= 0 ||\n (types.length > 0 &&\n tokens.length > 0 &&\n !tokens.some(token => token[0] === '.') &&\n types.every(type => type !== '' && !accepts(tokens, '', type)));\n setDrag(refused ? 'reject' : 'over');\n };\n\n const handleDragLeave = (event: React.DragEvent<HTMLInputElement>) => {\n onDragLeave?.(event);\n setDrag(null);\n };\n\n const handleDrop = (event: React.DragEvent<HTMLInputElement>) => {\n onDrop?.(event);\n setDrag(null);\n if (!carriesFiles(event.dataTransfer)) return;\n event.preventDefault();\n if (!disabled) take(incomingFrom(event.dataTransfer));\n };\n\n const handlePaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n onPaste?.(event);\n if (!allowPaste || disabled) return;\n const incoming = incomingFrom(event.clipboardData);\n if (incoming.length === 0) return;\n event.preventDefault();\n take(incoming);\n };\n\n // A controlled list: the input follows `files`, and a change the app\n // didn't take is undone.\n useEffect(() => {\n const input = inputRef.current;\n if (controlled && input && !sameFiles(input.files, files)) {\n writeFiles(input, files);\n }\n });\n\n // After a removal, focus goes to the remove button that took the removed\n // one's place, else the one before, else the input.\n useEffect(() => {\n const row = removedRowRef.current;\n if (row === null) return;\n removedRowRef.current = null;\n const buttons = listRef.current?.querySelectorAll('button') ?? [];\n const next = buttons[Math.min(row, buttons.length - 1)];\n (next ?? inputRef.current)?.focus();\n });\n\n // A reset of the input's form empties the input, so the list and the\n // refusals go too. The reset event fires before the form resets, and a\n // listener after this one can still cancel it, so the list is cleared a\n // task later, and only if the reset went ahead.\n const latestRef = useRef({ files, controlled, onFilesChange });\n useEffect(() => {\n latestRef.current = { files, controlled, onFilesChange };\n });\n const formAttribute = props.form;\n useEffect(() => {\n const form = inputRef.current?.form;\n if (!form) return undefined;\n let timer: ReturnType<typeof setTimeout> | undefined;\n const onReset = (event: Event) => {\n timer = setTimeout(() => {\n if (event.defaultPrevented) return;\n const latest = latestRef.current;\n pickBaseRef.current = null;\n setRefusals(noRefusals);\n if (latest.files.length === 0) return;\n if (latest.controlled) rerender();\n else setOwnFiles(noFiles);\n latest.onFilesChange?.(noFiles);\n });\n };\n form.addEventListener('reset', onReset);\n return () => {\n form.removeEventListener('reset', onReset);\n clearTimeout(timer);\n };\n }, [formAttribute]);\n\n // A file dropped just outside the zone would open in the tab. The guard\n // cancels a file drag anywhere nothing else takes it, leaving alone\n // enabled file inputs and editable fields, which take drops of their own,\n // and drops something else already handled. It reads the event's real\n // target, so a file input inside a shadow root is left alone too.\n useEffect(() => {\n if (!preventDocumentDrop) return undefined;\n const guard = (event: DragEvent) => {\n if (event.defaultPrevented || !carriesFiles(event.dataTransfer)) {\n return;\n }\n const target = event.composedPath()[0];\n if (\n target instanceof Element &&\n target.closest(\n 'input[type=\"file\"]:not(:disabled), textarea, [contenteditable]:not([contenteditable=\"false\"])'\n )\n ) {\n return;\n }\n event.preventDefault();\n if (event.type === 'dragover') event.dataTransfer.dropEffect = 'none';\n };\n document.addEventListener('dragover', guard);\n document.addEventListener('drop', guard);\n return () => {\n document.removeEventListener('dragover', guard);\n document.removeEventListener('drop', guard);\n };\n }, [preventDocumentDrop]);\n\n const warnsMaxFiles = maxFiles !== undefined && !multiple;\n useEffect(() => {\n if (warnsMaxFiles) {\n warnOnce(\n 'Dropzone:maxFiles-without-multiple',\n '[bestax-bulma] <Dropzone maxFiles> takes effect only with ' +\n 'multiple. Without it, each new file replaces the one chosen.'\n );\n }\n }, [warnsMaxFiles]);\n\n const insideField = useInsideField();\n const insideControl = useInsideControl();\n const ownField = rendersOwnField('Dropzone', {\n insideField,\n insideControl,\n label,\n message,\n horizontal,\n fieldClassName,\n });\n const { controlId, fieldLabelProps } = useAutoLabelId({\n label,\n id: props.id,\n labelProps,\n rendersLabel: ownField,\n });\n const { classPrefix } = useConfig();\n const pcn = (...args: Parameters<typeof classNames>) =>\n prefixedClassNames(classPrefix, ...args);\n // The input takes `controlId`, so `id` stays out of the spread, where an\n // undefined `id` key would wipe the id the label points at.\n const { id: _id, ...inputProps } = props;\n const { bulmaHelperClasses, rest } = useBulmaClasses(inputProps);\n\n const baseId = useId();\n const hintId = `${baseId}-hint`;\n const refusalsId = `${baseId}-refusals`;\n const messageId = `${baseId}-message`;\n const describedBy =\n [\n ariaDescribedBy,\n hint ? hintId : undefined,\n refusals.length > 0 ? refusalsId : undefined,\n message ? messageId : undefined,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const rootClass = usePrefixedClassNames('dropzone', {\n 'is-dragover': drag === 'over',\n 'is-drag-reject': drag === 'reject',\n 'is-disabled': disabled,\n });\n const zoneClass = usePrefixedClassNames(\n 'file',\n 'is-boxed',\n 'is-fullwidth',\n {\n [`is-${color}`]: !!color,\n [`is-${size}`]: !!size,\n }\n );\n const helpClass = usePrefixedClassNames('help', {\n [`is-${messageColor}`]: !!messageColor,\n });\n\n // Each row's key, from the file's details, which the list keeps unique.\n const seen = new Map<string, number>();\n const keyOf = (file: File) => {\n const key = `${file.name}:${file.size}:${file.lastModified}`;\n const count = seen.get(key) ?? 0;\n seen.set(key, count + 1);\n return count === 0 ? key : `${key}:${count}`;\n };\n\n const dropzoneElement = (\n <div className={classNames(rootClass, bulmaHelperClasses, className)}>\n <div className={zoneClass}>\n <label className={pcn('file-label')}>\n <input\n {...rest}\n ref={setInputRef}\n className={pcn('file-input')}\n type=\"file\"\n id={controlId}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n aria-describedby={describedBy}\n onChange={handleChange}\n onClick={handleClick}\n onDragEnter={handleDragOver}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onPaste={handlePaste}\n />\n <span className={pcn('file-cta')}>\n {icon && <span className={pcn('file-icon')}>{icon}</span>}\n <span className={pcn('file-label')}>\n {buttonLabel ||\n (multiple ? 'Choose or drop files' : 'Choose or drop a file')}\n </span>\n </span>\n </label>\n </div>\n {hint && (\n <p id={hintId} className={pcn('help', 'dropzone-hint')}>\n {hint}\n </p>\n )}\n {showFileList && files.length > 0 && (\n <ul ref={listRef} className={pcn('dropzone-list')}>\n {files.map((file, index) => (\n <li key={keyOf(file)} className={pcn('dropzone-item')}>\n <span className={pcn('dropzone-name')}>{file.name}</span>\n <span className={pcn('dropzone-size')}>\n {sizeText(file.size)}\n </span>\n {!disabled && (\n <Delete\n size=\"small\"\n ariaLabel={\n removeLabel ? removeLabel(file) : `Remove ${file.name}`\n }\n onClick={() => remove(index)}\n />\n )}\n </li>\n ))}\n </ul>\n )}\n {refusals.length > 0 && (\n <div id={refusalsId} className={pcn('dropzone-rejections')}>\n {refusals.map((refusal, index) => (\n <p key={index} className={pcn('help', 'is-danger')}>\n {messageFor(refusal)}\n </p>\n ))}\n </div>\n )}\n <StatusRegion items={announcements} describe={describeAnnouncement} />\n </div>\n );\n\n const messageEl = message ? (\n <p id={messageId} className={helpClass}>\n {message}\n </p>\n ) : null;\n\n if (ownField) {\n return (\n <Field\n label={label}\n labelSize={labelSize}\n labelProps={fieldLabelProps}\n horizontal={horizontal}\n className={fieldClassName}\n >\n {dropzoneElement}\n {messageEl}\n </Field>\n );\n }\n\n return (\n <>\n {dropzoneElement}\n {messageEl}\n </>\n );\n }\n);\n\nDropzone.displayName = 'Dropzone';\n\nexport default Dropzone;\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
|
package/dist/esm/form/Field.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/* @allxsmith/bestax-bulma — AI agents: see AGENTS.md in the package root, or https://bestax.io/llms.txt */
|
|
2
|
+
'use client';
|
|
2
3
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
4
|
import React, { useId, useMemo, useRef, useState, useCallback } from 'react';
|
|
4
5
|
import { usePrefixedClassNames, classNames } from '../helpers/classNames.js';
|