@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,22 @@
|
|
|
1
|
+
'use client';"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Tags = Tags;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* Tags — a wrapping row of removable labels, built on `Badge`.
|
|
8
|
+
*
|
|
9
|
+
* Each entry is a plain `{ id, label }`; passing `onRemove` grows the badge a
|
|
10
|
+
* close button that reports which entry was pressed. The list carries no
|
|
11
|
+
* state of its own — whether an entry actually leaves is the caller's call,
|
|
12
|
+
* same contract as `Banner`'s `onClose`.
|
|
13
|
+
*/
|
|
14
|
+
const gui_1 = require("@hanzo/gui");
|
|
15
|
+
const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
|
|
16
|
+
const badge_1 = require("./badge.cjs");
|
|
17
|
+
const slot_1 = require("./slot.cjs");
|
|
18
|
+
const gesture_1 = require("./gesture.cjs");
|
|
19
|
+
const REMOVE = 16;
|
|
20
|
+
function Tags({ tags, onRemove, variant = 'default', ...props }) {
|
|
21
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('tags'), flexWrap: "wrap", gap: "$2", ...props, children: tags.map((tag) => ((0, jsx_runtime_1.jsxs)(badge_1.Badge, { variant: variant, children: [tag.label, onRemove ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('tags-remove'), render: "button", ...{ type: 'button' }, rounded: "$10", items: "center", justify: "center", cursor: "pointer", opacity: 0.7, hoverStyle: { opacity: 1, bg: '$hover' }, ...(0, gesture_1.touch)(REMOVE), "aria-label": `Remove ${tag.label}`, onPress: () => onRemove(tag.id), children: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.X, { size: 12 }) })) : null] }, tag.id))) }));
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tags — a wrapping row of removable labels, built on `Badge`.
|
|
3
|
+
*
|
|
4
|
+
* Each entry is a plain `{ id, label }`; passing `onRemove` grows the badge a
|
|
5
|
+
* close button that reports which entry was pressed. The list carries no
|
|
6
|
+
* state of its own — whether an entry actually leaves is the caller's call,
|
|
7
|
+
* same contract as `Banner`'s `onClose`.
|
|
8
|
+
*/
|
|
9
|
+
import { XStack } from '@hanzo/gui';
|
|
10
|
+
import type { ComponentProps } from 'react';
|
|
11
|
+
import { type BadgeVariant } from './badge.js';
|
|
12
|
+
export type Tag = {
|
|
13
|
+
id: string;
|
|
14
|
+
label: string;
|
|
15
|
+
};
|
|
16
|
+
export type TagsProps = Omit<ComponentProps<typeof XStack>, 'children'> & {
|
|
17
|
+
tags: Tag[];
|
|
18
|
+
onRemove?: (id: string) => void;
|
|
19
|
+
variant?: BadgeVariant | null;
|
|
20
|
+
};
|
|
21
|
+
export declare function Tags({ tags, onRemove, variant, ...props }: TagsProps): import("react").JSX.Element;
|
|
22
|
+
//# sourceMappingURL=tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/tags.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,SAAS,CAAA;AAIlD,MAAM,MAAM,GAAG,GAAG;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IACxE,IAAI,EAAE,GAAG,EAAE,CAAA;IACX,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;CAC9B,CAAA;AAID,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAmB,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,+BA4BhF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Tags — a wrapping row of removable labels, built on `Badge`.
|
|
5
|
+
*
|
|
6
|
+
* Each entry is a plain `{ id, label }`; passing `onRemove` grows the badge a
|
|
7
|
+
* close button that reports which entry was pressed. The list carries no
|
|
8
|
+
* state of its own — whether an entry actually leaves is the caller's call,
|
|
9
|
+
* same contract as `Banner`'s `onClose`.
|
|
10
|
+
*/
|
|
11
|
+
import { XStack } from '@hanzo/gui';
|
|
12
|
+
import { X } from '@hanzogui/lucide-icons-2';
|
|
13
|
+
import { Badge } from './badge.js';
|
|
14
|
+
import { slot } from './slot.js';
|
|
15
|
+
import { touch } from './gesture.js';
|
|
16
|
+
const REMOVE = 16;
|
|
17
|
+
export function Tags({ tags, onRemove, variant = 'default', ...props }) {
|
|
18
|
+
return (_jsx(XStack, { ...slot('tags'), flexWrap: "wrap", gap: "$2", ...props, children: tags.map((tag) => (_jsxs(Badge, { variant: variant, children: [tag.label, onRemove ? (_jsx(XStack, { ...slot('tags-remove'), render: "button", ...{ type: 'button' }, rounded: "$10", items: "center", justify: "center", cursor: "pointer", opacity: 0.7, hoverStyle: { opacity: 1, bg: '$hover' }, ...touch(REMOVE), "aria-label": `Remove ${tag.label}`, onPress: () => onRemove(tag.id), children: _jsx(X, { size: 12 }) })) : null] }, tag.id))) }));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../../src/backends/gui/tags.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,CAAC,EAAE,MAAM,0BAA0B,CAAA;AAE5C,OAAO,EAAE,KAAK,EAAqB,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAajC,MAAM,MAAM,GAAG,EAAE,CAAA;AAEjB,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAG,SAAS,EAAE,GAAG,KAAK,EAAa;IAC/E,OAAO,CACL,KAAC,MAAM,OAAK,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,KAAK,KAAK,YACzD,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACjB,MAAC,KAAK,IAAc,OAAO,EAAE,OAAO,aACjC,GAAG,CAAC,KAAK,EACT,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,MAAM,OACD,IAAI,CAAC,aAAa,CAAC,EACvB,MAAM,EAAC,QAAQ,KACV,EAAE,IAAI,EAAE,QAAQ,EAAa,EAClC,OAAO,EAAC,KAAK,EACb,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,QAAQ,EAChB,MAAM,EAAC,SAAS,EAChB,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KACpC,KAAK,CAAC,MAAM,CAAC,gBACL,UAAU,GAAG,CAAC,KAAK,EAAE,EACjC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,YAE/B,KAAC,CAAC,IAAC,IAAI,EAAE,EAAE,GAAI,GACR,CACV,CAAC,CAAC,CAAC,IAAI,KAnBE,GAAG,CAAC,EAAE,CAoBV,CACT,CAAC,GACK,CACV,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use client';"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.TechnicalAnalysis = void 0;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* TechnicalAnalysis — TradingView's technical-indicator summary for one
|
|
8
|
+
* symbol, in a gui frame.
|
|
9
|
+
*
|
|
10
|
+
* The gauges and the moving-average/oscillator tables are TradingView's own,
|
|
11
|
+
* drawn inside TradingView's document, so this is an `<iframe>` and nothing
|
|
12
|
+
* here computes an indicator. What this owns is the frame around it and the
|
|
13
|
+
* settings the widget opens with — symbol, interval, theme, the interval
|
|
14
|
+
* tabs, the single/multiple layout — written into the iframe's address the
|
|
15
|
+
* way TradingView's own embed script writes them:
|
|
16
|
+
* `/embed-widget/technical-analysis/?locale=…#<settings as JSON>`. Nothing is
|
|
17
|
+
* fetched or injected at mount, so the markup is the same on the server and
|
|
18
|
+
* in the browser, and the frame has its height before the widget arrives.
|
|
19
|
+
*
|
|
20
|
+
* The iframe is keyed on that address. A browser treats a `src` that differs
|
|
21
|
+
* only in its fragment as a same-document navigation and does not reload, so
|
|
22
|
+
* without the key a new `symbol` would change the URL and leave the old
|
|
23
|
+
* widget on screen.
|
|
24
|
+
*/
|
|
25
|
+
const gui_1 = require("@hanzo/gui");
|
|
26
|
+
const slot_1 = require("./slot.cjs");
|
|
27
|
+
const EMBED = 'https://www.tradingview-widget.com/embed-widget/technical-analysis/?locale=en#';
|
|
28
|
+
/** The settings TradingView reads, with the documented defaults filled in. */
|
|
29
|
+
const settings = ({ symbol = 'NASDAQ:AAPL', interval = '1D', width = '100%', height = 450, locale = 'en', colorTheme = 'dark', isTransparent = false, showIntervalTabs = true, displayMode = 'single', }) => ({
|
|
30
|
+
symbol,
|
|
31
|
+
interval,
|
|
32
|
+
width,
|
|
33
|
+
height,
|
|
34
|
+
locale,
|
|
35
|
+
colorTheme,
|
|
36
|
+
isTransparent,
|
|
37
|
+
showIntervalTabs,
|
|
38
|
+
displayMode,
|
|
39
|
+
});
|
|
40
|
+
const TechnicalAnalysis = ({ symbol, interval, width, height, locale, colorTheme, isTransparent, showIntervalTabs, displayMode, ...props }) => {
|
|
41
|
+
const s = settings({
|
|
42
|
+
symbol,
|
|
43
|
+
interval,
|
|
44
|
+
width,
|
|
45
|
+
height,
|
|
46
|
+
locale,
|
|
47
|
+
colorTheme,
|
|
48
|
+
isTransparent,
|
|
49
|
+
showIntervalTabs,
|
|
50
|
+
displayMode,
|
|
51
|
+
});
|
|
52
|
+
const src = EMBED + encodeURIComponent(JSON.stringify(s));
|
|
53
|
+
return ((0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('technical-analysis'), "data-symbol": s.symbol, "data-interval": s.interval,
|
|
54
|
+
// The documented size is TradingView's — a number or a percent string —
|
|
55
|
+
// and gui declares a narrower one; on web both reach CSS as written.
|
|
56
|
+
width: s.width, height: s.height, overflow: "hidden", position: "relative", bg: "$panel", ...props, children: gui_1.isWeb && ((0, jsx_runtime_1.jsx)("iframe", { src: src, title: `${s.symbol} technical analysis`, loading: "lazy", scrolling: "no", style: { display: 'block', width: '100%', height: '100%', border: 0 } }, src)) }));
|
|
57
|
+
};
|
|
58
|
+
exports.TechnicalAnalysis = TechnicalAnalysis;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TechnicalAnalysis — TradingView's technical-indicator summary for one
|
|
3
|
+
* symbol, in a gui frame.
|
|
4
|
+
*
|
|
5
|
+
* The gauges and the moving-average/oscillator tables are TradingView's own,
|
|
6
|
+
* drawn inside TradingView's document, so this is an `<iframe>` and nothing
|
|
7
|
+
* here computes an indicator. What this owns is the frame around it and the
|
|
8
|
+
* settings the widget opens with — symbol, interval, theme, the interval
|
|
9
|
+
* tabs, the single/multiple layout — written into the iframe's address the
|
|
10
|
+
* way TradingView's own embed script writes them:
|
|
11
|
+
* `/embed-widget/technical-analysis/?locale=…#<settings as JSON>`. Nothing is
|
|
12
|
+
* fetched or injected at mount, so the markup is the same on the server and
|
|
13
|
+
* in the browser, and the frame has its height before the widget arrives.
|
|
14
|
+
*
|
|
15
|
+
* The iframe is keyed on that address. A browser treats a `src` that differs
|
|
16
|
+
* only in its fragment as a same-document navigation and does not reload, so
|
|
17
|
+
* without the key a new `symbol` would change the URL and leave the old
|
|
18
|
+
* widget on screen.
|
|
19
|
+
*/
|
|
20
|
+
import { type YStackProps } from '@hanzo/gui';
|
|
21
|
+
export type TechnicalAnalysisInterval = '1m' | '5m' | '15m' | '30m' | '1h' | '2h' | '4h' | '1D' | '1W' | '1M';
|
|
22
|
+
export type TechnicalAnalysisTheme = 'light' | 'dark';
|
|
23
|
+
export type TechnicalAnalysisDisplayMode = 'single' | 'multiple';
|
|
24
|
+
export interface TechnicalAnalysisProps extends Omit<YStackProps, 'width' | 'height' | 'theme'> {
|
|
25
|
+
/** The symbol to analyze, exchange-qualified. */
|
|
26
|
+
symbol?: string;
|
|
27
|
+
/** Minutes, hours, or a day/week/month per analysis window. */
|
|
28
|
+
interval?: TechnicalAnalysisInterval;
|
|
29
|
+
width?: string | number;
|
|
30
|
+
height?: string | number;
|
|
31
|
+
locale?: string;
|
|
32
|
+
/** The widget's own palette; independent of the surrounding gui theme. */
|
|
33
|
+
colorTheme?: TechnicalAnalysisTheme;
|
|
34
|
+
isTransparent?: boolean;
|
|
35
|
+
showIntervalTabs?: boolean;
|
|
36
|
+
/** One summary gauge, or the full oscillators/moving-averages breakdown. */
|
|
37
|
+
displayMode?: TechnicalAnalysisDisplayMode;
|
|
38
|
+
}
|
|
39
|
+
declare const TechnicalAnalysis: ({ symbol, interval, width, height, locale, colorTheme, isTransparent, showIntervalTabs, displayMode, ...props }: TechnicalAnalysisProps) => import("react").JSX.Element;
|
|
40
|
+
export { TechnicalAnalysis };
|
|
41
|
+
//# sourceMappingURL=technical-analysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"technical-analysis.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/technical-analysis.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAG5D,MAAM,MAAM,yBAAyB,GACjC,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAA;AAER,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,MAAM,CAAA;AACrD,MAAM,MAAM,4BAA4B,GAAG,QAAQ,GAAG,UAAU,CAAA;AAEhE,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC7F,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,yBAAyB,CAAA;IACpC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0EAA0E;IAC1E,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,4EAA4E;IAC5E,WAAW,CAAC,EAAE,4BAA4B,CAAA;CAC3C;AA2BD,QAAA,MAAM,iBAAiB,oHAWpB,sBAAsB,gCAuCxB,CAAA;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* TechnicalAnalysis — TradingView's technical-indicator summary for one
|
|
5
|
+
* symbol, in a gui frame.
|
|
6
|
+
*
|
|
7
|
+
* The gauges and the moving-average/oscillator tables are TradingView's own,
|
|
8
|
+
* drawn inside TradingView's document, so this is an `<iframe>` and nothing
|
|
9
|
+
* here computes an indicator. What this owns is the frame around it and the
|
|
10
|
+
* settings the widget opens with — symbol, interval, theme, the interval
|
|
11
|
+
* tabs, the single/multiple layout — written into the iframe's address the
|
|
12
|
+
* way TradingView's own embed script writes them:
|
|
13
|
+
* `/embed-widget/technical-analysis/?locale=…#<settings as JSON>`. Nothing is
|
|
14
|
+
* fetched or injected at mount, so the markup is the same on the server and
|
|
15
|
+
* in the browser, and the frame has its height before the widget arrives.
|
|
16
|
+
*
|
|
17
|
+
* The iframe is keyed on that address. A browser treats a `src` that differs
|
|
18
|
+
* only in its fragment as a same-document navigation and does not reload, so
|
|
19
|
+
* without the key a new `symbol` would change the URL and leave the old
|
|
20
|
+
* widget on screen.
|
|
21
|
+
*/
|
|
22
|
+
import { YStack, isWeb } from '@hanzo/gui';
|
|
23
|
+
import { slot } from './slot.js';
|
|
24
|
+
const EMBED = 'https://www.tradingview-widget.com/embed-widget/technical-analysis/?locale=en#';
|
|
25
|
+
/** The settings TradingView reads, with the documented defaults filled in. */
|
|
26
|
+
const settings = ({ symbol = 'NASDAQ:AAPL', interval = '1D', width = '100%', height = 450, locale = 'en', colorTheme = 'dark', isTransparent = false, showIntervalTabs = true, displayMode = 'single', }) => ({
|
|
27
|
+
symbol,
|
|
28
|
+
interval,
|
|
29
|
+
width,
|
|
30
|
+
height,
|
|
31
|
+
locale,
|
|
32
|
+
colorTheme,
|
|
33
|
+
isTransparent,
|
|
34
|
+
showIntervalTabs,
|
|
35
|
+
displayMode,
|
|
36
|
+
});
|
|
37
|
+
const TechnicalAnalysis = ({ symbol, interval, width, height, locale, colorTheme, isTransparent, showIntervalTabs, displayMode, ...props }) => {
|
|
38
|
+
const s = settings({
|
|
39
|
+
symbol,
|
|
40
|
+
interval,
|
|
41
|
+
width,
|
|
42
|
+
height,
|
|
43
|
+
locale,
|
|
44
|
+
colorTheme,
|
|
45
|
+
isTransparent,
|
|
46
|
+
showIntervalTabs,
|
|
47
|
+
displayMode,
|
|
48
|
+
});
|
|
49
|
+
const src = EMBED + encodeURIComponent(JSON.stringify(s));
|
|
50
|
+
return (_jsx(YStack, { ...slot('technical-analysis'), "data-symbol": s.symbol, "data-interval": s.interval,
|
|
51
|
+
// The documented size is TradingView's — a number or a percent string —
|
|
52
|
+
// and gui declares a narrower one; on web both reach CSS as written.
|
|
53
|
+
width: s.width, height: s.height, overflow: "hidden", position: "relative", bg: "$panel", ...props, children: isWeb && (_jsx("iframe", { src: src, title: `${s.symbol} technical analysis`, loading: "lazy", scrolling: "no", style: { display: 'block', width: '100%', height: '100%', border: 0 } }, src)) }));
|
|
54
|
+
};
|
|
55
|
+
export { TechnicalAnalysis };
|
|
56
|
+
//# sourceMappingURL=technical-analysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"technical-analysis.js","sourceRoot":"","sources":["../../../src/backends/gui/technical-analysis.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAoB,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAiC7B,MAAM,KAAK,GAAG,gFAAgF,CAAA;AAE9F,8EAA8E;AAC9E,MAAM,QAAQ,GAAG,CAAC,EAChB,MAAM,GAAG,aAAa,EACtB,QAAQ,GAAG,IAAI,EACf,KAAK,GAAG,MAAM,EACd,MAAM,GAAG,GAAG,EACZ,MAAM,GAAG,IAAI,EACb,UAAU,GAAG,MAAM,EACnB,aAAa,GAAG,KAAK,EACrB,gBAAgB,GAAG,IAAI,EACvB,WAAW,GAAG,QAAQ,GACC,EAAE,EAAE,CAAC,CAAC;IAC7B,MAAM;IACN,QAAQ;IACR,KAAK;IACL,MAAM;IACN,MAAM;IACN,UAAU;IACV,aAAa;IACb,gBAAgB;IAChB,WAAW;CACZ,CAAC,CAAA;AAEF,MAAM,iBAAiB,GAAG,CAAC,EACzB,MAAM,EACN,QAAQ,EACR,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,GAAG,KAAK,EACe,EAAE,EAAE;IAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC;QACjB,MAAM;QACN,QAAQ;QACR,KAAK;QACL,MAAM;QACN,MAAM;QACN,UAAU;QACV,aAAa;QACb,gBAAgB;QAChB,WAAW;KACZ,CAAC,CAAA;IACF,MAAM,GAAG,GAAG,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IACzD,OAAO,CACL,KAAC,MAAM,OACD,IAAI,CAAC,oBAAoB,CAAC,iBACjB,CAAC,CAAC,MAAM,mBACN,CAAC,CAAC,QAAQ;QACzB,wEAAwE;QACxE,qEAAqE;QACrE,KAAK,EAAE,CAAC,CAAC,KAA6B,EACtC,MAAM,EAAE,CAAC,CAAC,MAA+B,EACzC,QAAQ,EAAC,QAAQ,EACjB,QAAQ,EAAC,UAAU,EACnB,EAAE,EAAC,QAAQ,KACP,KAAK,YAER,KAAK,IAAI,CACR,iBAEE,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,GAAG,CAAC,CAAC,MAAM,qBAAqB,EACvC,OAAO,EAAC,MAAM,EACd,SAAS,EAAC,IAAI,EACd,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,IALhE,GAAG,CAMR,CACH,GACM,CACV,CAAA;AACH,CAAC,CAAA;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
'use client';"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.Terminal = Terminal;
|
|
38
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
39
|
+
/**
|
|
40
|
+
* Terminal — an emulated shell: a title bar, a scrolling command history, and
|
|
41
|
+
* one input line. Enter runs a line through `onCommand` (after the built-ins
|
|
42
|
+
* `clear`, `help`, `date`, `echo …`); arrow keys walk the command history; Tab
|
|
43
|
+
* completes from `autoCompleteCommands`; hovering a past command reveals a
|
|
44
|
+
* button that copies it. Four literal palettes (`dark`, `light`, `matrix`,
|
|
45
|
+
* `dracula`) paint the surface — a terminal's colours are the emulator's own,
|
|
46
|
+
* not the host app's theme — and a small set of syntax rules colour strings,
|
|
47
|
+
* keywords, numbers and flags in every line.
|
|
48
|
+
*/
|
|
49
|
+
const gui_1 = require("@hanzo/gui");
|
|
50
|
+
const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
|
|
51
|
+
const React = __importStar(require("react"));
|
|
52
|
+
const slot_1 = require("./slot.cjs");
|
|
53
|
+
const DEFAULT_COMMANDS = ['help', 'clear', 'exit', 'ls', 'cd', 'pwd', 'echo', 'date', 'whoami'];
|
|
54
|
+
const PALETTE = {
|
|
55
|
+
dark: {
|
|
56
|
+
bg: '#111827',
|
|
57
|
+
fg: '#f3f4f6',
|
|
58
|
+
prompt: '#4ade80',
|
|
59
|
+
input: '#ffffff',
|
|
60
|
+
output: '#d1d5db',
|
|
61
|
+
error: '#f87171',
|
|
62
|
+
success: '#4ade80',
|
|
63
|
+
info: '#60a5fa',
|
|
64
|
+
border: '#1f2937',
|
|
65
|
+
},
|
|
66
|
+
light: {
|
|
67
|
+
bg: '#ffffff',
|
|
68
|
+
fg: '#111827',
|
|
69
|
+
prompt: '#2563eb',
|
|
70
|
+
input: '#111827',
|
|
71
|
+
output: '#374151',
|
|
72
|
+
error: '#dc2626',
|
|
73
|
+
success: '#16a34a',
|
|
74
|
+
info: '#2563eb',
|
|
75
|
+
border: '#e5e7eb',
|
|
76
|
+
},
|
|
77
|
+
matrix: {
|
|
78
|
+
bg: '#000000',
|
|
79
|
+
fg: '#4ade80',
|
|
80
|
+
prompt: '#22c55e',
|
|
81
|
+
input: '#86efac',
|
|
82
|
+
output: '#4ade80',
|
|
83
|
+
error: '#ef4444',
|
|
84
|
+
success: '#a3e635',
|
|
85
|
+
info: '#22d3ee',
|
|
86
|
+
border: '#14532d',
|
|
87
|
+
},
|
|
88
|
+
dracula: {
|
|
89
|
+
bg: '#282a36',
|
|
90
|
+
fg: '#f8f8f2',
|
|
91
|
+
prompt: '#50fa7b',
|
|
92
|
+
input: '#f8f8f2',
|
|
93
|
+
output: '#6272a4',
|
|
94
|
+
error: '#ff5555',
|
|
95
|
+
success: '#50fa7b',
|
|
96
|
+
info: '#8be9fd',
|
|
97
|
+
border: '#44475a',
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
/** One colour rule per syntax class, matched left to right, first pattern wins. */
|
|
101
|
+
const SYNTAX = [
|
|
102
|
+
{ regex: /"[^"]*"|'[^']*'/, color: '#facc15' },
|
|
103
|
+
{ regex: /\b(?:true|false|null|undefined)\b/, color: '#fb923c' },
|
|
104
|
+
{ regex: /\b\d+\b/, color: '#c084fc' },
|
|
105
|
+
{ regex: /\b(?:function|const|let|var|if|else|for|while|return)\b/, color: '#f472b6' },
|
|
106
|
+
{ regex: /--?\w+/, color: '#22d3ee' },
|
|
107
|
+
];
|
|
108
|
+
const COMBINED = /* @__PURE__ */ new RegExp(SYNTAX.map((s) => `(${s.regex.source})`).join('|'), 'g');
|
|
109
|
+
/** Colours a line's strings, keywords, numbers and flags; everything else passes through. */
|
|
110
|
+
const highlight = (text) => {
|
|
111
|
+
const parts = [];
|
|
112
|
+
let last = 0;
|
|
113
|
+
let key = 0;
|
|
114
|
+
for (const match of text.matchAll(COMBINED)) {
|
|
115
|
+
const start = match.index ?? 0;
|
|
116
|
+
if (start > last)
|
|
117
|
+
parts.push(text.slice(last, start));
|
|
118
|
+
const group = match.slice(1).findIndex((g) => g !== undefined);
|
|
119
|
+
parts.push((0, jsx_runtime_1.jsx)("span", { style: { color: SYNTAX[group]?.color }, children: match[0] }, key++));
|
|
120
|
+
last = start + match[0].length;
|
|
121
|
+
}
|
|
122
|
+
if (last < text.length)
|
|
123
|
+
parts.push(text.slice(last));
|
|
124
|
+
return parts.length ? (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: parts }) : text;
|
|
125
|
+
};
|
|
126
|
+
const outputColor = (type, palette) => type === 'error' ? palette.error : type === 'success' ? palette.success : type === 'info' ? palette.info : palette.output;
|
|
127
|
+
function Terminal({ prompt = '$', initialCommands = [], onCommand, theme = 'dark', enableHistory = true, enableAutoComplete = true, autoCompleteCommands = DEFAULT_COMMANDS, maxHistorySize = 50, ...props }) {
|
|
128
|
+
const [lines, setLines] = React.useState(initialCommands);
|
|
129
|
+
const [value, setValue] = React.useState('');
|
|
130
|
+
const [historyIndex, setHistoryIndex] = React.useState(-1);
|
|
131
|
+
const [history, setHistory] = React.useState([]);
|
|
132
|
+
const [suggestions, setSuggestions] = React.useState([]);
|
|
133
|
+
const [suggestionIndex, setSuggestionIndex] = React.useState(0);
|
|
134
|
+
const [copied, setCopied] = React.useState(null);
|
|
135
|
+
const scroller = React.useRef(null);
|
|
136
|
+
const field = React.useRef(null);
|
|
137
|
+
const palette = PALETTE[theme];
|
|
138
|
+
React.useEffect(() => {
|
|
139
|
+
const el = scroller.current;
|
|
140
|
+
if (el)
|
|
141
|
+
el.scrollTop = el.scrollHeight;
|
|
142
|
+
}, [lines]);
|
|
143
|
+
React.useEffect(() => {
|
|
144
|
+
if (enableAutoComplete && value) {
|
|
145
|
+
const matches = autoCompleteCommands.filter((cmd) => cmd.toLowerCase().startsWith(value.toLowerCase()));
|
|
146
|
+
setSuggestions(matches);
|
|
147
|
+
setSuggestionIndex(0);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
setSuggestions([]);
|
|
151
|
+
}
|
|
152
|
+
}, [value, enableAutoComplete, autoCompleteCommands]);
|
|
153
|
+
const run = React.useCallback(async (raw) => {
|
|
154
|
+
const text = raw.trim();
|
|
155
|
+
if (!text)
|
|
156
|
+
return;
|
|
157
|
+
const line = {
|
|
158
|
+
id: `${Date.now()}-${Math.random().toString(36).slice(2)}`,
|
|
159
|
+
input: raw,
|
|
160
|
+
output: '',
|
|
161
|
+
timestamp: new Date(),
|
|
162
|
+
type: 'command',
|
|
163
|
+
};
|
|
164
|
+
if (text.toLowerCase() === 'clear') {
|
|
165
|
+
setLines([]);
|
|
166
|
+
setValue('');
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (text.toLowerCase() === 'help') {
|
|
170
|
+
line.output = ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { gap: "$1", children: [(0, jsx_runtime_1.jsx)(gui_1.SizableText, { style: { color: palette.output }, children: "Available commands:" }), (0, jsx_runtime_1.jsxs)(gui_1.YStack, { pl: "$4", gap: "$1", children: [(0, jsx_runtime_1.jsx)(gui_1.SizableText, { style: { color: palette.output }, children: "\u2022 clear - Clear the terminal" }), (0, jsx_runtime_1.jsx)(gui_1.SizableText, { style: { color: palette.output }, children: "\u2022 help - Show this help message" }), (0, jsx_runtime_1.jsx)(gui_1.SizableText, { style: { color: palette.output }, children: "\u2022 date - Show current date and time" }), (0, jsx_runtime_1.jsx)(gui_1.SizableText, { style: { color: palette.output }, children: "\u2022 echo [text] - Print text to terminal" }), autoCompleteCommands.map((cmd) => ((0, jsx_runtime_1.jsxs)(gui_1.SizableText, { style: { color: palette.output }, children: ["\u2022 ", cmd] }, cmd)))] })] }));
|
|
171
|
+
line.type = 'info';
|
|
172
|
+
}
|
|
173
|
+
else if (text.toLowerCase() === 'date') {
|
|
174
|
+
line.output = new Date().toString();
|
|
175
|
+
line.type = 'success';
|
|
176
|
+
}
|
|
177
|
+
else if (text.toLowerCase().startsWith('echo ')) {
|
|
178
|
+
line.output = text.slice(5);
|
|
179
|
+
line.type = 'success';
|
|
180
|
+
}
|
|
181
|
+
else if (onCommand) {
|
|
182
|
+
try {
|
|
183
|
+
line.output = await onCommand(text);
|
|
184
|
+
line.type = 'success';
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
line.output = `Error: ${error instanceof Error ? error.message : String(error)}`;
|
|
188
|
+
line.type = 'error';
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
line.output = `Command not found: ${text}`;
|
|
193
|
+
line.type = 'error';
|
|
194
|
+
}
|
|
195
|
+
setLines((prev) => [...prev, line]);
|
|
196
|
+
if (enableHistory) {
|
|
197
|
+
setHistory((prev) => [raw, ...prev.filter((cmd) => cmd !== raw)].slice(0, maxHistorySize));
|
|
198
|
+
}
|
|
199
|
+
setValue('');
|
|
200
|
+
setHistoryIndex(-1);
|
|
201
|
+
setSuggestions([]);
|
|
202
|
+
}, [onCommand, enableHistory, maxHistorySize, autoCompleteCommands, palette.output]);
|
|
203
|
+
const onKeyDown = (e) => {
|
|
204
|
+
if (e.key === 'Enter') {
|
|
205
|
+
e.preventDefault();
|
|
206
|
+
run(value);
|
|
207
|
+
}
|
|
208
|
+
else if (e.key === 'ArrowUp' && enableHistory) {
|
|
209
|
+
e.preventDefault();
|
|
210
|
+
if (historyIndex < history.length - 1) {
|
|
211
|
+
const next = historyIndex + 1;
|
|
212
|
+
setHistoryIndex(next);
|
|
213
|
+
setValue(history[next]);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
else if (e.key === 'ArrowDown' && enableHistory) {
|
|
217
|
+
e.preventDefault();
|
|
218
|
+
if (historyIndex > 0) {
|
|
219
|
+
const next = historyIndex - 1;
|
|
220
|
+
setHistoryIndex(next);
|
|
221
|
+
setValue(history[next]);
|
|
222
|
+
}
|
|
223
|
+
else if (historyIndex === 0) {
|
|
224
|
+
setHistoryIndex(-1);
|
|
225
|
+
setValue('');
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
else if (e.key === 'Tab' && suggestions.length > 0) {
|
|
229
|
+
e.preventDefault();
|
|
230
|
+
const suggestion = suggestions[suggestionIndex];
|
|
231
|
+
if (suggestion) {
|
|
232
|
+
setValue(suggestion);
|
|
233
|
+
setSuggestions([]);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
else if (e.key === 'Escape') {
|
|
237
|
+
setSuggestions([]);
|
|
238
|
+
setSuggestionIndex(0);
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
const copy = async (text) => {
|
|
242
|
+
try {
|
|
243
|
+
await navigator.clipboard.writeText(text);
|
|
244
|
+
setCopied(text);
|
|
245
|
+
setTimeout(() => setCopied((c) => (c === text ? null : c)), 2000);
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
// No clipboard permission — nothing to copy with.
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
const onPaste = async () => {
|
|
252
|
+
try {
|
|
253
|
+
const text = await navigator.clipboard.readText();
|
|
254
|
+
setValue((prev) => prev + text);
|
|
255
|
+
field.current?.focus();
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
// No clipboard permission — the browser's own paste still lands in the field.
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
return ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { ref: scroller, ...(0, slot_1.slot)('terminal'), "data-theme": theme, rounded: "$3", borderWidth: 1, p: "$4", overflow: "scroll", style: { backgroundColor: palette.bg, borderColor: palette.border }, onClick: () => field.current?.focus(), onPaste: onPaste, ...props, children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...(0, slot_1.slot)('terminal-header'), items: "center", gap: "$2", mb: "$4", children: [(0, jsx_runtime_1.jsx)(gui_1.YStack, { width: 12, height: 12, rounded: 999, style: { backgroundColor: '#ef4444' } }), (0, jsx_runtime_1.jsx)(gui_1.YStack, { width: 12, height: 12, rounded: 999, style: { backgroundColor: '#eab308' } }), (0, jsx_runtime_1.jsx)(gui_1.YStack, { width: 12, height: 12, rounded: 999, style: { backgroundColor: '#22c55e' } }), (0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", opacity: 0.5, ml: "$2", style: { color: palette.fg }, children: "terminal" })] }), (0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('terminal-history'), gap: "$2", children: lines.map((line) => ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...(0, slot_1.slot)('terminal-command'), children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "flex-start", gap: "$2", children: [(0, jsx_runtime_1.jsx)(gui_1.SizableText, { style: { color: palette.prompt }, children: prompt }), (0, jsx_runtime_1.jsx)(gui_1.SizableText, { flex: 1, style: { color: palette.input }, children: highlight(line.input) }), (0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('terminal-copy'), cursor: "pointer", opacity: 0.5, hoverStyle: { opacity: 1 }, "aria-label": "Copy command", onPress: () => copy(line.input), children: copied === line.input ? (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Check, { size: 12 }) : (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Copy, { size: 12 }) })] }), line.output !== '' && line.output != null && ((0, jsx_runtime_1.jsx)(gui_1.YStack, { pl: "$4", mt: "$1", children: typeof line.output === 'string' ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { style: { color: outputColor(line.type, palette) }, children: highlight(line.output) })) : (line.output) }))] }, line.id))) }), (0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...(0, slot_1.slot)('terminal-input-row'), position: "relative", mt: "$2", children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "center", gap: "$2", children: [(0, jsx_runtime_1.jsx)(gui_1.SizableText, { style: { color: palette.prompt }, children: prompt }), (0, jsx_runtime_1.jsx)(gui_1.Input, { ref: field, ...(0, slot_1.slot)('terminal-input'), unstyled: true, flex: 1, value: value, onChangeText: setValue, onKeyDown: onKeyDown, spellCheck: false, autoComplete: "off", "aria-label": "Terminal input", style: { color: palette.input, background: 'transparent', border: 'none', outline: 'none' } })] }), suggestions.length > 0 && ((0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('terminal-suggestions'), position: "absolute", l: 0, t: "100%", mt: "$1", rounded: "$2", borderWidth: 1, p: "$1", z: 10, style: { backgroundColor: palette.bg, borderColor: palette.border }, children: suggestions.map((suggestion, index) => ((0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('terminal-suggestion'), "data-active": index === suggestionIndex, rounded: "$1", px: "$2", py: "$1", cursor: "pointer", style: { backgroundColor: index === suggestionIndex ? palette.border : 'transparent' }, onPress: () => {
|
|
262
|
+
setValue(suggestion);
|
|
263
|
+
setSuggestions([]);
|
|
264
|
+
field.current?.focus();
|
|
265
|
+
}, children: (0, jsx_runtime_1.jsx)(gui_1.SizableText, { style: { color: palette.fg }, children: suggestion }) }, suggestion))) }))] })] }));
|
|
266
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal — an emulated shell: a title bar, a scrolling command history, and
|
|
3
|
+
* one input line. Enter runs a line through `onCommand` (after the built-ins
|
|
4
|
+
* `clear`, `help`, `date`, `echo …`); arrow keys walk the command history; Tab
|
|
5
|
+
* completes from `autoCompleteCommands`; hovering a past command reveals a
|
|
6
|
+
* button that copies it. Four literal palettes (`dark`, `light`, `matrix`,
|
|
7
|
+
* `dracula`) paint the surface — a terminal's colours are the emulator's own,
|
|
8
|
+
* not the host app's theme — and a small set of syntax rules colour strings,
|
|
9
|
+
* keywords, numbers and flags in every line.
|
|
10
|
+
*/
|
|
11
|
+
import { type YStackProps } from '@hanzo/gui';
|
|
12
|
+
import * as React from 'react';
|
|
13
|
+
export type TerminalTheme = 'dark' | 'light' | 'matrix' | 'dracula';
|
|
14
|
+
export type TerminalLineType = 'command' | 'error' | 'success' | 'info';
|
|
15
|
+
export interface TerminalCommand {
|
|
16
|
+
id: string;
|
|
17
|
+
input: string;
|
|
18
|
+
output: string | React.ReactNode;
|
|
19
|
+
timestamp: Date;
|
|
20
|
+
type?: TerminalLineType;
|
|
21
|
+
}
|
|
22
|
+
export interface TerminalProps extends Omit<YStackProps, 'children' | 'theme'> {
|
|
23
|
+
/** Shown before every command line and the input line. */
|
|
24
|
+
prompt?: string;
|
|
25
|
+
/** Lines shown before anything is typed. */
|
|
26
|
+
initialCommands?: TerminalCommand[];
|
|
27
|
+
/** Handles anything the built-ins (`clear`/`help`/`date`/`echo`) do not. */
|
|
28
|
+
onCommand?: (command: string) => Promise<string | React.ReactNode> | string | React.ReactNode;
|
|
29
|
+
theme?: TerminalTheme;
|
|
30
|
+
/** Arrow-key history navigation. */
|
|
31
|
+
enableHistory?: boolean;
|
|
32
|
+
/** Tab-completion against `autoCompleteCommands`. */
|
|
33
|
+
enableAutoComplete?: boolean;
|
|
34
|
+
autoCompleteCommands?: string[];
|
|
35
|
+
maxHistorySize?: number;
|
|
36
|
+
}
|
|
37
|
+
export declare function Terminal({ prompt, initialCommands, onCommand, theme, enableHistory, enableAutoComplete, autoCompleteCommands, maxHistorySize, ...props }: TerminalProps): React.JSX.Element;
|
|
38
|
+
//# sourceMappingURL=terminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/terminal.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,OAAO,EAAkD,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7F,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAA;AACnE,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;AAEvE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAA;IAChC,SAAS,EAAE,IAAI,CAAA;IACf,IAAI,CAAC,EAAE,gBAAgB,CAAA;CACxB;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC;IAC5E,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4CAA4C;IAC5C,eAAe,CAAC,EAAE,eAAe,EAAE,CAAA;IACnC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,SAAS,CAAA;IAC7F,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,oCAAoC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,qDAAqD;IACrD,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAiGD,wBAAgB,QAAQ,CAAC,EACvB,MAAY,EACZ,eAAoB,EACpB,SAAS,EACT,KAAc,EACd,aAAoB,EACpB,kBAAyB,EACzB,oBAAuC,EACvC,cAAmB,EACnB,GAAG,KAAK,EACT,EAAE,aAAa,qBAoQf"}
|