@heyramzi/ui 0.0.0-stage → 6.0.1
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/COMPONENTS.md +141 -0
- package/LICENSE +21 -0
- package/README.md +125 -2
- package/package.json +209 -3
- package/scripts/lib/sync-core.mjs +113 -0
- package/scripts/relative-imports.mjs +39 -0
- package/scripts/sf-symbol.mjs +93 -0
- package/scripts/sync-shadcn.mjs +341 -0
- package/scripts/sync-transitions.mjs +146 -0
- package/scripts/validate-apple-symbol-exports.mjs +45 -0
- package/src/ai/composer/Composer.css +108 -0
- package/src/ai/composer/Composer.svelte +111 -0
- package/src/ai/composer/index.ts +10 -0
- package/src/ai/confirmation/Confirmation.svelte +54 -0
- package/src/ai/confirmation/ConfirmationAccepted.svelte +23 -0
- package/src/ai/confirmation/ConfirmationAction.svelte +53 -0
- package/src/ai/confirmation/ConfirmationActions.svelte +24 -0
- package/src/ai/confirmation/ConfirmationFailed.svelte +23 -0
- package/src/ai/confirmation/ConfirmationRejected.svelte +23 -0
- package/src/ai/confirmation/ConfirmationRequest.svelte +25 -0
- package/src/ai/confirmation/ConfirmationTitle.svelte +25 -0
- package/src/ai/confirmation/confirmation-context.svelte.ts +22 -0
- package/src/ai/confirmation/index.ts +50 -0
- package/src/ai/conversation/Conversation.svelte +28 -0
- package/src/ai/conversation/ConversationContent.svelte +35 -0
- package/src/ai/conversation/ConversationEmptyState.svelte +46 -0
- package/src/ai/conversation/ConversationScrollButton.svelte +51 -0
- package/src/ai/conversation/index.ts +33 -0
- package/src/ai/conversation/stick-to-bottom-context.svelte.ts +131 -0
- package/src/ai/index.ts +119 -0
- package/src/ai/loading-state/PixelLoader.svelte +138 -0
- package/src/ai/loading-state/index.ts +5 -0
- package/src/ai/prompt-input/PromptInput.svelte +38 -0
- package/src/ai/prompt-input/PromptInputBody.svelte +19 -0
- package/src/ai/prompt-input/PromptInputSubmit.svelte +73 -0
- package/src/ai/prompt-input/PromptInputTextarea.svelte +74 -0
- package/src/ai/prompt-input/PromptInputToolbar.svelte +19 -0
- package/src/ai/prompt-input/index.ts +34 -0
- package/src/ai/reasoning/Reasoning.svelte +47 -0
- package/src/ai/reasoning/ReasoningContent.svelte +27 -0
- package/src/ai/reasoning/ReasoningTrigger.svelte +48 -0
- package/src/ai/reasoning/index.ts +22 -0
- package/src/ai/reasoning/reasoning-context.svelte.ts +20 -0
- package/src/ai/response/Response.css +32 -0
- package/src/ai/response/Response.svelte +130 -0
- package/src/ai/response/index.ts +5 -0
- package/src/ai/suggestion/Suggestion.svelte +43 -0
- package/src/ai/suggestion/Suggestions.svelte +25 -0
- package/src/ai/suggestion/index.ts +14 -0
- package/src/ai/thinking-dots/ThinkingDots.svelte +42 -0
- package/src/ai/thinking-dots/index.ts +5 -0
- package/src/ai/typing-dots/TypingDots.css +39 -0
- package/src/ai/typing-dots/TypingDots.svelte +27 -0
- package/src/ai/typing-dots/index.ts +10 -0
- package/src/ai/voice-waveform/VoiceWaveform.css +40 -0
- package/src/ai/voice-waveform/VoiceWaveform.svelte +46 -0
- package/src/ai/voice-waveform/index.ts +5 -0
- package/src/animations/README.md +84 -0
- package/src/animations/accordion.css +58 -0
- package/src/animations/avatar-group-hover.css +47 -0
- package/src/animations/card-tilt.css +74 -0
- package/src/animations/digit-pop-in.css +78 -0
- package/src/animations/dropdown.css +121 -0
- package/src/animations/icon-swap.css +43 -0
- package/src/animations/index.css +34 -0
- package/src/animations/input-clear-dissolve.css +86 -0
- package/src/animations/input-shake.css +114 -0
- package/src/animations/learn-more-hover.css +48 -0
- package/src/animations/like-button.css +93 -0
- package/src/animations/modal.css +75 -0
- package/src/animations/notification-badge.css +81 -0
- package/src/animations/page-side-by-side.css +63 -0
- package/src/animations/panel.css +86 -0
- package/src/animations/plus-menu-morph.css +97 -0
- package/src/animations/reasoning-stream.css +49 -0
- package/src/animations/resize.css +20 -0
- package/src/animations/shimmer-text.css +72 -0
- package/src/animations/skeleton-reveal.css +97 -0
- package/src/animations/spinning-counter.css +52 -0
- package/src/animations/streaming-text.css +31 -0
- package/src/animations/success-check.css +120 -0
- package/src/animations/tabs-sliding.css +83 -0
- package/src/animations/text-swap.css +40 -0
- package/src/animations/text-swap.ts +40 -0
- package/src/animations/texts-reveal.css +70 -0
- package/src/animations/thinking-states.css +65 -0
- package/src/animations/tooltip.css +72 -0
- package/src/animations/upstream-coverage.test.ts +65 -0
- package/src/animations/view-transition-reveal.ts +74 -0
- package/src/charts/animated-value.css +7 -0
- package/src/charts/animated-value.svelte +110 -0
- package/src/charts/area-chart.css +29 -0
- package/src/charts/area-chart.svelte +195 -0
- package/src/charts/bar-chart.css +119 -0
- package/src/charts/bar-chart.svelte +269 -0
- package/src/charts/charts.css +201 -0
- package/src/charts/crosshair.svelte +35 -0
- package/src/charts/donut-chart.css +56 -0
- package/src/charts/donut-chart.svelte +158 -0
- package/src/charts/edge-fade.svelte +43 -0
- package/src/charts/edge-fade.ts +16 -0
- package/src/charts/figure.css +100 -0
- package/src/charts/figure.svelte +122 -0
- package/src/charts/gauge-chart.css +94 -0
- package/src/charts/gauge-chart.svelte +303 -0
- package/src/charts/hover-band.test.ts +30 -0
- package/src/charts/hover-band.ts +21 -0
- package/src/charts/hover-focus.svelte +85 -0
- package/src/charts/index.ts +30 -0
- package/src/charts/legend.css +131 -0
- package/src/charts/legend.svelte +112 -0
- package/src/charts/line-chart.css +26 -0
- package/src/charts/line-chart.svelte +256 -0
- package/src/charts/motion.ts +19 -0
- package/src/charts/number-chart.css +168 -0
- package/src/charts/number-chart.svelte +177 -0
- package/src/charts/primitives/chart-container.svelte +57 -0
- package/src/charts/primitives/chart-style.svelte +36 -0
- package/src/charts/primitives/chart-tooltip.svelte +161 -0
- package/src/charts/primitives/chart-utils.ts +54 -0
- package/src/charts/primitives/index.ts +11 -0
- package/src/charts/reveal.svelte +61 -0
- package/src/charts/ring-chart.css +96 -0
- package/src/charts/ring-chart.svelte +158 -0
- package/src/charts/sparkline.css +45 -0
- package/src/charts/sparkline.svelte +140 -0
- package/src/charts/stat-card.css +103 -0
- package/src/charts/stat-card.svelte +267 -0
- package/src/charts/time-series-chart.css +28 -0
- package/src/charts/time-series-chart.svelte +179 -0
- package/src/charts/trend-pill.css +38 -0
- package/src/charts/trend-pill.svelte +48 -0
- package/src/design/index.css +270 -0
- package/src/design/polish.css +159 -0
- package/src/effects/animated-beam/AnimatedBeam.svelte +132 -0
- package/src/effects/animated-beam/diagrams/BeamSvg.svelte +91 -0
- package/src/effects/animated-beam/index.ts +2 -0
- package/src/effects/animated-beam/path-calculator.svelte.ts +70 -0
- package/src/effects/animated-beam/types.ts +23 -0
- package/src/effects/border-beam/BorderBeam.svelte +223 -0
- package/src/effects/border-beam/css.test.ts +46 -0
- package/src/effects/border-beam/css.ts +574 -0
- package/src/effects/border-beam/presets.ts +699 -0
- package/src/effects/border-beam/register-properties.test.ts +74 -0
- package/src/effects/border-beam/register-properties.ts +73 -0
- package/src/effects/border-beam/types.ts +38 -0
- package/src/effects/image-comparison/ImageComparison.css +66 -0
- package/src/effects/image-comparison/ImageComparison.svelte +92 -0
- package/src/effects/image-reveal/ImageReveal.css +10 -0
- package/src/effects/image-reveal/ImageReveal.svelte +357 -0
- package/src/effects/image-reveal/index.ts +2 -0
- package/src/effects/image-reveal/types.ts +35 -0
- package/src/effects/magnetic/magnetic.ts +81 -0
- package/src/effects/marquee/Marquee.css +52 -0
- package/src/effects/marquee/Marquee.svelte +96 -0
- package/src/effects/progressive-blur/ProgressiveBlur.css +9 -0
- package/src/effects/progressive-blur/ProgressiveBlur.svelte +63 -0
- package/src/effects/reveal/AnimatedGroup.svelte +101 -0
- package/src/effects/reveal/InView.svelte +77 -0
- package/src/effects/reveal/TextEffect.svelte +142 -0
- package/src/effects/reveal/index.ts +10 -0
- package/src/effects/reveal/observe.ts +33 -0
- package/src/effects/reveal/reveal.css +141 -0
- package/src/effects/reveal/types.ts +25 -0
- package/src/effects/shader-gradient/ShaderGradient.svelte +227 -0
- package/src/effects/shader-gradient/color.ts +44 -0
- package/src/effects/shader-gradient/index.ts +5 -0
- package/src/effects/shader-gradient/renderer.ts +456 -0
- package/src/effects/shader-gradient/shaders.ts +324 -0
- package/src/effects/shader-gradient/types.ts +68 -0
- package/src/effects/spotlight/Spotlight.css +14 -0
- package/src/effects/spotlight/Spotlight.svelte +61 -0
- package/src/effects/theme-toggle/ThemeToggle.css +21 -0
- package/src/effects/theme-toggle/ThemeToggle.svelte +101 -0
- package/src/icons/TradeIcon.svelte +16 -0
- package/src/icons/apple-symbol-exports.ts +135 -0
- package/src/icons/sf-symbols.ts +527 -0
- package/src/icons/trades.ts +89 -0
- package/src/index.ts +49 -0
- package/src/lib/arrive.ts +26 -0
- package/src/lib/hooks/is-mobile.svelte.ts +11 -0
- package/src/lib/icon-types.ts +17 -0
- package/src/lib/layout.ts +8 -0
- package/src/lib/panel.ts +15 -0
- package/src/lib/theme-transition.ts +51 -0
- package/src/lib/utils.ts +45 -0
- package/src/shadcn/accordion/accordion-content.svelte +22 -0
- package/src/shadcn/accordion/accordion-item.svelte +17 -0
- package/src/shadcn/accordion/accordion-trigger.svelte +35 -0
- package/src/shadcn/accordion/accordion.svelte +19 -0
- package/src/shadcn/accordion/index.ts +16 -0
- package/src/shadcn/alert/alert-description.svelte +23 -0
- package/src/shadcn/alert/alert-title.svelte +20 -0
- package/src/shadcn/alert/alert.svelte +44 -0
- package/src/shadcn/alert/index.ts +14 -0
- package/src/shadcn/alert-dialog/alert-dialog-action.svelte +18 -0
- package/src/shadcn/alert-dialog/alert-dialog-cancel.svelte +18 -0
- package/src/shadcn/alert-dialog/alert-dialog-content.svelte +29 -0
- package/src/shadcn/alert-dialog/alert-dialog-description.svelte +17 -0
- package/src/shadcn/alert-dialog/alert-dialog-footer.svelte +20 -0
- package/src/shadcn/alert-dialog/alert-dialog-header.svelte +20 -0
- package/src/shadcn/alert-dialog/alert-dialog-overlay.svelte +17 -0
- package/src/shadcn/alert-dialog/alert-dialog-portal.svelte +7 -0
- package/src/shadcn/alert-dialog/alert-dialog-title.svelte +17 -0
- package/src/shadcn/alert-dialog/alert-dialog-trigger.svelte +7 -0
- package/src/shadcn/alert-dialog/alert-dialog.svelte +7 -0
- package/src/shadcn/alert-dialog/index.ts +37 -0
- package/src/shadcn/attachment/attachment-action.svelte +23 -0
- package/src/shadcn/attachment/attachment-actions.svelte +23 -0
- package/src/shadcn/attachment/attachment-content.svelte +23 -0
- package/src/shadcn/attachment/attachment-description.svelte +23 -0
- package/src/shadcn/attachment/attachment-group.svelte +23 -0
- package/src/shadcn/attachment/attachment-media.svelte +44 -0
- package/src/shadcn/attachment/attachment-title.svelte +23 -0
- package/src/shadcn/attachment/attachment-trigger.svelte +29 -0
- package/src/shadcn/attachment/attachment.svelte +55 -0
- package/src/shadcn/attachment/index.ts +40 -0
- package/src/shadcn/avatar/avatar-badge.svelte +26 -0
- package/src/shadcn/avatar/avatar-fallback.svelte +20 -0
- package/src/shadcn/avatar/avatar-group-count.svelte +23 -0
- package/src/shadcn/avatar/avatar-group.svelte +23 -0
- package/src/shadcn/avatar/avatar-image.svelte +17 -0
- package/src/shadcn/avatar/avatar.svelte +26 -0
- package/src/shadcn/avatar/index.ts +22 -0
- package/src/shadcn/badge/badge.svelte +53 -0
- package/src/shadcn/badge/index.ts +2 -0
- package/src/shadcn/breadcrumb/breadcrumb-ellipsis.svelte +23 -0
- package/src/shadcn/breadcrumb/breadcrumb-item.svelte +20 -0
- package/src/shadcn/breadcrumb/breadcrumb-link.svelte +31 -0
- package/src/shadcn/breadcrumb/breadcrumb-list.svelte +23 -0
- package/src/shadcn/breadcrumb/breadcrumb-page.svelte +23 -0
- package/src/shadcn/breadcrumb/breadcrumb-separator.svelte +27 -0
- package/src/shadcn/breadcrumb/breadcrumb.svelte +21 -0
- package/src/shadcn/breadcrumb/index.ts +25 -0
- package/src/shadcn/bubble/bubble-content.svelte +31 -0
- package/src/shadcn/bubble/bubble-group.svelte +20 -0
- package/src/shadcn/bubble/bubble-reactions.svelte +52 -0
- package/src/shadcn/bubble/bubble.svelte +58 -0
- package/src/shadcn/bubble/index.ts +25 -0
- package/src/shadcn/button/button.svelte +121 -0
- package/src/shadcn/button/index.ts +17 -0
- package/src/shadcn/calendar/calendar-caption.svelte +76 -0
- package/src/shadcn/calendar/calendar-cell.svelte +19 -0
- package/src/shadcn/calendar/calendar-day.svelte +35 -0
- package/src/shadcn/calendar/calendar-grid-body.svelte +12 -0
- package/src/shadcn/calendar/calendar-grid-head.svelte +12 -0
- package/src/shadcn/calendar/calendar-grid-row.svelte +12 -0
- package/src/shadcn/calendar/calendar-grid.svelte +16 -0
- package/src/shadcn/calendar/calendar-head-cell.svelte +19 -0
- package/src/shadcn/calendar/calendar-header.svelte +19 -0
- package/src/shadcn/calendar/calendar-heading.svelte +16 -0
- package/src/shadcn/calendar/calendar-month-select.svelte +44 -0
- package/src/shadcn/calendar/calendar-month.svelte +15 -0
- package/src/shadcn/calendar/calendar-months.svelte +19 -0
- package/src/shadcn/calendar/calendar-nav.svelte +19 -0
- package/src/shadcn/calendar/calendar-next-button.svelte +31 -0
- package/src/shadcn/calendar/calendar-prev-button.svelte +31 -0
- package/src/shadcn/calendar/calendar-year-select.svelte +43 -0
- package/src/shadcn/calendar/calendar.svelte +118 -0
- package/src/shadcn/calendar/index.ts +40 -0
- package/src/shadcn/card/card-action.svelte +23 -0
- package/src/shadcn/card/card-content.svelte +20 -0
- package/src/shadcn/card/card-description.svelte +20 -0
- package/src/shadcn/card/card-footer.svelte +23 -0
- package/src/shadcn/card/card-header.svelte +23 -0
- package/src/shadcn/card/card-title.svelte +29 -0
- package/src/shadcn/card/card.svelte +25 -0
- package/src/shadcn/card/index.ts +25 -0
- package/src/shadcn/checkbox/checkbox.svelte +38 -0
- package/src/shadcn/checkbox/index.ts +6 -0
- package/src/shadcn/collapsible/collapsible-content.svelte +7 -0
- package/src/shadcn/collapsible/collapsible-trigger.svelte +7 -0
- package/src/shadcn/collapsible/collapsible.svelte +11 -0
- package/src/shadcn/collapsible/index.ts +13 -0
- package/src/shadcn/command/command-dialog.svelte +66 -0
- package/src/shadcn/command/command-empty.svelte +17 -0
- package/src/shadcn/command/command-group.svelte +40 -0
- package/src/shadcn/command/command-input.svelte +64 -0
- package/src/shadcn/command/command-item.svelte +37 -0
- package/src/shadcn/command/command-link-item.svelte +20 -0
- package/src/shadcn/command/command-list.svelte +20 -0
- package/src/shadcn/command/command-loading.svelte +7 -0
- package/src/shadcn/command/command-separator.svelte +17 -0
- package/src/shadcn/command/command-shortcut.svelte +23 -0
- package/src/shadcn/command/command.svelte +28 -0
- package/src/shadcn/command/index.ts +37 -0
- package/src/shadcn/context-menu/context-menu-checkbox-item.svelte +41 -0
- package/src/shadcn/context-menu/context-menu-content.svelte +28 -0
- package/src/shadcn/context-menu/context-menu-group-heading.svelte +21 -0
- package/src/shadcn/context-menu/context-menu-group.svelte +7 -0
- package/src/shadcn/context-menu/context-menu-item.svelte +27 -0
- package/src/shadcn/context-menu/context-menu-label.svelte +27 -0
- package/src/shadcn/context-menu/context-menu-portal.svelte +7 -0
- package/src/shadcn/context-menu/context-menu-radio-group.svelte +16 -0
- package/src/shadcn/context-menu/context-menu-radio-item.svelte +35 -0
- package/src/shadcn/context-menu/context-menu-separator.svelte +17 -0
- package/src/shadcn/context-menu/context-menu-shortcut.svelte +23 -0
- package/src/shadcn/context-menu/context-menu-sub-content.svelte +25 -0
- package/src/shadcn/context-menu/context-menu-sub-trigger.svelte +29 -0
- package/src/shadcn/context-menu/context-menu-sub.svelte +7 -0
- package/src/shadcn/context-menu/context-menu-trigger.svelte +17 -0
- package/src/shadcn/context-menu/context-menu.svelte +7 -0
- package/src/shadcn/context-menu/index.ts +52 -0
- package/src/shadcn/dialog/dialog-close.svelte +11 -0
- package/src/shadcn/dialog/dialog-content.svelte +57 -0
- package/src/shadcn/dialog/dialog-description.svelte +20 -0
- package/src/shadcn/dialog/dialog-footer.svelte +32 -0
- package/src/shadcn/dialog/dialog-header.svelte +20 -0
- package/src/shadcn/dialog/dialog-overlay.svelte +20 -0
- package/src/shadcn/dialog/dialog-portal.svelte +7 -0
- package/src/shadcn/dialog/dialog-title.svelte +17 -0
- package/src/shadcn/dialog/dialog-trigger.svelte +11 -0
- package/src/shadcn/dialog/dialog.svelte +7 -0
- package/src/shadcn/dialog/index.ts +34 -0
- package/src/shadcn/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
- package/src/shadcn/dropdown-menu/dropdown-menu-checkbox-item.svelte +43 -0
- package/src/shadcn/dropdown-menu/dropdown-menu-content.svelte +31 -0
- package/src/shadcn/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
- package/src/shadcn/dropdown-menu/dropdown-menu-group.svelte +7 -0
- package/src/shadcn/dropdown-menu/dropdown-menu-item.svelte +29 -0
- package/src/shadcn/dropdown-menu/dropdown-menu-label.svelte +27 -0
- package/src/shadcn/dropdown-menu/dropdown-menu-portal.svelte +7 -0
- package/src/shadcn/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
- package/src/shadcn/dropdown-menu/dropdown-menu-radio-item.svelte +34 -0
- package/src/shadcn/dropdown-menu/dropdown-menu-separator.svelte +17 -0
- package/src/shadcn/dropdown-menu/dropdown-menu-shortcut.svelte +23 -0
- package/src/shadcn/dropdown-menu/dropdown-menu-sub-content.svelte +20 -0
- package/src/shadcn/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
- package/src/shadcn/dropdown-menu/dropdown-menu-sub.svelte +7 -0
- package/src/shadcn/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
- package/src/shadcn/dropdown-menu/dropdown-menu.svelte +7 -0
- package/src/shadcn/dropdown-menu/index.ts +56 -0
- package/src/shadcn/dropdown-menu/menu-item.ts +43 -0
- package/src/shadcn/empty/empty-content.svelte +23 -0
- package/src/shadcn/empty/empty-description.svelte +23 -0
- package/src/shadcn/empty/empty-header.svelte +20 -0
- package/src/shadcn/empty/empty-media.svelte +41 -0
- package/src/shadcn/empty/empty-title.svelte +20 -0
- package/src/shadcn/empty/empty.svelte +23 -0
- package/src/shadcn/empty/index.ts +22 -0
- package/src/shadcn/field/field-content.svelte +20 -0
- package/src/shadcn/field/field-description.svelte +25 -0
- package/src/shadcn/field/field-error.svelte +58 -0
- package/src/shadcn/field/field-group.svelte +23 -0
- package/src/shadcn/field/field-label.svelte +26 -0
- package/src/shadcn/field/field-legend.svelte +29 -0
- package/src/shadcn/field/field-separator.svelte +35 -0
- package/src/shadcn/field/field-set.svelte +24 -0
- package/src/shadcn/field/field-title.svelte +23 -0
- package/src/shadcn/field/field.svelte +53 -0
- package/src/shadcn/field/index.ts +33 -0
- package/src/shadcn/hooks/is-mobile.svelte.ts +9 -0
- package/src/shadcn/hover-card/hover-card-content.svelte +31 -0
- package/src/shadcn/hover-card/hover-card-portal.svelte +7 -0
- package/src/shadcn/hover-card/hover-card-trigger.svelte +7 -0
- package/src/shadcn/hover-card/hover-card.svelte +7 -0
- package/src/shadcn/hover-card/index.ts +15 -0
- package/src/shadcn/input/index.ts +9 -0
- package/src/shadcn/input/input.svelte +48 -0
- package/src/shadcn/input/secret-input.svelte +75 -0
- package/src/shadcn/input-otp/index.ts +15 -0
- package/src/shadcn/input-otp/input-otp-group.svelte +20 -0
- package/src/shadcn/input-otp/input-otp-separator.svelte +25 -0
- package/src/shadcn/input-otp/input-otp-slot.svelte +26 -0
- package/src/shadcn/input-otp/input-otp.svelte +22 -0
- package/src/shadcn/label/index.ts +7 -0
- package/src/shadcn/label/label.svelte +20 -0
- package/src/shadcn/marker/index.ts +15 -0
- package/src/shadcn/marker/marker-content.svelte +23 -0
- package/src/shadcn/marker/marker-icon.svelte +21 -0
- package/src/shadcn/marker/marker.svelte +52 -0
- package/src/shadcn/message/index.ts +22 -0
- package/src/shadcn/message/message-avatar.svelte +23 -0
- package/src/shadcn/message/message-content.svelte +23 -0
- package/src/shadcn/message/message-footer.svelte +23 -0
- package/src/shadcn/message/message-group.svelte +20 -0
- package/src/shadcn/message/message-header.svelte +23 -0
- package/src/shadcn/message/message.svelte +27 -0
- package/src/shadcn/popover/index.ts +28 -0
- package/src/shadcn/popover/popover-close.svelte +7 -0
- package/src/shadcn/popover/popover-content.svelte +38 -0
- package/src/shadcn/popover/popover-description.svelte +20 -0
- package/src/shadcn/popover/popover-header.svelte +20 -0
- package/src/shadcn/popover/popover-portal.svelte +7 -0
- package/src/shadcn/popover/popover-title.svelte +15 -0
- package/src/shadcn/popover/popover-trigger.svelte +17 -0
- package/src/shadcn/popover/popover.svelte +7 -0
- package/src/shadcn/progress/index.ts +7 -0
- package/src/shadcn/progress/progress.svelte +30 -0
- package/src/shadcn/radio-group/index.ts +10 -0
- package/src/shadcn/radio-group/radio-group-item.svelte +31 -0
- package/src/shadcn/radio-group/radio-group.svelte +19 -0
- package/src/shadcn/scroll-area/index.ts +10 -0
- package/src/shadcn/scroll-area/scroll-area-scrollbar.svelte +30 -0
- package/src/shadcn/scroll-area/scroll-area.svelte +43 -0
- package/src/shadcn/select/index.ts +37 -0
- package/src/shadcn/select/select-content.svelte +45 -0
- package/src/shadcn/select/select-group-heading.svelte +21 -0
- package/src/shadcn/select/select-group.svelte +17 -0
- package/src/shadcn/select/select-item.svelte +38 -0
- package/src/shadcn/select/select-label.svelte +20 -0
- package/src/shadcn/select/select-portal.svelte +7 -0
- package/src/shadcn/select/select-scroll-down-button.svelte +23 -0
- package/src/shadcn/select/select-scroll-up-button.svelte +23 -0
- package/src/shadcn/select/select-separator.svelte +18 -0
- package/src/shadcn/select/select-trigger.svelte +33 -0
- package/src/shadcn/select/select.svelte +11 -0
- package/src/shadcn/separator/index.ts +7 -0
- package/src/shadcn/separator/separator.svelte +23 -0
- package/src/shadcn/sheet/index.ts +34 -0
- package/src/shadcn/sheet/sheet-close.svelte +7 -0
- package/src/shadcn/sheet/sheet-content.svelte +72 -0
- package/src/shadcn/sheet/sheet-description.svelte +17 -0
- package/src/shadcn/sheet/sheet-footer.svelte +20 -0
- package/src/shadcn/sheet/sheet-header.svelte +20 -0
- package/src/shadcn/sheet/sheet-overlay.svelte +20 -0
- package/src/shadcn/sheet/sheet-portal.svelte +7 -0
- package/src/shadcn/sheet/sheet-title.svelte +17 -0
- package/src/shadcn/sheet/sheet-trigger.svelte +7 -0
- package/src/shadcn/sheet/sheet.svelte +7 -0
- package/src/shadcn/sidebar/constants.ts +6 -0
- package/src/shadcn/sidebar/context.svelte.ts +81 -0
- package/src/shadcn/sidebar/index.ts +75 -0
- package/src/shadcn/sidebar/sidebar-content.svelte +24 -0
- package/src/shadcn/sidebar/sidebar-footer.svelte +21 -0
- package/src/shadcn/sidebar/sidebar-group-action.svelte +33 -0
- package/src/shadcn/sidebar/sidebar-group-content.svelte +21 -0
- package/src/shadcn/sidebar/sidebar-group-label.svelte +33 -0
- package/src/shadcn/sidebar/sidebar-group.svelte +21 -0
- package/src/shadcn/sidebar/sidebar-header.svelte +21 -0
- package/src/shadcn/sidebar/sidebar-input.svelte +21 -0
- package/src/shadcn/sidebar/sidebar-inset.svelte +23 -0
- package/src/shadcn/sidebar/sidebar-menu-action.svelte +37 -0
- package/src/shadcn/sidebar/sidebar-menu-badge.svelte +24 -0
- package/src/shadcn/sidebar/sidebar-menu-button.svelte +103 -0
- package/src/shadcn/sidebar/sidebar-menu-item.svelte +21 -0
- package/src/shadcn/sidebar/sidebar-menu-skeleton.svelte +36 -0
- package/src/shadcn/sidebar/sidebar-menu-sub-button.svelte +39 -0
- package/src/shadcn/sidebar/sidebar-menu-sub-item.svelte +21 -0
- package/src/shadcn/sidebar/sidebar-menu-sub.svelte +24 -0
- package/src/shadcn/sidebar/sidebar-menu.svelte +21 -0
- package/src/shadcn/sidebar/sidebar-provider.svelte +62 -0
- package/src/shadcn/sidebar/sidebar-rail.svelte +36 -0
- package/src/shadcn/sidebar/sidebar-separator.svelte +19 -0
- package/src/shadcn/sidebar/sidebar-trigger.svelte +37 -0
- package/src/shadcn/sidebar/sidebar.svelte +109 -0
- package/src/shadcn/skeleton/index.ts +7 -0
- package/src/shadcn/skeleton/skeleton.svelte +17 -0
- package/src/shadcn/slider/index.ts +7 -0
- package/src/shadcn/slider/slider.svelte +52 -0
- package/src/shadcn/sonner/index.ts +1 -0
- package/src/shadcn/sonner/sonner.svelte +34 -0
- package/src/shadcn/spinner/index.ts +1 -0
- package/src/shadcn/spinner/spinner.svelte +26 -0
- package/src/shadcn/switch/index.ts +7 -0
- package/src/shadcn/switch/switch.svelte +31 -0
- package/src/shadcn/table/index.ts +28 -0
- package/src/shadcn/table/table-body.svelte +20 -0
- package/src/shadcn/table/table-caption.svelte +20 -0
- package/src/shadcn/table/table-cell.svelte +20 -0
- package/src/shadcn/table/table-footer.svelte +20 -0
- package/src/shadcn/table/table-head.svelte +23 -0
- package/src/shadcn/table/table-header.svelte +20 -0
- package/src/shadcn/table/table-row.svelte +23 -0
- package/src/shadcn/table/table.svelte +25 -0
- package/src/shadcn/tabs/index.ts +16 -0
- package/src/shadcn/tabs/tabs-content.svelte +17 -0
- package/src/shadcn/tabs/tabs-list.svelte +25 -0
- package/src/shadcn/tabs/tabs-trigger.svelte +20 -0
- package/src/shadcn/tabs/tabs.svelte +19 -0
- package/src/shadcn/textarea/index.ts +7 -0
- package/src/shadcn/textarea/textarea.svelte +23 -0
- package/src/shadcn/toggle/index.ts +13 -0
- package/src/shadcn/toggle/toggle.svelte +53 -0
- package/src/shadcn/toggle-group/index.ts +10 -0
- package/src/shadcn/toggle-group/toggle-group-item.svelte +35 -0
- package/src/shadcn/toggle-group/toggle-group.svelte +59 -0
- package/src/shadcn/tooltip/context.ts +16 -0
- package/src/shadcn/tooltip/index.ts +19 -0
- package/src/shadcn/tooltip/tooltip-content.svelte +38 -0
- package/src/shadcn/tooltip/tooltip-portal.svelte +7 -0
- package/src/shadcn/tooltip/tooltip-provider.svelte +16 -0
- package/src/shadcn/tooltip/tooltip-trigger.svelte +7 -0
- package/src/shadcn/tooltip/tooltip.svelte +19 -0
- package/src/shadcn/utilities.css +549 -0
- package/src/showcase/AiSection.svelte +157 -0
- package/src/showcase/AnimationsSection.svelte +1658 -0
- package/src/showcase/ChartsSection.svelte +458 -0
- package/src/showcase/EffectsSection.svelte +152 -0
- package/src/showcase/ShadcnSection.svelte +27 -0
- package/src/showcase/ShowcaseImport.svelte +126 -0
- package/src/showcase/ShowcaseList.svelte +132 -0
- package/src/showcase/ShowcaseNav.svelte +247 -0
- package/src/showcase/ShowcaseSection.svelte +112 -0
- package/src/showcase/ShowcaseShell.svelte +55 -0
- package/src/showcase/ShowcaseStage.svelte +342 -0
- package/src/showcase/ShowcaseVariant.svelte +109 -0
- package/src/showcase/assets/image-reveal/art-1.jpg +0 -0
- package/src/showcase/assets/image-reveal/art-2.jpg +0 -0
- package/src/showcase/assets/image-reveal/art-3.jpg +0 -0
- package/src/showcase/check.svg +1 -0
- package/src/showcase/chevron-arms.svg +2 -0
- package/src/showcase/chevron-down.svg +1 -0
- package/src/showcase/copy.svg +2 -0
- package/src/showcase/demos/ai/confirmation.svelte +59 -0
- package/src/showcase/demos/ai/conversation.svelte +59 -0
- package/src/showcase/demos/ai/loading-state.svelte +19 -0
- package/src/showcase/demos/ai/prompt-input.svelte +57 -0
- package/src/showcase/demos/ai/reasoning.svelte +19 -0
- package/src/showcase/demos/ai/thinking-dots.svelte +15 -0
- package/src/showcase/demos/ai/voice-waveform.svelte +24 -0
- package/src/showcase/demos/effects/animated-beam.svelte +50 -0
- package/src/showcase/demos/effects/animated-group.svelte +47 -0
- package/src/showcase/demos/effects/border-beam-default.svelte +20 -0
- package/src/showcase/demos/effects/border-beam-line.svelte +20 -0
- package/src/showcase/demos/effects/border-beam-mono.svelte +20 -0
- package/src/showcase/demos/effects/border-beam-sunset.svelte +20 -0
- package/src/showcase/demos/effects/image-comparison.svelte +25 -0
- package/src/showcase/demos/effects/image-reveal.svelte +49 -0
- package/src/showcase/demos/effects/in-view.svelte +41 -0
- package/src/showcase/demos/effects/integrations-hub.svelte +82 -0
- package/src/showcase/demos/effects/magnetic.svelte +31 -0
- package/src/showcase/demos/effects/marquee.svelte +33 -0
- package/src/showcase/demos/effects/progressive-blur.svelte +47 -0
- package/src/showcase/demos/effects/spotlight.svelte +40 -0
- package/src/showcase/demos/effects/text-effect.svelte +55 -0
- package/src/showcase/demos/shadcn/accordion.svelte +45 -0
- package/src/showcase/demos/shadcn/alert-dialog.svelte +23 -0
- package/src/showcase/demos/shadcn/alert.svelte +30 -0
- package/src/showcase/demos/shadcn/attachment.svelte +71 -0
- package/src/showcase/demos/shadcn/avatar.svelte +30 -0
- package/src/showcase/demos/shadcn/badge.svelte +26 -0
- package/src/showcase/demos/shadcn/breadcrumb.svelte +34 -0
- package/src/showcase/demos/shadcn/bubble.svelte +36 -0
- package/src/showcase/demos/shadcn/button.svelte +11 -0
- package/src/showcase/demos/shadcn/calendar.svelte +8 -0
- package/src/showcase/demos/shadcn/card.svelte +39 -0
- package/src/showcase/demos/shadcn/checkbox.svelte +39 -0
- package/src/showcase/demos/shadcn/collapsible.svelte +20 -0
- package/src/showcase/demos/shadcn/command.svelte +48 -0
- package/src/showcase/demos/shadcn/context-menu.svelte +54 -0
- package/src/showcase/demos/shadcn/demo-harness.svelte +12 -0
- package/src/showcase/demos/shadcn/demos.test.ts +20 -0
- package/src/showcase/demos/shadcn/dialog.svelte +38 -0
- package/src/showcase/demos/shadcn/dropdown-menu.svelte +59 -0
- package/src/showcase/demos/shadcn/empty.svelte +29 -0
- package/src/showcase/demos/shadcn/field.svelte +115 -0
- package/src/showcase/demos/shadcn/hover-card.svelte +32 -0
- package/src/showcase/demos/shadcn/index.ts +358 -0
- package/src/showcase/demos/shadcn/input-otp.svelte +19 -0
- package/src/showcase/demos/shadcn/input.svelte +5 -0
- package/src/showcase/demos/shadcn/label.svelte +11 -0
- package/src/showcase/demos/shadcn/marker.svelte +30 -0
- package/src/showcase/demos/shadcn/message.svelte +75 -0
- package/src/showcase/demos/shadcn/popover.svelte +36 -0
- package/src/showcase/demos/shadcn/progress.svelte +13 -0
- package/src/showcase/demos/shadcn/radio-group.svelte +19 -0
- package/src/showcase/demos/shadcn/scroll-area.svelte +18 -0
- package/src/showcase/demos/shadcn/select.svelte +29 -0
- package/src/showcase/demos/shadcn/separator.svelte +12 -0
- package/src/showcase/demos/shadcn/sheet.svelte +48 -0
- package/src/showcase/demos/shadcn/skeleton.svelte +11 -0
- package/src/showcase/demos/shadcn/slider.svelte +7 -0
- package/src/showcase/demos/shadcn/sonner.svelte +18 -0
- package/src/showcase/demos/shadcn/spinner.svelte +11 -0
- package/src/showcase/demos/shadcn/switch.svelte +9 -0
- package/src/showcase/demos/shadcn/table.svelte +76 -0
- package/src/showcase/demos/shadcn/tabs.svelte +62 -0
- package/src/showcase/demos/shadcn/textarea.svelte +5 -0
- package/src/showcase/demos/shadcn/toggle-group.svelte +18 -0
- package/src/showcase/demos/shadcn/toggle.svelte +14 -0
- package/src/showcase/demos/shadcn/tooltip.svelte +13 -0
- package/src/showcase/heart.svg +1 -0
- package/src/showcase/index.ts +38 -0
- package/src/showcase/kit.test.ts +72 -0
- package/src/showcase/kit.ts +17 -0
- package/src/showcase/plus.svg +1 -0
- package/src/showcase/showcase-shell.css +91 -0
- package/src/showcase/stacked-section.css +15 -0
- package/src/showcase/success-check.svg +1 -0
- package/src/showcase/types.ts +29 -0
- package/src/svg-raw.d.ts +7 -0
- package/src/test-setup.ts +34 -0
- package/src/tokens.css +993 -0
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
|
|
4
|
+
export interface ShowcaseStageProps {
|
|
5
|
+
/** Component name, e.g. "Dialog". */
|
|
6
|
+
title: string;
|
|
7
|
+
/** One line on what this demo shows. Not a description of the component. */
|
|
8
|
+
note?: string;
|
|
9
|
+
/** Import line for the copy control. Omitted when the demo covers several. */
|
|
10
|
+
importPath?: string;
|
|
11
|
+
/** Give a demo that needs room a taller ground, e.g. a table or a chart. */
|
|
12
|
+
wide?: boolean;
|
|
13
|
+
/** Provenance beside the name, e.g. "shadcn" on a primitive the kit took as is. */
|
|
14
|
+
tag?: string;
|
|
15
|
+
/** Replay control for a demo that animates once. Without it, no button. */
|
|
16
|
+
onaction?: () => void;
|
|
17
|
+
actionLabel?: string;
|
|
18
|
+
children: Snippet;
|
|
19
|
+
}
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<script lang="ts">
|
|
23
|
+
import { cn } from "@heyramzi/utils";
|
|
24
|
+
import ShowcaseImport from "./ShowcaseImport.svelte";
|
|
25
|
+
import "./showcase-shell.css";
|
|
26
|
+
|
|
27
|
+
let {
|
|
28
|
+
title,
|
|
29
|
+
note,
|
|
30
|
+
importPath,
|
|
31
|
+
wide = false,
|
|
32
|
+
tag,
|
|
33
|
+
onaction,
|
|
34
|
+
actionLabel = "Replay",
|
|
35
|
+
children,
|
|
36
|
+
}: ShowcaseStageProps = $props();
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<article class={cn("sc-stage", wide && "sc-stage-tall")}>
|
|
40
|
+
<header>
|
|
41
|
+
<div class="sc-stage-name">
|
|
42
|
+
<h3>
|
|
43
|
+
{title}
|
|
44
|
+
{#if tag}
|
|
45
|
+
<span class="sc-tag">{tag}</span>
|
|
46
|
+
{/if}
|
|
47
|
+
</h3>
|
|
48
|
+
{#if note}
|
|
49
|
+
<p>{note}</p>
|
|
50
|
+
{/if}
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<!-- The controls sit on the header line rather than under the ground: a footer under every stage put a second full-width row between each demo -->
|
|
54
|
+
<!-- and the next, and the page reads as demos, not as rows of chrome. In a narrow stage they drop to a line of their own, because a nowrap import -->
|
|
55
|
+
<!-- path on the same line left the title nothing to occupy. -->
|
|
56
|
+
<div class="sc-stage-tools">
|
|
57
|
+
{#if onaction}
|
|
58
|
+
<button type="button" class="sc-stage-replay" onclick={onaction}>{actionLabel}</button>
|
|
59
|
+
{/if}
|
|
60
|
+
{#if importPath}
|
|
61
|
+
<ShowcaseImport path={importPath} label={title} />
|
|
62
|
+
{/if}
|
|
63
|
+
</div>
|
|
64
|
+
</header>
|
|
65
|
+
|
|
66
|
+
<!-- The ground is a canvas, not a card: it is what makes a white-on-white or
|
|
67
|
+
fully transparent component visible on the surface it sits on. -->
|
|
68
|
+
<div class="sc-ground">
|
|
69
|
+
{@render children()}
|
|
70
|
+
</div>
|
|
71
|
+
</article>
|
|
72
|
+
|
|
73
|
+
<style>
|
|
74
|
+
.sc-stage {
|
|
75
|
+
display: flex;
|
|
76
|
+
flex-direction: column;
|
|
77
|
+
min-width: 0;
|
|
78
|
+
padding-block: 1.5rem;
|
|
79
|
+
counter-increment: sc-stage;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/*
|
|
83
|
+
* The stage answers its own width, not the viewport's: the same component serves a full-width stack and a four-column kit grid on one page. The header
|
|
84
|
+
*/
|
|
85
|
+
|
|
86
|
+
/*
|
|
87
|
+
* carries the container rather than the stage, because an element with `container-type` cannot also be a subgrid, and the kit grids need the stage
|
|
88
|
+
*/
|
|
89
|
+
|
|
90
|
+
/*
|
|
91
|
+
* to be one so every card in a band shares its tracks. The header is exactly as wide as the stage, so it measures the same thing.
|
|
92
|
+
*/
|
|
93
|
+
|
|
94
|
+
/*
|
|
95
|
+
* One explicit row, and an implicit second that takes the rest. In a wide stage
|
|
96
|
+
*/
|
|
97
|
+
|
|
98
|
+
/*
|
|
99
|
+
* the tools sit in row one, no second track exists and no row gap with it.
|
|
100
|
+
*/
|
|
101
|
+
.sc-stage header {
|
|
102
|
+
container-type: inline-size;
|
|
103
|
+
display: grid;
|
|
104
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
105
|
+
grid-template-rows: auto;
|
|
106
|
+
grid-auto-rows: 1fr;
|
|
107
|
+
align-items: start;
|
|
108
|
+
gap: 0.5rem 1rem;
|
|
109
|
+
padding-bottom: 0.875rem;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.sc-stage-name {
|
|
113
|
+
grid-column: 1;
|
|
114
|
+
grid-row: 1;
|
|
115
|
+
display: flex;
|
|
116
|
+
flex-direction: column;
|
|
117
|
+
gap: 0.1875rem;
|
|
118
|
+
min-width: 0;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/*
|
|
122
|
+
* The number is a counter on the stage, so the page never carries an index it has to keep in step with the demos. `decimal-leading-zero` is what makes a
|
|
123
|
+
*/
|
|
124
|
+
|
|
125
|
+
/*
|
|
126
|
+
* run of these read as a set rather than as a list.
|
|
127
|
+
*/
|
|
128
|
+
h3 {
|
|
129
|
+
display: flex;
|
|
130
|
+
align-items: baseline;
|
|
131
|
+
gap: 0.5rem;
|
|
132
|
+
margin: 0;
|
|
133
|
+
font-size: 0.875rem;
|
|
134
|
+
font-weight: 600;
|
|
135
|
+
line-height: 1.3;
|
|
136
|
+
letter-spacing: -0.006em;
|
|
137
|
+
color: var(--color-foreground, var(--foreground));
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
h3::before {
|
|
141
|
+
content: counter(sc-stage, decimal-leading-zero);
|
|
142
|
+
font-size: 0.6875rem;
|
|
143
|
+
font-weight: 500;
|
|
144
|
+
font-variant-numeric: tabular-nums;
|
|
145
|
+
color: var(--color-muted-foreground, var(--muted-foreground));
|
|
146
|
+
opacity: 0.65;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.sc-stage-name p {
|
|
150
|
+
margin: 0;
|
|
151
|
+
max-width: 64ch;
|
|
152
|
+
padding-inline-start: 1.5rem;
|
|
153
|
+
font-size: 0.75rem;
|
|
154
|
+
line-height: 1.5;
|
|
155
|
+
color: var(--color-muted-foreground, var(--muted-foreground));
|
|
156
|
+
text-wrap: pretty;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/*
|
|
160
|
+
* The import path is the reason most people open this page, so the control is on screen rather than waiting for a pointer that a touch device never sends.
|
|
161
|
+
*/
|
|
162
|
+
|
|
163
|
+
/*
|
|
164
|
+
* It shrinks and truncates instead of pushing the title out of the header: a nowrap path at flex-shrink 0 measured 435px inside a 310px column and left
|
|
165
|
+
*/
|
|
166
|
+
|
|
167
|
+
/*
|
|
168
|
+
* the title at zero.
|
|
169
|
+
*/
|
|
170
|
+
.sc-stage-tools {
|
|
171
|
+
grid-column: 2;
|
|
172
|
+
grid-row: 1;
|
|
173
|
+
justify-self: end;
|
|
174
|
+
display: flex;
|
|
175
|
+
align-items: center;
|
|
176
|
+
justify-content: flex-end;
|
|
177
|
+
gap: 0.25rem;
|
|
178
|
+
min-width: 0;
|
|
179
|
+
/*
|
|
180
|
+
* A length, not a percentage: a percentage max-width resolves to nothing while the auto column is being sized, which collapsed a 900px header's
|
|
181
|
+
*/
|
|
182
|
+
|
|
183
|
+
/*
|
|
184
|
+
* path chip to one word. This still leaves the title two thirds of a full-width header.
|
|
185
|
+
*/
|
|
186
|
+
max-width: 24rem;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/*
|
|
190
|
+
* Below this the header cannot hold a title and a path side by side, so the
|
|
191
|
+
*/
|
|
192
|
+
|
|
193
|
+
/*
|
|
194
|
+
* tools take a line of their own and the path gets the full column. 26rem and not 30rem: two equal columns of a 60rem section measure 29.5rem each, and at
|
|
195
|
+
*/
|
|
196
|
+
|
|
197
|
+
/*
|
|
198
|
+
* 30rem every card in the AI and charts grids spent a whole row on a copy control that fits beside the title.
|
|
199
|
+
*/
|
|
200
|
+
@container (max-width: 26rem) {
|
|
201
|
+
.sc-stage-name {
|
|
202
|
+
grid-column: 1 / -1;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.sc-stage-tools {
|
|
206
|
+
grid-column: 1 / -1;
|
|
207
|
+
grid-row: 2;
|
|
208
|
+
justify-self: stretch;
|
|
209
|
+
justify-content: flex-start;
|
|
210
|
+
max-width: 100%;
|
|
211
|
+
/*
|
|
212
|
+
* The kit grids stretch the header to a shared track, so sitting the tools at its foot puts every copy control on one line across the band instead
|
|
213
|
+
*/
|
|
214
|
+
|
|
215
|
+
/*
|
|
216
|
+
* of trailing whatever note happens to sit above it.
|
|
217
|
+
*/
|
|
218
|
+
align-self: end;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.sc-ground {
|
|
223
|
+
flex: 1 1 auto;
|
|
224
|
+
display: flex;
|
|
225
|
+
flex-wrap: wrap;
|
|
226
|
+
align-items: center;
|
|
227
|
+
align-content: center;
|
|
228
|
+
justify-content: center;
|
|
229
|
+
gap: 0.75rem;
|
|
230
|
+
/*
|
|
231
|
+
* Tall enough that a component is not squeezed, short enough that a row of five buttons does not float in an acre of nothing. A demo that needs more
|
|
232
|
+
*/
|
|
233
|
+
|
|
234
|
+
/*
|
|
235
|
+
* asks for it with `wide`.
|
|
236
|
+
*/
|
|
237
|
+
min-height: 10.5rem;
|
|
238
|
+
padding: 2rem 1.75rem;
|
|
239
|
+
border-radius: var(--radius-xl, 10px);
|
|
240
|
+
/* A demo wider than its column scrolls inside the ground rather than bleeding
|
|
241
|
+
past the stage edge. Overlays portal to the body, so none is clipped. */
|
|
242
|
+
overflow: auto;
|
|
243
|
+
/*
|
|
244
|
+
* WHY the containment is on one axis: `overscroll-behavior: contain` made the ground refuse to chain a wheel in either direction, and a page of these is
|
|
245
|
+
*/
|
|
246
|
+
|
|
247
|
+
/*
|
|
248
|
+
* eighty grounds covering almost every pixel of it. The wheel landed on a ground, the ground had nothing to scroll vertically, and the page did not
|
|
249
|
+
*/
|
|
250
|
+
|
|
251
|
+
/*
|
|
252
|
+
* move. Only the sideways scroll of a wide demo needs containing.
|
|
253
|
+
*/
|
|
254
|
+
overscroll-behavior-x: contain;
|
|
255
|
+
scrollbar-width: thin;
|
|
256
|
+
/*
|
|
257
|
+
* A ground is recessed, not raised: it is the hole the component sits in. The dot grid is what gives a transparent component something to be seen
|
|
258
|
+
*/
|
|
259
|
+
|
|
260
|
+
/*
|
|
261
|
+
* against, and it is faint enough to disappear under a filled one.
|
|
262
|
+
*/
|
|
263
|
+
background-color: color-mix(
|
|
264
|
+
in oklab,
|
|
265
|
+
var(--color-muted, var(--muted)) 45%,
|
|
266
|
+
var(--color-background, var(--background))
|
|
267
|
+
);
|
|
268
|
+
background-image: radial-gradient(
|
|
269
|
+
circle at 1px 1px,
|
|
270
|
+
color-mix(in oklab, var(--color-border, var(--border)) 42%, transparent) 1px,
|
|
271
|
+
transparent 0
|
|
272
|
+
);
|
|
273
|
+
background-size: 18px 18px;
|
|
274
|
+
box-shadow: inset 0 0 0 1px
|
|
275
|
+
color-mix(in oklab, var(--color-border, var(--border)) 65%, transparent);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/*
|
|
279
|
+
* The ground keeps the full width, because it is the canvas the component is seen against. What stops is the demo standing on it: one stage per row let
|
|
280
|
+
*/
|
|
281
|
+
|
|
282
|
+
/*
|
|
283
|
+
* a card that says `width: 100%` stretch to 2000px and read as a bar. A variant row is the exception, being a stack of demos rather than one.
|
|
284
|
+
*/
|
|
285
|
+
.sc-ground > :global(*:not(.sc-variant)) {
|
|
286
|
+
max-width: 42rem;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.sc-stage-tall .sc-ground > :global(*:not(.sc-variant)) {
|
|
290
|
+
max-width: 62rem;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/*
|
|
294
|
+
* A tall ground is taller, not differently aligned. `justify-content: stretch` here read as `flex-start`, so any demo narrower than the ground sat against
|
|
295
|
+
*/
|
|
296
|
+
|
|
297
|
+
/*
|
|
298
|
+
* its left padding while every other stage on the page centred: the logo row, the list toolbar and the table each left ~380px of empty ground to their
|
|
299
|
+
*/
|
|
300
|
+
|
|
301
|
+
/*
|
|
302
|
+
* right. A demo that really wants the full width says so itself with `width: 100%`, which centring does not take away.
|
|
303
|
+
*/
|
|
304
|
+
.sc-stage-tall .sc-ground {
|
|
305
|
+
align-items: stretch;
|
|
306
|
+
min-height: 19rem;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
.sc-stage-replay {
|
|
310
|
+
padding: 0.25rem 0.625rem;
|
|
311
|
+
border: 1px solid var(--color-border, var(--border));
|
|
312
|
+
border-radius: var(--radius-lg, 8px);
|
|
313
|
+
font-size: 0.6875rem;
|
|
314
|
+
font-weight: 500;
|
|
315
|
+
color: var(--color-muted-foreground, var(--muted-foreground));
|
|
316
|
+
background: var(--color-background, var(--background));
|
|
317
|
+
cursor: pointer;
|
|
318
|
+
transition:
|
|
319
|
+
color var(--duration-quick, 150ms) var(--ease-smooth-out, ease),
|
|
320
|
+
background-color var(--duration-quick, 150ms) var(--ease-smooth-out, ease),
|
|
321
|
+
transform var(--duration-micro, 80ms) var(--ease-smooth-out, ease);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
.sc-stage-replay:hover {
|
|
325
|
+
color: var(--color-foreground, var(--foreground));
|
|
326
|
+
background: color-mix(in oklab, var(--color-muted, var(--muted)) 70%, transparent);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
.sc-stage-replay:active {
|
|
330
|
+
transform: translateY(1px);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
@media (prefers-reduced-motion: reduce) {
|
|
334
|
+
.sc-stage-replay {
|
|
335
|
+
transition: none;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
.sc-stage-replay:active {
|
|
339
|
+
transform: none;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
</style>
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { Snippet } from "svelte";
|
|
3
|
+
|
|
4
|
+
export interface ShowcaseVariantProps {
|
|
5
|
+
/** What this variant changes, e.g. "size=line, ocean". */
|
|
6
|
+
label: string;
|
|
7
|
+
children: Snippet;
|
|
8
|
+
}
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<script lang="ts">
|
|
12
|
+
let { label, children }: ShowcaseVariantProps = $props();
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<!-- One cell of a family stage. Four BorderBeams are one component, so they share a stage and a copy control instead of taking four numbered slots, and -->
|
|
16
|
+
<!-- they sit side by side because that is how presets are compared. -->
|
|
17
|
+
<div class="sc-variant">
|
|
18
|
+
<span class="sc-variant-label">{label}</span>
|
|
19
|
+
<div class="sc-variant-body">
|
|
20
|
+
{@render children()}
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<style>
|
|
25
|
+
/*
|
|
26
|
+
* A family stage is not one ground carrying cells: each variant is a ground of its own, and they stand side by side, one column each, the way the four
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/*
|
|
30
|
+
* BorderBeams read before they shared a stage. Global because the ground belongs to the stage, and the rule only exists where a variant renders.
|
|
31
|
+
*/
|
|
32
|
+
:global(.sc-ground:has(> .sc-variant)) {
|
|
33
|
+
display: grid;
|
|
34
|
+
/*
|
|
35
|
+
* Four across at most, and never a cell under 16rem: five in a row squeezed the gauge card until its caption ran one word per line. Two variants take
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
/*
|
|
39
|
+
* half the row each, four take a quarter.
|
|
40
|
+
*/
|
|
41
|
+
grid-template-columns: repeat(auto-fit, minmax(max(16rem, calc((100% - 3rem) / 4)), 1fr));
|
|
42
|
+
gap: 1rem;
|
|
43
|
+
padding: 0;
|
|
44
|
+
min-height: 0;
|
|
45
|
+
overflow: visible;
|
|
46
|
+
background: none;
|
|
47
|
+
box-shadow: none;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* Below this a row of cells is narrower than the demos standing on them. */
|
|
51
|
+
@media (max-width: 60rem) {
|
|
52
|
+
:global(.sc-ground:has(> .sc-variant)) {
|
|
53
|
+
grid-template-columns: minmax(0, 1fr);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* The cell is the ground: same recess, same dot grid, same hairline. */
|
|
58
|
+
.sc-variant {
|
|
59
|
+
display: flex;
|
|
60
|
+
flex-direction: column;
|
|
61
|
+
gap: 0.625rem;
|
|
62
|
+
min-width: 0;
|
|
63
|
+
min-height: 10.5rem;
|
|
64
|
+
padding: 1.25rem;
|
|
65
|
+
border-radius: var(--radius-xl, 10px);
|
|
66
|
+
/* A demo wider than its column scrolls in the cell, not past the stage. */
|
|
67
|
+
overflow: auto;
|
|
68
|
+
overscroll-behavior-x: contain;
|
|
69
|
+
scrollbar-width: thin;
|
|
70
|
+
background-color: color-mix(
|
|
71
|
+
in oklab,
|
|
72
|
+
var(--color-muted, var(--muted)) 45%,
|
|
73
|
+
var(--color-background, var(--background))
|
|
74
|
+
);
|
|
75
|
+
background-image: radial-gradient(
|
|
76
|
+
circle at 1px 1px,
|
|
77
|
+
color-mix(in oklab, var(--color-border, var(--border)) 42%, transparent) 1px,
|
|
78
|
+
transparent 0
|
|
79
|
+
);
|
|
80
|
+
background-size: 18px 18px;
|
|
81
|
+
box-shadow: inset 0 0 0 1px
|
|
82
|
+
color-mix(in oklab, var(--color-border, var(--border)) 65%, transparent);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.sc-variant-label {
|
|
86
|
+
font-size: 0.6875rem;
|
|
87
|
+
font-weight: 500;
|
|
88
|
+
letter-spacing: 0.04em;
|
|
89
|
+
color: var(--color-muted-foreground, var(--muted-foreground));
|
|
90
|
+
font-family: ui-monospace, SFMono-Regular, monospace;
|
|
91
|
+
overflow-wrap: anywhere;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.sc-variant-body {
|
|
95
|
+
display: flex;
|
|
96
|
+
flex: 1 1 auto;
|
|
97
|
+
flex-wrap: wrap;
|
|
98
|
+
align-items: center;
|
|
99
|
+
justify-content: center;
|
|
100
|
+
gap: 0.75rem;
|
|
101
|
+
width: 100%;
|
|
102
|
+
min-width: 0;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/* The cell spans its column; the demo on it stops where a card stops. */
|
|
106
|
+
.sc-variant-body > :global(*) {
|
|
107
|
+
max-width: 42rem;
|
|
108
|
+
}
|
|
109
|
+
</style>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m20 6-11 11-5-5" /></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M4 6.5L8 10.5L12 6.5" /></svg>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import {
|
|
3
|
+
Confirmation,
|
|
4
|
+
ConfirmationTitle,
|
|
5
|
+
ConfirmationRequest,
|
|
6
|
+
ConfirmationAccepted,
|
|
7
|
+
ConfirmationRejected,
|
|
8
|
+
ConfirmationActions,
|
|
9
|
+
ConfirmationAction,
|
|
10
|
+
type ConfirmationState,
|
|
11
|
+
} from "../../../ai/index.js";
|
|
12
|
+
|
|
13
|
+
let kind = $state<ConfirmationState>("requested");
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<div class="stack">
|
|
17
|
+
<Confirmation {kind}>
|
|
18
|
+
<ConfirmationTitle>Delete 3 stale views?</ConfirmationTitle>
|
|
19
|
+
<ConfirmationRequest>
|
|
20
|
+
<p class="body">Removes the views from the workspace. This can't be undone.</p>
|
|
21
|
+
<ConfirmationActions>
|
|
22
|
+
<ConfirmationAction variant="outline" onclick={() => (kind = "rejected")}>
|
|
23
|
+
Cancel
|
|
24
|
+
</ConfirmationAction>
|
|
25
|
+
<ConfirmationAction onclick={() => (kind = "accepted")}>Delete</ConfirmationAction>
|
|
26
|
+
</ConfirmationActions>
|
|
27
|
+
</ConfirmationRequest>
|
|
28
|
+
<ConfirmationAccepted>Deleted 3 views.</ConfirmationAccepted>
|
|
29
|
+
<ConfirmationRejected>Kept the views.</ConfirmationRejected>
|
|
30
|
+
</Confirmation>
|
|
31
|
+
|
|
32
|
+
{#if kind !== "requested"}
|
|
33
|
+
<button type="button" class="reset" onclick={() => (kind = "requested")}>Reset</button>
|
|
34
|
+
{/if}
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<style>
|
|
38
|
+
.stack {
|
|
39
|
+
display: flex;
|
|
40
|
+
flex-direction: column;
|
|
41
|
+
gap: 0.625rem;
|
|
42
|
+
width: 100%;
|
|
43
|
+
}
|
|
44
|
+
.body {
|
|
45
|
+
margin: 0;
|
|
46
|
+
font-size: 0.8125rem;
|
|
47
|
+
color: var(--muted-foreground);
|
|
48
|
+
}
|
|
49
|
+
.reset {
|
|
50
|
+
align-self: flex-start;
|
|
51
|
+
padding: 0.375rem 0.75rem;
|
|
52
|
+
font-size: 0.75rem;
|
|
53
|
+
color: var(--foreground);
|
|
54
|
+
background: var(--card);
|
|
55
|
+
border: 1px solid var(--border);
|
|
56
|
+
border-radius: 0.5rem;
|
|
57
|
+
cursor: pointer;
|
|
58
|
+
}
|
|
59
|
+
</style>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { Conversation, ConversationContent, Response } from "../../../ai/index.js";
|
|
3
|
+
import * as Message from "../../../shadcn/message/index.js";
|
|
4
|
+
import * as Bubble from "../../../shadcn/bubble/index.js";
|
|
5
|
+
import { Button } from "../../../shadcn/button/index.js";
|
|
6
|
+
import Copy from "@lucide/svelte/icons/copy";
|
|
7
|
+
import RefreshCw from "@lucide/svelte/icons/refresh-cw";
|
|
8
|
+
import ThumbsUp from "@lucide/svelte/icons/thumbs-up";
|
|
9
|
+
|
|
10
|
+
const answer = `Here's the plan:
|
|
11
|
+
|
|
12
|
+
1. **Extract** \`AnimatedBeam\` into \`@heyramzi/ui\`
|
|
13
|
+
2. **Showcase** it on the Effects page
|
|
14
|
+
3. **Migrate** both apps onto the shared copy
|
|
15
|
+
|
|
16
|
+
Want me to start?`;
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<div class="convo">
|
|
20
|
+
<Conversation>
|
|
21
|
+
<ConversationContent class="space-y-4 p-1">
|
|
22
|
+
<Message.Root align="end">
|
|
23
|
+
<Message.Content>
|
|
24
|
+
<Bubble.Root variant="default" align="end">
|
|
25
|
+
<Bubble.Content>How should I DRY up our beam effects?</Bubble.Content>
|
|
26
|
+
</Bubble.Root>
|
|
27
|
+
</Message.Content>
|
|
28
|
+
</Message.Root>
|
|
29
|
+
<Message.Root align="start">
|
|
30
|
+
<Message.Content>
|
|
31
|
+
<Bubble.Root variant="muted" align="start">
|
|
32
|
+
<Bubble.Content><Response content={answer} /></Bubble.Content>
|
|
33
|
+
</Bubble.Root>
|
|
34
|
+
<Message.Footer>
|
|
35
|
+
<Button variant="ghost" size="sm" icon class="size-7" title="Copy">
|
|
36
|
+
<Copy class="size-3.5" />
|
|
37
|
+
<span class="sr-only">Copy</span>
|
|
38
|
+
</Button>
|
|
39
|
+
<Button variant="ghost" size="sm" icon class="size-7" title="Regenerate">
|
|
40
|
+
<RefreshCw class="size-3.5" />
|
|
41
|
+
<span class="sr-only">Regenerate</span>
|
|
42
|
+
</Button>
|
|
43
|
+
<Button variant="ghost" size="sm" icon class="size-7" title="Good answer">
|
|
44
|
+
<ThumbsUp class="size-3.5" />
|
|
45
|
+
<span class="sr-only">Good answer</span>
|
|
46
|
+
</Button>
|
|
47
|
+
</Message.Footer>
|
|
48
|
+
</Message.Content>
|
|
49
|
+
</Message.Root>
|
|
50
|
+
</ConversationContent>
|
|
51
|
+
</Conversation>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
<style>
|
|
55
|
+
.convo {
|
|
56
|
+
height: 17rem;
|
|
57
|
+
width: 100%;
|
|
58
|
+
}
|
|
59
|
+
</style>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { PixelLoader } from "../../../ai/index.js";
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<div class="stack">
|
|
6
|
+
<PixelLoader label="Reading the workspace" />
|
|
7
|
+
<PixelLoader label="Writing the migration" startSeconds={47} />
|
|
8
|
+
<PixelLoader label="Waiting on the tool" elapsed={false} />
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<style>
|
|
12
|
+
.stack {
|
|
13
|
+
display: flex;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
align-items: flex-start;
|
|
16
|
+
gap: 0.875rem;
|
|
17
|
+
width: 100%;
|
|
18
|
+
}
|
|
19
|
+
</style>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import {
|
|
3
|
+
PromptInput,
|
|
4
|
+
PromptInputBody,
|
|
5
|
+
PromptInputTextarea,
|
|
6
|
+
PromptInputToolbar,
|
|
7
|
+
PromptInputSubmit,
|
|
8
|
+
Suggestions,
|
|
9
|
+
Suggestion,
|
|
10
|
+
type PromptInputStatus,
|
|
11
|
+
} from "../../../ai/index.js";
|
|
12
|
+
|
|
13
|
+
let status = $state<PromptInputStatus>("ready");
|
|
14
|
+
let value = $state("");
|
|
15
|
+
|
|
16
|
+
// Two, not three: the stage is half the section now, and the third chip ran
|
|
17
|
+
// past the card edge into a sideways scroll.
|
|
18
|
+
const ideas = ["Summarize this thread", "Draft a reply"];
|
|
19
|
+
|
|
20
|
+
function send(text: string) {
|
|
21
|
+
if (!text.trim()) return;
|
|
22
|
+
value = "";
|
|
23
|
+
status = "submitted";
|
|
24
|
+
setTimeout(() => (status = "streaming"), 400);
|
|
25
|
+
setTimeout(() => (status = "ready"), 2000);
|
|
26
|
+
}
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<div class="stack">
|
|
30
|
+
<Suggestions>
|
|
31
|
+
{#each ideas as idea (idea)}
|
|
32
|
+
<Suggestion suggestion={idea} onclick={(s) => send(s)} />
|
|
33
|
+
{/each}
|
|
34
|
+
</Suggestions>
|
|
35
|
+
<PromptInput onSubmit={(v) => send(v)}>
|
|
36
|
+
<PromptInputBody>
|
|
37
|
+
<PromptInputTextarea bind:value placeholder="Ask anything..." />
|
|
38
|
+
<PromptInputToolbar>
|
|
39
|
+
<span class="hint">Enter to send</span>
|
|
40
|
+
<PromptInputSubmit {status} />
|
|
41
|
+
</PromptInputToolbar>
|
|
42
|
+
</PromptInputBody>
|
|
43
|
+
</PromptInput>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<style>
|
|
47
|
+
.stack {
|
|
48
|
+
display: flex;
|
|
49
|
+
flex-direction: column;
|
|
50
|
+
gap: 0.75rem;
|
|
51
|
+
width: 100%;
|
|
52
|
+
}
|
|
53
|
+
.hint {
|
|
54
|
+
font-size: 0.75rem;
|
|
55
|
+
color: var(--muted-foreground);
|
|
56
|
+
}
|
|
57
|
+
</style>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { Reasoning, ReasoningTrigger, ReasoningContent } from "../../../ai/index.js";
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<div class="w">
|
|
6
|
+
<Reasoning duration={4} open>
|
|
7
|
+
<ReasoningTrigger />
|
|
8
|
+
<ReasoningContent>
|
|
9
|
+
AnimatedBeam already lives in @heyramzi/ui, so the fix is to re-export it and migrate the two
|
|
10
|
+
consumers rather than copy the keyframes a third time.
|
|
11
|
+
</ReasoningContent>
|
|
12
|
+
</Reasoning>
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<style>
|
|
16
|
+
.w {
|
|
17
|
+
width: 100%;
|
|
18
|
+
}
|
|
19
|
+
</style>
|