@heyramzi/ui 0.0.0-stage → 1.53.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 +133 -0
- package/README.md +136 -2
- package/package.json +217 -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 +354 -0
- package/scripts/sync-transitions.mjs +146 -0
- package/scripts/validate-apple-symbol-exports.mjs +45 -0
- package/src/agents/agent-avatar.svelte +590 -0
- package/src/agents/agent-cast.svelte +197 -0
- package/src/agents/demo.svelte +125 -0
- package/src/agents/helpers.ts +58 -0
- package/src/agents/index.ts +11 -0
- package/src/agents/page-state.ts +70 -0
- package/src/agents/types.ts +74 -0
- package/src/agents/vendor/LICENSE +21 -0
- package/src/agents/vendor/color.ts +155 -0
- package/src/agents/vendor/draw.ts +840 -0
- package/src/agents/vendor/engine.ts +845 -0
- package/src/agents/vendor/mesh.ts +838 -0
- package/src/agents/vendor/plastic.ts +4958 -0
- package/src/agents/vendor/presets.ts +103 -0
- package/src/agents/vendor/shapes.ts +41 -0
- package/src/agents/vendor/ticker.ts +67 -0
- package/src/agents/vendor/types.ts +261 -0
- package/src/agents/vendor/wear.ts +1699 -0
- package/src/ai/ai-button/AiButton.svelte +86 -0
- package/src/ai/ai-button/index.ts +4 -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/generation-progress/GenerationProgress.svelte +354 -0
- package/src/ai/generation-progress/index.ts +7 -0
- package/src/ai/index.ts +111 -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 +56 -0
- package/src/ai/prompt-input/PromptInputBody.svelte +19 -0
- package/src/ai/prompt-input/PromptInputSubmit.svelte +79 -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 +50 -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/ambient.d.ts +4 -0
- package/src/animations/README.md +84 -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/index.css +23 -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/page-side-by-side.css +63 -0
- package/src/animations/plus-menu-morph.css +97 -0
- package/src/animations/resize.css +20 -0
- package/src/animations/shimmer-text.css +72 -0
- package/src/animations/spinning-counter.css +52 -0
- package/src/animations/success-check.css +120 -0
- package/src/animations/text-swap.css +40 -0
- package/src/animations/text-swap.ts +40 -0
- package/src/animations/thinking-states.css +65 -0
- package/src/animations/upstream-coverage.test.ts +65 -0
- package/src/components/copy/clipboard.test.ts +206 -0
- package/src/components/copy/clipboard.ts +49 -0
- package/src/components/copy/copied.svelte.ts +39 -0
- package/src/components/copy/copy-button.svelte +175 -0
- package/src/components/copy/copy-button.test.ts +112 -0
- package/src/components/copy/index.ts +3 -0
- package/src/components/data-table/data-table.test.ts +134 -0
- package/src/components/data-table/data-table.ts +77 -0
- package/src/components/data-table/index.ts +20 -0
- package/src/components/data-table/infinite-scroll.svelte +69 -0
- package/src/components/data-table/pagination.svelte +62 -0
- package/src/components/data-table/row-arrow.svelte +28 -0
- package/src/components/data-table/row-context-menu.svelte +106 -0
- package/src/components/data-table/row-context-menu.test.ts +18 -0
- package/src/components/data-table/sortable-head.svelte +56 -0
- package/src/components/data-table/table-skeleton.svelte +83 -0
- package/src/components/hold-to-confirm/hold-to-confirm.svelte +232 -0
- package/src/components/hold-to-confirm/index.ts +1 -0
- package/src/components/icon/icon.svelte +23 -0
- package/src/components/icon/index.ts +1 -0
- package/src/components/language-flag/index.ts +1 -0
- package/src/components/language-flag/language-flag.svelte +60 -0
- package/src/components/list-page/detail-empty.svelte +50 -0
- package/src/components/list-page/detail-header.svelte +107 -0
- package/src/components/list-page/detail-panel.svelte +90 -0
- package/src/components/list-page/detail-row.svelte +36 -0
- package/src/components/list-page/detail-stack.svelte +33 -0
- package/src/components/list-page/empty-state.svelte +91 -0
- package/src/components/list-page/filter-item.svelte +49 -0
- package/src/components/list-page/filter-popover.svelte +88 -0
- package/src/components/list-page/filter-section.ts +12 -0
- package/src/components/list-page/grouped-list.svelte +116 -0
- package/src/components/list-page/index.ts +28 -0
- package/src/components/list-page/list-page-shell.svelte +195 -0
- package/src/components/list-page/list-table.ts +19 -0
- package/src/components/list-page/master-detail.svelte +206 -0
- package/src/components/list-page/master-detail.test.ts +37 -0
- package/src/components/list-page/notice-bar.svelte +68 -0
- package/src/components/list-page/prev-next.svelte +104 -0
- package/src/components/list-page/queue-rail.ts +25 -0
- package/src/components/list-page/rail-body.svelte +29 -0
- package/src/components/list-page/rail-empty.svelte +51 -0
- package/src/components/list-page/rail-head.svelte +49 -0
- package/src/components/list-page/rail-row.svelte +163 -0
- package/src/components/list-page/section-host.ts +24 -0
- package/src/components/list-page/section-label.svelte +39 -0
- package/src/components/list-page/step.test.ts +21 -0
- package/src/components/list-page/step.ts +10 -0
- package/src/components/list-page/toolbar-search.svelte +63 -0
- package/src/components/list-page/toolbar-trigger.ts +23 -0
- package/src/components/list-page/types.ts +1 -0
- package/src/components/locale-switch/index.ts +1 -0
- package/src/components/locale-switch/locale-switch.svelte +59 -0
- package/src/components/mark/index.ts +1 -0
- package/src/components/mark/mark.svelte +70 -0
- package/src/components/open-in/index.ts +6 -0
- package/src/components/open-in/open-in.svelte +106 -0
- package/src/components/picker/index.ts +4 -0
- package/src/components/picker/mark-picker.svelte +84 -0
- package/src/components/picker/picker.svelte +143 -0
- package/src/components/picker/trigger.ts +42 -0
- package/src/components/picker/types.ts +26 -0
- package/src/components/segmented/animated-tabs.svelte +175 -0
- package/src/components/segmented/collapse.test.ts +49 -0
- package/src/components/segmented/collapse.ts +39 -0
- package/src/components/segmented/index.ts +41 -0
- package/src/components/segmented/section-runs.svelte +79 -0
- package/src/components/segmented/segment.svelte +106 -0
- package/src/components/segmented/segmented-filter.svelte +125 -0
- package/src/components/segmented/segmented-nav.svelte +82 -0
- package/src/components/segmented/segmented-overflow.svelte +85 -0
- package/src/components/segmented/segmented-track.svelte +186 -0
- package/src/components/segmented/segmented.test.ts +20 -0
- package/src/components/segmented/segmented.ts +80 -0
- package/src/components/star-rating-input/index.ts +9 -0
- package/src/components/star-rating-input/star-rating-input.svelte +263 -0
- package/src/components/svg/index.ts +1 -0
- package/src/components/svg/svg.svelte +9 -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 +100 -0
- package/src/effects/image-comparison/ImageComparison.svelte +209 -0
- package/src/effects/image-comparison/compare.test.ts +17 -0
- package/src/effects/image-comparison/compare.ts +5 -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/interactive-hover-button/InteractiveHoverButton.svelte +338 -0
- package/src/effects/magic-card/MagicCard.css +47 -0
- package/src/effects/magic-card/MagicCard.svelte +57 -0
- package/src/effects/magnetic/magnetic.ts +81 -0
- package/src/effects/marquee/Marquee.css +78 -0
- package/src/effects/marquee/Marquee.svelte +160 -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 +11 -0
- package/src/effects/reveal/observe.test.ts +60 -0
- package/src/effects/reveal/observe.ts +65 -0
- package/src/effects/reveal/reveal.css +141 -0
- package/src/effects/reveal/types.ts +32 -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 +214 -0
- package/src/effects/theme-toggle/ThemeToggle.svelte +126 -0
- package/src/gallery.test.ts +52 -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 +53 -0
- package/src/lib/arrive.ts +26 -0
- package/src/lib/icon-types.ts +17 -0
- package/src/lib/layout.ts +8 -0
- package/src/lib/panel.ts +21 -0
- package/src/lib/sliding-pill.ts +68 -0
- package/src/lib/theme-transition.ts +79 -0
- package/src/lib/tone.ts +48 -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 +44 -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 +46 -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 +54 -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 +124 -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/code-block/code-block-actions.svelte +23 -0
- package/src/shadcn/code-block/code-block-content.svelte +55 -0
- package/src/shadcn/code-block/code-block-copy-button.svelte +10 -0
- package/src/shadcn/code-block/code-block-footer.svelte +20 -0
- package/src/shadcn/code-block/code-block-header.svelte +23 -0
- package/src/shadcn/code-block/code-block-line.svelte +71 -0
- package/src/shadcn/code-block/code-block-title.svelte +23 -0
- package/src/shadcn/code-block/code-block.svelte +47 -0
- package/src/shadcn/code-block/index.ts +42 -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 +40 -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 +36 -0
- package/src/shadcn/field/simple-field.svelte +71 -0
- package/src/shadcn/field/simple-field.test.ts +47 -0
- package/src/shadcn/hooks/highlighter.ts +132 -0
- package/src/shadcn/hooks/is-mobile.svelte.ts +9 -0
- package/src/shadcn/hooks/use-highlighted-code.svelte.ts +98 -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/kbd/index.ts +10 -0
- package/src/shadcn/kbd/kbd-group.svelte +20 -0
- package/src/shadcn/kbd/kbd.svelte +23 -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/message-scroller/index.ts +28 -0
- package/src/shadcn/message-scroller/message-scroller-button.svelte +52 -0
- package/src/shadcn/message-scroller/message-scroller-content.svelte +17 -0
- package/src/shadcn/message-scroller/message-scroller-item.svelte +22 -0
- package/src/shadcn/message-scroller/message-scroller-provider.svelte +7 -0
- package/src/shadcn/message-scroller/message-scroller-viewport.svelte +20 -0
- package/src/shadcn/message-scroller/message-scroller.svelte +20 -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 +32 -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 +73 -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.css +48 -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 +31 -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 +36 -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 +66 -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/trace/index.ts +29 -0
- package/src/shadcn/trace/trace-collapsible-content.svelte +29 -0
- package/src/shadcn/trace/trace-collapsible-trigger.svelte +29 -0
- package/src/shadcn/trace/trace-collapsible.svelte +20 -0
- package/src/shadcn/trace/trace-description.svelte +20 -0
- package/src/shadcn/trace/trace-icon.svelte +24 -0
- package/src/shadcn/trace/trace-line.svelte +31 -0
- package/src/shadcn/trace/trace-title.svelte +20 -0
- package/src/shadcn/trace/trace.svelte +23 -0
- package/src/shadcn/utilities.css +549 -0
- package/src/test-setup.ts +34 -0
- package/src/tokens.css +993 -0
package/COMPONENTS.md
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Components
|
|
2
|
+
|
|
3
|
+
Every component in `@heyramzi/ui`, one line each. Import a component from its subpath, e.g.
|
|
4
|
+
`import { Button } from "@heyramzi/ui/shadcn/button"`.
|
|
5
|
+
|
|
6
|
+
The style layer lives in [`src/tokens.css`](./src/tokens.css) and the motion CSS in
|
|
7
|
+
[`src/animations`](./src/animations). Components that already exist in
|
|
8
|
+
[shadcn-svelte](https://shadcn-svelte.com) are linked there from the root README.
|
|
9
|
+
|
|
10
|
+
## shadcn primitives (`src/shadcn`)
|
|
11
|
+
|
|
12
|
+
- `accordion` — Accordion
|
|
13
|
+
- `alert` — alertVariants, AlertVariant
|
|
14
|
+
- `alert-dialog` — AlertDialog
|
|
15
|
+
- `attachment` — Attachment
|
|
16
|
+
- `avatar` — Avatar
|
|
17
|
+
- `badge` — Badge, badgeVariants, BadgeVariant
|
|
18
|
+
- `breadcrumb` — Breadcrumb
|
|
19
|
+
- `bubble` — Bubble
|
|
20
|
+
- `button` — Button
|
|
21
|
+
- `calendar` — Calendar
|
|
22
|
+
- `card` — Card
|
|
23
|
+
- `checkbox` — Checkbox
|
|
24
|
+
- `code-block` — CodeBlock. Highlight with `useHighlightedCode` from `@heyramzi/ui/shadcn/hooks/use-highlighted-code.svelte` (Shiki, ANSI too)
|
|
25
|
+
- `collapsible` — Collapsible
|
|
26
|
+
- `command` — Command, computeCommandScore (the scorer, for a custom `filter`)
|
|
27
|
+
- `context-menu` — ContextMenu
|
|
28
|
+
- `dialog` — Dialog
|
|
29
|
+
- `dropdown-menu` — CheckboxGroup, CheckboxItem, Content, Portal, DropdownMenu, DropdownMenuCheckboxGroup
|
|
30
|
+
- `empty` — Empty
|
|
31
|
+
- `field` — Field and its parts, plus SimpleField: label, hint or error and the control, with the message linked by `aria-describedby`
|
|
32
|
+
- `hover-card` — HoverCard
|
|
33
|
+
- `input` — Input
|
|
34
|
+
- `input-otp` — InputOtp
|
|
35
|
+
- `label` — Label
|
|
36
|
+
- `marker` — Marker
|
|
37
|
+
- `message` — Message
|
|
38
|
+
- `message-scroller` — MessageScroller, the chat transcript scroller: follows a streamed reply, anchors each turn, keeps place on prepend
|
|
39
|
+
- `popover` — Popover
|
|
40
|
+
- `progress` — Progress
|
|
41
|
+
- `radio-group` — RadioGroup
|
|
42
|
+
- `scroll-area` — ScrollArea
|
|
43
|
+
- `select` — Select
|
|
44
|
+
- `separator` — Separator
|
|
45
|
+
- `sheet` — Sheet (`side`: `left`, `right` or `bottom`)
|
|
46
|
+
- `sidebar` — Sidebar
|
|
47
|
+
- `skeleton` — Skeleton
|
|
48
|
+
- `slider` — Slider
|
|
49
|
+
- `sonner` — Toaster
|
|
50
|
+
- `spinner` — Spinner
|
|
51
|
+
- `switch` — Switch
|
|
52
|
+
- `table` — Table
|
|
53
|
+
- `tabs` — Tabs
|
|
54
|
+
- `textarea` — Textarea
|
|
55
|
+
- `toggle` — toggleVariants, ToggleSize, ToggleVariant, ToggleVariants
|
|
56
|
+
- `toggle-group` — ToggleGroup
|
|
57
|
+
- `tooltip` — Tooltip
|
|
58
|
+
- `trace` — Trace, an agent's steps: reasoning, tool calls and sources as status rows that can expand
|
|
59
|
+
|
|
60
|
+
## Components (`src/components`)
|
|
61
|
+
|
|
62
|
+
Generic pieces built on the primitives, imported from `@heyramzi/ui/components/<name>`.
|
|
63
|
+
|
|
64
|
+
- `copy` — CopyButton, copyText, copyRichText, htmlToPlainText, Copied
|
|
65
|
+
- `data-table` — SortableHead, Pagination, InfiniteScroll, RowContextMenu, TableSkeleton, and the sort, page and filter helpers
|
|
66
|
+
- `hold-to-confirm` — HoldToConfirm, press and hold to confirm
|
|
67
|
+
- `icon` — Icon, a Phosphor component at a size
|
|
68
|
+
- `language-flag` — LanguageFlag
|
|
69
|
+
- `list-page` — ListPageShell, MasterDetail, GroupedList, RailRow and the rest of the master-detail page kit, NoticeBar, EmptyState, FilterPopover, setSectionHost
|
|
70
|
+
- `locale-switch` — LocaleSwitch, a language switch on SegmentedFilter
|
|
71
|
+
- `mark` — Mark, a logo or photo glyph with an initial fallback
|
|
72
|
+
- `open-in` — OpenIn, a link out to a tool that takes the tool's name, label and mark as a prop
|
|
73
|
+
- `picker` — Picker, MarkPicker, pickerTriggerClass, a command palette at popover scale
|
|
74
|
+
- `segmented` — AnimatedTabs (pill or underline), SegmentedFilter, SegmentedNav, SectionRuns, one bordered track with a sliding pill, a badge note and an overflow menu
|
|
75
|
+
- `star-rating-input` — StarRatingInput
|
|
76
|
+
- `svg` — Svg, an SVG file imported with `?raw`
|
|
77
|
+
|
|
78
|
+
## Effects (`src/effects`)
|
|
79
|
+
|
|
80
|
+
- `interactive-hover-button` — InteractiveHoverButton, a dot that grows into the fill
|
|
81
|
+
|
|
82
|
+
- `animated-beam` — AnimatedBeam, AnimatedBeamProps, AnchorPosition
|
|
83
|
+
- `border-beam` — BorderBeam
|
|
84
|
+
- `image-comparison` — ImageComparison, a before/after wipe with a bindable position, side badges and a hint sweep
|
|
85
|
+
- `image-reveal` — ImageReveal, ImageRevealProps, ImageRevealHandle
|
|
86
|
+
- `magnetic` — magnetic
|
|
87
|
+
- `magic-card` — MagicCard. Props: `glow`, `radius`, `class`, `contentClass`; the glow colour is `--magic-card-glow` set on `class`.
|
|
88
|
+
- `marquee` — Marquee
|
|
89
|
+
- `progressive-blur` — ProgressiveBlur
|
|
90
|
+
- `reveal` — InView, AnimatedGroup, TextEffect, observeInView, RevealPreset, RevealPer
|
|
91
|
+
- `shader-gradient` — ShaderGradient, ShaderGradientProps, ShaderGradientUniforms
|
|
92
|
+
- `spotlight` — Spotlight
|
|
93
|
+
- `theme-toggle` — ThemeToggle, revealTheme. Props: `isDark`, `mode` (`light`, `dark`, `system`; swaps in the Monitor icon), `onToggle`, `variant` (`outline`, `ghost`, `inverted`, `slide`; `inverted` boolean is an alias; `slide` is a pill with a moving thumb, coloured by `--theme-toggle-thumb-light`, `--theme-toggle-thumb-dark`, `--theme-toggle-track`, `--theme-toggle-glow` and friends set on `class`), `size`, `label`, `title`, `skipTransition`, `class`. `revealTheme(event, apply, { skip, duration, easing })` is the circular wipe on its own: `import { revealTheme } from "@heyramzi/ui"` (the `./lib/*` subpath points at `.js` and the source is `.ts`).
|
|
94
|
+
|
|
95
|
+
## Animations (`src/animations`)
|
|
96
|
+
|
|
97
|
+
- `avatar-group-hover` — keyframe utilities
|
|
98
|
+
- `card-tilt` — keyframe utilities
|
|
99
|
+
- `digit-pop-in` — keyframe utilities
|
|
100
|
+
- `dropdown` — keyframe utilities
|
|
101
|
+
- `input-clear-dissolve` — keyframe utilities
|
|
102
|
+
- `input-shake` — keyframe utilities
|
|
103
|
+
- `learn-more-hover` — keyframe utilities
|
|
104
|
+
- `like-button` — keyframe utilities
|
|
105
|
+
- `modal` — keyframe utilities
|
|
106
|
+
- `page-side-by-side` — keyframe utilities
|
|
107
|
+
- `plus-menu-morph` — keyframe utilities
|
|
108
|
+
- `resize` — keyframe utilities
|
|
109
|
+
- `shimmer-text` — keyframe utilities
|
|
110
|
+
- `spinning-counter` — keyframe utilities
|
|
111
|
+
- `success-check` — keyframe utilities
|
|
112
|
+
- `text-swap` — keyframe utilities
|
|
113
|
+
- `thinking-states` — keyframe utilities
|
|
114
|
+
|
|
115
|
+
## AI and chat (`src/ai`)
|
|
116
|
+
|
|
117
|
+
- `ai-button` — AiButton
|
|
118
|
+
- `confirmation` — Confirmation, ConfirmationTitle, ConfirmationRequest, ConfirmationAccepted, ConfirmationRejected, ConfirmationActions, ConfirmationAction
|
|
119
|
+
- `generation-progress` — GenerationProgress
|
|
120
|
+
- `loading-state` — PixelLoader
|
|
121
|
+
- `prompt-input` — PromptInput, PromptInputBody, PromptInputToolbar, PromptInputTextarea, PromptInputSubmit
|
|
122
|
+
- `reasoning` — Reasoning, ReasoningTrigger, ReasoningContent
|
|
123
|
+
- `response` — Response
|
|
124
|
+
- `suggestion` — Suggestion, Suggestions
|
|
125
|
+
- `thinking-dots` — ThinkingDots
|
|
126
|
+
- `typing-dots` — TypingDots
|
|
127
|
+
- `voice-waveform` — VoiceWaveform
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
Skipped on purpose: brand assets (logos, marks, brand renderer), kanban, list, gantt and status (they live in `@heyramzi/tasks`), and charts
|
|
132
|
+
(they live in `@heyramzi/charts`). The bot avatars
|
|
133
|
+
are in `src/agents`, imported from `@heyramzi/ui/agents`.
|
package/README.md
CHANGED
|
@@ -1,3 +1,137 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @heyramzi/ui
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Svelte 5 UI primitives you copy into your project and own. Components, visual
|
|
4
|
+
effects, CSS animations and a small set of chat and AI surfaces. No build step, no runtime wrapper,
|
|
5
|
+
no framework lock-in.
|
|
6
|
+
|
|
7
|
+
The package is a source registry. Every component is a folder under
|
|
8
|
+
`src/` that you can copy into your own `$lib` and edit. The root barrel is
|
|
9
|
+
only a convenience.
|
|
10
|
+
|
|
11
|
+
## What is inside
|
|
12
|
+
|
|
13
|
+
- `src/shadcn` shadcn-svelte primitives, generalized.
|
|
14
|
+
- `src/components` generic pieces on the primitives: segmented control, picker, copy button, data table, list page, hold to confirm and more.
|
|
15
|
+
- `src/effects` animated borders, beams, marquee, spotlight, image reveal,
|
|
16
|
+
image comparison, shimmer gradients and a theme toggle.
|
|
17
|
+
- `src/animations` keyframe CSS for dropdowns, modals, tooltips, text swaps,
|
|
18
|
+
success checks and the rest of the motion vocabulary.
|
|
19
|
+
- `src/ai` chat and AI surfaces: prompt input, response, reasoning, confirmation and loaders.
|
|
20
|
+
- `src/agents` bot avatars and a cast grid, imported from `@heyramzi/ui/agents`:
|
|
21
|
+
`AgentAvatar` draws an eyes-only face from a name, role, shape and colour, and
|
|
22
|
+
`AgentCast` lays a list of agents out as cards you can pick from.
|
|
23
|
+
|
|
24
|
+
See [COMPONENTS.md](./COMPONENTS.md) for the full list, one line each.
|
|
25
|
+
|
|
26
|
+
## Setup
|
|
27
|
+
|
|
28
|
+
Import the style layer once, after Tailwind:
|
|
29
|
+
|
|
30
|
+
```css
|
|
31
|
+
@import "tailwindcss";
|
|
32
|
+
@import "@heyramzi/ui/tokens.css";
|
|
33
|
+
@import "@heyramzi/ui/animations";
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`tokens.css` carries the palette, the semantic tokens and the craft layer
|
|
37
|
+
(radius, elevation, focus, motion). `animations` carries the keyframes the
|
|
38
|
+
components reference. If you use the Attachment or Message component, also
|
|
39
|
+
import `@heyramzi/ui/shadcn/utilities.css`.
|
|
40
|
+
|
|
41
|
+
Retheme by overriding any variable on `:root`, for example
|
|
42
|
+
`--color-brand-indigo` or `--radius-lg`. Dark mode keys off a `.dark`
|
|
43
|
+
class on `html`.
|
|
44
|
+
|
|
45
|
+
Rich text lives in [`@heyramzi/rich-editor`](https://github.com/heyramzi/ui/tree/main/packages/rich-editor),
|
|
46
|
+
so the kit doesn't pull Tiptap into every app.
|
|
47
|
+
|
|
48
|
+
Charts live in their own package now,
|
|
49
|
+
[`@heyramzi/charts`](https://github.com/heyramzi/ui/tree/main/packages/charts). It reads
|
|
50
|
+
the same tokens, so import `tokens.css` once and both work.
|
|
51
|
+
|
|
52
|
+
React and other framework ports are out of scope. The source is Svelte 5
|
|
53
|
+
runes only.
|
|
54
|
+
|
|
55
|
+
## Using a component
|
|
56
|
+
|
|
57
|
+
Import from a subpath:
|
|
58
|
+
|
|
59
|
+
```svelte
|
|
60
|
+
<script lang="ts">
|
|
61
|
+
import { Button } from "@heyramzi/ui/shadcn/button";
|
|
62
|
+
import { Card, CardHeader, CardTitle, CardContent } from "@heyramzi/ui/shadcn/card";
|
|
63
|
+
import Marquee from "@heyramzi/ui/effects/marquee/Marquee.svelte";
|
|
64
|
+
</script>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Many components take their content through snippets, so you keep full control:
|
|
68
|
+
|
|
69
|
+
```svelte
|
|
70
|
+
<Button variant="outline" size="sm" onclick={save}>Save</Button>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## shadcn-svelte
|
|
74
|
+
|
|
75
|
+
The primitives in `src/shadcn` are copies of
|
|
76
|
+
[shadcn-svelte](https://shadcn-svelte.com), generalized. If a component exists
|
|
77
|
+
there, use its page for props and examples:
|
|
78
|
+
|
|
79
|
+
| Component | Docs |
|
|
80
|
+
| --- | --- |
|
|
81
|
+
| `accordion` | https://shadcn-svelte.com/docs/components/accordion |
|
|
82
|
+
| `alert` | https://shadcn-svelte.com/docs/components/alert |
|
|
83
|
+
| `alert-dialog` | https://shadcn-svelte.com/docs/components/alert-dialog |
|
|
84
|
+
| `attachment` | https://shadcn-svelte.com/docs/components/attachment |
|
|
85
|
+
| `avatar` | https://shadcn-svelte.com/docs/components/avatar |
|
|
86
|
+
| `badge` | https://shadcn-svelte.com/docs/components/badge |
|
|
87
|
+
| `breadcrumb` | https://shadcn-svelte.com/docs/components/breadcrumb |
|
|
88
|
+
| `bubble` | https://shadcn-svelte.com/docs/components/bubble |
|
|
89
|
+
| `button` | https://shadcn-svelte.com/docs/components/button |
|
|
90
|
+
| `calendar` | https://shadcn-svelte.com/docs/components/calendar |
|
|
91
|
+
| `card` | https://shadcn-svelte.com/docs/components/card |
|
|
92
|
+
| `checkbox` | https://shadcn-svelte.com/docs/components/checkbox |
|
|
93
|
+
| `collapsible` | https://shadcn-svelte.com/docs/components/collapsible |
|
|
94
|
+
| `command` | https://shadcn-svelte.com/docs/components/command |
|
|
95
|
+
| `context-menu` | https://shadcn-svelte.com/docs/components/context-menu |
|
|
96
|
+
| `dialog` | https://shadcn-svelte.com/docs/components/dialog |
|
|
97
|
+
| `dropdown-menu` | https://shadcn-svelte.com/docs/components/dropdown-menu |
|
|
98
|
+
| `empty` | https://shadcn-svelte.com/docs/components/empty |
|
|
99
|
+
| `field` | https://shadcn-svelte.com/docs/components/field |
|
|
100
|
+
| `hover-card` | https://shadcn-svelte.com/docs/components/hover-card |
|
|
101
|
+
| `input` | https://shadcn-svelte.com/docs/components/input |
|
|
102
|
+
| `input-otp` | https://shadcn-svelte.com/docs/components/input-otp |
|
|
103
|
+
| `label` | https://shadcn-svelte.com/docs/components/label |
|
|
104
|
+
| `marker` | https://shadcn-svelte.com/docs/components/marker |
|
|
105
|
+
| `message` | https://shadcn-svelte.com/docs/components/message |
|
|
106
|
+
| `popover` | https://shadcn-svelte.com/docs/components/popover |
|
|
107
|
+
| `progress` | https://shadcn-svelte.com/docs/components/progress |
|
|
108
|
+
| `radio-group` | https://shadcn-svelte.com/docs/components/radio-group |
|
|
109
|
+
| `scroll-area` | https://shadcn-svelte.com/docs/components/scroll-area |
|
|
110
|
+
| `select` | https://shadcn-svelte.com/docs/components/select |
|
|
111
|
+
| `separator` | https://shadcn-svelte.com/docs/components/separator |
|
|
112
|
+
| `sheet` | https://shadcn-svelte.com/docs/components/sheet |
|
|
113
|
+
| `sidebar` | https://shadcn-svelte.com/docs/components/sidebar |
|
|
114
|
+
| `skeleton` | https://shadcn-svelte.com/docs/components/skeleton |
|
|
115
|
+
| `slider` | https://shadcn-svelte.com/docs/components/slider |
|
|
116
|
+
| `sonner` | https://shadcn-svelte.com/docs/components/sonner |
|
|
117
|
+
| `spinner` | https://shadcn-svelte.com/docs/components/spinner |
|
|
118
|
+
| `switch` | https://shadcn-svelte.com/docs/components/switch |
|
|
119
|
+
| `table` | https://shadcn-svelte.com/docs/components/table |
|
|
120
|
+
| `tabs` | https://shadcn-svelte.com/docs/components/tabs |
|
|
121
|
+
| `textarea` | https://shadcn-svelte.com/docs/components/textarea |
|
|
122
|
+
| `toggle` | https://shadcn-svelte.com/docs/components/toggle |
|
|
123
|
+
| `toggle-group` | https://shadcn-svelte.com/docs/components/toggle-group |
|
|
124
|
+
| `tooltip` | https://shadcn-svelte.com/docs/components/tooltip |
|
|
125
|
+
|
|
126
|
+
## Credits
|
|
127
|
+
|
|
128
|
+
Inspired by [shadcn-svelte](https://github.com/huntabyte/shadcn-svelte).
|
|
129
|
+
The reveal, marquee and beam effects are inspired by
|
|
130
|
+
[motion-primitives](https://github.com/ibelick/motion-primitives), and the
|
|
131
|
+
motion vocabulary by [transitions-dev](https://transitions.dev). The agent avatars
|
|
132
|
+
port [bot-avatars](https://github.com/Jakubantalik/Libraries.dev/tree/main/packages/bot-avatars) 0.2.2; its licence is in
|
|
133
|
+
`src/agents/vendor/LICENSE`.
|
|
134
|
+
|
|
135
|
+
## License
|
|
136
|
+
|
|
137
|
+
MIT
|
package/package.json
CHANGED
|
@@ -1,6 +1,220 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@heyramzi/ui",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "1.53.1",
|
|
4
|
+
"description": "Svelte 5 UI primitives: effects, animations, and shared component CSS.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/heyramzi/ui.git",
|
|
9
|
+
"directory": "packages/ui"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://ui.heyramzi.com",
|
|
12
|
+
"type": "module",
|
|
13
|
+
"svelte": "./src/index.ts",
|
|
14
|
+
"files": [
|
|
15
|
+
"src",
|
|
16
|
+
"scripts",
|
|
17
|
+
"package.json",
|
|
18
|
+
"README.md",
|
|
19
|
+
"COMPONENTS.md"
|
|
20
|
+
],
|
|
21
|
+
"imports": {
|
|
22
|
+
"#scripts/*": "./scripts/*",
|
|
23
|
+
"#src/*": "./src/*"
|
|
24
|
+
},
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"svelte": "./src/index.ts",
|
|
28
|
+
"types": "./src/index.ts",
|
|
29
|
+
"default": "./src/index.ts"
|
|
30
|
+
},
|
|
31
|
+
"./tokens.css": "./src/tokens.css",
|
|
32
|
+
"./lib/*.js": {
|
|
33
|
+
"svelte": "./src/lib/*.ts",
|
|
34
|
+
"types": "./src/lib/*.ts",
|
|
35
|
+
"default": "./src/lib/*.ts"
|
|
36
|
+
},
|
|
37
|
+
"./lib/*": {
|
|
38
|
+
"svelte": "./src/lib/*.ts",
|
|
39
|
+
"types": "./src/lib/*.ts",
|
|
40
|
+
"default": "./src/lib/*.ts"
|
|
41
|
+
},
|
|
42
|
+
"./border-beam": {
|
|
43
|
+
"svelte": "./src/effects/border-beam/BorderBeam.svelte",
|
|
44
|
+
"default": "./src/effects/border-beam/BorderBeam.svelte"
|
|
45
|
+
},
|
|
46
|
+
"./effects/border-beam": {
|
|
47
|
+
"svelte": "./src/effects/border-beam/BorderBeam.svelte",
|
|
48
|
+
"default": "./src/effects/border-beam/BorderBeam.svelte"
|
|
49
|
+
},
|
|
50
|
+
"./theme-toggle": {
|
|
51
|
+
"svelte": "./src/effects/theme-toggle/ThemeToggle.svelte",
|
|
52
|
+
"default": "./src/effects/theme-toggle/ThemeToggle.svelte"
|
|
53
|
+
},
|
|
54
|
+
"./effects/theme-toggle": {
|
|
55
|
+
"svelte": "./src/effects/theme-toggle/ThemeToggle.svelte",
|
|
56
|
+
"default": "./src/effects/theme-toggle/ThemeToggle.svelte"
|
|
57
|
+
},
|
|
58
|
+
"./effects/animated-beam": {
|
|
59
|
+
"svelte": "./src/effects/animated-beam/index.ts",
|
|
60
|
+
"types": "./src/effects/animated-beam/index.ts",
|
|
61
|
+
"default": "./src/effects/animated-beam/index.ts"
|
|
62
|
+
},
|
|
63
|
+
"./effects/spotlight": {
|
|
64
|
+
"svelte": "./src/effects/spotlight/Spotlight.svelte",
|
|
65
|
+
"default": "./src/effects/spotlight/Spotlight.svelte"
|
|
66
|
+
},
|
|
67
|
+
"./effects/magic-card": {
|
|
68
|
+
"svelte": "./src/effects/magic-card/MagicCard.svelte",
|
|
69
|
+
"default": "./src/effects/magic-card/MagicCard.svelte"
|
|
70
|
+
},
|
|
71
|
+
"./effects/marquee": {
|
|
72
|
+
"svelte": "./src/effects/marquee/Marquee.svelte",
|
|
73
|
+
"default": "./src/effects/marquee/Marquee.svelte"
|
|
74
|
+
},
|
|
75
|
+
"./effects/image-reveal": {
|
|
76
|
+
"svelte": "./src/effects/image-reveal/index.ts",
|
|
77
|
+
"types": "./src/effects/image-reveal/index.ts",
|
|
78
|
+
"default": "./src/effects/image-reveal/index.ts"
|
|
79
|
+
},
|
|
80
|
+
"./effects/shader-gradient": {
|
|
81
|
+
"svelte": "./src/effects/shader-gradient/index.ts",
|
|
82
|
+
"types": "./src/effects/shader-gradient/index.ts",
|
|
83
|
+
"default": "./src/effects/shader-gradient/index.ts"
|
|
84
|
+
},
|
|
85
|
+
"./effects/reveal": {
|
|
86
|
+
"svelte": "./src/effects/reveal/index.ts",
|
|
87
|
+
"types": "./src/effects/reveal/index.ts",
|
|
88
|
+
"default": "./src/effects/reveal/index.ts"
|
|
89
|
+
},
|
|
90
|
+
"./effects/progressive-blur": {
|
|
91
|
+
"svelte": "./src/effects/progressive-blur/ProgressiveBlur.svelte",
|
|
92
|
+
"default": "./src/effects/progressive-blur/ProgressiveBlur.svelte"
|
|
93
|
+
},
|
|
94
|
+
"./effects/interactive-hover-button": {
|
|
95
|
+
"svelte": "./src/effects/interactive-hover-button/InteractiveHoverButton.svelte",
|
|
96
|
+
"default": "./src/effects/interactive-hover-button/InteractiveHoverButton.svelte"
|
|
97
|
+
},
|
|
98
|
+
"./effects/image-comparison": {
|
|
99
|
+
"svelte": "./src/effects/image-comparison/ImageComparison.svelte",
|
|
100
|
+
"default": "./src/effects/image-comparison/ImageComparison.svelte"
|
|
101
|
+
},
|
|
102
|
+
"./effects/magnetic": {
|
|
103
|
+
"svelte": "./src/effects/magnetic/magnetic.ts",
|
|
104
|
+
"types": "./src/effects/magnetic/magnetic.ts",
|
|
105
|
+
"default": "./src/effects/magnetic/magnetic.ts"
|
|
106
|
+
},
|
|
107
|
+
"./icons/sf-symbols": {
|
|
108
|
+
"svelte": "./src/icons/sf-symbols.ts",
|
|
109
|
+
"types": "./src/icons/sf-symbols.ts",
|
|
110
|
+
"default": "./src/icons/sf-symbols.ts"
|
|
111
|
+
},
|
|
112
|
+
"./icons/trades": {
|
|
113
|
+
"svelte": "./src/icons/trades.ts",
|
|
114
|
+
"types": "./src/icons/trades.ts",
|
|
115
|
+
"default": "./src/icons/trades.ts"
|
|
116
|
+
},
|
|
117
|
+
"./icons/TradeIcon": {
|
|
118
|
+
"svelte": "./src/icons/TradeIcon.svelte",
|
|
119
|
+
"default": "./src/icons/TradeIcon.svelte"
|
|
120
|
+
},
|
|
121
|
+
"./design": {
|
|
122
|
+
"style": "./src/design/index.css",
|
|
123
|
+
"default": "./src/design/index.css"
|
|
124
|
+
},
|
|
125
|
+
"./animations": {
|
|
126
|
+
"style": "./src/animations/index.css",
|
|
127
|
+
"default": "./src/animations/index.css"
|
|
128
|
+
},
|
|
129
|
+
"./animations/text-swap": {
|
|
130
|
+
"default": "./src/animations/text-swap.ts"
|
|
131
|
+
},
|
|
132
|
+
"./animations/*": {
|
|
133
|
+
"default": "./src/animations/*"
|
|
134
|
+
},
|
|
135
|
+
"./shadcn/hooks/*": {
|
|
136
|
+
"svelte": "./src/shadcn/hooks/*.ts",
|
|
137
|
+
"types": "./src/shadcn/hooks/*.ts",
|
|
138
|
+
"default": "./src/shadcn/hooks/*.ts"
|
|
139
|
+
},
|
|
140
|
+
"./shadcn/*": {
|
|
141
|
+
"svelte": "./src/shadcn/*/index.ts",
|
|
142
|
+
"types": "./src/shadcn/*/index.ts",
|
|
143
|
+
"default": "./src/shadcn/*/index.ts"
|
|
144
|
+
},
|
|
145
|
+
"./components/*": {
|
|
146
|
+
"svelte": "./src/components/*/index.ts",
|
|
147
|
+
"types": "./src/components/*/index.ts",
|
|
148
|
+
"default": "./src/components/*/index.ts"
|
|
149
|
+
},
|
|
150
|
+
"./shadcn/utilities.css": {
|
|
151
|
+
"style": "./src/shadcn/utilities.css",
|
|
152
|
+
"default": "./src/shadcn/utilities.css"
|
|
153
|
+
},
|
|
154
|
+
"./ai": {
|
|
155
|
+
"svelte": "./src/ai/index.ts",
|
|
156
|
+
"types": "./src/ai/index.ts",
|
|
157
|
+
"default": "./src/ai/index.ts"
|
|
158
|
+
},
|
|
159
|
+
"./ai/*": {
|
|
160
|
+
"svelte": "./src/ai/*/index.ts",
|
|
161
|
+
"types": "./src/ai/*/index.ts",
|
|
162
|
+
"default": "./src/ai/*/index.ts"
|
|
163
|
+
},
|
|
164
|
+
"./agents": {
|
|
165
|
+
"svelte": "./src/agents/index.ts",
|
|
166
|
+
"types": "./src/agents/index.ts",
|
|
167
|
+
"default": "./src/agents/index.ts"
|
|
168
|
+
},
|
|
169
|
+
"./agents/demo.svelte": "./src/agents/demo.svelte"
|
|
170
|
+
},
|
|
171
|
+
"dependencies": {
|
|
172
|
+
"@heyramzi/utils": "^1.8.1",
|
|
173
|
+
"@shadcn-svelte/primitives": "^0.0.1",
|
|
174
|
+
"marked": "^18.1.0",
|
|
175
|
+
"phosphor-svelte": "^3.1.0",
|
|
176
|
+
"shiki": "^4.5.0",
|
|
177
|
+
"tailwind-variants": "^3.3.1"
|
|
178
|
+
},
|
|
179
|
+
"devDependencies": {
|
|
180
|
+
"@internationalized/date": "^3.12.4",
|
|
181
|
+
"@sveltejs/vite-plugin-svelte": "^7.3.1",
|
|
182
|
+
"@types/node": "^26.6.4",
|
|
183
|
+
"bits-ui": "^2.19.5",
|
|
184
|
+
"jsdom": "^30.1.2",
|
|
185
|
+
"mode-watcher": "^1.1.0",
|
|
186
|
+
"svelte": "^5.57.2",
|
|
187
|
+
"svelte-sonner": "^1.2.1",
|
|
188
|
+
"vite-plus": "^1.0.0",
|
|
189
|
+
"vitest": "^5.0.3"
|
|
190
|
+
},
|
|
191
|
+
"peerDependencies": {
|
|
192
|
+
"@internationalized/date": "^3.12.4",
|
|
193
|
+
"@tabler/icons-svelte-runes": "^3.46.0",
|
|
194
|
+
"bits-ui": "^2.19.5",
|
|
195
|
+
"mode-watcher": "^1.1.0",
|
|
196
|
+
"svelte": "^5.57.2",
|
|
197
|
+
"svelte-sonner": "^1.2.1"
|
|
198
|
+
},
|
|
199
|
+
"peerDependenciesMeta": {
|
|
200
|
+
"mode-watcher": {
|
|
201
|
+
"optional": true
|
|
202
|
+
},
|
|
203
|
+
"svelte-sonner": {
|
|
204
|
+
"optional": true
|
|
205
|
+
},
|
|
206
|
+
"@internationalized/date": {
|
|
207
|
+
"optional": true
|
|
208
|
+
},
|
|
209
|
+
"@tabler/icons-svelte-runes": {
|
|
210
|
+
"optional": true
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
"scripts": {
|
|
214
|
+
"test": "vp test run",
|
|
215
|
+
"sync:transitions": "node scripts/sync-transitions.mjs",
|
|
216
|
+
"sync:shadcn": "node scripts/sync-shadcn.mjs",
|
|
217
|
+
"sync": "pnpm sync:transitions && pnpm sync:shadcn",
|
|
218
|
+
"sync:check": "node scripts/sync-transitions.mjs --check && node scripts/sync-shadcn.mjs --check"
|
|
219
|
+
}
|
|
6
220
|
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/* Shared plumbing for the two upstream sync scripts. `.upstream/` holds the
|
|
2
|
+
* pristine copy each one diffs against. See ../../docs/decisions.md. */
|
|
3
|
+
|
|
4
|
+
import { createHash } from "node:crypto";
|
|
5
|
+
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
6
|
+
import { dirname } from "node:path";
|
|
7
|
+
|
|
8
|
+
export const CHECK = process.argv.includes("--check");
|
|
9
|
+
|
|
10
|
+
export function sha256(text) {
|
|
11
|
+
return createHash("sha256").update(text).digest("hex").slice(0, 16);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const get = (url) => fetch(url, { headers: { "user-agent": "heyramzi-ui-sync" } });
|
|
15
|
+
|
|
16
|
+
export async function fetchText(url) {
|
|
17
|
+
const res = await get(url);
|
|
18
|
+
if (!res.ok) throw new Error(`${res.status} ${res.statusText}: ${url}`);
|
|
19
|
+
return await res.text();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** null instead of a throw, for an upstream file that may not exist. */
|
|
23
|
+
export async function fetchTextIf(url) {
|
|
24
|
+
const res = await get(url);
|
|
25
|
+
return res.ok ? await res.text() : null;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export async function fetchJson(url) {
|
|
29
|
+
return JSON.parse(await fetchText(url));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Resolve the upstream commit a sync pinned, so the lock names a point in history. */
|
|
33
|
+
export async function githubHeadSha(repo, branch = "main") {
|
|
34
|
+
const res = await fetch(`https://api.github.com/repos/${repo}/commits/${branch}`, {
|
|
35
|
+
headers: { accept: "application/vnd.github.sha", "user-agent": "heyramzi-ui-sync" },
|
|
36
|
+
});
|
|
37
|
+
return res.ok ? (await res.text()).trim() : null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* Formatting is not divergence: oxfmt reflows prettier wraps and adds
|
|
41
|
+
* its missing trailing comma, so norm strips both before comparing. */
|
|
42
|
+
const norm = (text) =>
|
|
43
|
+
text
|
|
44
|
+
.replace(/,(\s*[)\]}>])/g, "$1")
|
|
45
|
+
.replace(/\s+(\/?>)/g, "$1")
|
|
46
|
+
.replace(/\s+/g, " ")
|
|
47
|
+
.trim();
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Where our copy stands against `base`, the content the last sync vendored, and
|
|
51
|
+
* `next`, what upstream ships now. Both already adapted to this package.
|
|
52
|
+
*/
|
|
53
|
+
export function classify(local, base, next) {
|
|
54
|
+
if (local === null) return base === null ? "new" : "dropped";
|
|
55
|
+
if (norm(local) === norm(next)) return "current";
|
|
56
|
+
if (base !== null && norm(local) === norm(base)) return "stale";
|
|
57
|
+
return "diverged";
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export async function readLock(path) {
|
|
61
|
+
try {
|
|
62
|
+
return JSON.parse(await readFile(path, "utf8"));
|
|
63
|
+
} catch {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export async function writeFileDeep(path, content) {
|
|
69
|
+
await mkdir(dirname(path), { recursive: true });
|
|
70
|
+
await writeFile(path, content);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export async function removeDeep(path) {
|
|
74
|
+
await rm(path, { recursive: true, force: true });
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** Run `fn` over `items` with at most `limit` in flight. */
|
|
78
|
+
export async function mapLimit(items, limit, fn) {
|
|
79
|
+
const out = Array.from({ length: items.length });
|
|
80
|
+
let next = 0;
|
|
81
|
+
await Promise.all(
|
|
82
|
+
Array.from({ length: Math.min(limit, items.length) }, async () => {
|
|
83
|
+
while (next < items.length) {
|
|
84
|
+
const i = next++;
|
|
85
|
+
out[i] = await fn(items[i], i);
|
|
86
|
+
}
|
|
87
|
+
}),
|
|
88
|
+
);
|
|
89
|
+
return out;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const BULLET = { added: "+", changed: "~", removed: "-", unported: "!", synced: "*", port: "!" };
|
|
93
|
+
|
|
94
|
+
/** Print the buckets and exit non-zero under --check when any is non-empty. */
|
|
95
|
+
export function report({ title, buckets, unchanged, footer, trailer }) {
|
|
96
|
+
const lines = [];
|
|
97
|
+
for (const [kind, items] of Object.entries(buckets)) {
|
|
98
|
+
for (const item of items) lines.push(` ${BULLET[kind] ?? "?"} ${kind.padEnd(9)} ${item}`);
|
|
99
|
+
}
|
|
100
|
+
console.log(`\n${title}`);
|
|
101
|
+
console.log(lines.length ? lines.join("\n") : " = in sync");
|
|
102
|
+
console.log(` ${unchanged} unchanged${footer ? `, ${footer}` : ""}`);
|
|
103
|
+
|
|
104
|
+
if (!lines.length) return 0;
|
|
105
|
+
if (CHECK) {
|
|
106
|
+
console.error("\n --check: upstream moved. Run the sync without --check and port the diff.");
|
|
107
|
+
return 1;
|
|
108
|
+
}
|
|
109
|
+
console.log(
|
|
110
|
+
`\n ${trailer ?? "Vendored copies updated. Review `git diff .upstream/` and port by hand."}`,
|
|
111
|
+
);
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// Rewrites every `#src/` and `#scripts/` specifier to a relative path, in place, before publish.
|
|
2
|
+
// WHY: Vite cannot resolve a package's own `#` imports inside node_modules (ai-doc/references/publishing-packages.md).
|
|
3
|
+
// It edits the source tree, so only scripts/release.sh runs it, right before `pnpm publish`, and restores the tree after.
|
|
4
|
+
// It is not a `build` script: `pnpm -r build` would rewrite the working tree.
|
|
5
|
+
import { readdir, readFile, writeFile } from "node:fs/promises";
|
|
6
|
+
import { dirname, join, relative, resolve } from "node:path";
|
|
7
|
+
|
|
8
|
+
const root = resolve(import.meta.dirname, "..");
|
|
9
|
+
const targets = { src: join(root, "src"), scripts: join(root, "scripts") };
|
|
10
|
+
const TEXT = /\.(ts|js|mjs|svelte|css)$/;
|
|
11
|
+
const SPECIFIER = /(["'`])#(src|scripts)\/([^"'`]+)\1/g;
|
|
12
|
+
|
|
13
|
+
async function* walk(dir) {
|
|
14
|
+
for (const entry of await readdir(dir, { withFileTypes: true })) {
|
|
15
|
+
if (entry.name === "node_modules") continue;
|
|
16
|
+
const full = join(dir, entry.name);
|
|
17
|
+
if (entry.isDirectory()) yield* walk(full);
|
|
18
|
+
else if (TEXT.test(entry.name)) yield full;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
let files = 0;
|
|
23
|
+
let specifiers = 0;
|
|
24
|
+
for (const dir of Object.values(targets)) {
|
|
25
|
+
for await (const file of walk(dir)) {
|
|
26
|
+
const text = await readFile(file, "utf8");
|
|
27
|
+
const next = text.replace(SPECIFIER, (_, quote, base, rest) => {
|
|
28
|
+
specifiers++;
|
|
29
|
+
let rel = relative(dirname(file), join(targets[base], rest));
|
|
30
|
+
if (!rel.startsWith(".")) rel = `./${rel}`;
|
|
31
|
+
return `${quote}${rel}${quote}`;
|
|
32
|
+
});
|
|
33
|
+
if (next !== text) {
|
|
34
|
+
await writeFile(file, next);
|
|
35
|
+
files++;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
console.log(`relative-imports: ${specifiers} specifiers in ${files} files`);
|