@mortenbrudvik/waveui 0.7.0 → 0.8.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/README.md +395 -132
- package/dist/components/button/Button.cjs +1 -1
- package/dist/components/button/Button.cjs.map +1 -1
- package/dist/components/button/Button.mjs +36 -35
- package/dist/components/button/Button.mjs.map +1 -1
- package/dist/components/button/Button.slots.cjs +1 -1
- package/dist/components/button/Button.slots.cjs.map +1 -1
- package/dist/components/button/Button.slots.mjs +31 -21
- package/dist/components/button/Button.slots.mjs.map +1 -1
- package/dist/components/button/CompoundButton.cjs +1 -1
- package/dist/components/button/CompoundButton.cjs.map +1 -1
- package/dist/components/button/CompoundButton.mjs +31 -29
- package/dist/components/button/CompoundButton.mjs.map +1 -1
- package/dist/components/button/Link.cjs +1 -1
- package/dist/components/button/Link.cjs.map +1 -1
- package/dist/components/button/Link.mjs +24 -23
- package/dist/components/button/Link.mjs.map +1 -1
- package/dist/components/button/MenuButton.cjs +1 -1
- package/dist/components/button/MenuButton.cjs.map +1 -1
- package/dist/components/button/MenuButton.mjs +29 -28
- package/dist/components/button/MenuButton.mjs.map +1 -1
- package/dist/components/button/SplitButton.cjs +1 -1
- package/dist/components/button/SplitButton.cjs.map +1 -1
- package/dist/components/button/SplitButton.mjs +46 -45
- package/dist/components/button/SplitButton.mjs.map +1 -1
- package/dist/components/button/ToggleButton.cjs +1 -1
- package/dist/components/button/ToggleButton.cjs.map +1 -1
- package/dist/components/button/ToggleButton.mjs +38 -35
- package/dist/components/button/ToggleButton.mjs.map +1 -1
- package/dist/components/button/Toolbar.cjs +1 -1
- package/dist/components/button/Toolbar.cjs.map +1 -1
- package/dist/components/button/Toolbar.mjs +43 -42
- package/dist/components/button/Toolbar.mjs.map +1 -1
- package/dist/components/button/Toolbar.parts.cjs +1 -1
- package/dist/components/button/Toolbar.parts.cjs.map +1 -1
- package/dist/components/button/Toolbar.parts.mjs +76 -81
- package/dist/components/button/Toolbar.parts.mjs.map +1 -1
- package/dist/components/data-display/Avatar.cjs +1 -1
- package/dist/components/data-display/Avatar.cjs.map +1 -1
- package/dist/components/data-display/Avatar.mjs +72 -67
- package/dist/components/data-display/Avatar.mjs.map +1 -1
- package/dist/components/data-display/AvatarGroup.cjs +1 -1
- package/dist/components/data-display/AvatarGroup.cjs.map +1 -1
- package/dist/components/data-display/AvatarGroup.mjs +89 -88
- package/dist/components/data-display/AvatarGroup.mjs.map +1 -1
- package/dist/components/data-display/Badge.cjs +1 -1
- package/dist/components/data-display/Badge.cjs.map +1 -1
- package/dist/components/data-display/Badge.mjs +17 -16
- package/dist/components/data-display/Badge.mjs.map +1 -1
- package/dist/components/data-display/CounterBadge.cjs +1 -1
- package/dist/components/data-display/CounterBadge.cjs.map +1 -1
- package/dist/components/data-display/CounterBadge.mjs +18 -17
- package/dist/components/data-display/CounterBadge.mjs.map +1 -1
- package/dist/components/data-display/Divider.cjs +1 -1
- package/dist/components/data-display/Divider.cjs.map +1 -1
- package/dist/components/data-display/Divider.mjs +31 -30
- package/dist/components/data-display/Divider.mjs.map +1 -1
- package/dist/components/data-display/Image.cjs +1 -1
- package/dist/components/data-display/Image.cjs.map +1 -1
- package/dist/components/data-display/Image.mjs +16 -15
- package/dist/components/data-display/Image.mjs.map +1 -1
- package/dist/components/data-display/InfoLabel.cjs +1 -1
- package/dist/components/data-display/InfoLabel.cjs.map +1 -1
- package/dist/components/data-display/InfoLabel.mjs +74 -73
- package/dist/components/data-display/InfoLabel.mjs.map +1 -1
- package/dist/components/data-display/List.cjs +1 -1
- package/dist/components/data-display/List.cjs.map +1 -1
- package/dist/components/data-display/List.mjs +175 -174
- package/dist/components/data-display/List.mjs.map +1 -1
- package/dist/components/data-display/Persona.cjs +1 -1
- package/dist/components/data-display/Persona.cjs.map +1 -1
- package/dist/components/data-display/Persona.mjs +31 -29
- package/dist/components/data-display/Persona.mjs.map +1 -1
- package/dist/components/data-display/PresenceBadge.cjs +1 -1
- package/dist/components/data-display/PresenceBadge.cjs.map +1 -1
- package/dist/components/data-display/PresenceBadge.mjs +25 -24
- package/dist/components/data-display/PresenceBadge.mjs.map +1 -1
- package/dist/components/data-display/Tag.cjs +1 -1
- package/dist/components/data-display/Tag.cjs.map +1 -1
- package/dist/components/data-display/Tag.mjs +87 -82
- package/dist/components/data-display/Tag.mjs.map +1 -1
- package/dist/components/feedback/MessageBar.cjs +1 -1
- package/dist/components/feedback/MessageBar.cjs.map +1 -1
- package/dist/components/feedback/MessageBar.mjs +129 -71
- package/dist/components/feedback/MessageBar.mjs.map +1 -1
- package/dist/components/feedback/MessageBar.parts.cjs +2 -0
- package/dist/components/feedback/MessageBar.parts.cjs.map +1 -0
- package/dist/components/feedback/MessageBar.parts.mjs +84 -0
- package/dist/components/feedback/MessageBar.parts.mjs.map +1 -0
- package/dist/components/feedback/MessageBar.reflow.cjs +2 -0
- package/dist/components/feedback/MessageBar.reflow.cjs.map +1 -0
- package/dist/components/feedback/MessageBar.reflow.mjs +74 -0
- package/dist/components/feedback/MessageBar.reflow.mjs.map +1 -0
- package/dist/components/feedback/MessageBar.status.cjs +1 -1
- package/dist/components/feedback/MessageBar.status.cjs.map +1 -1
- package/dist/components/feedback/MessageBar.status.mjs +2 -1
- package/dist/components/feedback/MessageBar.status.mjs.map +1 -1
- package/dist/components/feedback/ProgressBar.cjs +1 -1
- package/dist/components/feedback/ProgressBar.cjs.map +1 -1
- package/dist/components/feedback/ProgressBar.mjs +44 -43
- package/dist/components/feedback/ProgressBar.mjs.map +1 -1
- package/dist/components/feedback/Skeleton.cjs +1 -1
- package/dist/components/feedback/Skeleton.cjs.map +1 -1
- package/dist/components/feedback/Skeleton.mjs +26 -24
- package/dist/components/feedback/Skeleton.mjs.map +1 -1
- package/dist/components/feedback/Spinner.cjs +1 -1
- package/dist/components/feedback/Spinner.cjs.map +1 -1
- package/dist/components/feedback/Spinner.mjs +32 -31
- package/dist/components/feedback/Spinner.mjs.map +1 -1
- package/dist/components/feedback/Toast.cjs +1 -1
- package/dist/components/feedback/Toast.cjs.map +1 -1
- package/dist/components/feedback/Toast.context.cjs +2 -0
- package/dist/components/feedback/Toast.context.cjs.map +1 -0
- package/dist/components/feedback/Toast.context.mjs +23 -0
- package/dist/components/feedback/Toast.context.mjs.map +1 -0
- package/dist/components/feedback/Toast.mjs +10 -342
- package/dist/components/feedback/Toast.mjs.map +1 -1
- package/dist/components/feedback/Toast.parts.cjs +2 -0
- package/dist/components/feedback/Toast.parts.cjs.map +1 -0
- package/dist/components/feedback/Toast.parts.mjs +98 -0
- package/dist/components/feedback/Toast.parts.mjs.map +1 -0
- package/dist/components/feedback/Toast.root.cjs +2 -0
- package/dist/components/feedback/Toast.root.cjs.map +1 -0
- package/dist/components/feedback/Toast.root.mjs +109 -0
- package/dist/components/feedback/Toast.root.mjs.map +1 -0
- package/dist/components/feedback/Toaster.cjs +2 -0
- package/dist/components/feedback/Toaster.cjs.map +1 -0
- package/dist/components/feedback/Toaster.mjs +564 -0
- package/dist/components/feedback/Toaster.mjs.map +1 -0
- package/dist/components/input/AlphaSlider.cjs +2 -0
- package/dist/components/input/AlphaSlider.cjs.map +1 -0
- package/dist/components/input/AlphaSlider.mjs +115 -0
- package/dist/components/input/AlphaSlider.mjs.map +1 -0
- package/dist/components/input/Checkbox.cjs +1 -1
- package/dist/components/input/Checkbox.cjs.map +1 -1
- package/dist/components/input/Checkbox.mjs +47 -46
- package/dist/components/input/Checkbox.mjs.map +1 -1
- package/dist/components/input/ColorArea.cjs +2 -0
- package/dist/components/input/ColorArea.cjs.map +1 -0
- package/dist/components/input/ColorArea.mjs +204 -0
- package/dist/components/input/ColorArea.mjs.map +1 -0
- package/dist/components/input/ColorPicker.cjs +5 -5
- package/dist/components/input/ColorPicker.cjs.map +1 -1
- package/dist/components/input/ColorPicker.mjs +142 -165
- package/dist/components/input/ColorPicker.mjs.map +1 -1
- package/dist/components/input/ColorPicker.parts.cjs +2 -0
- package/dist/components/input/ColorPicker.parts.cjs.map +1 -0
- package/dist/components/input/ColorPicker.parts.mjs +192 -0
- package/dist/components/input/ColorPicker.parts.mjs.map +1 -0
- package/dist/components/input/ColorSlider.cjs +2 -0
- package/dist/components/input/ColorSlider.cjs.map +1 -0
- package/dist/components/input/ColorSlider.mjs +138 -0
- package/dist/components/input/ColorSlider.mjs.map +1 -0
- package/dist/components/input/Combobox.cjs +1 -1
- package/dist/components/input/Combobox.cjs.map +1 -1
- package/dist/components/input/Combobox.expand.cjs +1 -1
- package/dist/components/input/Combobox.expand.cjs.map +1 -1
- package/dist/components/input/Combobox.expand.mjs +9 -9
- package/dist/components/input/Combobox.expand.mjs.map +1 -1
- package/dist/components/input/Combobox.mjs +90 -85
- package/dist/components/input/Combobox.mjs.map +1 -1
- package/dist/components/input/DatePicker.cjs +1 -1
- package/dist/components/input/DatePicker.cjs.map +1 -1
- package/dist/components/input/DatePicker.mjs +186 -185
- package/dist/components/input/DatePicker.mjs.map +1 -1
- package/dist/components/input/Dropdown.cjs +1 -1
- package/dist/components/input/Dropdown.cjs.map +1 -1
- package/dist/components/input/Dropdown.mjs +71 -68
- package/dist/components/input/Dropdown.mjs.map +1 -1
- package/dist/components/input/Field.cjs +1 -1
- package/dist/components/input/Field.cjs.map +1 -1
- package/dist/components/input/Field.mjs +113 -112
- package/dist/components/input/Field.mjs.map +1 -1
- package/dist/components/input/Input.cjs +1 -1
- package/dist/components/input/Input.cjs.map +1 -1
- package/dist/components/input/Input.mjs +55 -54
- package/dist/components/input/Input.mjs.map +1 -1
- package/dist/components/input/Label.cjs +1 -1
- package/dist/components/input/Label.cjs.map +1 -1
- package/dist/components/input/Label.mjs +12 -11
- package/dist/components/input/Label.mjs.map +1 -1
- package/dist/components/input/Option.cjs +1 -1
- package/dist/components/input/Option.cjs.map +1 -1
- package/dist/components/input/Option.mjs +100 -98
- package/dist/components/input/Option.mjs.map +1 -1
- package/dist/components/input/RadioGroup.cjs +1 -1
- package/dist/components/input/RadioGroup.cjs.map +1 -1
- package/dist/components/input/RadioGroup.mjs +89 -88
- package/dist/components/input/RadioGroup.mjs.map +1 -1
- package/dist/components/input/Rating.cjs +1 -1
- package/dist/components/input/Rating.cjs.map +1 -1
- package/dist/components/input/Rating.mjs +110 -109
- package/dist/components/input/Rating.mjs.map +1 -1
- package/dist/components/input/SearchBox.cjs +1 -1
- package/dist/components/input/SearchBox.cjs.map +1 -1
- package/dist/components/input/SearchBox.mjs +118 -119
- package/dist/components/input/SearchBox.mjs.map +1 -1
- package/dist/components/input/Select.cjs +1 -1
- package/dist/components/input/Select.cjs.map +1 -1
- package/dist/components/input/Select.mjs +25 -24
- package/dist/components/input/Select.mjs.map +1 -1
- package/dist/components/input/Slider.cjs +1 -1
- package/dist/components/input/Slider.cjs.map +1 -1
- package/dist/components/input/Slider.mjs +47 -46
- package/dist/components/input/Slider.mjs.map +1 -1
- package/dist/components/input/SpinButton.cjs +1 -1
- package/dist/components/input/SpinButton.cjs.map +1 -1
- package/dist/components/input/SpinButton.mjs +76 -75
- package/dist/components/input/SpinButton.mjs.map +1 -1
- package/dist/components/input/SwatchPicker.cjs +1 -1
- package/dist/components/input/SwatchPicker.cjs.map +1 -1
- package/dist/components/input/SwatchPicker.mjs +38 -37
- package/dist/components/input/SwatchPicker.mjs.map +1 -1
- package/dist/components/input/Switch.cjs +1 -1
- package/dist/components/input/Switch.cjs.map +1 -1
- package/dist/components/input/Switch.mjs +65 -64
- package/dist/components/input/Switch.mjs.map +1 -1
- package/dist/components/input/TagPicker.cjs +1 -1
- package/dist/components/input/TagPicker.cjs.map +1 -1
- package/dist/components/input/TagPicker.mjs +161 -157
- package/dist/components/input/TagPicker.mjs.map +1 -1
- package/dist/components/input/Textarea.cjs +1 -1
- package/dist/components/input/Textarea.cjs.map +1 -1
- package/dist/components/input/Textarea.mjs +24 -23
- package/dist/components/input/Textarea.mjs.map +1 -1
- package/dist/components/input/TimePicker.cjs +1 -1
- package/dist/components/input/TimePicker.cjs.map +1 -1
- package/dist/components/input/TimePicker.mjs +202 -199
- package/dist/components/input/TimePicker.mjs.map +1 -1
- package/dist/components/input/colorName.cjs +2 -0
- package/dist/components/input/colorName.cjs.map +1 -0
- package/dist/components/input/colorName.mjs +30 -0
- package/dist/components/input/colorName.mjs.map +1 -0
- package/dist/components/input/colorUtils.cjs +1 -1
- package/dist/components/input/colorUtils.cjs.map +1 -1
- package/dist/components/input/colorUtils.mjs +154 -56
- package/dist/components/input/colorUtils.mjs.map +1 -1
- package/dist/components/layout/Accordion.cjs +1 -1
- package/dist/components/layout/Accordion.cjs.map +1 -1
- package/dist/components/layout/Accordion.mjs +130 -129
- package/dist/components/layout/Accordion.mjs.map +1 -1
- package/dist/components/layout/Card.cjs +1 -1
- package/dist/components/layout/Card.cjs.map +1 -1
- package/dist/components/layout/Card.mjs +78 -77
- package/dist/components/layout/Card.mjs.map +1 -1
- package/dist/components/layout/Carousel.cjs +1 -1
- package/dist/components/layout/Carousel.cjs.map +1 -1
- package/dist/components/layout/Carousel.mjs +111 -110
- package/dist/components/layout/Carousel.mjs.map +1 -1
- package/dist/components/layout/Flex.cjs +1 -1
- package/dist/components/layout/Flex.cjs.map +1 -1
- package/dist/components/layout/Flex.mjs +22 -21
- package/dist/components/layout/Flex.mjs.map +1 -1
- package/dist/components/layout/Grid.cjs +1 -1
- package/dist/components/layout/Grid.cjs.map +1 -1
- package/dist/components/layout/Grid.mjs +19 -18
- package/dist/components/layout/Grid.mjs.map +1 -1
- package/dist/components/layout/Overflow.cjs +1 -1
- package/dist/components/layout/Overflow.cjs.map +1 -1
- package/dist/components/layout/Overflow.mjs +92 -91
- package/dist/components/layout/Overflow.mjs.map +1 -1
- package/dist/components/layout/Stack.cjs +1 -1
- package/dist/components/layout/Stack.cjs.map +1 -1
- package/dist/components/layout/Stack.mjs +14 -13
- package/dist/components/layout/Stack.mjs.map +1 -1
- package/dist/components/layout/TabList.cjs +1 -1
- package/dist/components/layout/TabList.cjs.map +1 -1
- package/dist/components/layout/TabList.mjs +118 -117
- package/dist/components/layout/TabList.mjs.map +1 -1
- package/dist/components/layout/Tree.cjs +1 -1
- package/dist/components/layout/Tree.cjs.map +1 -1
- package/dist/components/layout/Tree.context.cjs +2 -0
- package/dist/components/layout/Tree.context.cjs.map +1 -0
- package/dist/components/layout/Tree.context.mjs +33 -0
- package/dist/components/layout/Tree.context.mjs.map +1 -0
- package/dist/components/layout/Tree.core.cjs +2 -0
- package/dist/components/layout/Tree.core.cjs.map +1 -0
- package/dist/components/layout/Tree.core.mjs +416 -0
- package/dist/components/layout/Tree.core.mjs.map +1 -0
- package/dist/components/layout/Tree.itemPersonaLayout.cjs +2 -0
- package/dist/components/layout/Tree.itemPersonaLayout.cjs.map +1 -0
- package/dist/components/layout/Tree.itemPersonaLayout.mjs +46 -0
- package/dist/components/layout/Tree.itemPersonaLayout.mjs.map +1 -0
- package/dist/components/layout/Tree.mjs +7 -215
- package/dist/components/layout/Tree.mjs.map +1 -1
- package/dist/components/layout/Tree.selection.cjs +2 -0
- package/dist/components/layout/Tree.selection.cjs.map +1 -0
- package/dist/components/layout/Tree.selection.mjs +73 -0
- package/dist/components/layout/Tree.selection.mjs.map +1 -0
- package/dist/components/navigation/Breadcrumb.cjs +1 -1
- package/dist/components/navigation/Breadcrumb.cjs.map +1 -1
- package/dist/components/navigation/Breadcrumb.mjs +76 -75
- package/dist/components/navigation/Breadcrumb.mjs.map +1 -1
- package/dist/components/navigation/Menu.group.cjs +1 -1
- package/dist/components/navigation/Menu.group.cjs.map +1 -1
- package/dist/components/navigation/Menu.group.mjs +39 -37
- package/dist/components/navigation/Menu.group.mjs.map +1 -1
- package/dist/components/navigation/Menu.items.cjs +1 -1
- package/dist/components/navigation/Menu.items.cjs.map +1 -1
- package/dist/components/navigation/Menu.items.mjs +67 -61
- package/dist/components/navigation/Menu.items.mjs.map +1 -1
- package/dist/components/navigation/Menu.link.cjs +1 -1
- package/dist/components/navigation/Menu.link.cjs.map +1 -1
- package/dist/components/navigation/Menu.link.mjs +34 -28
- package/dist/components/navigation/Menu.link.mjs.map +1 -1
- package/dist/components/navigation/Menu.popover.cjs +1 -1
- package/dist/components/navigation/Menu.popover.cjs.map +1 -1
- package/dist/components/navigation/Menu.popover.mjs +110 -109
- package/dist/components/navigation/Menu.popover.mjs.map +1 -1
- package/dist/components/navigation/Menu.root.cjs +1 -1
- package/dist/components/navigation/Menu.root.cjs.map +1 -1
- package/dist/components/navigation/Menu.root.mjs +171 -170
- package/dist/components/navigation/Menu.root.mjs.map +1 -1
- package/dist/components/navigation/Menu.selectable.cjs +1 -1
- package/dist/components/navigation/Menu.selectable.cjs.map +1 -1
- package/dist/components/navigation/Menu.selectable.mjs +85 -63
- package/dist/components/navigation/Menu.selectable.mjs.map +1 -1
- package/dist/components/navigation/Menu.splitGroup.cjs +1 -1
- package/dist/components/navigation/Menu.splitGroup.cjs.map +1 -1
- package/dist/components/navigation/Menu.splitGroup.mjs +27 -26
- package/dist/components/navigation/Menu.splitGroup.mjs.map +1 -1
- package/dist/components/navigation/Menu.trigger.cjs +1 -1
- package/dist/components/navigation/Menu.trigger.cjs.map +1 -1
- package/dist/components/navigation/Menu.trigger.mjs +6 -6
- package/dist/components/navigation/Nav.cjs +1 -1
- package/dist/components/navigation/Nav.cjs.map +1 -1
- package/dist/components/navigation/Nav.mjs +170 -155
- package/dist/components/navigation/Nav.mjs.map +1 -1
- package/dist/components/navigation/Pagination.cjs +1 -1
- package/dist/components/navigation/Pagination.cjs.map +1 -1
- package/dist/components/navigation/Pagination.mjs +73 -65
- package/dist/components/navigation/Pagination.mjs.map +1 -1
- package/dist/components/navigation/Stepper.cjs +1 -1
- package/dist/components/navigation/Stepper.cjs.map +1 -1
- package/dist/components/navigation/Stepper.mjs +110 -109
- package/dist/components/navigation/Stepper.mjs.map +1 -1
- package/dist/components/overlays/Dialog.cjs +1 -1
- package/dist/components/overlays/Dialog.cjs.map +1 -1
- package/dist/components/overlays/Dialog.mjs +109 -108
- package/dist/components/overlays/Dialog.mjs.map +1 -1
- package/dist/components/overlays/Drawer.cjs +1 -1
- package/dist/components/overlays/Drawer.cjs.map +1 -1
- package/dist/components/overlays/Drawer.mjs +110 -109
- package/dist/components/overlays/Drawer.mjs.map +1 -1
- package/dist/components/overlays/Popover.cjs +1 -1
- package/dist/components/overlays/Popover.cjs.map +1 -1
- package/dist/components/overlays/Popover.mjs +229 -227
- package/dist/components/overlays/Popover.mjs.map +1 -1
- package/dist/components/overlays/TeachingPopover.cjs +1 -1
- package/dist/components/overlays/TeachingPopover.cjs.map +1 -1
- package/dist/components/overlays/TeachingPopover.mjs +41 -37
- package/dist/components/overlays/TeachingPopover.mjs.map +1 -1
- package/dist/components/overlays/Tooltip.cjs +1 -1
- package/dist/components/overlays/Tooltip.cjs.map +1 -1
- package/dist/components/overlays/Tooltip.mjs +87 -86
- package/dist/components/overlays/Tooltip.mjs.map +1 -1
- package/dist/components/portal/Portal.cjs +1 -1
- package/dist/components/portal/Portal.cjs.map +1 -1
- package/dist/components/portal/Portal.mjs +33 -32
- package/dist/components/portal/Portal.mjs.map +1 -1
- package/dist/components/provider/WaveProvider.cjs +1 -1
- package/dist/components/provider/WaveProvider.cjs.map +1 -1
- package/dist/components/provider/WaveProvider.mjs +31 -30
- package/dist/components/provider/WaveProvider.mjs.map +1 -1
- package/dist/components/table/DataGrid.cjs +1 -1
- package/dist/components/table/DataGrid.cjs.map +1 -1
- package/dist/components/table/DataGrid.mjs +228 -227
- package/dist/components/table/DataGrid.mjs.map +1 -1
- package/dist/components/table/Table.cjs +1 -1
- package/dist/components/table/Table.cjs.map +1 -1
- package/dist/components/table/Table.mjs +60 -59
- package/dist/components/table/Table.mjs.map +1 -1
- package/dist/components/typography/Text.cjs +1 -1
- package/dist/components/typography/Text.cjs.map +1 -1
- package/dist/components/typography/Text.mjs +12 -11
- package/dist/components/typography/Text.mjs.map +1 -1
- package/dist/hooks/useMediaQuery.cjs +2 -0
- package/dist/hooks/useMediaQuery.cjs.map +1 -0
- package/dist/hooks/useMediaQuery.mjs +20 -0
- package/dist/hooks/useMediaQuery.mjs.map +1 -0
- package/dist/hooks/usePrefersReducedMotion.cjs +1 -1
- package/dist/hooks/usePrefersReducedMotion.cjs.map +1 -1
- package/dist/hooks/usePrefersReducedMotion.mjs +4 -18
- package/dist/hooks/usePrefersReducedMotion.mjs.map +1 -1
- package/dist/hooks/useRovingTabIndex.cjs +1 -1
- package/dist/hooks/useRovingTabIndex.cjs.map +1 -1
- package/dist/hooks/useRovingTabIndex.mjs +3 -3
- package/dist/hooks/useRovingTabIndex.mjs.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +2089 -102
- package/dist/index.d.ts +2089 -102
- package/dist/index.mjs +99 -87
- package/dist/lib/classNames.cjs +2 -0
- package/dist/lib/classNames.cjs.map +1 -0
- package/dist/lib/classNames.mjs +415 -0
- package/dist/lib/classNames.mjs.map +1 -0
- package/dist/lib/color.cjs +2 -0
- package/dist/lib/color.cjs.map +1 -0
- package/dist/lib/color.mjs +86 -0
- package/dist/lib/color.mjs.map +1 -0
- package/dist/lib/globalRegistry.cjs.map +1 -1
- package/dist/lib/globalRegistry.mjs.map +1 -1
- package/dist/lib/toaster.cjs +2 -0
- package/dist/lib/toaster.cjs.map +1 -0
- package/dist/lib/toaster.mjs +77 -0
- package/dist/lib/toaster.mjs.map +1 -0
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchBox.cjs","names":["Button","slotRendersContent","materialiseSlotContent","hasTextLabel","BUTTON_OWN_PROP_KEYS","renderSlot","placeButtonIcon","isElementOfType","getElementType","resolveSlot","slotWrapsDefaultContent","DismissIcon","React","useControllable","useMergedRefs","useFieldControl","isInvalidLook","observeTextLabel","hasRenderedTextLabel","mergeProps","cn","focusRing","mergedAriaDisabledClasses","inputFocusWithin","composeEventHandlers","SearchIcon","MERGED_DISABLED_FOCUSABLE_PROPS","require_runtime","require_cn","require_children","require_dev","require_slot","require_composeEventHandlers","require_useControllable","require_useMergedRefs","require_useFieldControl","require_styles","require_Button","require_icons","require_mergeProps","require_Button_slots","require_Input","require_useFormReset","require_labelInName","react","react_jsx_runtime","BUTTON_ONLY_KEYS","HANDLER_KEY","NAMING_KEYS","DEFAULT_CLEAR_LABEL","noop","INTERACTIVE_CONTENT","DEFAULT_DISMISS","isButtonType","type","splitButtonLike","hasChildren","children","content","literalTextLabel","buttonProps","key","value","props","iconNode","_children","resolveDismiss","node","dismiss","resolved","Component","contentProps","hasButtonProps","empty","contentChildren","SearchBox","controlledValue","ariaLabel","ariaLabelledBy","ariaDescribedBy","ariaInvalid","ariaRequired","ariaErrorMessage","ariaDetails","rest","onChange","setValue","defaultValue","onValueChange","next","inputRef","mergedInputRef","controlRef","form","fieldProps","invalidLook","dismissParts","dismissKind","handleClear","onClear","handleKeyDown","event","readOnly","disabled","handleRootMouseDown","input","root","target","control","slotOnClick","slotRef","slotButtonProps","hasOwnName","checksContent","labelTarget","setLabelTarget","subscribeToContent","contentHasTextLabel","namedByContent","clearRef","clearButtonProps","clearContent","hasBefore","contentBefore","hasAfter","contentAfter","className","onMouseDown","onKeyDown"],"sources":["../../../src/components/input/SearchBox.tsx"],"sourcesContent":["import * as React from 'react';\nimport { getElementType, isElementOfType } from '../../lib/children';\nimport { cn } from '../../lib/cn';\nimport { composeEventHandlers } from '../../lib/composeEventHandlers';\nimport { warnDeprecated, warnOnce } from '../../lib/dev';\nimport { DismissIcon, SearchIcon } from '../../lib/icons';\nimport { hasRenderedTextLabel, hasTextLabel, observeTextLabel } from '../../lib/labelInName';\nimport { mergeProps } from '../../lib/mergeProps';\nimport {\n materialiseSlotContent,\n renderSlot,\n resolveSlot,\n slotRendersContent,\n slotWrapsDefaultContent,\n} from '../../lib/slot';\nimport { focusRing, inputFocusWithin, inputInvalidWithin } from '../../lib/styles';\nimport type { Slot, SlotObject } from '../../lib/types';\nimport { useControllable } from '../../hooks/useControllable';\nimport { useFieldControl } from '../../hooks/useFieldControl';\nimport { useFormReset } from '../../hooks/useFormReset';\nimport { useMergedRefs } from '../../hooks/useMergedRefs';\nimport { Button } from '../button/Button';\nimport {\n BUTTON_OWN_PROP_KEYS,\n MERGED_DISABLED_FOCUSABLE_PROPS,\n mergedAriaDisabledClasses,\n placeButtonIcon,\n} from '../button/Button.slots';\nimport { isInvalidLook } from './Input';\n\n/**\n * Props that SearchBox routes to its `<input>` (C-ROUTING): the id, the ARIA naming/validation\n * attributes, native text-input attributes and the focus/keyboard handlers.\n */\nexport type SearchBoxInputProps = Pick<\n React.InputHTMLAttributes<HTMLInputElement>,\n | 'id'\n | 'aria-label'\n | 'aria-labelledby'\n | 'aria-describedby'\n | 'aria-invalid'\n | 'aria-required'\n | 'aria-errormessage'\n | 'aria-details'\n | 'name'\n | 'form'\n | 'required'\n | 'readOnly'\n | 'autoComplete'\n | 'autoFocus'\n | 'autoCapitalize'\n | 'autoCorrect'\n | 'inputMode'\n | 'enterKeyHint'\n | 'spellCheck'\n | 'maxLength'\n | 'minLength'\n | 'pattern'\n | 'tabIndex'\n | 'onFocus'\n | 'onBlur'\n | 'onKeyDown'\n | 'onKeyUp'\n>;\n\n/** Properties for the SearchBox component. */\nexport interface SearchBoxProps\n extends\n Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue' | keyof SearchBoxInputProps\n >,\n SearchBoxInputProps {\n /** Controlled search text value. */\n value?: string;\n /** Initial search text for uncontrolled usage (also what a form reset restores).\n * @default ''\n */\n defaultValue?: string;\n /** Called with the new search text when it changes (typing or clearing). */\n onValueChange?: (value: string) => void;\n /**\n * Called with the new search text when it changes.\n * @deprecated Use `onValueChange`. (`onChange` is reserved for native change events.)\n */\n onChange?: (value: string) => void;\n /**\n * Called when the user clears the search: with the clear button, or with Escape while there is\n * text (after `onValueChange('')`).\n */\n onClear?: () => void;\n /** Placeholder text shown when the input is empty.\n * @default 'Search'\n */\n placeholder?: string;\n /** Whether the search box is disabled and non-interactive. */\n disabled?: boolean;\n /**\n * Slot rendered before the text (replaces the default search icon). It takes the room it needs;\n * the text starts after it. A value that renders nothing (`null`, `false`, `''`, an empty array\n * or Fragment) keeps the default icon.\n */\n contentBefore?: Slot<'span'>;\n /**\n * Slot rendered after the text, before the clear button. It takes the room it needs; the text\n * ends before it. A value that renders nothing (`false`, `''`, an empty array or Fragment) is no\n * slot: nothing takes room.\n */\n contentAfter?: Slot<'span'>;\n /**\n * Content of the clear button (replaces the default dismiss icon). It always renders **inside**\n * the built-in `<button type=\"button\" aria-label=\"Clear search\">`, which clears the value, calls\n * `onClear` and moves focus back to the input. The slot cannot hide the clear button or leave\n * it empty: content that renders nothing (`null`, `false`, `true`, `''`, or an array, `Set`,\n * generator or Fragment of only those) keeps the default icon, and a slot object without\n * children (`{ className: 'text-error' }`) wraps the default icon in its element (not when it\n * brings markup of its own through `dangerouslySetInnerHTML`, or is a void or component element).\n *\n * A `<button>` element or a Wave `Button` passed here is not nested: its props are merged into\n * the built-in button (its `onClick` runs first; `preventDefault()` cancels the clear) and its\n * children become the content, with a development warning. A Wave `Button`'s own props are not\n * attributes: its `icon` becomes decorative content before its children (after them with\n * `iconPosition=\"after\"`), `disabledFocusable` makes the clear button unavailable but focusable\n * as on the Button (nothing is cleared), and `appearance` and `size` are ignored. The 0.4\n * button-object form (`{ as: 'button', onClick, … }` or an object with button props) is\n * **deprecated**: its button props are merged the same way. Pass icon content instead.\n *\n * Name (WCAG 2.5.3 Label in Name): content is decorative (`aria-hidden`), so the button keeps\n * the name \"Clear search\". An `aria-label`, `aria-labelledby` or `title` on the merged button or\n * on a slot object names the button instead (`{ children: 'Reset', 'aria-label': 'Reset' }`).\n * The children of a merged `<button>`/`Button` (or of `{ as: 'button' }`) are rendered as is:\n * when they render a text label (at least two letters or digits outside `aria-hidden`/`hidden`\n * content, text from components such as translations included), that text names the button;\n * an icon or a lone character (`X`, `×`) keeps \"Clear search\". Text hidden only with CSS still\n * counts as the label, so give a button with a responsive label an explicit `aria-label`.\n */\n dismiss?: Slot<'span'> | SlotObject<'button'>;\n /** Ref to the root `<div>`. */\n ref?: React.Ref<HTMLDivElement>;\n /** Ref to the `<input type=\"search\">` (the focusable control). */\n controlRef?: React.Ref<HTMLInputElement>;\n}\n\ntype UnknownProps = Record<string, unknown>;\n\n/** Attributes that only make sense on the clear `<button>` itself (merged onto it). */\nconst BUTTON_ONLY_KEYS: ReadonlySet<string> = new Set([\n 'type',\n 'disabled',\n 'form',\n 'formAction',\n 'formEncType',\n 'formMethod',\n 'formNoValidate',\n 'formTarget',\n 'name',\n 'value',\n 'popoverTarget',\n 'popoverTargetAction',\n]);\nconst HANDLER_KEY = /^on[A-Z]/;\n\n/**\n * Attributes that name the clear button (C-SLOTS naming). On a merged button or a slot object they\n * go to the clear button (slot content is `aria-hidden`), and any of them replaces the default\n * `aria-label`.\n */\nconst NAMING_KEYS: ReadonlySet<string> = new Set(['aria-label', 'aria-labelledby', 'title']);\n\n/** Default name of the clear button. */\nconst DEFAULT_CLEAR_LABEL = 'Clear search';\n\ninterface DismissParts {\n /**\n * `default`: no slot (default icon); `content`: icon content; `element`: a `<button>`/`Button`\n * element; `button-object`: the deprecated button-object form.\n */\n kind: 'default' | 'content' | 'element' | 'button-object';\n /** Props merged onto the built-in clear button. */\n buttonProps: UnknownProps;\n /** Content of the clear button (`null` = the default icon, except for `content`). */\n content: React.ReactNode;\n /**\n * `true` when the content is rendered as is (a merged `<button>`/`Button` or `{ as: 'button' }`),\n * so a text label in it names the button (C-SLOTS naming, WCAG 2.5.3); `false` when the content\n * is decorative (`aria-hidden`).\n */\n contentMayName: boolean;\n /**\n * Whether the literal children contain a text label: the name for the server render and the\n * first client render. After mount the rendered button's text decides.\n */\n literalTextLabel: boolean;\n /**\n * Whether a merged Wave `Button` set `disabledFocusable`: the clear button is then unavailable\n * but focusable, as the Button would be.\n */\n disabledFocusable: boolean;\n}\n\nconst noop = () => {};\n\n/**\n * Elements inside the field that keep a press to themselves: a control in a slot, the clear\n * button.\n */\nconst INTERACTIVE_CONTENT =\n 'a[href], button, input, select, textarea, [tabindex], [contenteditable]:not([contenteditable=\"false\"])';\n\nconst DEFAULT_DISMISS: DismissParts = {\n kind: 'default',\n buttonProps: {},\n content: null,\n contentMayName: false,\n literalTextLabel: false,\n disabledFocusable: false,\n};\n\nfunction isButtonType(type: unknown): boolean {\n return type === 'button' || type === Button;\n}\n\n/**\n * Splits the props of a button-like element or object into button props and content. The content\n * is rendered as is, so a text label in it names the button (C-SLOTS naming). Content that renders\n * nothing is `null` (the default icon); a generator is read once and rendered as its items.\n */\nfunction splitButtonLike(type: unknown, props: UnknownProps, children: React.ReactNode) {\n const hasChildren = slotRendersContent(children);\n const content = materialiseSlotContent(children);\n const literalTextLabel = hasTextLabel(content);\n if (type === Button) {\n // Wave Button's own props do not belong on a native <button>: its icon becomes content (after\n // the children with `iconPosition=\"after\"`) and `disabledFocusable` is applied by the caller.\n const buttonProps: UnknownProps = {};\n for (const [key, value] of Object.entries(props)) {\n if (key !== 'children' && !BUTTON_OWN_PROP_KEYS.has(key)) buttonProps[key] = value;\n }\n const iconNode = renderSlot(props.icon as Slot<'span'>, 'span', 'inline-flex', {\n 'aria-hidden': true,\n });\n const buttonContent =\n iconNode || hasChildren ? placeButtonIcon(iconNode, content, props.iconPosition) : null;\n return {\n buttonProps,\n content: buttonContent,\n contentMayName: true,\n literalTextLabel,\n disabledFocusable: Boolean(props.disabledFocusable),\n };\n }\n const { as, children: _children, ...buttonProps } = props;\n // `null` content falls back to the default icon.\n return {\n buttonProps,\n content: hasChildren ? content : null,\n contentMayName: true,\n literalTextLabel,\n disabledFocusable: false,\n };\n}\n\n/**\n * Splits `dismiss` into the props merged onto the built-in clear button and its content. Content\n * that renders nothing (`slotRendersContent`) never leaves the button empty: without other props\n * it is the default icon; a slot object with its own content props (`className`, `style`, …)\n * wraps the default icon in its element.\n */\nfunction resolveDismiss(dismiss: SearchBoxProps['dismiss']): DismissParts {\n // The type is unwrapped (C-COMPOUND): a Button written in a Server Component arrives as a lazy\n // client reference, and must be merged like a plain one rather than nested inside the clear\n // button. A slot object is never an element, so the check can take any slot value as a node.\n const node = dismiss as React.ReactNode;\n if (isElementOfType<UnknownProps>(node, 'button', Button)) {\n const children = node.props.children as React.ReactNode;\n return {\n kind: 'element',\n ...splitButtonLike(getElementType(node), node.props, children),\n };\n }\n // Resolved once: a generator is materialised (and cached) by resolveSlot, so it can be checked\n // for emptiness and rendered without being consumed twice.\n const resolved = resolveSlot(dismiss as Slot<'span'>, 'span');\n if (!resolved) return DEFAULT_DISMISS;\n const { Component, props, children } = resolved;\n if (isButtonType(Component)) {\n return { kind: 'button-object', ...splitButtonLike(Component, props, children) };\n }\n const buttonProps: UnknownProps = {};\n const contentProps: UnknownProps = {};\n let hasButtonProps = false;\n for (const [key, value] of Object.entries(props)) {\n // resolveSlot sets `className: undefined` when there are no classes.\n if (value === undefined) continue;\n if (BUTTON_ONLY_KEYS.has(key) || HANDLER_KEY.test(key)) {\n buttonProps[key] = value;\n hasButtonProps = true;\n } else if (NAMING_KEYS.has(key)) {\n // The content is aria-hidden, so a naming attribute names the clear button instead (not the\n // deprecated button-object form).\n buttonProps[key] = value;\n } else {\n contentProps[key] = value;\n }\n }\n // A void (`img`), component (`{ as: MyIcon }`) or markup (`dangerouslySetInnerHTML`) slot\n // renders content of its own.\n const hasChildren = slotRendersContent(children);\n const empty = slotWrapsDefaultContent(Component, { ...contentProps, children });\n if (empty && Object.keys(buttonProps).length === 0 && Object.keys(contentProps).length === 0) {\n return DEFAULT_DISMISS;\n }\n // A button object without content (`{ onClick }`, `{ type: 'button' }`) or a content object\n // without children (`{ className }`) keeps the default icon inside the object's own element (its\n // className/style/attributes still apply). Markup of its own takes no children at all.\n const contentChildren = empty ? <DismissIcon /> : hasChildren ? children : undefined;\n const content =\n contentChildren === undefined\n ? React.createElement(Component, { 'aria-hidden': true, ...contentProps })\n : React.createElement(Component, { 'aria-hidden': true, ...contentProps }, contentChildren);\n return {\n kind: hasButtonProps ? 'button-object' : 'content',\n buttonProps,\n content,\n contentMayName: false,\n literalTextLabel: false,\n disabledFocusable: false,\n };\n}\n\n/**\n * A search input with a leading search icon and a clear button that appears while there is text\n * (not while `readOnly`).\n *\n * - **Layout**: the root `<div>` draws the field (its outline, focus and invalid look). The icon\n * (or `contentBefore`), the text, `contentAfter` and the clear button sit side by side in it, so\n * no slot covers the text. Pressing the field outside a control of its own focuses the input.\n * - **Clearing**: the clear button clears the text and moves focus back to the input. Escape\n * clears the text too while there is any, and is then consumed, so an enclosing Dialog, Drawer\n * or Popover stays open; in an empty field Escape reaches them. Both call `onClear`.\n * - **Routing**: `id`, ARIA and native input attributes and the focus/keyboard handlers go to the\n * `<input type=\"search\">` (role `searchbox`); `className`, `style`, `data-*`, other handlers and\n * `ref` stay on the root `<div>` (`controlRef` reaches the input). Inside a `Field` it picks up\n * the label, hint, error and required state automatically.\n * - **Forms**: with `name` the text is submitted with the form; a form reset restores\n * `defaultValue`.\n *\n * @example\n * <SearchBox aria-label=\"Search files\" value={query} onValueChange={setQuery} />\n */\nexport const SearchBox = ({\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n onChange,\n onClear,\n placeholder = 'Search',\n disabled,\n contentBefore,\n contentAfter,\n dismiss,\n className,\n ref,\n controlRef,\n // Routed to the input (C-ROUTING)\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n 'aria-required': ariaRequired,\n 'aria-errormessage': ariaErrorMessage,\n 'aria-details': ariaDetails,\n required,\n name,\n form,\n readOnly,\n autoComplete,\n autoFocus,\n autoCapitalize,\n autoCorrect,\n inputMode,\n enterKeyHint,\n spellCheck,\n maxLength,\n minLength,\n pattern,\n tabIndex,\n onFocus,\n onBlur,\n onKeyDown,\n onKeyUp,\n onMouseDown,\n hidden,\n ...rest\n}: SearchBoxProps) => {\n if (onChange !== undefined) warnDeprecated('SearchBox', 'onChange', 'onValueChange');\n\n const [value, setValue] = useControllable(controlledValue, defaultValue, (next: string) => {\n onValueChange?.(next);\n onChange?.(next);\n });\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n const mergedInputRef = useMergedRefs(inputRef, controlRef);\n // The input is always React-controlled, so the browser's own reset would put the current text\n // back: restore the default here instead (C-FORMS).\n useFormReset(inputRef, () => setValue(defaultValue), form);\n\n const fieldProps = useFieldControl(\n {\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n 'aria-required': ariaRequired,\n required,\n },\n { nativeRequired: true },\n );\n const invalidLook = isInvalidLook(false, fieldProps['aria-invalid']);\n\n const dismissParts = resolveDismiss(dismiss);\n const dismissKind = dismissParts.kind;\n React.useEffect(() => {\n if (dismissKind === 'element') {\n warnOnce(\n 'SearchBox:dismiss-button-element',\n 'SearchBox: `dismiss` received a button element; its props were merged into the built-in clear button (buttons cannot be nested). Pass icon content instead, e.g. `dismiss={<MyIcon />}`.',\n );\n } else if (dismissKind === 'button-object') {\n warnOnce(\n 'SearchBox:dismiss-button-object',\n 'SearchBox: `dismiss` with button props (`as: \"button\"`, `onClick`, `type`, …) is deprecated and will be removed in 1.0; the props were merged into the built-in clear button. Pass icon content instead, e.g. `dismiss={<MyIcon />}`.',\n );\n }\n }, [dismissKind]);\n\n const handleClear = () => {\n setValue('');\n onClear?.();\n inputRef.current?.focus();\n };\n\n // Escape clears the text first, as native search fields do, and is consumed so an enclosing\n // Dialog, Drawer or Popover stays open; with an empty field it reaches them (C-POPUPS).\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key !== 'Escape' || event.nativeEvent.isComposing) return;\n if (!value || readOnly || disabled) return;\n event.preventDefault();\n setValue('');\n onClear?.();\n };\n\n // The whole box is the field: pressing the icon, a slot or the padding around the text focuses\n // the input, as it does in a native search field. A control inside a slot keeps its press.\n const handleRootMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n const input = inputRef.current;\n const root = event.currentTarget;\n const target = event.target;\n if (!input || disabled || event.button !== 0 || target === input) return;\n // Events that bubble through React portals from outside this box are not ours (C-COMPOSE).\n if (!(target instanceof Element) || !root.contains(target)) return;\n const control = target.closest(INTERACTIVE_CONTENT);\n if (control && root.contains(control)) return;\n event.preventDefault(); // keeps the press from moving focus to the page\n input.focus();\n };\n\n // The slot's onClick is composed at click time (it runs first; preventDefault() cancels the\n // clear), so handleClear, which reads the input ref, is never passed to a render-time helper.\n // The slot's ref joins ours through a stable merged ref (never a new callback per render).\n const {\n onClick: slotOnClick,\n ref: slotRef,\n ...slotButtonProps\n } = dismissParts.buttonProps as UnknownProps & {\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n ref?: React.Ref<HTMLButtonElement>;\n };\n\n // C-SLOTS naming (WCAG 2.5.3 Label in Name): a consumer naming attribute names the clear button;\n // otherwise content rendered as is names it when it has a text label, and the default\n // `aria-label` would hide that label. The literal children decide on the server and on the first\n // render; after mount, the rendered button's text does (text from components, later changes).\n const hasOwnName = Object.keys(slotButtonProps).some(\n (key) => NAMING_KEYS.has(key) && slotButtonProps[key] != null,\n );\n const checksContent = dismissParts.contentMayName && !hasOwnName;\n const literalTextLabel = dismissParts.literalTextLabel;\n const [labelTarget, setLabelTarget] = React.useState<HTMLButtonElement | null>(null);\n const subscribeToContent = React.useCallback(\n (onChange: () => void) => (labelTarget ? observeTextLabel(labelTarget, onChange) : noop),\n [labelTarget],\n );\n const contentHasTextLabel = React.useSyncExternalStore(\n subscribeToContent,\n () => (labelTarget ? hasRenderedTextLabel(labelTarget) : literalTextLabel),\n () => literalTextLabel,\n );\n const namedByContent = checksContent && contentHasTextLabel;\n const clearRef = useMergedRefs<HTMLButtonElement>(\n slotRef,\n checksContent ? setLabelTarget : undefined,\n );\n\n const clearButtonProps = mergeProps(\n {\n type: 'button',\n disabled,\n 'aria-label': hasOwnName || namedByContent ? undefined : DEFAULT_CLEAR_LABEL,\n className: cn(\n // Padding and background set here (C-NATIVE): an app-wide `button` rule cannot fill it.\n 'me-1 flex h-6 w-6 shrink-0 items-center justify-center rounded bg-transparent p-0 text-muted-foreground',\n 'not-disabled:not-aria-disabled:hover:text-foreground',\n focusRing,\n 'disabled:cursor-not-allowed',\n mergedAriaDisabledClasses,\n ),\n },\n slotButtonProps,\n ) as React.ComponentPropsWithoutRef<'button'>;\n\n // A merged button with markup of its own (`dangerouslySetInnerHTML`) takes no children.\n const clearContent =\n clearButtonProps.dangerouslySetInnerHTML != null\n ? undefined\n : dismissKind === 'content'\n ? dismissParts.content\n : (dismissParts.content ?? <DismissIcon />);\n // A slot value that renders nothing is no slot (the default icon before the text, no box after).\n const hasBefore = slotRendersContent(contentBefore);\n const hasAfter = slotRendersContent(contentAfter);\n\n return (\n <div\n ref={ref}\n className={cn(\n // The root draws the field; the slots, the text and the clear button are laid out side by\n // side inside it, so a slot never covers the text.\n 'relative inline-flex h-8 w-full items-center rounded border border-input border-b-stroke-accessible bg-background text-body-1 text-foreground',\n inputFocusWithin,\n invalidLook && inputInvalidWithin,\n // The dimmed look lifts while a focus ring shows inside the root (a clear button kept\n // focusable by a merged `disabledFocusable` Button, focusable slot content; the disabled\n // input never takes focus): opacity would dim the ring below 3:1.\n disabled && 'cursor-not-allowed opacity-50 has-focus-visible:opacity-100',\n className,\n )}\n hidden={hidden}\n {...rest}\n // Composed at press time, like the clear button's click: the handler reads the input ref.\n onMouseDown={(event) => composeEventHandlers(onMouseDown, handleRootMouseDown)(event)}\n >\n <span className=\"flex shrink-0 items-center ps-2\">\n {hasBefore ? (\n renderSlot(contentBefore, 'span', 'shrink-0')\n ) : (\n <SearchIcon className=\"text-muted-foreground\" />\n )}\n </span>\n\n <input\n ref={mergedInputRef}\n type=\"search\"\n value={value}\n onChange={(event) => setValue(event.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n className={cn(\n 'h-full min-w-0 flex-1 appearance-none border-none bg-transparent px-2 text-body-1 text-foreground',\n 'placeholder:text-muted-foreground',\n 'focus:outline-hidden',\n 'disabled:cursor-not-allowed',\n '[&::-webkit-search-cancel-button]:hidden',\n )}\n aria-errormessage={ariaErrorMessage}\n aria-details={ariaDetails}\n name={name}\n form={form}\n readOnly={readOnly}\n autoComplete={autoComplete}\n autoFocus={autoFocus}\n autoCapitalize={autoCapitalize}\n autoCorrect={autoCorrect}\n inputMode={inputMode}\n enterKeyHint={enterKeyHint}\n spellCheck={spellCheck}\n maxLength={maxLength}\n minLength={minLength}\n pattern={pattern}\n tabIndex={tabIndex}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyDown={composeEventHandlers(onKeyDown, handleKeyDown)}\n onKeyUp={onKeyUp}\n {...fieldProps}\n />\n\n {hasAfter && (\n <span className=\"flex shrink-0 items-center pe-2\">\n {renderSlot(contentAfter, 'span', 'shrink-0')}\n </span>\n )}\n\n {/* No clear button while read-only: clearing would change a value the user cannot edit. */}\n {value && !readOnly ? (\n <button\n {...clearButtonProps}\n ref={clearRef}\n // mergeProps keeps a slot's `type: null`, which would drop the attribute and make the\n // button submit its form; only nullish falls back (an explicit type is kept).\n type={clearButtonProps.type ?? 'button'}\n disabled={disabled || clearButtonProps.disabled}\n onClick={(event) => composeEventHandlers(slotOnClick, handleClear)(event)}\n // A merged `disabledFocusable` Button makes the clear button unavailable but focusable\n // (spread last: it wins over `disabled` and the clear handler).\n {...(dismissParts.disabledFocusable ? MERGED_DISABLED_FOCUSABLE_PROPS : undefined)}\n >\n {clearContent}\n </button>\n ) : null}\n </div>\n );\n};\n\nSearchBox.displayName = 'SearchBox';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SearchBox.cjs","names":["Button","slotRendersContent","materialiseSlotContent","hasTextLabel","BUTTON_OWN_PROP_KEYS","renderSlot","cn","searchBoxClassNames","placeButtonIcon","isElementOfType","getElementType","resolveSlot","slotWrapsDefaultContent","DismissIcon","React","useControllable","useMergedRefs","useFieldControl","isInvalidLook","observeTextLabel","hasRenderedTextLabel","mergeProps","focusRing","mergedAriaDisabledClasses","inputFocusWithin","composeEventHandlers","SearchIcon","MERGED_DISABLED_FOCUSABLE_PROPS","require_runtime","require_cn","require_children","require_dev","require_slot","require_composeEventHandlers","require_classNames","require_useControllable","require_useMergedRefs","require_useFieldControl","require_styles","require_Button","require_Button_slots","require_icons","require_mergeProps","require_Input","require_useFormReset","require_labelInName","react","react_jsx_runtime","BUTTON_ONLY_KEYS","HANDLER_KEY","NAMING_KEYS","DEFAULT_CLEAR_LABEL","noop","INTERACTIVE_CONTENT","DEFAULT_DISMISS","isButtonType","type","splitButtonLike","hasChildren","children","content","literalTextLabel","buttonProps","key","value","props","iconNode","_children","resolveDismiss","node","dismiss","resolved","Component","contentProps","hasButtonProps","empty","contentChildren","iconProps","SearchBox","controlledValue","ariaLabel","ariaLabelledBy","ariaDescribedBy","ariaInvalid","ariaRequired","ariaErrorMessage","ariaDetails","rest","onChange","setValue","defaultValue","onValueChange","next","inputRef","mergedInputRef","controlRef","form","fieldProps","invalidLook","dismissParts","dismissKind","handleClear","onClear","handleKeyDown","event","readOnly","disabled","handleRootMouseDown","input","root","target","control","slotOnClick","slotRef","slotButtonProps","hasOwnName","checksContent","labelTarget","setLabelTarget","subscribeToContent","contentHasTextLabel","namedByContent","clearRef","clearButtonProps","clearContent","hasBefore","contentBefore","hasAfter","contentAfter","className","onMouseDown","onKeyDown"],"sources":["../../../src/components/input/SearchBox.tsx"],"sourcesContent":["import * as React from 'react';\nimport { getElementType, isElementOfType } from '../../lib/children';\nimport { searchBoxClassNames } from '../../lib/classNames';\nimport { cn } from '../../lib/cn';\nimport { composeEventHandlers } from '../../lib/composeEventHandlers';\nimport { warnDeprecated, warnOnce } from '../../lib/dev';\nimport { DismissIcon, SearchIcon } from '../../lib/icons';\nimport { hasRenderedTextLabel, hasTextLabel, observeTextLabel } from '../../lib/labelInName';\nimport { mergeProps } from '../../lib/mergeProps';\nimport {\n materialiseSlotContent,\n renderSlot,\n resolveSlot,\n slotRendersContent,\n slotWrapsDefaultContent,\n} from '../../lib/slot';\nimport { focusRing, inputFocusWithin, inputInvalidWithin } from '../../lib/styles';\nimport type { Slot, SlotObject } from '../../lib/types';\nimport { useControllable } from '../../hooks/useControllable';\nimport { useFieldControl } from '../../hooks/useFieldControl';\nimport { useFormReset } from '../../hooks/useFormReset';\nimport { useMergedRefs } from '../../hooks/useMergedRefs';\nimport { Button } from '../button/Button';\nimport {\n BUTTON_OWN_PROP_KEYS,\n MERGED_DISABLED_FOCUSABLE_PROPS,\n mergedAriaDisabledClasses,\n placeButtonIcon,\n} from '../button/Button.slots';\nimport { isInvalidLook } from './Input';\n\n/**\n * Props that SearchBox routes to its `<input>` (C-ROUTING): the id, the ARIA naming/validation\n * attributes, native text-input attributes and the focus/keyboard handlers.\n */\nexport type SearchBoxInputProps = Pick<\n React.InputHTMLAttributes<HTMLInputElement>,\n | 'id'\n | 'aria-label'\n | 'aria-labelledby'\n | 'aria-describedby'\n | 'aria-invalid'\n | 'aria-required'\n | 'aria-errormessage'\n | 'aria-details'\n | 'name'\n | 'form'\n | 'required'\n | 'readOnly'\n | 'autoComplete'\n | 'autoFocus'\n | 'autoCapitalize'\n | 'autoCorrect'\n | 'inputMode'\n | 'enterKeyHint'\n | 'spellCheck'\n | 'maxLength'\n | 'minLength'\n | 'pattern'\n | 'tabIndex'\n | 'onFocus'\n | 'onBlur'\n | 'onKeyDown'\n | 'onKeyUp'\n>;\n\n/** Properties for the SearchBox component. */\nexport interface SearchBoxProps\n extends\n Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue' | keyof SearchBoxInputProps\n >,\n SearchBoxInputProps {\n /** Controlled search text value. */\n value?: string;\n /** Initial search text for uncontrolled usage (also what a form reset restores).\n * @default ''\n */\n defaultValue?: string;\n /** Called with the new search text when it changes (typing or clearing). */\n onValueChange?: (value: string) => void;\n /**\n * Called with the new search text when it changes.\n * @deprecated Use `onValueChange`. (`onChange` is reserved for native change events.)\n */\n onChange?: (value: string) => void;\n /**\n * Called when the user clears the search: with the clear button, or with Escape while there is\n * text (after `onValueChange('')`).\n */\n onClear?: () => void;\n /** Placeholder text shown when the input is empty.\n * @default 'Search'\n */\n placeholder?: string;\n /** Whether the search box is disabled and non-interactive. */\n disabled?: boolean;\n /**\n * Slot rendered before the text (replaces the default search icon). It takes the room it needs;\n * the text starts after it. A value that renders nothing (`null`, `false`, `''`, an empty array\n * or Fragment) keeps the default icon.\n */\n contentBefore?: Slot<'span'>;\n /**\n * Slot rendered after the text, before the clear button. It takes the room it needs; the text\n * ends before it. A value that renders nothing (`false`, `''`, an empty array or Fragment) is no\n * slot: nothing takes room.\n */\n contentAfter?: Slot<'span'>;\n /**\n * Content of the clear button (replaces the default dismiss icon). It always renders **inside**\n * the built-in `<button type=\"button\" aria-label=\"Clear search\">`, which clears the value, calls\n * `onClear` and moves focus back to the input. The slot cannot hide the clear button or leave\n * it empty: content that renders nothing (`null`, `false`, `true`, `''`, or an array, `Set`,\n * generator or Fragment of only those) keeps the default icon, and a slot object without\n * children (`{ className: 'text-error' }`) wraps the default icon in its element (not when it\n * brings markup of its own through `dangerouslySetInnerHTML`, or is a void or component element).\n *\n * A `<button>` element or a Wave `Button` passed here is not nested: its props are merged into\n * the built-in button (its `onClick` runs first; `preventDefault()` cancels the clear) and its\n * children become the content, with a development warning. A Wave `Button`'s own props are not\n * attributes: its `icon` becomes decorative content before its children (after them with\n * `iconPosition=\"after\"`), `disabledFocusable` makes the clear button unavailable but focusable\n * as on the Button (nothing is cleared), and `appearance` and `size` are ignored. The 0.4\n * button-object form (`{ as: 'button', onClick, … }` or an object with button props) is\n * **deprecated**: its button props are merged the same way. Pass icon content instead.\n *\n * Name (WCAG 2.5.3 Label in Name): content is decorative (`aria-hidden`), so the button keeps\n * the name \"Clear search\". An `aria-label`, `aria-labelledby` or `title` on the merged button or\n * on a slot object names the button instead (`{ children: 'Reset', 'aria-label': 'Reset' }`).\n * The children of a merged `<button>`/`Button` (or of `{ as: 'button' }`) are rendered as is:\n * when they render a text label (at least two letters or digits outside `aria-hidden`/`hidden`\n * content, text from components such as translations included), that text names the button;\n * an icon or a lone character (`X`, `×`) keeps \"Clear search\". Text hidden only with CSS still\n * counts as the label, so give a button with a responsive label an explicit `aria-label`.\n */\n dismiss?: Slot<'span'> | SlotObject<'button'>;\n /** Ref to the root `<div>`. */\n ref?: React.Ref<HTMLDivElement>;\n /** Ref to the `<input type=\"search\">` (the focusable control). */\n controlRef?: React.Ref<HTMLInputElement>;\n}\n\ntype UnknownProps = Record<string, unknown>;\n\n/** Attributes that only make sense on the clear `<button>` itself (merged onto it). */\nconst BUTTON_ONLY_KEYS: ReadonlySet<string> = new Set([\n 'type',\n 'disabled',\n 'form',\n 'formAction',\n 'formEncType',\n 'formMethod',\n 'formNoValidate',\n 'formTarget',\n 'name',\n 'value',\n 'popoverTarget',\n 'popoverTargetAction',\n]);\nconst HANDLER_KEY = /^on[A-Z]/;\n\n/**\n * Attributes that name the clear button (C-SLOTS naming). On a merged button or a slot object they\n * go to the clear button (slot content is `aria-hidden`), and any of them replaces the default\n * `aria-label`.\n */\nconst NAMING_KEYS: ReadonlySet<string> = new Set(['aria-label', 'aria-labelledby', 'title']);\n\n/** Default name of the clear button. */\nconst DEFAULT_CLEAR_LABEL = 'Clear search';\n\ninterface DismissParts {\n /**\n * `default`: no slot (default icon); `content`: icon content; `element`: a `<button>`/`Button`\n * element; `button-object`: the deprecated button-object form.\n */\n kind: 'default' | 'content' | 'element' | 'button-object';\n /** Props merged onto the built-in clear button. */\n buttonProps: UnknownProps;\n /** Content of the clear button (`null` = the default icon, except for `content`). */\n content: React.ReactNode;\n /**\n * `true` when the content is rendered as is (a merged `<button>`/`Button` or `{ as: 'button' }`),\n * so a text label in it names the button (C-SLOTS naming, WCAG 2.5.3); `false` when the content\n * is decorative (`aria-hidden`).\n */\n contentMayName: boolean;\n /**\n * Whether the literal children contain a text label: the name for the server render and the\n * first client render. After mount the rendered button's text decides.\n */\n literalTextLabel: boolean;\n /**\n * Whether a merged Wave `Button` set `disabledFocusable`: the clear button is then unavailable\n * but focusable, as the Button would be.\n */\n disabledFocusable: boolean;\n}\n\nconst noop = () => {};\n\n/**\n * Elements inside the field that keep a press to themselves: a control in a slot, the clear\n * button.\n */\nconst INTERACTIVE_CONTENT =\n 'a[href], button, input, select, textarea, [tabindex], [contenteditable]:not([contenteditable=\"false\"])';\n\nconst DEFAULT_DISMISS: DismissParts = {\n kind: 'default',\n buttonProps: {},\n content: null,\n contentMayName: false,\n literalTextLabel: false,\n disabledFocusable: false,\n};\n\nfunction isButtonType(type: unknown): boolean {\n return type === 'button' || type === Button;\n}\n\n/**\n * Splits the props of a button-like element or object into button props and content. The content\n * is rendered as is, so a text label in it names the button (C-SLOTS naming). Content that renders\n * nothing is `null` (the default icon); a generator is read once and rendered as its items.\n */\nfunction splitButtonLike(type: unknown, props: UnknownProps, children: React.ReactNode) {\n const hasChildren = slotRendersContent(children);\n const content = materialiseSlotContent(children);\n const literalTextLabel = hasTextLabel(content);\n if (type === Button) {\n // Wave Button's own props do not belong on a native <button>: its icon becomes content (after\n // the children with `iconPosition=\"after\"`) and `disabledFocusable` is applied by the caller.\n const buttonProps: UnknownProps = {};\n for (const [key, value] of Object.entries(props)) {\n if (key !== 'children' && !BUTTON_OWN_PROP_KEYS.has(key)) buttonProps[key] = value;\n }\n const iconNode = renderSlot(\n props.icon as Slot<'span'>,\n 'span',\n cn(searchBoxClassNames.dismissIcon, 'inline-flex'),\n { 'aria-hidden': true },\n );\n const buttonContent =\n iconNode || hasChildren ? placeButtonIcon(iconNode, content, props.iconPosition) : null;\n return {\n buttonProps,\n content: buttonContent,\n contentMayName: true,\n literalTextLabel,\n disabledFocusable: Boolean(props.disabledFocusable),\n };\n }\n const { as, children: _children, ...buttonProps } = props;\n // `null` content falls back to the default icon.\n return {\n buttonProps,\n content: hasChildren ? content : null,\n contentMayName: true,\n literalTextLabel,\n disabledFocusable: false,\n };\n}\n\n/**\n * Splits `dismiss` into the props merged onto the built-in clear button and its content. Content\n * that renders nothing (`slotRendersContent`) never leaves the button empty: without other props\n * it is the default icon; a slot object with its own content props (`className`, `style`, …)\n * wraps the default icon in its element.\n */\nfunction resolveDismiss(dismiss: SearchBoxProps['dismiss']): DismissParts {\n // The type is unwrapped (C-COMPOUND): a Button written in a Server Component arrives as a lazy\n // client reference, and must be merged like a plain one rather than nested inside the clear\n // button. A slot object is never an element, so the check can take any slot value as a node.\n const node = dismiss as React.ReactNode;\n if (isElementOfType<UnknownProps>(node, 'button', Button)) {\n const children = node.props.children as React.ReactNode;\n return {\n kind: 'element',\n ...splitButtonLike(getElementType(node), node.props, children),\n };\n }\n // Resolved once: a generator is materialised (and cached) by resolveSlot, so it can be checked\n // for emptiness and rendered without being consumed twice.\n const resolved = resolveSlot(dismiss as Slot<'span'>, 'span');\n if (!resolved) return DEFAULT_DISMISS;\n const { Component, props, children } = resolved;\n if (isButtonType(Component)) {\n return { kind: 'button-object', ...splitButtonLike(Component, props, children) };\n }\n const buttonProps: UnknownProps = {};\n const contentProps: UnknownProps = {};\n let hasButtonProps = false;\n for (const [key, value] of Object.entries(props)) {\n // resolveSlot sets `className: undefined` when there are no classes.\n if (value === undefined) continue;\n if (BUTTON_ONLY_KEYS.has(key) || HANDLER_KEY.test(key)) {\n buttonProps[key] = value;\n hasButtonProps = true;\n } else if (NAMING_KEYS.has(key)) {\n // The content is aria-hidden, so a naming attribute names the clear button instead (not the\n // deprecated button-object form).\n buttonProps[key] = value;\n } else {\n contentProps[key] = value;\n }\n }\n // A void (`img`), component (`{ as: MyIcon }`) or markup (`dangerouslySetInnerHTML`) slot\n // renders content of its own.\n const hasChildren = slotRendersContent(children);\n const empty = slotWrapsDefaultContent(Component, { ...contentProps, children });\n if (empty && Object.keys(buttonProps).length === 0 && Object.keys(contentProps).length === 0) {\n return DEFAULT_DISMISS;\n }\n // A button object without content (`{ onClick }`, `{ type: 'button' }`) or a content object\n // without children (`{ className }`) keeps the default icon inside the object's own element (its\n // className/style/attributes still apply). Markup of its own takes no children at all.\n const contentChildren = empty ? <DismissIcon /> : hasChildren ? children : undefined;\n // The element the slot renders carries the dismissIcon part class, before the slot's own.\n const iconProps = {\n 'aria-hidden': true,\n ...contentProps,\n className: cn(searchBoxClassNames.dismissIcon, contentProps.className as string | undefined),\n };\n const content =\n contentChildren === undefined\n ? React.createElement(Component, iconProps)\n : React.createElement(Component, iconProps, contentChildren);\n return {\n kind: hasButtonProps ? 'button-object' : 'content',\n buttonProps,\n content,\n contentMayName: false,\n literalTextLabel: false,\n disabledFocusable: false,\n };\n}\n\n/**\n * A search input with a leading search icon and a clear button that appears while there is text\n * (not while `readOnly`).\n *\n * - **Layout**: the root `<div>` draws the field (its outline, focus and invalid look). The icon\n * (or `contentBefore`), the text, `contentAfter` and the clear button sit side by side in it, so\n * no slot covers the text. Pressing the field outside a control of its own focuses the input.\n * - **Clearing**: the clear button clears the text and moves focus back to the input. Escape\n * clears the text too while there is any, and is then consumed, so an enclosing Dialog, Drawer\n * or Popover stays open; in an empty field Escape reaches them. Both call `onClear`.\n * - **Routing**: `id`, ARIA and native input attributes and the focus/keyboard handlers go to the\n * `<input type=\"search\">` (role `searchbox`); `className`, `style`, `data-*`, other handlers and\n * `ref` stay on the root `<div>` (`controlRef` reaches the input). Inside a `Field` it picks up\n * the label, hint, error and required state automatically.\n * - **Forms**: with `name` the text is submitted with the form; a form reset restores\n * `defaultValue`.\n *\n * @example\n * <SearchBox aria-label=\"Search files\" value={query} onValueChange={setQuery} />\n */\nexport const SearchBox = ({\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n onChange,\n onClear,\n placeholder = 'Search',\n disabled,\n contentBefore,\n contentAfter,\n dismiss,\n className,\n ref,\n controlRef,\n // Routed to the input (C-ROUTING)\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n 'aria-required': ariaRequired,\n 'aria-errormessage': ariaErrorMessage,\n 'aria-details': ariaDetails,\n required,\n name,\n form,\n readOnly,\n autoComplete,\n autoFocus,\n autoCapitalize,\n autoCorrect,\n inputMode,\n enterKeyHint,\n spellCheck,\n maxLength,\n minLength,\n pattern,\n tabIndex,\n onFocus,\n onBlur,\n onKeyDown,\n onKeyUp,\n onMouseDown,\n hidden,\n ...rest\n}: SearchBoxProps) => {\n if (onChange !== undefined) warnDeprecated('SearchBox', 'onChange', 'onValueChange');\n\n const [value, setValue] = useControllable(controlledValue, defaultValue, (next: string) => {\n onValueChange?.(next);\n onChange?.(next);\n });\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n const mergedInputRef = useMergedRefs(inputRef, controlRef);\n // The input is always React-controlled, so the browser's own reset would put the current text\n // back: restore the default here instead (C-FORMS).\n useFormReset(inputRef, () => setValue(defaultValue), form);\n\n const fieldProps = useFieldControl(\n {\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n 'aria-required': ariaRequired,\n required,\n },\n { nativeRequired: true },\n );\n const invalidLook = isInvalidLook(false, fieldProps['aria-invalid']);\n\n const dismissParts = resolveDismiss(dismiss);\n const dismissKind = dismissParts.kind;\n React.useEffect(() => {\n if (dismissKind === 'element') {\n warnOnce(\n 'SearchBox:dismiss-button-element',\n 'SearchBox: `dismiss` received a button element; its props were merged into the built-in clear button (buttons cannot be nested). Pass icon content instead, e.g. `dismiss={<MyIcon />}`.',\n );\n } else if (dismissKind === 'button-object') {\n warnOnce(\n 'SearchBox:dismiss-button-object',\n 'SearchBox: `dismiss` with button props (`as: \"button\"`, `onClick`, `type`, …) is deprecated and will be removed in 1.0; the props were merged into the built-in clear button. Pass icon content instead, e.g. `dismiss={<MyIcon />}`.',\n );\n }\n }, [dismissKind]);\n\n const handleClear = () => {\n setValue('');\n onClear?.();\n inputRef.current?.focus();\n };\n\n // Escape clears the text first, as native search fields do, and is consumed so an enclosing\n // Dialog, Drawer or Popover stays open; with an empty field it reaches them (C-POPUPS).\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key !== 'Escape' || event.nativeEvent.isComposing) return;\n if (!value || readOnly || disabled) return;\n event.preventDefault();\n setValue('');\n onClear?.();\n };\n\n // The whole box is the field: pressing the icon, a slot or the padding around the text focuses\n // the input, as it does in a native search field. A control inside a slot keeps its press.\n const handleRootMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n const input = inputRef.current;\n const root = event.currentTarget;\n const target = event.target;\n if (!input || disabled || event.button !== 0 || target === input) return;\n // Events that bubble through React portals from outside this box are not ours (C-COMPOSE).\n if (!(target instanceof Element) || !root.contains(target)) return;\n const control = target.closest(INTERACTIVE_CONTENT);\n if (control && root.contains(control)) return;\n event.preventDefault(); // keeps the press from moving focus to the page\n input.focus();\n };\n\n // The slot's onClick is composed at click time (it runs first; preventDefault() cancels the\n // clear), so handleClear, which reads the input ref, is never passed to a render-time helper.\n // The slot's ref joins ours through a stable merged ref (never a new callback per render).\n const {\n onClick: slotOnClick,\n ref: slotRef,\n ...slotButtonProps\n } = dismissParts.buttonProps as UnknownProps & {\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n ref?: React.Ref<HTMLButtonElement>;\n };\n\n // C-SLOTS naming (WCAG 2.5.3 Label in Name): a consumer naming attribute names the clear button;\n // otherwise content rendered as is names it when it has a text label, and the default\n // `aria-label` would hide that label. The literal children decide on the server and on the first\n // render; after mount, the rendered button's text does (text from components, later changes).\n const hasOwnName = Object.keys(slotButtonProps).some(\n (key) => NAMING_KEYS.has(key) && slotButtonProps[key] != null,\n );\n const checksContent = dismissParts.contentMayName && !hasOwnName;\n const literalTextLabel = dismissParts.literalTextLabel;\n const [labelTarget, setLabelTarget] = React.useState<HTMLButtonElement | null>(null);\n const subscribeToContent = React.useCallback(\n (onChange: () => void) => (labelTarget ? observeTextLabel(labelTarget, onChange) : noop),\n [labelTarget],\n );\n const contentHasTextLabel = React.useSyncExternalStore(\n subscribeToContent,\n () => (labelTarget ? hasRenderedTextLabel(labelTarget) : literalTextLabel),\n () => literalTextLabel,\n );\n const namedByContent = checksContent && contentHasTextLabel;\n const clearRef = useMergedRefs<HTMLButtonElement>(\n slotRef,\n checksContent ? setLabelTarget : undefined,\n );\n\n const clearButtonProps = mergeProps(\n {\n type: 'button',\n disabled,\n 'aria-label': hasOwnName || namedByContent ? undefined : DEFAULT_CLEAR_LABEL,\n className: cn(\n searchBoxClassNames.dismissButton,\n // Padding and background set here (C-NATIVE): an app-wide `button` rule cannot fill it.\n 'me-1 flex h-6 w-6 shrink-0 items-center justify-center rounded bg-transparent p-0 text-muted-foreground',\n 'not-disabled:not-aria-disabled:hover:text-foreground',\n focusRing,\n 'disabled:cursor-not-allowed',\n mergedAriaDisabledClasses,\n ),\n },\n slotButtonProps,\n ) as React.ComponentPropsWithoutRef<'button'>;\n\n // A merged button with markup of its own (`dangerouslySetInnerHTML`) takes no children.\n const clearContent =\n clearButtonProps.dangerouslySetInnerHTML != null\n ? undefined\n : dismissKind === 'content'\n ? dismissParts.content\n : (dismissParts.content ?? <DismissIcon className={searchBoxClassNames.dismissIcon} />);\n // A slot value that renders nothing is no slot (the default icon before the text, no box after).\n const hasBefore = slotRendersContent(contentBefore);\n const hasAfter = slotRendersContent(contentAfter);\n\n return (\n <div\n ref={ref}\n className={cn(\n searchBoxClassNames.root,\n // The root draws the field; the slots, the text and the clear button are laid out side by\n // side inside it, so a slot never covers the text.\n 'relative inline-flex h-8 w-full items-center rounded border border-input border-b-stroke-accessible bg-background text-body-1 text-foreground',\n inputFocusWithin,\n invalidLook && inputInvalidWithin,\n // The dimmed look lifts while a focus ring shows inside the root (a clear button kept\n // focusable by a merged `disabledFocusable` Button, focusable slot content; the disabled\n // input never takes focus): opacity would dim the ring below 3:1.\n disabled && 'cursor-not-allowed opacity-50 has-focus-visible:opacity-100',\n className,\n )}\n hidden={hidden}\n {...rest}\n // Composed at press time, like the clear button's click: the handler reads the input ref.\n onMouseDown={(event) => composeEventHandlers(onMouseDown, handleRootMouseDown)(event)}\n >\n <span className={cn(searchBoxClassNames.contentBefore, 'flex shrink-0 items-center ps-2')}>\n {hasBefore ? (\n renderSlot(contentBefore, 'span', 'shrink-0')\n ) : (\n <SearchIcon className=\"text-muted-foreground\" />\n )}\n </span>\n\n <input\n ref={mergedInputRef}\n type=\"search\"\n value={value}\n onChange={(event) => setValue(event.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n className={cn(\n searchBoxClassNames.input,\n 'h-full min-w-0 flex-1 appearance-none border-none bg-transparent px-2 text-body-1 text-foreground',\n 'placeholder:text-muted-foreground',\n 'focus:outline-hidden',\n 'disabled:cursor-not-allowed',\n '[&::-webkit-search-cancel-button]:hidden',\n )}\n aria-errormessage={ariaErrorMessage}\n aria-details={ariaDetails}\n name={name}\n form={form}\n readOnly={readOnly}\n autoComplete={autoComplete}\n autoFocus={autoFocus}\n autoCapitalize={autoCapitalize}\n autoCorrect={autoCorrect}\n inputMode={inputMode}\n enterKeyHint={enterKeyHint}\n spellCheck={spellCheck}\n maxLength={maxLength}\n minLength={minLength}\n pattern={pattern}\n tabIndex={tabIndex}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyDown={composeEventHandlers(onKeyDown, handleKeyDown)}\n onKeyUp={onKeyUp}\n {...fieldProps}\n />\n\n {hasAfter && (\n <span className={cn(searchBoxClassNames.contentAfter, 'flex shrink-0 items-center pe-2')}>\n {renderSlot(contentAfter, 'span', 'shrink-0')}\n </span>\n )}\n\n {/* No clear button while read-only: clearing would change a value the user cannot edit. */}\n {value && !readOnly ? (\n <button\n {...clearButtonProps}\n ref={clearRef}\n // mergeProps keeps a slot's `type: null`, which would drop the attribute and make the\n // button submit its form; only nullish falls back (an explicit type is kept).\n type={clearButtonProps.type ?? 'button'}\n disabled={disabled || clearButtonProps.disabled}\n onClick={(event) => composeEventHandlers(slotOnClick, handleClear)(event)}\n // A merged `disabledFocusable` Button makes the clear button unavailable but focusable\n // (spread last: it wins over `disabled` and the clear handler).\n {...(dismissParts.disabledFocusable ? MERGED_DISABLED_FOCUSABLE_PROPS : undefined)}\n >\n {clearContent}\n </button>\n ) : null}\n </div>\n );\n};\n\nSearchBox.displayName = 'SearchBox';\n"],"mappings":"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"}
|
|
@@ -4,21 +4,22 @@ import { getElementType as t, isElementOfType as n } from "../../lib/children.mj
|
|
|
4
4
|
import { warnDeprecated as r, warnOnce as i } from "../../lib/dev.mjs";
|
|
5
5
|
import { materialiseSlotContent as a, renderSlot as o, resolveSlot as s, slotRendersContent as c, slotWrapsDefaultContent as l } from "../../lib/slot.mjs";
|
|
6
6
|
import { composeEventHandlers as u } from "../../lib/composeEventHandlers.mjs";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
7
|
+
import { searchBoxClassNames as d } from "../../lib/classNames.mjs";
|
|
8
|
+
import { useControllable as f } from "../../hooks/useControllable.mjs";
|
|
9
|
+
import { useMergedRefs as p } from "../../hooks/useMergedRefs.mjs";
|
|
10
|
+
import { useFieldControl as m } from "../../hooks/useFieldControl.mjs";
|
|
11
|
+
import { focusRing as h, inputFocusWithin as g } from "../../lib/styles.mjs";
|
|
12
|
+
import { Button as _ } from "../button/Button.mjs";
|
|
13
|
+
import { BUTTON_OWN_PROP_KEYS as v, MERGED_DISABLED_FOCUSABLE_PROPS as y, mergedAriaDisabledClasses as b, placeButtonIcon as x } from "../button/Button.slots.mjs";
|
|
14
|
+
import { DismissIcon as S, SearchIcon as ee } from "../../lib/icons.mjs";
|
|
15
|
+
import { mergeProps as te } from "../../lib/mergeProps.mjs";
|
|
15
16
|
import { isInvalidLook as ne } from "./Input.mjs";
|
|
16
|
-
import { useFormReset as
|
|
17
|
-
import { hasRenderedTextLabel as
|
|
18
|
-
import * as
|
|
19
|
-
import { jsx as
|
|
17
|
+
import { useFormReset as C } from "../../hooks/useFormReset.mjs";
|
|
18
|
+
import { hasRenderedTextLabel as w, hasTextLabel as T, observeTextLabel as re } from "../../lib/labelInName.mjs";
|
|
19
|
+
import * as E from "react";
|
|
20
|
+
import { jsx as D, jsxs as ie } from "react/jsx-runtime";
|
|
20
21
|
//#region src/components/input/SearchBox.tsx
|
|
21
|
-
var
|
|
22
|
+
var O = /* @__PURE__ */ new Set([
|
|
22
23
|
"type",
|
|
23
24
|
"disabled",
|
|
24
25
|
"form",
|
|
@@ -31,11 +32,11 @@ var T = /* @__PURE__ */ new Set([
|
|
|
31
32
|
"value",
|
|
32
33
|
"popoverTarget",
|
|
33
34
|
"popoverTargetAction"
|
|
34
|
-
]),
|
|
35
|
+
]), k = /^on[A-Z]/, A = /* @__PURE__ */ new Set([
|
|
35
36
|
"aria-label",
|
|
36
37
|
"aria-labelledby",
|
|
37
38
|
"title"
|
|
38
|
-
]),
|
|
39
|
+
]), ae = "Clear search", oe = () => {}, se = "a[href], button, input, select, textarea, [tabindex], [contenteditable]:not([contenteditable=\"false\"])", j = {
|
|
39
40
|
kind: "default",
|
|
40
41
|
buttonProps: {},
|
|
41
42
|
content: null,
|
|
@@ -43,163 +44,161 @@ var T = /* @__PURE__ */ new Set([
|
|
|
43
44
|
literalTextLabel: !1,
|
|
44
45
|
disabledFocusable: !1
|
|
45
46
|
};
|
|
46
|
-
function
|
|
47
|
-
return e === "button" || e ===
|
|
47
|
+
function M(e) {
|
|
48
|
+
return e === "button" || e === _;
|
|
48
49
|
}
|
|
49
|
-
function
|
|
50
|
-
let
|
|
51
|
-
if (
|
|
52
|
-
let
|
|
53
|
-
for (let [
|
|
54
|
-
let
|
|
50
|
+
function N(t, n, r) {
|
|
51
|
+
let i = c(r), s = a(r), l = T(s);
|
|
52
|
+
if (t === _) {
|
|
53
|
+
let t = {};
|
|
54
|
+
for (let [e, r] of Object.entries(n)) e !== "children" && !v.has(e) && (t[e] = r);
|
|
55
|
+
let r = o(n.icon, "span", e(d.dismissIcon, "inline-flex"), { "aria-hidden": !0 });
|
|
55
56
|
return {
|
|
56
|
-
buttonProps:
|
|
57
|
-
content:
|
|
57
|
+
buttonProps: t,
|
|
58
|
+
content: r || i ? x(r, s, n.iconPosition) : null,
|
|
58
59
|
contentMayName: !0,
|
|
59
|
-
literalTextLabel:
|
|
60
|
-
disabledFocusable: !!
|
|
60
|
+
literalTextLabel: l,
|
|
61
|
+
disabledFocusable: !!n.disabledFocusable
|
|
61
62
|
};
|
|
62
63
|
}
|
|
63
|
-
let { as:
|
|
64
|
+
let { as: u, children: f, ...p } = n;
|
|
64
65
|
return {
|
|
65
|
-
buttonProps:
|
|
66
|
-
content:
|
|
66
|
+
buttonProps: p,
|
|
67
|
+
content: i ? s : null,
|
|
67
68
|
contentMayName: !0,
|
|
68
|
-
literalTextLabel:
|
|
69
|
+
literalTextLabel: l,
|
|
69
70
|
disabledFocusable: !1
|
|
70
71
|
};
|
|
71
72
|
}
|
|
72
|
-
function ce(
|
|
73
|
-
let
|
|
74
|
-
if (n(
|
|
75
|
-
let e =
|
|
73
|
+
function ce(r) {
|
|
74
|
+
let i = r;
|
|
75
|
+
if (n(i, "button", _)) {
|
|
76
|
+
let e = i.props.children;
|
|
76
77
|
return {
|
|
77
78
|
kind: "element",
|
|
78
|
-
...
|
|
79
|
+
...N(t(i), i.props, e)
|
|
79
80
|
};
|
|
80
81
|
}
|
|
81
|
-
let
|
|
82
|
-
if (!
|
|
83
|
-
let { Component:
|
|
84
|
-
if (
|
|
82
|
+
let a = s(r, "span");
|
|
83
|
+
if (!a) return j;
|
|
84
|
+
let { Component: o, props: u, children: f } = a;
|
|
85
|
+
if (M(o)) return {
|
|
85
86
|
kind: "button-object",
|
|
86
|
-
...
|
|
87
|
+
...N(o, u, f)
|
|
87
88
|
};
|
|
88
|
-
let
|
|
89
|
-
for (let [e, t] of Object.entries(
|
|
90
|
-
let
|
|
91
|
-
...
|
|
92
|
-
children:
|
|
89
|
+
let p = {}, m = {}, h = !1;
|
|
90
|
+
for (let [e, t] of Object.entries(u)) t !== void 0 && (O.has(e) || k.test(e) ? (p[e] = t, h = !0) : A.has(e) ? p[e] = t : m[e] = t);
|
|
91
|
+
let g = c(f), v = l(o, {
|
|
92
|
+
...m,
|
|
93
|
+
children: f
|
|
93
94
|
});
|
|
94
|
-
if (
|
|
95
|
-
let
|
|
95
|
+
if (v && Object.keys(p).length === 0 && Object.keys(m).length === 0) return j;
|
|
96
|
+
let y = v ? /* @__PURE__ */ D(S, {}) : g ? f : void 0, b = {
|
|
96
97
|
"aria-hidden": !0,
|
|
97
|
-
...
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
...f
|
|
101
|
-
}, v);
|
|
98
|
+
...m,
|
|
99
|
+
className: e(d.dismissIcon, m.className)
|
|
100
|
+
}, x = y === void 0 ? E.createElement(o, b) : E.createElement(o, b, y);
|
|
102
101
|
return {
|
|
103
|
-
kind:
|
|
104
|
-
buttonProps:
|
|
105
|
-
content:
|
|
102
|
+
kind: h ? "button-object" : "content",
|
|
103
|
+
buttonProps: p,
|
|
104
|
+
content: x,
|
|
106
105
|
contentMayName: !1,
|
|
107
106
|
literalTextLabel: !1,
|
|
108
107
|
disabledFocusable: !1
|
|
109
108
|
};
|
|
110
109
|
}
|
|
111
|
-
var
|
|
110
|
+
var P = ({ value: t, defaultValue: n = "", onValueChange: a, onChange: s, onClear: l, placeholder: _ = "Search", disabled: v, contentBefore: x, contentAfter: T, dismiss: O, className: k, ref: j, controlRef: M, id: N, "aria-label": P, "aria-labelledby": le, "aria-describedby": ue, "aria-invalid": de, "aria-required": fe, "aria-errormessage": pe, "aria-details": F, required: I, name: L, form: R, readOnly: z, autoComplete: B, autoFocus: me, autoCapitalize: he, autoCorrect: ge, inputMode: _e, enterKeyHint: ve, spellCheck: ye, maxLength: be, minLength: xe, pattern: Se, tabIndex: Ce, onFocus: we, onBlur: Te, onKeyDown: Ee, onKeyUp: De, onMouseDown: Oe, hidden: ke, ...Ae }) => {
|
|
112
111
|
s !== void 0 && r("SearchBox", "onChange", "onValueChange");
|
|
113
|
-
let [V, H] =
|
|
112
|
+
let [V, H] = f(t, n, (e) => {
|
|
114
113
|
a?.(e), s?.(e);
|
|
115
|
-
}), U =
|
|
116
|
-
|
|
117
|
-
let W =
|
|
118
|
-
id:
|
|
119
|
-
"aria-label":
|
|
114
|
+
}), U = E.useRef(null), je = p(U, M);
|
|
115
|
+
C(U, () => H(n), R);
|
|
116
|
+
let W = m({
|
|
117
|
+
id: N,
|
|
118
|
+
"aria-label": P,
|
|
120
119
|
"aria-labelledby": le,
|
|
121
120
|
"aria-describedby": ue,
|
|
122
121
|
"aria-invalid": de,
|
|
123
122
|
"aria-required": fe,
|
|
124
|
-
required:
|
|
125
|
-
}, { nativeRequired: !0 }),
|
|
126
|
-
|
|
123
|
+
required: I
|
|
124
|
+
}, { nativeRequired: !0 }), Me = ne(!1, W["aria-invalid"]), G = ce(O), K = G.kind;
|
|
125
|
+
E.useEffect(() => {
|
|
127
126
|
K === "element" ? i("SearchBox:dismiss-button-element", "SearchBox: `dismiss` received a button element; its props were merged into the built-in clear button (buttons cannot be nested). Pass icon content instead, e.g. `dismiss={<MyIcon />}`.") : K === "button-object" && i("SearchBox:dismiss-button-object", "SearchBox: `dismiss` with button props (`as: \"button\"`, `onClick`, `type`, …) is deprecated and will be removed in 1.0; the props were merged into the built-in clear button. Pass icon content instead, e.g. `dismiss={<MyIcon />}`.");
|
|
128
127
|
}, [K]);
|
|
129
|
-
let
|
|
128
|
+
let Ne = () => {
|
|
130
129
|
H(""), l?.(), U.current?.focus();
|
|
131
|
-
}, Ne = (e) => {
|
|
132
|
-
e.key !== "Escape" || e.nativeEvent.isComposing || !V || R || b || (e.preventDefault(), H(""), l?.());
|
|
133
130
|
}, Pe = (e) => {
|
|
131
|
+
e.key !== "Escape" || e.nativeEvent.isComposing || !V || z || v || (e.preventDefault(), H(""), l?.());
|
|
132
|
+
}, Fe = (e) => {
|
|
134
133
|
let t = U.current, n = e.currentTarget, r = e.target;
|
|
135
|
-
if (!t ||
|
|
134
|
+
if (!t || v || e.button !== 0 || r === t || !(r instanceof Element) || !n.contains(r)) return;
|
|
136
135
|
let i = r.closest(se);
|
|
137
136
|
i && n.contains(i) || (e.preventDefault(), t.focus());
|
|
138
|
-
}, { onClick:
|
|
137
|
+
}, { onClick: Ie, ref: Le, ...q } = G.buttonProps, J = Object.keys(q).some((e) => A.has(e) && q[e] != null), Y = G.contentMayName && !J, X = G.literalTextLabel, [Z, Re] = E.useState(null), Q = E.useCallback((e) => Z ? re(Z, e) : oe, [Z]), ze = E.useSyncExternalStore(Q, () => Z ? w(Z) : X, () => X), Be = Y && ze, Ve = p(Le, Y ? Re : void 0), $ = te({
|
|
139
138
|
type: "button",
|
|
140
|
-
disabled:
|
|
141
|
-
"aria-label": J || Be ? void 0 :
|
|
142
|
-
className: e("me-1 flex h-6 w-6 shrink-0 items-center justify-center rounded bg-transparent p-0 text-muted-foreground", "not-disabled:not-aria-disabled:hover:text-foreground",
|
|
143
|
-
}, q),
|
|
144
|
-
return /* @__PURE__ */
|
|
145
|
-
ref:
|
|
146
|
-
className: e("relative inline-flex h-8 w-full items-center rounded border border-input border-b-stroke-accessible bg-background text-body-1 text-foreground",
|
|
147
|
-
hidden:
|
|
148
|
-
...
|
|
149
|
-
onMouseDown: (e) => u(
|
|
139
|
+
disabled: v,
|
|
140
|
+
"aria-label": J || Be ? void 0 : ae,
|
|
141
|
+
className: e(d.dismissButton, "me-1 flex h-6 w-6 shrink-0 items-center justify-center rounded bg-transparent p-0 text-muted-foreground", "not-disabled:not-aria-disabled:hover:text-foreground", h, "disabled:cursor-not-allowed", b)
|
|
142
|
+
}, q), He = $.dangerouslySetInnerHTML == null ? K === "content" ? G.content : G.content ?? /* @__PURE__ */ D(S, { className: d.dismissIcon }) : void 0, Ue = c(x), We = c(T);
|
|
143
|
+
return /* @__PURE__ */ ie("div", {
|
|
144
|
+
ref: j,
|
|
145
|
+
className: e(d.root, "relative inline-flex h-8 w-full items-center rounded border border-input border-b-stroke-accessible bg-background text-body-1 text-foreground", g, Me && "border-destructive focus-within:border-b-destructive", v && "cursor-not-allowed opacity-50 has-focus-visible:opacity-100", k),
|
|
146
|
+
hidden: ke,
|
|
147
|
+
...Ae,
|
|
148
|
+
onMouseDown: (e) => u(Oe, Fe)(e),
|
|
150
149
|
children: [
|
|
151
|
-
/* @__PURE__ */
|
|
152
|
-
className: "flex shrink-0 items-center ps-2",
|
|
153
|
-
children:
|
|
150
|
+
/* @__PURE__ */ D("span", {
|
|
151
|
+
className: e(d.contentBefore, "flex shrink-0 items-center ps-2"),
|
|
152
|
+
children: Ue ? o(x, "span", "shrink-0") : /* @__PURE__ */ D(ee, { className: "text-muted-foreground" })
|
|
154
153
|
}),
|
|
155
|
-
/* @__PURE__ */
|
|
156
|
-
ref:
|
|
154
|
+
/* @__PURE__ */ D("input", {
|
|
155
|
+
ref: je,
|
|
157
156
|
type: "search",
|
|
158
157
|
value: V,
|
|
159
158
|
onChange: (e) => H(e.target.value),
|
|
160
|
-
placeholder:
|
|
161
|
-
disabled:
|
|
162
|
-
className: e("h-full min-w-0 flex-1 appearance-none border-none bg-transparent px-2 text-body-1 text-foreground", "placeholder:text-muted-foreground", "focus:outline-hidden", "disabled:cursor-not-allowed", "[&::-webkit-search-cancel-button]:hidden"),
|
|
159
|
+
placeholder: _,
|
|
160
|
+
disabled: v,
|
|
161
|
+
className: e(d.input, "h-full min-w-0 flex-1 appearance-none border-none bg-transparent px-2 text-body-1 text-foreground", "placeholder:text-muted-foreground", "focus:outline-hidden", "disabled:cursor-not-allowed", "[&::-webkit-search-cancel-button]:hidden"),
|
|
163
162
|
"aria-errormessage": pe,
|
|
164
|
-
"aria-details":
|
|
165
|
-
name:
|
|
166
|
-
form:
|
|
167
|
-
readOnly:
|
|
168
|
-
autoComplete:
|
|
169
|
-
autoFocus:
|
|
170
|
-
autoCapitalize:
|
|
171
|
-
autoCorrect:
|
|
172
|
-
inputMode:
|
|
173
|
-
enterKeyHint:
|
|
174
|
-
spellCheck:
|
|
175
|
-
maxLength:
|
|
176
|
-
minLength:
|
|
177
|
-
pattern:
|
|
178
|
-
tabIndex:
|
|
179
|
-
onFocus:
|
|
180
|
-
onBlur:
|
|
181
|
-
onKeyDown: u(
|
|
182
|
-
onKeyUp:
|
|
163
|
+
"aria-details": F,
|
|
164
|
+
name: L,
|
|
165
|
+
form: R,
|
|
166
|
+
readOnly: z,
|
|
167
|
+
autoComplete: B,
|
|
168
|
+
autoFocus: me,
|
|
169
|
+
autoCapitalize: he,
|
|
170
|
+
autoCorrect: ge,
|
|
171
|
+
inputMode: _e,
|
|
172
|
+
enterKeyHint: ve,
|
|
173
|
+
spellCheck: ye,
|
|
174
|
+
maxLength: be,
|
|
175
|
+
minLength: xe,
|
|
176
|
+
pattern: Se,
|
|
177
|
+
tabIndex: Ce,
|
|
178
|
+
onFocus: we,
|
|
179
|
+
onBlur: Te,
|
|
180
|
+
onKeyDown: u(Ee, Pe),
|
|
181
|
+
onKeyUp: De,
|
|
183
182
|
...W
|
|
184
183
|
}),
|
|
185
|
-
|
|
186
|
-
className: "flex shrink-0 items-center pe-2",
|
|
187
|
-
children: o(
|
|
184
|
+
We && /* @__PURE__ */ D("span", {
|
|
185
|
+
className: e(d.contentAfter, "flex shrink-0 items-center pe-2"),
|
|
186
|
+
children: o(T, "span", "shrink-0")
|
|
188
187
|
}),
|
|
189
|
-
V && !
|
|
188
|
+
V && !z ? /* @__PURE__ */ D("button", {
|
|
190
189
|
...$,
|
|
191
|
-
ref:
|
|
190
|
+
ref: Ve,
|
|
192
191
|
type: $.type ?? "button",
|
|
193
|
-
disabled:
|
|
194
|
-
onClick: (e) => u(
|
|
195
|
-
...G.disabledFocusable ?
|
|
196
|
-
children:
|
|
192
|
+
disabled: v || $.disabled,
|
|
193
|
+
onClick: (e) => u(Ie, Ne)(e),
|
|
194
|
+
...G.disabledFocusable ? y : void 0,
|
|
195
|
+
children: He
|
|
197
196
|
}) : null
|
|
198
197
|
]
|
|
199
198
|
});
|
|
200
199
|
};
|
|
201
|
-
|
|
200
|
+
P.displayName = "SearchBox";
|
|
202
201
|
//#endregion
|
|
203
|
-
export {
|
|
202
|
+
export { P as SearchBox };
|
|
204
203
|
|
|
205
204
|
//# sourceMappingURL=SearchBox.mjs.map
|