@heyramzi/ui 0.0.0-stage → 1.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (564) hide show
  1. package/COMPONENTS.md +133 -0
  2. package/README.md +136 -2
  3. package/package.json +217 -3
  4. package/scripts/lib/sync-core.mjs +113 -0
  5. package/scripts/relative-imports.mjs +39 -0
  6. package/scripts/sf-symbol.mjs +93 -0
  7. package/scripts/sync-shadcn.mjs +354 -0
  8. package/scripts/sync-transitions.mjs +146 -0
  9. package/scripts/validate-apple-symbol-exports.mjs +45 -0
  10. package/src/agents/agent-avatar.svelte +592 -0
  11. package/src/agents/agent-cast.svelte +197 -0
  12. package/src/agents/demo.svelte +125 -0
  13. package/src/agents/helpers.ts +58 -0
  14. package/src/agents/index.ts +11 -0
  15. package/src/agents/page-state.ts +70 -0
  16. package/src/agents/types.ts +74 -0
  17. package/src/agents/vendor/LICENSE +21 -0
  18. package/src/agents/vendor/color.ts +155 -0
  19. package/src/agents/vendor/draw.ts +840 -0
  20. package/src/agents/vendor/engine.ts +845 -0
  21. package/src/agents/vendor/mesh.ts +838 -0
  22. package/src/agents/vendor/plastic.ts +4958 -0
  23. package/src/agents/vendor/presets.ts +103 -0
  24. package/src/agents/vendor/shapes.ts +41 -0
  25. package/src/agents/vendor/ticker.ts +67 -0
  26. package/src/agents/vendor/types.ts +261 -0
  27. package/src/agents/vendor/wear.ts +1699 -0
  28. package/src/ai/ai-button/AiButton.svelte +86 -0
  29. package/src/ai/ai-button/index.ts +4 -0
  30. package/src/ai/confirmation/Confirmation.svelte +54 -0
  31. package/src/ai/confirmation/ConfirmationAccepted.svelte +23 -0
  32. package/src/ai/confirmation/ConfirmationAction.svelte +53 -0
  33. package/src/ai/confirmation/ConfirmationActions.svelte +24 -0
  34. package/src/ai/confirmation/ConfirmationFailed.svelte +23 -0
  35. package/src/ai/confirmation/ConfirmationRejected.svelte +23 -0
  36. package/src/ai/confirmation/ConfirmationRequest.svelte +25 -0
  37. package/src/ai/confirmation/ConfirmationTitle.svelte +25 -0
  38. package/src/ai/confirmation/confirmation-context.svelte.ts +22 -0
  39. package/src/ai/confirmation/index.ts +50 -0
  40. package/src/ai/generation-progress/GenerationProgress.svelte +354 -0
  41. package/src/ai/generation-progress/index.ts +7 -0
  42. package/src/ai/index.ts +111 -0
  43. package/src/ai/loading-state/PixelLoader.svelte +138 -0
  44. package/src/ai/loading-state/index.ts +5 -0
  45. package/src/ai/prompt-input/PromptInput.svelte +56 -0
  46. package/src/ai/prompt-input/PromptInputBody.svelte +19 -0
  47. package/src/ai/prompt-input/PromptInputSubmit.svelte +79 -0
  48. package/src/ai/prompt-input/PromptInputTextarea.svelte +74 -0
  49. package/src/ai/prompt-input/PromptInputToolbar.svelte +19 -0
  50. package/src/ai/prompt-input/index.ts +34 -0
  51. package/src/ai/reasoning/Reasoning.svelte +50 -0
  52. package/src/ai/reasoning/ReasoningContent.svelte +27 -0
  53. package/src/ai/reasoning/ReasoningTrigger.svelte +48 -0
  54. package/src/ai/reasoning/index.ts +22 -0
  55. package/src/ai/reasoning/reasoning-context.svelte.ts +20 -0
  56. package/src/ai/response/Response.css +32 -0
  57. package/src/ai/response/Response.svelte +130 -0
  58. package/src/ai/response/index.ts +5 -0
  59. package/src/ai/suggestion/Suggestion.svelte +43 -0
  60. package/src/ai/suggestion/Suggestions.svelte +25 -0
  61. package/src/ai/suggestion/index.ts +14 -0
  62. package/src/ai/thinking-dots/ThinkingDots.svelte +42 -0
  63. package/src/ai/thinking-dots/index.ts +5 -0
  64. package/src/ai/typing-dots/TypingDots.css +39 -0
  65. package/src/ai/typing-dots/TypingDots.svelte +27 -0
  66. package/src/ai/typing-dots/index.ts +10 -0
  67. package/src/ai/voice-waveform/VoiceWaveform.css +40 -0
  68. package/src/ai/voice-waveform/VoiceWaveform.svelte +46 -0
  69. package/src/ai/voice-waveform/index.ts +5 -0
  70. package/src/ambient.d.ts +4 -0
  71. package/src/animations/README.md +84 -0
  72. package/src/animations/avatar-group-hover.css +47 -0
  73. package/src/animations/card-tilt.css +74 -0
  74. package/src/animations/digit-pop-in.css +78 -0
  75. package/src/animations/dropdown.css +121 -0
  76. package/src/animations/index.css +23 -0
  77. package/src/animations/input-clear-dissolve.css +86 -0
  78. package/src/animations/input-shake.css +114 -0
  79. package/src/animations/learn-more-hover.css +48 -0
  80. package/src/animations/like-button.css +93 -0
  81. package/src/animations/modal.css +75 -0
  82. package/src/animations/page-side-by-side.css +63 -0
  83. package/src/animations/plus-menu-morph.css +97 -0
  84. package/src/animations/resize.css +20 -0
  85. package/src/animations/shimmer-text.css +72 -0
  86. package/src/animations/spinning-counter.css +52 -0
  87. package/src/animations/success-check.css +120 -0
  88. package/src/animations/text-swap.css +40 -0
  89. package/src/animations/text-swap.ts +40 -0
  90. package/src/animations/thinking-states.css +65 -0
  91. package/src/animations/upstream-coverage.test.ts +65 -0
  92. package/src/components/copy/clipboard.test.ts +206 -0
  93. package/src/components/copy/clipboard.ts +49 -0
  94. package/src/components/copy/copied.svelte.ts +39 -0
  95. package/src/components/copy/copy-button.svelte +175 -0
  96. package/src/components/copy/copy-button.test.ts +110 -0
  97. package/src/components/copy/index.ts +3 -0
  98. package/src/components/data-table/data-table.test.ts +134 -0
  99. package/src/components/data-table/data-table.ts +77 -0
  100. package/src/components/data-table/index.ts +20 -0
  101. package/src/components/data-table/infinite-scroll.svelte +69 -0
  102. package/src/components/data-table/pagination.svelte +62 -0
  103. package/src/components/data-table/row-arrow.svelte +28 -0
  104. package/src/components/data-table/row-context-menu.svelte +106 -0
  105. package/src/components/data-table/row-context-menu.test.ts +18 -0
  106. package/src/components/data-table/sortable-head.svelte +56 -0
  107. package/src/components/data-table/table-skeleton.svelte +83 -0
  108. package/src/components/hold-to-confirm/hold-to-confirm.svelte +232 -0
  109. package/src/components/hold-to-confirm/index.ts +1 -0
  110. package/src/components/icon/icon.svelte +23 -0
  111. package/src/components/icon/index.ts +1 -0
  112. package/src/components/language-flag/index.ts +1 -0
  113. package/src/components/language-flag/language-flag.svelte +60 -0
  114. package/src/components/list-page/detail-empty.svelte +50 -0
  115. package/src/components/list-page/detail-header.svelte +107 -0
  116. package/src/components/list-page/detail-panel.svelte +90 -0
  117. package/src/components/list-page/detail-row.svelte +36 -0
  118. package/src/components/list-page/detail-stack.svelte +33 -0
  119. package/src/components/list-page/empty-state.svelte +91 -0
  120. package/src/components/list-page/filter-item.svelte +49 -0
  121. package/src/components/list-page/filter-popover.svelte +88 -0
  122. package/src/components/list-page/filter-section.ts +12 -0
  123. package/src/components/list-page/grouped-list.svelte +116 -0
  124. package/src/components/list-page/index.ts +28 -0
  125. package/src/components/list-page/list-page-shell.svelte +195 -0
  126. package/src/components/list-page/list-table.ts +19 -0
  127. package/src/components/list-page/master-detail.svelte +206 -0
  128. package/src/components/list-page/master-detail.test.ts +37 -0
  129. package/src/components/list-page/notice-bar.svelte +68 -0
  130. package/src/components/list-page/prev-next.svelte +104 -0
  131. package/src/components/list-page/queue-rail.ts +25 -0
  132. package/src/components/list-page/rail-body.svelte +29 -0
  133. package/src/components/list-page/rail-empty.svelte +51 -0
  134. package/src/components/list-page/rail-head.svelte +49 -0
  135. package/src/components/list-page/rail-row.svelte +163 -0
  136. package/src/components/list-page/section-host.ts +24 -0
  137. package/src/components/list-page/section-label.svelte +39 -0
  138. package/src/components/list-page/step.test.ts +21 -0
  139. package/src/components/list-page/step.ts +10 -0
  140. package/src/components/list-page/toolbar-search.svelte +63 -0
  141. package/src/components/list-page/toolbar-trigger.ts +23 -0
  142. package/src/components/list-page/types.ts +1 -0
  143. package/src/components/locale-switch/index.ts +1 -0
  144. package/src/components/locale-switch/locale-switch.svelte +59 -0
  145. package/src/components/mark/index.ts +1 -0
  146. package/src/components/mark/mark.svelte +70 -0
  147. package/src/components/open-in/index.ts +6 -0
  148. package/src/components/open-in/open-in.svelte +106 -0
  149. package/src/components/picker/index.ts +4 -0
  150. package/src/components/picker/mark-picker.svelte +84 -0
  151. package/src/components/picker/picker.svelte +143 -0
  152. package/src/components/picker/trigger.ts +42 -0
  153. package/src/components/picker/types.ts +26 -0
  154. package/src/components/segmented/animated-tabs.svelte +175 -0
  155. package/src/components/segmented/collapse.test.ts +49 -0
  156. package/src/components/segmented/collapse.ts +39 -0
  157. package/src/components/segmented/index.ts +41 -0
  158. package/src/components/segmented/section-runs.svelte +79 -0
  159. package/src/components/segmented/segment.svelte +106 -0
  160. package/src/components/segmented/segmented-filter.svelte +125 -0
  161. package/src/components/segmented/segmented-nav.svelte +82 -0
  162. package/src/components/segmented/segmented-overflow.svelte +85 -0
  163. package/src/components/segmented/segmented-track.svelte +181 -0
  164. package/src/components/segmented/segmented.test.ts +20 -0
  165. package/src/components/segmented/segmented.ts +80 -0
  166. package/src/components/star-rating-input/index.ts +9 -0
  167. package/src/components/star-rating-input/star-rating-input.svelte +256 -0
  168. package/src/components/svg/index.ts +1 -0
  169. package/src/components/svg/svg.svelte +9 -0
  170. package/src/design/index.css +270 -0
  171. package/src/design/polish.css +159 -0
  172. package/src/effects/animated-beam/AnimatedBeam.svelte +132 -0
  173. package/src/effects/animated-beam/diagrams/BeamSvg.svelte +91 -0
  174. package/src/effects/animated-beam/index.ts +2 -0
  175. package/src/effects/animated-beam/path-calculator.svelte.ts +70 -0
  176. package/src/effects/animated-beam/types.ts +23 -0
  177. package/src/effects/border-beam/BorderBeam.svelte +223 -0
  178. package/src/effects/border-beam/css.test.ts +46 -0
  179. package/src/effects/border-beam/css.ts +574 -0
  180. package/src/effects/border-beam/presets.ts +699 -0
  181. package/src/effects/border-beam/register-properties.test.ts +74 -0
  182. package/src/effects/border-beam/register-properties.ts +73 -0
  183. package/src/effects/border-beam/types.ts +38 -0
  184. package/src/effects/image-comparison/ImageComparison.css +100 -0
  185. package/src/effects/image-comparison/ImageComparison.svelte +209 -0
  186. package/src/effects/image-comparison/compare.test.ts +17 -0
  187. package/src/effects/image-comparison/compare.ts +5 -0
  188. package/src/effects/image-reveal/ImageReveal.css +10 -0
  189. package/src/effects/image-reveal/ImageReveal.svelte +357 -0
  190. package/src/effects/image-reveal/index.ts +2 -0
  191. package/src/effects/image-reveal/types.ts +35 -0
  192. package/src/effects/interactive-hover-button/InteractiveHoverButton.svelte +338 -0
  193. package/src/effects/magic-card/MagicCard.css +47 -0
  194. package/src/effects/magic-card/MagicCard.svelte +57 -0
  195. package/src/effects/magnetic/magnetic.ts +81 -0
  196. package/src/effects/marquee/Marquee.css +78 -0
  197. package/src/effects/marquee/Marquee.svelte +160 -0
  198. package/src/effects/progressive-blur/ProgressiveBlur.css +9 -0
  199. package/src/effects/progressive-blur/ProgressiveBlur.svelte +63 -0
  200. package/src/effects/reveal/AnimatedGroup.svelte +101 -0
  201. package/src/effects/reveal/InView.svelte +77 -0
  202. package/src/effects/reveal/TextEffect.svelte +142 -0
  203. package/src/effects/reveal/index.ts +11 -0
  204. package/src/effects/reveal/observe.test.ts +60 -0
  205. package/src/effects/reveal/observe.ts +65 -0
  206. package/src/effects/reveal/reveal.css +141 -0
  207. package/src/effects/reveal/types.ts +32 -0
  208. package/src/effects/shader-gradient/ShaderGradient.svelte +227 -0
  209. package/src/effects/shader-gradient/color.ts +44 -0
  210. package/src/effects/shader-gradient/index.ts +5 -0
  211. package/src/effects/shader-gradient/renderer.ts +456 -0
  212. package/src/effects/shader-gradient/shaders.ts +324 -0
  213. package/src/effects/shader-gradient/types.ts +68 -0
  214. package/src/effects/spotlight/Spotlight.css +14 -0
  215. package/src/effects/spotlight/Spotlight.svelte +61 -0
  216. package/src/effects/theme-toggle/ThemeToggle.css +214 -0
  217. package/src/effects/theme-toggle/ThemeToggle.svelte +126 -0
  218. package/src/gallery.test.ts +52 -0
  219. package/src/icons/TradeIcon.svelte +16 -0
  220. package/src/icons/apple-symbol-exports.ts +135 -0
  221. package/src/icons/sf-symbols.ts +527 -0
  222. package/src/icons/trades.ts +89 -0
  223. package/src/index.ts +53 -0
  224. package/src/lib/arrive.ts +26 -0
  225. package/src/lib/icon-types.ts +17 -0
  226. package/src/lib/layout.ts +8 -0
  227. package/src/lib/panel.ts +21 -0
  228. package/src/lib/sliding-pill.ts +68 -0
  229. package/src/lib/theme-transition.ts +79 -0
  230. package/src/lib/tone.ts +48 -0
  231. package/src/shadcn/accordion/accordion-content.svelte +22 -0
  232. package/src/shadcn/accordion/accordion-item.svelte +17 -0
  233. package/src/shadcn/accordion/accordion-trigger.svelte +44 -0
  234. package/src/shadcn/accordion/accordion.svelte +19 -0
  235. package/src/shadcn/accordion/index.ts +16 -0
  236. package/src/shadcn/alert/alert-description.svelte +23 -0
  237. package/src/shadcn/alert/alert-title.svelte +20 -0
  238. package/src/shadcn/alert/alert.svelte +46 -0
  239. package/src/shadcn/alert/index.ts +14 -0
  240. package/src/shadcn/alert-dialog/alert-dialog-action.svelte +18 -0
  241. package/src/shadcn/alert-dialog/alert-dialog-cancel.svelte +18 -0
  242. package/src/shadcn/alert-dialog/alert-dialog-content.svelte +29 -0
  243. package/src/shadcn/alert-dialog/alert-dialog-description.svelte +17 -0
  244. package/src/shadcn/alert-dialog/alert-dialog-footer.svelte +20 -0
  245. package/src/shadcn/alert-dialog/alert-dialog-header.svelte +20 -0
  246. package/src/shadcn/alert-dialog/alert-dialog-overlay.svelte +17 -0
  247. package/src/shadcn/alert-dialog/alert-dialog-portal.svelte +7 -0
  248. package/src/shadcn/alert-dialog/alert-dialog-title.svelte +17 -0
  249. package/src/shadcn/alert-dialog/alert-dialog-trigger.svelte +7 -0
  250. package/src/shadcn/alert-dialog/alert-dialog.svelte +7 -0
  251. package/src/shadcn/alert-dialog/index.ts +37 -0
  252. package/src/shadcn/attachment/attachment-action.svelte +23 -0
  253. package/src/shadcn/attachment/attachment-actions.svelte +23 -0
  254. package/src/shadcn/attachment/attachment-content.svelte +23 -0
  255. package/src/shadcn/attachment/attachment-description.svelte +23 -0
  256. package/src/shadcn/attachment/attachment-group.svelte +23 -0
  257. package/src/shadcn/attachment/attachment-media.svelte +44 -0
  258. package/src/shadcn/attachment/attachment-title.svelte +23 -0
  259. package/src/shadcn/attachment/attachment-trigger.svelte +29 -0
  260. package/src/shadcn/attachment/attachment.svelte +55 -0
  261. package/src/shadcn/attachment/index.ts +40 -0
  262. package/src/shadcn/avatar/avatar-badge.svelte +26 -0
  263. package/src/shadcn/avatar/avatar-fallback.svelte +20 -0
  264. package/src/shadcn/avatar/avatar-group-count.svelte +23 -0
  265. package/src/shadcn/avatar/avatar-group.svelte +23 -0
  266. package/src/shadcn/avatar/avatar-image.svelte +17 -0
  267. package/src/shadcn/avatar/avatar.svelte +26 -0
  268. package/src/shadcn/avatar/index.ts +22 -0
  269. package/src/shadcn/badge/badge.svelte +54 -0
  270. package/src/shadcn/badge/index.ts +2 -0
  271. package/src/shadcn/breadcrumb/breadcrumb-ellipsis.svelte +23 -0
  272. package/src/shadcn/breadcrumb/breadcrumb-item.svelte +20 -0
  273. package/src/shadcn/breadcrumb/breadcrumb-link.svelte +31 -0
  274. package/src/shadcn/breadcrumb/breadcrumb-list.svelte +23 -0
  275. package/src/shadcn/breadcrumb/breadcrumb-page.svelte +23 -0
  276. package/src/shadcn/breadcrumb/breadcrumb-separator.svelte +27 -0
  277. package/src/shadcn/breadcrumb/breadcrumb.svelte +21 -0
  278. package/src/shadcn/breadcrumb/index.ts +25 -0
  279. package/src/shadcn/bubble/bubble-content.svelte +31 -0
  280. package/src/shadcn/bubble/bubble-group.svelte +20 -0
  281. package/src/shadcn/bubble/bubble-reactions.svelte +52 -0
  282. package/src/shadcn/bubble/bubble.svelte +58 -0
  283. package/src/shadcn/bubble/index.ts +25 -0
  284. package/src/shadcn/button/button.svelte +121 -0
  285. package/src/shadcn/button/index.ts +17 -0
  286. package/src/shadcn/calendar/calendar-caption.svelte +76 -0
  287. package/src/shadcn/calendar/calendar-cell.svelte +19 -0
  288. package/src/shadcn/calendar/calendar-day.svelte +35 -0
  289. package/src/shadcn/calendar/calendar-grid-body.svelte +12 -0
  290. package/src/shadcn/calendar/calendar-grid-head.svelte +12 -0
  291. package/src/shadcn/calendar/calendar-grid-row.svelte +12 -0
  292. package/src/shadcn/calendar/calendar-grid.svelte +16 -0
  293. package/src/shadcn/calendar/calendar-head-cell.svelte +19 -0
  294. package/src/shadcn/calendar/calendar-header.svelte +19 -0
  295. package/src/shadcn/calendar/calendar-heading.svelte +16 -0
  296. package/src/shadcn/calendar/calendar-month-select.svelte +44 -0
  297. package/src/shadcn/calendar/calendar-month.svelte +15 -0
  298. package/src/shadcn/calendar/calendar-months.svelte +19 -0
  299. package/src/shadcn/calendar/calendar-nav.svelte +19 -0
  300. package/src/shadcn/calendar/calendar-next-button.svelte +31 -0
  301. package/src/shadcn/calendar/calendar-prev-button.svelte +31 -0
  302. package/src/shadcn/calendar/calendar-year-select.svelte +43 -0
  303. package/src/shadcn/calendar/calendar.svelte +124 -0
  304. package/src/shadcn/calendar/index.ts +40 -0
  305. package/src/shadcn/card/card-action.svelte +23 -0
  306. package/src/shadcn/card/card-content.svelte +20 -0
  307. package/src/shadcn/card/card-description.svelte +20 -0
  308. package/src/shadcn/card/card-footer.svelte +23 -0
  309. package/src/shadcn/card/card-header.svelte +23 -0
  310. package/src/shadcn/card/card-title.svelte +29 -0
  311. package/src/shadcn/card/card.svelte +25 -0
  312. package/src/shadcn/card/index.ts +25 -0
  313. package/src/shadcn/checkbox/checkbox.svelte +38 -0
  314. package/src/shadcn/checkbox/index.ts +6 -0
  315. package/src/shadcn/code-block/code-block-actions.svelte +23 -0
  316. package/src/shadcn/code-block/code-block-content.svelte +55 -0
  317. package/src/shadcn/code-block/code-block-copy-button.svelte +10 -0
  318. package/src/shadcn/code-block/code-block-footer.svelte +20 -0
  319. package/src/shadcn/code-block/code-block-header.svelte +23 -0
  320. package/src/shadcn/code-block/code-block-line.svelte +71 -0
  321. package/src/shadcn/code-block/code-block-title.svelte +23 -0
  322. package/src/shadcn/code-block/code-block.svelte +47 -0
  323. package/src/shadcn/code-block/index.ts +42 -0
  324. package/src/shadcn/collapsible/collapsible-content.svelte +7 -0
  325. package/src/shadcn/collapsible/collapsible-trigger.svelte +7 -0
  326. package/src/shadcn/collapsible/collapsible.svelte +11 -0
  327. package/src/shadcn/collapsible/index.ts +13 -0
  328. package/src/shadcn/command/command-dialog.svelte +66 -0
  329. package/src/shadcn/command/command-empty.svelte +17 -0
  330. package/src/shadcn/command/command-group.svelte +40 -0
  331. package/src/shadcn/command/command-input.svelte +64 -0
  332. package/src/shadcn/command/command-item.svelte +37 -0
  333. package/src/shadcn/command/command-link-item.svelte +20 -0
  334. package/src/shadcn/command/command-list.svelte +20 -0
  335. package/src/shadcn/command/command-loading.svelte +7 -0
  336. package/src/shadcn/command/command-separator.svelte +17 -0
  337. package/src/shadcn/command/command-shortcut.svelte +23 -0
  338. package/src/shadcn/command/command.svelte +28 -0
  339. package/src/shadcn/command/index.ts +40 -0
  340. package/src/shadcn/context-menu/context-menu-checkbox-item.svelte +41 -0
  341. package/src/shadcn/context-menu/context-menu-content.svelte +28 -0
  342. package/src/shadcn/context-menu/context-menu-group-heading.svelte +21 -0
  343. package/src/shadcn/context-menu/context-menu-group.svelte +7 -0
  344. package/src/shadcn/context-menu/context-menu-item.svelte +27 -0
  345. package/src/shadcn/context-menu/context-menu-label.svelte +27 -0
  346. package/src/shadcn/context-menu/context-menu-portal.svelte +7 -0
  347. package/src/shadcn/context-menu/context-menu-radio-group.svelte +16 -0
  348. package/src/shadcn/context-menu/context-menu-radio-item.svelte +35 -0
  349. package/src/shadcn/context-menu/context-menu-separator.svelte +17 -0
  350. package/src/shadcn/context-menu/context-menu-shortcut.svelte +23 -0
  351. package/src/shadcn/context-menu/context-menu-sub-content.svelte +25 -0
  352. package/src/shadcn/context-menu/context-menu-sub-trigger.svelte +29 -0
  353. package/src/shadcn/context-menu/context-menu-sub.svelte +7 -0
  354. package/src/shadcn/context-menu/context-menu-trigger.svelte +17 -0
  355. package/src/shadcn/context-menu/context-menu.svelte +7 -0
  356. package/src/shadcn/context-menu/index.ts +52 -0
  357. package/src/shadcn/dialog/dialog-close.svelte +11 -0
  358. package/src/shadcn/dialog/dialog-content.svelte +57 -0
  359. package/src/shadcn/dialog/dialog-description.svelte +20 -0
  360. package/src/shadcn/dialog/dialog-footer.svelte +32 -0
  361. package/src/shadcn/dialog/dialog-header.svelte +20 -0
  362. package/src/shadcn/dialog/dialog-overlay.svelte +20 -0
  363. package/src/shadcn/dialog/dialog-portal.svelte +7 -0
  364. package/src/shadcn/dialog/dialog-title.svelte +17 -0
  365. package/src/shadcn/dialog/dialog-trigger.svelte +11 -0
  366. package/src/shadcn/dialog/dialog.svelte +7 -0
  367. package/src/shadcn/dialog/index.ts +34 -0
  368. package/src/shadcn/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
  369. package/src/shadcn/dropdown-menu/dropdown-menu-checkbox-item.svelte +43 -0
  370. package/src/shadcn/dropdown-menu/dropdown-menu-content.svelte +31 -0
  371. package/src/shadcn/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
  372. package/src/shadcn/dropdown-menu/dropdown-menu-group.svelte +7 -0
  373. package/src/shadcn/dropdown-menu/dropdown-menu-item.svelte +29 -0
  374. package/src/shadcn/dropdown-menu/dropdown-menu-label.svelte +27 -0
  375. package/src/shadcn/dropdown-menu/dropdown-menu-portal.svelte +7 -0
  376. package/src/shadcn/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
  377. package/src/shadcn/dropdown-menu/dropdown-menu-radio-item.svelte +34 -0
  378. package/src/shadcn/dropdown-menu/dropdown-menu-separator.svelte +17 -0
  379. package/src/shadcn/dropdown-menu/dropdown-menu-shortcut.svelte +23 -0
  380. package/src/shadcn/dropdown-menu/dropdown-menu-sub-content.svelte +20 -0
  381. package/src/shadcn/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
  382. package/src/shadcn/dropdown-menu/dropdown-menu-sub.svelte +7 -0
  383. package/src/shadcn/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
  384. package/src/shadcn/dropdown-menu/dropdown-menu.svelte +7 -0
  385. package/src/shadcn/dropdown-menu/index.ts +56 -0
  386. package/src/shadcn/dropdown-menu/menu-item.ts +43 -0
  387. package/src/shadcn/empty/empty-content.svelte +23 -0
  388. package/src/shadcn/empty/empty-description.svelte +23 -0
  389. package/src/shadcn/empty/empty-header.svelte +20 -0
  390. package/src/shadcn/empty/empty-media.svelte +41 -0
  391. package/src/shadcn/empty/empty-title.svelte +20 -0
  392. package/src/shadcn/empty/empty.svelte +23 -0
  393. package/src/shadcn/empty/index.ts +22 -0
  394. package/src/shadcn/field/field-content.svelte +20 -0
  395. package/src/shadcn/field/field-description.svelte +25 -0
  396. package/src/shadcn/field/field-error.svelte +58 -0
  397. package/src/shadcn/field/field-group.svelte +23 -0
  398. package/src/shadcn/field/field-label.svelte +26 -0
  399. package/src/shadcn/field/field-legend.svelte +29 -0
  400. package/src/shadcn/field/field-separator.svelte +35 -0
  401. package/src/shadcn/field/field-set.svelte +24 -0
  402. package/src/shadcn/field/field-title.svelte +23 -0
  403. package/src/shadcn/field/field.svelte +53 -0
  404. package/src/shadcn/field/index.ts +36 -0
  405. package/src/shadcn/field/simple-field.svelte +71 -0
  406. package/src/shadcn/field/simple-field.test.ts +47 -0
  407. package/src/shadcn/hooks/highlighter.ts +132 -0
  408. package/src/shadcn/hooks/is-mobile.svelte.ts +9 -0
  409. package/src/shadcn/hooks/use-highlighted-code.svelte.ts +98 -0
  410. package/src/shadcn/hover-card/hover-card-content.svelte +31 -0
  411. package/src/shadcn/hover-card/hover-card-portal.svelte +7 -0
  412. package/src/shadcn/hover-card/hover-card-trigger.svelte +7 -0
  413. package/src/shadcn/hover-card/hover-card.svelte +7 -0
  414. package/src/shadcn/hover-card/index.ts +15 -0
  415. package/src/shadcn/input/index.ts +9 -0
  416. package/src/shadcn/input/input.svelte +48 -0
  417. package/src/shadcn/input/secret-input.svelte +75 -0
  418. package/src/shadcn/input-otp/index.ts +15 -0
  419. package/src/shadcn/input-otp/input-otp-group.svelte +20 -0
  420. package/src/shadcn/input-otp/input-otp-separator.svelte +25 -0
  421. package/src/shadcn/input-otp/input-otp-slot.svelte +26 -0
  422. package/src/shadcn/input-otp/input-otp.svelte +22 -0
  423. package/src/shadcn/kbd/index.ts +10 -0
  424. package/src/shadcn/kbd/kbd-group.svelte +20 -0
  425. package/src/shadcn/kbd/kbd.svelte +23 -0
  426. package/src/shadcn/label/index.ts +7 -0
  427. package/src/shadcn/label/label.svelte +20 -0
  428. package/src/shadcn/marker/index.ts +15 -0
  429. package/src/shadcn/marker/marker-content.svelte +23 -0
  430. package/src/shadcn/marker/marker-icon.svelte +21 -0
  431. package/src/shadcn/marker/marker.svelte +52 -0
  432. package/src/shadcn/message/index.ts +22 -0
  433. package/src/shadcn/message/message-avatar.svelte +23 -0
  434. package/src/shadcn/message/message-content.svelte +23 -0
  435. package/src/shadcn/message/message-footer.svelte +23 -0
  436. package/src/shadcn/message/message-group.svelte +20 -0
  437. package/src/shadcn/message/message-header.svelte +23 -0
  438. package/src/shadcn/message/message.svelte +27 -0
  439. package/src/shadcn/message-scroller/index.ts +28 -0
  440. package/src/shadcn/message-scroller/message-scroller-button.svelte +52 -0
  441. package/src/shadcn/message-scroller/message-scroller-content.svelte +17 -0
  442. package/src/shadcn/message-scroller/message-scroller-item.svelte +22 -0
  443. package/src/shadcn/message-scroller/message-scroller-provider.svelte +7 -0
  444. package/src/shadcn/message-scroller/message-scroller-viewport.svelte +20 -0
  445. package/src/shadcn/message-scroller/message-scroller.svelte +20 -0
  446. package/src/shadcn/popover/index.ts +28 -0
  447. package/src/shadcn/popover/popover-close.svelte +7 -0
  448. package/src/shadcn/popover/popover-content.svelte +38 -0
  449. package/src/shadcn/popover/popover-description.svelte +20 -0
  450. package/src/shadcn/popover/popover-header.svelte +20 -0
  451. package/src/shadcn/popover/popover-portal.svelte +7 -0
  452. package/src/shadcn/popover/popover-title.svelte +15 -0
  453. package/src/shadcn/popover/popover-trigger.svelte +17 -0
  454. package/src/shadcn/popover/popover.svelte +7 -0
  455. package/src/shadcn/progress/index.ts +7 -0
  456. package/src/shadcn/progress/progress.svelte +30 -0
  457. package/src/shadcn/radio-group/index.ts +10 -0
  458. package/src/shadcn/radio-group/radio-group-item.svelte +32 -0
  459. package/src/shadcn/radio-group/radio-group.svelte +19 -0
  460. package/src/shadcn/scroll-area/index.ts +10 -0
  461. package/src/shadcn/scroll-area/scroll-area-scrollbar.svelte +30 -0
  462. package/src/shadcn/scroll-area/scroll-area.svelte +43 -0
  463. package/src/shadcn/select/index.ts +37 -0
  464. package/src/shadcn/select/select-content.svelte +45 -0
  465. package/src/shadcn/select/select-group-heading.svelte +21 -0
  466. package/src/shadcn/select/select-group.svelte +17 -0
  467. package/src/shadcn/select/select-item.svelte +38 -0
  468. package/src/shadcn/select/select-label.svelte +20 -0
  469. package/src/shadcn/select/select-portal.svelte +7 -0
  470. package/src/shadcn/select/select-scroll-down-button.svelte +23 -0
  471. package/src/shadcn/select/select-scroll-up-button.svelte +23 -0
  472. package/src/shadcn/select/select-separator.svelte +18 -0
  473. package/src/shadcn/select/select-trigger.svelte +33 -0
  474. package/src/shadcn/select/select.svelte +11 -0
  475. package/src/shadcn/separator/index.ts +7 -0
  476. package/src/shadcn/separator/separator.svelte +23 -0
  477. package/src/shadcn/sheet/index.ts +34 -0
  478. package/src/shadcn/sheet/sheet-close.svelte +7 -0
  479. package/src/shadcn/sheet/sheet-content.svelte +73 -0
  480. package/src/shadcn/sheet/sheet-description.svelte +17 -0
  481. package/src/shadcn/sheet/sheet-footer.svelte +20 -0
  482. package/src/shadcn/sheet/sheet-header.svelte +20 -0
  483. package/src/shadcn/sheet/sheet-overlay.svelte +20 -0
  484. package/src/shadcn/sheet/sheet-portal.svelte +7 -0
  485. package/src/shadcn/sheet/sheet-title.svelte +17 -0
  486. package/src/shadcn/sheet/sheet-trigger.svelte +7 -0
  487. package/src/shadcn/sheet/sheet.css +48 -0
  488. package/src/shadcn/sheet/sheet.svelte +7 -0
  489. package/src/shadcn/sidebar/constants.ts +6 -0
  490. package/src/shadcn/sidebar/context.svelte.ts +81 -0
  491. package/src/shadcn/sidebar/index.ts +75 -0
  492. package/src/shadcn/sidebar/sidebar-content.svelte +24 -0
  493. package/src/shadcn/sidebar/sidebar-footer.svelte +21 -0
  494. package/src/shadcn/sidebar/sidebar-group-action.svelte +33 -0
  495. package/src/shadcn/sidebar/sidebar-group-content.svelte +21 -0
  496. package/src/shadcn/sidebar/sidebar-group-label.svelte +33 -0
  497. package/src/shadcn/sidebar/sidebar-group.svelte +21 -0
  498. package/src/shadcn/sidebar/sidebar-header.svelte +21 -0
  499. package/src/shadcn/sidebar/sidebar-input.svelte +21 -0
  500. package/src/shadcn/sidebar/sidebar-inset.svelte +23 -0
  501. package/src/shadcn/sidebar/sidebar-menu-action.svelte +37 -0
  502. package/src/shadcn/sidebar/sidebar-menu-badge.svelte +24 -0
  503. package/src/shadcn/sidebar/sidebar-menu-button.svelte +103 -0
  504. package/src/shadcn/sidebar/sidebar-menu-item.svelte +21 -0
  505. package/src/shadcn/sidebar/sidebar-menu-skeleton.svelte +36 -0
  506. package/src/shadcn/sidebar/sidebar-menu-sub-button.svelte +39 -0
  507. package/src/shadcn/sidebar/sidebar-menu-sub-item.svelte +21 -0
  508. package/src/shadcn/sidebar/sidebar-menu-sub.svelte +24 -0
  509. package/src/shadcn/sidebar/sidebar-menu.svelte +21 -0
  510. package/src/shadcn/sidebar/sidebar-provider.svelte +62 -0
  511. package/src/shadcn/sidebar/sidebar-rail.svelte +36 -0
  512. package/src/shadcn/sidebar/sidebar-separator.svelte +19 -0
  513. package/src/shadcn/sidebar/sidebar-trigger.svelte +37 -0
  514. package/src/shadcn/sidebar/sidebar.svelte +109 -0
  515. package/src/shadcn/skeleton/index.ts +7 -0
  516. package/src/shadcn/skeleton/skeleton.svelte +17 -0
  517. package/src/shadcn/slider/index.ts +7 -0
  518. package/src/shadcn/slider/slider.svelte +52 -0
  519. package/src/shadcn/sonner/index.ts +1 -0
  520. package/src/shadcn/sonner/sonner.svelte +31 -0
  521. package/src/shadcn/spinner/index.ts +1 -0
  522. package/src/shadcn/spinner/spinner.svelte +26 -0
  523. package/src/shadcn/switch/index.ts +7 -0
  524. package/src/shadcn/switch/switch.svelte +31 -0
  525. package/src/shadcn/table/index.ts +28 -0
  526. package/src/shadcn/table/table-body.svelte +20 -0
  527. package/src/shadcn/table/table-caption.svelte +20 -0
  528. package/src/shadcn/table/table-cell.svelte +20 -0
  529. package/src/shadcn/table/table-footer.svelte +20 -0
  530. package/src/shadcn/table/table-head.svelte +23 -0
  531. package/src/shadcn/table/table-header.svelte +20 -0
  532. package/src/shadcn/table/table-row.svelte +23 -0
  533. package/src/shadcn/table/table.svelte +25 -0
  534. package/src/shadcn/tabs/index.ts +16 -0
  535. package/src/shadcn/tabs/tabs-content.svelte +17 -0
  536. package/src/shadcn/tabs/tabs-list.svelte +36 -0
  537. package/src/shadcn/tabs/tabs-trigger.svelte +20 -0
  538. package/src/shadcn/tabs/tabs.svelte +19 -0
  539. package/src/shadcn/textarea/index.ts +7 -0
  540. package/src/shadcn/textarea/textarea.svelte +23 -0
  541. package/src/shadcn/toggle/index.ts +13 -0
  542. package/src/shadcn/toggle/toggle.svelte +53 -0
  543. package/src/shadcn/toggle-group/index.ts +10 -0
  544. package/src/shadcn/toggle-group/toggle-group-item.svelte +35 -0
  545. package/src/shadcn/toggle-group/toggle-group.svelte +66 -0
  546. package/src/shadcn/tooltip/context.ts +16 -0
  547. package/src/shadcn/tooltip/index.ts +19 -0
  548. package/src/shadcn/tooltip/tooltip-content.svelte +38 -0
  549. package/src/shadcn/tooltip/tooltip-portal.svelte +7 -0
  550. package/src/shadcn/tooltip/tooltip-provider.svelte +16 -0
  551. package/src/shadcn/tooltip/tooltip-trigger.svelte +7 -0
  552. package/src/shadcn/tooltip/tooltip.svelte +19 -0
  553. package/src/shadcn/trace/index.ts +29 -0
  554. package/src/shadcn/trace/trace-collapsible-content.svelte +29 -0
  555. package/src/shadcn/trace/trace-collapsible-trigger.svelte +29 -0
  556. package/src/shadcn/trace/trace-collapsible.svelte +20 -0
  557. package/src/shadcn/trace/trace-description.svelte +20 -0
  558. package/src/shadcn/trace/trace-icon.svelte +24 -0
  559. package/src/shadcn/trace/trace-line.svelte +31 -0
  560. package/src/shadcn/trace/trace-title.svelte +20 -0
  561. package/src/shadcn/trace/trace.svelte +23 -0
  562. package/src/shadcn/utilities.css +549 -0
  563. package/src/test-setup.ts +34 -0
  564. 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
- # Temporary Holding Version
1
+ # @heyramzi/ui
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
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": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "1.53.0",
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`);