@hanzo/ui 8.27.91 → 8.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +25 -0
- package/README.md +1 -1
- package/dist/backends/gui/alert-dialog.cjs +24 -6
- package/dist/backends/gui/alert-dialog.d.ts +11 -3
- package/dist/backends/gui/alert-dialog.d.ts.map +1 -1
- package/dist/backends/gui/alert-dialog.js +24 -6
- package/dist/backends/gui/alert-dialog.js.map +1 -1
- package/dist/backends/gui/alert.cjs +32 -1
- package/dist/backends/gui/alert.d.ts +36 -3
- package/dist/backends/gui/alert.d.ts.map +1 -1
- package/dist/backends/gui/alert.js +32 -2
- package/dist/backends/gui/alert.js.map +1 -1
- package/dist/backends/gui/avatar-group.cjs +28 -0
- package/dist/backends/gui/avatar-group.d.ts +33 -0
- package/dist/backends/gui/avatar-group.d.ts.map +1 -0
- package/dist/backends/gui/avatar-group.js +26 -0
- package/dist/backends/gui/avatar-group.js.map +1 -0
- package/dist/backends/gui/avatar.cjs +53 -3
- package/dist/backends/gui/avatar.d.ts +46 -4
- package/dist/backends/gui/avatar.d.ts.map +1 -1
- package/dist/backends/gui/avatar.js +52 -3
- package/dist/backends/gui/avatar.js.map +1 -1
- package/dist/backends/gui/badge.cjs +40 -2
- package/dist/backends/gui/badge.d.ts +7 -2
- package/dist/backends/gui/badge.d.ts.map +1 -1
- package/dist/backends/gui/badge.js +40 -2
- package/dist/backends/gui/badge.js.map +1 -1
- package/dist/backends/gui/banner.cjs +40 -1
- package/dist/backends/gui/banner.d.ts +36 -3
- package/dist/backends/gui/banner.d.ts.map +1 -1
- package/dist/backends/gui/banner.js +42 -4
- package/dist/backends/gui/banner.js.map +1 -1
- package/dist/backends/gui/breadcrumb.cjs +28 -10
- package/dist/backends/gui/breadcrumb.d.ts +20 -11
- package/dist/backends/gui/breadcrumb.d.ts.map +1 -1
- package/dist/backends/gui/breadcrumb.js +28 -10
- package/dist/backends/gui/breadcrumb.js.map +1 -1
- package/dist/backends/gui/button-group.cjs +43 -0
- package/dist/backends/gui/button-group.d.ts +48 -0
- package/dist/backends/gui/button-group.d.ts.map +1 -0
- package/dist/backends/gui/button-group.js +40 -0
- package/dist/backends/gui/button-group.js.map +1 -0
- package/dist/backends/gui/button.cjs +177 -4
- package/dist/backends/gui/button.d.ts +69 -4
- package/dist/backends/gui/button.d.ts.map +1 -1
- package/dist/backends/gui/button.js +179 -6
- package/dist/backends/gui/button.js.map +1 -1
- package/dist/backends/gui/card.cjs +50 -21
- package/dist/backends/gui/card.d.ts +16 -7
- package/dist/backends/gui/card.d.ts.map +1 -1
- package/dist/backends/gui/card.js +50 -21
- package/dist/backends/gui/card.js.map +1 -1
- package/dist/backends/gui/checkbox.cjs +86 -14
- package/dist/backends/gui/checkbox.d.ts +30 -2
- package/dist/backends/gui/checkbox.d.ts.map +1 -1
- package/dist/backends/gui/checkbox.js +87 -15
- package/dist/backends/gui/checkbox.js.map +1 -1
- package/dist/backends/gui/chip.cjs +51 -0
- package/dist/backends/gui/chip.d.ts +47 -0
- package/dist/backends/gui/chip.d.ts.map +1 -0
- package/dist/backends/gui/chip.js +49 -0
- package/dist/backends/gui/chip.js.map +1 -0
- package/dist/backends/gui/choice.cjs +18 -3
- package/dist/backends/gui/choice.d.ts +10 -2
- package/dist/backends/gui/choice.d.ts.map +1 -1
- package/dist/backends/gui/choice.js +19 -4
- package/dist/backends/gui/choice.js.map +1 -1
- package/dist/backends/gui/code-editor.cjs +16 -5
- package/dist/backends/gui/code-editor.d.ts +18 -1
- package/dist/backends/gui/code-editor.d.ts.map +1 -1
- package/dist/backends/gui/code-editor.js +16 -5
- package/dist/backends/gui/code-editor.js.map +1 -1
- package/dist/backends/gui/color-sample.cjs +24 -0
- package/dist/backends/gui/color-sample.d.ts +23 -0
- package/dist/backends/gui/color-sample.d.ts.map +1 -0
- package/dist/backends/gui/color-sample.js +22 -0
- package/dist/backends/gui/color-sample.js.map +1 -0
- package/dist/backends/gui/control.cjs +5 -3
- package/dist/backends/gui/control.d.ts +13 -3
- package/dist/backends/gui/control.d.ts.map +1 -1
- package/dist/backends/gui/control.js +5 -3
- package/dist/backends/gui/control.js.map +1 -1
- package/dist/backends/gui/country-select.cjs +69 -0
- package/dist/backends/gui/country-select.d.ts +30 -0
- package/dist/backends/gui/country-select.d.ts.map +1 -0
- package/dist/backends/gui/country-select.js +67 -0
- package/dist/backends/gui/country-select.js.map +1 -0
- package/dist/backends/gui/currency-picker.cjs +48 -0
- package/dist/backends/gui/currency-picker.d.ts +37 -0
- package/dist/backends/gui/currency-picker.d.ts.map +1 -0
- package/dist/backends/gui/currency-picker.js +46 -0
- package/dist/backends/gui/currency-picker.js.map +1 -0
- package/dist/backends/gui/density.cjs +32 -0
- package/dist/backends/gui/density.d.ts +27 -0
- package/dist/backends/gui/density.d.ts.map +1 -0
- package/dist/backends/gui/density.js +27 -0
- package/dist/backends/gui/density.js.map +1 -0
- package/dist/backends/gui/dialog.cjs +65 -7
- package/dist/backends/gui/dialog.d.ts +68 -3
- package/dist/backends/gui/dialog.d.ts.map +1 -1
- package/dist/backends/gui/dialog.js +63 -7
- package/dist/backends/gui/dialog.js.map +1 -1
- package/dist/backends/gui/dropdown-menu.cjs +361 -31
- package/dist/backends/gui/dropdown-menu.d.ts +151 -15
- package/dist/backends/gui/dropdown-menu.d.ts.map +1 -1
- package/dist/backends/gui/dropdown-menu.js +353 -34
- package/dist/backends/gui/dropdown-menu.js.map +1 -1
- package/dist/backends/gui/feedback.cjs +78 -0
- package/dist/backends/gui/feedback.d.ts +46 -0
- package/dist/backends/gui/feedback.d.ts.map +1 -0
- package/dist/backends/gui/feedback.js +74 -0
- package/dist/backends/gui/feedback.js.map +1 -0
- package/dist/backends/gui/field.cjs +71 -14
- package/dist/backends/gui/field.d.ts +43 -3
- package/dist/backends/gui/field.d.ts.map +1 -1
- package/dist/backends/gui/field.js +69 -14
- package/dist/backends/gui/field.js.map +1 -1
- package/dist/backends/gui/flag.cjs +17 -0
- package/dist/backends/gui/flag.d.ts +9 -0
- package/dist/backends/gui/flag.d.ts.map +1 -0
- package/dist/backends/gui/flag.js +14 -0
- package/dist/backends/gui/flag.js.map +1 -0
- package/dist/backends/gui/grip.cjs +35 -3
- package/dist/backends/gui/grip.d.ts +16 -1
- package/dist/backends/gui/grip.d.ts.map +1 -1
- package/dist/backends/gui/grip.js +35 -3
- package/dist/backends/gui/grip.js.map +1 -1
- package/dist/backends/gui/heading.cjs +27 -0
- package/dist/backends/gui/heading.d.ts +8 -0
- package/dist/backends/gui/heading.d.ts.map +1 -0
- package/dist/backends/gui/heading.js +25 -0
- package/dist/backends/gui/heading.js.map +1 -0
- package/dist/backends/gui/hue.cjs +49 -0
- package/dist/backends/gui/hue.d.ts +18 -0
- package/dist/backends/gui/hue.d.ts.map +1 -0
- package/dist/backends/gui/hue.js +43 -0
- package/dist/backends/gui/hue.js.map +1 -0
- package/dist/backends/gui/icon-tile.cjs +36 -0
- package/dist/backends/gui/icon-tile.d.ts +26 -0
- package/dist/backends/gui/icon-tile.d.ts.map +1 -0
- package/dist/backends/gui/icon-tile.js +32 -0
- package/dist/backends/gui/icon-tile.js.map +1 -0
- package/dist/backends/gui/image-input.cjs +78 -0
- package/dist/backends/gui/image-input.d.ts +32 -0
- package/dist/backends/gui/image-input.d.ts.map +1 -0
- package/dist/backends/gui/image-input.js +74 -0
- package/dist/backends/gui/image-input.js.map +1 -0
- package/dist/backends/gui/index.cjs +93 -7
- package/dist/backends/gui/index.d.ts +45 -2
- package/dist/backends/gui/index.d.ts.map +1 -1
- package/dist/backends/gui/index.js +35 -1
- package/dist/backends/gui/index.js.map +1 -1
- package/dist/backends/gui/input-group.cjs +49 -0
- package/dist/backends/gui/input-group.d.ts +46 -0
- package/dist/backends/gui/input-group.d.ts.map +1 -0
- package/dist/backends/gui/input-group.js +46 -0
- package/dist/backends/gui/input-group.js.map +1 -0
- package/dist/backends/gui/input.cjs +32 -4
- package/dist/backends/gui/input.d.ts +5 -1
- package/dist/backends/gui/input.d.ts.map +1 -1
- package/dist/backends/gui/input.js +33 -5
- package/dist/backends/gui/input.js.map +1 -1
- package/dist/backends/gui/item.cjs +34 -2
- package/dist/backends/gui/item.d.ts +21 -5
- package/dist/backends/gui/item.d.ts.map +1 -1
- package/dist/backends/gui/item.js +35 -3
- package/dist/backends/gui/item.js.map +1 -1
- package/dist/backends/gui/json-tree.cjs +103 -15
- package/dist/backends/gui/json-tree.d.ts +39 -3
- package/dist/backends/gui/json-tree.d.ts.map +1 -1
- package/dist/backends/gui/json-tree.js +104 -16
- package/dist/backends/gui/json-tree.js.map +1 -1
- package/dist/backends/gui/kbd.cjs +18 -2
- package/dist/backends/gui/kbd.d.ts +5 -2
- package/dist/backends/gui/kbd.d.ts.map +1 -1
- package/dist/backends/gui/kbd.js +18 -2
- package/dist/backends/gui/kbd.js.map +1 -1
- package/dist/backends/gui/label.cjs +14 -3
- package/dist/backends/gui/label.d.ts +12 -3
- package/dist/backends/gui/label.d.ts.map +1 -1
- package/dist/backends/gui/label.js +14 -3
- package/dist/backends/gui/label.js.map +1 -1
- package/dist/backends/gui/layout.cjs +5 -1
- package/dist/backends/gui/layout.d.ts +1 -1
- package/dist/backends/gui/layout.d.ts.map +1 -1
- package/dist/backends/gui/layout.js +5 -1
- package/dist/backends/gui/layout.js.map +1 -1
- package/dist/backends/gui/number-field.cjs +163 -0
- package/dist/backends/gui/number-field.d.ts +34 -0
- package/dist/backends/gui/number-field.d.ts.map +1 -0
- package/dist/backends/gui/number-field.js +160 -0
- package/dist/backends/gui/number-field.js.map +1 -0
- package/dist/backends/gui/overflowing-list.cjs +79 -0
- package/dist/backends/gui/overflowing-list.d.ts +42 -0
- package/dist/backends/gui/overflowing-list.d.ts.map +1 -0
- package/dist/backends/gui/overflowing-list.js +76 -0
- package/dist/backends/gui/overflowing-list.js.map +1 -0
- package/dist/backends/gui/phone-country-picker.cjs +60 -0
- package/dist/backends/gui/phone-country-picker.d.ts +34 -0
- package/dist/backends/gui/phone-country-picker.d.ts.map +1 -0
- package/dist/backends/gui/phone-country-picker.js +57 -0
- package/dist/backends/gui/phone-country-picker.js.map +1 -0
- package/dist/backends/gui/popover.cjs +20 -4
- package/dist/backends/gui/popover.d.ts +12 -1
- package/dist/backends/gui/popover.d.ts.map +1 -1
- package/dist/backends/gui/popover.js +21 -5
- package/dist/backends/gui/popover.js.map +1 -1
- package/dist/backends/gui/progress-ring.cjs +38 -0
- package/dist/backends/gui/progress-ring.d.ts +37 -0
- package/dist/backends/gui/progress-ring.d.ts.map +1 -0
- package/dist/backends/gui/progress-ring.js +36 -0
- package/dist/backends/gui/progress-ring.js.map +1 -0
- package/dist/backends/gui/progress.cjs +31 -7
- package/dist/backends/gui/progress.d.ts +25 -3
- package/dist/backends/gui/progress.d.ts.map +1 -1
- package/dist/backends/gui/progress.js +32 -8
- package/dist/backends/gui/progress.js.map +1 -1
- package/dist/backends/gui/radio-group.cjs +28 -2
- package/dist/backends/gui/radio-group.d.ts +20 -2
- package/dist/backends/gui/radio-group.d.ts.map +1 -1
- package/dist/backends/gui/radio-group.js +28 -2
- package/dist/backends/gui/radio-group.js.map +1 -1
- package/dist/backends/gui/search-list.cjs +62 -0
- package/dist/backends/gui/search-list.d.ts +65 -0
- package/dist/backends/gui/search-list.d.ts.map +1 -0
- package/dist/backends/gui/search-list.js +58 -0
- package/dist/backends/gui/search-list.js.map +1 -0
- package/dist/backends/gui/select.cjs +50 -16
- package/dist/backends/gui/select.d.ts +12 -3
- package/dist/backends/gui/select.d.ts.map +1 -1
- package/dist/backends/gui/select.js +51 -17
- package/dist/backends/gui/select.js.map +1 -1
- package/dist/backends/gui/shortcut.cjs +122 -0
- package/dist/backends/gui/shortcut.d.ts +58 -0
- package/dist/backends/gui/shortcut.d.ts.map +1 -0
- package/dist/backends/gui/shortcut.js +115 -0
- package/dist/backends/gui/shortcut.js.map +1 -0
- package/dist/backends/gui/skeleton.cjs +41 -10
- package/dist/backends/gui/skeleton.d.ts +46 -8
- package/dist/backends/gui/skeleton.d.ts.map +1 -1
- package/dist/backends/gui/skeleton.js +39 -8
- package/dist/backends/gui/skeleton.js.map +1 -1
- package/dist/backends/gui/snippet.cjs +12 -1
- package/dist/backends/gui/snippet.d.ts +4 -2
- package/dist/backends/gui/snippet.d.ts.map +1 -1
- package/dist/backends/gui/snippet.js +12 -1
- package/dist/backends/gui/snippet.js.map +1 -1
- package/dist/backends/gui/spinner.cjs +8 -1
- package/dist/backends/gui/spinner.d.ts +11 -2
- package/dist/backends/gui/spinner.d.ts.map +1 -1
- package/dist/backends/gui/spinner.js +9 -2
- package/dist/backends/gui/spinner.js.map +1 -1
- package/dist/backends/gui/stack-icon.cjs +17 -0
- package/dist/backends/gui/stack-icon.d.ts +15 -0
- package/dist/backends/gui/stack-icon.d.ts.map +1 -0
- package/dist/backends/gui/stack-icon.js +15 -0
- package/dist/backends/gui/stack-icon.js.map +1 -0
- package/dist/backends/gui/status.cjs +38 -1
- package/dist/backends/gui/status.d.ts +16 -2
- package/dist/backends/gui/status.d.ts.map +1 -1
- package/dist/backends/gui/status.js +38 -2
- package/dist/backends/gui/status.js.map +1 -1
- package/dist/backends/gui/stepper.cjs +73 -3
- package/dist/backends/gui/stepper.d.ts +25 -1
- package/dist/backends/gui/stepper.d.ts.map +1 -1
- package/dist/backends/gui/stepper.js +71 -5
- package/dist/backends/gui/stepper.js.map +1 -1
- package/dist/backends/gui/switch.cjs +35 -20
- package/dist/backends/gui/switch.d.ts +12 -2
- package/dist/backends/gui/switch.d.ts.map +1 -1
- package/dist/backends/gui/switch.js +35 -20
- package/dist/backends/gui/switch.js.map +1 -1
- package/dist/backends/gui/tabs.cjs +63 -17
- package/dist/backends/gui/tabs.d.ts +35 -6
- package/dist/backends/gui/tabs.d.ts.map +1 -1
- package/dist/backends/gui/tabs.js +65 -19
- package/dist/backends/gui/tabs.js.map +1 -1
- package/dist/backends/gui/tag.cjs +48 -0
- package/dist/backends/gui/tag.d.ts +53 -0
- package/dist/backends/gui/tag.d.ts.map +1 -0
- package/dist/backends/gui/tag.js +46 -0
- package/dist/backends/gui/tag.js.map +1 -0
- package/dist/backends/gui/tags.cjs +9 -2
- package/dist/backends/gui/tags.d.ts +6 -5
- package/dist/backends/gui/tags.d.ts.map +1 -1
- package/dist/backends/gui/tags.js +9 -2
- package/dist/backends/gui/tags.js.map +1 -1
- package/dist/backends/gui/textarea.cjs +22 -6
- package/dist/backends/gui/textarea.d.ts +10 -1
- package/dist/backends/gui/textarea.d.ts.map +1 -1
- package/dist/backends/gui/textarea.js +22 -6
- package/dist/backends/gui/textarea.js.map +1 -1
- package/dist/backends/gui/toaster.cjs +167 -3
- package/dist/backends/gui/toaster.d.ts +28 -2
- package/dist/backends/gui/toaster.d.ts.map +1 -1
- package/dist/backends/gui/toaster.js +167 -5
- package/dist/backends/gui/toaster.js.map +1 -1
- package/dist/backends/gui/toggle-group.cjs +13 -0
- package/dist/backends/gui/toggle-group.d.ts +7 -1
- package/dist/backends/gui/toggle-group.d.ts.map +1 -1
- package/dist/backends/gui/toggle-group.js +13 -0
- package/dist/backends/gui/toggle-group.js.map +1 -1
- package/dist/backends/gui/tooltip.cjs +29 -6
- package/dist/backends/gui/tooltip.d.ts +23 -4
- package/dist/backends/gui/tooltip.d.ts.map +1 -1
- package/dist/backends/gui/tooltip.js +31 -8
- package/dist/backends/gui/tooltip.js.map +1 -1
- package/dist/backends/gui/truncated-text.cjs +102 -0
- package/dist/backends/gui/truncated-text.d.ts +55 -0
- package/dist/backends/gui/truncated-text.d.ts.map +1 -0
- package/dist/backends/gui/truncated-text.js +97 -0
- package/dist/backends/gui/truncated-text.js.map +1 -0
- package/dist/gallery/compound.cjs +60 -0
- package/dist/gallery/compound.d.ts +2 -0
- package/dist/gallery/compound.d.ts.map +1 -0
- package/dist/gallery/compound.js +58 -0
- package/dist/gallery/compound.js.map +1 -0
- package/dist/gallery/display.cjs +47 -0
- package/dist/gallery/display.d.ts +3 -0
- package/dist/gallery/display.d.ts.map +1 -0
- package/dist/gallery/display.js +45 -0
- package/dist/gallery/display.js.map +1 -0
- package/dist/gallery/feedback.cjs +38 -0
- package/dist/gallery/feedback.d.ts +2 -0
- package/dist/gallery/feedback.d.ts.map +1 -0
- package/dist/gallery/feedback.js +36 -0
- package/dist/gallery/feedback.js.map +1 -0
- package/dist/gallery/fields.cjs +53 -0
- package/dist/gallery/fields.d.ts +2 -0
- package/dist/gallery/fields.d.ts.map +1 -0
- package/dist/gallery/fields.js +51 -0
- package/dist/gallery/fields.js.map +1 -0
- package/dist/gallery/frames.cjs +47 -0
- package/dist/gallery/frames.d.ts +2 -0
- package/dist/gallery/frames.d.ts.map +1 -0
- package/dist/gallery/frames.js +45 -0
- package/dist/gallery/frames.js.map +1 -0
- package/dist/gallery/menus.cjs +64 -0
- package/dist/gallery/menus.d.ts +15 -0
- package/dist/gallery/menus.d.ts.map +1 -0
- package/dist/gallery/menus.js +58 -0
- package/dist/gallery/menus.js.map +1 -0
- package/dist/gallery/records.cjs +33 -0
- package/dist/gallery/records.d.ts +2 -0
- package/dist/gallery/records.d.ts.map +1 -0
- package/dist/gallery/records.js +31 -0
- package/dist/gallery/records.js.map +1 -0
- package/dist/gallery/section.cjs +17 -0
- package/dist/gallery/section.d.ts +10 -0
- package/dist/gallery/section.d.ts.map +1 -0
- package/dist/gallery/section.js +14 -0
- package/dist/gallery/section.js.map +1 -0
- package/dist/gallery.cjs +8 -14
- package/dist/gallery.d.ts.map +1 -1
- package/dist/gallery.html +1594 -256
- package/dist/gallery.js +3 -9
- package/dist/gallery.js.map +1 -1
- package/dist/gui-config.cjs +33 -4
- package/dist/gui-config.d.ts +11 -3
- package/dist/gui-config.d.ts.map +1 -1
- package/dist/gui-config.js +33 -4
- package/dist/gui-config.js.map +1 -1
- package/dist/index.cjs +61 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/index.node.cjs +61 -2
- package/dist/index.node.js +7 -1
- package/dist/motion.cjs +25 -1
- package/dist/motion.d.ts +16 -1
- package/dist/motion.d.ts.map +1 -1
- package/dist/motion.js +24 -1
- package/dist/motion.js.map +1 -1
- package/dist/primitives/AvatarGroup.cjs +8 -0
- package/dist/primitives/AvatarGroup.d.ts +2 -0
- package/dist/primitives/AvatarGroup.d.ts.map +1 -0
- package/dist/primitives/AvatarGroup.js +5 -0
- package/dist/primitives/AvatarGroup.js.map +1 -0
- package/dist/primitives/BannerAction.cjs +8 -0
- package/dist/primitives/BannerAction.d.ts +2 -0
- package/dist/primitives/BannerAction.d.ts.map +1 -0
- package/dist/primitives/BannerAction.js +5 -0
- package/dist/primitives/BannerAction.js.map +1 -0
- package/dist/primitives/ButtonGroup.cjs +8 -0
- package/dist/primitives/ButtonGroup.d.ts +2 -0
- package/dist/primitives/ButtonGroup.d.ts.map +1 -0
- package/dist/primitives/ButtonGroup.js +5 -0
- package/dist/primitives/ButtonGroup.js.map +1 -0
- package/dist/primitives/ButtonGroupContext.cjs +8 -0
- package/dist/primitives/ButtonGroupContext.d.ts +2 -0
- package/dist/primitives/ButtonGroupContext.d.ts.map +1 -0
- package/dist/primitives/ButtonGroupContext.js +5 -0
- package/dist/primitives/ButtonGroupContext.js.map +1 -0
- package/dist/primitives/CalloutAction.cjs +8 -0
- package/dist/primitives/CalloutAction.d.ts +2 -0
- package/dist/primitives/CalloutAction.d.ts.map +1 -0
- package/dist/primitives/CalloutAction.js +5 -0
- package/dist/primitives/CalloutAction.js.map +1 -0
- package/dist/primitives/Chip.cjs +8 -0
- package/dist/primitives/Chip.d.ts +2 -0
- package/dist/primitives/Chip.d.ts.map +1 -0
- package/dist/primitives/Chip.js +5 -0
- package/dist/primitives/Chip.js.map +1 -0
- package/dist/primitives/ColorSample.cjs +8 -0
- package/dist/primitives/ColorSample.d.ts +2 -0
- package/dist/primitives/ColorSample.d.ts.map +1 -0
- package/dist/primitives/ColorSample.js +5 -0
- package/dist/primitives/ColorSample.js.map +1 -0
- package/dist/primitives/CountrySelect.cjs +8 -0
- package/dist/primitives/CountrySelect.d.ts +2 -0
- package/dist/primitives/CountrySelect.d.ts.map +1 -0
- package/dist/primitives/CountrySelect.js +5 -0
- package/dist/primitives/CountrySelect.js.map +1 -0
- package/dist/primitives/CurrencyPicker.cjs +8 -0
- package/dist/primitives/CurrencyPicker.d.ts +2 -0
- package/dist/primitives/CurrencyPicker.d.ts.map +1 -0
- package/dist/primitives/CurrencyPicker.js +5 -0
- package/dist/primitives/CurrencyPicker.js.map +1 -0
- package/dist/primitives/Density.cjs +8 -0
- package/dist/primitives/Density.d.ts +2 -0
- package/dist/primitives/Density.d.ts.map +1 -0
- package/dist/primitives/Density.js +5 -0
- package/dist/primitives/Density.js.map +1 -0
- package/dist/primitives/DialogBody.cjs +8 -0
- package/dist/primitives/DialogBody.d.ts +2 -0
- package/dist/primitives/DialogBody.d.ts.map +1 -0
- package/dist/primitives/DialogBody.js +5 -0
- package/dist/primitives/DialogBody.js.map +1 -0
- package/dist/primitives/DropdownMenuBack.cjs +8 -0
- package/dist/primitives/DropdownMenuBack.d.ts +2 -0
- package/dist/primitives/DropdownMenuBack.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuBack.js +5 -0
- package/dist/primitives/DropdownMenuBack.js.map +1 -0
- package/dist/primitives/DropdownMenuClose.cjs +8 -0
- package/dist/primitives/DropdownMenuClose.d.ts +2 -0
- package/dist/primitives/DropdownMenuClose.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuClose.js +5 -0
- package/dist/primitives/DropdownMenuClose.js.map +1 -0
- package/dist/primitives/DropdownMenuEmpty.cjs +8 -0
- package/dist/primitives/DropdownMenuEmpty.d.ts +2 -0
- package/dist/primitives/DropdownMenuEmpty.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuEmpty.js +5 -0
- package/dist/primitives/DropdownMenuEmpty.js.map +1 -0
- package/dist/primitives/DropdownMenuHeader.cjs +8 -0
- package/dist/primitives/DropdownMenuHeader.d.ts +2 -0
- package/dist/primitives/DropdownMenuHeader.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuHeader.js +5 -0
- package/dist/primitives/DropdownMenuHeader.js.map +1 -0
- package/dist/primitives/DropdownMenuLoading.cjs +8 -0
- package/dist/primitives/DropdownMenuLoading.d.ts +2 -0
- package/dist/primitives/DropdownMenuLoading.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuLoading.js +5 -0
- package/dist/primitives/DropdownMenuLoading.js.map +1 -0
- package/dist/primitives/DropdownMenuOptionItem.cjs +8 -0
- package/dist/primitives/DropdownMenuOptionItem.d.ts +2 -0
- package/dist/primitives/DropdownMenuOptionItem.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuOptionItem.js +5 -0
- package/dist/primitives/DropdownMenuOptionItem.js.map +1 -0
- package/dist/primitives/DropdownMenuPage.cjs +8 -0
- package/dist/primitives/DropdownMenuPage.d.ts +2 -0
- package/dist/primitives/DropdownMenuPage.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuPage.js +5 -0
- package/dist/primitives/DropdownMenuPage.js.map +1 -0
- package/dist/primitives/DropdownMenuSearch.cjs +8 -0
- package/dist/primitives/DropdownMenuSearch.d.ts +2 -0
- package/dist/primitives/DropdownMenuSearch.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuSearch.js +5 -0
- package/dist/primitives/DropdownMenuSearch.js.map +1 -0
- package/dist/primitives/DropdownMenuSection.cjs +8 -0
- package/dist/primitives/DropdownMenuSection.d.ts +2 -0
- package/dist/primitives/DropdownMenuSection.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuSection.js +5 -0
- package/dist/primitives/DropdownMenuSection.js.map +1 -0
- package/dist/primitives/DropdownMenuSelectionGroup.cjs +8 -0
- package/dist/primitives/DropdownMenuSelectionGroup.d.ts +2 -0
- package/dist/primitives/DropdownMenuSelectionGroup.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuSelectionGroup.js +5 -0
- package/dist/primitives/DropdownMenuSelectionGroup.js.map +1 -0
- package/dist/primitives/DropdownMenuTitle.cjs +8 -0
- package/dist/primitives/DropdownMenuTitle.d.ts +2 -0
- package/dist/primitives/DropdownMenuTitle.d.ts.map +1 -0
- package/dist/primitives/DropdownMenuTitle.js +5 -0
- package/dist/primitives/DropdownMenuTitle.js.map +1 -0
- package/dist/primitives/Heading.cjs +2 -2
- package/dist/primitives/Heading.d.ts +1 -1
- package/dist/primitives/Heading.d.ts.map +1 -1
- package/dist/primitives/Heading.js +1 -1
- package/dist/primitives/Heading.js.map +1 -1
- package/dist/primitives/IconTile.cjs +8 -0
- package/dist/primitives/IconTile.d.ts +2 -0
- package/dist/primitives/IconTile.d.ts.map +1 -0
- package/dist/primitives/IconTile.js +5 -0
- package/dist/primitives/IconTile.js.map +1 -0
- package/dist/primitives/ImageInput.cjs +8 -0
- package/dist/primitives/ImageInput.d.ts +2 -0
- package/dist/primitives/ImageInput.d.ts.map +1 -0
- package/dist/primitives/ImageInput.js +5 -0
- package/dist/primitives/ImageInput.js.map +1 -0
- package/dist/primitives/InputGroup.cjs +8 -0
- package/dist/primitives/InputGroup.d.ts +2 -0
- package/dist/primitives/InputGroup.d.ts.map +1 -0
- package/dist/primitives/InputGroup.js +5 -0
- package/dist/primitives/InputGroup.js.map +1 -0
- package/dist/primitives/NumberField.cjs +8 -0
- package/dist/primitives/NumberField.d.ts +2 -0
- package/dist/primitives/NumberField.d.ts.map +1 -0
- package/dist/primitives/NumberField.js +5 -0
- package/dist/primitives/NumberField.js.map +1 -0
- package/dist/primitives/OverflowingList.cjs +8 -0
- package/dist/primitives/OverflowingList.d.ts +2 -0
- package/dist/primitives/OverflowingList.d.ts.map +1 -0
- package/dist/primitives/OverflowingList.js +5 -0
- package/dist/primitives/OverflowingList.js.map +1 -0
- package/dist/primitives/PhoneCountryPicker.cjs +8 -0
- package/dist/primitives/PhoneCountryPicker.d.ts +2 -0
- package/dist/primitives/PhoneCountryPicker.d.ts.map +1 -0
- package/dist/primitives/PhoneCountryPicker.js +5 -0
- package/dist/primitives/PhoneCountryPicker.js.map +1 -0
- package/dist/primitives/ProgressRing.cjs +8 -0
- package/dist/primitives/ProgressRing.d.ts +2 -0
- package/dist/primitives/ProgressRing.d.ts.map +1 -0
- package/dist/primitives/ProgressRing.js +5 -0
- package/dist/primitives/ProgressRing.js.map +1 -0
- package/dist/primitives/RadioCircle.cjs +8 -0
- package/dist/primitives/RadioCircle.d.ts +2 -0
- package/dist/primitives/RadioCircle.d.ts.map +1 -0
- package/dist/primitives/RadioCircle.js +5 -0
- package/dist/primitives/RadioCircle.js.map +1 -0
- package/dist/primitives/SKELETON_HEIGHT.cjs +8 -0
- package/dist/primitives/SKELETON_HEIGHT.d.ts +2 -0
- package/dist/primitives/SKELETON_HEIGHT.d.ts.map +1 -0
- package/dist/primitives/SKELETON_HEIGHT.js +5 -0
- package/dist/primitives/SKELETON_HEIGHT.js.map +1 -0
- package/dist/primitives/STATUS_COLOR.cjs +8 -0
- package/dist/primitives/STATUS_COLOR.d.ts +2 -0
- package/dist/primitives/STATUS_COLOR.d.ts.map +1 -0
- package/dist/primitives/STATUS_COLOR.js +5 -0
- package/dist/primitives/STATUS_COLOR.js.map +1 -0
- package/dist/primitives/STATUS_HUE.cjs +8 -0
- package/dist/primitives/STATUS_HUE.d.ts +2 -0
- package/dist/primitives/STATUS_HUE.d.ts.map +1 -0
- package/dist/primitives/STATUS_HUE.js +5 -0
- package/dist/primitives/STATUS_HUE.js.map +1 -0
- package/dist/primitives/STATUS_PAINT.cjs +8 -0
- package/dist/primitives/STATUS_PAINT.d.ts +2 -0
- package/dist/primitives/STATUS_PAINT.d.ts.map +1 -0
- package/dist/primitives/STATUS_PAINT.js +5 -0
- package/dist/primitives/STATUS_PAINT.js.map +1 -0
- package/dist/primitives/Shortcut.cjs +8 -0
- package/dist/primitives/Shortcut.d.ts +2 -0
- package/dist/primitives/Shortcut.d.ts.map +1 -0
- package/dist/primitives/Shortcut.js +5 -0
- package/dist/primitives/Shortcut.js.map +1 -0
- package/dist/primitives/StackIcon.cjs +8 -0
- package/dist/primitives/StackIcon.d.ts +2 -0
- package/dist/primitives/StackIcon.d.ts.map +1 -0
- package/dist/primitives/StackIcon.js +5 -0
- package/dist/primitives/StackIcon.js.map +1 -0
- package/dist/primitives/TOAST_DURATION.cjs +8 -0
- package/dist/primitives/TOAST_DURATION.d.ts +2 -0
- package/dist/primitives/TOAST_DURATION.d.ts.map +1 -0
- package/dist/primitives/TOAST_DURATION.js +5 -0
- package/dist/primitives/TOAST_DURATION.js.map +1 -0
- package/dist/primitives/Tag.cjs +8 -0
- package/dist/primitives/Tag.d.ts +2 -0
- package/dist/primitives/Tag.d.ts.map +1 -0
- package/dist/primitives/Tag.js +5 -0
- package/dist/primitives/Tag.js.map +1 -0
- package/dist/primitives/ToastCard.cjs +8 -0
- package/dist/primitives/ToastCard.d.ts +2 -0
- package/dist/primitives/ToastCard.d.ts.map +1 -0
- package/dist/primitives/ToastCard.js +5 -0
- package/dist/primitives/ToastCard.js.map +1 -0
- package/dist/primitives/ToastFace.cjs +8 -0
- package/dist/primitives/ToastFace.d.ts +2 -0
- package/dist/primitives/ToastFace.d.ts.map +1 -0
- package/dist/primitives/ToastFace.js +5 -0
- package/dist/primitives/ToastFace.js.map +1 -0
- package/dist/primitives/TruncatedText.cjs +8 -0
- package/dist/primitives/TruncatedText.d.ts +2 -0
- package/dist/primitives/TruncatedText.d.ts.map +1 -0
- package/dist/primitives/TruncatedText.js +5 -0
- package/dist/primitives/TruncatedText.js.map +1 -0
- package/dist/primitives/TruncatedTextProvider.cjs +8 -0
- package/dist/primitives/TruncatedTextProvider.d.ts +2 -0
- package/dist/primitives/TruncatedTextProvider.d.ts.map +1 -0
- package/dist/primitives/TruncatedTextProvider.js +5 -0
- package/dist/primitives/TruncatedTextProvider.js.map +1 -0
- package/dist/primitives/VisuallyHidden.cjs +8 -0
- package/dist/primitives/VisuallyHidden.d.ts +2 -0
- package/dist/primitives/VisuallyHidden.d.ts.map +1 -0
- package/dist/primitives/VisuallyHidden.js +5 -0
- package/dist/primitives/VisuallyHidden.js.map +1 -0
- package/dist/primitives/fieldSize.cjs +8 -0
- package/dist/primitives/fieldSize.d.ts +2 -0
- package/dist/primitives/fieldSize.d.ts.map +1 -0
- package/dist/primitives/fieldSize.js +5 -0
- package/dist/primitives/fieldSize.js.map +1 -0
- package/dist/primitives/flag.cjs +8 -0
- package/dist/primitives/flag.d.ts +2 -0
- package/dist/primitives/flag.d.ts.map +1 -0
- package/dist/primitives/flag.js +5 -0
- package/dist/primitives/flag.js.map +1 -0
- package/dist/primitives/formatShortcut.cjs +8 -0
- package/dist/primitives/formatShortcut.d.ts +2 -0
- package/dist/primitives/formatShortcut.d.ts.map +1 -0
- package/dist/primitives/formatShortcut.js +5 -0
- package/dist/primitives/formatShortcut.js.map +1 -0
- package/dist/primitives/initialOf.cjs +8 -0
- package/dist/primitives/initialOf.d.ts +2 -0
- package/dist/primitives/initialOf.d.ts.map +1 -0
- package/dist/primitives/initialOf.js +5 -0
- package/dist/primitives/initialOf.js.map +1 -0
- package/dist/primitives/parseNumber.cjs +8 -0
- package/dist/primitives/parseNumber.d.ts +2 -0
- package/dist/primitives/parseNumber.d.ts.map +1 -0
- package/dist/primitives/parseNumber.js +5 -0
- package/dist/primitives/parseNumber.js.map +1 -0
- package/dist/primitives/speakShortcut.cjs +8 -0
- package/dist/primitives/speakShortcut.d.ts +2 -0
- package/dist/primitives/speakShortcut.d.ts.map +1 -0
- package/dist/primitives/speakShortcut.js +5 -0
- package/dist/primitives/speakShortcut.js.map +1 -0
- package/dist/primitives/tileTones.cjs +8 -0
- package/dist/primitives/tileTones.d.ts +2 -0
- package/dist/primitives/tileTones.d.ts.map +1 -0
- package/dist/primitives/tileTones.js +5 -0
- package/dist/primitives/tileTones.js.map +1 -0
- package/dist/primitives/useDensity.cjs +8 -0
- package/dist/primitives/useDensity.d.ts +2 -0
- package/dist/primitives/useDensity.d.ts.map +1 -0
- package/dist/primitives/useDensity.js +5 -0
- package/dist/primitives/useDensity.js.map +1 -0
- package/dist/primitives/useField.cjs +8 -0
- package/dist/primitives/useField.d.ts +2 -0
- package/dist/primitives/useField.d.ts.map +1 -0
- package/dist/primitives/useField.js +5 -0
- package/dist/primitives/useField.js.map +1 -0
- package/dist/product/ComboBox.cjs +25 -7
- package/dist/product/ComboBox.d.ts +3 -1
- package/dist/product/ComboBox.d.ts.map +1 -1
- package/dist/product/ComboBox.js +25 -7
- package/dist/product/ComboBox.js.map +1 -1
- package/dist/product/CommandMenu.cjs +137 -0
- package/dist/product/CommandMenu.d.ts +77 -0
- package/dist/product/CommandMenu.d.ts.map +1 -0
- package/dist/product/CommandMenu.js +134 -0
- package/dist/product/CommandMenu.js.map +1 -0
- package/dist/product/DetailPane.cjs +154 -12
- package/dist/product/DetailPane.d.ts +80 -2
- package/dist/product/DetailPane.d.ts.map +1 -1
- package/dist/product/DetailPane.js +153 -16
- package/dist/product/DetailPane.js.map +1 -1
- package/dist/product/Fact.cjs +6 -1
- package/dist/product/Fact.d.ts +16 -1
- package/dist/product/Fact.d.ts.map +1 -1
- package/dist/product/Fact.js +6 -1
- package/dist/product/Fact.js.map +1 -1
- package/dist/product/Field.cjs +14 -2
- package/dist/product/Field.d.ts +16 -1
- package/dist/product/Field.d.ts.map +1 -1
- package/dist/product/Field.js +14 -2
- package/dist/product/Field.js.map +1 -1
- package/dist/product/Filters.cjs +61 -9
- package/dist/product/Filters.d.ts +37 -6
- package/dist/product/Filters.d.ts.map +1 -1
- package/dist/product/Filters.js +62 -10
- package/dist/product/Filters.js.map +1 -1
- package/dist/product/MenuRow.cjs +81 -2
- package/dist/product/MenuRow.d.ts +76 -6
- package/dist/product/MenuRow.d.ts.map +1 -1
- package/dist/product/MenuRow.js +81 -4
- package/dist/product/MenuRow.js.map +1 -1
- package/dist/product/PrimaryButton.cjs +5 -1
- package/dist/product/PrimaryButton.d.ts +8 -0
- package/dist/product/PrimaryButton.d.ts.map +1 -1
- package/dist/product/PrimaryButton.js +5 -1
- package/dist/product/PrimaryButton.js.map +1 -1
- package/dist/product/Skeleton.cjs +7 -6
- package/dist/product/Skeleton.d.ts +3 -20
- package/dist/product/Skeleton.d.ts.map +1 -1
- package/dist/product/Skeleton.js +8 -7
- package/dist/product/Skeleton.js.map +1 -1
- package/dist/product/index.cjs +2 -0
- package/dist/product/index.d.ts +1 -0
- package/dist/product/index.d.ts.map +1 -1
- package/dist/product/index.js +2 -0
- package/dist/product/index.js.map +1 -1
- package/dist/settings/Section.cjs +11 -2
- package/dist/settings/Section.d.ts +8 -1
- package/dist/settings/Section.d.ts.map +1 -1
- package/dist/settings/Section.js +11 -2
- package/dist/settings/Section.js.map +1 -1
- package/dist/styles/motion.css +70 -0
- package/dist/styles.css +1460 -127
- package/dist/theme.css +944 -0
- package/package.json +2 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Shortcut — a keyboard shortcut as keycaps, named for the platform it is read
|
|
5
|
+
* on, and spoken as one phrase.
|
|
6
|
+
*
|
|
7
|
+
* A shortcut is one combination (`['Mod', 'K']`) or a sequence of them
|
|
8
|
+
* (`[['G'], ['P']]`, "G then P"). Key names translate per platform: `Mod` and
|
|
9
|
+
* `CommandOrControl` are ⌘ on a Mac and Ctrl elsewhere, `Alt` is ⌥ on a Mac,
|
|
10
|
+
* Enter is ⏎, arrows and Escape take their glyphs. The whole thing is one image
|
|
11
|
+
* to assistive technology, labelled in words ("Command + K", "G then P"), and
|
|
12
|
+
* the caps inside it are hidden — a screen reader hears the shortcut once, not
|
|
13
|
+
* a list of symbols.
|
|
14
|
+
*
|
|
15
|
+
* The platform is read through `useSyncExternalStore` with a server answer of
|
|
16
|
+
* "other", so a server render and the first client render agree and a Mac
|
|
17
|
+
* swaps Ctrl for ⌘ right after hydration rather than mismatching it.
|
|
18
|
+
*
|
|
19
|
+
* Re-expressed from twenty-ui's Shortcut and formatShortcut (MIT, see NOTICE):
|
|
20
|
+
* keys, text and button variants, a `desktop` visibility that hides it under a
|
|
21
|
+
* coarse pointer, keys 4px apart in a combination.
|
|
22
|
+
*/
|
|
23
|
+
import { SizableText, XStack } from '@hanzo/gui';
|
|
24
|
+
import { useSyncExternalStore } from 'react';
|
|
25
|
+
import { Kbd } from './kbd.js';
|
|
26
|
+
import { slot } from './slot.js';
|
|
27
|
+
/** Every key name the two platforms spell differently, by its lowercase alias. */
|
|
28
|
+
const KEYS = (platform) => {
|
|
29
|
+
const mac = platform === 'mac';
|
|
30
|
+
const mod = mac ? { glyph: '⌘', word: 'Command' } : { glyph: 'Ctrl', word: 'Control' };
|
|
31
|
+
return {
|
|
32
|
+
mod,
|
|
33
|
+
commandorcontrol: mod,
|
|
34
|
+
cmdorctrl: mod,
|
|
35
|
+
command: { glyph: '⌘', word: 'Command' },
|
|
36
|
+
cmd: { glyph: '⌘', word: 'Command' },
|
|
37
|
+
meta: { glyph: '⌘', word: 'Command' },
|
|
38
|
+
control: mac ? { glyph: '⌃', word: 'Control' } : { glyph: 'Ctrl', word: 'Control' },
|
|
39
|
+
ctrl: mac ? { glyph: '⌃', word: 'Control' } : { glyph: 'Ctrl', word: 'Control' },
|
|
40
|
+
alt: mac ? { glyph: '⌥', word: 'Option' } : { glyph: 'Alt', word: 'Alt' },
|
|
41
|
+
option: mac ? { glyph: '⌥', word: 'Option' } : { glyph: 'Alt', word: 'Alt' },
|
|
42
|
+
shift: { glyph: '⇧', word: 'Shift' },
|
|
43
|
+
enter: { glyph: '⏎', word: 'Enter' },
|
|
44
|
+
return: { glyph: '⏎', word: 'Enter' },
|
|
45
|
+
backspace: { glyph: '⌫', word: 'Backspace' },
|
|
46
|
+
delete: { glyph: '⌦', word: 'Delete' },
|
|
47
|
+
escape: { glyph: 'esc', word: 'Escape' },
|
|
48
|
+
esc: { glyph: 'esc', word: 'Escape' },
|
|
49
|
+
tab: { glyph: '⇥', word: 'Tab' },
|
|
50
|
+
space: { glyph: 'Space', word: 'Space' },
|
|
51
|
+
arrowup: { glyph: '↑', word: 'Up arrow' },
|
|
52
|
+
arrowdown: { glyph: '↓', word: 'Down arrow' },
|
|
53
|
+
arrowleft: { glyph: '←', word: 'Left arrow' },
|
|
54
|
+
arrowright: { glyph: '→', word: 'Right arrow' },
|
|
55
|
+
up: { glyph: '↑', word: 'Up arrow' },
|
|
56
|
+
down: { glyph: '↓', word: 'Down arrow' },
|
|
57
|
+
left: { glyph: '←', word: 'Left arrow' },
|
|
58
|
+
right: { glyph: '→', word: 'Right arrow' },
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
/** A key's glyph and word on `platform`; a plain key is itself, a letter uppercased. */
|
|
62
|
+
export const keyName = (key, platform) => {
|
|
63
|
+
const known = KEYS(platform)[key.toLowerCase()];
|
|
64
|
+
if (known)
|
|
65
|
+
return known;
|
|
66
|
+
const label = key.length === 1 ? key.toUpperCase() : key;
|
|
67
|
+
return { glyph: label, word: label };
|
|
68
|
+
};
|
|
69
|
+
/** `keys` as a list of combinations, whichever shape it was given in. */
|
|
70
|
+
export const combinations = (keys) => keys.length > 0 && Array.isArray(keys[0]) ? keys.map((c) => [...c]) : [[...keys]];
|
|
71
|
+
/** The shortcut as text, without rendering: "⌘K", "Ctrl K", "G then P". */
|
|
72
|
+
export function formatShortcut(keys, options = {}) {
|
|
73
|
+
const platform = options.platform ?? detect();
|
|
74
|
+
const join = options.combinationSeparator ?? (platform === 'mac' ? '' : ' ');
|
|
75
|
+
return combinations(keys)
|
|
76
|
+
.map((c) => c.map((k) => keyName(k, platform).glyph).join(join))
|
|
77
|
+
.join(` ${options.sequenceJoinLabel ?? 'then'} `);
|
|
78
|
+
}
|
|
79
|
+
/** The shortcut in words, for assistive technology: "Command + K", "G then P". */
|
|
80
|
+
export function speakShortcut(keys, platform, then = 'then') {
|
|
81
|
+
return combinations(keys)
|
|
82
|
+
.map((c) => c.map((k) => keyName(k, platform).word).join(' + '))
|
|
83
|
+
.join(` ${then} `);
|
|
84
|
+
}
|
|
85
|
+
/** macOS and iOS read as a Mac; anything else, or no navigator, does not. */
|
|
86
|
+
function detect() {
|
|
87
|
+
if (typeof navigator === 'undefined')
|
|
88
|
+
return 'other';
|
|
89
|
+
const nav = navigator;
|
|
90
|
+
const p = nav.userAgentData?.platform ?? nav.platform ?? nav.userAgent ?? '';
|
|
91
|
+
return /mac|iphone|ipad|ipod/i.test(p) ? 'mac' : 'other';
|
|
92
|
+
}
|
|
93
|
+
const never = () => () => { };
|
|
94
|
+
export function Shortcut({ keys, platform, variant = 'keys', visibility = 'always', sequenceJoinLabel = 'then', combinationSeparator, ...props }) {
|
|
95
|
+
const detected = useSyncExternalStore(never, detect, () => 'other');
|
|
96
|
+
const on = platform ?? detected;
|
|
97
|
+
const label = speakShortcut(keys, on, sequenceJoinLabel);
|
|
98
|
+
const hidden = visibility === 'desktop' ? { $touchable: { display: 'none' } } : null;
|
|
99
|
+
const frame = {
|
|
100
|
+
...slot('shortcut'),
|
|
101
|
+
'data-variant': variant,
|
|
102
|
+
role: 'img',
|
|
103
|
+
'aria-label': label,
|
|
104
|
+
display: 'inline-flex',
|
|
105
|
+
items: 'center',
|
|
106
|
+
...hidden,
|
|
107
|
+
};
|
|
108
|
+
if (variant === 'text' || variant === 'button') {
|
|
109
|
+
const text = formatShortcut(keys, { platform: on, sequenceJoinLabel, combinationSeparator });
|
|
110
|
+
return (_jsxs(XStack, { ...frame, ...(variant === 'button' ? { gap: 6, ml: '$1', opacity: 0.5 } : null), ...props, children: [variant === 'button' ? (_jsx(XStack, { "aria-hidden": true, width: 1, height: 8, opacity: 0.4, style: { backgroundColor: 'currentColor' } })) : null, _jsx(SizableText, { "aria-hidden": true, size: "$2", ...(variant === 'button' ? { fontWeight: '500' } : null), children: text })] }));
|
|
111
|
+
}
|
|
112
|
+
const combos = combinations(keys);
|
|
113
|
+
return (_jsx(XStack, { ...frame, gap: "$1", ...props, children: combos.map((combo, i) => (_jsxs(XStack, { "aria-hidden": true, display: "inline-flex", items: "center", gap: "$1", children: [i > 0 ? (_jsx(SizableText, { size: "$1", color: "$hint", children: sequenceJoinLabel })) : null, combo.map((k, j) => (_jsx(Kbd, { variant: "cap", children: keyName(k, on).glyph }, j)))] }, i))) }));
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=shortcut.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shortcut.js","sourceRoot":"","sources":["../../../src/backends/gui/shortcut.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,45 @@
|
|
|
1
1
|
'use client';"use strict";
|
|
2
2
|
'use client';
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
5
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
-
const box_1 = require("../../box.cjs");
|
|
7
|
-
const cn_1 = require("../../core/cn.cjs");
|
|
8
|
-
const Skeleton = ({ className, ...props }) => ((0, jsx_runtime_1.jsx)(box_1.Box
|
|
9
|
-
// Announced as busy so a screen reader says "loading" rather than reading
|
|
10
|
-
// out an empty box, or nothing at all. A boolean, not the string "true":
|
|
11
|
-
// gui types the ARIA states as booleans and React writes the attribute out
|
|
12
|
-
// either way.
|
|
13
|
-
, { "aria-busy": true, "aria-live": "polite", "data-motion": "pulse", className: (0, cn_1.cn)('rounded-md bg-muted', className), ...props }));
|
|
4
|
+
exports.SKELETON_HEIGHT = void 0;
|
|
14
5
|
exports.Skeleton = Skeleton;
|
|
6
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
|
+
/**
|
|
8
|
+
* Skeleton — the shape of content that has not arrived. ONE implementation:
|
|
9
|
+
* `@hanzo/ui`'s `Skeleton` is this, and `@hanzo/ui/product`'s `Skeleton` (with
|
|
10
|
+
* `Skeleton.Text`) is this with its own defaults.
|
|
11
|
+
*
|
|
12
|
+
* It is a box with a highlight sweeping across it and nothing else, so the SIZE
|
|
13
|
+
* is the caller's to state and should match what will land there. A skeleton
|
|
14
|
+
* that is not the size of its content is worse than none: the page reflows when
|
|
15
|
+
* the real thing appears, which is the jump the skeleton existed to prevent.
|
|
16
|
+
*
|
|
17
|
+
* After twenty-ui's Skeleton (MIT, NOTICE): the base is the hover rung, the
|
|
18
|
+
* highlight a faint glass band, 4px corners, a 1.5s sweep (`--duration-loop`,
|
|
19
|
+
* stopped under reduced motion), height presets xs 13 / s 16 / m 24 / l 32 /
|
|
20
|
+
* xl 40, and two layouts — `inline` takes a line box of the text around it
|
|
21
|
+
* (it holds a zero-width non-joiner, so it is a line tall with no height
|
|
22
|
+
* given), `block` is a box of its own. The highlight is `--glass` rather than
|
|
23
|
+
* the panel rung: twenty-ui's is 2% black on light and 3% white on dark, and
|
|
24
|
+
* the panel rung is a SOLID step that sits darker than the hover rung in the
|
|
25
|
+
* dark theme, which would sweep a shadow instead of a light.
|
|
26
|
+
*
|
|
27
|
+
* Hidden from assistive technology: a placeholder is scenery, and the content
|
|
28
|
+
* is what should be read when it lands.
|
|
29
|
+
*
|
|
30
|
+
* Class notation is still read (`<Skeleton className="h-4 w-32" />`), the way
|
|
31
|
+
* `Box` reads it, so call sites written against the Box version keep their
|
|
32
|
+
* sizes; a class it does not know stays a class.
|
|
33
|
+
*/
|
|
34
|
+
const gui_1 = require("@hanzo/gui");
|
|
35
|
+
const tw_1 = require("../../tw.cjs");
|
|
36
|
+
const slot_1 = require("./slot.cjs");
|
|
37
|
+
/** The height presets, px. */
|
|
38
|
+
exports.SKELETON_HEIGHT = { xs: 13, s: 16, m: 24, l: 32, xl: 40 };
|
|
39
|
+
/** The band that sweeps: transparent, the glass light, transparent. */
|
|
40
|
+
const BAND = 'linear-gradient(90deg, transparent 0%, var(--glass, rgba(128, 128, 128, 0.08)) 50%, transparent 100%)';
|
|
41
|
+
function Skeleton({ size, layout = 'inline', animated = true, className, ...props }) {
|
|
42
|
+
const { props: read, rest } = (0, tw_1.tw)(className);
|
|
43
|
+
const height = size ? exports.SKELETON_HEIGHT[size] : layout === 'block' ? '1em' : undefined;
|
|
44
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('skeleton'), "aria-hidden": true, "data-layout": layout, "data-motion": animated ? 'shimmer' : undefined, display: layout === 'inline' ? 'inline-flex' : 'flex', width: "100%", ...(height === undefined ? null : { height }), rounded: "$xs", bg: "$hover", backgroundImage: animated ? BAND : undefined, backgroundSize: "160px 100%", backgroundRepeat: "no-repeat", overflow: "hidden", ...read, ...(rest ? { className: rest } : null), ...props, children: layout === 'inline' && height === undefined && !('height' in props) && !('height' in read) ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$2", "aria-hidden": true, children: '' })) : null }));
|
|
45
|
+
}
|
|
@@ -1,12 +1,50 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Skeleton — the shape of content that has not arrived.
|
|
2
|
+
* Skeleton — the shape of content that has not arrived. ONE implementation:
|
|
3
|
+
* `@hanzo/ui`'s `Skeleton` is this, and `@hanzo/ui/product`'s `Skeleton` (with
|
|
4
|
+
* `Skeleton.Text`) is this with its own defaults.
|
|
3
5
|
*
|
|
4
|
-
* It is a box with
|
|
5
|
-
* to state and should match what will land there. A skeleton
|
|
6
|
-
* size of its content is worse than none: the page reflows when
|
|
7
|
-
* appears, which is the jump the skeleton existed to prevent.
|
|
6
|
+
* It is a box with a highlight sweeping across it and nothing else, so the SIZE
|
|
7
|
+
* is the caller's to state and should match what will land there. A skeleton
|
|
8
|
+
* that is not the size of its content is worse than none: the page reflows when
|
|
9
|
+
* the real thing appears, which is the jump the skeleton existed to prevent.
|
|
10
|
+
*
|
|
11
|
+
* After twenty-ui's Skeleton (MIT, NOTICE): the base is the hover rung, the
|
|
12
|
+
* highlight a faint glass band, 4px corners, a 1.5s sweep (`--duration-loop`,
|
|
13
|
+
* stopped under reduced motion), height presets xs 13 / s 16 / m 24 / l 32 /
|
|
14
|
+
* xl 40, and two layouts — `inline` takes a line box of the text around it
|
|
15
|
+
* (it holds a zero-width non-joiner, so it is a line tall with no height
|
|
16
|
+
* given), `block` is a box of its own. The highlight is `--glass` rather than
|
|
17
|
+
* the panel rung: twenty-ui's is 2% black on light and 3% white on dark, and
|
|
18
|
+
* the panel rung is a SOLID step that sits darker than the hover rung in the
|
|
19
|
+
* dark theme, which would sweep a shadow instead of a light.
|
|
20
|
+
*
|
|
21
|
+
* Hidden from assistive technology: a placeholder is scenery, and the content
|
|
22
|
+
* is what should be read when it lands.
|
|
23
|
+
*
|
|
24
|
+
* Class notation is still read (`<Skeleton className="h-4 w-32" />`), the way
|
|
25
|
+
* `Box` reads it, so call sites written against the Box version keep their
|
|
26
|
+
* sizes; a class it does not know stays a class.
|
|
8
27
|
*/
|
|
9
|
-
import
|
|
10
|
-
import {
|
|
11
|
-
|
|
28
|
+
import { YStack } from '@hanzo/gui';
|
|
29
|
+
import type { ComponentProps } from 'react';
|
|
30
|
+
import { type ClassValue } from '../../tw.js';
|
|
31
|
+
/** The height presets, px. */
|
|
32
|
+
export declare const SKELETON_HEIGHT: {
|
|
33
|
+
readonly xs: 13;
|
|
34
|
+
readonly s: 16;
|
|
35
|
+
readonly m: 24;
|
|
36
|
+
readonly l: 32;
|
|
37
|
+
readonly xl: 40;
|
|
38
|
+
};
|
|
39
|
+
export type SkeletonSize = keyof typeof SKELETON_HEIGHT;
|
|
40
|
+
export type SkeletonProps = Omit<ComponentProps<typeof YStack>, 'children' | 'size'> & {
|
|
41
|
+
/** A height preset; a `height` given beside it wins. */
|
|
42
|
+
size?: SkeletonSize;
|
|
43
|
+
/** `inline` (default) is a line of the surrounding text; `block` is a box. */
|
|
44
|
+
layout?: 'inline' | 'block';
|
|
45
|
+
/** The sweep; off, a still block. Off under reduced motion regardless. */
|
|
46
|
+
animated?: boolean;
|
|
47
|
+
className?: ClassValue;
|
|
48
|
+
};
|
|
49
|
+
export declare function Skeleton({ size, layout, animated, className, ...props }: SkeletonProps): import("react").JSX.Element;
|
|
12
50
|
//# sourceMappingURL=skeleton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/skeleton.tsx"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/skeleton.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAe,MAAM,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAM,KAAK,UAAU,EAAE,MAAM,UAAU,CAAA;AAG9C,8BAA8B;AAC9B,eAAO,MAAM,eAAe;aAAK,EAAE,EAAE,EAAE;aAAE,CAAC,EAAE,EAAE;aAAE,CAAC,EAAE,EAAE;aAAE,CAAC,EAAE,EAAE;aAAE,EAAE,EAAE,EAAE;CAAW,CAAA;AAE/E,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,eAAe,CAAA;AAEvD,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,GAAG;IACrF,wDAAwD;IACxD,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC3B,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,UAAU,CAAA;CACvB,CAAA;AAKD,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAiB,EAAE,QAAe,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,+BA+BxG"}
|
|
@@ -1,11 +1,42 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Skeleton — the shape of content that has not arrived. ONE implementation:
|
|
5
|
+
* `@hanzo/ui`'s `Skeleton` is this, and `@hanzo/ui/product`'s `Skeleton` (with
|
|
6
|
+
* `Skeleton.Text`) is this with its own defaults.
|
|
7
|
+
*
|
|
8
|
+
* It is a box with a highlight sweeping across it and nothing else, so the SIZE
|
|
9
|
+
* is the caller's to state and should match what will land there. A skeleton
|
|
10
|
+
* that is not the size of its content is worse than none: the page reflows when
|
|
11
|
+
* the real thing appears, which is the jump the skeleton existed to prevent.
|
|
12
|
+
*
|
|
13
|
+
* After twenty-ui's Skeleton (MIT, NOTICE): the base is the hover rung, the
|
|
14
|
+
* highlight a faint glass band, 4px corners, a 1.5s sweep (`--duration-loop`,
|
|
15
|
+
* stopped under reduced motion), height presets xs 13 / s 16 / m 24 / l 32 /
|
|
16
|
+
* xl 40, and two layouts — `inline` takes a line box of the text around it
|
|
17
|
+
* (it holds a zero-width non-joiner, so it is a line tall with no height
|
|
18
|
+
* given), `block` is a box of its own. The highlight is `--glass` rather than
|
|
19
|
+
* the panel rung: twenty-ui's is 2% black on light and 3% white on dark, and
|
|
20
|
+
* the panel rung is a SOLID step that sits darker than the hover rung in the
|
|
21
|
+
* dark theme, which would sweep a shadow instead of a light.
|
|
22
|
+
*
|
|
23
|
+
* Hidden from assistive technology: a placeholder is scenery, and the content
|
|
24
|
+
* is what should be read when it lands.
|
|
25
|
+
*
|
|
26
|
+
* Class notation is still read (`<Skeleton className="h-4 w-32" />`), the way
|
|
27
|
+
* `Box` reads it, so call sites written against the Box version keep their
|
|
28
|
+
* sizes; a class it does not know stays a class.
|
|
29
|
+
*/
|
|
30
|
+
import { SizableText, YStack } from '@hanzo/gui';
|
|
31
|
+
import { tw } from '../../tw.js';
|
|
32
|
+
import { slot } from './slot.js';
|
|
33
|
+
/** The height presets, px. */
|
|
34
|
+
export const SKELETON_HEIGHT = { xs: 13, s: 16, m: 24, l: 32, xl: 40 };
|
|
35
|
+
/** The band that sweeps: transparent, the glass light, transparent. */
|
|
36
|
+
const BAND = 'linear-gradient(90deg, transparent 0%, var(--glass, rgba(128, 128, 128, 0.08)) 50%, transparent 100%)';
|
|
37
|
+
export function Skeleton({ size, layout = 'inline', animated = true, className, ...props }) {
|
|
38
|
+
const { props: read, rest } = tw(className);
|
|
39
|
+
const height = size ? SKELETON_HEIGHT[size] : layout === 'block' ? '1em' : undefined;
|
|
40
|
+
return (_jsx(YStack, { ...slot('skeleton'), "aria-hidden": true, "data-layout": layout, "data-motion": animated ? 'shimmer' : undefined, display: layout === 'inline' ? 'inline-flex' : 'flex', width: "100%", ...(height === undefined ? null : { height }), rounded: "$xs", bg: "$hover", backgroundImage: animated ? BAND : undefined, backgroundSize: "160px 100%", backgroundRepeat: "no-repeat", overflow: "hidden", ...read, ...(rest ? { className: rest } : null), ...props, children: layout === 'inline' && height === undefined && !('height' in props) && !('height' in read) ? (_jsx(SizableText, { size: "$2", "aria-hidden": true, children: '' })) : null }));
|
|
41
|
+
}
|
|
11
42
|
//# sourceMappingURL=skeleton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../../src/backends/gui/skeleton.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;
|
|
1
|
+
{"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../../src/backends/gui/skeleton.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEhD,OAAO,EAAE,EAAE,EAAmB,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,8BAA8B;AAC9B,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAW,CAAA;AAc/E,uEAAuE;AACvE,MAAM,IAAI,GAAG,uGAAuG,CAAA;AAEpH,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,QAAQ,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,EAAiB;IACvG,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;IACpF,OAAO,CACL,KAAC,MAAM,OACD,IAAI,CAAC,UAAU,CAAC,sCAEP,MAAM,iBAGN,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAC7C,OAAO,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,EACrD,KAAK,EAAC,MAAM,KACR,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAC9C,OAAO,EAAC,KAAK,EACb,EAAE,EAAC,QAAQ,EACX,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAC5C,cAAc,EAAC,YAAY,EAC3B,gBAAgB,EAAC,WAAW,EAC5B,QAAQ,EAAC,QAAQ,KACZ,IAAe,KAChB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KACnC,KAAK,YAER,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAC5F,KAAC,WAAW,IAAC,IAAI,EAAC,IAAI,iCACnB,GAAG,GACQ,CACf,CAAC,CAAC,CAAC,IAAI,GACD,CACV,CAAA;AACH,CAAC"}
|
|
@@ -17,6 +17,13 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
17
17
|
* no syntax highlighter, the same constraint `code-block.tsx` documents.
|
|
18
18
|
* `theme` names a fixed palette for the code surface, independent of the
|
|
19
19
|
* page's own light or dark theme; `size` picks the type scale.
|
|
20
|
+
*
|
|
21
|
+
* `variant="command"` is the record kit's command block (twenty-ui's
|
|
22
|
+
* CommandBlock, MIT — NOTICE): shell lines on the panel ground, 1px hairline,
|
|
23
|
+
* 4px corners, 12px padding, each line led by a "> " the reader does not copy
|
|
24
|
+
* or hear, wrapping anywhere, with `actions` (the copy button by default) 12px
|
|
25
|
+
* from the text and never shrinking. It follows the page's theme rather than a
|
|
26
|
+
* fixed palette, since it sits in settings and setup pages beside other chrome.
|
|
20
27
|
*/
|
|
21
28
|
const gui_1 = require("@hanzo/gui");
|
|
22
29
|
const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
|
|
@@ -99,7 +106,7 @@ function CopyButton({ copied, onPress, muted, floating, }) {
|
|
|
99
106
|
* copy button. `expandable` clamps the body to `collapsedHeight` until its
|
|
100
107
|
* maximize control is pressed.
|
|
101
108
|
*/
|
|
102
|
-
function Snippet({ code, language = 'text', filename, variant, theme, size, showLineNumbers = false, highlightLines = [], showCopyButton = true, showLanguageBadge = true, showHeader = true, maxHeight, expandable = false, collapsedHeight = 200, wrapLines = false, startLineNumber = 1, ...props }) {
|
|
109
|
+
function Snippet({ code, language = 'text', filename, variant, theme, size, showLineNumbers = false, highlightLines = [], showCopyButton = true, showLanguageBadge = true, showHeader = true, maxHeight, expandable = false, collapsedHeight = 200, wrapLines = false, startLineNumber = 1, actions, ...props }) {
|
|
103
110
|
const resolvedVariant = variant ?? 'default';
|
|
104
111
|
const palette = PALETTE[theme ?? 'dark'];
|
|
105
112
|
const fontSize = FONT_SIZE[size ?? 'default'];
|
|
@@ -117,6 +124,10 @@ function Snippet({ code, language = 'text', filename, variant, theme, size, show
|
|
|
117
124
|
// No clipboard permission or no clipboard API — nothing else to do.
|
|
118
125
|
}
|
|
119
126
|
}, [code]);
|
|
127
|
+
if (resolvedVariant === 'command') {
|
|
128
|
+
return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...(0, slot_1.slot)('snippet'), "data-variant": "command", items: "flex-start", justify: "space-between", gap: "$3", p: "$3", bg: "$panel", borderWidth: 1, borderColor: "$borderColor", rounded: "$xs", ...props, children: [(0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('snippet-body'), flex: 1, minW: 0, children: code.split('\n').map((line, i) => ((0, jsx_runtime_1.jsxs)(Mono, { "data-slot": "snippet-line", size: "$2", color: "$ink", style: { whiteSpace: 'pre-wrap', wordBreak: 'break-all' }, children: [(0, jsx_runtime_1.jsx)(Mono, { "aria-hidden": true, color: "$codeNumber", select: "none", children: '> ' }), line] }, i))) }), (0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('snippet-actions'), shrink: 0, items: "center", gap: "$2", children: actions ??
|
|
129
|
+
(showCopyButton ? (0, jsx_runtime_1.jsx)(CopyButton, { copied: copied, onPress: copy, muted: '$hint' }) : null) })] }));
|
|
130
|
+
}
|
|
120
131
|
if (resolvedVariant === 'inline') {
|
|
121
132
|
return ((0, jsx_runtime_1.jsx)(Mono, { ...(0, slot_1.slot)('snippet'), "data-variant": "inline", fontFamily: "$mono", rounded: "$2", px: "$2", py: "$1", wrap: wrapLines, style: {
|
|
122
133
|
display: 'inline-block',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ComponentProps, type ReactNode } from 'react';
|
|
2
|
-
export type SnippetVariant = 'default' | 'inline' | 'minimal';
|
|
2
|
+
export type SnippetVariant = 'default' | 'inline' | 'minimal' | 'command';
|
|
3
3
|
export type SnippetTheme = 'dark' | 'light' | 'github' | 'github-dark' | 'terminal' | 'retro';
|
|
4
4
|
export type SnippetSize = 'xs' | 'sm' | 'default' | 'lg';
|
|
5
5
|
export interface SnippetProps extends Omit<ComponentProps<'div'>, 'children'> {
|
|
@@ -21,6 +21,8 @@ export interface SnippetProps extends Omit<ComponentProps<'div'>, 'children'> {
|
|
|
21
21
|
collapsedHeight?: number | string;
|
|
22
22
|
wrapLines?: boolean;
|
|
23
23
|
startLineNumber?: number;
|
|
24
|
+
/** `command`: the controls beside the lines; the copy button unless given. */
|
|
25
|
+
actions?: ReactNode;
|
|
24
26
|
}
|
|
25
27
|
/**
|
|
26
28
|
* A syntax-plain code panel: `variant="default"` shows a header and a gutter
|
|
@@ -29,7 +31,7 @@ export interface SnippetProps extends Omit<ComponentProps<'div'>, 'children'> {
|
|
|
29
31
|
* copy button. `expandable` clamps the body to `collapsedHeight` until its
|
|
30
32
|
* maximize control is pressed.
|
|
31
33
|
*/
|
|
32
|
-
export declare function Snippet({ code, language, filename, variant, theme, size, showLineNumbers, highlightLines, showCopyButton, showLanguageBadge, showHeader, maxHeight, expandable, collapsedHeight, wrapLines, startLineNumber, ...props }: SnippetProps): import("react").JSX.Element;
|
|
34
|
+
export declare function Snippet({ code, language, filename, variant, theme, size, showLineNumbers, highlightLines, showCopyButton, showLanguageBadge, showHeader, maxHeight, expandable, collapsedHeight, wrapLines, startLineNumber, actions, ...props }: SnippetProps): import("react").JSX.Element;
|
|
33
35
|
export interface InlineCodeProps extends Omit<SnippetProps, 'variant' | 'code'> {
|
|
34
36
|
children: string;
|
|
35
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snippet.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/snippet.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"snippet.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/snippet.tsx"],"names":[],"mappings":"AAyBA,OAAO,EAAkC,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAK3F,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;AAEzE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,OAAO,CAAA;AAE7F,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAA;AAiBxD,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC3E,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;IAC/B,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IACzB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACjC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,SAAS,CAAA;CACpB;AA6FD;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,QAAiB,EACjB,QAAQ,EACR,OAAO,EACP,KAAK,EACL,IAAI,EACJ,eAAuB,EACvB,cAAmB,EACnB,cAAqB,EACrB,iBAAwB,EACxB,UAAiB,EACjB,SAAS,EACT,UAAkB,EAClB,eAAqB,EACrB,SAAiB,EACjB,eAAmB,EACnB,OAAO,EACP,GAAG,KAAK,EACT,EAAE,YAAY,+BAyMd;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,MAAM,CAAC;IAC7E,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,GAAG,SAAS,CAYvF"}
|
|
@@ -13,6 +13,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
13
13
|
* no syntax highlighter, the same constraint `code-block.tsx` documents.
|
|
14
14
|
* `theme` names a fixed palette for the code surface, independent of the
|
|
15
15
|
* page's own light or dark theme; `size` picks the type scale.
|
|
16
|
+
*
|
|
17
|
+
* `variant="command"` is the record kit's command block (twenty-ui's
|
|
18
|
+
* CommandBlock, MIT — NOTICE): shell lines on the panel ground, 1px hairline,
|
|
19
|
+
* 4px corners, 12px padding, each line led by a "> " the reader does not copy
|
|
20
|
+
* or hear, wrapping anywhere, with `actions` (the copy button by default) 12px
|
|
21
|
+
* from the text and never shrinking. It follows the page's theme rather than a
|
|
22
|
+
* fixed palette, since it sits in settings and setup pages beside other chrome.
|
|
16
23
|
*/
|
|
17
24
|
import { SizableText, XStack, YStack, styled } from '@hanzo/gui';
|
|
18
25
|
import { Check, Copy, FileText, Maximize2, Minimize2 } from '@hanzogui/lucide-icons-2';
|
|
@@ -95,7 +102,7 @@ function CopyButton({ copied, onPress, muted, floating, }) {
|
|
|
95
102
|
* copy button. `expandable` clamps the body to `collapsedHeight` until its
|
|
96
103
|
* maximize control is pressed.
|
|
97
104
|
*/
|
|
98
|
-
export function Snippet({ code, language = 'text', filename, variant, theme, size, showLineNumbers = false, highlightLines = [], showCopyButton = true, showLanguageBadge = true, showHeader = true, maxHeight, expandable = false, collapsedHeight = 200, wrapLines = false, startLineNumber = 1, ...props }) {
|
|
105
|
+
export function Snippet({ code, language = 'text', filename, variant, theme, size, showLineNumbers = false, highlightLines = [], showCopyButton = true, showLanguageBadge = true, showHeader = true, maxHeight, expandable = false, collapsedHeight = 200, wrapLines = false, startLineNumber = 1, actions, ...props }) {
|
|
99
106
|
const resolvedVariant = variant ?? 'default';
|
|
100
107
|
const palette = PALETTE[theme ?? 'dark'];
|
|
101
108
|
const fontSize = FONT_SIZE[size ?? 'default'];
|
|
@@ -113,6 +120,10 @@ export function Snippet({ code, language = 'text', filename, variant, theme, siz
|
|
|
113
120
|
// No clipboard permission or no clipboard API — nothing else to do.
|
|
114
121
|
}
|
|
115
122
|
}, [code]);
|
|
123
|
+
if (resolvedVariant === 'command') {
|
|
124
|
+
return (_jsxs(XStack, { ...slot('snippet'), "data-variant": "command", items: "flex-start", justify: "space-between", gap: "$3", p: "$3", bg: "$panel", borderWidth: 1, borderColor: "$borderColor", rounded: "$xs", ...props, children: [_jsx(YStack, { ...slot('snippet-body'), flex: 1, minW: 0, children: code.split('\n').map((line, i) => (_jsxs(Mono, { "data-slot": "snippet-line", size: "$2", color: "$ink", style: { whiteSpace: 'pre-wrap', wordBreak: 'break-all' }, children: [_jsx(Mono, { "aria-hidden": true, color: "$codeNumber", select: "none", children: '> ' }), line] }, i))) }), _jsx(XStack, { ...slot('snippet-actions'), shrink: 0, items: "center", gap: "$2", children: actions ??
|
|
125
|
+
(showCopyButton ? _jsx(CopyButton, { copied: copied, onPress: copy, muted: '$hint' }) : null) })] }));
|
|
126
|
+
}
|
|
116
127
|
if (resolvedVariant === 'inline') {
|
|
117
128
|
return (_jsx(Mono, { ...slot('snippet'), "data-variant": "inline", fontFamily: "$mono", rounded: "$2", px: "$2", py: "$1", wrap: wrapLines, style: {
|
|
118
129
|
display: 'inline-block',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snippet.js","sourceRoot":"","sources":["../../../src/backends/gui/snippet.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ
|
|
1
|
+
{"version":3,"file":"snippet.js","sourceRoot":"","sources":["../../../src/backends/gui/snippet.tsx"],"names":[],"mappings":"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"}
|
|
@@ -21,10 +21,17 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
21
21
|
*
|
|
22
22
|
* `aria-hidden`, because a spinner is never the message: the thing that is
|
|
23
23
|
* loading says so in text beside it.
|
|
24
|
+
*
|
|
25
|
+
* `variant="dot"` is the record kit's loader (twenty-ui's Loader, MIT — NOTICE):
|
|
26
|
+
* a 24×12 pill outline with an 8px dot that travels across it and squashes as
|
|
27
|
+
* it lands, 0.8s a loop (`data-motion="hop"` in styles/motion.css, stopped under
|
|
28
|
+
* reduced motion). It is the quieter one, for a status pill, a button that is
|
|
29
|
+
* busy or a list fetching more; the arc stays the default everywhere else. Both
|
|
30
|
+
* take the surrounding ink unless given a colour.
|
|
24
31
|
*/
|
|
25
32
|
const gui_1 = require("@hanzo/gui");
|
|
26
33
|
const slot_1 = require("./slot.cjs");
|
|
27
|
-
const Spinner = ({ size = 16, color = 'currentColor', ...props }) => ((0, jsx_runtime_1.jsx)(gui_1.Spinner, { ...(0, slot_1.slot)('spinner'), "aria-hidden": true,
|
|
34
|
+
const Spinner = ({ size = 16, color = 'currentColor', variant = 'arc', ...props }) => variant === 'dot' ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('spinner'), "data-variant": "dot", "aria-hidden": true, width: 24, height: 12, shrink: 0, rounded: "$10", borderWidth: 1, borderColor: color, overflow: "hidden", items: "center", justify: "center", ...props, children: (0, jsx_runtime_1.jsx)(gui_1.View, { "data-motion": "hop", width: 8, height: 8, rounded: "$10", bg: color }) })) : ((0, jsx_runtime_1.jsx)(gui_1.Spinner, { ...(0, slot_1.slot)('spinner'), "aria-hidden": true,
|
|
28
35
|
// The enum is upstream's TYPE; a number is what the element reads.
|
|
29
36
|
size: size, color: color, ...props }));
|
|
30
37
|
exports.Spinner = Spinner;
|
|
@@ -16,15 +16,24 @@
|
|
|
16
16
|
*
|
|
17
17
|
* `aria-hidden`, because a spinner is never the message: the thing that is
|
|
18
18
|
* loading says so in text beside it.
|
|
19
|
+
*
|
|
20
|
+
* `variant="dot"` is the record kit's loader (twenty-ui's Loader, MIT — NOTICE):
|
|
21
|
+
* a 24×12 pill outline with an 8px dot that travels across it and squashes as
|
|
22
|
+
* it lands, 0.8s a loop (`data-motion="hop"` in styles/motion.css, stopped under
|
|
23
|
+
* reduced motion). It is the quieter one, for a status pill, a button that is
|
|
24
|
+
* busy or a list fetching more; the arc stays the default everywhere else. Both
|
|
25
|
+
* take the surrounding ink unless given a colour.
|
|
19
26
|
*/
|
|
20
27
|
import { Spinner as GuiSpinner } from '@hanzo/gui';
|
|
21
28
|
import type { ComponentProps } from 'react';
|
|
22
29
|
export type SpinnerProps = Omit<ComponentProps<typeof GuiSpinner>, 'size' | 'color'> & {
|
|
23
|
-
/** Edge of the arc, px. */
|
|
30
|
+
/** Edge of the arc, px. The dot's pill is always 24×12. */
|
|
24
31
|
size?: number;
|
|
25
32
|
/** Ink. Inherits the surrounding text by default. */
|
|
26
33
|
color?: string;
|
|
34
|
+
/** `arc` (default) or the travelling `dot`. */
|
|
35
|
+
variant?: 'arc' | 'dot';
|
|
27
36
|
};
|
|
28
|
-
declare const Spinner: ({ size, color, ...props }: SpinnerProps) => import("react").JSX.Element;
|
|
37
|
+
declare const Spinner: ({ size, color, variant, ...props }: SpinnerProps) => import("react").JSX.Element;
|
|
29
38
|
export { Spinner };
|
|
30
39
|
//# sourceMappingURL=spinner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/spinner.tsx"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/spinner.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAgB,MAAM,YAAY,CAAA;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAG3C,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG;IACrF,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+CAA+C;IAC/C,OAAO,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;CACxB,CAAA;AAED,QAAA,MAAM,OAAO,uCAAsE,YAAY,gCA4B5F,CAAA;AAEH,OAAO,EAAE,OAAO,EAAE,CAAA"}
|
|
@@ -18,10 +18,17 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
18
18
|
*
|
|
19
19
|
* `aria-hidden`, because a spinner is never the message: the thing that is
|
|
20
20
|
* loading says so in text beside it.
|
|
21
|
+
*
|
|
22
|
+
* `variant="dot"` is the record kit's loader (twenty-ui's Loader, MIT — NOTICE):
|
|
23
|
+
* a 24×12 pill outline with an 8px dot that travels across it and squashes as
|
|
24
|
+
* it lands, 0.8s a loop (`data-motion="hop"` in styles/motion.css, stopped under
|
|
25
|
+
* reduced motion). It is the quieter one, for a status pill, a button that is
|
|
26
|
+
* busy or a list fetching more; the arc stays the default everywhere else. Both
|
|
27
|
+
* take the surrounding ink unless given a colour.
|
|
21
28
|
*/
|
|
22
|
-
import { Spinner as GuiSpinner } from '@hanzo/gui';
|
|
29
|
+
import { Spinner as GuiSpinner, View, XStack } from '@hanzo/gui';
|
|
23
30
|
import { slot } from './slot.js';
|
|
24
|
-
const Spinner = ({ size = 16, color = 'currentColor', ...props }) => (_jsx(GuiSpinner, { ...slot('spinner'), "aria-hidden": true,
|
|
31
|
+
const Spinner = ({ size = 16, color = 'currentColor', variant = 'arc', ...props }) => variant === 'dot' ? (_jsx(XStack, { ...slot('spinner'), "data-variant": "dot", "aria-hidden": true, width: 24, height: 12, shrink: 0, rounded: "$10", borderWidth: 1, borderColor: color, overflow: "hidden", items: "center", justify: "center", ...props, children: _jsx(View, { "data-motion": "hop", width: 8, height: 8, rounded: "$10", bg: color }) })) : (_jsx(GuiSpinner, { ...slot('spinner'), "aria-hidden": true,
|
|
25
32
|
// The enum is upstream's TYPE; a number is what the element reads.
|
|
26
33
|
size: size, color: color, ...props }));
|
|
27
34
|
export { Spinner };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../../src/backends/gui/spinner.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../../src/backends/gui/spinner.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEhE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAW7B,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,cAAc,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,KAAK,EAAgB,EAAE,EAAE,CACjG,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAClB,KAAC,MAAM,OACD,IAAI,CAAC,SAAS,CAAC,kBACN,KAAK,uBAElB,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,MAAM,EAAE,CAAC,EACT,OAAO,EAAC,KAAK,EACb,WAAW,EAAE,CAAC,EACd,WAAW,EAAE,KAAc,EAC3B,QAAQ,EAAC,QAAQ,EACjB,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,QAAQ,KACX,KAAgB,YAErB,KAAC,IAAI,mBAAa,KAAK,EAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAC,KAAK,EAAC,EAAE,EAAE,KAAc,GAAI,GAC1E,CACV,CAAC,CAAC,CAAC,CACJ,KAAC,UAAU,OACL,IAAI,CAAC,SAAS,CAAC;IAEnB,mEAAmE;IACnE,IAAI,EAAE,IAA0B,EAChC,KAAK,EAAE,KAAK,KACR,KAAK,GACT,CACD,CAAA;AAEH,OAAO,EAAE,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use client';"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.StackIcon = StackIcon;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* StackIcon — an icon with a smaller one pinned over its lower-right quadrant:
|
|
8
|
+
* a provider and its state, an app and its connection.
|
|
9
|
+
*
|
|
10
|
+
* Re-expressed from twenty-ui's StackIcon (MIT, see NOTICE): a 16px box, the
|
|
11
|
+
* stacked icon 8px from the left and 7px from the top. Both are decorative.
|
|
12
|
+
*/
|
|
13
|
+
const gui_1 = require("@hanzo/gui");
|
|
14
|
+
const slot_1 = require("./slot.cjs");
|
|
15
|
+
function StackIcon({ icon, stackedIcon, ...props }) {
|
|
16
|
+
return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...(0, slot_1.slot)('stack-icon'), "aria-hidden": true, position: "relative", width: 16, height: 16, shrink: 0, items: "center", justify: "center", ...props, children: [icon, (0, jsx_runtime_1.jsx)(gui_1.XStack, { position: "absolute", l: 8, t: 7, children: stackedIcon })] }));
|
|
17
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StackIcon — an icon with a smaller one pinned over its lower-right quadrant:
|
|
3
|
+
* a provider and its state, an app and its connection.
|
|
4
|
+
*
|
|
5
|
+
* Re-expressed from twenty-ui's StackIcon (MIT, see NOTICE): a 16px box, the
|
|
6
|
+
* stacked icon 8px from the left and 7px from the top. Both are decorative.
|
|
7
|
+
*/
|
|
8
|
+
import { XStack } from '@hanzo/gui';
|
|
9
|
+
import type { ComponentProps, ReactNode } from 'react';
|
|
10
|
+
export type StackIconProps = Omit<ComponentProps<typeof XStack>, 'children'> & {
|
|
11
|
+
icon: ReactNode;
|
|
12
|
+
stackedIcon: ReactNode;
|
|
13
|
+
};
|
|
14
|
+
export declare function StackIcon({ icon, stackedIcon, ...props }: StackIconProps): import("react").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=stack-icon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-icon.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/stack-icon.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IAC7E,IAAI,EAAE,SAAS,CAAA;IACf,WAAW,EAAE,SAAS,CAAA;CACvB,CAAA;AAED,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,+BASxE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* StackIcon — an icon with a smaller one pinned over its lower-right quadrant:
|
|
5
|
+
* a provider and its state, an app and its connection.
|
|
6
|
+
*
|
|
7
|
+
* Re-expressed from twenty-ui's StackIcon (MIT, see NOTICE): a 16px box, the
|
|
8
|
+
* stacked icon 8px from the left and 7px from the top. Both are decorative.
|
|
9
|
+
*/
|
|
10
|
+
import { XStack } from '@hanzo/gui';
|
|
11
|
+
import { slot } from './slot.js';
|
|
12
|
+
export function StackIcon({ icon, stackedIcon, ...props }) {
|
|
13
|
+
return (_jsxs(XStack, { ...slot('stack-icon'), "aria-hidden": true, position: "relative", width: 16, height: 16, shrink: 0, items: "center", justify: "center", ...props, children: [icon, _jsx(XStack, { position: "absolute", l: 8, t: 7, children: stackedIcon })] }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=stack-icon.js.map
|