@hanzo/ui 8.27.90 → 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 +1613 -265
- package/dist/gallery.js +3 -9
- package/dist/gallery.js.map +1 -1
- package/dist/gui-config.cjs +37 -7
- package/dist/gui-config.d.ts +11 -3
- package/dist/gui-config.d.ts.map +1 -1
- package/dist/gui-config.js +37 -7
- 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 +1479 -136
- package/dist/theme.css +963 -9
- package/package.json +2 -1
|
@@ -14,16 +14,22 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
14
14
|
*
|
|
15
15
|
* `Picker` is the other select: the platform's own, for a list the platform
|
|
16
16
|
* should show — every country, on a phone.
|
|
17
|
+
*
|
|
18
|
+
* Rows are concentric in the panel: a 4px inset inside an 8px panel takes a 4px
|
|
19
|
+
* row radius (`$xs`). Under `<Density value="compact">` the list takes the
|
|
20
|
+
* record density twenty-ui's Select draws (MIT, NOTICE): 13px rows in the quiet
|
|
21
|
+
* ink on the hover rung, and the density crosses the portal with the list.
|
|
17
22
|
*/
|
|
18
23
|
const react_1 = require("react");
|
|
19
24
|
const gui_1 = require("@hanzo/gui");
|
|
20
25
|
const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
|
|
21
26
|
const control_1 = require("./control.cjs");
|
|
27
|
+
const density_1 = require("./density.cjs");
|
|
28
|
+
const field_1 = require("./field.cjs");
|
|
22
29
|
const gesture_1 = require("./gesture.cjs");
|
|
23
30
|
const ink_1 = require("./ink.cjs");
|
|
24
31
|
const slot_1 = require("./slot.cjs");
|
|
25
32
|
const ROW_H = 32;
|
|
26
|
-
const TRIGGER_H = control_1.CONTROL_H;
|
|
27
33
|
/**
|
|
28
34
|
* Disabling the control is one fact with two spellings: gui puts `disabled` on
|
|
29
35
|
* the Trigger, the compound API puts it on the root. The root declares it and
|
|
@@ -34,16 +40,26 @@ const Select = /* @__PURE__ */ Object.assign(({ disabled = false, ...props }) =>
|
|
|
34
40
|
exports.Select = Select;
|
|
35
41
|
const SelectGroup = gui_1.Select.Group;
|
|
36
42
|
exports.SelectGroup = SelectGroup;
|
|
37
|
-
|
|
43
|
+
/**
|
|
44
|
+
* The trigger's rung, handed to the value it shows. `ink()` sizes a string
|
|
45
|
+
* child; `SelectValue` is an element and drew gui's own 14px whatever the box,
|
|
46
|
+
* so a 32px compact trigger showed its value a rung larger than the Input
|
|
47
|
+
* beside it. The trigger provides its box's rung and the value reads it.
|
|
48
|
+
*/
|
|
49
|
+
const TriggerFont = /* @__PURE__ */ (0, react_1.createContext)("$3");
|
|
50
|
+
const SelectValue = (props) => ((0, jsx_runtime_1.jsx)(gui_1.Select.Value, { fontSize: (0, react_1.useContext)(TriggerFont), ...props }));
|
|
38
51
|
exports.SelectValue = SelectValue;
|
|
39
|
-
const SelectTrigger = ({ children, disabled, ...props }) => {
|
|
52
|
+
const SelectTrigger = ({ children, disabled, size, ...props }) => {
|
|
40
53
|
const inherited = (0, react_1.useContext)(Disabled);
|
|
41
|
-
|
|
54
|
+
const density = (0, density_1.useDensity)();
|
|
55
|
+
const box = control_1.BOX[(0, density_1.fieldSize)(size, density)];
|
|
56
|
+
const invalid = (0, field_1.invalidOf)(props["aria-invalid"], (0, field_1.useField)());
|
|
57
|
+
return ((0, jsx_runtime_1.jsxs)(gui_1.Select.Trigger, { ...(0, slot_1.slot)("select-trigger"), unstyled: true, disabled: disabled ?? inherited, ...control_1.FIELD, ...(density === "compact" ? { bg: "$panel" } : null), ...(invalid ? { borderColor: "$red7", "aria-invalid": true } : null), px: box.gutter, items: "center", justify: "space-between", gap: "$2",
|
|
42
58
|
// A FLOOR, not a pin. `height` alone clips a child taller than the box, and
|
|
43
59
|
// the build stays green while it does — that is why 01ac46dce moved Button
|
|
44
60
|
// off a pinned height. Select and Input kept theirs, so the same trap was
|
|
45
61
|
// still armed in the two controls that sit in every form.
|
|
46
|
-
height: "auto", minHeight:
|
|
62
|
+
height: "auto", minHeight: box.h,
|
|
47
63
|
// The trigger states its own vertical padding because otherwise something
|
|
48
64
|
// else states it. `unstyled` does not survive gui's ListItem (it is
|
|
49
65
|
// destructured into a local and never reaches the frame), so the frame
|
|
@@ -52,13 +68,18 @@ const SelectTrigger = ({ children, disabled, ...props }) => {
|
|
|
52
68
|
// 14 + a 20px line + 14 + 2px of border rendered a 50px Select beside a 36px
|
|
53
69
|
// Input. At 0 the floor decides again and `items="center"` does the
|
|
54
70
|
// centring, which is exactly how the Input already behaves.
|
|
55
|
-
py: 0, cursor: "pointer", ...(0, gesture_1.touch)(
|
|
71
|
+
py: 0, cursor: "pointer", ...(0, gesture_1.touch)(box.h, 44, "y"), ...props, children: [(0, jsx_runtime_1.jsx)(TriggerFont.Provider, { value: box.font, children: (0, ink_1.ink)(children, undefined, { size: box.font }) }), (0, jsx_runtime_1.jsx)(gui_1.Select.Icon, { children: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ChevronDown, { size: 16, opacity: 0.5 }) })] }));
|
|
56
72
|
};
|
|
57
73
|
exports.SelectTrigger = SelectTrigger;
|
|
58
|
-
const SelectItem = ({ children, value, ...props }) =>
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
74
|
+
const SelectItem = ({ children, value, ...props }) => {
|
|
75
|
+
const compact = (0, density_1.useDensity)() === "compact";
|
|
76
|
+
return ((0, jsx_runtime_1.jsxs)(gui_1.Select.Item, { value: value, ...(0, slot_1.slot)("select-item"), unstyled: true, index: props.index ?? 0, items: "center",
|
|
77
|
+
// Start-aligned. gui's ListItem centres its row on the main axis, which set
|
|
78
|
+
// every option's label in the middle of the list with the tick on the far edge.
|
|
79
|
+
justify: "flex-start", gap: "$2", minH: ROW_H, pl: compact ? "$1" : "$2", pr: "$7",
|
|
80
|
+
// Concentric: the panel is 8, its inset 4, so a row is 4.
|
|
81
|
+
rounded: "$xs", cursor: "pointer", ...(0, gesture_1.touch)(ROW_H, 44, "y"), hoverStyle: { bg: compact ? "$hover" : "$raised" }, focusStyle: { bg: compact ? "$hover" : "$raised" }, ...props, children: [(0, jsx_runtime_1.jsx)(gui_1.Select.ItemText, { ...(compact ? { fontSize: "$2", color: "$aside" } : null), children: children }), (0, jsx_runtime_1.jsx)(gui_1.XStack, { position: "absolute", r: "$2", items: "center", justify: "center", pointerEvents: "none", children: (0, jsx_runtime_1.jsx)(gui_1.Select.ItemIndicator, { children: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Check, { size: 16, strokeWidth: 2 }) }) })] }));
|
|
82
|
+
};
|
|
62
83
|
exports.SelectItem = SelectItem;
|
|
63
84
|
/** Depth-first stamp of `index` onto every `SelectItem` in render order. */
|
|
64
85
|
const stampIndices = (children, next) => react_1.Children.map(children, (child) => {
|
|
@@ -77,10 +98,14 @@ const SelectScrollDownButton = (props) => ((0, jsx_runtime_1.jsx)(gui_1.Select.S
|
|
|
77
98
|
exports.SelectScrollDownButton = SelectScrollDownButton;
|
|
78
99
|
const SelectContent = ({ children, ...props }) => {
|
|
79
100
|
let n = 0;
|
|
80
|
-
|
|
101
|
+
// Read on the trigger's side of the portal and re-provided inside it: a
|
|
102
|
+
// context does not cross gui's portal, a provider placed in the portalled
|
|
103
|
+
// children does.
|
|
104
|
+
const density = (0, density_1.useDensity)();
|
|
105
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.Select.Content, { ...(0, slot_1.slot)("select-content"), ...props, children: (0, jsx_runtime_1.jsxs)(density_1.Density, { value: density, children: [(0, jsx_runtime_1.jsx)(SelectScrollUpButton, {}), (0, jsx_runtime_1.jsx)(gui_1.Select.Viewport, { minW: 128, p: "$1", bg: "$panel", borderWidth: 1, borderColor: "$borderColor", rounded: "$3", children: stampIndices(children, () => n++) }), (0, jsx_runtime_1.jsx)(SelectScrollDownButton, {})] }) }));
|
|
81
106
|
};
|
|
82
107
|
exports.SelectContent = SelectContent;
|
|
83
|
-
const SelectLabel = (props) => ((0, jsx_runtime_1.jsx)(gui_1.Select.Label, { ...(0, slot_1.slot)("select-label"), px: "$2", py: "$1.5", fontSize: "$1", color: "$quiet", ...props }));
|
|
108
|
+
const SelectLabel = (props) => ((0, jsx_runtime_1.jsx)(gui_1.Select.Label, { ...(0, slot_1.slot)("select-label"), px: "$2", py: "$1.5", fontSize: "$1", fontWeight: "500", color: "$quiet", ...props }));
|
|
84
109
|
exports.SelectLabel = SelectLabel;
|
|
85
110
|
const SelectSeparator = (props) => ((0, jsx_runtime_1.jsx)(gui_1.SelectSeparator, { ...(0, slot_1.slot)("select-separator"), my: "$1", borderColor: "$borderColor", ...props }));
|
|
86
111
|
exports.SelectSeparator = SelectSeparator;
|
|
@@ -96,11 +121,20 @@ const INSET = 4;
|
|
|
96
121
|
* select's own 4px, and the Input theme's ink, edge and two edge states (`EDGE`)
|
|
97
122
|
* — a native control gui does not draw, so it names what gui's Input carries.
|
|
98
123
|
*/
|
|
99
|
-
const Picker = /* @__PURE__ */ (0, react_1.forwardRef)(function Picker({ id, name, value, defaultValue, onChange, required, disabled, autoComplete, children, size
|
|
100
|
-
const
|
|
101
|
-
|
|
124
|
+
const Picker = /* @__PURE__ */ (0, react_1.forwardRef)(function Picker({ id, name, value, defaultValue, onChange, required, disabled, autoComplete, children, size, fill = false, ...props }, ref) {
|
|
125
|
+
const density = (0, density_1.useDensity)();
|
|
126
|
+
const resolved = (0, density_1.fieldSize)(size, density);
|
|
127
|
+
const box = control_1.BOX[resolved];
|
|
128
|
+
const dense = resolved === "sm" || resolved === "xs";
|
|
129
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.Text, { ref: ref, render: (0, jsx_runtime_1.jsx)("select", { id: id, name: name, value: value, defaultValue: defaultValue, onChange: onChange, required: required, disabled: disabled, autoComplete: autoComplete }), ...(0, slot_1.slot)("picker"), componentName: "Input", ...control_1.FIELD, ...control_1.EDGE, ...(density === "compact" ? { bg: "$panel" } : null), ...(fill ? control_1.FILL : null), display: "block",
|
|
102
130
|
// A floor, as the trigger's: the riser and the line make the box, and a
|
|
103
131
|
// larger font grows it rather than clipping the chosen option.
|
|
104
|
-
minH: box.h, width: "100%", minW: 0, pl: box.gutter - INSET, pr: box.gutter - INSET,
|
|
132
|
+
minH: box.h, width: "100%", minW: 0, pl: box.gutter - INSET, pr: box.gutter - INSET,
|
|
133
|
+
// Chromium ignores line-height on a <select> and sets its text on
|
|
134
|
+
// `normal` (19px at 13px Zen), so the record sizes cannot be built from a
|
|
135
|
+
// riser and a line the way the regular one is: 7 + 19 + 7 + 2 came out 35
|
|
136
|
+
// in a 32px box. They take no vertical padding and let the floor decide;
|
|
137
|
+
// the menulist centres its own text.
|
|
138
|
+
py: dense ? 0 : box.riser, color: "$color", fontFamily: "$body", fontSize: box.font, lineHeight: dense ? 16 : "$3", cursor: "pointer", ...props, children: children }));
|
|
105
139
|
});
|
|
106
140
|
exports.Picker = Picker;
|
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
*
|
|
10
10
|
* `Picker` is the other select: the platform's own, for a list the platform
|
|
11
11
|
* should show — every country, on a phone.
|
|
12
|
+
*
|
|
13
|
+
* Rows are concentric in the panel: a 4px inset inside an 8px panel takes a 4px
|
|
14
|
+
* row radius (`$xs`). Under `<Density value="compact">` the list takes the
|
|
15
|
+
* record density twenty-ui's Select draws (MIT, NOTICE): 13px rows in the quiet
|
|
16
|
+
* ink on the hover rung, and the density crosses the portal with the list.
|
|
12
17
|
*/
|
|
13
18
|
import { type ComponentProps, type ReactNode } from "react";
|
|
14
19
|
import { Select as GuiSelect, SelectSeparator as GuiSelectSeparator, type TextProps } from "@hanzo/gui";
|
|
@@ -24,8 +29,12 @@ export type SelectProps = ComponentProps<typeof GuiSelect> & {
|
|
|
24
29
|
type SelectRoot = ((props: SelectProps) => ReactNode) & typeof GuiSelect;
|
|
25
30
|
declare const Select: SelectRoot;
|
|
26
31
|
declare const SelectGroup: typeof GuiSelect.Group;
|
|
27
|
-
|
|
28
|
-
|
|
32
|
+
export type SelectValueProps = ComponentProps<typeof GuiSelect.Value>;
|
|
33
|
+
declare const SelectValue: (props: SelectValueProps) => import("react").JSX.Element;
|
|
34
|
+
export type SelectTriggerProps = Omit<ComponentProps<typeof GuiSelect.Trigger>, "size"> & {
|
|
35
|
+
/** The box, as `Input`'s (control.ts `BOX`). Unset, the nearest `<Density>` decides. */
|
|
36
|
+
size?: FieldSize;
|
|
37
|
+
};
|
|
29
38
|
export type SelectContentProps = ComponentProps<typeof GuiSelect.Content>;
|
|
30
39
|
export type SelectItemProps = Omit<ComponentProps<typeof GuiSelect.Item>, "index"> & {
|
|
31
40
|
index?: number;
|
|
@@ -33,7 +42,7 @@ export type SelectItemProps = Omit<ComponentProps<typeof GuiSelect.Item>, "index
|
|
|
33
42
|
export type SelectLabelProps = ComponentProps<typeof GuiSelect.Label>;
|
|
34
43
|
export type SelectSeparatorProps = ComponentProps<typeof GuiSelectSeparator>;
|
|
35
44
|
export type SelectScrollButtonProps = ComponentProps<typeof GuiSelect.ScrollUpButton>;
|
|
36
|
-
declare const SelectTrigger: ({ children, disabled, ...props }: SelectTriggerProps) => import("react").JSX.Element;
|
|
45
|
+
declare const SelectTrigger: ({ children, disabled, size, ...props }: SelectTriggerProps) => import("react").JSX.Element;
|
|
37
46
|
declare const SelectItem: ({ children, value, ...props }: SelectItemProps) => import("react").JSX.Element;
|
|
38
47
|
declare const SelectScrollUpButton: (props: SelectScrollButtonProps) => import("react").JSX.Element;
|
|
39
48
|
declare const SelectScrollDownButton: (props: SelectScrollButtonProps) => import("react").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/select.tsx"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/select.tsx"],"names":[],"mappings":"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"}
|
|
@@ -11,16 +11,22 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
11
11
|
*
|
|
12
12
|
* `Picker` is the other select: the platform's own, for a list the platform
|
|
13
13
|
* should show — every country, on a phone.
|
|
14
|
+
*
|
|
15
|
+
* Rows are concentric in the panel: a 4px inset inside an 8px panel takes a 4px
|
|
16
|
+
* row radius (`$xs`). Under `<Density value="compact">` the list takes the
|
|
17
|
+
* record density twenty-ui's Select draws (MIT, NOTICE): 13px rows in the quiet
|
|
18
|
+
* ink on the hover rung, and the density crosses the portal with the list.
|
|
14
19
|
*/
|
|
15
20
|
import { Children, cloneElement, createContext, forwardRef, isValidElement, useContext, } from "react";
|
|
16
21
|
import { Select as GuiSelect, SelectSeparator as GuiSelectSeparator, Text, XStack, } from "@hanzo/gui";
|
|
17
22
|
import { Check, ChevronDown, ChevronUp } from "@hanzogui/lucide-icons-2";
|
|
18
|
-
import { BOX,
|
|
23
|
+
import { BOX, EDGE, FIELD, FILL } from "./control.js";
|
|
24
|
+
import { Density, fieldSize, useDensity } from "./density.js";
|
|
25
|
+
import { invalidOf, useField } from "./field.js";
|
|
19
26
|
import { touch } from "./gesture.js";
|
|
20
27
|
import { ink } from "./ink.js";
|
|
21
28
|
import { slot } from "./slot.js";
|
|
22
29
|
const ROW_H = 32;
|
|
23
|
-
const TRIGGER_H = CONTROL_H;
|
|
24
30
|
/**
|
|
25
31
|
* Disabling the control is one fact with two spellings: gui puts `disabled` on
|
|
26
32
|
* the Trigger, the compound API puts it on the root. The root declares it and
|
|
@@ -29,15 +35,25 @@ const TRIGGER_H = CONTROL_H;
|
|
|
29
35
|
const Disabled = /* @__PURE__ */ createContext(false);
|
|
30
36
|
const Select = /* @__PURE__ */ Object.assign(({ disabled = false, ...props }) => (_jsx(Disabled.Provider, { value: disabled, children: _jsx(GuiSelect, { ...props }) })), GuiSelect);
|
|
31
37
|
const SelectGroup = GuiSelect.Group;
|
|
32
|
-
|
|
33
|
-
|
|
38
|
+
/**
|
|
39
|
+
* The trigger's rung, handed to the value it shows. `ink()` sizes a string
|
|
40
|
+
* child; `SelectValue` is an element and drew gui's own 14px whatever the box,
|
|
41
|
+
* so a 32px compact trigger showed its value a rung larger than the Input
|
|
42
|
+
* beside it. The trigger provides its box's rung and the value reads it.
|
|
43
|
+
*/
|
|
44
|
+
const TriggerFont = /* @__PURE__ */ createContext("$3");
|
|
45
|
+
const SelectValue = (props) => (_jsx(GuiSelect.Value, { fontSize: useContext(TriggerFont), ...props }));
|
|
46
|
+
const SelectTrigger = ({ children, disabled, size, ...props }) => {
|
|
34
47
|
const inherited = useContext(Disabled);
|
|
35
|
-
|
|
48
|
+
const density = useDensity();
|
|
49
|
+
const box = BOX[fieldSize(size, density)];
|
|
50
|
+
const invalid = invalidOf(props["aria-invalid"], useField());
|
|
51
|
+
return (_jsxs(GuiSelect.Trigger, { ...slot("select-trigger"), unstyled: true, disabled: disabled ?? inherited, ...FIELD, ...(density === "compact" ? { bg: "$panel" } : null), ...(invalid ? { borderColor: "$red7", "aria-invalid": true } : null), px: box.gutter, items: "center", justify: "space-between", gap: "$2",
|
|
36
52
|
// A FLOOR, not a pin. `height` alone clips a child taller than the box, and
|
|
37
53
|
// the build stays green while it does — that is why 01ac46dce moved Button
|
|
38
54
|
// off a pinned height. Select and Input kept theirs, so the same trap was
|
|
39
55
|
// still armed in the two controls that sit in every form.
|
|
40
|
-
height: "auto", minHeight:
|
|
56
|
+
height: "auto", minHeight: box.h,
|
|
41
57
|
// The trigger states its own vertical padding because otherwise something
|
|
42
58
|
// else states it. `unstyled` does not survive gui's ListItem (it is
|
|
43
59
|
// destructured into a local and never reaches the frame), so the frame
|
|
@@ -46,12 +62,17 @@ const SelectTrigger = ({ children, disabled, ...props }) => {
|
|
|
46
62
|
// 14 + a 20px line + 14 + 2px of border rendered a 50px Select beside a 36px
|
|
47
63
|
// Input. At 0 the floor decides again and `items="center"` does the
|
|
48
64
|
// centring, which is exactly how the Input already behaves.
|
|
49
|
-
py: 0, cursor: "pointer", ...touch(
|
|
65
|
+
py: 0, cursor: "pointer", ...touch(box.h, 44, "y"), ...props, children: [_jsx(TriggerFont.Provider, { value: box.font, children: ink(children, undefined, { size: box.font }) }), _jsx(GuiSelect.Icon, { children: _jsx(ChevronDown, { size: 16, opacity: 0.5 }) })] }));
|
|
66
|
+
};
|
|
67
|
+
const SelectItem = ({ children, value, ...props }) => {
|
|
68
|
+
const compact = useDensity() === "compact";
|
|
69
|
+
return (_jsxs(GuiSelect.Item, { value: value, ...slot("select-item"), unstyled: true, index: props.index ?? 0, items: "center",
|
|
70
|
+
// Start-aligned. gui's ListItem centres its row on the main axis, which set
|
|
71
|
+
// every option's label in the middle of the list with the tick on the far edge.
|
|
72
|
+
justify: "flex-start", gap: "$2", minH: ROW_H, pl: compact ? "$1" : "$2", pr: "$7",
|
|
73
|
+
// Concentric: the panel is 8, its inset 4, so a row is 4.
|
|
74
|
+
rounded: "$xs", cursor: "pointer", ...touch(ROW_H, 44, "y"), hoverStyle: { bg: compact ? "$hover" : "$raised" }, focusStyle: { bg: compact ? "$hover" : "$raised" }, ...props, children: [_jsx(GuiSelect.ItemText, { ...(compact ? { fontSize: "$2", color: "$aside" } : null), children: children }), _jsx(XStack, { position: "absolute", r: "$2", items: "center", justify: "center", pointerEvents: "none", children: _jsx(GuiSelect.ItemIndicator, { children: _jsx(Check, { size: 16, strokeWidth: 2 }) }) })] }));
|
|
50
75
|
};
|
|
51
|
-
const SelectItem = ({ children, value, ...props }) => (_jsxs(GuiSelect.Item, { value: value, ...slot("select-item"), unstyled: true, index: props.index ?? 0, items: "center",
|
|
52
|
-
// Start-aligned. gui's ListItem centres its row on the main axis, which set
|
|
53
|
-
// every option's label in the middle of the list with the tick on the far edge.
|
|
54
|
-
justify: "flex-start", gap: "$2", minH: ROW_H, pl: "$2", pr: "$7", rounded: "$2", cursor: "pointer", ...touch(ROW_H, 44, "y"), hoverStyle: { bg: "$raised" }, focusStyle: { bg: "$raised" }, ...props, children: [_jsx(GuiSelect.ItemText, { children: children }), _jsx(XStack, { position: "absolute", r: "$2", items: "center", justify: "center", pointerEvents: "none", children: _jsx(GuiSelect.ItemIndicator, { children: _jsx(Check, { size: 16 }) }) })] }));
|
|
55
76
|
/** Depth-first stamp of `index` onto every `SelectItem` in render order. */
|
|
56
77
|
const stampIndices = (children, next) => Children.map(children, (child) => {
|
|
57
78
|
if (!isValidElement(child))
|
|
@@ -67,9 +88,13 @@ const SelectScrollUpButton = (props) => (_jsx(GuiSelect.ScrollUpButton, { ...slo
|
|
|
67
88
|
const SelectScrollDownButton = (props) => (_jsx(GuiSelect.ScrollDownButton, { ...slot("select-scroll-down-button"), items: "center", justify: "center", py: "$1", ...props, children: _jsx(ChevronDown, { size: 16 }) }));
|
|
68
89
|
const SelectContent = ({ children, ...props }) => {
|
|
69
90
|
let n = 0;
|
|
70
|
-
|
|
91
|
+
// Read on the trigger's side of the portal and re-provided inside it: a
|
|
92
|
+
// context does not cross gui's portal, a provider placed in the portalled
|
|
93
|
+
// children does.
|
|
94
|
+
const density = useDensity();
|
|
95
|
+
return (_jsx(GuiSelect.Content, { ...slot("select-content"), ...props, children: _jsxs(Density, { value: density, children: [_jsx(SelectScrollUpButton, {}), _jsx(GuiSelect.Viewport, { minW: 128, p: "$1", bg: "$panel", borderWidth: 1, borderColor: "$borderColor", rounded: "$3", children: stampIndices(children, () => n++) }), _jsx(SelectScrollDownButton, {})] }) }));
|
|
71
96
|
};
|
|
72
|
-
const SelectLabel = (props) => (_jsx(GuiSelect.Label, { ...slot("select-label"), px: "$2", py: "$1.5", fontSize: "$1", color: "$quiet", ...props }));
|
|
97
|
+
const SelectLabel = (props) => (_jsx(GuiSelect.Label, { ...slot("select-label"), px: "$2", py: "$1.5", fontSize: "$1", fontWeight: "500", color: "$quiet", ...props }));
|
|
73
98
|
const SelectSeparator = (props) => (_jsx(GuiSelectSeparator, { ...slot("select-separator"), my: "$1", borderColor: "$borderColor", ...props }));
|
|
74
99
|
/** The select's own inset: Chromium pads a select's text 4px inside its box. */
|
|
75
100
|
const INSET = 4;
|
|
@@ -83,12 +108,21 @@ const INSET = 4;
|
|
|
83
108
|
* select's own 4px, and the Input theme's ink, edge and two edge states (`EDGE`)
|
|
84
109
|
* — a native control gui does not draw, so it names what gui's Input carries.
|
|
85
110
|
*/
|
|
86
|
-
const Picker = /* @__PURE__ */ forwardRef(function Picker({ id, name, value, defaultValue, onChange, required, disabled, autoComplete, children, size
|
|
87
|
-
const
|
|
88
|
-
|
|
111
|
+
const Picker = /* @__PURE__ */ forwardRef(function Picker({ id, name, value, defaultValue, onChange, required, disabled, autoComplete, children, size, fill = false, ...props }, ref) {
|
|
112
|
+
const density = useDensity();
|
|
113
|
+
const resolved = fieldSize(size, density);
|
|
114
|
+
const box = BOX[resolved];
|
|
115
|
+
const dense = resolved === "sm" || resolved === "xs";
|
|
116
|
+
return (_jsx(Text, { ref: ref, render: _jsx("select", { id: id, name: name, value: value, defaultValue: defaultValue, onChange: onChange, required: required, disabled: disabled, autoComplete: autoComplete }), ...slot("picker"), componentName: "Input", ...FIELD, ...EDGE, ...(density === "compact" ? { bg: "$panel" } : null), ...(fill ? FILL : null), display: "block",
|
|
89
117
|
// A floor, as the trigger's: the riser and the line make the box, and a
|
|
90
118
|
// larger font grows it rather than clipping the chosen option.
|
|
91
|
-
minH: box.h, width: "100%", minW: 0, pl: box.gutter - INSET, pr: box.gutter - INSET,
|
|
119
|
+
minH: box.h, width: "100%", minW: 0, pl: box.gutter - INSET, pr: box.gutter - INSET,
|
|
120
|
+
// Chromium ignores line-height on a <select> and sets its text on
|
|
121
|
+
// `normal` (19px at 13px Zen), so the record sizes cannot be built from a
|
|
122
|
+
// riser and a line the way the regular one is: 7 + 19 + 7 + 2 came out 35
|
|
123
|
+
// in a 32px box. They take no vertical padding and let the floor decide;
|
|
124
|
+
// the menulist centres its own text.
|
|
125
|
+
py: dense ? 0 : box.riser, color: "$color", fontFamily: "$body", fontSize: box.font, lineHeight: dense ? 16 : "$3", cursor: "pointer", ...props, children: children }));
|
|
92
126
|
});
|
|
93
127
|
export { Picker, Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectLabel, SelectItem, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, };
|
|
94
128
|
//# sourceMappingURL=select.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/backends/gui/select.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/backends/gui/select.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
'use client';"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.combinations = exports.keyName = void 0;
|
|
5
|
+
exports.formatShortcut = formatShortcut;
|
|
6
|
+
exports.speakShortcut = speakShortcut;
|
|
7
|
+
exports.Shortcut = Shortcut;
|
|
8
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
9
|
+
/**
|
|
10
|
+
* Shortcut — a keyboard shortcut as keycaps, named for the platform it is read
|
|
11
|
+
* on, and spoken as one phrase.
|
|
12
|
+
*
|
|
13
|
+
* A shortcut is one combination (`['Mod', 'K']`) or a sequence of them
|
|
14
|
+
* (`[['G'], ['P']]`, "G then P"). Key names translate per platform: `Mod` and
|
|
15
|
+
* `CommandOrControl` are ⌘ on a Mac and Ctrl elsewhere, `Alt` is ⌥ on a Mac,
|
|
16
|
+
* Enter is ⏎, arrows and Escape take their glyphs. The whole thing is one image
|
|
17
|
+
* to assistive technology, labelled in words ("Command + K", "G then P"), and
|
|
18
|
+
* the caps inside it are hidden — a screen reader hears the shortcut once, not
|
|
19
|
+
* a list of symbols.
|
|
20
|
+
*
|
|
21
|
+
* The platform is read through `useSyncExternalStore` with a server answer of
|
|
22
|
+
* "other", so a server render and the first client render agree and a Mac
|
|
23
|
+
* swaps Ctrl for ⌘ right after hydration rather than mismatching it.
|
|
24
|
+
*
|
|
25
|
+
* Re-expressed from twenty-ui's Shortcut and formatShortcut (MIT, see NOTICE):
|
|
26
|
+
* keys, text and button variants, a `desktop` visibility that hides it under a
|
|
27
|
+
* coarse pointer, keys 4px apart in a combination.
|
|
28
|
+
*/
|
|
29
|
+
const gui_1 = require("@hanzo/gui");
|
|
30
|
+
const react_1 = require("react");
|
|
31
|
+
const kbd_1 = require("./kbd.cjs");
|
|
32
|
+
const slot_1 = require("./slot.cjs");
|
|
33
|
+
/** Every key name the two platforms spell differently, by its lowercase alias. */
|
|
34
|
+
const KEYS = (platform) => {
|
|
35
|
+
const mac = platform === 'mac';
|
|
36
|
+
const mod = mac ? { glyph: '⌘', word: 'Command' } : { glyph: 'Ctrl', word: 'Control' };
|
|
37
|
+
return {
|
|
38
|
+
mod,
|
|
39
|
+
commandorcontrol: mod,
|
|
40
|
+
cmdorctrl: mod,
|
|
41
|
+
command: { glyph: '⌘', word: 'Command' },
|
|
42
|
+
cmd: { glyph: '⌘', word: 'Command' },
|
|
43
|
+
meta: { glyph: '⌘', word: 'Command' },
|
|
44
|
+
control: mac ? { glyph: '⌃', word: 'Control' } : { glyph: 'Ctrl', word: 'Control' },
|
|
45
|
+
ctrl: mac ? { glyph: '⌃', word: 'Control' } : { glyph: 'Ctrl', word: 'Control' },
|
|
46
|
+
alt: mac ? { glyph: '⌥', word: 'Option' } : { glyph: 'Alt', word: 'Alt' },
|
|
47
|
+
option: mac ? { glyph: '⌥', word: 'Option' } : { glyph: 'Alt', word: 'Alt' },
|
|
48
|
+
shift: { glyph: '⇧', word: 'Shift' },
|
|
49
|
+
enter: { glyph: '⏎', word: 'Enter' },
|
|
50
|
+
return: { glyph: '⏎', word: 'Enter' },
|
|
51
|
+
backspace: { glyph: '⌫', word: 'Backspace' },
|
|
52
|
+
delete: { glyph: '⌦', word: 'Delete' },
|
|
53
|
+
escape: { glyph: 'esc', word: 'Escape' },
|
|
54
|
+
esc: { glyph: 'esc', word: 'Escape' },
|
|
55
|
+
tab: { glyph: '⇥', word: 'Tab' },
|
|
56
|
+
space: { glyph: 'Space', word: 'Space' },
|
|
57
|
+
arrowup: { glyph: '↑', word: 'Up arrow' },
|
|
58
|
+
arrowdown: { glyph: '↓', word: 'Down arrow' },
|
|
59
|
+
arrowleft: { glyph: '←', word: 'Left arrow' },
|
|
60
|
+
arrowright: { glyph: '→', word: 'Right arrow' },
|
|
61
|
+
up: { glyph: '↑', word: 'Up arrow' },
|
|
62
|
+
down: { glyph: '↓', word: 'Down arrow' },
|
|
63
|
+
left: { glyph: '←', word: 'Left arrow' },
|
|
64
|
+
right: { glyph: '→', word: 'Right arrow' },
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
/** A key's glyph and word on `platform`; a plain key is itself, a letter uppercased. */
|
|
68
|
+
const keyName = (key, platform) => {
|
|
69
|
+
const known = KEYS(platform)[key.toLowerCase()];
|
|
70
|
+
if (known)
|
|
71
|
+
return known;
|
|
72
|
+
const label = key.length === 1 ? key.toUpperCase() : key;
|
|
73
|
+
return { glyph: label, word: label };
|
|
74
|
+
};
|
|
75
|
+
exports.keyName = keyName;
|
|
76
|
+
/** `keys` as a list of combinations, whichever shape it was given in. */
|
|
77
|
+
const combinations = (keys) => keys.length > 0 && Array.isArray(keys[0]) ? keys.map((c) => [...c]) : [[...keys]];
|
|
78
|
+
exports.combinations = combinations;
|
|
79
|
+
/** The shortcut as text, without rendering: "⌘K", "Ctrl K", "G then P". */
|
|
80
|
+
function formatShortcut(keys, options = {}) {
|
|
81
|
+
const platform = options.platform ?? detect();
|
|
82
|
+
const join = options.combinationSeparator ?? (platform === 'mac' ? '' : ' ');
|
|
83
|
+
return (0, exports.combinations)(keys)
|
|
84
|
+
.map((c) => c.map((k) => (0, exports.keyName)(k, platform).glyph).join(join))
|
|
85
|
+
.join(` ${options.sequenceJoinLabel ?? 'then'} `);
|
|
86
|
+
}
|
|
87
|
+
/** The shortcut in words, for assistive technology: "Command + K", "G then P". */
|
|
88
|
+
function speakShortcut(keys, platform, then = 'then') {
|
|
89
|
+
return (0, exports.combinations)(keys)
|
|
90
|
+
.map((c) => c.map((k) => (0, exports.keyName)(k, platform).word).join(' + '))
|
|
91
|
+
.join(` ${then} `);
|
|
92
|
+
}
|
|
93
|
+
/** macOS and iOS read as a Mac; anything else, or no navigator, does not. */
|
|
94
|
+
function detect() {
|
|
95
|
+
if (typeof navigator === 'undefined')
|
|
96
|
+
return 'other';
|
|
97
|
+
const nav = navigator;
|
|
98
|
+
const p = nav.userAgentData?.platform ?? nav.platform ?? nav.userAgent ?? '';
|
|
99
|
+
return /mac|iphone|ipad|ipod/i.test(p) ? 'mac' : 'other';
|
|
100
|
+
}
|
|
101
|
+
const never = () => () => { };
|
|
102
|
+
function Shortcut({ keys, platform, variant = 'keys', visibility = 'always', sequenceJoinLabel = 'then', combinationSeparator, ...props }) {
|
|
103
|
+
const detected = (0, react_1.useSyncExternalStore)(never, detect, () => 'other');
|
|
104
|
+
const on = platform ?? detected;
|
|
105
|
+
const label = speakShortcut(keys, on, sequenceJoinLabel);
|
|
106
|
+
const hidden = visibility === 'desktop' ? { $touchable: { display: 'none' } } : null;
|
|
107
|
+
const frame = {
|
|
108
|
+
...(0, slot_1.slot)('shortcut'),
|
|
109
|
+
'data-variant': variant,
|
|
110
|
+
role: 'img',
|
|
111
|
+
'aria-label': label,
|
|
112
|
+
display: 'inline-flex',
|
|
113
|
+
items: 'center',
|
|
114
|
+
...hidden,
|
|
115
|
+
};
|
|
116
|
+
if (variant === 'text' || variant === 'button') {
|
|
117
|
+
const text = formatShortcut(keys, { platform: on, sequenceJoinLabel, combinationSeparator });
|
|
118
|
+
return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...frame, ...(variant === 'button' ? { gap: 6, ml: '$1', opacity: 0.5 } : null), ...props, children: [variant === 'button' ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { "aria-hidden": true, width: 1, height: 8, opacity: 0.4, style: { backgroundColor: 'currentColor' } })) : null, (0, jsx_runtime_1.jsx)(gui_1.SizableText, { "aria-hidden": true, size: "$2", ...(variant === 'button' ? { fontWeight: '500' } : null), children: text })] }));
|
|
119
|
+
}
|
|
120
|
+
const combos = (0, exports.combinations)(keys);
|
|
121
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...frame, gap: "$1", ...props, children: combos.map((combo, i) => ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { "aria-hidden": true, display: "inline-flex", items: "center", gap: "$1", children: [i > 0 ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", color: "$hint", children: sequenceJoinLabel })) : null, combo.map((k, j) => ((0, jsx_runtime_1.jsx)(kbd_1.Kbd, { variant: "cap", children: (0, exports.keyName)(k, on).glyph }, j)))] }, i))) }));
|
|
122
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shortcut — a keyboard shortcut as keycaps, named for the platform it is read
|
|
3
|
+
* on, and spoken as one phrase.
|
|
4
|
+
*
|
|
5
|
+
* A shortcut is one combination (`['Mod', 'K']`) or a sequence of them
|
|
6
|
+
* (`[['G'], ['P']]`, "G then P"). Key names translate per platform: `Mod` and
|
|
7
|
+
* `CommandOrControl` are ⌘ on a Mac and Ctrl elsewhere, `Alt` is ⌥ on a Mac,
|
|
8
|
+
* Enter is ⏎, arrows and Escape take their glyphs. The whole thing is one image
|
|
9
|
+
* to assistive technology, labelled in words ("Command + K", "G then P"), and
|
|
10
|
+
* the caps inside it are hidden — a screen reader hears the shortcut once, not
|
|
11
|
+
* a list of symbols.
|
|
12
|
+
*
|
|
13
|
+
* The platform is read through `useSyncExternalStore` with a server answer of
|
|
14
|
+
* "other", so a server render and the first client render agree and a Mac
|
|
15
|
+
* swaps Ctrl for ⌘ right after hydration rather than mismatching it.
|
|
16
|
+
*
|
|
17
|
+
* Re-expressed from twenty-ui's Shortcut and formatShortcut (MIT, see NOTICE):
|
|
18
|
+
* keys, text and button variants, a `desktop` visibility that hides it under a
|
|
19
|
+
* coarse pointer, keys 4px apart in a combination.
|
|
20
|
+
*/
|
|
21
|
+
import { XStack } from '@hanzo/gui';
|
|
22
|
+
import { type ComponentProps } from 'react';
|
|
23
|
+
export type ShortcutPlatform = 'mac' | 'other';
|
|
24
|
+
/** One combination, or a sequence of combinations pressed one after another. */
|
|
25
|
+
export type ShortcutKeys = readonly string[] | readonly (readonly string[])[];
|
|
26
|
+
type Name = {
|
|
27
|
+
glyph: string;
|
|
28
|
+
word: string;
|
|
29
|
+
};
|
|
30
|
+
/** A key's glyph and word on `platform`; a plain key is itself, a letter uppercased. */
|
|
31
|
+
export declare const keyName: (key: string, platform: ShortcutPlatform) => Name;
|
|
32
|
+
/** `keys` as a list of combinations, whichever shape it was given in. */
|
|
33
|
+
export declare const combinations: (keys: ShortcutKeys) => string[][];
|
|
34
|
+
export type FormatOptions = {
|
|
35
|
+
platform?: ShortcutPlatform;
|
|
36
|
+
/** Between combinations of a sequence. Default "then". */
|
|
37
|
+
sequenceJoinLabel?: string;
|
|
38
|
+
/** Between the keys of one combination. Default none on a Mac, a space elsewhere. */
|
|
39
|
+
combinationSeparator?: string;
|
|
40
|
+
};
|
|
41
|
+
/** The shortcut as text, without rendering: "⌘K", "Ctrl K", "G then P". */
|
|
42
|
+
export declare function formatShortcut(keys: ShortcutKeys, options?: FormatOptions): string;
|
|
43
|
+
/** The shortcut in words, for assistive technology: "Command + K", "G then P". */
|
|
44
|
+
export declare function speakShortcut(keys: ShortcutKeys, platform: ShortcutPlatform, then?: string): string;
|
|
45
|
+
export type ShortcutProps = Omit<ComponentProps<typeof XStack>, 'children'> & {
|
|
46
|
+
keys: ShortcutKeys;
|
|
47
|
+
/** Default: the platform the page is read on. */
|
|
48
|
+
platform?: ShortcutPlatform;
|
|
49
|
+
/** `keys` draws keycaps; `text` plain text in the surrounding type; `button` the quiet hint inside a Button. */
|
|
50
|
+
variant?: 'keys' | 'text' | 'button';
|
|
51
|
+
/** `desktop` hides it under a coarse pointer, where there is no keyboard to press it on. */
|
|
52
|
+
visibility?: 'always' | 'desktop';
|
|
53
|
+
sequenceJoinLabel?: string;
|
|
54
|
+
combinationSeparator?: string;
|
|
55
|
+
};
|
|
56
|
+
export declare function Shortcut({ keys, platform, variant, visibility, sequenceJoinLabel, combinationSeparator, ...props }: ShortcutProps): import("react").JSX.Element;
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=shortcut.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shortcut.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/shortcut.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAe,MAAM,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,OAAO,CAAA;AAIjE,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,OAAO,CAAA;AAC9C,gFAAgF;AAChF,MAAM,MAAM,YAAY,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAA;AAE7E,KAAK,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAqC3C,wFAAwF;AACxF,eAAO,MAAM,OAAO,QAAS,MAAM,YAAY,gBAAgB,KAAG,IAKjE,CAAA;AAED,yEAAyE;AACzE,eAAO,MAAM,YAAY,SAAU,YAAY,KAAG,MAAM,EAAE,EACuD,CAAA;AAEjH,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC3B,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,qFAAqF;IACrF,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAMtF;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,SAAS,GAAG,MAAM,CAInG;AAYD,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IAC5E,IAAI,EAAE,YAAY,CAAA;IAClB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC3B,gHAAgH;IAChH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAA;IACpC,4FAA4F;IAC5F,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,QAAQ,EACR,OAAgB,EAChB,UAAqB,EACrB,iBAA0B,EAC1B,oBAAoB,EACpB,GAAG,KAAK,EACT,EAAE,aAAa,+BAoDf"}
|