@hanzo/ui 8.27.9 → 8.27.11
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/dist/backends/gui/3d-card.cjs +100 -0
- package/dist/backends/gui/3d-card.d.ts +59 -0
- package/dist/backends/gui/3d-card.d.ts.map +1 -0
- package/dist/backends/gui/3d-card.js +92 -0
- package/dist/backends/gui/3d-card.js.map +1 -0
- package/dist/backends/gui/3d-marquee.cjs +225 -0
- package/dist/backends/gui/3d-marquee.d.ts +114 -0
- package/dist/backends/gui/3d-marquee.d.ts.map +1 -0
- package/dist/backends/gui/3d-marquee.js +190 -0
- package/dist/backends/gui/3d-marquee.js.map +1 -0
- package/dist/backends/gui/3d-pin.cjs +51 -0
- package/dist/backends/gui/3d-pin.d.ts +14 -0
- package/dist/backends/gui/3d-pin.d.ts.map +1 -0
- package/dist/backends/gui/3d-pin.js +49 -0
- package/dist/backends/gui/3d-pin.js.map +1 -0
- package/dist/backends/gui/advanced-chart.cjs +61 -0
- package/dist/backends/gui/advanced-chart.d.ts +38 -0
- package/dist/backends/gui/advanced-chart.d.ts.map +1 -0
- package/dist/backends/gui/advanced-chart.js +59 -0
- package/dist/backends/gui/advanced-chart.js.map +1 -0
- package/dist/backends/gui/alert.cjs +106 -0
- package/dist/backends/gui/alert.d.ts +39 -0
- package/dist/backends/gui/alert.d.ts.map +1 -0
- package/dist/backends/gui/alert.js +102 -0
- package/dist/backends/gui/alert.js.map +1 -0
- package/dist/backends/gui/android.cjs +52 -0
- package/dist/backends/gui/android.d.ts +16 -0
- package/dist/backends/gui/android.d.ts.map +1 -0
- package/dist/backends/gui/android.js +50 -0
- package/dist/backends/gui/android.js.map +1 -0
- package/dist/backends/gui/animated-beam.cjs +97 -0
- package/dist/backends/gui/animated-beam.d.ts +57 -0
- package/dist/backends/gui/animated-beam.d.ts.map +1 -0
- package/dist/backends/gui/animated-beam.js +62 -0
- package/dist/backends/gui/animated-beam.js.map +1 -0
- package/dist/backends/gui/animated-cursor.cjs +183 -0
- package/dist/backends/gui/animated-cursor.d.ts +42 -0
- package/dist/backends/gui/animated-cursor.d.ts.map +1 -0
- package/dist/backends/gui/animated-cursor.js +181 -0
- package/dist/backends/gui/animated-cursor.js.map +1 -0
- package/dist/backends/gui/animated-testimonials.cjs +109 -0
- package/dist/backends/gui/animated-testimonials.d.ts +23 -0
- package/dist/backends/gui/animated-testimonials.d.ts.map +1 -0
- package/dist/backends/gui/animated-testimonials.js +74 -0
- package/dist/backends/gui/animated-testimonials.js.map +1 -0
- package/dist/backends/gui/animated-tooltip.cjs +100 -0
- package/dist/backends/gui/animated-tooltip.d.ts +15 -0
- package/dist/backends/gui/animated-tooltip.d.ts.map +1 -0
- package/dist/backends/gui/animated-tooltip.js +65 -0
- package/dist/backends/gui/animated-tooltip.js.map +1 -0
- package/dist/backends/gui/announcement.cjs +54 -0
- package/dist/backends/gui/announcement.d.ts +26 -0
- package/dist/backends/gui/announcement.d.ts.map +1 -0
- package/dist/backends/gui/announcement.js +52 -0
- package/dist/backends/gui/announcement.js.map +1 -0
- package/dist/backends/gui/apple-cards-carousel.cjs +198 -0
- package/dist/backends/gui/apple-cards-carousel.d.ts +45 -0
- package/dist/backends/gui/apple-cards-carousel.d.ts.map +1 -0
- package/dist/backends/gui/apple-cards-carousel.js +162 -0
- package/dist/backends/gui/apple-cards-carousel.js.map +1 -0
- package/dist/backends/gui/apple-hello-effect.cjs +38 -0
- package/dist/backends/gui/apple-hello-effect.d.ts +9 -0
- package/dist/backends/gui/apple-hello-effect.d.ts.map +1 -0
- package/dist/backends/gui/apple-hello-effect.js +36 -0
- package/dist/backends/gui/apple-hello-effect.js.map +1 -0
- package/dist/backends/gui/banner.cjs +108 -0
- package/dist/backends/gui/banner.d.ts +33 -0
- package/dist/backends/gui/banner.d.ts.map +1 -0
- package/dist/backends/gui/banner.js +106 -0
- package/dist/backends/gui/banner.js.map +1 -0
- package/dist/backends/gui/calendar.cjs +152 -0
- package/dist/backends/gui/calendar.d.ts +41 -0
- package/dist/backends/gui/calendar.d.ts.map +1 -0
- package/dist/backends/gui/calendar.js +151 -0
- package/dist/backends/gui/calendar.js.map +1 -0
- package/dist/backends/gui/choicebox.cjs +50 -0
- package/dist/backends/gui/choicebox.d.ts +33 -0
- package/dist/backends/gui/choicebox.d.ts.map +1 -0
- package/dist/backends/gui/choicebox.js +49 -0
- package/dist/backends/gui/choicebox.js.map +1 -0
- package/dist/backends/gui/code-block.cjs +120 -0
- package/dist/backends/gui/code-block.d.ts +22 -0
- package/dist/backends/gui/code-block.d.ts.map +1 -0
- package/dist/backends/gui/code-block.js +118 -0
- package/dist/backends/gui/code-block.js.map +1 -0
- package/dist/backends/gui/code-editor.cjs +195 -0
- package/dist/backends/gui/code-editor.d.ts +43 -0
- package/dist/backends/gui/code-editor.d.ts.map +1 -0
- package/dist/backends/gui/code-editor.js +160 -0
- package/dist/backends/gui/code-editor.js.map +1 -0
- package/dist/backends/gui/code-tabs.cjs +21 -0
- package/dist/backends/gui/code-tabs.d.ts +22 -0
- package/dist/backends/gui/code-tabs.d.ts.map +1 -0
- package/dist/backends/gui/code-tabs.js +19 -0
- package/dist/backends/gui/code-tabs.js.map +1 -0
- package/dist/backends/gui/color-picker.cjs +141 -0
- package/dist/backends/gui/color-picker.d.ts +25 -0
- package/dist/backends/gui/color-picker.d.ts.map +1 -0
- package/dist/backends/gui/color-picker.js +139 -0
- package/dist/backends/gui/color-picker.js.map +1 -0
- package/dist/backends/gui/combobox.cjs +42 -0
- package/dist/backends/gui/combobox.d.ts +39 -0
- package/dist/backends/gui/combobox.d.ts.map +1 -0
- package/dist/backends/gui/combobox.js +40 -0
- package/dist/backends/gui/combobox.js.map +1 -0
- package/dist/backends/gui/company-profile.cjs +43 -0
- package/dist/backends/gui/company-profile.d.ts +33 -0
- package/dist/backends/gui/company-profile.d.ts.map +1 -0
- package/dist/backends/gui/company-profile.js +41 -0
- package/dist/backends/gui/company-profile.js.map +1 -0
- package/dist/backends/gui/comparison.cjs +39 -0
- package/dist/backends/gui/comparison.d.ts +15 -0
- package/dist/backends/gui/comparison.d.ts.map +1 -0
- package/dist/backends/gui/comparison.js +37 -0
- package/dist/backends/gui/comparison.js.map +1 -0
- package/dist/backends/gui/credit-card.cjs +80 -0
- package/dist/backends/gui/credit-card.d.ts +21 -0
- package/dist/backends/gui/credit-card.d.ts.map +1 -0
- package/dist/backends/gui/credit-card.js +78 -0
- package/dist/backends/gui/credit-card.js.map +1 -0
- package/dist/backends/gui/crypto-market.cjs +128 -0
- package/dist/backends/gui/crypto-market.d.ts +52 -0
- package/dist/backends/gui/crypto-market.d.ts.map +1 -0
- package/dist/backends/gui/crypto-market.js +126 -0
- package/dist/backends/gui/crypto-market.js.map +1 -0
- package/dist/backends/gui/crypto-screener.cjs +45 -0
- package/dist/backends/gui/crypto-screener.d.ts +38 -0
- package/dist/backends/gui/crypto-screener.d.ts.map +1 -0
- package/dist/backends/gui/crypto-screener.js +43 -0
- package/dist/backends/gui/crypto-screener.js.map +1 -0
- package/dist/backends/gui/cursor.cjs +37 -0
- package/dist/backends/gui/cursor.d.ts +17 -0
- package/dist/backends/gui/cursor.d.ts.map +1 -0
- package/dist/backends/gui/cursor.js +35 -0
- package/dist/backends/gui/cursor.js.map +1 -0
- package/dist/backends/gui/data-table.cjs +171 -0
- package/dist/backends/gui/data-table.d.ts +91 -0
- package/dist/backends/gui/data-table.d.ts.map +1 -0
- package/dist/backends/gui/data-table.js +169 -0
- package/dist/backends/gui/data-table.js.map +1 -0
- package/dist/backends/gui/date-picker.cjs +66 -0
- package/dist/backends/gui/date-picker.d.ts +29 -0
- package/dist/backends/gui/date-picker.d.ts.map +1 -0
- package/dist/backends/gui/date-picker.js +64 -0
- package/dist/backends/gui/date-picker.js.map +1 -0
- package/dist/backends/gui/desktop-spotlight.cjs +46 -0
- package/dist/backends/gui/desktop-spotlight.d.ts +34 -0
- package/dist/backends/gui/desktop-spotlight.d.ts.map +1 -0
- package/dist/backends/gui/desktop-spotlight.js +44 -0
- package/dist/backends/gui/desktop-spotlight.js.map +1 -0
- package/dist/backends/gui/desktop-window.cjs +180 -0
- package/dist/backends/gui/desktop-window.d.ts +51 -0
- package/dist/backends/gui/desktop-window.d.ts.map +1 -0
- package/dist/backends/gui/desktop-window.js +177 -0
- package/dist/backends/gui/desktop-window.js.map +1 -0
- package/dist/backends/gui/desktop.cjs +238 -0
- package/dist/backends/gui/desktop.d.ts +109 -0
- package/dist/backends/gui/desktop.d.ts.map +1 -0
- package/dist/backends/gui/desktop.js +199 -0
- package/dist/backends/gui/desktop.js.map +1 -0
- package/dist/backends/gui/dialog-stack.cjs +26 -0
- package/dist/backends/gui/dialog-stack.d.ts +23 -0
- package/dist/backends/gui/dialog-stack.d.ts.map +1 -0
- package/dist/backends/gui/dialog-stack.js +24 -0
- package/dist/backends/gui/dialog-stack.js.map +1 -0
- package/dist/backends/gui/dock.cjs +99 -0
- package/dist/backends/gui/dock.d.ts +41 -0
- package/dist/backends/gui/dock.d.ts.map +1 -0
- package/dist/backends/gui/dock.js +96 -0
- package/dist/backends/gui/dock.js.map +1 -0
- package/dist/backends/gui/dropzone.cjs +142 -0
- package/dist/backends/gui/dropzone.d.ts +12 -0
- package/dist/backends/gui/dropzone.d.ts.map +1 -0
- package/dist/backends/gui/dropzone.js +140 -0
- package/dist/backends/gui/dropzone.js.map +1 -0
- package/dist/backends/gui/editor.cjs +84 -0
- package/dist/backends/gui/editor.d.ts +23 -0
- package/dist/backends/gui/editor.d.ts.map +1 -0
- package/dist/backends/gui/editor.js +49 -0
- package/dist/backends/gui/editor.js.map +1 -0
- package/dist/backends/gui/empty.cjs +71 -0
- package/dist/backends/gui/empty.d.ts +43 -0
- package/dist/backends/gui/empty.d.ts.map +1 -0
- package/dist/backends/gui/empty.js +63 -0
- package/dist/backends/gui/empty.js.map +1 -0
- package/dist/backends/gui/field.cjs +132 -0
- package/dist/backends/gui/field.d.ts +74 -0
- package/dist/backends/gui/field.d.ts.map +1 -0
- package/dist/backends/gui/field.js +121 -0
- package/dist/backends/gui/field.js.map +1 -0
- package/dist/backends/gui/financials.cjs +45 -0
- package/dist/backends/gui/financials.d.ts +36 -0
- package/dist/backends/gui/financials.d.ts.map +1 -0
- package/dist/backends/gui/financials.js +43 -0
- package/dist/backends/gui/financials.js.map +1 -0
- package/dist/backends/gui/forex-market.cjs +21 -0
- package/dist/backends/gui/forex-market.d.ts +17 -0
- package/dist/backends/gui/forex-market.d.ts.map +1 -0
- package/dist/backends/gui/forex-market.js +19 -0
- package/dist/backends/gui/forex-market.js.map +1 -0
- package/dist/backends/gui/forex-screener.cjs +57 -0
- package/dist/backends/gui/forex-screener.d.ts +45 -0
- package/dist/backends/gui/forex-screener.d.ts.map +1 -0
- package/dist/backends/gui/forex-screener.js +55 -0
- package/dist/backends/gui/forex-screener.js.map +1 -0
- package/dist/backends/gui/gantt.cjs +48 -0
- package/dist/backends/gui/gantt.d.ts +18 -0
- package/dist/backends/gui/gantt.d.ts.map +1 -0
- package/dist/backends/gui/gantt.js +46 -0
- package/dist/backends/gui/gantt.js.map +1 -0
- package/dist/backends/gui/glimpse.cjs +88 -0
- package/dist/backends/gui/glimpse.d.ts +57 -0
- package/dist/backends/gui/glimpse.d.ts.map +1 -0
- package/dist/backends/gui/glimpse.js +81 -0
- package/dist/backends/gui/glimpse.js.map +1 -0
- package/dist/backends/gui/grid-pattern.cjs +119 -0
- package/dist/backends/gui/grid-pattern.d.ts +96 -0
- package/dist/backends/gui/grid-pattern.d.ts.map +1 -0
- package/dist/backends/gui/grid-pattern.js +84 -0
- package/dist/backends/gui/grid-pattern.js.map +1 -0
- package/dist/backends/gui/image-crop.cjs +35 -0
- package/dist/backends/gui/image-crop.d.ts +20 -0
- package/dist/backends/gui/image-crop.d.ts.map +1 -0
- package/dist/backends/gui/image-crop.js +33 -0
- package/dist/backends/gui/image-crop.js.map +1 -0
- package/dist/backends/gui/image-zoom.cjs +58 -0
- package/dist/backends/gui/image-zoom.d.ts +16 -0
- package/dist/backends/gui/image-zoom.d.ts.map +1 -0
- package/dist/backends/gui/image-zoom.js +56 -0
- package/dist/backends/gui/image-zoom.js.map +1 -0
- package/dist/backends/gui/index.cjs +266 -1
- package/dist/backends/gui/index.d.ts +90 -0
- package/dist/backends/gui/index.d.ts.map +1 -1
- package/dist/backends/gui/index.js +90 -0
- package/dist/backends/gui/index.js.map +1 -1
- package/dist/backends/gui/interactive-grid-pattern.cjs +61 -0
- package/dist/backends/gui/interactive-grid-pattern.d.ts +28 -0
- package/dist/backends/gui/interactive-grid-pattern.d.ts.map +1 -0
- package/dist/backends/gui/interactive-grid-pattern.js +26 -0
- package/dist/backends/gui/interactive-grid-pattern.js.map +1 -0
- package/dist/backends/gui/iphone-15-pro.cjs +83 -0
- package/dist/backends/gui/iphone-15-pro.d.ts +16 -0
- package/dist/backends/gui/iphone-15-pro.d.ts.map +1 -0
- package/dist/backends/gui/iphone-15-pro.js +81 -0
- package/dist/backends/gui/iphone-15-pro.js.map +1 -0
- package/dist/backends/gui/item.cjs +154 -0
- package/dist/backends/gui/item.d.ts +72 -0
- package/dist/backends/gui/item.d.ts.map +1 -0
- package/dist/backends/gui/item.js +143 -0
- package/dist/backends/gui/item.js.map +1 -0
- package/dist/backends/gui/kanban.cjs +247 -0
- package/dist/backends/gui/kanban.d.ts +37 -0
- package/dist/backends/gui/kanban.d.ts.map +1 -0
- package/dist/backends/gui/kanban.js +212 -0
- package/dist/backends/gui/kanban.js.map +1 -0
- package/dist/backends/gui/kbd.cjs +45 -0
- package/dist/backends/gui/kbd.d.ts +8 -0
- package/dist/backends/gui/kbd.d.ts.map +1 -0
- package/dist/backends/gui/kbd.js +42 -0
- package/dist/backends/gui/kbd.js.map +1 -0
- package/dist/backends/gui/limelight-nav.cjs +201 -0
- package/dist/backends/gui/limelight-nav.d.ts +20 -0
- package/dist/backends/gui/limelight-nav.d.ts.map +1 -0
- package/dist/backends/gui/limelight-nav.js +166 -0
- package/dist/backends/gui/limelight-nav.js.map +1 -0
- package/dist/backends/gui/list.cjs +26 -0
- package/dist/backends/gui/list.d.ts +15 -0
- package/dist/backends/gui/list.d.ts.map +1 -0
- package/dist/backends/gui/list.js +23 -0
- package/dist/backends/gui/list.js.map +1 -0
- package/dist/backends/gui/macos-dock.cjs +84 -0
- package/dist/backends/gui/macos-dock.d.ts +30 -0
- package/dist/backends/gui/macos-dock.d.ts.map +1 -0
- package/dist/backends/gui/macos-dock.js +82 -0
- package/dist/backends/gui/macos-dock.js.map +1 -0
- package/dist/backends/gui/magnetic.cjs +40 -0
- package/dist/backends/gui/magnetic.d.ts +12 -0
- package/dist/backends/gui/magnetic.d.ts.map +1 -0
- package/dist/backends/gui/magnetic.js +38 -0
- package/dist/backends/gui/magnetic.js.map +1 -0
- package/dist/backends/gui/marquee.cjs +110 -0
- package/dist/backends/gui/marquee.d.ts +44 -0
- package/dist/backends/gui/marquee.d.ts.map +1 -0
- package/dist/backends/gui/marquee.js +75 -0
- package/dist/backends/gui/marquee.js.map +1 -0
- package/dist/backends/gui/menu-dock.cjs +64 -0
- package/dist/backends/gui/menu-dock.d.ts +21 -0
- package/dist/backends/gui/menu-dock.d.ts.map +1 -0
- package/dist/backends/gui/menu-dock.js +62 -0
- package/dist/backends/gui/menu-dock.js.map +1 -0
- package/dist/backends/gui/menubar.cjs +227 -0
- package/dist/backends/gui/menubar.d.ts +106 -0
- package/dist/backends/gui/menubar.d.ts.map +1 -0
- package/dist/backends/gui/menubar.js +177 -0
- package/dist/backends/gui/menubar.js.map +1 -0
- package/dist/backends/gui/message-dock.cjs +111 -0
- package/dist/backends/gui/message-dock.d.ts +22 -0
- package/dist/backends/gui/message-dock.d.ts.map +1 -0
- package/dist/backends/gui/message-dock.js +110 -0
- package/dist/backends/gui/message-dock.js.map +1 -0
- package/dist/backends/gui/mini-calendar.cjs +25 -0
- package/dist/backends/gui/mini-calendar.d.ts +22 -0
- package/dist/backends/gui/mini-calendar.d.ts.map +1 -0
- package/dist/backends/gui/mini-calendar.js +24 -0
- package/dist/backends/gui/mini-calendar.js.map +1 -0
- package/dist/backends/gui/minimal-tiptap.cjs +56 -0
- package/dist/backends/gui/minimal-tiptap.d.ts +20 -0
- package/dist/backends/gui/minimal-tiptap.d.ts.map +1 -0
- package/dist/backends/gui/minimal-tiptap.js +21 -0
- package/dist/backends/gui/minimal-tiptap.js.map +1 -0
- package/dist/backends/gui/motion-highlight.cjs +83 -0
- package/dist/backends/gui/motion-highlight.d.ts +27 -0
- package/dist/backends/gui/motion-highlight.d.ts.map +1 -0
- package/dist/backends/gui/motion-highlight.js +48 -0
- package/dist/backends/gui/motion-highlight.js.map +1 -0
- package/dist/backends/gui/navigation-bar.cjs +47 -0
- package/dist/backends/gui/navigation-bar.d.ts +48 -0
- package/dist/backends/gui/navigation-bar.d.ts.map +1 -0
- package/dist/backends/gui/navigation-bar.js +45 -0
- package/dist/backends/gui/navigation-bar.js.map +1 -0
- package/dist/backends/gui/news-timeline.cjs +47 -0
- package/dist/backends/gui/news-timeline.d.ts +39 -0
- package/dist/backends/gui/news-timeline.d.ts.map +1 -0
- package/dist/backends/gui/news-timeline.js +45 -0
- package/dist/backends/gui/news-timeline.js.map +1 -0
- package/dist/backends/gui/order-entry.cjs +53 -0
- package/dist/backends/gui/order-entry.d.ts +21 -0
- package/dist/backends/gui/order-entry.d.ts.map +1 -0
- package/dist/backends/gui/order-entry.js +52 -0
- package/dist/backends/gui/order-entry.js.map +1 -0
- package/dist/backends/gui/orders-history.cjs +102 -0
- package/dist/backends/gui/orders-history.d.ts +24 -0
- package/dist/backends/gui/orders-history.d.ts.map +1 -0
- package/dist/backends/gui/orders-history.js +67 -0
- package/dist/backends/gui/orders-history.js.map +1 -0
- package/dist/backends/gui/pagination.cjs +51 -0
- package/dist/backends/gui/pagination.d.ts +52 -0
- package/dist/backends/gui/pagination.d.ts.map +1 -0
- package/dist/backends/gui/pagination.js +42 -0
- package/dist/backends/gui/pagination.js.map +1 -0
- package/dist/backends/gui/particles-background.cjs +135 -0
- package/dist/backends/gui/particles-background.d.ts +24 -0
- package/dist/backends/gui/particles-background.d.ts.map +1 -0
- package/dist/backends/gui/particles-background.js +133 -0
- package/dist/backends/gui/particles-background.js.map +1 -0
- package/dist/backends/gui/particles.cjs +145 -0
- package/dist/backends/gui/particles.d.ts +25 -0
- package/dist/backends/gui/particles.d.ts.map +1 -0
- package/dist/backends/gui/particles.js +143 -0
- package/dist/backends/gui/particles.js.map +1 -0
- package/dist/backends/gui/pill.cjs +82 -0
- package/dist/backends/gui/pill.d.ts +12 -0
- package/dist/backends/gui/pill.d.ts.map +1 -0
- package/dist/backends/gui/pill.js +78 -0
- package/dist/backends/gui/pill.js.map +1 -0
- package/dist/backends/gui/pin-list.cjs +82 -0
- package/dist/backends/gui/pin-list.d.ts +42 -0
- package/dist/backends/gui/pin-list.d.ts.map +1 -0
- package/dist/backends/gui/pin-list.js +80 -0
- package/dist/backends/gui/pin-list.js.map +1 -0
- package/dist/backends/gui/pixel-image.cjs +63 -0
- package/dist/backends/gui/pixel-image.d.ts +21 -0
- package/dist/backends/gui/pixel-image.d.ts.map +1 -0
- package/dist/backends/gui/pixel-image.js +61 -0
- package/dist/backends/gui/pixel-image.js.map +1 -0
- package/dist/backends/gui/positions-list.cjs +60 -0
- package/dist/backends/gui/positions-list.d.ts +14 -0
- package/dist/backends/gui/positions-list.d.ts.map +1 -0
- package/dist/backends/gui/positions-list.js +58 -0
- package/dist/backends/gui/positions-list.js.map +1 -0
- package/dist/backends/gui/qr-code.cjs +438 -0
- package/dist/backends/gui/qr-code.d.ts +42 -0
- package/dist/backends/gui/qr-code.d.ts.map +1 -0
- package/dist/backends/gui/qr-code.js +402 -0
- package/dist/backends/gui/qr-code.js.map +1 -0
- package/dist/backends/gui/relative-time.cjs +167 -0
- package/dist/backends/gui/relative-time.d.ts +10 -0
- package/dist/backends/gui/relative-time.d.ts.map +1 -0
- package/dist/backends/gui/relative-time.js +132 -0
- package/dist/backends/gui/relative-time.js.map +1 -0
- package/dist/backends/gui/safari.cjs +65 -0
- package/dist/backends/gui/safari.d.ts +23 -0
- package/dist/backends/gui/safari.d.ts.map +1 -0
- package/dist/backends/gui/safari.js +63 -0
- package/dist/backends/gui/safari.js.map +1 -0
- package/dist/backends/gui/snippet.cjs +144 -0
- package/dist/backends/gui/snippet.d.ts +38 -0
- package/dist/backends/gui/snippet.d.ts.map +1 -0
- package/dist/backends/gui/snippet.js +141 -0
- package/dist/backends/gui/snippet.js.map +1 -0
- package/dist/backends/gui/stars-scrolling-wheel.cjs +106 -0
- package/dist/backends/gui/stars-scrolling-wheel.d.ts +24 -0
- package/dist/backends/gui/stars-scrolling-wheel.d.ts.map +1 -0
- package/dist/backends/gui/stars-scrolling-wheel.js +104 -0
- package/dist/backends/gui/stars-scrolling-wheel.js.map +1 -0
- package/dist/backends/gui/status.cjs +79 -0
- package/dist/backends/gui/status.d.ts +15 -0
- package/dist/backends/gui/status.d.ts.map +1 -0
- package/dist/backends/gui/status.js +77 -0
- package/dist/backends/gui/status.js.map +1 -0
- package/dist/backends/gui/stock-market.cjs +21 -0
- package/dist/backends/gui/stock-market.d.ts +17 -0
- package/dist/backends/gui/stock-market.d.ts.map +1 -0
- package/dist/backends/gui/stock-market.js +19 -0
- package/dist/backends/gui/stock-market.js.map +1 -0
- package/dist/backends/gui/stock-screener.cjs +55 -0
- package/dist/backends/gui/stock-screener.d.ts +41 -0
- package/dist/backends/gui/stock-screener.d.ts.map +1 -0
- package/dist/backends/gui/stock-screener.js +53 -0
- package/dist/backends/gui/stock-screener.js.map +1 -0
- package/dist/backends/gui/symbol-info.cjs +46 -0
- package/dist/backends/gui/symbol-info.d.ts +36 -0
- package/dist/backends/gui/symbol-info.d.ts.map +1 -0
- package/dist/backends/gui/symbol-info.js +44 -0
- package/dist/backends/gui/symbol-info.js.map +1 -0
- package/dist/backends/gui/table.cjs +104 -0
- package/dist/backends/gui/table.d.ts +57 -0
- package/dist/backends/gui/table.d.ts.map +1 -0
- package/dist/backends/gui/table.js +95 -0
- package/dist/backends/gui/table.js.map +1 -0
- package/dist/backends/gui/tags.cjs +22 -0
- package/dist/backends/gui/tags.d.ts +22 -0
- package/dist/backends/gui/tags.d.ts.map +1 -0
- package/dist/backends/gui/tags.js +20 -0
- package/dist/backends/gui/tags.js.map +1 -0
- package/dist/backends/gui/technical-analysis.cjs +58 -0
- package/dist/backends/gui/technical-analysis.d.ts +41 -0
- package/dist/backends/gui/technical-analysis.d.ts.map +1 -0
- package/dist/backends/gui/technical-analysis.js +56 -0
- package/dist/backends/gui/technical-analysis.js.map +1 -0
- package/dist/backends/gui/terminal.cjs +266 -0
- package/dist/backends/gui/terminal.d.ts +38 -0
- package/dist/backends/gui/terminal.d.ts.map +1 -0
- package/dist/backends/gui/terminal.js +231 -0
- package/dist/backends/gui/terminal.js.map +1 -0
- package/dist/backends/gui/ticker.cjs +79 -0
- package/dist/backends/gui/ticker.d.ts +19 -0
- package/dist/backends/gui/ticker.d.ts.map +1 -0
- package/dist/backends/gui/ticker.js +44 -0
- package/dist/backends/gui/ticker.js.map +1 -0
- package/dist/backends/gui/timeline.cjs +154 -0
- package/dist/backends/gui/timeline.d.ts +42 -0
- package/dist/backends/gui/timeline.d.ts.map +1 -0
- package/dist/backends/gui/timeline.js +118 -0
- package/dist/backends/gui/timeline.js.map +1 -0
- package/dist/backends/gui/toggle.cjs +96 -0
- package/dist/backends/gui/toggle.d.ts +29 -0
- package/dist/backends/gui/toggle.d.ts.map +1 -0
- package/dist/backends/gui/toggle.js +95 -0
- package/dist/backends/gui/toggle.js.map +1 -0
- package/dist/backends/gui/video-player.cjs +383 -0
- package/dist/backends/gui/video-player.d.ts +54 -0
- package/dist/backends/gui/video-player.d.ts.map +1 -0
- package/dist/backends/gui/video-player.js +348 -0
- package/dist/backends/gui/video-player.js.map +1 -0
- package/dist/chat/Composer.cjs +10 -10
- package/dist/chat/Composer.d.ts +16 -17
- package/dist/chat/Composer.d.ts.map +1 -1
- package/dist/chat/Composer.js +11 -11
- package/dist/chat/Composer.js.map +1 -1
- package/dist/gallery.cjs +180 -1
- package/dist/gallery.d.ts.map +1 -1
- package/dist/gallery.html +391 -3
- package/dist/gallery.js +181 -2
- package/dist/gallery.js.map +1 -1
- package/dist/index.cjs +179 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/index.node.cjs +179 -1
- package/dist/index.node.js +3 -0
- package/dist/styles.css +356 -0
- package/package.json +1 -1
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Menubar — a persistent row of pull-down menus, the kind a desktop app keeps
|
|
3
|
+
* across the top of its window (File, Edit, View, ...).
|
|
4
|
+
*
|
|
5
|
+
* Each `MenubarMenu` is its own `@hanzo/gui` `Menu`, so a single trigger click
|
|
6
|
+
* opens a real menu with the full compound surface (items, checkbox items, a
|
|
7
|
+
* radio group, separators, a label, a submenu) and every a11y/dismiss/typeahead
|
|
8
|
+
* behaviour that `Menu` already has. What THIS file adds on top, because a row
|
|
9
|
+
* of independent menus is not yet a menubar, is the coordination between them:
|
|
10
|
+
* one open menu at a time, hovering a sibling trigger while a menu is open
|
|
11
|
+
* switches to it instead of requiring a second click, and the arrow keys rove
|
|
12
|
+
* focus across the triggers (Home/End jump to the first/last). That state lives
|
|
13
|
+
* in one root context, read by `MenubarTrigger` and `MenubarMenu` — neither
|
|
14
|
+
* hand-rolls it a second time.
|
|
15
|
+
*
|
|
16
|
+
* The rows, checkbox rows, radio rows, label, separator and submenu below are
|
|
17
|
+
* the same 32px-row, 8px-gutter, 44px-tap design as `dropdown-menu.tsx` and
|
|
18
|
+
* `context-menu.tsx` — one menu design, not three. `MenubarContent` mounts its
|
|
19
|
+
* own `Menu.Portal` and re-applies the trigger's resolved theme inside it via
|
|
20
|
+
* `PortalTheme` (gui portals re-root the subtree, so React theme context does
|
|
21
|
+
* not otherwise flow there).
|
|
22
|
+
*
|
|
23
|
+
* Cross-platform: gui style props only — no Tailwind class strings, no Radix,
|
|
24
|
+
* no DOM APIs beyond the `data-slot` markers every gui backend component uses
|
|
25
|
+
* to publish its parts for CSS and tests.
|
|
26
|
+
*/
|
|
27
|
+
import * as React from 'react';
|
|
28
|
+
import { Menu, Text, XStack, type GuiElement } from '@hanzo/gui';
|
|
29
|
+
export type MenubarProps = Omit<React.ComponentProps<typeof XStack>, 'onValueChange'> & {
|
|
30
|
+
/** Which menu is open, by its `MenubarMenu`'s `value`. Controlled. */
|
|
31
|
+
value?: string;
|
|
32
|
+
defaultValue?: string;
|
|
33
|
+
onValueChange?: (value: string | undefined) => void;
|
|
34
|
+
};
|
|
35
|
+
declare function Menubar({ value, defaultValue, onValueChange, children, ...props }: MenubarProps): React.JSX.Element;
|
|
36
|
+
export type MenubarMenuProps = React.ComponentProps<typeof Menu> & {
|
|
37
|
+
/** Identifies this menu to the root's `value`/`onValueChange`. Auto-generated if omitted. */
|
|
38
|
+
value?: string;
|
|
39
|
+
};
|
|
40
|
+
declare function MenubarMenu({ value, children, ...props }: MenubarMenuProps): React.JSX.Element;
|
|
41
|
+
export type MenubarTriggerProps = React.ComponentProps<typeof Menu.Trigger>;
|
|
42
|
+
declare const MenubarTrigger: React.ForwardRefExoticComponent<MenubarTriggerProps & React.RefAttributes<GuiElement>>;
|
|
43
|
+
export type MenubarContentProps = React.ComponentProps<typeof Menu.Content> & {
|
|
44
|
+
sideOffset?: number;
|
|
45
|
+
align?: 'start' | 'center' | 'end';
|
|
46
|
+
};
|
|
47
|
+
declare const MenubarContent: React.ForwardRefExoticComponent<Omit<MenubarContentProps, "ref"> & React.RefAttributes<GuiElement>>;
|
|
48
|
+
declare const MenubarSubContent: React.ForwardRefExoticComponent<Omit<import("@hanzo/gui").MenuSubContentProps & {
|
|
49
|
+
scope?: string;
|
|
50
|
+
} & React.RefAttributes<GuiElement> & Partial<Omit<import("@hanzo/gui").NativeMenuSubContentProps, keyof import("@hanzo/gui").MenuSubContentProps | keyof React.RefAttributes<GuiElement>>>, "ref"> & React.RefAttributes<GuiElement>>;
|
|
51
|
+
export type MenubarItemProps = Omit<React.ComponentProps<typeof Menu.Item>, 'inset' | 'variant'> & {
|
|
52
|
+
inset?: boolean;
|
|
53
|
+
variant?: 'default' | 'destructive';
|
|
54
|
+
};
|
|
55
|
+
declare const MenubarItem: React.ForwardRefExoticComponent<Omit<MenubarItemProps, "ref"> & React.RefAttributes<GuiElement>>;
|
|
56
|
+
declare const MenubarCheckboxItem: React.ForwardRefExoticComponent<Omit<Omit<import("@hanzogui/web").GetFinalProps<import("@hanzogui/web").StackNonStyleProps, import("@hanzogui/web").StackStyleBase, {
|
|
57
|
+
unstyled?: boolean | undefined;
|
|
58
|
+
}>, "scope" | keyof import("@hanzo/gui").MenuCheckboxItemProps> & import("@hanzo/gui").MenuCheckboxItemProps & {
|
|
59
|
+
scope?: string;
|
|
60
|
+
} & React.RefAttributes<GuiElement> & Partial<Omit<Omit<import("@hanzo/gui").NativeMenuItemProps, "onSelect"> & {
|
|
61
|
+
checked?: boolean;
|
|
62
|
+
onCheckedChange?: (checked: boolean) => void;
|
|
63
|
+
value?: "mixed" | "on" | "off" | boolean;
|
|
64
|
+
onValueChange?: (state: "mixed" | "on" | "off", prevState: "mixed" | "on" | "off") => void;
|
|
65
|
+
key: string;
|
|
66
|
+
}, "scope" | keyof import("@hanzo/gui").MenuCheckboxItemProps | keyof React.RefAttributes<GuiElement>>>, "ref"> & React.RefAttributes<GuiElement>>;
|
|
67
|
+
declare const MenubarRadioItem: React.ForwardRefExoticComponent<Omit<Omit<import("@hanzogui/web").GetFinalProps<import("@hanzogui/web").StackNonStyleProps, import("@hanzogui/web").StackStyleBase, {
|
|
68
|
+
unstyled?: boolean | undefined;
|
|
69
|
+
}>, "scope" | keyof import("@hanzo/gui").MenuRadioItemProps> & import("@hanzo/gui").MenuRadioItemProps & {
|
|
70
|
+
scope?: string;
|
|
71
|
+
} & React.RefAttributes<GuiElement> & Partial<Omit<{
|
|
72
|
+
children: React.ReactNode;
|
|
73
|
+
}, "scope" | keyof import("@hanzo/gui").MenuRadioItemProps | keyof React.RefAttributes<GuiElement>>>, "ref"> & React.RefAttributes<GuiElement>>;
|
|
74
|
+
declare const MenubarSubTrigger: React.ForwardRefExoticComponent<Omit<Omit<import("@hanzo/gui").MenuSubTriggerProps & {
|
|
75
|
+
scope?: string;
|
|
76
|
+
} & React.RefAttributes<GuiElement> & Partial<Omit<{
|
|
77
|
+
children: React.ReactNode;
|
|
78
|
+
textValue?: string;
|
|
79
|
+
onSelect?: (event?: Event) => void;
|
|
80
|
+
} & {
|
|
81
|
+
disabled?: boolean;
|
|
82
|
+
hidden?: boolean;
|
|
83
|
+
destructive?: boolean;
|
|
84
|
+
key: string;
|
|
85
|
+
} & {
|
|
86
|
+
key: string;
|
|
87
|
+
}, "scope" | keyof import("@hanzo/gui").MenuSubTriggerProps | keyof React.RefAttributes<GuiElement>>>, "inset"> & {
|
|
88
|
+
inset?: boolean;
|
|
89
|
+
}, "ref"> & React.RefAttributes<GuiElement>>;
|
|
90
|
+
declare const MenubarLabel: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@hanzogui/web").GetFinalProps<import("@hanzogui/web").TextNonStyleProps, import("@hanzogui/web").TextStylePropsBase, {
|
|
91
|
+
unstyled?: boolean | undefined;
|
|
92
|
+
size?: import("@hanzogui/web").FontSizeTokens | undefined;
|
|
93
|
+
}>, keyof import("@hanzo/gui").MenuLabelProps> & import("@hanzo/gui").MenuLabelProps & React.RefAttributes<import("@hanzogui/web").GuiTextElement> & Partial<Omit<import("@hanzo/gui").NativeMenuLabelProps, "adjustsFontSizeToFit" | "allowFontScaling" | "android_hyphenationFrequency" | "color" | "dataDetectorType" | "dynamicTypeRamp" | "elevation" | "ellipsis" | "ellipsizeMode" | "fontFamily" | "fontSize" | "fontStyle" | "fontVariant" | "fontWeight" | "includeFontPadding" | "letterSpacing" | "lineBreakMode" | "lineBreakStrategyIOS" | "lineHeight" | "maxFontSizeMultiplier" | "minimumFontScale" | "numberOfLines" | "pressRetentionOffset" | "selectable" | "selectionColor" | "size" | "suppressHighlighting" | "textAlign" | "textAlignVertical" | "textBreakStrategy" | "textDecorationColor" | "textDecorationDistance" | "textDecorationLine" | "textDecorationStyle" | "textOverflow" | "textShadow" | "textShadowColor" | "textShadowOffset" | "textShadowRadius" | "textTransform" | "whiteSpace" | "wordWrap" | "writingDirection" | keyof import("@hanzo/gui").MenuLabelProps | keyof React.RefAttributes<import("@hanzogui/web").GuiTextElement>>>, "inset"> & {
|
|
94
|
+
inset?: boolean;
|
|
95
|
+
}, "ref"> & React.RefAttributes<GuiElement>>;
|
|
96
|
+
declare const MenubarSeparator: React.ForwardRefExoticComponent<Omit<Omit<import("@hanzogui/web").GetFinalProps<import("@hanzogui/web").StackNonStyleProps, import("@hanzogui/web").StackStyleBase, {
|
|
97
|
+
unstyled?: boolean | undefined;
|
|
98
|
+
}>, keyof import("@hanzo/gui").MenuSeparatorProps> & import("@hanzo/gui").MenuSeparatorProps & React.RefAttributes<GuiElement> & Partial<Omit<import("@hanzo/gui").NativeMenuSeparatorProps, keyof import("@hanzo/gui").MenuSeparatorProps | keyof React.RefAttributes<GuiElement>>>, "ref"> & React.RefAttributes<GuiElement>>;
|
|
99
|
+
/** Right-aligned shortcut hint. gui `Text`, not a raw `<span>`, so it renders on native. */
|
|
100
|
+
declare function MenubarShortcut(props: React.ComponentProps<typeof Text>): React.JSX.Element;
|
|
101
|
+
declare const MenubarGroup: typeof Menu.Group;
|
|
102
|
+
declare const MenubarPortal: typeof Menu.Portal;
|
|
103
|
+
declare const MenubarSub: typeof Menu.Sub;
|
|
104
|
+
declare const MenubarRadioGroup: typeof Menu.RadioGroup;
|
|
105
|
+
export { Menubar, MenubarMenu, MenubarTrigger, MenubarContent, MenubarItem, MenubarCheckboxItem, MenubarRadioItem, MenubarLabel, MenubarSeparator, MenubarShortcut, MenubarGroup, MenubarPortal, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarRadioGroup, };
|
|
106
|
+
//# sourceMappingURL=menubar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menubar.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/menubar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Menubar — a persistent row of pull-down menus, the kind a desktop app keeps
|
|
5
|
+
* across the top of its window (File, Edit, View, ...).
|
|
6
|
+
*
|
|
7
|
+
* Each `MenubarMenu` is its own `@hanzo/gui` `Menu`, so a single trigger click
|
|
8
|
+
* opens a real menu with the full compound surface (items, checkbox items, a
|
|
9
|
+
* radio group, separators, a label, a submenu) and every a11y/dismiss/typeahead
|
|
10
|
+
* behaviour that `Menu` already has. What THIS file adds on top, because a row
|
|
11
|
+
* of independent menus is not yet a menubar, is the coordination between them:
|
|
12
|
+
* one open menu at a time, hovering a sibling trigger while a menu is open
|
|
13
|
+
* switches to it instead of requiring a second click, and the arrow keys rove
|
|
14
|
+
* focus across the triggers (Home/End jump to the first/last). That state lives
|
|
15
|
+
* in one root context, read by `MenubarTrigger` and `MenubarMenu` — neither
|
|
16
|
+
* hand-rolls it a second time.
|
|
17
|
+
*
|
|
18
|
+
* The rows, checkbox rows, radio rows, label, separator and submenu below are
|
|
19
|
+
* the same 32px-row, 8px-gutter, 44px-tap design as `dropdown-menu.tsx` and
|
|
20
|
+
* `context-menu.tsx` — one menu design, not three. `MenubarContent` mounts its
|
|
21
|
+
* own `Menu.Portal` and re-applies the trigger's resolved theme inside it via
|
|
22
|
+
* `PortalTheme` (gui portals re-root the subtree, so React theme context does
|
|
23
|
+
* not otherwise flow there).
|
|
24
|
+
*
|
|
25
|
+
* Cross-platform: gui style props only — no Tailwind class strings, no Radix,
|
|
26
|
+
* no DOM APIs beyond the `data-slot` markers every gui backend component uses
|
|
27
|
+
* to publish its parts for CSS and tests.
|
|
28
|
+
*/
|
|
29
|
+
import * as React from 'react';
|
|
30
|
+
import { Menu, Text, XStack } from '@hanzo/gui';
|
|
31
|
+
import { Check, ChevronRight, Circle } from '@hanzogui/lucide-icons-2';
|
|
32
|
+
import { touch } from './gesture.js';
|
|
33
|
+
import { ink } from './ink.js';
|
|
34
|
+
import { slot } from './slot.js';
|
|
35
|
+
import { PortalTheme, useThemeName } from '../../product/menu/portal-theme.js';
|
|
36
|
+
// ── Geometry — the one menu design, restated (module-private in the siblings) ──
|
|
37
|
+
const ROW_H = 32;
|
|
38
|
+
const TAP_MIN = 44;
|
|
39
|
+
const ROW_PX = 8;
|
|
40
|
+
const MIN_W = 192;
|
|
41
|
+
const INSET_PL = 32;
|
|
42
|
+
const INDICATOR_SLOT = 14;
|
|
43
|
+
const ICON = 16;
|
|
44
|
+
const BAR_H = 40;
|
|
45
|
+
const panel = {
|
|
46
|
+
bg: '$panel',
|
|
47
|
+
borderColor: '$borderColor',
|
|
48
|
+
borderWidth: 1,
|
|
49
|
+
rounded: '$4',
|
|
50
|
+
p: 4,
|
|
51
|
+
minW: MIN_W,
|
|
52
|
+
overflow: 'hidden',
|
|
53
|
+
shadowColor: 'rgba(0,0,0,0.45)',
|
|
54
|
+
shadowRadius: 20,
|
|
55
|
+
shadowOffset: { width: 0, height: 10 },
|
|
56
|
+
};
|
|
57
|
+
const row = {
|
|
58
|
+
items: 'center',
|
|
59
|
+
gap: ROW_PX,
|
|
60
|
+
px: ROW_PX,
|
|
61
|
+
minH: ROW_H,
|
|
62
|
+
rounded: '$3',
|
|
63
|
+
select: 'none',
|
|
64
|
+
cursor: 'pointer',
|
|
65
|
+
...touch(ROW_H, TAP_MIN, 'y'),
|
|
66
|
+
hoverStyle: { bg: '$raised' },
|
|
67
|
+
focusStyle: { bg: '$raised' },
|
|
68
|
+
pressStyle: { bg: '$rim' },
|
|
69
|
+
};
|
|
70
|
+
/** Row text style — free-form children go through `ink()` so a bare string renders on native. */
|
|
71
|
+
const label = { size: '$2', color: '$ink' };
|
|
72
|
+
/** Trigger text style — same type scale, medium weight to read as a menu title. */
|
|
73
|
+
const triggerLabel = { size: '$2', color: '$ink', fontWeight: '500' };
|
|
74
|
+
/** Left indicator well shared by checkbox + radio rows. */
|
|
75
|
+
const Indicator = ({ children }) => (_jsx(XStack, { position: "absolute", l: ROW_PX, width: INDICATOR_SLOT, height: INDICATOR_SLOT, items: "center", justify: "center", pointerEvents: "none", children: _jsx(Menu.ItemIndicator, { children: children }) }));
|
|
76
|
+
const MenubarContext = /* @__PURE__ */ React.createContext(null);
|
|
77
|
+
/** Which menu a `MenubarMenu` is, read by its `MenubarTrigger`. */
|
|
78
|
+
const MenubarMenuIdContext = /* @__PURE__ */ React.createContext(null);
|
|
79
|
+
// gui puts popper geometry (`offset`, `placement`) on the `Menu` ROOT, while the
|
|
80
|
+
// compound API puts `sideOffset`/`align` on `Content` — one value, one owner:
|
|
81
|
+
// the root holds it, Content publishes into it via these two contexts, freshly
|
|
82
|
+
// scoped per `MenubarMenu` instance. Same split as `dropdown-menu.tsx`.
|
|
83
|
+
const OffsetContext = /* @__PURE__ */ React.createContext(null);
|
|
84
|
+
const PlacementContext = /* @__PURE__ */ React.createContext(null);
|
|
85
|
+
const DEFAULT_OFFSET = 8;
|
|
86
|
+
function Menubar({ value, defaultValue, onValueChange, children, ...props }) {
|
|
87
|
+
const [uncontrolled, setUncontrolled] = React.useState(defaultValue);
|
|
88
|
+
const active = value !== undefined ? value : uncontrolled;
|
|
89
|
+
const setValue = React.useCallback((next) => {
|
|
90
|
+
if (value === undefined)
|
|
91
|
+
setUncontrolled(next);
|
|
92
|
+
onValueChange?.(next);
|
|
93
|
+
}, [value, onValueChange]);
|
|
94
|
+
/** Arrow/Home/End rove the triggers; a live menu follows focus onto the next one. */
|
|
95
|
+
const onKeyDown = (event) => {
|
|
96
|
+
if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key))
|
|
97
|
+
return;
|
|
98
|
+
const root = event.currentTarget;
|
|
99
|
+
const triggers = [...root.querySelectorAll('[data-slot="menubar-trigger"]')];
|
|
100
|
+
const at = triggers.indexOf(document.activeElement);
|
|
101
|
+
if (at === -1)
|
|
102
|
+
return;
|
|
103
|
+
event.preventDefault();
|
|
104
|
+
const next = event.key === 'Home'
|
|
105
|
+
? 0
|
|
106
|
+
: event.key === 'End'
|
|
107
|
+
? triggers.length - 1
|
|
108
|
+
: event.key === 'ArrowRight'
|
|
109
|
+
? (at + 1) % triggers.length
|
|
110
|
+
: (at - 1 + triggers.length) % triggers.length;
|
|
111
|
+
triggers[next]?.focus();
|
|
112
|
+
if (active !== undefined)
|
|
113
|
+
setValue(triggers[next]?.dataset.menubarValue);
|
|
114
|
+
};
|
|
115
|
+
return (_jsx(MenubarContext.Provider, { value: { value: active, setValue }, children: _jsx(XStack, { ...slot('menubar'), role: "menubar", items: "center", gap: 4, p: 4, minH: BAR_H, rounded: "$4", borderWidth: 1, borderColor: "$borderColor", bg: "$background", onKeyDown: onKeyDown, ...props, children: children }) }));
|
|
116
|
+
}
|
|
117
|
+
function MenubarMenu({ value, children, ...props }) {
|
|
118
|
+
const root = React.useContext(MenubarContext);
|
|
119
|
+
const auto = React.useId();
|
|
120
|
+
const id = value ?? auto;
|
|
121
|
+
const [offset, setOffset] = React.useState(DEFAULT_OFFSET);
|
|
122
|
+
const [placement, setPlacement] = React.useState(undefined);
|
|
123
|
+
return (_jsx(MenubarMenuIdContext.Provider, { value: id, children: _jsx(OffsetContext.Provider, { value: setOffset, children: _jsx(PlacementContext.Provider, { value: setPlacement, children: _jsx(Menu, { open: root ? root.value === id : undefined, onOpenChange: (open) => root?.setValue(open ? id : undefined), offset: offset, ...(placement ? { placement } : null), ...props, children: children }) }) }) }));
|
|
124
|
+
}
|
|
125
|
+
const MenubarTrigger = /* @__PURE__ */ React.forwardRef(function MenubarTrigger({ children, onMouseEnter, ...props }, ref) {
|
|
126
|
+
const root = React.useContext(MenubarContext);
|
|
127
|
+
const id = React.useContext(MenubarMenuIdContext);
|
|
128
|
+
const open = root != null && id != null && root.value === id;
|
|
129
|
+
return (_jsx(Menu.Trigger, { ref: ref, ...slot('menubar-trigger'), "data-menubar-value": id ?? undefined, "data-state": open ? 'open' : 'closed', tabIndex: 0, items: "center", select: "none", cursor: "pointer", px: 12, minH: ROW_H, rounded: "$3", bg: open ? '$raised' : 'transparent', hoverStyle: { bg: '$raised' }, focusStyle: { bg: '$raised' }, ...touch(ROW_H, TAP_MIN, 'y'), onMouseEnter: (event) => {
|
|
130
|
+
if (root?.value !== undefined && id != null)
|
|
131
|
+
root.setValue(id);
|
|
132
|
+
onMouseEnter?.(event);
|
|
133
|
+
}, ...props, children: ink(children, undefined, triggerLabel) }));
|
|
134
|
+
});
|
|
135
|
+
/** `align`, as the suffix of the floating-ui placement string the root's `Menu` reads. */
|
|
136
|
+
const placementFor = (align) => align && align !== 'center' ? `bottom-${align}` : 'bottom';
|
|
137
|
+
const MenubarContent = /* @__PURE__ */ React.forwardRef(function MenubarContent({ sideOffset = DEFAULT_OFFSET, align = 'start', children, ...props }, ref) {
|
|
138
|
+
const themeName = useThemeName();
|
|
139
|
+
const setOffset = React.useContext(OffsetContext);
|
|
140
|
+
const setPlacement = React.useContext(PlacementContext);
|
|
141
|
+
React.useEffect(() => setOffset?.(sideOffset), [setOffset, sideOffset]);
|
|
142
|
+
React.useEffect(() => setPlacement?.(placementFor(align)), [setPlacement, align]);
|
|
143
|
+
return (_jsx(Menu.Portal, { children: _jsx(PortalTheme, { name: themeName, children: _jsx(Menu.Content, { ref: ref, ...slot('menubar-content'), ...panel, ...props, children: children }) }) }));
|
|
144
|
+
});
|
|
145
|
+
const MenubarSubContent = /* @__PURE__ */ React.forwardRef(function MenubarSubContent(props, ref) {
|
|
146
|
+
return _jsx(Menu.SubContent, { ref: ref, ...slot('menubar-sub-content'), ...panel, ...props });
|
|
147
|
+
});
|
|
148
|
+
const MenubarItem = /* @__PURE__ */ React.forwardRef(function MenubarItem({ inset, variant = 'default', disabled, children, ...props }, ref) {
|
|
149
|
+
return (_jsx(Menu.Item, { ref: ref, ...slot('menubar-item'), "data-inset": inset, "data-variant": variant, disabled: disabled, ...row, pl: inset ? INSET_PL : ROW_PX, theme: variant === 'destructive' ? 'red' : undefined, opacity: disabled ? 0.5 : 1, cursor: disabled ? 'default' : 'pointer', ...props, children: ink(children, undefined, label) }));
|
|
150
|
+
});
|
|
151
|
+
const MenubarCheckboxItem = /* @__PURE__ */ React.forwardRef(function MenubarCheckboxItem({ children, checked, ...props }, ref) {
|
|
152
|
+
return (_jsxs(Menu.CheckboxItem, { ref: ref, ...slot('menubar-checkbox-item'), checked: checked, ...row, pl: INSET_PL, ...props, children: [_jsx(Indicator, { children: _jsx(Check, { size: ICON }) }), ink(children, undefined, label)] }));
|
|
153
|
+
});
|
|
154
|
+
const MenubarRadioItem = /* @__PURE__ */ React.forwardRef(function MenubarRadioItem({ children, value, ...props }, ref) {
|
|
155
|
+
return (_jsxs(Menu.RadioItem, { ref: ref, ...slot('menubar-radio-item'), value: value, ...row, pl: INSET_PL, ...props, children: [_jsx(Indicator, { children: _jsx(Circle, { size: 8, fill: "currentColor" }) }), ink(children, undefined, label)] }));
|
|
156
|
+
});
|
|
157
|
+
const MenubarSubTrigger = /* @__PURE__ */ React.forwardRef(function MenubarSubTrigger({ inset, children, ...props }, ref) {
|
|
158
|
+
return (_jsxs(Menu.SubTrigger, { ref: ref, ...slot('menubar-sub-trigger'), "data-inset": inset, ...row, pl: inset ? INSET_PL : ROW_PX, ...props, children: [ink(children, undefined, label), _jsx(ChevronRight, { size: ICON, ml: "auto", opacity: 0.6 })] }));
|
|
159
|
+
});
|
|
160
|
+
// ── Static rows ─────────────────────────────────────────────────────────────────
|
|
161
|
+
const MenubarLabel = /* @__PURE__ */ React.forwardRef(function MenubarLabel({ inset, ...props }, ref) {
|
|
162
|
+
return (_jsx(Menu.Label, { ref: ref, ...slot('menubar-label'), "data-inset": inset, px: ROW_PX, py: 4, pl: inset ? INSET_PL : ROW_PX, fontSize: "$2", fontWeight: "500", color: "$ink", select: "none", ...props }));
|
|
163
|
+
});
|
|
164
|
+
const MenubarSeparator = /* @__PURE__ */ React.forwardRef(function MenubarSeparator(props, ref) {
|
|
165
|
+
return (_jsx(Menu.Separator, { ref: ref, ...slot('menubar-separator'), height: 1, bg: "$borderColor", mx: 4, my: 4, ...props }));
|
|
166
|
+
});
|
|
167
|
+
/** Right-aligned shortcut hint. gui `Text`, not a raw `<span>`, so it renders on native. */
|
|
168
|
+
function MenubarShortcut(props) {
|
|
169
|
+
return (_jsx(Text, { ...slot('menubar-shortcut'), ml: "auto", fontSize: "$1", letterSpacing: 1, color: "$quiet", ...props }));
|
|
170
|
+
}
|
|
171
|
+
// ── Passthroughs — the gui part already IS the part ─────────────────────────────
|
|
172
|
+
const MenubarGroup = Menu.Group;
|
|
173
|
+
const MenubarPortal = Menu.Portal;
|
|
174
|
+
const MenubarSub = Menu.Sub;
|
|
175
|
+
const MenubarRadioGroup = Menu.RadioGroup;
|
|
176
|
+
export { Menubar, MenubarMenu, MenubarTrigger, MenubarContent, MenubarItem, MenubarCheckboxItem, MenubarRadioItem, MenubarLabel, MenubarSeparator, MenubarShortcut, MenubarGroup, MenubarPortal, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarRadioGroup, };
|
|
177
|
+
//# sourceMappingURL=menubar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menubar.js","sourceRoot":"","sources":["../../../src/backends/gui/menubar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
'use client';"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.MessageDock = MessageDock;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* MessageDock — a fixed stack of dismissable status cards, anchored to a
|
|
8
|
+
* corner or edge of the viewport (`top`, `bottom`, `top-right`, `bottom-right`).
|
|
9
|
+
*
|
|
10
|
+
* Unlike `Toaster` (a queue driven through an imperative `toast()` call), a
|
|
11
|
+
* dock is fully controlled: the caller owns the `messages` array and decides
|
|
12
|
+
* what survives a close. Each card carries a `type` — `info`, `success`,
|
|
13
|
+
* `warning` or `error` — that tints its border and background the way
|
|
14
|
+
* `Banner`'s variant ladder does; an untyped message renders on the plain
|
|
15
|
+
* surface tokens. `onClose` only reports which id was dismissed, the same
|
|
16
|
+
* contract `Banner.onClose` uses — the dock itself holds no visibility state.
|
|
17
|
+
*/
|
|
18
|
+
const gui_1 = require("@hanzo/gui");
|
|
19
|
+
const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
|
|
20
|
+
const ink_1 = require("./ink.cjs");
|
|
21
|
+
const slot_1 = require("./slot.cjs");
|
|
22
|
+
const gesture_1 = require("./gesture.cjs");
|
|
23
|
+
const button_1 = require("./button.cjs");
|
|
24
|
+
const CLOSE = 24;
|
|
25
|
+
const CARD_MIN_WIDTH = 300;
|
|
26
|
+
const CardContext = /* @__PURE__ */ (0, gui_1.createStyledContext)({
|
|
27
|
+
type: 'default',
|
|
28
|
+
});
|
|
29
|
+
const DockFrame = (0, gui_1.styled)(gui_1.YStack, {
|
|
30
|
+
name: 'MessageDock',
|
|
31
|
+
position: 'fixed',
|
|
32
|
+
gap: '$2',
|
|
33
|
+
z: 50,
|
|
34
|
+
// Named `anchor`, not `position`: gui's own `position` prop is the CSS
|
|
35
|
+
// property (`fixed` above), and a variant sharing that name would fight it —
|
|
36
|
+
// the same reason `dock.tsx` calls its edge variant `edge`.
|
|
37
|
+
variants: {
|
|
38
|
+
anchor: {
|
|
39
|
+
top: { t: '$4', l: '50%', style: { transform: 'translateX(-50%)' } },
|
|
40
|
+
bottom: { b: '$4', l: '50%', style: { transform: 'translateX(-50%)' } },
|
|
41
|
+
'top-right': { t: '$4', r: '$4' },
|
|
42
|
+
'bottom-right': { b: '$4', r: '$4' },
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
defaultVariants: { anchor: 'bottom-right' },
|
|
46
|
+
});
|
|
47
|
+
const CardFrame = (0, gui_1.styled)(gui_1.YStack, {
|
|
48
|
+
name: 'MessageDockCard',
|
|
49
|
+
context: CardContext,
|
|
50
|
+
position: 'relative',
|
|
51
|
+
minW: CARD_MIN_WIDTH,
|
|
52
|
+
rounded: '$4',
|
|
53
|
+
borderWidth: 1,
|
|
54
|
+
borderColor: '$borderColor',
|
|
55
|
+
bg: '$background',
|
|
56
|
+
p: '$4',
|
|
57
|
+
shadowColor: '$dim',
|
|
58
|
+
shadowRadius: 16,
|
|
59
|
+
shadowOpacity: 0.2,
|
|
60
|
+
variants: {
|
|
61
|
+
type: {
|
|
62
|
+
default: {},
|
|
63
|
+
info: { borderColor: '$blue9', bg: '$blue2' },
|
|
64
|
+
success: { borderColor: '$green9', bg: '$green2' },
|
|
65
|
+
warning: { borderColor: '$yellow9', bg: '$yellow2' },
|
|
66
|
+
error: { borderColor: '$red9', bg: '$red2' },
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
defaultVariants: { type: 'default' },
|
|
70
|
+
});
|
|
71
|
+
const CardTitle = (0, gui_1.styled)(gui_1.SizableText, {
|
|
72
|
+
name: 'MessageDockCardTitle',
|
|
73
|
+
context: CardContext,
|
|
74
|
+
render: 'h4',
|
|
75
|
+
size: '$3',
|
|
76
|
+
fontWeight: '500',
|
|
77
|
+
color: '$ink',
|
|
78
|
+
variants: {
|
|
79
|
+
type: {
|
|
80
|
+
default: {},
|
|
81
|
+
info: { color: '$blue12' },
|
|
82
|
+
success: { color: '$green12' },
|
|
83
|
+
warning: { color: '$yellow12' },
|
|
84
|
+
error: { color: '$red12' },
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
const CardDescription = (0, gui_1.styled)(gui_1.SizableText, {
|
|
89
|
+
name: 'MessageDockCardDescription',
|
|
90
|
+
context: CardContext,
|
|
91
|
+
render: 'div',
|
|
92
|
+
size: '$2',
|
|
93
|
+
mt: '$1',
|
|
94
|
+
color: '$quiet',
|
|
95
|
+
variants: {
|
|
96
|
+
type: {
|
|
97
|
+
default: {},
|
|
98
|
+
info: { color: '$blue11' },
|
|
99
|
+
success: { color: '$green11' },
|
|
100
|
+
warning: { color: '$yellow11' },
|
|
101
|
+
error: { color: '$red11' },
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
function MessageDock({ messages, onClose, position = 'bottom-right', ...props }) {
|
|
106
|
+
const resolved = position ?? 'bottom-right';
|
|
107
|
+
return ((0, jsx_runtime_1.jsx)(DockFrame, { ...(0, slot_1.slot)('message-dock'), "data-position": resolved, anchor: resolved, ...props, children: messages.map((message) => {
|
|
108
|
+
const type = message.type ?? 'default';
|
|
109
|
+
return ((0, jsx_runtime_1.jsx)(CardFrame, { ...(0, slot_1.slot)('message-dock-card'), "data-message-id": message.id, "data-type": type, type: type, role: "status", children: (0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "flex-start", justify: "space-between", gap: "$4", children: [(0, jsx_runtime_1.jsxs)(gui_1.YStack, { flex: 1, pr: onClose ? CLOSE : 0, children: [(0, jsx_runtime_1.jsx)(CardTitle, { type: type, ...(0, slot_1.slot)('message-dock-card-title'), children: (0, ink_1.ink)(message.title) }), message.description ? ((0, jsx_runtime_1.jsx)(CardDescription, { type: type, ...(0, slot_1.slot)('message-dock-card-description'), children: (0, ink_1.ink)(message.description) })) : null] }), onClose ? ((0, jsx_runtime_1.jsx)(button_1.Button, { ...(0, slot_1.slot)('message-dock-card-close'), variant: "ghost", size: "icon", minH: CLOSE, minW: CLOSE, ...(0, gesture_1.touch)(CLOSE), position: "absolute", t: "$3", r: "$3", "aria-label": "Close", onPress: () => onClose(message.id), children: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.X, { size: 16 }) })) : null] }) }, message.id));
|
|
110
|
+
}) }));
|
|
111
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ComponentProps } from 'react';
|
|
2
|
+
export type MessageDockMessageType = 'info' | 'success' | 'warning' | 'error';
|
|
3
|
+
export type MessageDockMessage = {
|
|
4
|
+
id: string;
|
|
5
|
+
type?: MessageDockMessageType;
|
|
6
|
+
title: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
};
|
|
9
|
+
export type MessageDockPosition = 'top' | 'bottom' | 'top-right' | 'bottom-right';
|
|
10
|
+
declare const DockFrame: import("@hanzogui/web").GuiComponent<import("@hanzogui/web").TamaDefer, import("@hanzogui/web").GuiElement, import("@hanzogui/core").RNGuiViewNonStyleProps, import("@hanzogui/web").StackStyleBase, {
|
|
11
|
+
anchor?: "bottom" | "bottom-right" | "top" | "top-right" | undefined;
|
|
12
|
+
elevation?: number | import("@hanzogui/web").SizeTokens | undefined;
|
|
13
|
+
fullscreen?: boolean | undefined;
|
|
14
|
+
}, import("@hanzogui/web").StaticConfigPublic>;
|
|
15
|
+
export type MessageDockProps = Omit<ComponentProps<typeof DockFrame>, 'anchor' | 'position' | 'children'> & {
|
|
16
|
+
messages: MessageDockMessage[];
|
|
17
|
+
onClose?: (id: string) => void;
|
|
18
|
+
position?: MessageDockPosition | null;
|
|
19
|
+
};
|
|
20
|
+
declare function MessageDock({ messages, onClose, position, ...props }: MessageDockProps): import("react").JSX.Element;
|
|
21
|
+
export { MessageDock };
|
|
22
|
+
//# sourceMappingURL=message-dock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-dock.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/message-dock.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAM3C,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;AAE7E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,sBAAsB,CAAA;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,GAAG,cAAc,CAAA;AASjF,QAAA,MAAM,SAAS;;;;8CAmBb,CAAA;AAuEF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC,GAAG;IAC1G,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IAC9B,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,QAAQ,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAA;CACtC,CAAA;AAED,iBAAS,WAAW,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAyB,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,+BAiDhG;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* MessageDock — a fixed stack of dismissable status cards, anchored to a
|
|
5
|
+
* corner or edge of the viewport (`top`, `bottom`, `top-right`, `bottom-right`).
|
|
6
|
+
*
|
|
7
|
+
* Unlike `Toaster` (a queue driven through an imperative `toast()` call), a
|
|
8
|
+
* dock is fully controlled: the caller owns the `messages` array and decides
|
|
9
|
+
* what survives a close. Each card carries a `type` — `info`, `success`,
|
|
10
|
+
* `warning` or `error` — that tints its border and background the way
|
|
11
|
+
* `Banner`'s variant ladder does; an untyped message renders on the plain
|
|
12
|
+
* surface tokens. `onClose` only reports which id was dismissed, the same
|
|
13
|
+
* contract `Banner.onClose` uses — the dock itself holds no visibility state.
|
|
14
|
+
*/
|
|
15
|
+
import { XStack, YStack, SizableText, createStyledContext, styled } from '@hanzo/gui';
|
|
16
|
+
import { X } from '@hanzogui/lucide-icons-2';
|
|
17
|
+
import { ink } from './ink.js';
|
|
18
|
+
import { slot } from './slot.js';
|
|
19
|
+
import { touch } from './gesture.js';
|
|
20
|
+
import { Button } from './button.js';
|
|
21
|
+
const CLOSE = 24;
|
|
22
|
+
const CARD_MIN_WIDTH = 300;
|
|
23
|
+
const CardContext = /* @__PURE__ */ createStyledContext({
|
|
24
|
+
type: 'default',
|
|
25
|
+
});
|
|
26
|
+
const DockFrame = styled(YStack, {
|
|
27
|
+
name: 'MessageDock',
|
|
28
|
+
position: 'fixed',
|
|
29
|
+
gap: '$2',
|
|
30
|
+
z: 50,
|
|
31
|
+
// Named `anchor`, not `position`: gui's own `position` prop is the CSS
|
|
32
|
+
// property (`fixed` above), and a variant sharing that name would fight it —
|
|
33
|
+
// the same reason `dock.tsx` calls its edge variant `edge`.
|
|
34
|
+
variants: {
|
|
35
|
+
anchor: {
|
|
36
|
+
top: { t: '$4', l: '50%', style: { transform: 'translateX(-50%)' } },
|
|
37
|
+
bottom: { b: '$4', l: '50%', style: { transform: 'translateX(-50%)' } },
|
|
38
|
+
'top-right': { t: '$4', r: '$4' },
|
|
39
|
+
'bottom-right': { b: '$4', r: '$4' },
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
defaultVariants: { anchor: 'bottom-right' },
|
|
43
|
+
});
|
|
44
|
+
const CardFrame = styled(YStack, {
|
|
45
|
+
name: 'MessageDockCard',
|
|
46
|
+
context: CardContext,
|
|
47
|
+
position: 'relative',
|
|
48
|
+
minW: CARD_MIN_WIDTH,
|
|
49
|
+
rounded: '$4',
|
|
50
|
+
borderWidth: 1,
|
|
51
|
+
borderColor: '$borderColor',
|
|
52
|
+
bg: '$background',
|
|
53
|
+
p: '$4',
|
|
54
|
+
shadowColor: '$dim',
|
|
55
|
+
shadowRadius: 16,
|
|
56
|
+
shadowOpacity: 0.2,
|
|
57
|
+
variants: {
|
|
58
|
+
type: {
|
|
59
|
+
default: {},
|
|
60
|
+
info: { borderColor: '$blue9', bg: '$blue2' },
|
|
61
|
+
success: { borderColor: '$green9', bg: '$green2' },
|
|
62
|
+
warning: { borderColor: '$yellow9', bg: '$yellow2' },
|
|
63
|
+
error: { borderColor: '$red9', bg: '$red2' },
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
defaultVariants: { type: 'default' },
|
|
67
|
+
});
|
|
68
|
+
const CardTitle = styled(SizableText, {
|
|
69
|
+
name: 'MessageDockCardTitle',
|
|
70
|
+
context: CardContext,
|
|
71
|
+
render: 'h4',
|
|
72
|
+
size: '$3',
|
|
73
|
+
fontWeight: '500',
|
|
74
|
+
color: '$ink',
|
|
75
|
+
variants: {
|
|
76
|
+
type: {
|
|
77
|
+
default: {},
|
|
78
|
+
info: { color: '$blue12' },
|
|
79
|
+
success: { color: '$green12' },
|
|
80
|
+
warning: { color: '$yellow12' },
|
|
81
|
+
error: { color: '$red12' },
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
const CardDescription = styled(SizableText, {
|
|
86
|
+
name: 'MessageDockCardDescription',
|
|
87
|
+
context: CardContext,
|
|
88
|
+
render: 'div',
|
|
89
|
+
size: '$2',
|
|
90
|
+
mt: '$1',
|
|
91
|
+
color: '$quiet',
|
|
92
|
+
variants: {
|
|
93
|
+
type: {
|
|
94
|
+
default: {},
|
|
95
|
+
info: { color: '$blue11' },
|
|
96
|
+
success: { color: '$green11' },
|
|
97
|
+
warning: { color: '$yellow11' },
|
|
98
|
+
error: { color: '$red11' },
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
function MessageDock({ messages, onClose, position = 'bottom-right', ...props }) {
|
|
103
|
+
const resolved = position ?? 'bottom-right';
|
|
104
|
+
return (_jsx(DockFrame, { ...slot('message-dock'), "data-position": resolved, anchor: resolved, ...props, children: messages.map((message) => {
|
|
105
|
+
const type = message.type ?? 'default';
|
|
106
|
+
return (_jsx(CardFrame, { ...slot('message-dock-card'), "data-message-id": message.id, "data-type": type, type: type, role: "status", children: _jsxs(XStack, { items: "flex-start", justify: "space-between", gap: "$4", children: [_jsxs(YStack, { flex: 1, pr: onClose ? CLOSE : 0, children: [_jsx(CardTitle, { type: type, ...slot('message-dock-card-title'), children: ink(message.title) }), message.description ? (_jsx(CardDescription, { type: type, ...slot('message-dock-card-description'), children: ink(message.description) })) : null] }), onClose ? (_jsx(Button, { ...slot('message-dock-card-close'), variant: "ghost", size: "icon", minH: CLOSE, minW: CLOSE, ...touch(CLOSE), position: "absolute", t: "$3", r: "$3", "aria-label": "Close", onPress: () => onClose(message.id), children: _jsx(X, { size: 16 }) })) : null] }) }, message.id));
|
|
107
|
+
}) }));
|
|
108
|
+
}
|
|
109
|
+
export { MessageDock };
|
|
110
|
+
//# sourceMappingURL=message-dock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-dock.js","sourceRoot":"","sources":["../../../src/backends/gui/message-dock.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use client';"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.MiniCalendar = MiniCalendar;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* MiniCalendar — a single compact month, framed, for picking one day.
|
|
8
|
+
*
|
|
9
|
+
* A thin shell around `Calendar` (`mode="single"`, one month, no outside days):
|
|
10
|
+
* the month arithmetic, the day grid, and the keyboard already live there, so
|
|
11
|
+
* this only fixes the shape a small inline picker needs — a 256px bordered
|
|
12
|
+
* frame — and narrows the props to the one date a caller actually gets back.
|
|
13
|
+
* `month`/`onMonthChange` pass straight through for a caller that pages the
|
|
14
|
+
* view without changing the pick.
|
|
15
|
+
*/
|
|
16
|
+
const gui_1 = require("@hanzo/gui");
|
|
17
|
+
const sx_1 = require("../../sx.cjs");
|
|
18
|
+
const calendar_1 = require("./calendar.cjs");
|
|
19
|
+
const slot_1 = require("./slot.cjs");
|
|
20
|
+
function MiniCalendar({ className, selected, onSelect, month, onMonthChange, ...props }) {
|
|
21
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('mini-calendar'), width: 256, borderWidth: 1, borderColor: "$borderColor", rounded: "$4", ...(0, sx_1.sx)(className), ...props, children: (0, jsx_runtime_1.jsx)(calendar_1.Calendar, { mode: "single", showOutsideDays: false, selected: selected,
|
|
22
|
+
// A pick always hands back a day; re-pressing the selected day is a
|
|
23
|
+
// no-op rather than the full Calendar's clear-on-repeat.
|
|
24
|
+
onSelect: (date) => date && onSelect?.(date), month: month, onMonthChange: onMonthChange }) }));
|
|
25
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MiniCalendar — a single compact month, framed, for picking one day.
|
|
3
|
+
*
|
|
4
|
+
* A thin shell around `Calendar` (`mode="single"`, one month, no outside days):
|
|
5
|
+
* the month arithmetic, the day grid, and the keyboard already live there, so
|
|
6
|
+
* this only fixes the shape a small inline picker needs — a 256px bordered
|
|
7
|
+
* frame — and narrows the props to the one date a caller actually gets back.
|
|
8
|
+
* `month`/`onMonthChange` pass straight through for a caller that pages the
|
|
9
|
+
* view without changing the pick.
|
|
10
|
+
*/
|
|
11
|
+
import { type YStackProps } from '@hanzo/gui';
|
|
12
|
+
export interface MiniCalendarProps extends Omit<YStackProps, 'onSelect'> {
|
|
13
|
+
/** The picked day. */
|
|
14
|
+
selected?: Date;
|
|
15
|
+
onSelect?: (date: Date) => void;
|
|
16
|
+
/** The month shown, controlled. Uncontrolled starts at today's. */
|
|
17
|
+
month?: Date;
|
|
18
|
+
onMonthChange?: (month: Date) => void;
|
|
19
|
+
}
|
|
20
|
+
declare function MiniCalendar({ className, selected, onSelect, month, onMonthChange, ...props }: MiniCalendarProps): import("react").JSX.Element;
|
|
21
|
+
export { MiniCalendar };
|
|
22
|
+
//# sourceMappingURL=mini-calendar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mini-calendar.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/mini-calendar.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAMrD,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IACtE,sBAAsB;IACtB,QAAQ,CAAC,EAAE,IAAI,CAAA;IACf,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAC/B,mEAAmE;IACnE,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAA;CACtC;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,+BAuBzG;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
|