@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
|
@@ -66,6 +66,11 @@ const REST = {
|
|
|
66
66
|
borderColor: '$borderColor',
|
|
67
67
|
hoverStyle: { backgroundColor: '$hover' },
|
|
68
68
|
},
|
|
69
|
+
tile: {
|
|
70
|
+
backgroundColor: 'transparent',
|
|
71
|
+
borderColor: '$borderColor',
|
|
72
|
+
hoverStyle: { backgroundColor: '$hover' },
|
|
73
|
+
},
|
|
69
74
|
};
|
|
70
75
|
/**
|
|
71
76
|
* The ON treatment. gui merges `activeStyle` into hover and focus as well as
|
|
@@ -77,6 +82,7 @@ const REST = {
|
|
|
77
82
|
const ON = {
|
|
78
83
|
default: { backgroundColor: '$rim', borderColor: '$bound' },
|
|
79
84
|
outline: { backgroundColor: '$raised', borderColor: '$bound' },
|
|
85
|
+
tile: { backgroundColor: 'transparent', borderColor: 'var(--primary)' },
|
|
80
86
|
};
|
|
81
87
|
const GroupContext = /* @__PURE__ */ (0, react_1.createContext)({
|
|
82
88
|
type: 'multiple',
|
|
@@ -102,6 +108,13 @@ function ToggleGroupItem({ variant, size, disabled, children, value, ...props })
|
|
|
102
108
|
const s = group.size ?? size ?? 'default';
|
|
103
109
|
const on = group.selected.includes(value);
|
|
104
110
|
const off = disabled || group.disabled;
|
|
111
|
+
if (v === 'tile')
|
|
112
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.ToggleGroup.Item, { value: value, ...(0, slot_1.slot)('toggle-group-item'), "data-variant": "tile", role: group.type === 'single' ? 'radio' : undefined, "aria-checked": group.type === 'single' ? on : undefined, unstyled: true, flexDirection: "column", items: "center", justify: "center", width: "100%", minH: 32, px: "$1", py: "$1.5", gap: "$1", borderWidth: 1, rounded: "$xs", select: "none", disabled: off, cursor: off ? 'default' : 'pointer', focusVisibleStyle: press_1.RING, ...REST.tile, ...(off ? { backgroundColor: '$panel', hoverStyle: { backgroundColor: '$panel' } } : null), activeStyle: ON.tile, animation: "75ms", ...(0, gesture_1.touch)(32, 44, 'y'), ...props, children: (0, ink_1.ink)(children, undefined, {
|
|
113
|
+
size: '$1',
|
|
114
|
+
fontWeight: '600',
|
|
115
|
+
numberOfLines: 1,
|
|
116
|
+
color: off ? 'var(--text-faint)' : on ? 'var(--primary)' : '$hint',
|
|
117
|
+
}) }));
|
|
105
118
|
return ((0, jsx_runtime_1.jsx)(gui_1.ToggleGroup.Item, { value: value, ...(0, slot_1.slot)('toggle-group-item'), "data-variant": v, "data-size": s,
|
|
106
119
|
// The two Radix semantics gui drops in `single` mode. `aria-pressed` is
|
|
107
120
|
// left alone for `multiple`, where gui already sets it from the same state.
|
|
@@ -40,7 +40,13 @@
|
|
|
40
40
|
*/
|
|
41
41
|
import { ToggleGroup as GuiToggleGroup } from '@hanzo/gui';
|
|
42
42
|
import { type CSSProperties, type ComponentProps, type ReactNode } from 'react';
|
|
43
|
-
|
|
43
|
+
/**
|
|
44
|
+
* `tile` is the picker tile (twenty-ui's MenuPicker, MIT, NOTICE): an icon over
|
|
45
|
+
* a small label in a 4px-cornered box that fills its grid cell — a chart type,
|
|
46
|
+
* a view layout. The chosen tile takes the accent edge and label; the label is
|
|
47
|
+
* 12px semibold and truncates.
|
|
48
|
+
*/
|
|
49
|
+
export type ToggleGroupVariant = 'default' | 'outline' | 'tile';
|
|
44
50
|
export type ToggleGroupSize = 'default' | 'sm' | 'lg';
|
|
45
51
|
/**
|
|
46
52
|
* Written out rather than derived from gui's, which cannot be used here.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toggle-group.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/toggle-group.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EAAE,WAAW,IAAI,cAAc,EAAwB,MAAM,YAAY,CAAA;AAChF,OAAO,EAA6B,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAM1G,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"toggle-group.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/toggle-group.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EAAE,WAAW,IAAI,cAAc,EAAwB,MAAM,YAAY,CAAA;AAChF,OAAO,EAA6B,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAM1G;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAA;AAC/D,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;AA6DrD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,KAAK,eAAe,GAAG;IACrB,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IACvC,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG;IAC/C,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAChC;;;;;;;;;OASG;IACH,aAAa,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAA;CAC/C,CAAA;AAED,iBAAS,WAAW,CAAC,EACnB,IAAe,EACf,KAAK,EACL,YAAY,EACZ,aAAa,EACb,WAA0B,EAC1B,mBAAmB,EACnB,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,gBAAgB,+BAoClB;AAED,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,cAAc,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC,EAC1C,MAAM,CACP,GAAG;IACF,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,IAAI,CAAC,EAAE,eAAe,CAAA;CACvB,CAAA;AAED,iBAAS,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,+BAsFpG;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -62,6 +62,11 @@ const REST = {
|
|
|
62
62
|
borderColor: '$borderColor',
|
|
63
63
|
hoverStyle: { backgroundColor: '$hover' },
|
|
64
64
|
},
|
|
65
|
+
tile: {
|
|
66
|
+
backgroundColor: 'transparent',
|
|
67
|
+
borderColor: '$borderColor',
|
|
68
|
+
hoverStyle: { backgroundColor: '$hover' },
|
|
69
|
+
},
|
|
65
70
|
};
|
|
66
71
|
/**
|
|
67
72
|
* The ON treatment. gui merges `activeStyle` into hover and focus as well as
|
|
@@ -73,6 +78,7 @@ const REST = {
|
|
|
73
78
|
const ON = {
|
|
74
79
|
default: { backgroundColor: '$rim', borderColor: '$bound' },
|
|
75
80
|
outline: { backgroundColor: '$raised', borderColor: '$bound' },
|
|
81
|
+
tile: { backgroundColor: 'transparent', borderColor: 'var(--primary)' },
|
|
76
82
|
};
|
|
77
83
|
const GroupContext = /* @__PURE__ */ createContext({
|
|
78
84
|
type: 'multiple',
|
|
@@ -98,6 +104,13 @@ function ToggleGroupItem({ variant, size, disabled, children, value, ...props })
|
|
|
98
104
|
const s = group.size ?? size ?? 'default';
|
|
99
105
|
const on = group.selected.includes(value);
|
|
100
106
|
const off = disabled || group.disabled;
|
|
107
|
+
if (v === 'tile')
|
|
108
|
+
return (_jsx(GuiToggleGroup.Item, { value: value, ...slot('toggle-group-item'), "data-variant": "tile", role: group.type === 'single' ? 'radio' : undefined, "aria-checked": group.type === 'single' ? on : undefined, unstyled: true, flexDirection: "column", items: "center", justify: "center", width: "100%", minH: 32, px: "$1", py: "$1.5", gap: "$1", borderWidth: 1, rounded: "$xs", select: "none", disabled: off, cursor: off ? 'default' : 'pointer', focusVisibleStyle: RING, ...REST.tile, ...(off ? { backgroundColor: '$panel', hoverStyle: { backgroundColor: '$panel' } } : null), activeStyle: ON.tile, animation: "75ms", ...touch(32, 44, 'y'), ...props, children: ink(children, undefined, {
|
|
109
|
+
size: '$1',
|
|
110
|
+
fontWeight: '600',
|
|
111
|
+
numberOfLines: 1,
|
|
112
|
+
color: off ? 'var(--text-faint)' : on ? 'var(--primary)' : '$hint',
|
|
113
|
+
}) }));
|
|
101
114
|
return (_jsx(GuiToggleGroup.Item, { value: value, ...slot('toggle-group-item'), "data-variant": v, "data-size": s,
|
|
102
115
|
// The two Radix semantics gui drops in `single` mode. `aria-pressed` is
|
|
103
116
|
// left alone for `multiple`, where gui already sets it from the same state.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toggle-group.js","sourceRoot":"","sources":["../../../src/backends/gui/toggle-group.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,UAAU,EAA2D,MAAM,OAAO,CAAA;AAC1G,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"toggle-group.js","sourceRoot":"","sources":["../../../src/backends/gui/toggle-group.tsx"],"names":[],"mappings":"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"}
|
|
@@ -9,25 +9,48 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
9
9
|
* gui keeps the offset on the tooltip ROOT while the compound API spells it on
|
|
10
10
|
* Content, as `sideOffset`. One value, one owner: the root holds it, Content
|
|
11
11
|
* publishes into it — the same split `popover` resolves, for the same reason.
|
|
12
|
+
*
|
|
13
|
+
* The panel FOLLOWS THE THEME — a dark hint on a dark page, a light one on a
|
|
14
|
+
* light page (Hanzo's decision; twenty-ui's is a dark slab in both). It did not
|
|
15
|
+
* before, measured: gui's Tooltip frame carries a `t_Tooltip` sub-theme that
|
|
16
|
+
* inverts the ground, so on the dark page the hint was a light-grey slab
|
|
17
|
+
* (`--background` 85% lightness under glass) with near-black text, and on the
|
|
18
|
+
* light page a dark one. Naming the frame's component `Hint`, which no theme
|
|
19
|
+
* table carries, leaves it in the theme it was opened from. It takes twenty-ui's
|
|
20
|
+
* geometry (MIT, NOTICE): 4×6 padding, 12px text on
|
|
21
|
+
* a 16px line, 10px clear of its anchor, at most 300 wide, opening after 600ms.
|
|
22
|
+
* A title may lead with a 14px icon and carry a quieter description under it,
|
|
23
|
+
* line breaks kept.
|
|
12
24
|
*/
|
|
13
25
|
const gui_1 = require("@hanzo/gui");
|
|
14
26
|
const react_1 = require("react");
|
|
15
27
|
const portal_theme_1 = require("../../product/menu/portal-theme.cjs");
|
|
16
28
|
const ink_1 = require("./ink.cjs");
|
|
17
29
|
const slot_1 = require("./slot.cjs");
|
|
18
|
-
const DEFAULT_OFFSET =
|
|
30
|
+
const DEFAULT_OFFSET = 10;
|
|
31
|
+
/** How long a pointer rests before the hint opens, ms. */
|
|
32
|
+
const DEFAULT_DELAY = 600;
|
|
33
|
+
const MAX_W = 300;
|
|
19
34
|
const Publish = /* @__PURE__ */ (0, react_1.createContext)(null);
|
|
20
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Whether a tooltip sits in a `TooltipProvider`. gui lets a tooltip's own
|
|
37
|
+
* `delay` override its group's, so a tooltip in a group must leave the delay
|
|
38
|
+
* unsaid for the group's to hold; one standing alone takes the 600ms default.
|
|
39
|
+
*/
|
|
40
|
+
const Grouped = /* @__PURE__ */ (0, react_1.createContext)(false);
|
|
41
|
+
const Tooltip = ({ offset = DEFAULT_OFFSET, delay, ...props }) => {
|
|
21
42
|
const [placed, setPlaced] = (0, react_1.useState)({});
|
|
22
43
|
const publish = (0, react_1.useCallback)((p) => setPlaced((prev) => ({ ...prev, ...p })), []);
|
|
23
|
-
|
|
44
|
+
const grouped = (0, react_1.useContext)(Grouped);
|
|
45
|
+
return ((0, jsx_runtime_1.jsx)(Publish.Provider, { value: publish, children: (0, jsx_runtime_1.jsx)(gui_1.Tooltip, { offset: placed.offset ?? offset, delay: delay ?? (grouped ? undefined : DEFAULT_DELAY), ...props }) }));
|
|
24
46
|
};
|
|
25
47
|
exports.Tooltip = Tooltip;
|
|
26
48
|
const TooltipTrigger = gui_1.Tooltip.Trigger;
|
|
27
49
|
exports.TooltipTrigger = TooltipTrigger;
|
|
28
|
-
|
|
50
|
+
/** gui's `TooltipGroup`: the tooltips in it share one delay, 600ms unless told otherwise. */
|
|
51
|
+
const TooltipProvider = ({ delay = DEFAULT_DELAY, ...props }) => ((0, jsx_runtime_1.jsx)(Grouped.Provider, { value: true, children: (0, jsx_runtime_1.jsx)(gui_1.TooltipGroup, { delay: delay, ...props }) }));
|
|
29
52
|
exports.TooltipProvider = TooltipProvider;
|
|
30
|
-
const TooltipContent = ({ sideOffset, children, ...props }) => {
|
|
53
|
+
const TooltipContent = ({ sideOffset, startIcon, description, children, ...props }) => {
|
|
31
54
|
const themeName = (0, portal_theme_1.useThemeName)();
|
|
32
55
|
const publish = (0, react_1.useContext)(Publish);
|
|
33
56
|
// Only a Content that names an offset has anything to say about it; an absent
|
|
@@ -36,6 +59,6 @@ const TooltipContent = ({ sideOffset, children, ...props }) => {
|
|
|
36
59
|
if (sideOffset !== undefined)
|
|
37
60
|
publish?.({ offset: sideOffset });
|
|
38
61
|
}, [publish, sideOffset]);
|
|
39
|
-
return ((0, jsx_runtime_1.jsx)(portal_theme_1.PortalTheme, { name: themeName, children: (0, jsx_runtime_1.jsx)(gui_1.Tooltip.Content, { ...(0, slot_1.slot)('tooltip-content'), bg: "$panel", borderWidth: 1, borderColor: "$borderColor", rounded: "$3", px: "$
|
|
62
|
+
return ((0, jsx_runtime_1.jsx)(portal_theme_1.PortalTheme, { name: themeName, children: (0, jsx_runtime_1.jsx)(gui_1.Tooltip.Content, { ...(0, slot_1.slot)('tooltip-content'), componentName: "Hint", bg: "$panel", borderWidth: 1, borderColor: "$borderColor", rounded: "$3", px: "$1.5", py: "$1", maxW: MAX_W, ...props, children: startIcon || description ? ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { gap: "$0.5", children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "center", gap: "$1", children: [startIcon ? (0, jsx_runtime_1.jsx)(gui_1.XStack, { shrink: 0, children: startIcon }) : null, (0, ink_1.ink)(children, undefined, { size: '$1', fontWeight: '500' })] }), description ? (typeof description === 'string' ? ((0, jsx_runtime_1.jsx)(gui_1.Text, { ...(0, slot_1.slot)('tooltip-description'), fontSize: "$1", lineHeight: "$1", color: "$aside", style: { whiteSpace: 'pre-line' }, children: description })) : (description)) : null] })) : ((0, ink_1.ink)(children, undefined, { size: '$1' })) }) }));
|
|
40
63
|
};
|
|
41
64
|
exports.TooltipContent = TooltipContent;
|
|
@@ -4,18 +4,37 @@
|
|
|
4
4
|
* gui keeps the offset on the tooltip ROOT while the compound API spells it on
|
|
5
5
|
* Content, as `sideOffset`. One value, one owner: the root holds it, Content
|
|
6
6
|
* publishes into it — the same split `popover` resolves, for the same reason.
|
|
7
|
+
*
|
|
8
|
+
* The panel FOLLOWS THE THEME — a dark hint on a dark page, a light one on a
|
|
9
|
+
* light page (Hanzo's decision; twenty-ui's is a dark slab in both). It did not
|
|
10
|
+
* before, measured: gui's Tooltip frame carries a `t_Tooltip` sub-theme that
|
|
11
|
+
* inverts the ground, so on the dark page the hint was a light-grey slab
|
|
12
|
+
* (`--background` 85% lightness under glass) with near-black text, and on the
|
|
13
|
+
* light page a dark one. Naming the frame's component `Hint`, which no theme
|
|
14
|
+
* table carries, leaves it in the theme it was opened from. It takes twenty-ui's
|
|
15
|
+
* geometry (MIT, NOTICE): 4×6 padding, 12px text on
|
|
16
|
+
* a 16px line, 10px clear of its anchor, at most 300 wide, opening after 600ms.
|
|
17
|
+
* A title may lead with a 14px icon and carry a quieter description under it,
|
|
18
|
+
* line breaks kept.
|
|
7
19
|
*/
|
|
8
20
|
import { Tooltip as GuiTooltip, TooltipGroup } from '@hanzo/gui';
|
|
9
|
-
import { type ComponentProps } from 'react';
|
|
21
|
+
import { type ComponentProps, type ReactNode } from 'react';
|
|
10
22
|
export type TooltipProps = Omit<ComponentProps<typeof GuiTooltip>, 'offset'> & {
|
|
11
23
|
offset?: number;
|
|
12
24
|
};
|
|
13
25
|
export type TooltipContentProps = ComponentProps<typeof GuiTooltip.Content> & {
|
|
14
26
|
sideOffset?: number;
|
|
27
|
+
/** A 14px icon before the title. */
|
|
28
|
+
startIcon?: ReactNode;
|
|
29
|
+
/** A quieter line under the title, line breaks kept. */
|
|
30
|
+
description?: ReactNode;
|
|
15
31
|
};
|
|
16
|
-
declare const Tooltip: ({ offset, ...props }: TooltipProps) => import("react").JSX.Element;
|
|
32
|
+
declare const Tooltip: ({ offset, delay, ...props }: TooltipProps) => import("react").JSX.Element;
|
|
17
33
|
declare const TooltipTrigger: typeof GuiTooltip.Trigger;
|
|
18
|
-
|
|
19
|
-
declare const
|
|
34
|
+
/** gui's `TooltipGroup`: the tooltips in it share one delay, 600ms unless told otherwise. */
|
|
35
|
+
declare const TooltipProvider: ({ delay, ...props }: Omit<ComponentProps<typeof TooltipGroup>, 'delay'> & {
|
|
36
|
+
delay?: ComponentProps<typeof TooltipGroup>['delay'];
|
|
37
|
+
}) => import("react").JSX.Element;
|
|
38
|
+
declare const TooltipContent: ({ sideOffset, startIcon, description, children, ...props }: TooltipContentProps) => import("react").JSX.Element;
|
|
20
39
|
export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
|
|
21
40
|
//# sourceMappingURL=tooltip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/tooltip.tsx"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/tooltip.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAQ,OAAO,IAAI,UAAU,EAAE,YAAY,EAAkB,MAAM,YAAY,CAAA;AACtF,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAed,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,EAAE,QAAQ,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAClG,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,oCAAoC;IACpC,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,wDAAwD;IACxD,WAAW,CAAC,EAAE,SAAS,CAAA;CACxB,CAAA;AASD,QAAA,MAAM,OAAO,gCAAkD,YAAY,gCAS1E,CAAA;AACD,QAAA,MAAM,cAAc,EAAE,OAAO,UAAU,CAAC,OAA4B,CAAA;AAEpE,6FAA6F;AAC7F,QAAA,MAAM,eAAe,wBAAyC,IAAI,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,EAAE,OAAO,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,OAAO,CAAC,CAAA;CAAE,gCAI1K,CAAA;AAED,QAAA,MAAM,cAAc,+DAAgE,mBAAmB,gCA4CtG,CAAA;AAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -1,27 +1,50 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
/**
|
|
4
4
|
* Tooltip — hover/focus hint. `TooltipProvider` is gui's `TooltipGroup`.
|
|
5
5
|
*
|
|
6
6
|
* gui keeps the offset on the tooltip ROOT while the compound API spells it on
|
|
7
7
|
* Content, as `sideOffset`. One value, one owner: the root holds it, Content
|
|
8
8
|
* publishes into it — the same split `popover` resolves, for the same reason.
|
|
9
|
+
*
|
|
10
|
+
* The panel FOLLOWS THE THEME — a dark hint on a dark page, a light one on a
|
|
11
|
+
* light page (Hanzo's decision; twenty-ui's is a dark slab in both). It did not
|
|
12
|
+
* before, measured: gui's Tooltip frame carries a `t_Tooltip` sub-theme that
|
|
13
|
+
* inverts the ground, so on the dark page the hint was a light-grey slab
|
|
14
|
+
* (`--background` 85% lightness under glass) with near-black text, and on the
|
|
15
|
+
* light page a dark one. Naming the frame's component `Hint`, which no theme
|
|
16
|
+
* table carries, leaves it in the theme it was opened from. It takes twenty-ui's
|
|
17
|
+
* geometry (MIT, NOTICE): 4×6 padding, 12px text on
|
|
18
|
+
* a 16px line, 10px clear of its anchor, at most 300 wide, opening after 600ms.
|
|
19
|
+
* A title may lead with a 14px icon and carry a quieter description under it,
|
|
20
|
+
* line breaks kept.
|
|
9
21
|
*/
|
|
10
|
-
import { Tooltip as GuiTooltip, TooltipGroup } from '@hanzo/gui';
|
|
22
|
+
import { Text, Tooltip as GuiTooltip, TooltipGroup, XStack, YStack } from '@hanzo/gui';
|
|
11
23
|
import { createContext, useCallback, useContext, useEffect, useState, } from 'react';
|
|
12
24
|
import { PortalTheme, useThemeName } from '../../product/menu/portal-theme.js';
|
|
13
25
|
import { ink } from './ink.js';
|
|
14
26
|
import { slot } from './slot.js';
|
|
15
|
-
const DEFAULT_OFFSET =
|
|
27
|
+
const DEFAULT_OFFSET = 10;
|
|
28
|
+
/** How long a pointer rests before the hint opens, ms. */
|
|
29
|
+
const DEFAULT_DELAY = 600;
|
|
30
|
+
const MAX_W = 300;
|
|
16
31
|
const Publish = /* @__PURE__ */ createContext(null);
|
|
17
|
-
|
|
32
|
+
/**
|
|
33
|
+
* Whether a tooltip sits in a `TooltipProvider`. gui lets a tooltip's own
|
|
34
|
+
* `delay` override its group's, so a tooltip in a group must leave the delay
|
|
35
|
+
* unsaid for the group's to hold; one standing alone takes the 600ms default.
|
|
36
|
+
*/
|
|
37
|
+
const Grouped = /* @__PURE__ */ createContext(false);
|
|
38
|
+
const Tooltip = ({ offset = DEFAULT_OFFSET, delay, ...props }) => {
|
|
18
39
|
const [placed, setPlaced] = useState({});
|
|
19
40
|
const publish = useCallback((p) => setPlaced((prev) => ({ ...prev, ...p })), []);
|
|
20
|
-
|
|
41
|
+
const grouped = useContext(Grouped);
|
|
42
|
+
return (_jsx(Publish.Provider, { value: publish, children: _jsx(GuiTooltip, { offset: placed.offset ?? offset, delay: delay ?? (grouped ? undefined : DEFAULT_DELAY), ...props }) }));
|
|
21
43
|
};
|
|
22
44
|
const TooltipTrigger = GuiTooltip.Trigger;
|
|
23
|
-
|
|
24
|
-
const
|
|
45
|
+
/** gui's `TooltipGroup`: the tooltips in it share one delay, 600ms unless told otherwise. */
|
|
46
|
+
const TooltipProvider = ({ delay = DEFAULT_DELAY, ...props }) => (_jsx(Grouped.Provider, { value: true, children: _jsx(TooltipGroup, { delay: delay, ...props }) }));
|
|
47
|
+
const TooltipContent = ({ sideOffset, startIcon, description, children, ...props }) => {
|
|
25
48
|
const themeName = useThemeName();
|
|
26
49
|
const publish = useContext(Publish);
|
|
27
50
|
// Only a Content that names an offset has anything to say about it; an absent
|
|
@@ -30,7 +53,7 @@ const TooltipContent = ({ sideOffset, children, ...props }) => {
|
|
|
30
53
|
if (sideOffset !== undefined)
|
|
31
54
|
publish?.({ offset: sideOffset });
|
|
32
55
|
}, [publish, sideOffset]);
|
|
33
|
-
return (_jsx(PortalTheme, { name: themeName, children: _jsx(GuiTooltip.Content, { ...slot('tooltip-content'), bg: "$panel", borderWidth: 1, borderColor: "$borderColor", rounded: "$3", px: "$
|
|
56
|
+
return (_jsx(PortalTheme, { name: themeName, children: _jsx(GuiTooltip.Content, { ...slot('tooltip-content'), componentName: "Hint", bg: "$panel", borderWidth: 1, borderColor: "$borderColor", rounded: "$3", px: "$1.5", py: "$1", maxW: MAX_W, ...props, children: startIcon || description ? (_jsxs(YStack, { gap: "$0.5", children: [_jsxs(XStack, { items: "center", gap: "$1", children: [startIcon ? _jsx(XStack, { shrink: 0, children: startIcon }) : null, ink(children, undefined, { size: '$1', fontWeight: '500' })] }), description ? (typeof description === 'string' ? (_jsx(Text, { ...slot('tooltip-description'), fontSize: "$1", lineHeight: "$1", color: "$aside", style: { whiteSpace: 'pre-line' }, children: description })) : (description)) : null] })) : (ink(children, undefined, { size: '$1' })) }) }));
|
|
34
57
|
};
|
|
35
58
|
export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
|
|
36
59
|
//# sourceMappingURL=tooltip.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../src/backends/gui/tooltip.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ
|
|
1
|
+
{"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../src/backends/gui/tooltip.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
'use client';"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.overflows = void 0;
|
|
5
|
+
exports.TruncatedTextProvider = TruncatedTextProvider;
|
|
6
|
+
exports.TruncatedText = TruncatedText;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
/**
|
|
9
|
+
* TruncatedText — one line with an ellipsis, or N lines clamped, that shows the
|
|
10
|
+
* whole text in a tooltip only when it was actually cut.
|
|
11
|
+
*
|
|
12
|
+
* Every cell, chip label, navigation item and view name in a record surface is
|
|
13
|
+
* one of these, so the tooltip has to cost nothing when it is not needed: it
|
|
14
|
+
* measures (scroll size past client size) when the pointer enters or focus
|
|
15
|
+
* arrives, and the tooltip opens only if that measurement found an overflow. A
|
|
16
|
+
* text that fits never shows one. `TruncatedTextProvider` lets a host change the
|
|
17
|
+
* rule for a subtree — a table turns it `disabled` while it scrolls or edits, so
|
|
18
|
+
* a thousand cells carry no listeners at all.
|
|
19
|
+
*
|
|
20
|
+
* Re-expressed from twenty-ui's OverflowingTextWithTooltip and its mode provider
|
|
21
|
+
* (MIT, see NOTICE): 500ms delay, bottom placement, a 300px cap on the hint,
|
|
22
|
+
* focusable on request, `alwaysShowTooltip` for a hint that is wanted anyway.
|
|
23
|
+
* The tooltip is this package's own `Tooltip`; its look is the Tooltip's.
|
|
24
|
+
*
|
|
25
|
+
* Anchored, not triggered: a tooltip trigger stamps `aria-expanded` on its
|
|
26
|
+
* child, which a run of text may not carry (axe, aria-allowed-attr), and the
|
|
27
|
+
* hint discloses nothing — it repeats the text. So the text is the tooltip's
|
|
28
|
+
* ANCHOR and this component opens it itself, after the delay, on hover or focus.
|
|
29
|
+
*/
|
|
30
|
+
const gui_1 = require("@hanzo/gui");
|
|
31
|
+
const react_1 = require("react");
|
|
32
|
+
const tooltip_1 = require("./tooltip.cjs");
|
|
33
|
+
const slot_1 = require("./slot.cjs");
|
|
34
|
+
const ModeContext = /* @__PURE__ */ (0, react_1.createContext)('measure-on-hover');
|
|
35
|
+
function TruncatedTextProvider({ mode, children }) {
|
|
36
|
+
return (0, jsx_runtime_1.jsx)(ModeContext.Provider, { value: mode, children: children });
|
|
37
|
+
}
|
|
38
|
+
/** Whether a rendered node holds more than it shows. False off the web, where there is no node to ask. */
|
|
39
|
+
const overflows = (node) => {
|
|
40
|
+
const el = node;
|
|
41
|
+
if (!el || typeof el.scrollWidth !== 'number')
|
|
42
|
+
return false;
|
|
43
|
+
return el.scrollWidth > (el.clientWidth ?? 0) || (el.scrollHeight ?? 0) > (el.clientHeight ?? 0);
|
|
44
|
+
};
|
|
45
|
+
exports.overflows = overflows;
|
|
46
|
+
const DELAY = 500;
|
|
47
|
+
const MAX_W = 300;
|
|
48
|
+
function TruncatedText({ text, lineClamp, tooltipContent, tooltipDelay = DELAY, tooltipPlace = 'bottom', isTooltipMultiline = false, alwaysShowTooltip = false, isFocusable = false, ...props }) {
|
|
49
|
+
const mode = (0, react_1.useContext)(ModeContext);
|
|
50
|
+
const [open, setOpen] = (0, react_1.useState)(false);
|
|
51
|
+
const [cut, setCut] = (0, react_1.useState)(false);
|
|
52
|
+
const node = (0, react_1.useRef)(null);
|
|
53
|
+
const timer = (0, react_1.useRef)(null);
|
|
54
|
+
const held = (0, react_1.useRef)(false);
|
|
55
|
+
(0, react_1.useEffect)(() => () => {
|
|
56
|
+
if (timer.current)
|
|
57
|
+
clearTimeout(timer.current);
|
|
58
|
+
}, []);
|
|
59
|
+
const lines = lineClamp && Number.isInteger(lineClamp) && lineClamp > 0 ? lineClamp : 1;
|
|
60
|
+
const host = (extra) => ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { ...(0, slot_1.slot)('truncated-text'), numberOfLines: lines, maxW: "100%", minW: 0, ...(lines > 1 ? { style: { whiteSpace: 'pre-wrap', overflowWrap: 'anywhere' } } : null), ...props, ...extra, children: text }));
|
|
61
|
+
if (mode === 'disabled' && !alwaysShowTooltip)
|
|
62
|
+
return host({});
|
|
63
|
+
const measure = (target) => {
|
|
64
|
+
node.current = target;
|
|
65
|
+
const over = (0, exports.overflows)(target);
|
|
66
|
+
setCut(over);
|
|
67
|
+
return over;
|
|
68
|
+
};
|
|
69
|
+
/** Arm the hint: measured now (hover mode) or when it opens (open mode), shown after the delay. */
|
|
70
|
+
const arm = (target, wait) => {
|
|
71
|
+
if (timer.current)
|
|
72
|
+
clearTimeout(timer.current);
|
|
73
|
+
const now = mode === 'measure-on-hover' ? measure(target) : ((node.current = target), false);
|
|
74
|
+
timer.current = setTimeout(() => {
|
|
75
|
+
const over = mode === 'measure-on-open' ? measure(node.current) : now;
|
|
76
|
+
if (alwaysShowTooltip || over)
|
|
77
|
+
setOpen(true);
|
|
78
|
+
}, wait);
|
|
79
|
+
};
|
|
80
|
+
const disarm = () => {
|
|
81
|
+
if (timer.current)
|
|
82
|
+
clearTimeout(timer.current);
|
|
83
|
+
timer.current = null;
|
|
84
|
+
if (!held.current)
|
|
85
|
+
setOpen(false);
|
|
86
|
+
};
|
|
87
|
+
return ((0, jsx_runtime_1.jsxs)(tooltip_1.Tooltip, { open: open, onOpenChange: (next) => !next && setOpen(false), placement: tooltipPlace, children: [(0, jsx_runtime_1.jsx)(gui_1.Tooltip.Anchor, { asChild: true, children: host({
|
|
88
|
+
onPointerEnter: (e) => arm(e?.currentTarget, tooltipDelay),
|
|
89
|
+
onPointerLeave: disarm,
|
|
90
|
+
// Focus opens at once; the hint stays while the text holds focus.
|
|
91
|
+
onFocus: (e) => {
|
|
92
|
+
held.current = true;
|
|
93
|
+
arm(e?.currentTarget, 0);
|
|
94
|
+
},
|
|
95
|
+
onBlur: () => {
|
|
96
|
+
held.current = false;
|
|
97
|
+
disarm();
|
|
98
|
+
},
|
|
99
|
+
...(isFocusable ? { tabIndex: 0, focusVisibleStyle: { outlineColor: '$outlineColor', outlineWidth: 2, outlineStyle: 'solid' } } : null),
|
|
100
|
+
...(cut ? { cursor: 'pointer' } : null),
|
|
101
|
+
}) }), (0, jsx_runtime_1.jsx)(tooltip_1.TooltipContent, { maxW: MAX_W, children: isTooltipMultiline && typeof (tooltipContent ?? text) === 'string' ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", style: { whiteSpace: 'pre-wrap' }, children: tooltipContent ?? text })) : ((tooltipContent ?? text)) })] }));
|
|
102
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TruncatedText — one line with an ellipsis, or N lines clamped, that shows the
|
|
3
|
+
* whole text in a tooltip only when it was actually cut.
|
|
4
|
+
*
|
|
5
|
+
* Every cell, chip label, navigation item and view name in a record surface is
|
|
6
|
+
* one of these, so the tooltip has to cost nothing when it is not needed: it
|
|
7
|
+
* measures (scroll size past client size) when the pointer enters or focus
|
|
8
|
+
* arrives, and the tooltip opens only if that measurement found an overflow. A
|
|
9
|
+
* text that fits never shows one. `TruncatedTextProvider` lets a host change the
|
|
10
|
+
* rule for a subtree — a table turns it `disabled` while it scrolls or edits, so
|
|
11
|
+
* a thousand cells carry no listeners at all.
|
|
12
|
+
*
|
|
13
|
+
* Re-expressed from twenty-ui's OverflowingTextWithTooltip and its mode provider
|
|
14
|
+
* (MIT, see NOTICE): 500ms delay, bottom placement, a 300px cap on the hint,
|
|
15
|
+
* focusable on request, `alwaysShowTooltip` for a hint that is wanted anyway.
|
|
16
|
+
* The tooltip is this package's own `Tooltip`; its look is the Tooltip's.
|
|
17
|
+
*
|
|
18
|
+
* Anchored, not triggered: a tooltip trigger stamps `aria-expanded` on its
|
|
19
|
+
* child, which a run of text may not carry (axe, aria-allowed-attr), and the
|
|
20
|
+
* hint discloses nothing — it repeats the text. So the text is the tooltip's
|
|
21
|
+
* ANCHOR and this component opens it itself, after the delay, on hover or focus.
|
|
22
|
+
*/
|
|
23
|
+
import { SizableText } from '@hanzo/gui';
|
|
24
|
+
import { type ComponentProps, type ReactNode } from 'react';
|
|
25
|
+
/**
|
|
26
|
+
* `measure-on-hover` (default): the hint is armed by the last hover or focus
|
|
27
|
+
* that measured an overflow. `measure-on-open`: measured when it tries to open.
|
|
28
|
+
* `disabled`: no tooltip and no listeners.
|
|
29
|
+
*/
|
|
30
|
+
export type TruncateMode = 'measure-on-hover' | 'measure-on-open' | 'disabled';
|
|
31
|
+
export declare function TruncatedTextProvider({ mode, children }: {
|
|
32
|
+
mode: TruncateMode;
|
|
33
|
+
children?: ReactNode;
|
|
34
|
+
}): import("react").JSX.Element;
|
|
35
|
+
/** Whether a rendered node holds more than it shows. False off the web, where there is no node to ask. */
|
|
36
|
+
export declare const overflows: (node: unknown) => boolean;
|
|
37
|
+
export type TruncatedTextProps = Omit<ComponentProps<typeof SizableText>, 'children'> & {
|
|
38
|
+
/** What is shown. A node needs `tooltipContent`, since the hint cannot be read off it. */
|
|
39
|
+
text: ReactNode;
|
|
40
|
+
/** Clamp to N lines (wrapping, breaking long words) instead of one line with an ellipsis. */
|
|
41
|
+
lineClamp?: number;
|
|
42
|
+
/** The hint, when it should say more or other than `text`. */
|
|
43
|
+
tooltipContent?: ReactNode;
|
|
44
|
+
/** Milliseconds before the hint opens. */
|
|
45
|
+
tooltipDelay?: number;
|
|
46
|
+
tooltipPlace?: 'top' | 'right' | 'bottom' | 'left';
|
|
47
|
+
/** Keep the hint's line breaks. */
|
|
48
|
+
isTooltipMultiline?: boolean;
|
|
49
|
+
/** Show the hint whether or not the text was cut. */
|
|
50
|
+
alwaysShowTooltip?: boolean;
|
|
51
|
+
/** A tab stop: focus measures and opens the hint, as a hover does. */
|
|
52
|
+
isFocusable?: boolean;
|
|
53
|
+
};
|
|
54
|
+
export declare function TruncatedText({ text, lineClamp, tooltipContent, tooltipDelay, tooltipPlace, isTooltipMultiline, alwaysShowTooltip, isFocusable, ...props }: TruncatedTextProps): import("react").JSX.Element;
|
|
55
|
+
//# sourceMappingURL=truncated-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncated-text.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/truncated-text.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,WAAW,EAAyB,MAAM,YAAY,CAAA;AAC/D,OAAO,EAA0D,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAInH;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,UAAU,CAAA;AAI9E,wBAAgB,qBAAqB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,+BAErG;AAED,0GAA0G;AAC1G,eAAO,MAAM,SAAS,SAAU,OAAO,KAAG,OAIzC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;IACtF,0FAA0F;IAC1F,IAAI,EAAE,SAAS,CAAA;IACf,6FAA6F;IAC7F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,SAAS,CAAA;IAC1B,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;IAClD,mCAAmC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,sEAAsE;IACtE,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAKD,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,SAAS,EACT,cAAc,EACd,YAAoB,EACpB,YAAuB,EACvB,kBAA0B,EAC1B,iBAAyB,EACzB,WAAmB,EACnB,GAAG,KAAK,EACT,EAAE,kBAAkB,+BAgFpB"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* TruncatedText — one line with an ellipsis, or N lines clamped, that shows the
|
|
5
|
+
* whole text in a tooltip only when it was actually cut.
|
|
6
|
+
*
|
|
7
|
+
* Every cell, chip label, navigation item and view name in a record surface is
|
|
8
|
+
* one of these, so the tooltip has to cost nothing when it is not needed: it
|
|
9
|
+
* measures (scroll size past client size) when the pointer enters or focus
|
|
10
|
+
* arrives, and the tooltip opens only if that measurement found an overflow. A
|
|
11
|
+
* text that fits never shows one. `TruncatedTextProvider` lets a host change the
|
|
12
|
+
* rule for a subtree — a table turns it `disabled` while it scrolls or edits, so
|
|
13
|
+
* a thousand cells carry no listeners at all.
|
|
14
|
+
*
|
|
15
|
+
* Re-expressed from twenty-ui's OverflowingTextWithTooltip and its mode provider
|
|
16
|
+
* (MIT, see NOTICE): 500ms delay, bottom placement, a 300px cap on the hint,
|
|
17
|
+
* focusable on request, `alwaysShowTooltip` for a hint that is wanted anyway.
|
|
18
|
+
* The tooltip is this package's own `Tooltip`; its look is the Tooltip's.
|
|
19
|
+
*
|
|
20
|
+
* Anchored, not triggered: a tooltip trigger stamps `aria-expanded` on its
|
|
21
|
+
* child, which a run of text may not carry (axe, aria-allowed-attr), and the
|
|
22
|
+
* hint discloses nothing — it repeats the text. So the text is the tooltip's
|
|
23
|
+
* ANCHOR and this component opens it itself, after the delay, on hover or focus.
|
|
24
|
+
*/
|
|
25
|
+
import { SizableText, Tooltip as GuiTooltip } from '@hanzo/gui';
|
|
26
|
+
import { createContext, useContext, useEffect, useRef, useState } from 'react';
|
|
27
|
+
import { Tooltip, TooltipContent } from './tooltip.js';
|
|
28
|
+
import { slot } from './slot.js';
|
|
29
|
+
const ModeContext = /* @__PURE__ */ createContext('measure-on-hover');
|
|
30
|
+
export function TruncatedTextProvider({ mode, children }) {
|
|
31
|
+
return _jsx(ModeContext.Provider, { value: mode, children: children });
|
|
32
|
+
}
|
|
33
|
+
/** Whether a rendered node holds more than it shows. False off the web, where there is no node to ask. */
|
|
34
|
+
export const overflows = (node) => {
|
|
35
|
+
const el = node;
|
|
36
|
+
if (!el || typeof el.scrollWidth !== 'number')
|
|
37
|
+
return false;
|
|
38
|
+
return el.scrollWidth > (el.clientWidth ?? 0) || (el.scrollHeight ?? 0) > (el.clientHeight ?? 0);
|
|
39
|
+
};
|
|
40
|
+
const DELAY = 500;
|
|
41
|
+
const MAX_W = 300;
|
|
42
|
+
export function TruncatedText({ text, lineClamp, tooltipContent, tooltipDelay = DELAY, tooltipPlace = 'bottom', isTooltipMultiline = false, alwaysShowTooltip = false, isFocusable = false, ...props }) {
|
|
43
|
+
const mode = useContext(ModeContext);
|
|
44
|
+
const [open, setOpen] = useState(false);
|
|
45
|
+
const [cut, setCut] = useState(false);
|
|
46
|
+
const node = useRef(null);
|
|
47
|
+
const timer = useRef(null);
|
|
48
|
+
const held = useRef(false);
|
|
49
|
+
useEffect(() => () => {
|
|
50
|
+
if (timer.current)
|
|
51
|
+
clearTimeout(timer.current);
|
|
52
|
+
}, []);
|
|
53
|
+
const lines = lineClamp && Number.isInteger(lineClamp) && lineClamp > 0 ? lineClamp : 1;
|
|
54
|
+
const host = (extra) => (_jsx(SizableText, { ...slot('truncated-text'), numberOfLines: lines, maxW: "100%", minW: 0, ...(lines > 1 ? { style: { whiteSpace: 'pre-wrap', overflowWrap: 'anywhere' } } : null), ...props, ...extra, children: text }));
|
|
55
|
+
if (mode === 'disabled' && !alwaysShowTooltip)
|
|
56
|
+
return host({});
|
|
57
|
+
const measure = (target) => {
|
|
58
|
+
node.current = target;
|
|
59
|
+
const over = overflows(target);
|
|
60
|
+
setCut(over);
|
|
61
|
+
return over;
|
|
62
|
+
};
|
|
63
|
+
/** Arm the hint: measured now (hover mode) or when it opens (open mode), shown after the delay. */
|
|
64
|
+
const arm = (target, wait) => {
|
|
65
|
+
if (timer.current)
|
|
66
|
+
clearTimeout(timer.current);
|
|
67
|
+
const now = mode === 'measure-on-hover' ? measure(target) : ((node.current = target), false);
|
|
68
|
+
timer.current = setTimeout(() => {
|
|
69
|
+
const over = mode === 'measure-on-open' ? measure(node.current) : now;
|
|
70
|
+
if (alwaysShowTooltip || over)
|
|
71
|
+
setOpen(true);
|
|
72
|
+
}, wait);
|
|
73
|
+
};
|
|
74
|
+
const disarm = () => {
|
|
75
|
+
if (timer.current)
|
|
76
|
+
clearTimeout(timer.current);
|
|
77
|
+
timer.current = null;
|
|
78
|
+
if (!held.current)
|
|
79
|
+
setOpen(false);
|
|
80
|
+
};
|
|
81
|
+
return (_jsxs(Tooltip, { open: open, onOpenChange: (next) => !next && setOpen(false), placement: tooltipPlace, children: [_jsx(GuiTooltip.Anchor, { asChild: true, children: host({
|
|
82
|
+
onPointerEnter: (e) => arm(e?.currentTarget, tooltipDelay),
|
|
83
|
+
onPointerLeave: disarm,
|
|
84
|
+
// Focus opens at once; the hint stays while the text holds focus.
|
|
85
|
+
onFocus: (e) => {
|
|
86
|
+
held.current = true;
|
|
87
|
+
arm(e?.currentTarget, 0);
|
|
88
|
+
},
|
|
89
|
+
onBlur: () => {
|
|
90
|
+
held.current = false;
|
|
91
|
+
disarm();
|
|
92
|
+
},
|
|
93
|
+
...(isFocusable ? { tabIndex: 0, focusVisibleStyle: { outlineColor: '$outlineColor', outlineWidth: 2, outlineStyle: 'solid' } } : null),
|
|
94
|
+
...(cut ? { cursor: 'pointer' } : null),
|
|
95
|
+
}) }), _jsx(TooltipContent, { maxW: MAX_W, children: isTooltipMultiline && typeof (tooltipContent ?? text) === 'string' ? (_jsx(SizableText, { size: "$1", style: { whiteSpace: 'pre-wrap' }, children: tooltipContent ?? text })) : ((tooltipContent ?? text)) })] }));
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=truncated-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncated-text.js","sourceRoot":"","sources":["../../../src/backends/gui/truncated-text.tsx"],"names":[],"mappings":"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"}
|