@evinvest/uikit 0.30.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +267 -73
- package/dist/{chunk-3IPB4QQJ.js → chunk-35SPIU4U.js} +10 -6
- package/dist/chunk-35SPIU4U.js.map +1 -0
- package/dist/components/{accordion.js → atomic/accordion.js} +3 -3
- package/dist/components/atomic/accordion.js.map +1 -0
- package/dist/components/{alert-dialog.js → atomic/alert-dialog.js} +11 -10
- package/dist/components/atomic/alert-dialog.js.map +1 -0
- package/dist/components/{alert.js → atomic/alert.js} +2 -2
- package/dist/components/atomic/alert.js.map +1 -0
- package/dist/components/atomic/animated-number-columns.js +105 -0
- package/dist/components/atomic/animated-number-columns.js.map +1 -0
- package/dist/components/{avatar.js → atomic/avatar.js} +2 -2
- package/dist/components/atomic/avatar.js.map +1 -0
- package/dist/components/{badge.js → atomic/badge.js} +4 -4
- package/dist/components/atomic/badge.js.map +1 -0
- package/dist/components/{band.js → atomic/band.js} +2 -2
- package/dist/components/atomic/band.js.map +1 -0
- package/dist/components/{breadcrumb.js → atomic/breadcrumb.js} +3 -3
- package/dist/components/atomic/breadcrumb.js.map +1 -0
- package/dist/components/{button-group.js → atomic/button-group.js} +3 -3
- package/dist/components/atomic/button-group.js.map +1 -0
- package/dist/components/{button.js → atomic/button.js} +7 -15
- package/dist/components/atomic/button.js.map +1 -0
- package/dist/components/{calendar.js → atomic/calendar.js} +2 -2
- package/dist/components/atomic/calendar.js.map +1 -0
- package/dist/components/{card.js → atomic/card.js} +2 -2
- package/dist/components/atomic/card.js.map +1 -0
- package/dist/components/{checkbox.js → atomic/checkbox.js} +4 -4
- package/dist/components/atomic/checkbox.js.map +1 -0
- package/dist/components/{collapsible.js → atomic/collapsible.js} +1 -1
- package/dist/components/atomic/collapsible.js.map +1 -0
- package/dist/components/{command.js → atomic/command.js} +9 -7
- package/dist/components/atomic/command.js.map +1 -0
- package/dist/components/{container.js → atomic/container.js} +2 -2
- package/dist/components/atomic/container.js.map +1 -0
- package/dist/components/{context-menu.js → atomic/context-menu.js} +62 -14
- package/dist/components/atomic/context-menu.js.map +1 -0
- package/dist/components/{dialog.js → atomic/dialog.js} +11 -10
- package/dist/components/atomic/dialog.js.map +1 -0
- package/dist/components/{drawer.js → atomic/drawer.js} +10 -8
- package/dist/components/atomic/drawer.js.map +1 -0
- package/dist/components/{dropdown-menu.js → atomic/dropdown-menu.js} +74 -15
- package/dist/components/atomic/dropdown-menu.js.map +1 -0
- package/dist/components/{empty.js → atomic/empty.js} +2 -2
- package/dist/components/atomic/empty.js.map +1 -0
- package/dist/components/atomic/field-context.js.map +1 -0
- package/dist/components/atomic/form-row.js +51 -0
- package/dist/components/atomic/form-row.js.map +1 -0
- package/dist/components/{hover-card.js → atomic/hover-card.js} +8 -8
- package/dist/components/atomic/hover-card.js.map +1 -0
- package/dist/components/{info-tip.js → atomic/info-tip.js} +10 -10
- package/dist/components/atomic/info-tip.js.map +1 -0
- package/dist/components/{input-otp.js → atomic/input-otp.js} +3 -3
- package/dist/components/atomic/input-otp.js.map +1 -0
- package/dist/components/{input.js → atomic/input.js} +3 -3
- package/dist/components/atomic/input.js.map +1 -0
- package/dist/components/{kbd.js → atomic/kbd.js} +2 -2
- package/dist/components/atomic/kbd.js.map +1 -0
- package/dist/components/atomic/key-value.js +68 -0
- package/dist/components/atomic/key-value.js.map +1 -0
- package/dist/components/{label.js → atomic/label.js} +2 -2
- package/dist/components/atomic/label.js.map +1 -0
- package/dist/components/{menubar.js → atomic/menubar.js} +48 -14
- package/dist/components/atomic/menubar.js.map +1 -0
- package/dist/components/{native-select.js → atomic/native-select.js} +6 -7
- package/dist/components/atomic/native-select.js.map +1 -0
- package/dist/components/{navigation-menu.js → atomic/navigation-menu.js} +11 -12
- package/dist/components/atomic/navigation-menu.js.map +1 -0
- package/dist/components/{pagination.js → atomic/pagination.js} +1 -1
- package/dist/components/atomic/pagination.js.map +1 -0
- package/dist/components/{popover.js → atomic/popover.js} +10 -10
- package/dist/components/atomic/popover.js.map +1 -0
- package/dist/components/{progress.js → atomic/progress.js} +2 -2
- package/dist/components/atomic/progress.js.map +1 -0
- package/dist/components/{radio-group.js → atomic/radio-group.js} +4 -4
- package/dist/components/atomic/radio-group.js.map +1 -0
- package/dist/components/{scroll-area.js → atomic/scroll-area.js} +2 -2
- package/dist/components/atomic/scroll-area.js.map +1 -0
- package/dist/components/{section-descriptor.js → atomic/section-descriptor.js} +2 -2
- package/dist/components/atomic/section-descriptor.js.map +1 -0
- package/dist/components/{select-listbox.js → atomic/select-listbox.js} +1 -1
- package/dist/components/atomic/select-listbox.js.map +1 -0
- package/dist/components/{select.js → atomic/select.js} +26 -16
- package/dist/components/atomic/select.js.map +1 -0
- package/dist/components/{separator.js → atomic/separator.js} +2 -2
- package/dist/components/atomic/separator.js.map +1 -0
- package/dist/components/{sheet.js → atomic/sheet.js} +11 -10
- package/dist/components/atomic/sheet.js.map +1 -0
- package/dist/components/{sidebar.js → atomic/sidebar.js} +5 -5
- package/dist/components/atomic/sidebar.js.map +1 -0
- package/dist/components/{skeleton.js → atomic/skeleton.js} +2 -2
- package/dist/components/atomic/skeleton.js.map +1 -0
- package/dist/components/{slider.js → atomic/slider.js} +3 -3
- package/dist/components/atomic/slider.js.map +1 -0
- package/dist/components/{sonner.js → atomic/sonner.js} +2 -2
- package/dist/components/atomic/sonner.js.map +1 -0
- package/dist/components/{spinner.js → atomic/spinner.js} +1 -1
- package/dist/components/atomic/spinner.js.map +1 -0
- package/dist/components/atomic/status-item.js +42 -0
- package/dist/components/atomic/status-item.js.map +1 -0
- package/dist/components/{switch.js → atomic/switch.js} +4 -4
- package/dist/components/atomic/switch.js.map +1 -0
- package/dist/components/{table.js → atomic/table.js} +2 -2
- package/dist/components/atomic/table.js.map +1 -0
- package/dist/components/{tabs.js → atomic/tabs.js} +4 -4
- package/dist/components/atomic/tabs.js.map +1 -0
- package/dist/components/{textarea.js → atomic/textarea.js} +3 -3
- package/dist/components/atomic/textarea.js.map +1 -0
- package/dist/components/{toggle-group.js → atomic/toggle-group.js} +2 -2
- package/dist/components/atomic/toggle-group.js.map +1 -0
- package/dist/components/{toggle.js → atomic/toggle.js} +3 -3
- package/dist/components/atomic/toggle.js.map +1 -0
- package/dist/components/{tooltip.js → atomic/tooltip.js} +8 -8
- package/dist/components/atomic/tooltip.js.map +1 -0
- package/dist/components/atomic/use-count-tween.js +42 -0
- package/dist/components/atomic/use-count-tween.js.map +1 -0
- package/dist/components/derived/animated-number.js +157 -0
- package/dist/components/derived/animated-number.js.map +1 -0
- package/dist/components/{carousel.js → derived/carousel.js} +4 -4
- package/dist/components/derived/carousel.js.map +1 -0
- package/dist/components/derived/command-palette.js +119 -0
- package/dist/components/derived/command-palette.js.map +1 -0
- package/dist/components/derived/confirm-dialog.js +123 -0
- package/dist/components/derived/confirm-dialog.js.map +1 -0
- package/dist/components/{date-time-picker.js → derived/date-time-picker.js} +8 -8
- package/dist/components/derived/date-time-picker.js.map +1 -0
- package/dist/components/{field.js → derived/field.js} +6 -6
- package/dist/components/derived/field.js.map +1 -0
- package/dist/components/{form.js → derived/form.js} +4 -4
- package/dist/components/derived/form.js.map +1 -0
- package/dist/components/derived/icon-button.js +35 -0
- package/dist/components/derived/icon-button.js.map +1 -0
- package/dist/components/{input-group.js → derived/input-group.js} +5 -5
- package/dist/components/derived/input-group.js.map +1 -0
- package/dist/components/{item.js → derived/item.js} +4 -4
- package/dist/components/derived/item.js.map +1 -0
- package/dist/components/derived/popover-form.js +60 -0
- package/dist/components/derived/popover-form.js.map +1 -0
- package/dist/components/derived/settings.js +94 -0
- package/dist/components/derived/settings.js.map +1 -0
- package/dist/components/shell/account-list.js +128 -0
- package/dist/components/shell/account-list.js.map +1 -0
- package/dist/components/shell/account-menu-profile.js +114 -0
- package/dist/components/shell/account-menu-profile.js.map +1 -0
- package/dist/components/shell/account-menu.js +97 -0
- package/dist/components/shell/account-menu.js.map +1 -0
- package/dist/components/shell/account-settings-dialog.js +84 -0
- package/dist/components/shell/account-settings-dialog.js.map +1 -0
- package/dist/components/{app-shell.js → shell/app-shell.js} +10 -1
- package/dist/components/shell/app-shell.js.map +1 -0
- package/dist/components/shell/aside.js +140 -0
- package/dist/components/shell/aside.js.map +1 -0
- package/dist/components/{auth-wall.js → shell/auth-wall.js} +1 -1
- package/dist/components/shell/auth-wall.js.map +1 -0
- package/dist/components/{bottom-tab-bar.js → shell/bottom-tab-bar.js} +1 -1
- package/dist/components/shell/bottom-tab-bar.js.map +1 -0
- package/dist/components/shell/chat-composer.js +141 -0
- package/dist/components/shell/chat-composer.js.map +1 -0
- package/dist/components/shell/chat-message.js +195 -0
- package/dist/components/shell/chat-message.js.map +1 -0
- package/dist/components/shell/chat-panel.js +137 -0
- package/dist/components/shell/chat-panel.js.map +1 -0
- package/dist/components/shell/chat-stream-text.js +69 -0
- package/dist/components/shell/chat-stream-text.js.map +1 -0
- package/dist/components/shell/chat-typing.js +26 -0
- package/dist/components/shell/chat-typing.js.map +1 -0
- package/dist/components/{footer.js → shell/footer.js} +1 -1
- package/dist/components/shell/footer.js.map +1 -0
- package/dist/components/shell/header-controls.js +149 -0
- package/dist/components/shell/header-controls.js.map +1 -0
- package/dist/components/{list-rows.js → shell/list-rows.js} +1 -1
- package/dist/components/shell/list-rows.js.map +1 -0
- package/dist/components/{logo.js → shell/logo.js} +1 -1
- package/dist/components/shell/logo.js.map +1 -0
- package/dist/components/{mobile-app-bar.js → shell/mobile-app-bar.js} +1 -1
- package/dist/components/shell/mobile-app-bar.js.map +1 -0
- package/dist/components/{nav-badge.js → shell/nav-badge.js} +1 -1
- package/dist/components/shell/nav-badge.js.map +1 -0
- package/dist/components/shell/nav-collapse.js +142 -0
- package/dist/components/shell/nav-collapse.js.map +1 -0
- package/dist/components/shell/nav-link.js.map +1 -0
- package/dist/components/shell/nav-model.js.map +1 -0
- package/dist/components/{page-frame.js → shell/page-frame.js} +3 -6
- package/dist/components/shell/page-frame.js.map +1 -0
- package/dist/components/{resource-error.js → shell/resource-error.js} +4 -4
- package/dist/components/shell/resource-error.js.map +1 -0
- package/dist/components/shell/section-nav.js +139 -0
- package/dist/components/shell/section-nav.js.map +1 -0
- package/dist/components/shell/settled.js.map +1 -0
- package/dist/components/shell/shell-icons.js.map +1 -0
- package/dist/components/{shell-nav.js → shell/shell-nav.js} +81 -39
- package/dist/components/shell/shell-nav.js.map +1 -0
- package/dist/components/shell/smart-header.js +53 -0
- package/dist/components/shell/smart-header.js.map +1 -0
- package/dist/components/{status-screen.js → shell/status-screen.js} +3 -3
- package/dist/components/shell/status-screen.js.map +1 -0
- package/dist/components/{system-banner.js → shell/system-banner.js} +23 -13
- package/dist/components/shell/system-banner.js.map +1 -0
- package/dist/components/{top-bar.js → shell/top-bar.js} +5 -4
- package/dist/components/shell/top-bar.js.map +1 -0
- package/dist/components/shell/use-shell-nav.js.map +1 -0
- package/dist/components/shell/workspace-tab.js +140 -0
- package/dist/components/shell/workspace-tab.js.map +1 -0
- package/dist/generated/accent.js +2 -2
- package/dist/generated/accent.js.map +1 -1
- package/dist/generated/account-list.js +35 -0
- package/dist/generated/account-list.js.map +1 -0
- package/dist/generated/account-settings-dialog.js +27 -0
- package/dist/generated/account-settings-dialog.js.map +1 -0
- package/dist/generated/alert-dialog.js +1 -1
- package/dist/generated/alert-dialog.js.map +1 -1
- package/dist/generated/alert.js +2 -2
- package/dist/generated/alert.js.map +1 -1
- package/dist/generated/aside.js +36 -0
- package/dist/generated/aside.js.map +1 -0
- package/dist/generated/badge.js +7 -6
- package/dist/generated/badge.js.map +1 -1
- package/dist/generated/band.js +1 -1
- package/dist/generated/band.js.map +1 -1
- package/dist/generated/breadcrumb.js +2 -2
- package/dist/generated/breadcrumb.js.map +1 -1
- package/dist/generated/button-group.js +2 -2
- package/dist/generated/button-group.js.map +1 -1
- package/dist/generated/button.js +4 -4
- package/dist/generated/button.js.map +1 -1
- package/dist/generated/card.js +6 -6
- package/dist/generated/card.js.map +1 -1
- package/dist/generated/chat-composer.js +21 -0
- package/dist/generated/chat-composer.js.map +1 -0
- package/dist/generated/chat-message.js +86 -0
- package/dist/generated/chat-message.js.map +1 -0
- package/dist/generated/chat-typing.js +9 -0
- package/dist/generated/chat-typing.js.map +1 -0
- package/dist/generated/command-palette.js +17 -0
- package/dist/generated/command-palette.js.map +1 -0
- package/dist/generated/command.js +2 -2
- package/dist/generated/command.js.map +1 -1
- package/dist/generated/confirm-dialog.js +28 -0
- package/dist/generated/confirm-dialog.js.map +1 -0
- package/dist/generated/context-menu.js +1 -1
- package/dist/generated/context-menu.js.map +1 -1
- package/dist/generated/date-time-picker.js +1 -1
- package/dist/generated/date-time-picker.js.map +1 -1
- package/dist/generated/dialog.js +1 -1
- package/dist/generated/dialog.js.map +1 -1
- package/dist/generated/drawer.js +1 -1
- package/dist/generated/drawer.js.map +1 -1
- package/dist/generated/dropdown-menu.js +1 -1
- package/dist/generated/dropdown-menu.js.map +1 -1
- package/dist/generated/form-row.js +17 -0
- package/dist/generated/form-row.js.map +1 -0
- package/dist/generated/header-controls.js +56 -0
- package/dist/generated/header-controls.js.map +1 -0
- package/dist/generated/icon-button.js +13 -0
- package/dist/generated/icon-button.js.map +1 -0
- package/dist/generated/key-value.js +15 -0
- package/dist/generated/key-value.js.map +1 -0
- package/dist/generated/menubar.js +1 -1
- package/dist/generated/menubar.js.map +1 -1
- package/dist/generated/navigation-menu.js +1 -1
- package/dist/generated/navigation-menu.js.map +1 -1
- package/dist/generated/popover-form.js +13 -0
- package/dist/generated/popover-form.js.map +1 -0
- package/dist/generated/section-label.js +10 -0
- package/dist/generated/section-label.js.map +1 -0
- package/dist/generated/select.js +15 -3
- package/dist/generated/select.js.map +1 -1
- package/dist/generated/settings.js +36 -0
- package/dist/generated/settings.js.map +1 -0
- package/dist/generated/sheet.js +1 -1
- package/dist/generated/sheet.js.map +1 -1
- package/dist/generated/slider.js +1 -1
- package/dist/generated/slider.js.map +1 -1
- package/dist/generated/smart-header.js +11 -0
- package/dist/generated/smart-header.js.map +1 -0
- package/dist/generated/sonner.js +4 -4
- package/dist/generated/sonner.js.map +1 -1
- package/dist/generated/status-item.js +17 -0
- package/dist/generated/status-item.js.map +1 -0
- package/dist/generated/system-banner.js +33 -0
- package/dist/generated/system-banner.js.map +1 -0
- package/dist/generated/top-bar.js +9 -0
- package/dist/generated/top-bar.js.map +1 -0
- package/dist/generated/workspace-tab.js +17 -0
- package/dist/generated/workspace-tab.js.map +1 -0
- package/dist/icons/select-chevron.js.map +1 -0
- package/dist/icons/ui-icons.js +77 -0
- package/dist/icons/ui-icons.js.map +1 -0
- package/dist/index.d.ts +852 -156
- package/dist/index.js +96 -76
- package/dist/lib/cn.js +8 -1
- package/dist/lib/cn.js.map +1 -1
- package/dist/lib/number-parts.js +90 -0
- package/dist/lib/number-parts.js.map +1 -0
- package/dist/palette-cli.js +1 -1
- package/dist/palette.d.ts +6 -4
- package/dist/palette.js +3 -1
- package/dist/primitives/dismissable-layer.js +76 -4
- package/dist/primitives/dismissable-layer.js.map +1 -1
- package/dist/primitives/focus-scope.js +20 -5
- package/dist/primitives/focus-scope.js.map +1 -1
- package/dist/primitives/use-floating.js +16 -1
- package/dist/primitives/use-floating.js.map +1 -1
- package/dist/primitives/use-reduced-motion.js +20 -0
- package/dist/primitives/use-reduced-motion.js.map +1 -0
- package/package.json +2 -2
- package/styles/ev.css +281 -49
- package/styles/theme.css +335 -39
- package/styles/tokens.css +643 -103
- package/dist/chunk-3IPB4QQJ.js.map +0 -1
- package/dist/components/accordion.js.map +0 -1
- package/dist/components/account-menu.js +0 -70
- package/dist/components/account-menu.js.map +0 -1
- package/dist/components/alert-dialog.js.map +0 -1
- package/dist/components/alert.js.map +0 -1
- package/dist/components/app-shell.js.map +0 -1
- package/dist/components/auth-wall.js.map +0 -1
- package/dist/components/avatar.js.map +0 -1
- package/dist/components/badge.js.map +0 -1
- package/dist/components/band.js.map +0 -1
- package/dist/components/bottom-tab-bar.js.map +0 -1
- package/dist/components/breadcrumb.js.map +0 -1
- package/dist/components/button-group.js.map +0 -1
- package/dist/components/button.js.map +0 -1
- package/dist/components/calendar.js.map +0 -1
- package/dist/components/card.js.map +0 -1
- package/dist/components/carousel.js.map +0 -1
- package/dist/components/checkbox.js.map +0 -1
- package/dist/components/collapsible.js.map +0 -1
- package/dist/components/command.js.map +0 -1
- package/dist/components/container.js.map +0 -1
- package/dist/components/context-menu.js.map +0 -1
- package/dist/components/date-time-picker.js.map +0 -1
- package/dist/components/dialog.js.map +0 -1
- package/dist/components/drawer.js.map +0 -1
- package/dist/components/dropdown-menu.js.map +0 -1
- package/dist/components/empty.js.map +0 -1
- package/dist/components/field-context.js.map +0 -1
- package/dist/components/field.js.map +0 -1
- package/dist/components/footer.js.map +0 -1
- package/dist/components/form.js.map +0 -1
- package/dist/components/hover-card.js.map +0 -1
- package/dist/components/info-tip.js.map +0 -1
- package/dist/components/input-group.js.map +0 -1
- package/dist/components/input-otp.js.map +0 -1
- package/dist/components/input.js.map +0 -1
- package/dist/components/item.js.map +0 -1
- package/dist/components/kbd.js.map +0 -1
- package/dist/components/label.js.map +0 -1
- package/dist/components/list-rows.js.map +0 -1
- package/dist/components/logo.js.map +0 -1
- package/dist/components/menubar.js.map +0 -1
- package/dist/components/mobile-app-bar.js.map +0 -1
- package/dist/components/native-select.js.map +0 -1
- package/dist/components/nav-badge.js.map +0 -1
- package/dist/components/nav-link.js.map +0 -1
- package/dist/components/nav-model.js.map +0 -1
- package/dist/components/navigation-menu.js.map +0 -1
- package/dist/components/page-frame.js.map +0 -1
- package/dist/components/pagination.js.map +0 -1
- package/dist/components/popover.js.map +0 -1
- package/dist/components/progress.js.map +0 -1
- package/dist/components/radio-group.js.map +0 -1
- package/dist/components/resource-error.js.map +0 -1
- package/dist/components/scroll-area.js.map +0 -1
- package/dist/components/section-descriptor.js.map +0 -1
- package/dist/components/section-nav.js +0 -86
- package/dist/components/section-nav.js.map +0 -1
- package/dist/components/select-chevron.js.map +0 -1
- package/dist/components/select-listbox.js.map +0 -1
- package/dist/components/select.js.map +0 -1
- package/dist/components/separator.js.map +0 -1
- package/dist/components/settled.js.map +0 -1
- package/dist/components/sheet.js.map +0 -1
- package/dist/components/shell-icons.js.map +0 -1
- package/dist/components/shell-nav.js.map +0 -1
- package/dist/components/sidebar.js.map +0 -1
- package/dist/components/skeleton.js.map +0 -1
- package/dist/components/slider.js.map +0 -1
- package/dist/components/sonner.js.map +0 -1
- package/dist/components/spinner.js.map +0 -1
- package/dist/components/status-screen.js.map +0 -1
- package/dist/components/switch.js.map +0 -1
- package/dist/components/system-banner.js.map +0 -1
- package/dist/components/table.js.map +0 -1
- package/dist/components/tabs.js.map +0 -1
- package/dist/components/terminal.js +0 -206
- package/dist/components/terminal.js.map +0 -1
- package/dist/components/textarea.js.map +0 -1
- package/dist/components/toggle-group.js.map +0 -1
- package/dist/components/toggle.js.map +0 -1
- package/dist/components/tooltip.js.map +0 -1
- package/dist/components/top-bar.js.map +0 -1
- package/dist/components/use-shell-nav.js.map +0 -1
- package/dist/generated/terminal.js +0 -70
- package/dist/generated/terminal.js.map +0 -1
- /package/dist/components/{field-context.js → atomic/field-context.js} +0 -0
- /package/dist/components/{nav-link.js → shell/nav-link.js} +0 -0
- /package/dist/components/{nav-model.js → shell/nav-model.js} +0 -0
- /package/dist/components/{settled.js → shell/settled.js} +0 -0
- /package/dist/components/{shell-icons.js → shell/shell-icons.js} +0 -0
- /package/dist/components/{use-shell-nav.js → shell/use-shell-nav.js} +0 -0
- /package/dist/{components → icons}/select-chevron.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useRovingFocus } from \"../primitives/use-roving-focus\";\nimport { TABS_ROOT, TABS_LIST, TABS_TRIGGER, TABS_CONTENT } from \"../generated/tabs\";\n\ntype TabsOrientation = \"horizontal\" | \"vertical\";\n\ninterface TabsContextValue {\n value: string;\n setValue: (next: string) => void;\n orientation: TabsOrientation;\n}\n\nconst TabsContext = React.createContext<TabsContextValue | null>(null);\n\nfunction useTabs(): TabsContextValue {\n const ctx = React.useContext(TabsContext);\n if (!ctx) throw new Error(\"Tabs parts must be used within <Tabs>\");\n return ctx;\n}\n\nexport interface TabsProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\"> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n orientation?: TabsOrientation;\n}\n\nexport function Tabs({\n className,\n value,\n defaultValue = \"\",\n onValueChange,\n orientation = \"horizontal\",\n children,\n ...props\n}: TabsProps) {\n const [active, setValue] = useControllableState<string>({\n ...(value !== undefined ? { value } : {}),\n defaultValue,\n ...(onValueChange ? { onChange: onValueChange } : {}),\n });\n return (\n <TabsContext.Provider value={{ value: active, setValue, orientation }}>\n <div\n data-slot=\"tabs\"\n data-orientation={orientation}\n className={cn(TABS_ROOT, className)}\n {...props}\n >\n {children}\n </div>\n </TabsContext.Provider>\n );\n}\n\nexport function TabsList({\n className,\n children,\n onKeyDown,\n ...props\n}: React.ComponentProps<\"div\">) {\n const { orientation } = useTabs();\n const items = React.Children.toArray(children);\n const { activeIndex, setActiveIndex, onKeyDown: rovingKeyDown } =\n useRovingFocus({\n count: items.length,\n orientation: orientation === \"vertical\" ? \"vertical\" : \"horizontal\",\n });\n return (\n <div\n role=\"tablist\"\n data-slot=\"tabs-list\"\n aria-orientation={orientation}\n className={cn(TABS_LIST, className)}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n rovingKeyDown(e);\n }}\n {...props}\n >\n {items.map((child, index) =>\n React.isValidElement(child)\n ? React.cloneElement(child as React.ReactElement<TabsTriggerInternal>, {\n __index: index,\n __isFocusItem: index === activeIndex,\n __onFocusItem: () => setActiveIndex(index),\n })\n : child,\n )}\n </div>\n );\n}\n\ninterface TabsTriggerInternal {\n __index?: number;\n __isFocusItem?: boolean;\n __onFocusItem?: () => void;\n}\n\nexport interface TabsTriggerProps\n extends React.ComponentProps<\"button\">,\n TabsTriggerInternal {\n value: string;\n}\n\nexport function TabsTrigger({\n className,\n value,\n onClick,\n onFocus,\n __isFocusItem,\n __onFocusItem,\n ...props\n}: TabsTriggerProps) {\n const { value: active, setValue } = useTabs();\n const selected = active === value;\n return (\n <button\n type=\"button\"\n role=\"tab\"\n data-slot=\"tabs-trigger\"\n data-state={selected ? \"active\" : \"inactive\"}\n aria-selected={selected}\n tabIndex={__isFocusItem ? 0 : -1}\n className={cn(TABS_TRIGGER, className)}\n onClick={(e) => {\n onClick?.(e);\n __onFocusItem?.();\n setValue(value);\n }}\n onFocus={(e) => {\n onFocus?.(e);\n __onFocusItem?.();\n }}\n {...props}\n />\n );\n}\n\nexport interface TabsContentProps extends React.ComponentProps<\"div\"> {\n value: string;\n}\n\nexport function TabsContent({\n className,\n value,\n children,\n ...props\n}: TabsContentProps) {\n const { value: active } = useTabs();\n if (active !== value) return null;\n return (\n <div\n role=\"tabpanel\"\n data-slot=\"tabs-content\"\n data-state=\"active\"\n className={cn(TABS_CONTENT, className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import * as React from "react";
|
|
4
|
-
import { cn } from "../lib/cn.js";
|
|
5
|
-
import {
|
|
6
|
-
bookDepthClasses,
|
|
7
|
-
bookSideClasses,
|
|
8
|
-
OPEN_ORDERS_EMPTY,
|
|
9
|
-
ORDER_BOOK,
|
|
10
|
-
ORDER_BOOK_DEPTH,
|
|
11
|
-
ORDER_BOOK_HEAD,
|
|
12
|
-
ORDER_BOOK_PRICE,
|
|
13
|
-
ORDER_BOOK_ROW,
|
|
14
|
-
ORDER_BOOK_SPREAD,
|
|
15
|
-
ORDER_FORM,
|
|
16
|
-
ORDER_FORM_LABEL,
|
|
17
|
-
ORDER_FORM_ROW,
|
|
18
|
-
ORDER_FORM_SUBMIT_BASE,
|
|
19
|
-
ORDER_FORM_VALUE,
|
|
20
|
-
orderSideClasses,
|
|
21
|
-
TERMINAL_CHART,
|
|
22
|
-
TERMINAL_PANE,
|
|
23
|
-
TERMINAL_PANE_BODY,
|
|
24
|
-
TERMINAL_PANE_HEADER,
|
|
25
|
-
TERMINAL_ROOT,
|
|
26
|
-
TERMINAL_TICKER,
|
|
27
|
-
TERMINAL_TICKER_LABEL,
|
|
28
|
-
TERMINAL_TICKER_STAT,
|
|
29
|
-
TERMINAL_TICKER_VALUE,
|
|
30
|
-
terminalAreaClasses,
|
|
31
|
-
TRADES_TAPE_ROW
|
|
32
|
-
} from "../generated/terminal.js";
|
|
33
|
-
function Terminal({ className, ...props }) {
|
|
34
|
-
return /* @__PURE__ */ jsx("div", { "data-slot": "terminal", className: cn(TERMINAL_ROOT, className), ...props });
|
|
35
|
-
}
|
|
36
|
-
function TerminalPane({ area, className, ...props }) {
|
|
37
|
-
return /* @__PURE__ */ jsx(
|
|
38
|
-
"section",
|
|
39
|
-
{
|
|
40
|
-
"data-slot": "terminal-pane",
|
|
41
|
-
"data-area": area,
|
|
42
|
-
className: cn(TERMINAL_PANE, terminalAreaClasses[area], className),
|
|
43
|
-
...props
|
|
44
|
-
}
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
function TerminalPaneHeader({ className, ...props }) {
|
|
48
|
-
return /* @__PURE__ */ jsx(
|
|
49
|
-
"header",
|
|
50
|
-
{
|
|
51
|
-
"data-slot": "terminal-pane-header",
|
|
52
|
-
className: cn(TERMINAL_PANE_HEADER, className),
|
|
53
|
-
...props
|
|
54
|
-
}
|
|
55
|
-
);
|
|
56
|
-
}
|
|
57
|
-
function TerminalPaneBody({ className, ...props }) {
|
|
58
|
-
return /* @__PURE__ */ jsx("div", { "data-slot": "terminal-pane-body", className: cn(TERMINAL_PANE_BODY, className), ...props });
|
|
59
|
-
}
|
|
60
|
-
const TerminalChart = React.forwardRef(function TerminalChart2({ className, ...props }, ref) {
|
|
61
|
-
return /* @__PURE__ */ jsx(
|
|
62
|
-
"div",
|
|
63
|
-
{
|
|
64
|
-
ref,
|
|
65
|
-
"data-slot": "terminal-chart",
|
|
66
|
-
className: cn(TERMINAL_CHART, className),
|
|
67
|
-
...props
|
|
68
|
-
}
|
|
69
|
-
);
|
|
70
|
-
});
|
|
71
|
-
function TerminalTicker({ className, ...props }) {
|
|
72
|
-
return /* @__PURE__ */ jsx(
|
|
73
|
-
"div",
|
|
74
|
-
{
|
|
75
|
-
"data-slot": "terminal-ticker",
|
|
76
|
-
"data-area": "ticker",
|
|
77
|
-
className: cn(TERMINAL_TICKER, terminalAreaClasses.ticker, className),
|
|
78
|
-
...props
|
|
79
|
-
}
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
function TickerStat({ label, value, className, ...props }) {
|
|
83
|
-
return /* @__PURE__ */ jsxs("div", { "data-slot": "ticker-stat", className: TERMINAL_TICKER_STAT, ...props, children: [
|
|
84
|
-
/* @__PURE__ */ jsx("span", { className: TERMINAL_TICKER_LABEL, children: label }),
|
|
85
|
-
/* @__PURE__ */ jsx("span", { className: cn(TERMINAL_TICKER_VALUE, className), children: value })
|
|
86
|
-
] });
|
|
87
|
-
}
|
|
88
|
-
function OrderBook({ className, ...props }) {
|
|
89
|
-
return /* @__PURE__ */ jsx("div", { "data-slot": "order-book", className: cn(ORDER_BOOK, className), ...props });
|
|
90
|
-
}
|
|
91
|
-
function OrderBookHead({ price, size, total, className, ...props }) {
|
|
92
|
-
return /* @__PURE__ */ jsxs("div", { "data-slot": "order-book-head", className: cn(ORDER_BOOK_HEAD, className), ...props, children: [
|
|
93
|
-
/* @__PURE__ */ jsx("span", { children: price }),
|
|
94
|
-
/* @__PURE__ */ jsx("span", { children: size }),
|
|
95
|
-
/* @__PURE__ */ jsx("span", { children: total })
|
|
96
|
-
] });
|
|
97
|
-
}
|
|
98
|
-
function OrderBookRow({
|
|
99
|
-
side,
|
|
100
|
-
price,
|
|
101
|
-
size,
|
|
102
|
-
total,
|
|
103
|
-
depth = 0,
|
|
104
|
-
className,
|
|
105
|
-
...props
|
|
106
|
-
}) {
|
|
107
|
-
return /* @__PURE__ */ jsxs(
|
|
108
|
-
"div",
|
|
109
|
-
{
|
|
110
|
-
"data-slot": "order-book-row",
|
|
111
|
-
"data-side": side,
|
|
112
|
-
className: cn(ORDER_BOOK_ROW, className),
|
|
113
|
-
...props,
|
|
114
|
-
children: [
|
|
115
|
-
/* @__PURE__ */ jsx(
|
|
116
|
-
"span",
|
|
117
|
-
{
|
|
118
|
-
"aria-hidden": "true",
|
|
119
|
-
className: cn(ORDER_BOOK_DEPTH, bookDepthClasses[side]),
|
|
120
|
-
style: { width: `${depthPercent(depth)}%` }
|
|
121
|
-
}
|
|
122
|
-
),
|
|
123
|
-
/* @__PURE__ */ jsx("span", { className: cn(ORDER_BOOK_PRICE, bookSideClasses[side]), children: price }),
|
|
124
|
-
/* @__PURE__ */ jsx("span", { children: size }),
|
|
125
|
-
/* @__PURE__ */ jsx("span", { children: total })
|
|
126
|
-
]
|
|
127
|
-
}
|
|
128
|
-
);
|
|
129
|
-
}
|
|
130
|
-
function depthPercent(depth) {
|
|
131
|
-
if (Number.isNaN(depth)) return 0;
|
|
132
|
-
return Math.round(Math.min(1, Math.max(0, depth)) * 100);
|
|
133
|
-
}
|
|
134
|
-
function OrderBookSpread({ className, ...props }) {
|
|
135
|
-
return /* @__PURE__ */ jsx("div", { "data-slot": "order-book-spread", className: cn(ORDER_BOOK_SPREAD, className), ...props });
|
|
136
|
-
}
|
|
137
|
-
function TradesTapeRow({ side, price, size, time, className, ...props }) {
|
|
138
|
-
return /* @__PURE__ */ jsxs(
|
|
139
|
-
"div",
|
|
140
|
-
{
|
|
141
|
-
"data-slot": "trades-tape-row",
|
|
142
|
-
"data-side": side,
|
|
143
|
-
className: cn(TRADES_TAPE_ROW, className),
|
|
144
|
-
...props,
|
|
145
|
-
children: [
|
|
146
|
-
/* @__PURE__ */ jsx("span", { className: cn(ORDER_BOOK_PRICE, bookSideClasses[side]), children: price }),
|
|
147
|
-
/* @__PURE__ */ jsx("span", { children: size }),
|
|
148
|
-
/* @__PURE__ */ jsx("span", { children: time })
|
|
149
|
-
]
|
|
150
|
-
}
|
|
151
|
-
);
|
|
152
|
-
}
|
|
153
|
-
function OrderForm({ className, onSubmit, ...props }) {
|
|
154
|
-
return /* @__PURE__ */ jsx(
|
|
155
|
-
"form",
|
|
156
|
-
{
|
|
157
|
-
"data-slot": "order-form",
|
|
158
|
-
className: cn(ORDER_FORM, className),
|
|
159
|
-
onSubmit: (e) => {
|
|
160
|
-
e.preventDefault();
|
|
161
|
-
onSubmit?.(e);
|
|
162
|
-
},
|
|
163
|
-
...props
|
|
164
|
-
}
|
|
165
|
-
);
|
|
166
|
-
}
|
|
167
|
-
function OrderFormRow({ label, value, className, ...props }) {
|
|
168
|
-
return /* @__PURE__ */ jsxs("div", { "data-slot": "order-form-row", className: cn(ORDER_FORM_ROW, className), ...props, children: [
|
|
169
|
-
/* @__PURE__ */ jsx("span", { className: ORDER_FORM_LABEL, children: label }),
|
|
170
|
-
/* @__PURE__ */ jsx("span", { className: ORDER_FORM_VALUE, children: value })
|
|
171
|
-
] });
|
|
172
|
-
}
|
|
173
|
-
function OrderFormSubmit({ side = "buy", className, ...props }) {
|
|
174
|
-
return /* @__PURE__ */ jsx(
|
|
175
|
-
"button",
|
|
176
|
-
{
|
|
177
|
-
type: "submit",
|
|
178
|
-
"data-slot": "order-form-submit",
|
|
179
|
-
"data-side": side,
|
|
180
|
-
className: cn(ORDER_FORM_SUBMIT_BASE, orderSideClasses[side], className),
|
|
181
|
-
...props
|
|
182
|
-
}
|
|
183
|
-
);
|
|
184
|
-
}
|
|
185
|
-
function OpenOrdersEmpty({ className, ...props }) {
|
|
186
|
-
return /* @__PURE__ */ jsx("div", { "data-slot": "open-orders-empty", className: cn(OPEN_ORDERS_EMPTY, className), ...props });
|
|
187
|
-
}
|
|
188
|
-
export {
|
|
189
|
-
OpenOrdersEmpty,
|
|
190
|
-
OrderBook,
|
|
191
|
-
OrderBookHead,
|
|
192
|
-
OrderBookRow,
|
|
193
|
-
OrderBookSpread,
|
|
194
|
-
OrderForm,
|
|
195
|
-
OrderFormRow,
|
|
196
|
-
OrderFormSubmit,
|
|
197
|
-
Terminal,
|
|
198
|
-
TerminalChart,
|
|
199
|
-
TerminalPane,
|
|
200
|
-
TerminalPaneBody,
|
|
201
|
-
TerminalPaneHeader,
|
|
202
|
-
TerminalTicker,
|
|
203
|
-
TickerStat,
|
|
204
|
-
TradesTapeRow
|
|
205
|
-
};
|
|
206
|
-
//# sourceMappingURL=terminal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/terminal.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n bookDepthClasses,\n bookSideClasses,\n OPEN_ORDERS_EMPTY,\n ORDER_BOOK,\n ORDER_BOOK_DEPTH,\n ORDER_BOOK_HEAD,\n ORDER_BOOK_PRICE,\n ORDER_BOOK_ROW,\n ORDER_BOOK_SPREAD,\n ORDER_FORM,\n ORDER_FORM_LABEL,\n ORDER_FORM_ROW,\n ORDER_FORM_SUBMIT_BASE,\n ORDER_FORM_VALUE,\n orderSideClasses,\n TERMINAL_CHART,\n TERMINAL_PANE,\n TERMINAL_PANE_BODY,\n TERMINAL_PANE_HEADER,\n TERMINAL_ROOT,\n TERMINAL_TICKER,\n TERMINAL_TICKER_LABEL,\n TERMINAL_TICKER_STAT,\n TERMINAL_TICKER_VALUE,\n terminalAreaClasses,\n TRADES_TAPE_ROW,\n type BookSide,\n type OrderSide,\n type TerminalArea,\n} from \"../generated/terminal\";\n\nexport type { BookSide, OrderSide, TerminalArea };\n\n/**\n * The trading terminal — an order book over an investment product's shares,\n * laid out like a spot exchange: ticker, then chart | book | order form, then\n * the trader's own orders. Every pane is a slot; the chart host is empty on\n * purpose (the plotting engine is the consumer's), the open-orders table is\n * `Table`, the tabs over it are `Tabs`.\n */\n\n/**\n * The frame: a phone stacks the panes in DOM order, `lg` and up places them\n * by `TerminalArea` on a viewport-bound grid.\n */\nexport function Terminal({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"terminal\" className={cn(TERMINAL_ROOT, className)} {...props} />;\n}\n\nexport interface TerminalPaneProps extends React.ComponentProps<\"section\"> {\n area: TerminalArea;\n}\n\n/**\n * One cell of the frame. `area` is where it sits on the desktop grid;\n * `TerminalPaneHeader` and `TerminalPaneBody` go inside.\n */\nexport function TerminalPane({ area, className, ...props }: TerminalPaneProps) {\n return (\n <section\n data-slot=\"terminal-pane\"\n data-area={area}\n className={cn(TERMINAL_PANE, terminalAreaClasses[area], className)}\n {...props}\n />\n );\n}\n\nexport function TerminalPaneHeader({ className, ...props }: React.ComponentProps<\"header\">) {\n return (\n <header\n data-slot=\"terminal-pane-header\"\n className={cn(TERMINAL_PANE_HEADER, className)}\n {...props}\n />\n );\n}\n\n/** The scrolling part of a pane. */\nexport function TerminalPaneBody({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"terminal-pane-body\" className={cn(TERMINAL_PANE_BODY, className)} {...props} />\n );\n}\n\n/**\n * The sized host a plotting engine mounts into. Renders nothing itself; a\n * consumer mounts its chart on the element (via `ref`) or fills it with\n * children. `forwardRef` rather than a `ref` prop so the handle also reaches\n * the element under React 18, where function components drop `ref`.\n */\nexport const TerminalChart = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function TerminalChart({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"terminal-chart\"\n className={cn(TERMINAL_CHART, className)}\n {...props}\n />\n );\n});\n\n/**\n * The strip across the top; holds `TickerStat`s. Already placed in the\n * `ticker` slot.\n */\nexport function TerminalTicker({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"terminal-ticker\"\n data-area=\"ticker\"\n className={cn(TERMINAL_TICKER, terminalAreaClasses.ticker, className)}\n {...props}\n />\n );\n}\n\nexport interface TickerStatProps extends Omit<React.ComponentProps<\"div\">, \"children\"> {\n label: React.ReactNode;\n value: React.ReactNode;\n}\n\n/**\n * A labelled figure in the ticker. `className` lands on the figure, so a\n * change figure passes its valence colour there.\n */\nexport function TickerStat({ label, value, className, ...props }: TickerStatProps) {\n return (\n <div data-slot=\"ticker-stat\" className={TERMINAL_TICKER_STAT} {...props}>\n <span className={TERMINAL_TICKER_LABEL}>{label}</span>\n <span className={cn(TERMINAL_TICKER_VALUE, className)}>{value}</span>\n </div>\n );\n}\n\n/** The book: `OrderBookHead`, then ask rows, `OrderBookSpread`, bid rows. */\nexport function OrderBook({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"order-book\" className={cn(ORDER_BOOK, className)} {...props} />;\n}\n\nexport interface OrderBookHeadProps extends Omit<React.ComponentProps<\"div\">, \"children\"> {\n price: React.ReactNode;\n size: React.ReactNode;\n total: React.ReactNode;\n}\n\n/** The three column captions — price, size, total — in the consumer's words. */\nexport function OrderBookHead({ price, size, total, className, ...props }: OrderBookHeadProps) {\n return (\n <div data-slot=\"order-book-head\" className={cn(ORDER_BOOK_HEAD, className)} {...props}>\n <span>{price}</span>\n <span>{size}</span>\n <span>{total}</span>\n </div>\n );\n}\n\nexport interface OrderBookRowProps extends Omit<React.ComponentProps<\"div\">, \"children\"> {\n side: BookSide;\n price: React.ReactNode;\n size: React.ReactNode;\n total: React.ReactNode;\n /**\n * This level's cumulative size as a fraction of the deepest level shown\n * (`0..=1`); it sizes the bar behind the figures.\n */\n depth?: number;\n}\n\n/** One price level. */\nexport function OrderBookRow({\n side,\n price,\n size,\n total,\n depth = 0,\n className,\n ...props\n}: OrderBookRowProps) {\n return (\n <div\n data-slot=\"order-book-row\"\n data-side={side}\n className={cn(ORDER_BOOK_ROW, className)}\n {...props}\n >\n <span\n aria-hidden=\"true\"\n className={cn(ORDER_BOOK_DEPTH, bookDepthClasses[side])}\n style={{ width: `${depthPercent(depth)}%` }}\n />\n <span className={cn(ORDER_BOOK_PRICE, bookSideClasses[side])}>{price}</span>\n <span>{size}</span>\n <span>{total}</span>\n </div>\n );\n}\n\n/**\n * The bar is a CSS percentage, so the fraction is clamped and rounded once\n * here; a NaN from an empty book reads as no depth rather than as `NaN%`.\n */\nfunction depthPercent(depth: number): number {\n if (Number.isNaN(depth)) return 0;\n return Math.round(Math.min(1, Math.max(0, depth)) * 100);\n}\n\n/**\n * The line between asks and bids: the consumer passes the mid and the spread\n * as it wants them formatted.\n */\nexport function OrderBookSpread({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"order-book-spread\" className={cn(ORDER_BOOK_SPREAD, className)} {...props} />\n );\n}\n\nexport interface TradesTapeRowProps extends Omit<React.ComponentProps<\"div\">, \"children\"> {\n side: BookSide;\n price: React.ReactNode;\n size: React.ReactNode;\n time: React.ReactNode;\n}\n\n/** One print in the tape: price coloured by the aggressor's side, then size and time. */\nexport function TradesTapeRow({ side, price, size, time, className, ...props }: TradesTapeRowProps) {\n return (\n <div\n data-slot=\"trades-tape-row\"\n data-side={side}\n className={cn(TRADES_TAPE_ROW, className)}\n {...props}\n >\n <span className={cn(ORDER_BOOK_PRICE, bookSideClasses[side])}>{price}</span>\n <span>{size}</span>\n <span>{time}</span>\n </div>\n );\n}\n\n/**\n * The order form. Owns no state: the consumer wires the inputs and handles\n * `onSubmit`; the default is prevented here so a submit never navigates.\n */\nexport function OrderForm({ className, onSubmit, ...props }: React.ComponentProps<\"form\">) {\n return (\n <form\n data-slot=\"order-form\"\n className={cn(ORDER_FORM, className)}\n onSubmit={(e) => {\n e.preventDefault();\n onSubmit?.(e);\n }}\n {...props}\n />\n );\n}\n\nexport interface OrderFormRowProps extends Omit<React.ComponentProps<\"div\">, \"children\"> {\n label: React.ReactNode;\n value: React.ReactNode;\n}\n\n/** A label / figure line in the order summary — cost, fee, what is available. */\nexport function OrderFormRow({ label, value, className, ...props }: OrderFormRowProps) {\n return (\n <div data-slot=\"order-form-row\" className={cn(ORDER_FORM_ROW, className)} {...props}>\n <span className={ORDER_FORM_LABEL}>{label}</span>\n <span className={ORDER_FORM_VALUE}>{value}</span>\n </div>\n );\n}\n\nexport interface OrderFormSubmitProps extends Omit<React.ComponentProps<\"button\">, \"type\"> {\n side?: OrderSide;\n}\n\n/** The submit, filled in the colour of the intent. */\nexport function OrderFormSubmit({ side = \"buy\", className, ...props }: OrderFormSubmitProps) {\n return (\n <button\n type=\"submit\"\n data-slot=\"order-form-submit\"\n data-side={side}\n className={cn(ORDER_FORM_SUBMIT_BASE, orderSideClasses[side], className)}\n {...props}\n />\n );\n}\n\n/** The open-orders pane with nothing in it. */\nexport function OpenOrdersEmpty({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"open-orders-empty\" className={cn(OPEN_ORDERS_EMPTY, className)} {...props} />\n );\n}\n"],"mappings":";AAmDS,cAqFL,YArFK;AAjDT,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAgBA,SAAS,SAAS,EAAE,WAAW,GAAG,MAAM,GAAgC;AAC7E,SAAO,oBAAC,SAAI,aAAU,YAAW,WAAW,GAAG,eAAe,SAAS,GAAI,GAAG,OAAO;AACvF;AAUO,SAAS,aAAa,EAAE,MAAM,WAAW,GAAG,MAAM,GAAsB;AAC7E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,WAAW,GAAG,eAAe,oBAAoB,IAAI,GAAG,SAAS;AAAA,MAChE,GAAG;AAAA;AAAA,EACN;AAEJ;AAEO,SAAS,mBAAmB,EAAE,WAAW,GAAG,MAAM,GAAmC;AAC1F,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,sBAAsB,SAAS;AAAA,MAC5C,GAAG;AAAA;AAAA,EACN;AAEJ;AAGO,SAAS,iBAAiB,EAAE,WAAW,GAAG,MAAM,GAAgC;AACrF,SACE,oBAAC,SAAI,aAAU,sBAAqB,WAAW,GAAG,oBAAoB,SAAS,GAAI,GAAG,OAAO;AAEjG;AAQO,MAAM,gBAAgB,MAAM,WAGjC,SAASA,eAAc,EAAE,WAAW,GAAG,MAAM,GAAG,KAAK;AACrD,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,aAAU;AAAA,MACV,WAAW,GAAG,gBAAgB,SAAS;AAAA,MACtC,GAAG;AAAA;AAAA,EACN;AAEJ,CAAC;AAMM,SAAS,eAAe,EAAE,WAAW,GAAG,MAAM,GAAgC;AACnF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,aAAU;AAAA,MACV,WAAW,GAAG,iBAAiB,oBAAoB,QAAQ,SAAS;AAAA,MACnE,GAAG;AAAA;AAAA,EACN;AAEJ;AAWO,SAAS,WAAW,EAAE,OAAO,OAAO,WAAW,GAAG,MAAM,GAAoB;AACjF,SACE,qBAAC,SAAI,aAAU,eAAc,WAAW,sBAAuB,GAAG,OAChE;AAAA,wBAAC,UAAK,WAAW,uBAAwB,iBAAM;AAAA,IAC/C,oBAAC,UAAK,WAAW,GAAG,uBAAuB,SAAS,GAAI,iBAAM;AAAA,KAChE;AAEJ;AAGO,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAAgC;AAC9E,SAAO,oBAAC,SAAI,aAAU,cAAa,WAAW,GAAG,YAAY,SAAS,GAAI,GAAG,OAAO;AACtF;AASO,SAAS,cAAc,EAAE,OAAO,MAAM,OAAO,WAAW,GAAG,MAAM,GAAuB;AAC7F,SACE,qBAAC,SAAI,aAAU,mBAAkB,WAAW,GAAG,iBAAiB,SAAS,GAAI,GAAG,OAC9E;AAAA,wBAAC,UAAM,iBAAM;AAAA,IACb,oBAAC,UAAM,gBAAK;AAAA,IACZ,oBAAC,UAAM,iBAAM;AAAA,KACf;AAEJ;AAeO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,GAAsB;AACpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,WAAW,GAAG,gBAAgB,SAAS;AAAA,MACtC,GAAG;AAAA,MAEJ;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,eAAY;AAAA,YACZ,WAAW,GAAG,kBAAkB,iBAAiB,IAAI,CAAC;AAAA,YACtD,OAAO,EAAE,OAAO,GAAG,aAAa,KAAK,CAAC,IAAI;AAAA;AAAA,QAC5C;AAAA,QACA,oBAAC,UAAK,WAAW,GAAG,kBAAkB,gBAAgB,IAAI,CAAC,GAAI,iBAAM;AAAA,QACrE,oBAAC,UAAM,gBAAK;AAAA,QACZ,oBAAC,UAAM,iBAAM;AAAA;AAAA;AAAA,EACf;AAEJ;AAMA,SAAS,aAAa,OAAuB;AAC3C,MAAI,OAAO,MAAM,KAAK,EAAG,QAAO;AAChC,SAAO,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG;AACzD;AAMO,SAAS,gBAAgB,EAAE,WAAW,GAAG,MAAM,GAAgC;AACpF,SACE,oBAAC,SAAI,aAAU,qBAAoB,WAAW,GAAG,mBAAmB,SAAS,GAAI,GAAG,OAAO;AAE/F;AAUO,SAAS,cAAc,EAAE,MAAM,OAAO,MAAM,MAAM,WAAW,GAAG,MAAM,GAAuB;AAClG,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,WAAW,GAAG,iBAAiB,SAAS;AAAA,MACvC,GAAG;AAAA,MAEJ;AAAA,4BAAC,UAAK,WAAW,GAAG,kBAAkB,gBAAgB,IAAI,CAAC,GAAI,iBAAM;AAAA,QACrE,oBAAC,UAAM,gBAAK;AAAA,QACZ,oBAAC,UAAM,gBAAK;AAAA;AAAA;AAAA,EACd;AAEJ;AAMO,SAAS,UAAU,EAAE,WAAW,UAAU,GAAG,MAAM,GAAiC;AACzF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,YAAY,SAAS;AAAA,MACnC,UAAU,CAAC,MAAM;AACf,UAAE,eAAe;AACjB,mBAAW,CAAC;AAAA,MACd;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAQO,SAAS,aAAa,EAAE,OAAO,OAAO,WAAW,GAAG,MAAM,GAAsB;AACrF,SACE,qBAAC,SAAI,aAAU,kBAAiB,WAAW,GAAG,gBAAgB,SAAS,GAAI,GAAG,OAC5E;AAAA,wBAAC,UAAK,WAAW,kBAAmB,iBAAM;AAAA,IAC1C,oBAAC,UAAK,WAAW,kBAAmB,iBAAM;AAAA,KAC5C;AAEJ;AAOO,SAAS,gBAAgB,EAAE,OAAO,OAAO,WAAW,GAAG,MAAM,GAAyB;AAC3F,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,aAAW;AAAA,MACX,WAAW,GAAG,wBAAwB,iBAAiB,IAAI,GAAG,SAAS;AAAA,MACtE,GAAG;AAAA;AAAA,EACN;AAEJ;AAGO,SAAS,gBAAgB,EAAE,WAAW,GAAG,MAAM,GAAgC;AACpF,SACE,oBAAC,SAAI,aAAU,qBAAoB,WAAW,GAAG,mBAAmB,SAAS,GAAI,GAAG,OAAO;AAE/F;","names":["TerminalChart"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/textarea.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { TEXTAREA_BASE, textareaSizeClasses, type TextareaSize } from \"../generated/textarea\";\nimport { markLabelable } from \"../primitives/labelable\";\nimport { useFieldControlId } from \"./field-context\";\n\nexport type { TextareaSize };\n\nexport interface TextareaProps extends React.ComponentProps<\"textarea\"> {\n size?: TextareaSize;\n}\n\nexport function Textarea({ className, id, size = \"md\", ...props }: TextareaProps) {\n return (\n <textarea\n data-slot=\"textarea\"\n data-size={size}\n id={useFieldControlId(id)}\n className={cn(TEXTAREA_BASE, textareaSizeClasses[size], className)}\n {...props}\n />\n );\n}\n\nmarkLabelable(Textarea);\n"],"mappings":";AAgBI;AAdJ,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB,SAAS,eAAe,2BAA8C;AACtE,SAAS,qBAAqB;AAC9B,SAAS,yBAAyB;AAQ3B,SAAS,SAAS,EAAE,WAAW,IAAI,OAAO,MAAM,GAAG,MAAM,GAAkB;AAChF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,IAAI,kBAAkB,EAAE;AAAA,MACxB,WAAW,GAAG,eAAe,oBAAoB,IAAI,GAAG,SAAS;AAAA,MAChE,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,cAAc,QAAQ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/toggle-group.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport {\n toggleVariants,\n type ToggleVariant,\n type ToggleSize,\n} from \"./toggle\";\n\ntype ToggleGroupContextValue = {\n variant: ToggleVariant;\n size: ToggleSize;\n value: string[];\n toggle: (itemValue: string) => void;\n};\n\nconst ToggleGroupContext = React.createContext<ToggleGroupContextValue>({\n variant: \"bare\",\n size: \"md\",\n value: [],\n toggle: () => {},\n});\n\nexport interface ToggleGroupProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\"> {\n variant?: ToggleVariant;\n size?: ToggleSize;\n type?: \"single\" | \"multiple\";\n value?: string | string[];\n defaultValue?: string | string[];\n onValueChange?: (value: string | string[]) => void;\n}\n\nfunction toArray(v: string | string[] | undefined): string[] {\n if (v === undefined) return [];\n return Array.isArray(v) ? v : v === \"\" ? [] : [v];\n}\n\nexport function ToggleGroup({\n className,\n variant = \"bare\",\n size = \"md\",\n type = \"single\",\n value,\n defaultValue,\n onValueChange,\n children,\n ...props\n}: ToggleGroupProps) {\n const [selected, setSelected] = useControllableState<string[]>({\n ...(value !== undefined ? { value: toArray(value) } : {}),\n defaultValue: toArray(defaultValue),\n onChange: (next) =>\n onValueChange?.(type === \"single\" ? (next[0] ?? \"\") : next),\n });\n\n const toggle = React.useCallback(\n (itemValue: string) => {\n if (type === \"single\") {\n setSelected(selected.includes(itemValue) ? [] : [itemValue]);\n } else {\n setSelected(\n selected.includes(itemValue)\n ? selected.filter((v) => v !== itemValue)\n : [...selected, itemValue],\n );\n }\n },\n [type, selected, setSelected],\n );\n\n return (\n <div\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n className={cn(\n \"group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs\",\n className,\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size, value: selected, toggle }}>\n {children}\n </ToggleGroupContext.Provider>\n </div>\n );\n}\n\nexport interface ToggleGroupItemProps\n extends Omit<React.ComponentProps<\"button\">, \"value\" | \"onChange\"> {\n value: string;\n variant?: ToggleVariant;\n size?: ToggleSize;\n}\n\nexport function ToggleGroupItem({\n className,\n children,\n value,\n variant,\n size,\n onClick,\n ...props\n}: ToggleGroupItemProps) {\n const context = React.useContext(ToggleGroupContext);\n const resolvedVariant = context.variant || variant || \"bare\";\n const resolvedSize = context.size || size || \"md\";\n const on = context.value.includes(value);\n\n return (\n <button\n type=\"button\"\n data-slot=\"toggle-group-item\"\n data-variant={resolvedVariant}\n data-size={resolvedSize}\n data-state={on ? \"on\" : \"off\"}\n aria-pressed={on}\n className={cn(\n toggleVariants({ variant: resolvedVariant, size: resolvedSize }),\n // `flex-auto`, not shadcn's `flex-1`: the group is `w-fit`, and basis-0 items\n // make Chrome split it into equal columns, so a longer label overflows its cell.\n \"min-w-0 flex-auto shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:-ml-px data-[variant=outline]:first:ml-0 data-[state=on]:z-10\",\n className,\n )}\n onClick={(e) => {\n onClick?.(e);\n context.toggle(value);\n }}\n {...props}\n >\n {children}\n </button>\n );\n}\n"],"mappings":";AAoFM;AAlFN,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,OAGK;AASP,MAAM,qBAAqB,MAAM,cAAuC;AAAA,EACtE,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO,CAAC;AAAA,EACR,QAAQ,MAAM;AAAA,EAAC;AACjB,CAAC;AAYD,SAAS,QAAQ,GAA4C;AAC3D,MAAI,MAAM,OAAW,QAAO,CAAC;AAC7B,SAAO,MAAM,QAAQ,CAAC,IAAI,IAAI,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;AAClD;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAqB;AACnB,QAAM,CAAC,UAAU,WAAW,IAAI,qBAA+B;AAAA,IAC7D,GAAI,UAAU,SAAY,EAAE,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,IACvD,cAAc,QAAQ,YAAY;AAAA,IAClC,UAAU,CAAC,SACT,gBAAgB,SAAS,WAAY,KAAK,CAAC,KAAK,KAAM,IAAI;AAAA,EAC9D,CAAC;AAED,QAAM,SAAS,MAAM;AAAA,IACnB,CAAC,cAAsB;AACrB,UAAI,SAAS,UAAU;AACrB,oBAAY,SAAS,SAAS,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AAAA,MAC7D,OAAO;AACL;AAAA,UACE,SAAS,SAAS,SAAS,IACvB,SAAS,OAAO,CAAC,MAAM,MAAM,SAAS,IACtC,CAAC,GAAG,UAAU,SAAS;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,MAAM,UAAU,WAAW;AAAA,EAC9B;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,aAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEJ,8BAAC,mBAAmB,UAAnB,EAA4B,OAAO,EAAE,SAAS,MAAM,OAAO,UAAU,OAAO,GAC1E,UACH;AAAA;AAAA,EACF;AAEJ;AASO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAyB;AACvB,QAAM,UAAU,MAAM,WAAW,kBAAkB;AACnD,QAAM,kBAAkB,QAAQ,WAAW,WAAW;AACtD,QAAM,eAAe,QAAQ,QAAQ,QAAQ;AAC7C,QAAM,KAAK,QAAQ,MAAM,SAAS,KAAK;AAEvC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,aAAW;AAAA,MACX,cAAY,KAAK,OAAO;AAAA,MACxB,gBAAc;AAAA,MACd,WAAW;AAAA,QACT,eAAe,EAAE,SAAS,iBAAiB,MAAM,aAAa,CAAC;AAAA;AAAA;AAAA,QAG/D;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS,CAAC,MAAM;AACd,kBAAU,CAAC;AACX,gBAAQ,OAAO,KAAK;AAAA,MACtB;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/toggle.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport {\n TOGGLE_BASE,\n toggleSizeClasses,\n toggleVariantClasses,\n type ToggleSize,\n type ToggleVariant,\n} from \"../generated/toggle\";\n\nexport type { ToggleSize, ToggleVariant };\n\nexport interface ToggleVariantsOptions {\n variant?: ToggleVariant;\n size?: ToggleSize;\n className?: string;\n}\n\n/**\n * Returns the fused canonical toggle class string. Reused by `toggle-group` so\n * its items adopt the same styling, mirroring Rust's `toggle_classes`.\n */\nexport function toggleVariants({\n variant = \"bare\",\n size = \"md\",\n className,\n}: ToggleVariantsOptions = {}): string {\n return cn(TOGGLE_BASE, toggleVariantClasses[variant], toggleSizeClasses[size], className);\n}\n\nexport interface ToggleProps\n extends Omit<React.ComponentProps<\"button\">, \"onChange\"> {\n variant?: ToggleVariant;\n size?: ToggleSize;\n pressed?: boolean;\n defaultPressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n}\n\nexport function Toggle({\n className,\n variant = \"bare\",\n size = \"md\",\n pressed,\n defaultPressed = false,\n onPressedChange,\n onClick,\n ...props\n}: ToggleProps) {\n const [on, setOn] = useControllableState<boolean>({\n ...(pressed !== undefined ? { value: pressed } : {}),\n defaultValue: defaultPressed,\n ...(onPressedChange ? { onChange: onPressedChange } : {}),\n });\n return (\n <button\n type=\"button\"\n data-slot=\"toggle\"\n data-state={on ? \"on\" : \"off\"}\n aria-pressed={on}\n className={cn(toggleVariants({ variant, size }), className)}\n onClick={(e) => {\n onClick?.(e);\n setOn(!on);\n }}\n {...props}\n />\n );\n}\n"],"mappings":";AA0DI;AAxDJ,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AAcA,SAAS,eAAe;AAAA,EAC7B,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AACF,IAA2B,CAAC,GAAW;AACrC,SAAO,GAAG,aAAa,qBAAqB,OAAO,GAAG,kBAAkB,IAAI,GAAG,SAAS;AAC1F;AAWO,SAAS,OAAO;AAAA,EACrB;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAgB;AACd,QAAM,CAAC,IAAI,KAAK,IAAI,qBAA8B;AAAA,IAChD,GAAI,YAAY,SAAY,EAAE,OAAO,QAAQ,IAAI,CAAC;AAAA,IAClD,cAAc;AAAA,IACd,GAAI,kBAAkB,EAAE,UAAU,gBAAgB,IAAI,CAAC;AAAA,EACzD,CAAC;AACD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,cAAY,KAAK,OAAO;AAAA,MACxB,gBAAc;AAAA,MACd,WAAW,GAAG,eAAe,EAAE,SAAS,KAAK,CAAC,GAAG,SAAS;AAAA,MAC1D,SAAS,CAAC,MAAM;AACd,kBAAU,CAAC;AACX,cAAM,CAAC,EAAE;AAAA,MACX;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/tooltip.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useFloating } from \"../primitives/use-floating\";\nimport { usePresence } from \"../primitives/presence\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport { TOOLTIP_CONTENT } from \"../generated/tooltip\";\n\ninterface TooltipContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n anchorRef: React.RefObject<HTMLElement | null>;\n}\n\nconst TooltipContext = React.createContext<TooltipContextValue | null>(null);\n\nfunction useTooltip(): TooltipContextValue {\n const ctx = React.useContext(TooltipContext);\n if (!ctx) throw new Error(\"Tooltip parts must be used within <Tooltip>\");\n return ctx;\n}\n\nexport interface TooltipProviderProps {\n children?: React.ReactNode;\n}\n\nexport function TooltipProvider({ children }: TooltipProviderProps) {\n return <>{children}</>;\n}\n\nexport interface TooltipProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function Tooltip({ open, defaultOpen = false, onOpenChange, children }: TooltipProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const anchorRef = React.useRef<HTMLElement | null>(null);\n return (\n <TooltipProvider>\n <TooltipContext.Provider value={{ open: isOpen, setOpen, anchorRef }}>\n {children}\n </TooltipContext.Provider>\n </TooltipProvider>\n );\n}\n\nexport interface TooltipTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function TooltipTrigger({\n asChild = false,\n onPointerEnter,\n onPointerLeave,\n onFocus,\n onBlur,\n ...props\n}: TooltipTriggerProps) {\n const { setOpen, anchorRef } = useTooltip();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"tooltip-trigger\"\n ref={anchorRef as React.Ref<never>}\n onPointerEnter={(e: React.PointerEvent<HTMLButtonElement>) => {\n onPointerEnter?.(e);\n setOpen(true);\n }}\n onPointerLeave={(e: React.PointerEvent<HTMLButtonElement>) => {\n onPointerLeave?.(e);\n setOpen(false);\n }}\n onFocus={(e: React.FocusEvent<HTMLButtonElement>) => {\n onFocus?.(e);\n setOpen(true);\n }}\n onBlur={(e: React.FocusEvent<HTMLButtonElement>) => {\n onBlur?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface TooltipContentProps extends React.ComponentProps<\"div\"> {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n sideOffset?: number;\n}\n\nexport function TooltipContent({\n className,\n side: sideProp = \"top\",\n sideOffset = 0,\n children,\n ...props\n}: TooltipContentProps) {\n const { open, anchorRef } = useTooltip();\n const { isPresent, ref: presRef } = usePresence(open);\n const { floatingRef, style, side } = useFloating({\n anchorRef,\n open,\n side: sideProp,\n offset: sideOffset,\n });\n if (!isPresent) return null;\n return (\n <Portal>\n <div\n data-slot=\"tooltip-content\"\n role=\"tooltip\"\n data-state={open ? \"open\" : \"closed\"}\n data-side={side}\n ref={mergeRefs(floatingRef, presRef)}\n style={style}\n className={cn(TOOLTIP_CONTENT, className)}\n {...(props as Record<string, unknown>)}\n >\n {children}\n </div>\n </Portal>\n );\n}\n"],"mappings":";AA+BS;AA7BT,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB,SAAS,4BAA4B;AACrC,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB;AAC1B,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,uBAAuB;AAQhC,MAAM,iBAAiB,MAAM,cAA0C,IAAI;AAE3E,SAAS,aAAkC;AACzC,QAAM,MAAM,MAAM,WAAW,cAAc;AAC3C,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,6CAA6C;AACvE,SAAO;AACT;AAMO,SAAS,gBAAgB,EAAE,SAAS,GAAyB;AAClE,SAAO,gCAAG,UAAS;AACrB;AASO,SAAS,QAAQ,EAAE,MAAM,cAAc,OAAO,cAAc,SAAS,GAAiB;AAC3F,QAAM,CAAC,QAAQ,OAAO,IAAI,qBAA8B;AAAA,IACtD,GAAI,SAAS,SAAY,EAAE,OAAO,KAAK,IAAI,CAAC;AAAA,IAC5C,cAAc;AAAA,IACd,GAAI,eAAe,EAAE,UAAU,aAAa,IAAI,CAAC;AAAA,EACnD,CAAC;AACD,QAAM,YAAY,MAAM,OAA2B,IAAI;AACvD,SACE,oBAAC,mBACC,8BAAC,eAAe,UAAf,EAAwB,OAAO,EAAE,MAAM,QAAQ,SAAS,UAAU,GAChE,UACH,GACF;AAEJ;AAMO,SAAS,eAAe;AAAA,EAC7B,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAwB;AACtB,QAAM,EAAE,SAAS,UAAU,IAAI,WAAW;AAC1C,QAAM,OAAO,UAAU,OAAO;AAC9B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,KAAK;AAAA,MACL,gBAAgB,CAAC,MAA6C;AAC5D,yBAAiB,CAAC;AAClB,gBAAQ,IAAI;AAAA,MACd;AAAA,MACA,gBAAgB,CAAC,MAA6C;AAC5D,yBAAiB,CAAC;AAClB,gBAAQ,KAAK;AAAA,MACf;AAAA,MACA,SAAS,CAAC,MAA2C;AACnD,kBAAU,CAAC;AACX,gBAAQ,IAAI;AAAA,MACd;AAAA,MACA,QAAQ,CAAC,MAA2C;AAClD,iBAAS,CAAC;AACV,gBAAQ,KAAK;AAAA,MACf;AAAA,MACC,GAAI;AAAA;AAAA,EACP;AAEJ;AAOO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA,MAAM,WAAW;AAAA,EACjB,aAAa;AAAA,EACb;AAAA,EACA,GAAG;AACL,GAAwB;AACtB,QAAM,EAAE,MAAM,UAAU,IAAI,WAAW;AACvC,QAAM,EAAE,WAAW,KAAK,QAAQ,IAAI,YAAY,IAAI;AACpD,QAAM,EAAE,aAAa,OAAO,KAAK,IAAI,YAAY;AAAA,IAC/C;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,QAAQ;AAAA,EACV,CAAC;AACD,MAAI,CAAC,UAAW,QAAO;AACvB,SACE,oBAAC,UACC;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAK;AAAA,MACL,cAAY,OAAO,SAAS;AAAA,MAC5B,aAAW;AAAA,MACX,KAAK,UAAU,aAAa,OAAO;AAAA,MACnC;AAAA,MACA,WAAW,GAAG,iBAAiB,SAAS;AAAA,MACvC,GAAI;AAAA,MAEJ;AAAA;AAAA,EACH,GACF;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/top-bar.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface TopBarProps extends React.ComponentProps<\"header\"> {\n /** The app switcher, or the service's name. */\n start?: React.ReactNode;\n /** Service stats, then an `AccountMenu` last. */\n end?: React.ReactNode;\n}\n\n/**\n * The wide screen's utility bar over the content column: who and where, never\n * product nav (that is the rail's). Layout only — `AppShell.topBar` pins it.\n */\nexport function TopBar({ start, end, className, ...props }: TopBarProps) {\n return (\n <header\n data-slot=\"top-bar\"\n className={cn(\"flex h-14 items-center gap-3 border-b border-border bg-background px-8\", className)}\n {...props}\n >\n <div data-slot=\"top-bar-start\" className=\"flex min-w-0 items-center gap-2\">\n {start}\n </div>\n <div data-slot=\"top-bar-end\" className=\"ml-auto flex shrink-0 items-center gap-3\">\n {end}\n </div>\n </header>\n );\n}\n"],"mappings":"AAgBI,SAKE,KALF;AAhBJ,YAAY,WAAW;AACvB,SAAS,UAAU;AAaZ,SAAS,OAAO,EAAE,OAAO,KAAK,WAAW,GAAG,MAAM,GAAgB;AACvE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,0EAA0E,SAAS;AAAA,MAChG,GAAG;AAAA,MAEJ;AAAA,4BAAC,SAAI,aAAU,iBAAgB,WAAU,mCACtC,iBACH;AAAA,QACA,oBAAC,SAAI,aAAU,eAAc,WAAU,4CACpC,eACH;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/use-shell-nav.ts"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\n/**\n * The optimistic half of a nav: the id of the item just clicked, until the\n * pathname catches up.\n *\n * A router that waits for the next page's payload changes the pathname 150–300ms\n * after the click — exactly the window in which a highlight that has not moved\n * reads as a click that did not land. So the clicked item is marked at once.\n *\n * The entry remembers the pathname it was made on, so the moment the pathname\n * changes it is stale by construction and the URL is the truth again. It is\n * cleared during render, not in an effect (an effect would paint one frame with\n * the URL's row marked and the stale one not), and cleared rather than ignored:\n * left behind, it would come back to life on a return to the page it was made\n * on. A click that never navigates is forgotten by the next one.\n */\nexport function usePendingNavigation(\n pathname: string,\n): readonly [pendingId: string | null, markPending: (id: string) => void] {\n const [pending, setPending] = React.useState<{ id: string; from: string } | null>(null);\n if (pending && pending.from !== pathname) setPending(null);\n const pendingId = pending && pending.from === pathname ? pending.id : null;\n const markPending = React.useCallback(\n (id: string) => setPending({ id, from: pathname }),\n [pathname],\n );\n return [pendingId, markPending] as const;\n}\n\n/**\n * Places the section's `[data-slot=\"shell-nav-marker\"]` over its\n * `[aria-current=\"page\"]` row, by measurement: rows differ in count and every\n * label is somebody's translation, and SSR cannot know those offsets (until the\n * first placement the row carries the fill itself — see motion.css). Re-runs\n * when `at` changes and whenever the section resizes — rows come and go, labels\n * change width with the locale or a font swap.\n */\nexport function useSlideMarker(\n ref: React.RefObject<HTMLElement | null>,\n at: string | null,\n): void {\n // Which marker node was last placed, so a re-run over the same node — a move,\n // a resize — is told apart from a marker that has just mounted. `undefined`\n // until the first run, so only a marker mounting AFTER the section settled\n // counts as entering (and fades); one hydration finds on its row cuts in.\n const placed = React.useRef<HTMLElement | null | undefined>(undefined);\n React.useLayoutEffect(() => {\n const section = ref.current;\n if (!section) return;\n const place = () => {\n const marker = section.querySelector<HTMLElement>('[data-slot=\"shell-nav-marker\"]');\n const row = section.querySelector<HTMLElement>('[aria-current=\"page\"]');\n const fresh = marker !== placed.current;\n const entering = fresh && placed.current !== undefined;\n placed.current = marker;\n if (!marker || !row) return;\n if (fresh) marker.style.transition = \"none\";\n marker.style.transform = `translate(${row.offsetLeft}px, ${row.offsetTop}px)`;\n marker.style.width = `${row.offsetWidth}px`;\n marker.style.height = `${row.offsetHeight}px`;\n if (fresh) {\n // A transition is decided by the style AFTER the change: flushing the\n // placement first makes it the starting point, so a new marker appears on\n // its row instead of sliding in from the section's origin.\n void marker.offsetWidth;\n marker.style.transition = \"\";\n marker.dataset[\"placed\"] = entering ? \"entered\" : \"first\";\n }\n };\n place();\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(place);\n observer.observe(section);\n return () => observer.disconnect();\n }, [ref, at]);\n}\n"],"mappings":";AAEA,YAAY,WAAW;AAiBhB,SAAS,qBACd,UACwE;AACxE,QAAM,CAAC,SAAS,UAAU,IAAI,MAAM,SAA8C,IAAI;AACtF,MAAI,WAAW,QAAQ,SAAS,SAAU,YAAW,IAAI;AACzD,QAAM,YAAY,WAAW,QAAQ,SAAS,WAAW,QAAQ,KAAK;AACtE,QAAM,cAAc,MAAM;AAAA,IACxB,CAAC,OAAe,WAAW,EAAE,IAAI,MAAM,SAAS,CAAC;AAAA,IACjD,CAAC,QAAQ;AAAA,EACX;AACA,SAAO,CAAC,WAAW,WAAW;AAChC;AAUO,SAAS,eACd,KACA,IACM;AAKN,QAAM,SAAS,MAAM,OAAuC,MAAS;AACrE,QAAM,gBAAgB,MAAM;AAC1B,UAAM,UAAU,IAAI;AACpB,QAAI,CAAC,QAAS;AACd,UAAM,QAAQ,MAAM;AAClB,YAAM,SAAS,QAAQ,cAA2B,gCAAgC;AAClF,YAAM,MAAM,QAAQ,cAA2B,uBAAuB;AACtE,YAAM,QAAQ,WAAW,OAAO;AAChC,YAAM,WAAW,SAAS,OAAO,YAAY;AAC7C,aAAO,UAAU;AACjB,UAAI,CAAC,UAAU,CAAC,IAAK;AACrB,UAAI,MAAO,QAAO,MAAM,aAAa;AACrC,aAAO,MAAM,YAAY,aAAa,IAAI,UAAU,OAAO,IAAI,SAAS;AACxE,aAAO,MAAM,QAAQ,GAAG,IAAI,WAAW;AACvC,aAAO,MAAM,SAAS,GAAG,IAAI,YAAY;AACzC,UAAI,OAAO;AAIT,aAAK,OAAO;AACZ,eAAO,MAAM,aAAa;AAC1B,eAAO,QAAQ,QAAQ,IAAI,WAAW,YAAY;AAAA,MACpD;AAAA,IACF;AACA,UAAM;AACN,QAAI,OAAO,mBAAmB,YAAa;AAC3C,UAAM,WAAW,IAAI,eAAe,KAAK;AACzC,aAAS,QAAQ,OAAO;AACxB,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG,CAAC,KAAK,EAAE,CAAC;AACd;","names":[]}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
const TERMINAL_ROOT = "grid w-full grid-cols-1 gap-px bg-border text-ink text-sm lg:h-[calc(100dvh-var(--ev-shell-offset,0px))] lg:grid-cols-[minmax(0,1fr)_18rem_20rem] lg:grid-rows-[auto_minmax(0,1fr)_14rem]";
|
|
2
|
-
const terminalAreaClasses = {
|
|
3
|
-
"ticker": "lg:col-span-3 lg:row-start-1",
|
|
4
|
-
"chart": "lg:col-start-1 lg:row-start-2",
|
|
5
|
-
"book": "lg:col-start-2 lg:row-start-2",
|
|
6
|
-
"form": "lg:col-start-3 lg:row-start-2",
|
|
7
|
-
"orders": "lg:col-span-3 lg:row-start-3"
|
|
8
|
-
};
|
|
9
|
-
const TERMINAL_PANE = "flex min-h-0 min-w-0 flex-col overflow-hidden bg-card";
|
|
10
|
-
const TERMINAL_PANE_HEADER = "flex h-9 shrink-0 items-center gap-2 border-b border-border px-3 text-xs font-medium text-ink-mid";
|
|
11
|
-
const TERMINAL_PANE_BODY = "flex min-h-0 flex-1 flex-col overflow-auto";
|
|
12
|
-
const TERMINAL_CHART = "relative min-h-[18rem] flex-1 overflow-hidden";
|
|
13
|
-
const TERMINAL_TICKER = "flex min-w-0 items-center gap-6 overflow-x-auto bg-card px-4 py-2 whitespace-nowrap";
|
|
14
|
-
const TERMINAL_TICKER_STAT = "flex shrink-0 flex-col gap-0.5";
|
|
15
|
-
const TERMINAL_TICKER_LABEL = "text-[11px] uppercase tracking-wide text-ink-soft";
|
|
16
|
-
const TERMINAL_TICKER_VALUE = "font-mono text-sm tabular-nums text-ink";
|
|
17
|
-
const bookSideClasses = {
|
|
18
|
-
"bid": "text-positive",
|
|
19
|
-
"ask": "text-accent-error"
|
|
20
|
-
};
|
|
21
|
-
const bookDepthClasses = {
|
|
22
|
-
"bid": "bg-positive/15",
|
|
23
|
-
"ask": "bg-accent-error/15"
|
|
24
|
-
};
|
|
25
|
-
const ORDER_BOOK = "flex min-h-0 flex-1 flex-col font-mono text-xs tabular-nums";
|
|
26
|
-
const ORDER_BOOK_HEAD = "grid shrink-0 grid-cols-3 gap-2 px-3 py-1.5 text-right text-[11px] text-ink-soft [&>*:first-child]:text-left";
|
|
27
|
-
const ORDER_BOOK_ROW = "relative isolate grid cursor-pointer grid-cols-3 gap-2 px-3 py-0.5 text-right leading-5 hover:bg-hover";
|
|
28
|
-
const ORDER_BOOK_PRICE = "text-left";
|
|
29
|
-
const ORDER_BOOK_DEPTH = "pointer-events-none absolute inset-y-0 right-0 -z-10";
|
|
30
|
-
const ORDER_BOOK_SPREAD = "flex shrink-0 items-center justify-between gap-2 border-y border-border bg-muted/50 px-3 py-1 text-ink-mid";
|
|
31
|
-
const TRADES_TAPE_ROW = "grid grid-cols-3 gap-2 px-3 py-0.5 text-right font-mono text-xs leading-5 tabular-nums hover:bg-hover";
|
|
32
|
-
const ORDER_FORM = "flex flex-col gap-3 p-3 text-sm";
|
|
33
|
-
const ORDER_FORM_ROW = "flex items-center justify-between gap-2 text-xs";
|
|
34
|
-
const ORDER_FORM_LABEL = "text-ink-soft";
|
|
35
|
-
const ORDER_FORM_VALUE = "font-mono tabular-nums text-ink";
|
|
36
|
-
const ORDER_FORM_SUBMIT_BASE = "inline-flex h-10 w-full shrink-0 cursor-pointer items-center justify-center rounded-[var(--control-radius)] text-sm font-semibold transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50";
|
|
37
|
-
const orderSideClasses = {
|
|
38
|
-
"buy": "bg-positive text-on-positive hover:bg-positive/90",
|
|
39
|
-
"sell": "bg-accent-error text-on-accent-error hover:bg-accent-error/90"
|
|
40
|
-
};
|
|
41
|
-
const OPEN_ORDERS_EMPTY = "flex flex-1 items-center justify-center p-6 text-sm text-ink-soft";
|
|
42
|
-
export {
|
|
43
|
-
OPEN_ORDERS_EMPTY,
|
|
44
|
-
ORDER_BOOK,
|
|
45
|
-
ORDER_BOOK_DEPTH,
|
|
46
|
-
ORDER_BOOK_HEAD,
|
|
47
|
-
ORDER_BOOK_PRICE,
|
|
48
|
-
ORDER_BOOK_ROW,
|
|
49
|
-
ORDER_BOOK_SPREAD,
|
|
50
|
-
ORDER_FORM,
|
|
51
|
-
ORDER_FORM_LABEL,
|
|
52
|
-
ORDER_FORM_ROW,
|
|
53
|
-
ORDER_FORM_SUBMIT_BASE,
|
|
54
|
-
ORDER_FORM_VALUE,
|
|
55
|
-
TERMINAL_CHART,
|
|
56
|
-
TERMINAL_PANE,
|
|
57
|
-
TERMINAL_PANE_BODY,
|
|
58
|
-
TERMINAL_PANE_HEADER,
|
|
59
|
-
TERMINAL_ROOT,
|
|
60
|
-
TERMINAL_TICKER,
|
|
61
|
-
TERMINAL_TICKER_LABEL,
|
|
62
|
-
TERMINAL_TICKER_STAT,
|
|
63
|
-
TERMINAL_TICKER_VALUE,
|
|
64
|
-
TRADES_TAPE_ROW,
|
|
65
|
-
bookDepthClasses,
|
|
66
|
-
bookSideClasses,
|
|
67
|
-
orderSideClasses,
|
|
68
|
-
terminalAreaClasses
|
|
69
|
-
};
|
|
70
|
-
//# sourceMappingURL=terminal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/generated/terminal.ts"],"sourcesContent":["// AUTO-GENERATED by `nix run .#gen` — do not edit.\n\nexport const TERMINAL_ROOT = \"grid w-full grid-cols-1 gap-px bg-border text-ink text-sm lg:h-[calc(100dvh-var(--ev-shell-offset,0px))] lg:grid-cols-[minmax(0,1fr)_18rem_20rem] lg:grid-rows-[auto_minmax(0,1fr)_14rem]\";\n\nexport const terminalAreaClasses = {\n \"ticker\": \"lg:col-span-3 lg:row-start-1\",\n \"chart\": \"lg:col-start-1 lg:row-start-2\",\n \"book\": \"lg:col-start-2 lg:row-start-2\",\n \"form\": \"lg:col-start-3 lg:row-start-2\",\n \"orders\": \"lg:col-span-3 lg:row-start-3\",\n} as const;\nexport type TerminalArea = keyof typeof terminalAreaClasses;\n\nexport const TERMINAL_PANE = \"flex min-h-0 min-w-0 flex-col overflow-hidden bg-card\";\n\nexport const TERMINAL_PANE_HEADER = \"flex h-9 shrink-0 items-center gap-2 border-b border-border px-3 text-xs font-medium text-ink-mid\";\n\nexport const TERMINAL_PANE_BODY = \"flex min-h-0 flex-1 flex-col overflow-auto\";\n\nexport const TERMINAL_CHART = \"relative min-h-[18rem] flex-1 overflow-hidden\";\n\nexport const TERMINAL_TICKER = \"flex min-w-0 items-center gap-6 overflow-x-auto bg-card px-4 py-2 whitespace-nowrap\";\n\nexport const TERMINAL_TICKER_STAT = \"flex shrink-0 flex-col gap-0.5\";\n\nexport const TERMINAL_TICKER_LABEL = \"text-[11px] uppercase tracking-wide text-ink-soft\";\n\nexport const TERMINAL_TICKER_VALUE = \"font-mono text-sm tabular-nums text-ink\";\n\nexport const bookSideClasses = {\n \"bid\": \"text-positive\",\n \"ask\": \"text-accent-error\",\n} as const;\nexport type BookSide = keyof typeof bookSideClasses;\n\nexport const bookDepthClasses = {\n \"bid\": \"bg-positive/15\",\n \"ask\": \"bg-accent-error/15\",\n} as const;\nexport type BookDepthSide = keyof typeof bookDepthClasses;\n\nexport const ORDER_BOOK = \"flex min-h-0 flex-1 flex-col font-mono text-xs tabular-nums\";\n\nexport const ORDER_BOOK_HEAD = \"grid shrink-0 grid-cols-3 gap-2 px-3 py-1.5 text-right text-[11px] text-ink-soft [&>*:first-child]:text-left\";\n\nexport const ORDER_BOOK_ROW = \"relative isolate grid cursor-pointer grid-cols-3 gap-2 px-3 py-0.5 text-right leading-5 hover:bg-hover\";\n\nexport const ORDER_BOOK_PRICE = \"text-left\";\n\nexport const ORDER_BOOK_DEPTH = \"pointer-events-none absolute inset-y-0 right-0 -z-10\";\n\nexport const ORDER_BOOK_SPREAD = \"flex shrink-0 items-center justify-between gap-2 border-y border-border bg-muted/50 px-3 py-1 text-ink-mid\";\n\nexport const TRADES_TAPE_ROW = \"grid grid-cols-3 gap-2 px-3 py-0.5 text-right font-mono text-xs leading-5 tabular-nums hover:bg-hover\";\n\nexport const ORDER_FORM = \"flex flex-col gap-3 p-3 text-sm\";\n\nexport const ORDER_FORM_ROW = \"flex items-center justify-between gap-2 text-xs\";\n\nexport const ORDER_FORM_LABEL = \"text-ink-soft\";\n\nexport const ORDER_FORM_VALUE = \"font-mono tabular-nums text-ink\";\n\nexport const ORDER_FORM_SUBMIT_BASE = \"inline-flex h-10 w-full shrink-0 cursor-pointer items-center justify-center rounded-[var(--control-radius)] text-sm font-semibold transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50\";\n\nexport const orderSideClasses = {\n \"buy\": \"bg-positive text-on-positive hover:bg-positive/90\",\n \"sell\": \"bg-accent-error text-on-accent-error hover:bg-accent-error/90\",\n} as const;\nexport type OrderSide = keyof typeof orderSideClasses;\n\nexport const OPEN_ORDERS_EMPTY = \"flex flex-1 items-center justify-center p-6 text-sm text-ink-soft\";\n"],"mappings":"AAEO,MAAM,gBAAgB;AAEtB,MAAM,sBAAsB;AAAA,EACjC,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AACZ;AAGO,MAAM,gBAAgB;AAEtB,MAAM,uBAAuB;AAE7B,MAAM,qBAAqB;AAE3B,MAAM,iBAAiB;AAEvB,MAAM,kBAAkB;AAExB,MAAM,uBAAuB;AAE7B,MAAM,wBAAwB;AAE9B,MAAM,wBAAwB;AAE9B,MAAM,kBAAkB;AAAA,EAC7B,OAAO;AAAA,EACP,OAAO;AACT;AAGO,MAAM,mBAAmB;AAAA,EAC9B,OAAO;AAAA,EACP,OAAO;AACT;AAGO,MAAM,aAAa;AAEnB,MAAM,kBAAkB;AAExB,MAAM,iBAAiB;AAEvB,MAAM,mBAAmB;AAEzB,MAAM,mBAAmB;AAEzB,MAAM,oBAAoB;AAE1B,MAAM,kBAAkB;AAExB,MAAM,aAAa;AAEnB,MAAM,iBAAiB;AAEvB,MAAM,mBAAmB;AAEzB,MAAM,mBAAmB;AAEzB,MAAM,yBAAyB;AAE/B,MAAM,mBAAmB;AAAA,EAC9B,OAAO;AAAA,EACP,QAAQ;AACV;AAGO,MAAM,oBAAoB;","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|