@hanzo/ui 8.27.91 → 8.28.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/NOTICE +25 -0
- package/README.md +1 -1
- package/dist/backends/gui/alert-dialog.cjs +24 -6
- package/dist/backends/gui/alert-dialog.d.ts +11 -3
- package/dist/backends/gui/alert-dialog.d.ts.map +1 -1
- package/dist/backends/gui/alert-dialog.js +24 -6
- package/dist/backends/gui/alert-dialog.js.map +1 -1
- package/dist/backends/gui/alert.cjs +32 -1
- package/dist/backends/gui/alert.d.ts +36 -3
- package/dist/backends/gui/alert.d.ts.map +1 -1
- package/dist/backends/gui/alert.js +32 -2
- package/dist/backends/gui/alert.js.map +1 -1
- package/dist/backends/gui/avatar-group.cjs +28 -0
- package/dist/backends/gui/avatar-group.d.ts +33 -0
- package/dist/backends/gui/avatar-group.d.ts.map +1 -0
- package/dist/backends/gui/avatar-group.js +26 -0
- package/dist/backends/gui/avatar-group.js.map +1 -0
- package/dist/backends/gui/avatar.cjs +53 -3
- package/dist/backends/gui/avatar.d.ts +46 -4
- package/dist/backends/gui/avatar.d.ts.map +1 -1
- package/dist/backends/gui/avatar.js +52 -3
- package/dist/backends/gui/avatar.js.map +1 -1
- package/dist/backends/gui/badge.cjs +40 -2
- package/dist/backends/gui/badge.d.ts +7 -2
- package/dist/backends/gui/badge.d.ts.map +1 -1
- package/dist/backends/gui/badge.js +40 -2
- package/dist/backends/gui/badge.js.map +1 -1
- package/dist/backends/gui/banner.cjs +40 -1
- package/dist/backends/gui/banner.d.ts +36 -3
- package/dist/backends/gui/banner.d.ts.map +1 -1
- package/dist/backends/gui/banner.js +42 -4
- package/dist/backends/gui/banner.js.map +1 -1
- package/dist/backends/gui/breadcrumb.cjs +28 -10
- package/dist/backends/gui/breadcrumb.d.ts +20 -11
- package/dist/backends/gui/breadcrumb.d.ts.map +1 -1
- package/dist/backends/gui/breadcrumb.js +28 -10
- package/dist/backends/gui/breadcrumb.js.map +1 -1
- package/dist/backends/gui/button-group.cjs +43 -0
- package/dist/backends/gui/button-group.d.ts +48 -0
- package/dist/backends/gui/button-group.d.ts.map +1 -0
- package/dist/backends/gui/button-group.js +40 -0
- package/dist/backends/gui/button-group.js.map +1 -0
- package/dist/backends/gui/button.cjs +177 -4
- package/dist/backends/gui/button.d.ts +69 -4
- package/dist/backends/gui/button.d.ts.map +1 -1
- package/dist/backends/gui/button.js +179 -6
- package/dist/backends/gui/button.js.map +1 -1
- package/dist/backends/gui/card.cjs +50 -21
- package/dist/backends/gui/card.d.ts +16 -7
- package/dist/backends/gui/card.d.ts.map +1 -1
- package/dist/backends/gui/card.js +50 -21
- package/dist/backends/gui/card.js.map +1 -1
- package/dist/backends/gui/checkbox.cjs +86 -14
- package/dist/backends/gui/checkbox.d.ts +30 -2
- package/dist/backends/gui/checkbox.d.ts.map +1 -1
- package/dist/backends/gui/checkbox.js +87 -15
- package/dist/backends/gui/checkbox.js.map +1 -1
- package/dist/backends/gui/chip.cjs +51 -0
- package/dist/backends/gui/chip.d.ts +47 -0
- package/dist/backends/gui/chip.d.ts.map +1 -0
- package/dist/backends/gui/chip.js +49 -0
- package/dist/backends/gui/chip.js.map +1 -0
- package/dist/backends/gui/choice.cjs +18 -3
- package/dist/backends/gui/choice.d.ts +10 -2
- package/dist/backends/gui/choice.d.ts.map +1 -1
- package/dist/backends/gui/choice.js +19 -4
- package/dist/backends/gui/choice.js.map +1 -1
- package/dist/backends/gui/code-editor.cjs +16 -5
- package/dist/backends/gui/code-editor.d.ts +18 -1
- package/dist/backends/gui/code-editor.d.ts.map +1 -1
- package/dist/backends/gui/code-editor.js +16 -5
- package/dist/backends/gui/code-editor.js.map +1 -1
- package/dist/backends/gui/color-sample.cjs +24 -0
- package/dist/backends/gui/color-sample.d.ts +23 -0
- package/dist/backends/gui/color-sample.d.ts.map +1 -0
- package/dist/backends/gui/color-sample.js +22 -0
- package/dist/backends/gui/color-sample.js.map +1 -0
- package/dist/backends/gui/control.cjs +5 -3
- package/dist/backends/gui/control.d.ts +13 -3
- package/dist/backends/gui/control.d.ts.map +1 -1
- package/dist/backends/gui/control.js +5 -3
- package/dist/backends/gui/control.js.map +1 -1
- package/dist/backends/gui/country-select.cjs +69 -0
- package/dist/backends/gui/country-select.d.ts +30 -0
- package/dist/backends/gui/country-select.d.ts.map +1 -0
- package/dist/backends/gui/country-select.js +67 -0
- package/dist/backends/gui/country-select.js.map +1 -0
- package/dist/backends/gui/currency-picker.cjs +48 -0
- package/dist/backends/gui/currency-picker.d.ts +37 -0
- package/dist/backends/gui/currency-picker.d.ts.map +1 -0
- package/dist/backends/gui/currency-picker.js +46 -0
- package/dist/backends/gui/currency-picker.js.map +1 -0
- package/dist/backends/gui/density.cjs +32 -0
- package/dist/backends/gui/density.d.ts +27 -0
- package/dist/backends/gui/density.d.ts.map +1 -0
- package/dist/backends/gui/density.js +27 -0
- package/dist/backends/gui/density.js.map +1 -0
- package/dist/backends/gui/dialog.cjs +65 -7
- package/dist/backends/gui/dialog.d.ts +68 -3
- package/dist/backends/gui/dialog.d.ts.map +1 -1
- package/dist/backends/gui/dialog.js +63 -7
- package/dist/backends/gui/dialog.js.map +1 -1
- package/dist/backends/gui/dropdown-menu.cjs +361 -31
- package/dist/backends/gui/dropdown-menu.d.ts +151 -15
- package/dist/backends/gui/dropdown-menu.d.ts.map +1 -1
- package/dist/backends/gui/dropdown-menu.js +353 -34
- package/dist/backends/gui/dropdown-menu.js.map +1 -1
- package/dist/backends/gui/feedback.cjs +78 -0
- package/dist/backends/gui/feedback.d.ts +46 -0
- package/dist/backends/gui/feedback.d.ts.map +1 -0
- package/dist/backends/gui/feedback.js +74 -0
- package/dist/backends/gui/feedback.js.map +1 -0
- package/dist/backends/gui/field.cjs +71 -14
- package/dist/backends/gui/field.d.ts +43 -3
- package/dist/backends/gui/field.d.ts.map +1 -1
- package/dist/backends/gui/field.js +69 -14
- package/dist/backends/gui/field.js.map +1 -1
- package/dist/backends/gui/flag.cjs +17 -0
- package/dist/backends/gui/flag.d.ts +9 -0
- package/dist/backends/gui/flag.d.ts.map +1 -0
- package/dist/backends/gui/flag.js +14 -0
- package/dist/backends/gui/flag.js.map +1 -0
- package/dist/backends/gui/grip.cjs +35 -3
- package/dist/backends/gui/grip.d.ts +16 -1
- package/dist/backends/gui/grip.d.ts.map +1 -1
- package/dist/backends/gui/grip.js +35 -3
- package/dist/backends/gui/grip.js.map +1 -1
- package/dist/backends/gui/heading.cjs +27 -0
- package/dist/backends/gui/heading.d.ts +8 -0
- package/dist/backends/gui/heading.d.ts.map +1 -0
- package/dist/backends/gui/heading.js +25 -0
- package/dist/backends/gui/heading.js.map +1 -0
- package/dist/backends/gui/hue.cjs +49 -0
- package/dist/backends/gui/hue.d.ts +18 -0
- package/dist/backends/gui/hue.d.ts.map +1 -0
- package/dist/backends/gui/hue.js +43 -0
- package/dist/backends/gui/hue.js.map +1 -0
- package/dist/backends/gui/icon-tile.cjs +36 -0
- package/dist/backends/gui/icon-tile.d.ts +26 -0
- package/dist/backends/gui/icon-tile.d.ts.map +1 -0
- package/dist/backends/gui/icon-tile.js +32 -0
- package/dist/backends/gui/icon-tile.js.map +1 -0
- package/dist/backends/gui/image-input.cjs +78 -0
- package/dist/backends/gui/image-input.d.ts +32 -0
- package/dist/backends/gui/image-input.d.ts.map +1 -0
- package/dist/backends/gui/image-input.js +74 -0
- package/dist/backends/gui/image-input.js.map +1 -0
- package/dist/backends/gui/index.cjs +93 -7
- package/dist/backends/gui/index.d.ts +45 -2
- package/dist/backends/gui/index.d.ts.map +1 -1
- package/dist/backends/gui/index.js +35 -1
- package/dist/backends/gui/index.js.map +1 -1
- package/dist/backends/gui/input-group.cjs +49 -0
- package/dist/backends/gui/input-group.d.ts +46 -0
- package/dist/backends/gui/input-group.d.ts.map +1 -0
- package/dist/backends/gui/input-group.js +46 -0
- package/dist/backends/gui/input-group.js.map +1 -0
- package/dist/backends/gui/input.cjs +32 -4
- package/dist/backends/gui/input.d.ts +5 -1
- package/dist/backends/gui/input.d.ts.map +1 -1
- package/dist/backends/gui/input.js +33 -5
- package/dist/backends/gui/input.js.map +1 -1
- package/dist/backends/gui/item.cjs +34 -2
- package/dist/backends/gui/item.d.ts +21 -5
- package/dist/backends/gui/item.d.ts.map +1 -1
- package/dist/backends/gui/item.js +35 -3
- package/dist/backends/gui/item.js.map +1 -1
- package/dist/backends/gui/json-tree.cjs +103 -15
- package/dist/backends/gui/json-tree.d.ts +39 -3
- package/dist/backends/gui/json-tree.d.ts.map +1 -1
- package/dist/backends/gui/json-tree.js +104 -16
- package/dist/backends/gui/json-tree.js.map +1 -1
- package/dist/backends/gui/kbd.cjs +18 -2
- package/dist/backends/gui/kbd.d.ts +5 -2
- package/dist/backends/gui/kbd.d.ts.map +1 -1
- package/dist/backends/gui/kbd.js +18 -2
- package/dist/backends/gui/kbd.js.map +1 -1
- package/dist/backends/gui/label.cjs +14 -3
- package/dist/backends/gui/label.d.ts +12 -3
- package/dist/backends/gui/label.d.ts.map +1 -1
- package/dist/backends/gui/label.js +14 -3
- package/dist/backends/gui/label.js.map +1 -1
- package/dist/backends/gui/layout.cjs +5 -1
- package/dist/backends/gui/layout.d.ts +1 -1
- package/dist/backends/gui/layout.d.ts.map +1 -1
- package/dist/backends/gui/layout.js +5 -1
- package/dist/backends/gui/layout.js.map +1 -1
- package/dist/backends/gui/number-field.cjs +163 -0
- package/dist/backends/gui/number-field.d.ts +34 -0
- package/dist/backends/gui/number-field.d.ts.map +1 -0
- package/dist/backends/gui/number-field.js +160 -0
- package/dist/backends/gui/number-field.js.map +1 -0
- package/dist/backends/gui/overflowing-list.cjs +79 -0
- package/dist/backends/gui/overflowing-list.d.ts +42 -0
- package/dist/backends/gui/overflowing-list.d.ts.map +1 -0
- package/dist/backends/gui/overflowing-list.js +76 -0
- package/dist/backends/gui/overflowing-list.js.map +1 -0
- package/dist/backends/gui/phone-country-picker.cjs +60 -0
- package/dist/backends/gui/phone-country-picker.d.ts +34 -0
- package/dist/backends/gui/phone-country-picker.d.ts.map +1 -0
- package/dist/backends/gui/phone-country-picker.js +57 -0
- package/dist/backends/gui/phone-country-picker.js.map +1 -0
- package/dist/backends/gui/popover.cjs +20 -4
- package/dist/backends/gui/popover.d.ts +12 -1
- package/dist/backends/gui/popover.d.ts.map +1 -1
- package/dist/backends/gui/popover.js +21 -5
- package/dist/backends/gui/popover.js.map +1 -1
- package/dist/backends/gui/progress-ring.cjs +38 -0
- package/dist/backends/gui/progress-ring.d.ts +37 -0
- package/dist/backends/gui/progress-ring.d.ts.map +1 -0
- package/dist/backends/gui/progress-ring.js +36 -0
- package/dist/backends/gui/progress-ring.js.map +1 -0
- package/dist/backends/gui/progress.cjs +31 -7
- package/dist/backends/gui/progress.d.ts +25 -3
- package/dist/backends/gui/progress.d.ts.map +1 -1
- package/dist/backends/gui/progress.js +32 -8
- package/dist/backends/gui/progress.js.map +1 -1
- package/dist/backends/gui/radio-group.cjs +28 -2
- package/dist/backends/gui/radio-group.d.ts +20 -2
- package/dist/backends/gui/radio-group.d.ts.map +1 -1
- package/dist/backends/gui/radio-group.js +28 -2
- package/dist/backends/gui/radio-group.js.map +1 -1
- package/dist/backends/gui/search-list.cjs +62 -0
- package/dist/backends/gui/search-list.d.ts +65 -0
- package/dist/backends/gui/search-list.d.ts.map +1 -0
- package/dist/backends/gui/search-list.js +58 -0
- package/dist/backends/gui/search-list.js.map +1 -0
- package/dist/backends/gui/select.cjs +50 -16
- package/dist/backends/gui/select.d.ts +12 -3
- package/dist/backends/gui/select.d.ts.map +1 -1
- package/dist/backends/gui/select.js +51 -17
- package/dist/backends/gui/select.js.map +1 -1
- package/dist/backends/gui/shortcut.cjs +122 -0
- package/dist/backends/gui/shortcut.d.ts +58 -0
- package/dist/backends/gui/shortcut.d.ts.map +1 -0
- package/dist/backends/gui/shortcut.js +115 -0
- package/dist/backends/gui/shortcut.js.map +1 -0
- package/dist/backends/gui/skeleton.cjs +41 -10
- package/dist/backends/gui/skeleton.d.ts +46 -8
- package/dist/backends/gui/skeleton.d.ts.map +1 -1
- package/dist/backends/gui/skeleton.js +39 -8
- package/dist/backends/gui/skeleton.js.map +1 -1
- package/dist/backends/gui/snippet.cjs +12 -1
- package/dist/backends/gui/snippet.d.ts +4 -2
- package/dist/backends/gui/snippet.d.ts.map +1 -1
- package/dist/backends/gui/snippet.js +12 -1
- package/dist/backends/gui/snippet.js.map +1 -1
- package/dist/backends/gui/spinner.cjs +8 -1
- package/dist/backends/gui/spinner.d.ts +11 -2
- package/dist/backends/gui/spinner.d.ts.map +1 -1
- package/dist/backends/gui/spinner.js +9 -2
- package/dist/backends/gui/spinner.js.map +1 -1
- package/dist/backends/gui/stack-icon.cjs +17 -0
- package/dist/backends/gui/stack-icon.d.ts +15 -0
- package/dist/backends/gui/stack-icon.d.ts.map +1 -0
- package/dist/backends/gui/stack-icon.js +15 -0
- package/dist/backends/gui/stack-icon.js.map +1 -0
- package/dist/backends/gui/status.cjs +38 -1
- package/dist/backends/gui/status.d.ts +16 -2
- package/dist/backends/gui/status.d.ts.map +1 -1
- package/dist/backends/gui/status.js +38 -2
- package/dist/backends/gui/status.js.map +1 -1
- package/dist/backends/gui/stepper.cjs +73 -3
- package/dist/backends/gui/stepper.d.ts +25 -1
- package/dist/backends/gui/stepper.d.ts.map +1 -1
- package/dist/backends/gui/stepper.js +71 -5
- package/dist/backends/gui/stepper.js.map +1 -1
- package/dist/backends/gui/switch.cjs +35 -20
- package/dist/backends/gui/switch.d.ts +12 -2
- package/dist/backends/gui/switch.d.ts.map +1 -1
- package/dist/backends/gui/switch.js +35 -20
- package/dist/backends/gui/switch.js.map +1 -1
- package/dist/backends/gui/tabs.cjs +63 -17
- package/dist/backends/gui/tabs.d.ts +35 -6
- package/dist/backends/gui/tabs.d.ts.map +1 -1
- package/dist/backends/gui/tabs.js +65 -19
- package/dist/backends/gui/tabs.js.map +1 -1
- package/dist/backends/gui/tag.cjs +48 -0
- package/dist/backends/gui/tag.d.ts +53 -0
- package/dist/backends/gui/tag.d.ts.map +1 -0
- package/dist/backends/gui/tag.js +46 -0
- package/dist/backends/gui/tag.js.map +1 -0
- package/dist/backends/gui/tags.cjs +9 -2
- package/dist/backends/gui/tags.d.ts +6 -5
- package/dist/backends/gui/tags.d.ts.map +1 -1
- package/dist/backends/gui/tags.js +9 -2
- package/dist/backends/gui/tags.js.map +1 -1
- package/dist/backends/gui/textarea.cjs +22 -6
- package/dist/backends/gui/textarea.d.ts +10 -1
- package/dist/backends/gui/textarea.d.ts.map +1 -1
- package/dist/backends/gui/textarea.js +22 -6
- package/dist/backends/gui/textarea.js.map +1 -1
- package/dist/backends/gui/toaster.cjs +167 -3
- package/dist/backends/gui/toaster.d.ts +28 -2
- package/dist/backends/gui/toaster.d.ts.map +1 -1
- package/dist/backends/gui/toaster.js +167 -5
- package/dist/backends/gui/toaster.js.map +1 -1
- package/dist/backends/gui/toggle-group.cjs +13 -0
- package/dist/backends/gui/toggle-group.d.ts +7 -1
- package/dist/backends/gui/toggle-group.d.ts.map +1 -1
- package/dist/backends/gui/toggle-group.js +13 -0
- package/dist/backends/gui/toggle-group.js.map +1 -1
- package/dist/backends/gui/tooltip.cjs +29 -6
- package/dist/backends/gui/tooltip.d.ts +23 -4
- package/dist/backends/gui/tooltip.d.ts.map +1 -1
- package/dist/backends/gui/tooltip.js +31 -8
- package/dist/backends/gui/tooltip.js.map +1 -1
- package/dist/backends/gui/truncated-text.cjs +102 -0
- package/dist/backends/gui/truncated-text.d.ts +55 -0
- package/dist/backends/gui/truncated-text.d.ts.map +1 -0
- package/dist/backends/gui/truncated-text.js +97 -0
- package/dist/backends/gui/truncated-text.js.map +1 -0
- package/dist/gallery/compound.cjs +60 -0
- package/dist/gallery/compound.d.ts +2 -0
- package/dist/gallery/compound.d.ts.map +1 -0
- package/dist/gallery/compound.js +58 -0
- package/dist/gallery/compound.js.map +1 -0
- package/dist/gallery/display.cjs +47 -0
- package/dist/gallery/display.d.ts +3 -0
- package/dist/gallery/display.d.ts.map +1 -0
- package/dist/gallery/display.js +45 -0
- package/dist/gallery/display.js.map +1 -0
- package/dist/gallery/feedback.cjs +38 -0
- package/dist/gallery/feedback.d.ts +2 -0
- package/dist/gallery/feedback.d.ts.map +1 -0
- package/dist/gallery/feedback.js +36 -0
- package/dist/gallery/feedback.js.map +1 -0
- package/dist/gallery/fields.cjs +53 -0
- package/dist/gallery/fields.d.ts +2 -0
- package/dist/gallery/fields.d.ts.map +1 -0
- package/dist/gallery/fields.js +51 -0
- package/dist/gallery/fields.js.map +1 -0
- package/dist/gallery/frames.cjs +47 -0
- package/dist/gallery/frames.d.ts +2 -0
- package/dist/gallery/frames.d.ts.map +1 -0
- package/dist/gallery/frames.js +45 -0
- package/dist/gallery/frames.js.map +1 -0
- package/dist/gallery/menus.cjs +64 -0
- package/dist/gallery/menus.d.ts +15 -0
- package/dist/gallery/menus.d.ts.map +1 -0
- package/dist/gallery/menus.js +58 -0
- package/dist/gallery/menus.js.map +1 -0
- package/dist/gallery/records.cjs +33 -0
- package/dist/gallery/records.d.ts +2 -0
- package/dist/gallery/records.d.ts.map +1 -0
- package/dist/gallery/records.js +31 -0
- package/dist/gallery/records.js.map +1 -0
- package/dist/gallery/section.cjs +17 -0
- package/dist/gallery/section.d.ts +10 -0
- package/dist/gallery/section.d.ts.map +1 -0
- package/dist/gallery/section.js +14 -0
- package/dist/gallery/section.js.map +1 -0
- package/dist/gallery.cjs +8 -14
- package/dist/gallery.d.ts.map +1 -1
- package/dist/gallery.html +1594 -256
- package/dist/gallery.js +3 -9
- package/dist/gallery.js.map +1 -1
- package/dist/gui-config.cjs +33 -4
- package/dist/gui-config.d.ts +11 -3
- package/dist/gui-config.d.ts.map +1 -1
- package/dist/gui-config.js +33 -4
- package/dist/gui-config.js.map +1 -1
- package/dist/index.cjs +61 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/index.node.cjs +61 -2
- package/dist/index.node.js +7 -1
- package/dist/motion.cjs +25 -1
- package/dist/motion.d.ts +16 -1
- package/dist/motion.d.ts.map +1 -1
- package/dist/motion.js +24 -1
- package/dist/motion.js.map +1 -1
- package/dist/primitives/AvatarGroup.cjs +8 -0
- package/dist/primitives/AvatarGroup.d.ts +2 -0
- package/dist/primitives/AvatarGroup.d.ts.map +1 -0
- package/dist/primitives/AvatarGroup.js +5 -0
- package/dist/primitives/AvatarGroup.js.map +1 -0
- package/dist/primitives/BannerAction.cjs +8 -0
- package/dist/primitives/BannerAction.d.ts +2 -0
- package/dist/primitives/BannerAction.d.ts.map +1 -0
- package/dist/primitives/BannerAction.js +5 -0
- package/dist/primitives/BannerAction.js.map +1 -0
- package/dist/primitives/ButtonGroup.cjs +8 -0
- package/dist/primitives/ButtonGroup.d.ts +2 -0
- package/dist/primitives/ButtonGroup.d.ts.map +1 -0
- package/dist/primitives/ButtonGroup.js +5 -0
- package/dist/primitives/ButtonGroup.js.map +1 -0
- package/dist/primitives/ButtonGroupContext.cjs +8 -0
- package/dist/primitives/ButtonGroupContext.d.ts +2 -0
- package/dist/primitives/ButtonGroupContext.d.ts.map +1 -0
- package/dist/primitives/ButtonGroupContext.js +5 -0
- package/dist/primitives/ButtonGroupContext.js.map +1 -0
- package/dist/primitives/CalloutAction.cjs +8 -0
- package/dist/primitives/CalloutAction.d.ts +2 -0
- package/dist/primitives/CalloutAction.d.ts.map +1 -0
- package/dist/primitives/CalloutAction.js +5 -0
- package/dist/primitives/CalloutAction.js.map +1 -0
- package/dist/primitives/Chip.cjs +8 -0
- package/dist/primitives/Chip.d.ts +2 -0
- package/dist/primitives/Chip.d.ts.map +1 -0
- package/dist/primitives/Chip.js +5 -0
- package/dist/primitives/Chip.js.map +1 -0
- package/dist/primitives/ColorSample.cjs +8 -0
- package/dist/primitives/ColorSample.d.ts +2 -0
- package/dist/primitives/ColorSample.d.ts.map +1 -0
- package/dist/primitives/ColorSample.js +5 -0
- package/dist/primitives/ColorSample.js.map +1 -0
- package/dist/primitives/CountrySelect.cjs +8 -0
- package/dist/primitives/CountrySelect.d.ts +2 -0
- package/dist/primitives/CountrySelect.d.ts.map +1 -0
- package/dist/primitives/CountrySelect.js +5 -0
- package/dist/primitives/CountrySelect.js.map +1 -0
- package/dist/primitives/CurrencyPicker.cjs +8 -0
- package/dist/primitives/CurrencyPicker.d.ts +2 -0
- package/dist/primitives/CurrencyPicker.d.ts.map +1 -0
- package/dist/primitives/CurrencyPicker.js +5 -0
- package/dist/primitives/CurrencyPicker.js.map +1 -0
- package/dist/primitives/Density.cjs +8 -0
- package/dist/primitives/Density.d.ts +2 -0
- package/dist/primitives/Density.d.ts.map +1 -0
- package/dist/primitives/Density.js +5 -0
- package/dist/primitives/Density.js.map +1 -0
- package/dist/primitives/DialogBody.cjs +8 -0
- package/dist/primitives/DialogBody.d.ts +2 -0
- package/dist/primitives/DialogBody.d.ts.map +1 -0
- package/dist/primitives/DialogBody.js +5 -0
- package/dist/primitives/DialogBody.js.map +1 -0
- package/dist/primitives/DropdownMenuBack.cjs +8 -0
- package/dist/primitives/DropdownMenuBack.d.ts +2 -0
- package/dist/primitives/DropdownMenuBack.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuBack.js +5 -0
- package/dist/primitives/DropdownMenuBack.js.map +1 -0
- package/dist/primitives/DropdownMenuClose.cjs +8 -0
- package/dist/primitives/DropdownMenuClose.d.ts +2 -0
- package/dist/primitives/DropdownMenuClose.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuClose.js +5 -0
- package/dist/primitives/DropdownMenuClose.js.map +1 -0
- package/dist/primitives/DropdownMenuEmpty.cjs +8 -0
- package/dist/primitives/DropdownMenuEmpty.d.ts +2 -0
- package/dist/primitives/DropdownMenuEmpty.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuEmpty.js +5 -0
- package/dist/primitives/DropdownMenuEmpty.js.map +1 -0
- package/dist/primitives/DropdownMenuHeader.cjs +8 -0
- package/dist/primitives/DropdownMenuHeader.d.ts +2 -0
- package/dist/primitives/DropdownMenuHeader.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuHeader.js +5 -0
- package/dist/primitives/DropdownMenuHeader.js.map +1 -0
- package/dist/primitives/DropdownMenuLoading.cjs +8 -0
- package/dist/primitives/DropdownMenuLoading.d.ts +2 -0
- package/dist/primitives/DropdownMenuLoading.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuLoading.js +5 -0
- package/dist/primitives/DropdownMenuLoading.js.map +1 -0
- package/dist/primitives/DropdownMenuOptionItem.cjs +8 -0
- package/dist/primitives/DropdownMenuOptionItem.d.ts +2 -0
- package/dist/primitives/DropdownMenuOptionItem.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuOptionItem.js +5 -0
- package/dist/primitives/DropdownMenuOptionItem.js.map +1 -0
- package/dist/primitives/DropdownMenuPage.cjs +8 -0
- package/dist/primitives/DropdownMenuPage.d.ts +2 -0
- package/dist/primitives/DropdownMenuPage.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuPage.js +5 -0
- package/dist/primitives/DropdownMenuPage.js.map +1 -0
- package/dist/primitives/DropdownMenuSearch.cjs +8 -0
- package/dist/primitives/DropdownMenuSearch.d.ts +2 -0
- package/dist/primitives/DropdownMenuSearch.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuSearch.js +5 -0
- package/dist/primitives/DropdownMenuSearch.js.map +1 -0
- package/dist/primitives/DropdownMenuSection.cjs +8 -0
- package/dist/primitives/DropdownMenuSection.d.ts +2 -0
- package/dist/primitives/DropdownMenuSection.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuSection.js +5 -0
- package/dist/primitives/DropdownMenuSection.js.map +1 -0
- package/dist/primitives/DropdownMenuSelectionGroup.cjs +8 -0
- package/dist/primitives/DropdownMenuSelectionGroup.d.ts +2 -0
- package/dist/primitives/DropdownMenuSelectionGroup.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuSelectionGroup.js +5 -0
- package/dist/primitives/DropdownMenuSelectionGroup.js.map +1 -0
- package/dist/primitives/DropdownMenuTitle.cjs +8 -0
- package/dist/primitives/DropdownMenuTitle.d.ts +2 -0
- package/dist/primitives/DropdownMenuTitle.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuTitle.js +5 -0
- package/dist/primitives/DropdownMenuTitle.js.map +1 -0
- package/dist/primitives/Heading.cjs +2 -2
- package/dist/primitives/Heading.d.ts +1 -1
- package/dist/primitives/Heading.d.ts.map +1 -1
- package/dist/primitives/Heading.js +1 -1
- package/dist/primitives/Heading.js.map +1 -1
- package/dist/primitives/IconTile.cjs +8 -0
- package/dist/primitives/IconTile.d.ts +2 -0
- package/dist/primitives/IconTile.d.ts.map +1 -0
- package/dist/primitives/IconTile.js +5 -0
- package/dist/primitives/IconTile.js.map +1 -0
- package/dist/primitives/ImageInput.cjs +8 -0
- package/dist/primitives/ImageInput.d.ts +2 -0
- package/dist/primitives/ImageInput.d.ts.map +1 -0
- package/dist/primitives/ImageInput.js +5 -0
- package/dist/primitives/ImageInput.js.map +1 -0
- package/dist/primitives/InputGroup.cjs +8 -0
- package/dist/primitives/InputGroup.d.ts +2 -0
- package/dist/primitives/InputGroup.d.ts.map +1 -0
- package/dist/primitives/InputGroup.js +5 -0
- package/dist/primitives/InputGroup.js.map +1 -0
- package/dist/primitives/NumberField.cjs +8 -0
- package/dist/primitives/NumberField.d.ts +2 -0
- package/dist/primitives/NumberField.d.ts.map +1 -0
- package/dist/primitives/NumberField.js +5 -0
- package/dist/primitives/NumberField.js.map +1 -0
- package/dist/primitives/OverflowingList.cjs +8 -0
- package/dist/primitives/OverflowingList.d.ts +2 -0
- package/dist/primitives/OverflowingList.d.ts.map +1 -0
- package/dist/primitives/OverflowingList.js +5 -0
- package/dist/primitives/OverflowingList.js.map +1 -0
- package/dist/primitives/PhoneCountryPicker.cjs +8 -0
- package/dist/primitives/PhoneCountryPicker.d.ts +2 -0
- package/dist/primitives/PhoneCountryPicker.d.ts.map +1 -0
- package/dist/primitives/PhoneCountryPicker.js +5 -0
- package/dist/primitives/PhoneCountryPicker.js.map +1 -0
- package/dist/primitives/ProgressRing.cjs +8 -0
- package/dist/primitives/ProgressRing.d.ts +2 -0
- package/dist/primitives/ProgressRing.d.ts.map +1 -0
- package/dist/primitives/ProgressRing.js +5 -0
- package/dist/primitives/ProgressRing.js.map +1 -0
- package/dist/primitives/RadioCircle.cjs +8 -0
- package/dist/primitives/RadioCircle.d.ts +2 -0
- package/dist/primitives/RadioCircle.d.ts.map +1 -0
- package/dist/primitives/RadioCircle.js +5 -0
- package/dist/primitives/RadioCircle.js.map +1 -0
- package/dist/primitives/SKELETON_HEIGHT.cjs +8 -0
- package/dist/primitives/SKELETON_HEIGHT.d.ts +2 -0
- package/dist/primitives/SKELETON_HEIGHT.d.ts.map +1 -0
- package/dist/primitives/SKELETON_HEIGHT.js +5 -0
- package/dist/primitives/SKELETON_HEIGHT.js.map +1 -0
- package/dist/primitives/STATUS_COLOR.cjs +8 -0
- package/dist/primitives/STATUS_COLOR.d.ts +2 -0
- package/dist/primitives/STATUS_COLOR.d.ts.map +1 -0
- package/dist/primitives/STATUS_COLOR.js +5 -0
- package/dist/primitives/STATUS_COLOR.js.map +1 -0
- package/dist/primitives/STATUS_HUE.cjs +8 -0
- package/dist/primitives/STATUS_HUE.d.ts +2 -0
- package/dist/primitives/STATUS_HUE.d.ts.map +1 -0
- package/dist/primitives/STATUS_HUE.js +5 -0
- package/dist/primitives/STATUS_HUE.js.map +1 -0
- package/dist/primitives/STATUS_PAINT.cjs +8 -0
- package/dist/primitives/STATUS_PAINT.d.ts +2 -0
- package/dist/primitives/STATUS_PAINT.d.ts.map +1 -0
- package/dist/primitives/STATUS_PAINT.js +5 -0
- package/dist/primitives/STATUS_PAINT.js.map +1 -0
- package/dist/primitives/Shortcut.cjs +8 -0
- package/dist/primitives/Shortcut.d.ts +2 -0
- package/dist/primitives/Shortcut.d.ts.map +1 -0
- package/dist/primitives/Shortcut.js +5 -0
- package/dist/primitives/Shortcut.js.map +1 -0
- package/dist/primitives/StackIcon.cjs +8 -0
- package/dist/primitives/StackIcon.d.ts +2 -0
- package/dist/primitives/StackIcon.d.ts.map +1 -0
- package/dist/primitives/StackIcon.js +5 -0
- package/dist/primitives/StackIcon.js.map +1 -0
- package/dist/primitives/TOAST_DURATION.cjs +8 -0
- package/dist/primitives/TOAST_DURATION.d.ts +2 -0
- package/dist/primitives/TOAST_DURATION.d.ts.map +1 -0
- package/dist/primitives/TOAST_DURATION.js +5 -0
- package/dist/primitives/TOAST_DURATION.js.map +1 -0
- package/dist/primitives/Tag.cjs +8 -0
- package/dist/primitives/Tag.d.ts +2 -0
- package/dist/primitives/Tag.d.ts.map +1 -0
- package/dist/primitives/Tag.js +5 -0
- package/dist/primitives/Tag.js.map +1 -0
- package/dist/primitives/ToastCard.cjs +8 -0
- package/dist/primitives/ToastCard.d.ts +2 -0
- package/dist/primitives/ToastCard.d.ts.map +1 -0
- package/dist/primitives/ToastCard.js +5 -0
- package/dist/primitives/ToastCard.js.map +1 -0
- package/dist/primitives/ToastFace.cjs +8 -0
- package/dist/primitives/ToastFace.d.ts +2 -0
- package/dist/primitives/ToastFace.d.ts.map +1 -0
- package/dist/primitives/ToastFace.js +5 -0
- package/dist/primitives/ToastFace.js.map +1 -0
- package/dist/primitives/TruncatedText.cjs +8 -0
- package/dist/primitives/TruncatedText.d.ts +2 -0
- package/dist/primitives/TruncatedText.d.ts.map +1 -0
- package/dist/primitives/TruncatedText.js +5 -0
- package/dist/primitives/TruncatedText.js.map +1 -0
- package/dist/primitives/TruncatedTextProvider.cjs +8 -0
- package/dist/primitives/TruncatedTextProvider.d.ts +2 -0
- package/dist/primitives/TruncatedTextProvider.d.ts.map +1 -0
- package/dist/primitives/TruncatedTextProvider.js +5 -0
- package/dist/primitives/TruncatedTextProvider.js.map +1 -0
- package/dist/primitives/VisuallyHidden.cjs +8 -0
- package/dist/primitives/VisuallyHidden.d.ts +2 -0
- package/dist/primitives/VisuallyHidden.d.ts.map +1 -0
- package/dist/primitives/VisuallyHidden.js +5 -0
- package/dist/primitives/VisuallyHidden.js.map +1 -0
- package/dist/primitives/fieldSize.cjs +8 -0
- package/dist/primitives/fieldSize.d.ts +2 -0
- package/dist/primitives/fieldSize.d.ts.map +1 -0
- package/dist/primitives/fieldSize.js +5 -0
- package/dist/primitives/fieldSize.js.map +1 -0
- package/dist/primitives/flag.cjs +8 -0
- package/dist/primitives/flag.d.ts +2 -0
- package/dist/primitives/flag.d.ts.map +1 -0
- package/dist/primitives/flag.js +5 -0
- package/dist/primitives/flag.js.map +1 -0
- package/dist/primitives/formatShortcut.cjs +8 -0
- package/dist/primitives/formatShortcut.d.ts +2 -0
- package/dist/primitives/formatShortcut.d.ts.map +1 -0
- package/dist/primitives/formatShortcut.js +5 -0
- package/dist/primitives/formatShortcut.js.map +1 -0
- package/dist/primitives/initialOf.cjs +8 -0
- package/dist/primitives/initialOf.d.ts +2 -0
- package/dist/primitives/initialOf.d.ts.map +1 -0
- package/dist/primitives/initialOf.js +5 -0
- package/dist/primitives/initialOf.js.map +1 -0
- package/dist/primitives/parseNumber.cjs +8 -0
- package/dist/primitives/parseNumber.d.ts +2 -0
- package/dist/primitives/parseNumber.d.ts.map +1 -0
- package/dist/primitives/parseNumber.js +5 -0
- package/dist/primitives/parseNumber.js.map +1 -0
- package/dist/primitives/speakShortcut.cjs +8 -0
- package/dist/primitives/speakShortcut.d.ts +2 -0
- package/dist/primitives/speakShortcut.d.ts.map +1 -0
- package/dist/primitives/speakShortcut.js +5 -0
- package/dist/primitives/speakShortcut.js.map +1 -0
- package/dist/primitives/tileTones.cjs +8 -0
- package/dist/primitives/tileTones.d.ts +2 -0
- package/dist/primitives/tileTones.d.ts.map +1 -0
- package/dist/primitives/tileTones.js +5 -0
- package/dist/primitives/tileTones.js.map +1 -0
- package/dist/primitives/useDensity.cjs +8 -0
- package/dist/primitives/useDensity.d.ts +2 -0
- package/dist/primitives/useDensity.d.ts.map +1 -0
- package/dist/primitives/useDensity.js +5 -0
- package/dist/primitives/useDensity.js.map +1 -0
- package/dist/primitives/useField.cjs +8 -0
- package/dist/primitives/useField.d.ts +2 -0
- package/dist/primitives/useField.d.ts.map +1 -0
- package/dist/primitives/useField.js +5 -0
- package/dist/primitives/useField.js.map +1 -0
- package/dist/product/ComboBox.cjs +25 -7
- package/dist/product/ComboBox.d.ts +3 -1
- package/dist/product/ComboBox.d.ts.map +1 -1
- package/dist/product/ComboBox.js +25 -7
- package/dist/product/ComboBox.js.map +1 -1
- package/dist/product/CommandMenu.cjs +137 -0
- package/dist/product/CommandMenu.d.ts +77 -0
- package/dist/product/CommandMenu.d.ts.map +1 -0
- package/dist/product/CommandMenu.js +134 -0
- package/dist/product/CommandMenu.js.map +1 -0
- package/dist/product/DetailPane.cjs +154 -12
- package/dist/product/DetailPane.d.ts +80 -2
- package/dist/product/DetailPane.d.ts.map +1 -1
- package/dist/product/DetailPane.js +153 -16
- package/dist/product/DetailPane.js.map +1 -1
- package/dist/product/Fact.cjs +6 -1
- package/dist/product/Fact.d.ts +16 -1
- package/dist/product/Fact.d.ts.map +1 -1
- package/dist/product/Fact.js +6 -1
- package/dist/product/Fact.js.map +1 -1
- package/dist/product/Field.cjs +14 -2
- package/dist/product/Field.d.ts +16 -1
- package/dist/product/Field.d.ts.map +1 -1
- package/dist/product/Field.js +14 -2
- package/dist/product/Field.js.map +1 -1
- package/dist/product/Filters.cjs +61 -9
- package/dist/product/Filters.d.ts +37 -6
- package/dist/product/Filters.d.ts.map +1 -1
- package/dist/product/Filters.js +62 -10
- package/dist/product/Filters.js.map +1 -1
- package/dist/product/MenuRow.cjs +81 -2
- package/dist/product/MenuRow.d.ts +76 -6
- package/dist/product/MenuRow.d.ts.map +1 -1
- package/dist/product/MenuRow.js +81 -4
- package/dist/product/MenuRow.js.map +1 -1
- package/dist/product/PrimaryButton.cjs +5 -1
- package/dist/product/PrimaryButton.d.ts +8 -0
- package/dist/product/PrimaryButton.d.ts.map +1 -1
- package/dist/product/PrimaryButton.js +5 -1
- package/dist/product/PrimaryButton.js.map +1 -1
- package/dist/product/Skeleton.cjs +7 -6
- package/dist/product/Skeleton.d.ts +3 -20
- package/dist/product/Skeleton.d.ts.map +1 -1
- package/dist/product/Skeleton.js +8 -7
- package/dist/product/Skeleton.js.map +1 -1
- package/dist/product/index.cjs +2 -0
- package/dist/product/index.d.ts +1 -0
- package/dist/product/index.d.ts.map +1 -1
- package/dist/product/index.js +2 -0
- package/dist/product/index.js.map +1 -1
- package/dist/settings/Section.cjs +11 -2
- package/dist/settings/Section.d.ts +8 -1
- package/dist/settings/Section.d.ts.map +1 -1
- package/dist/settings/Section.js +11 -2
- package/dist/settings/Section.js.map +1 -1
- package/dist/styles/motion.css +70 -0
- package/dist/styles.css +1460 -127
- package/dist/theme.css +944 -0
- package/package.json +2 -1
|
@@ -34,32 +34,71 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
};
|
|
35
35
|
})();
|
|
36
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
-
exports.DropdownMenuRadioGroup = exports.DropdownMenuSubTrigger = exports.DropdownMenuSubContent = exports.DropdownMenuSub = exports.DropdownMenuPortal = exports.DropdownMenuGroup = exports.DropdownMenuSeparator = exports.DropdownMenuLabel = exports.DropdownMenuRadioItem = exports.DropdownMenuCheckboxItem = exports.DropdownMenuItem = exports.DropdownMenuContent = exports.DropdownMenuTrigger = void 0;
|
|
37
|
+
exports.DropdownMenuClose = exports.DropdownMenuBack = exports.DropdownMenuOptionItem = exports.DropdownMenuRadioGroup = exports.DropdownMenuSubTrigger = exports.DropdownMenuSubContent = exports.DropdownMenuSub = exports.DropdownMenuPortal = exports.DropdownMenuGroup = exports.DropdownMenuSeparator = exports.DropdownMenuLabel = exports.DropdownMenuRadioItem = exports.DropdownMenuCheckboxItem = exports.DropdownMenuItem = exports.DropdownMenuContent = exports.DropdownMenuTrigger = void 0;
|
|
38
38
|
exports.DropdownMenu = DropdownMenu;
|
|
39
39
|
exports.DropdownMenuShortcut = DropdownMenuShortcut;
|
|
40
|
+
exports.DropdownMenuSearch = DropdownMenuSearch;
|
|
41
|
+
exports.DropdownMenuSection = DropdownMenuSection;
|
|
42
|
+
exports.DropdownMenuSelectionGroup = DropdownMenuSelectionGroup;
|
|
43
|
+
exports.DropdownMenuPage = DropdownMenuPage;
|
|
44
|
+
exports.DropdownMenuHeader = DropdownMenuHeader;
|
|
45
|
+
exports.DropdownMenuTitle = DropdownMenuTitle;
|
|
46
|
+
exports.DropdownMenuEmpty = DropdownMenuEmpty;
|
|
47
|
+
exports.DropdownMenuLoading = DropdownMenuLoading;
|
|
40
48
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
41
49
|
/**
|
|
42
50
|
* DropdownMenu — the ONE compound menu, native to @hanzo/gui.
|
|
43
51
|
*
|
|
44
52
|
* @hanzogui/menu already ships the whole compound surface (Root/Trigger/Portal/
|
|
45
53
|
* Content/Group/Label/Item/CheckboxItem/RadioGroup/RadioItem/ItemIndicator/
|
|
46
|
-
* Separator/Sub/SubTrigger/SubContent) with the a11y, roving focus,
|
|
47
|
-
* placement and dismiss behaviour. This file
|
|
48
|
-
* `DropdownMenuX` names
|
|
49
|
-
*
|
|
54
|
+
* Separator/Sub/SubTrigger/SubContent) with the a11y, roving focus, typeahead,
|
|
55
|
+
* popper placement and dismiss behaviour. This file FLATTENS `Menu.X` into the
|
|
56
|
+
* `DropdownMenuX` names, dresses them in the Hanzo tokens, and adds the parts a
|
|
57
|
+
* record surface needs on top of gui's — so there is one menu component rather
|
|
58
|
+
* than two shapes of the same idea.
|
|
50
59
|
*
|
|
51
60
|
* Cross-platform: gui style props only — no Tailwind class strings, no Radix, no
|
|
52
|
-
* DOM APIs
|
|
53
|
-
* tap target to 44px — on web and Tauri as well as
|
|
61
|
+
* DOM APIs outside `isWeb`. Rows are 32px tall (the design density) and
|
|
62
|
+
* `touch()` lifts the real tap target to 44px — on web and Tauri as well as
|
|
63
|
+
* native.
|
|
54
64
|
*
|
|
55
65
|
* `DropdownMenuContent` mounts its OWN `Menu.Portal`, so callers never wrap it —
|
|
56
|
-
* and re-applies the
|
|
57
|
-
*
|
|
66
|
+
* and re-applies, inside the portal, what React context cannot carry across it:
|
|
67
|
+
* the trigger's resolved theme (`PortalTheme`), its density (`Density`) and the
|
|
68
|
+
* menu's page history. gui portals re-root the subtree, so none of the three
|
|
69
|
+
* flows by itself.
|
|
70
|
+
*
|
|
71
|
+
* THE RECORD PARTS (twenty-ui's Dropdown, MIT, NOTICE), re-expressed on gui's
|
|
72
|
+
* Menu rather than on base-ui's:
|
|
73
|
+
*
|
|
74
|
+
* Search a borderless field at the top; the app filters. Typing
|
|
75
|
+
* stays in the field (gui's typeahead would otherwise take
|
|
76
|
+
* the keys), ArrowDown enters the list, ArrowUp from the
|
|
77
|
+
* first row comes back, Enter runs the first row.
|
|
78
|
+
* Section a padded group with an optional band label, `scrollable`
|
|
79
|
+
* capping it at 176px.
|
|
80
|
+
* SelectionGroup + single or multiple choice: a radio group of
|
|
81
|
+
* OptionItem `menuitemradio`, or `menuitemcheckbox` rows that stay
|
|
82
|
+
* open; the indicator a trailing check, a leading box or
|
|
83
|
+
* none (the row tints).
|
|
84
|
+
* Page / Back / screens inside one popup: only the current page renders,
|
|
85
|
+
* Header / Title / an item with `page` opens one, Back returns, and the
|
|
86
|
+
* Close history resets when the menu closes.
|
|
87
|
+
* Empty / Loading status lines announced politely.
|
|
88
|
+
* Item `actions` trailing controls beside a row, shown under the pointer
|
|
89
|
+
* or focus (always on touch).
|
|
90
|
+
*
|
|
91
|
+
* Typeahead is gui's own, and its buffer is gui's 1000ms where twenty-ui used
|
|
92
|
+
* 500ms: behaviour comes from the primitive, so the difference is recorded, not
|
|
93
|
+
* reimplemented.
|
|
58
94
|
*/
|
|
59
95
|
const React = __importStar(require("react"));
|
|
60
96
|
const gui_1 = require("@hanzo/gui");
|
|
61
97
|
const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
|
|
62
98
|
const gesture_1 = require("./gesture.cjs");
|
|
99
|
+
const ink_1 = require("./ink.cjs");
|
|
100
|
+
const density_1 = require("./density.cjs");
|
|
101
|
+
const MenuRow_1 = require("../../product/MenuRow.cjs");
|
|
63
102
|
const portal_theme_1 = require("../../product/menu/portal-theme.cjs");
|
|
64
103
|
// ── Geometry — literal px on the 8-grid; a 32px row expands to a 44px tap ──────
|
|
65
104
|
const ROW_H = 32;
|
|
@@ -70,52 +109,86 @@ const MIN_W = 200;
|
|
|
70
109
|
const INSET_PL = 32;
|
|
71
110
|
const INDICATOR_SLOT = 14;
|
|
72
111
|
const ICON = 16;
|
|
112
|
+
/** The panel's own inset; a band, a separator and a header bleed back over it. */
|
|
113
|
+
const PAD = 4;
|
|
114
|
+
/** A scrollable section's ceiling: five and a half rows, so the cut shows there is more. */
|
|
115
|
+
const SCROLL_H = 176;
|
|
116
|
+
/** The search row and the header row, as twenty-ui draws them. */
|
|
117
|
+
const SEARCH_H = 36;
|
|
118
|
+
const HEADER_H = 33;
|
|
119
|
+
const BAND_H = 20;
|
|
73
120
|
const panel = {
|
|
74
121
|
bg: "$panel",
|
|
75
122
|
borderColor: "$borderColor",
|
|
76
123
|
borderWidth: 1,
|
|
77
124
|
rounded: "$4",
|
|
78
|
-
p:
|
|
125
|
+
p: PAD,
|
|
79
126
|
minW: MIN_W,
|
|
80
127
|
overflow: "hidden",
|
|
81
128
|
shadowColor: "rgba(0,0,0,0.45)",
|
|
82
129
|
shadowRadius: 20,
|
|
83
130
|
shadowOffset: { width: 0, height: 10 },
|
|
84
131
|
};
|
|
132
|
+
/**
|
|
133
|
+
* A row. The corner is 4 — the panel's 8 less its 4px inset — so a highlighted
|
|
134
|
+
* row is concentric with the panel it sits in instead of rounder than it; and
|
|
135
|
+
* the highlight is the hover rung, with the press one rung darker.
|
|
136
|
+
*/
|
|
85
137
|
const row = {
|
|
86
138
|
items: "center",
|
|
87
139
|
gap: ROW_PX,
|
|
88
140
|
px: ROW_PX,
|
|
89
141
|
minH: ROW_H,
|
|
90
|
-
rounded: "$
|
|
142
|
+
rounded: "$xs",
|
|
91
143
|
select: "none",
|
|
92
144
|
cursor: "pointer",
|
|
93
145
|
...(0, gesture_1.touch)(ROW_H, TAP_MIN, "y"),
|
|
94
|
-
hoverStyle: { bg: "$
|
|
95
|
-
focusStyle: { bg: "$
|
|
96
|
-
pressStyle: { bg: "$
|
|
146
|
+
hoverStyle: { bg: "$hover" },
|
|
147
|
+
focusStyle: { bg: "$hover" },
|
|
148
|
+
pressStyle: { bg: "$raised" },
|
|
97
149
|
};
|
|
98
150
|
/** Left indicator well shared by checkbox + radio rows. */
|
|
99
151
|
const Indicator = ({ children }) => ((0, jsx_runtime_1.jsx)(gui_1.XStack, { position: "absolute", l: ROW_PX, width: INDICATOR_SLOT, height: INDICATOR_SLOT, items: "center", justify: "center", pointerEvents: "none", children: (0, jsx_runtime_1.jsx)(gui_1.Menu.ItemIndicator, { children: children }) }));
|
|
100
|
-
// ── Root — owns popper geometry
|
|
152
|
+
// ── Root — owns popper geometry and the page history ───────────────────────────
|
|
101
153
|
// gui puts `offset` on the Popper ROOT; the compound API puts `sideOffset` on
|
|
102
154
|
// Content. One value, one owner: the root holds it, Content publishes into it.
|
|
103
155
|
const OffsetContext = /* @__PURE__ */ React.createContext(null);
|
|
104
156
|
const AlignContext = /* @__PURE__ */ React.createContext(null);
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
157
|
+
const PagesContext = /* @__PURE__ */ React.createContext(null);
|
|
158
|
+
/**
|
|
159
|
+
* The trigger's offset: 4 on a regular surface, 8 on a compact one — a record
|
|
160
|
+
* menu hangs a little clear of the 32px control it opens from (twenty-front's
|
|
161
|
+
* menus sit 8 below their trigger).
|
|
162
|
+
*/
|
|
163
|
+
const offsetFor = (density) => (density === "compact" ? 8 : 4);
|
|
164
|
+
function DropdownMenu({ offset, trigger, items, minWidth = MIN_W, maxHeight, defaultPage, onOpenChange, children, ...props }) {
|
|
165
|
+
const density = (0, density_1.useDensity)();
|
|
166
|
+
const initial = offset ?? offsetFor(density);
|
|
167
|
+
const [current, setOffset] = React.useState(initial);
|
|
108
168
|
const [placement, setPlacement] = React.useState(undefined);
|
|
109
|
-
React.useEffect(() => setOffset(
|
|
110
|
-
|
|
169
|
+
React.useEffect(() => setOffset(initial), [initial]);
|
|
170
|
+
const [stack, setStack] = React.useState(defaultPage ? [defaultPage] : []);
|
|
171
|
+
const pages = React.useMemo(() => ({
|
|
172
|
+
page: stack[stack.length - 1] ?? null,
|
|
173
|
+
depth: stack.length,
|
|
174
|
+
go: (id) => setStack((s) => [...s, id]),
|
|
175
|
+
back: () => setStack((s) => (s.length > 1 ? s.slice(0, -1) : s)),
|
|
176
|
+
}), [stack]);
|
|
177
|
+
const changed = React.useCallback((open) => {
|
|
178
|
+
// A menu opens where it was meant to: the history is for one visit.
|
|
179
|
+
if (!open)
|
|
180
|
+
setStack(defaultPage ? [defaultPage] : []);
|
|
181
|
+
onOpenChange?.(open);
|
|
182
|
+
}, [defaultPage, onOpenChange]);
|
|
183
|
+
return ((0, jsx_runtime_1.jsx)(OffsetContext.Provider, { value: setOffset, children: (0, jsx_runtime_1.jsx)(AlignContext.Provider, { value: setPlacement, children: (0, jsx_runtime_1.jsx)(PagesContext.Provider, { value: defaultPage ? pages : null, children: (0, jsx_runtime_1.jsxs)(gui_1.Menu, { offset: current, ...(placement ? { placement } : null), onOpenChange: changed, ...props, children: [trigger ? ((0, jsx_runtime_1.jsx)(DropdownMenuTrigger, { asChild: true, children: trigger })) : null, items ? ((0, jsx_runtime_1.jsx)(DropdownMenuContent, { minW: minWidth, maxH: maxHeight, children: items.map(renderSpec) })) : null, children] }) }) }) }));
|
|
111
184
|
}
|
|
112
|
-
/** One spec row -> the matching compound part
|
|
185
|
+
/** One spec row -> the matching compound part, drawn by the one row anatomy. */
|
|
113
186
|
const renderSpec = (spec, i) => {
|
|
114
187
|
if (spec.type === "separator")
|
|
115
188
|
return (0, jsx_runtime_1.jsx)(DropdownMenuSeparator, {}, spec.key ?? `sep-${i}`);
|
|
116
189
|
if (spec.type === "label")
|
|
117
190
|
return ((0, jsx_runtime_1.jsx)(DropdownMenuLabel, { children: spec.label }, spec.key ?? `label-${i}`));
|
|
118
|
-
return ((0, jsx_runtime_1.
|
|
191
|
+
return ((0, jsx_runtime_1.jsx)(DropdownMenuItem, { disabled: spec.disabled, variant: spec.destructive ? "destructive" : "default", onSelect: spec.onSelect, ...(spec.closeOnSelect === false ? { preventCloseOnSelect: true } : null), children: (0, jsx_runtime_1.jsx)(MenuRow_1.MenuRowContent, { label: spec.label, sub: spec.description, icon: spec.icon ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { width: ICON, height: ICON, items: "center", justify: "center", shrink: 0, children: spec.icon })) : undefined, shortcut: spec.shortcut ? (0, jsx_runtime_1.jsx)(DropdownMenuShortcut, { children: spec.shortcut }) : undefined, check: !!spec.selected, submenu: !!spec.hasSubmenu }) }, spec.key));
|
|
119
192
|
};
|
|
120
193
|
// ── Passthroughs — the gui part already IS the part ─────────────────────────────
|
|
121
194
|
const DropdownMenuTrigger = gui_1.Menu.Trigger;
|
|
@@ -135,21 +208,123 @@ const placementFor = (side, align) => {
|
|
|
135
208
|
const base = (side?.split('-')[0] ?? 'bottom');
|
|
136
209
|
return (align === 'center' ? base : `${base}-${align}`);
|
|
137
210
|
};
|
|
138
|
-
|
|
211
|
+
/** The rows a person can reach in one panel, in order: its own, never a submenu's. */
|
|
212
|
+
const reachable = (panelEl) => [...panelEl.querySelectorAll('[role="menuitem"], [role="menuitemradio"], [role="menuitemcheckbox"]')].filter((el) => el.closest('[data-hanzogui-menu-content]') === panelEl && el.getAttribute('aria-disabled') !== 'true' && !el.hasAttribute('data-disabled'));
|
|
213
|
+
/** The search field of a panel, when it has one. */
|
|
214
|
+
const searchOf = (panelEl) => panelEl.querySelector('[data-slot="dropdown-menu-search"] input');
|
|
215
|
+
const DropdownMenuContent = /* @__PURE__ */ React.forwardRef(function DropdownMenuContent({ sideOffset, align, children, onKeyDown, ...props }, ref) {
|
|
139
216
|
const themeName = (0, portal_theme_1.useThemeName)();
|
|
217
|
+
const density = (0, density_1.useDensity)();
|
|
218
|
+
const pages = React.useContext(PagesContext);
|
|
140
219
|
const setOffset = React.useContext(OffsetContext);
|
|
141
220
|
const setPlacement = React.useContext(AlignContext);
|
|
142
|
-
|
|
221
|
+
const offset = sideOffset ?? offsetFor(density);
|
|
222
|
+
React.useEffect(() => setOffset?.(offset), [setOffset, offset]);
|
|
143
223
|
React.useEffect(() => setPlacement?.(placementFor(undefined, align)), [setPlacement, align]);
|
|
144
|
-
|
|
224
|
+
// ArrowUp on the first row hands focus back to the search field above it —
|
|
225
|
+
// gui's roving focus stops at the first row and knows nothing of the field.
|
|
226
|
+
const keys = (e) => {
|
|
227
|
+
;
|
|
228
|
+
onKeyDown?.(e);
|
|
229
|
+
if (!gui_1.isWeb || e.key !== 'ArrowUp')
|
|
230
|
+
return;
|
|
231
|
+
const panelEl = e.target?.closest?.('[data-hanzogui-menu-content]');
|
|
232
|
+
if (!panelEl)
|
|
233
|
+
return;
|
|
234
|
+
const rows = reachable(panelEl);
|
|
235
|
+
const field = searchOf(panelEl);
|
|
236
|
+
if (field && rows[0] && rows[0] === document.activeElement) {
|
|
237
|
+
e.preventDefault();
|
|
238
|
+
field.focus();
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
const body = framed(children);
|
|
242
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.Menu.Portal, { children: (0, jsx_runtime_1.jsx)(portal_theme_1.PortalTheme, { name: themeName, children: (0, jsx_runtime_1.jsx)(density_1.Density, { value: density, children: (0, jsx_runtime_1.jsx)(PagesContext.Provider, { value: pages, children: (0, jsx_runtime_1.jsx)(gui_1.Menu.Content, { ref: ref, "data-slot": "dropdown-menu-content", ...panel, ...(body.framed ? { role: 'dialog', 'aria-orientation': undefined, 'data-framed': '' } : null), ...(gui_1.isWeb ? { onKeyDown: keys } : null), ...props, children: (0, jsx_runtime_1.jsx)(Paged, { page: pages?.page ?? null, children: body.children }) }) }) }) }) }));
|
|
145
243
|
});
|
|
146
244
|
exports.DropdownMenuContent = DropdownMenuContent;
|
|
245
|
+
/** The parts a `menu` may not own: a field and the live status lines. */
|
|
246
|
+
const isFree = (c) => React.isValidElement(c) && (c.type === DropdownMenuSearch || c.type === DropdownMenuEmpty || c.type === DropdownMenuLoading);
|
|
247
|
+
/**
|
|
248
|
+
* A panel holding a search field or a status line is not a bare menu.
|
|
249
|
+
*
|
|
250
|
+
* A `menu` owns items, groups and separators and nothing else, and axe holds
|
|
251
|
+
* the whole subtree to that (`aria-required-children`): a field or a live
|
|
252
|
+
* region inside it fails. So such a panel becomes what it is — a popup with a
|
|
253
|
+
* field, one or more menus of rows, and its status lines — the frame a `dialog`
|
|
254
|
+
* still labelled by its trigger, each run of rows its own `role="menu"`. A panel
|
|
255
|
+
* of rows alone keeps gui's structure untouched. Read off the direct children,
|
|
256
|
+
* the place a Search, an Empty and a Loading belong.
|
|
257
|
+
*/
|
|
258
|
+
function framed(children) {
|
|
259
|
+
const parts = React.Children.toArray(children);
|
|
260
|
+
if (!parts.some(isFree))
|
|
261
|
+
return { framed: false, children };
|
|
262
|
+
const out = [];
|
|
263
|
+
let run = [];
|
|
264
|
+
const close = () => {
|
|
265
|
+
if (!run.length)
|
|
266
|
+
return;
|
|
267
|
+
out.push((0, jsx_runtime_1.jsx)(gui_1.YStack, { role: "menu", "aria-orientation": "vertical", "data-slot": "dropdown-menu-list", children: run }, `menu-${out.length}`));
|
|
268
|
+
run = [];
|
|
269
|
+
};
|
|
270
|
+
for (const part of parts) {
|
|
271
|
+
if (isFree(part)) {
|
|
272
|
+
close();
|
|
273
|
+
out.push(part);
|
|
274
|
+
}
|
|
275
|
+
else
|
|
276
|
+
run.push(part);
|
|
277
|
+
}
|
|
278
|
+
close();
|
|
279
|
+
return { framed: true, children: out };
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Moving between pages takes the focus with it: the row that was pressed is
|
|
283
|
+
* gone, and focus left on a removed node falls to the document. The new page's
|
|
284
|
+
* first row (or its search) takes it.
|
|
285
|
+
*/
|
|
286
|
+
function Paged({ page, children }) {
|
|
287
|
+
const anchor = React.useRef(null);
|
|
288
|
+
const first = React.useRef(true);
|
|
289
|
+
React.useEffect(() => {
|
|
290
|
+
if (first.current) {
|
|
291
|
+
first.current = false;
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
if (!gui_1.isWeb)
|
|
295
|
+
return;
|
|
296
|
+
const panelEl = anchor.current?.closest?.('[data-hanzogui-menu-content]');
|
|
297
|
+
if (!panelEl)
|
|
298
|
+
return;
|
|
299
|
+
const frame = requestAnimationFrame(() => (searchOf(panelEl) ?? reachable(panelEl)[0])?.focus());
|
|
300
|
+
return () => cancelAnimationFrame(frame);
|
|
301
|
+
}, [page]);
|
|
302
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [gui_1.isWeb ? (0, jsx_runtime_1.jsx)("span", { ref: anchor, hidden: true, "data-slot": "dropdown-menu-anchor" }) : null, children] }));
|
|
303
|
+
}
|
|
147
304
|
const DropdownMenuSubContent = /* @__PURE__ */ React.forwardRef(function DropdownMenuSubContent(props, ref) {
|
|
148
|
-
|
|
305
|
+
const density = (0, density_1.useDensity)();
|
|
306
|
+
return ((0, jsx_runtime_1.jsx)(density_1.Density, { value: density, children: (0, jsx_runtime_1.jsx)(gui_1.Menu.SubContent, { ref: ref, "data-slot": "dropdown-menu-sub-content", ...panel, ...props }) }));
|
|
149
307
|
});
|
|
150
308
|
exports.DropdownMenuSubContent = DropdownMenuSubContent;
|
|
151
|
-
const DropdownMenuItem = /* @__PURE__ */ React.forwardRef(function DropdownMenuItem({ inset, variant = "default", disabled, ...props }, ref) {
|
|
152
|
-
|
|
309
|
+
const DropdownMenuItem = /* @__PURE__ */ React.forwardRef(function DropdownMenuItem({ inset, variant = "default", disabled, page, actions, actionsVisibility = "hover", onSelect, children, ...props }, ref) {
|
|
310
|
+
const pages = React.useContext(PagesContext);
|
|
311
|
+
const [shown, setShown] = React.useState(false);
|
|
312
|
+
const opens = page !== undefined && pages !== null;
|
|
313
|
+
const item = ((0, jsx_runtime_1.jsx)(gui_1.Menu.Item, { ref: ref, "data-slot": "dropdown-menu-item", "data-inset": inset, "data-variant": variant, disabled: disabled, ...row, pl: inset ? INSET_PL : ROW_PX, theme: variant === "destructive" ? "red" : undefined, opacity: disabled ? 0.5 : 1, cursor: disabled ? "default" : "pointer", ...(actions ? { flex: 1, onFocus: () => setShown(true), onBlur: () => setShown(false) } : null), onSelect: (e) => {
|
|
314
|
+
if (page !== undefined && pages) {
|
|
315
|
+
e.preventDefault?.();
|
|
316
|
+
pages.go(page);
|
|
317
|
+
}
|
|
318
|
+
onSelect?.(e);
|
|
319
|
+
}, ...props, children: opens ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, ink_1.ink)(children, gui_1.Text, { fontSize: '$2' }), (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ChevronRight, { size: ICON - 2, ml: "auto", color: "$hush" })] })) : ((0, ink_1.ink)(children, gui_1.Text, { fontSize: '$2' })) }));
|
|
320
|
+
if (!actions)
|
|
321
|
+
return item;
|
|
322
|
+
const visible = actionsVisibility === "always" || shown;
|
|
323
|
+
return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { "data-slot": "dropdown-menu-item-row", items: "center", gap: ROW_PX, onHoverIn: () => setShown(true), onHoverOut: () => setShown(false), children: [item, (0, jsx_runtime_1.jsx)(gui_1.XStack, { "data-slot": "dropdown-menu-item-actions",
|
|
324
|
+
// A menu owns groups, not buttons: the controls beside a row are a group.
|
|
325
|
+
role: "group", shrink: 0, items: "center", gap: 2, opacity: visible ? 1 : 0, $touchable: { opacity: 1 }, animation: "75ms", children: React.Children.map(actions, (a) => React.isValidElement(a) && a.props.role == null
|
|
326
|
+
? React.cloneElement(a, { role: "menuitem" })
|
|
327
|
+
: a) })] }));
|
|
153
328
|
});
|
|
154
329
|
exports.DropdownMenuItem = DropdownMenuItem;
|
|
155
330
|
const DropdownMenuCheckboxItem = /* @__PURE__ */ React.forwardRef(function DropdownMenuCheckboxItem({ children, checked, ...props }, ref) {
|
|
@@ -164,13 +339,168 @@ const DropdownMenuSubTrigger = /* @__PURE__ */ React.forwardRef(function Dropdow
|
|
|
164
339
|
return ((0, jsx_runtime_1.jsxs)(gui_1.Menu.SubTrigger, { ref: ref, "data-slot": "dropdown-menu-sub-trigger", "data-inset": inset, ...row, pl: inset ? INSET_PL : ROW_PX, ...props, children: [children, (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ChevronRight, { size: ICON, ml: "auto", opacity: 0.6 })] }));
|
|
165
340
|
});
|
|
166
341
|
exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
|
|
167
|
-
|
|
168
|
-
const
|
|
342
|
+
const SelectionContext = /* @__PURE__ */ React.createContext(null);
|
|
343
|
+
const asList = (v) => (v == null ? [] : Array.isArray(v) ? v : [v]);
|
|
344
|
+
function DropdownMenuSelectionGroup({ value, defaultValue = null, onValueChange, multiple = false, closeOnSelect, children, }) {
|
|
345
|
+
const [own, setOwn] = React.useState(() => asList(defaultValue));
|
|
346
|
+
const chosen = value !== undefined ? asList(value) : own;
|
|
347
|
+
const set = (next) => {
|
|
348
|
+
if (value === undefined)
|
|
349
|
+
setOwn(next);
|
|
350
|
+
onValueChange?.(multiple ? next : (next[0] ?? null));
|
|
351
|
+
};
|
|
352
|
+
const ctx = {
|
|
353
|
+
multiple,
|
|
354
|
+
closeOnSelect: closeOnSelect ?? !multiple,
|
|
355
|
+
has: (v) => chosen.includes(v),
|
|
356
|
+
toggle: (v) => set(multiple ? (chosen.includes(v) ? chosen.filter((c) => c !== v) : [...chosen, v]) : [v]),
|
|
357
|
+
};
|
|
358
|
+
return ((0, jsx_runtime_1.jsx)(SelectionContext.Provider, { value: ctx, children: multiple ? ((0, jsx_runtime_1.jsx)(gui_1.Menu.Group, { "data-slot": "dropdown-menu-selection-group", children: children })) : ((0, jsx_runtime_1.jsx)(gui_1.Menu.RadioGroup, { "data-slot": "dropdown-menu-selection-group", value: chosen[0] ?? '', onValueChange: (v) => set(v ? [v] : []), children: children })) }));
|
|
359
|
+
}
|
|
360
|
+
/** The leading box of a multiple choice: a picture of a checkbox, not a control inside the row. */
|
|
361
|
+
const Box = ({ on }) => ((0, jsx_runtime_1.jsx)(gui_1.XStack, { width: INDICATOR_SLOT, height: INDICATOR_SLOT, shrink: 0, rounded: "$xs", borderWidth: 1, borderColor: on ? "var(--primary)" : "$bound", bg: on ? "var(--primary)" : "transparent", items: "center", justify: "center", children: on ? (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Check, { size: 12, strokeWidth: 3, color: "var(--primary-foreground)" }) : null }));
|
|
362
|
+
const DropdownMenuOptionItem = /* @__PURE__ */ React.forwardRef(function DropdownMenuOptionItem({ value, indicator, closeOnSelect, onSelect, children, disabled, ...props }, ref) {
|
|
363
|
+
const group = React.useContext(SelectionContext);
|
|
364
|
+
const multiple = group?.multiple ?? false;
|
|
365
|
+
const on = group?.has(value) ?? false;
|
|
366
|
+
const mark = indicator ?? (multiple ? "checkbox" : "check");
|
|
367
|
+
const closes = closeOnSelect ?? group?.closeOnSelect ?? !multiple;
|
|
368
|
+
const body = ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [mark === "checkbox" ? (0, jsx_runtime_1.jsx)(Box, { on: on }) : null, typeof children === "string" ? ((0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", color: "$aside", numberOfLines: 1, flex: 1, minW: 0, children: children })) : (children), mark === "check" && on ? (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Check, { size: ICON, strokeWidth: 2, ml: "auto" }) : null] }));
|
|
369
|
+
const shared = {
|
|
370
|
+
ref,
|
|
371
|
+
"data-slot": "dropdown-menu-option-item",
|
|
372
|
+
"data-indicator": mark,
|
|
373
|
+
disabled,
|
|
374
|
+
...row,
|
|
375
|
+
...(mark === "none" && on ? { bg: "$hover" } : null),
|
|
376
|
+
opacity: disabled ? 0.5 : 1,
|
|
377
|
+
preventCloseOnSelect: !closes,
|
|
378
|
+
onSelect,
|
|
379
|
+
...props,
|
|
380
|
+
};
|
|
381
|
+
if (multiple)
|
|
382
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.Menu.CheckboxItem, { ...shared, checked: on, onCheckedChange: () => group?.toggle(value), children: body }));
|
|
383
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.Menu.RadioItem, { ...shared, value: value, children: body }));
|
|
384
|
+
});
|
|
385
|
+
exports.DropdownMenuOptionItem = DropdownMenuOptionItem;
|
|
386
|
+
/**
|
|
387
|
+
* The search row. The keys a field needs stay in it — gui's typeahead listens on
|
|
388
|
+
* the whole panel and would move focus to a matching row on the first letter —
|
|
389
|
+
* and the three that belong to the list leave it: ArrowDown enters the list,
|
|
390
|
+
* Enter runs the first row (respecting an open IME composition), Escape closes.
|
|
391
|
+
*/
|
|
392
|
+
function DropdownMenuSearch({ value, defaultValue, onValueChange, placeholder = "Search", autoFocus = true, "aria-label": label, }) {
|
|
393
|
+
const field = React.useRef(null);
|
|
394
|
+
React.useEffect(() => {
|
|
395
|
+
if (!autoFocus || !gui_1.isWeb)
|
|
396
|
+
return;
|
|
397
|
+
// After gui's own open focus, which lands on the panel a frame after mount.
|
|
398
|
+
const frame = requestAnimationFrame(() => {
|
|
399
|
+
const t = setTimeout(() => field.current?.focus(), 0);
|
|
400
|
+
cleanup = () => clearTimeout(t);
|
|
401
|
+
});
|
|
402
|
+
let cleanup = () => { };
|
|
403
|
+
return () => {
|
|
404
|
+
cancelAnimationFrame(frame);
|
|
405
|
+
cleanup();
|
|
406
|
+
};
|
|
407
|
+
}, [autoFocus]);
|
|
408
|
+
const keys = (e) => {
|
|
409
|
+
if (e.key === "Escape" || e.key === "Tab")
|
|
410
|
+
return;
|
|
411
|
+
const panelEl = e.currentTarget.closest("[data-hanzogui-menu-content]");
|
|
412
|
+
if (e.key === "ArrowDown") {
|
|
413
|
+
e.preventDefault();
|
|
414
|
+
e.stopPropagation();
|
|
415
|
+
if (panelEl)
|
|
416
|
+
reachable(panelEl)[0]?.focus();
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
if (e.key === "Enter") {
|
|
420
|
+
e.stopPropagation();
|
|
421
|
+
if (e.nativeEvent.isComposing)
|
|
422
|
+
return;
|
|
423
|
+
e.preventDefault();
|
|
424
|
+
if (panelEl)
|
|
425
|
+
reachable(panelEl)[0]?.click();
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
// Everything else is typing: the field's, not the menu's.
|
|
429
|
+
e.stopPropagation();
|
|
430
|
+
};
|
|
431
|
+
// A direct child of the content, so `framed` seats it beside the rows' menu.
|
|
432
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.XStack, { "data-slot": "dropdown-menu-search", minH: SEARCH_H, items: "center", px: ROW_PX, mx: -PAD, mt: -PAD, mb: PAD, borderBottomWidth: 1, borderColor: "$borderColor", children: (0, jsx_runtime_1.jsx)(gui_1.Input, { ref: field, unstyled: true, flex: 1, minW: 0, height: 20, p: 0, borderWidth: 0, bg: "transparent", color: "$ink", placeholderTextColor: "$placeholderColor", fontSize: "$1", "aria-label": label ?? placeholder, placeholder: placeholder, ...(value !== undefined ? { value } : { defaultValue }), onChangeText: (t) => onValueChange?.(t), ...(gui_1.isWeb ? { onKeyDown: keys } : null), style: { outlineStyle: "none" } }) }));
|
|
433
|
+
}
|
|
434
|
+
function DropdownMenuSection({ label, scrollable = false, children, ...props }) {
|
|
435
|
+
return ((0, jsx_runtime_1.jsxs)(gui_1.Menu.Group, { "data-slot": "dropdown-menu-section", ...(typeof label === "string" ? { "aria-label": label } : null), children: [label ? (0, jsx_runtime_1.jsx)(DropdownMenuLabel, { variant: "band", children: label }) : null, (0, jsx_runtime_1.jsx)(gui_1.YStack, { gap: 2, ...(scrollable
|
|
436
|
+
? { maxH: SCROLL_H, style: { overflowY: "auto", overscrollBehavior: "contain" } }
|
|
437
|
+
: null), ...props, children: children })] }));
|
|
438
|
+
}
|
|
439
|
+
// ── Pages ───────────────────────────────────────────────────────────────────────
|
|
440
|
+
/** One screen of a paged menu. Only the current page renders. */
|
|
441
|
+
function DropdownMenuPage({ id, children }) {
|
|
442
|
+
const pages = React.useContext(PagesContext);
|
|
443
|
+
if (!pages || pages.page !== id)
|
|
444
|
+
return null;
|
|
445
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.YStack, { "data-slot": "dropdown-menu-page", "data-page": id, children: children }));
|
|
446
|
+
}
|
|
447
|
+
const header = {
|
|
448
|
+
minH: HEADER_H,
|
|
449
|
+
items: "center",
|
|
450
|
+
gap: ROW_PX,
|
|
451
|
+
px: ROW_PX,
|
|
452
|
+
mx: -PAD,
|
|
453
|
+
mt: -PAD,
|
|
454
|
+
mb: PAD,
|
|
455
|
+
borderBottomWidth: 1,
|
|
456
|
+
borderColor: "$borderColor",
|
|
457
|
+
};
|
|
458
|
+
/** A static title bar over the page. */
|
|
459
|
+
function DropdownMenuHeader({ children, ...props }) {
|
|
460
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.XStack, { "data-slot": "dropdown-menu-header", ...header, ...props, children: children }));
|
|
461
|
+
}
|
|
462
|
+
function DropdownMenuTitle({ children, ...props }) {
|
|
463
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.Text, { "data-slot": "dropdown-menu-title", fontSize: "$2", fontWeight: "500", color: "$ink", numberOfLines: 1, flex: 1, ...props, children: children }));
|
|
464
|
+
}
|
|
465
|
+
/** The icon-only close in a header. It is a menu item, so choosing it closes as any row does. */
|
|
466
|
+
const DropdownMenuClose = /* @__PURE__ */ React.forwardRef(function DropdownMenuClose(props, ref) {
|
|
467
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.Menu.Item, { ref: ref, "data-slot": "dropdown-menu-close", width: 24, height: 24, rounded: "$xs", items: "center", justify: "center", cursor: "pointer", ...(0, gesture_1.touch)(24), hoverStyle: { bg: "$hover" }, focusStyle: { bg: "$hover" }, ...props, children: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.X, { size: ICON, color: "$aside" }) }));
|
|
468
|
+
});
|
|
469
|
+
exports.DropdownMenuClose = DropdownMenuClose;
|
|
470
|
+
/** The header row that returns to the page before. */
|
|
471
|
+
const DropdownMenuBack = /* @__PURE__ */ React.forwardRef(function DropdownMenuBack({ children, onSelect, ...props }, ref) {
|
|
472
|
+
const pages = React.useContext(PagesContext);
|
|
473
|
+
return ((0, jsx_runtime_1.jsxs)(gui_1.Menu.Item, { ref: ref, "data-slot": "dropdown-menu-back", ...header, rounded: 0, cursor: "pointer", hoverStyle: { bg: "$hover" }, focusStyle: { bg: "$hover" }, preventCloseOnSelect: true, onSelect: (e) => {
|
|
474
|
+
pages?.back();
|
|
475
|
+
onSelect?.(e);
|
|
476
|
+
}, ...props, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.ChevronLeft, { size: ICON, color: "$aside" }), typeof children === "string" ? ((0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", fontWeight: "500", color: "$ink", numberOfLines: 1, flex: 1, children: children })) : (children)] }));
|
|
477
|
+
});
|
|
478
|
+
exports.DropdownMenuBack = DropdownMenuBack;
|
|
479
|
+
// ── Status lines ────────────────────────────────────────────────────────────────
|
|
480
|
+
/**
|
|
481
|
+
* A live line. Placed as a direct child of the content, it sits beside the rows'
|
|
482
|
+
* menu rather than inside it (see `framed`), where a live region may be.
|
|
483
|
+
*/
|
|
484
|
+
function Status({ slot, children }) {
|
|
485
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.XStack, { "data-slot": slot, role: "status", "aria-live": "polite", items: "center", gap: ROW_PX, p: ROW_PX, children: children }));
|
|
486
|
+
}
|
|
487
|
+
/** No row matched, said once and politely. */
|
|
488
|
+
function DropdownMenuEmpty({ children = "No results" }) {
|
|
489
|
+
return ((0, jsx_runtime_1.jsx)(Status, { slot: "dropdown-menu-empty", children: (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$1", color: "$aside", children: children }) }));
|
|
490
|
+
}
|
|
491
|
+
/** Rows are on their way. */
|
|
492
|
+
function DropdownMenuLoading({ children = "Loading" }) {
|
|
493
|
+
return ((0, jsx_runtime_1.jsxs)(Status, { slot: "dropdown-menu-loading", children: [(0, jsx_runtime_1.jsx)(gui_1.XStack, { "aria-hidden": true, children: (0, jsx_runtime_1.jsx)(gui_1.Spinner, { size: "small", maxW: 14, maxH: 14 }) }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$1", color: "$quiet", children: children })] }));
|
|
494
|
+
}
|
|
495
|
+
const DropdownMenuLabel = /* @__PURE__ */ React.forwardRef(function DropdownMenuLabel({ inset, variant = "default", ...props }, ref) {
|
|
496
|
+
if (variant === "band")
|
|
497
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.Menu.Label, { ref: ref, "data-slot": "dropdown-menu-label", "data-variant": "band", height: BAND_H, lineHeight: BAND_H, mx: -PAD, px: ROW_PX, py: 0, bg: "$hover", fontSize: "$1", fontWeight: "400", color: "$hint", select: "none", ...props }));
|
|
169
498
|
return ((0, jsx_runtime_1.jsx)(gui_1.Menu.Label, { ref: ref, "data-slot": "dropdown-menu-label", "data-inset": inset, px: ROW_PX, py: 4, pl: inset ? INSET_PL : ROW_PX, fontSize: "$2", fontWeight: "500", color: "$ink", select: "none", ...props }));
|
|
170
499
|
});
|
|
171
500
|
exports.DropdownMenuLabel = DropdownMenuLabel;
|
|
501
|
+
/** A hairline between sections, bled to the panel's edges as twenty-ui draws it. */
|
|
172
502
|
const DropdownMenuSeparator = /* @__PURE__ */ React.forwardRef(function DropdownMenuSeparator(props, ref) {
|
|
173
|
-
return ((0, jsx_runtime_1.jsx)(gui_1.Menu.Separator, { ref: ref, "data-slot": "dropdown-menu-separator", height: 1, bg: "$borderColor", mx:
|
|
503
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.Menu.Separator, { ref: ref, "data-slot": "dropdown-menu-separator", height: 1, bg: "$borderColor", mx: -PAD, my: PAD, ...props }));
|
|
174
504
|
});
|
|
175
505
|
exports.DropdownMenuSeparator = DropdownMenuSeparator;
|
|
176
506
|
/** Right-aligned shortcut hint. gui `Text`, not a raw `<span>`, so it renders on native. */
|