@heyramzi/ui 6.1.0 → 8.0.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 (332) hide show
  1. package/COMPONENTS.md +32 -40
  2. package/README.md +10 -4
  3. package/package.json +31 -29
  4. package/scripts/sync-shadcn.mjs +29 -16
  5. package/scripts/sync-transitions.mjs +11 -11
  6. package/src/ai/ai-button/AiButton.svelte +86 -0
  7. package/src/ai/ai-button/index.ts +4 -0
  8. package/src/ai/confirmation/Confirmation.svelte +8 -8
  9. package/src/ai/confirmation/confirmation-context.svelte.ts +2 -2
  10. package/src/ai/generation-progress/GenerationProgress.svelte +354 -0
  11. package/src/ai/generation-progress/index.ts +7 -0
  12. package/src/ai/index.ts +16 -24
  13. package/src/ai/prompt-input/PromptInput.svelte +19 -1
  14. package/src/ai/prompt-input/PromptInputSubmit.svelte +9 -3
  15. package/src/ai/reasoning/Reasoning.svelte +11 -8
  16. package/src/ambient.d.ts +4 -0
  17. package/src/animations/README.md +17 -17
  18. package/src/animations/index.css +3 -14
  19. package/src/animations/upstream-coverage.test.ts +1 -1
  20. package/src/components/copy/clipboard.test.ts +206 -0
  21. package/src/components/copy/clipboard.ts +49 -0
  22. package/src/components/copy/copied.svelte.ts +39 -0
  23. package/src/components/copy/copy-button.svelte +175 -0
  24. package/src/components/copy/copy-button.test.ts +110 -0
  25. package/src/components/copy/index.ts +3 -0
  26. package/src/components/data-table/data-table.test.ts +134 -0
  27. package/src/components/data-table/data-table.ts +77 -0
  28. package/src/components/data-table/index.ts +20 -0
  29. package/src/components/data-table/infinite-scroll.svelte +69 -0
  30. package/src/components/data-table/pagination.svelte +62 -0
  31. package/src/components/data-table/row-arrow.svelte +28 -0
  32. package/src/components/data-table/row-context-menu.svelte +106 -0
  33. package/src/components/data-table/row-context-menu.test.ts +18 -0
  34. package/src/components/data-table/sortable-head.svelte +56 -0
  35. package/src/components/data-table/table-skeleton.svelte +83 -0
  36. package/src/components/hold-to-confirm/hold-to-confirm.svelte +232 -0
  37. package/src/components/hold-to-confirm/index.ts +1 -0
  38. package/src/components/icon/icon.svelte +23 -0
  39. package/src/components/icon/index.ts +1 -0
  40. package/src/components/language-flag/index.ts +1 -0
  41. package/src/components/language-flag/language-flag.svelte +60 -0
  42. package/src/components/list-page/detail-empty.svelte +50 -0
  43. package/src/components/list-page/detail-header.svelte +107 -0
  44. package/src/components/list-page/detail-panel.svelte +90 -0
  45. package/src/components/list-page/detail-row.svelte +36 -0
  46. package/src/components/list-page/detail-stack.svelte +33 -0
  47. package/src/components/list-page/empty-state.svelte +91 -0
  48. package/src/components/list-page/filter-item.svelte +49 -0
  49. package/src/components/list-page/filter-popover.svelte +88 -0
  50. package/src/components/list-page/filter-section.ts +12 -0
  51. package/src/components/list-page/grouped-list.svelte +116 -0
  52. package/src/components/list-page/index.ts +28 -0
  53. package/src/components/list-page/list-page-shell.svelte +195 -0
  54. package/src/components/list-page/list-table.ts +19 -0
  55. package/src/components/list-page/master-detail.svelte +206 -0
  56. package/src/components/list-page/master-detail.test.ts +37 -0
  57. package/src/components/list-page/notice-bar.svelte +68 -0
  58. package/src/components/list-page/prev-next.svelte +104 -0
  59. package/src/components/list-page/queue-rail.ts +25 -0
  60. package/src/components/list-page/rail-body.svelte +29 -0
  61. package/src/components/list-page/rail-empty.svelte +51 -0
  62. package/src/components/list-page/rail-head.svelte +49 -0
  63. package/src/components/list-page/rail-row.svelte +163 -0
  64. package/src/components/list-page/section-host.ts +24 -0
  65. package/src/components/list-page/section-label.svelte +39 -0
  66. package/src/components/list-page/step.test.ts +21 -0
  67. package/src/components/list-page/step.ts +10 -0
  68. package/src/components/list-page/toolbar-search.svelte +63 -0
  69. package/src/components/list-page/toolbar-trigger.ts +23 -0
  70. package/src/components/list-page/types.ts +1 -0
  71. package/src/components/locale-switch/index.ts +1 -0
  72. package/src/components/locale-switch/locale-switch.svelte +59 -0
  73. package/src/components/mark/index.ts +1 -0
  74. package/src/components/mark/mark.svelte +70 -0
  75. package/src/components/open-in/index.ts +6 -0
  76. package/src/components/open-in/open-in.svelte +106 -0
  77. package/src/components/picker/index.ts +4 -0
  78. package/src/components/picker/mark-picker.svelte +84 -0
  79. package/src/components/picker/picker.svelte +143 -0
  80. package/src/components/picker/trigger.ts +42 -0
  81. package/src/components/picker/types.ts +26 -0
  82. package/src/components/segmented/animated-tabs.svelte +175 -0
  83. package/src/components/segmented/collapse.test.ts +49 -0
  84. package/src/components/segmented/collapse.ts +39 -0
  85. package/src/components/segmented/index.ts +41 -0
  86. package/src/components/segmented/section-runs.svelte +79 -0
  87. package/src/components/segmented/segment.svelte +106 -0
  88. package/src/components/segmented/segmented-filter.svelte +125 -0
  89. package/src/components/segmented/segmented-nav.svelte +82 -0
  90. package/src/components/segmented/segmented-overflow.svelte +85 -0
  91. package/src/components/segmented/segmented-track.svelte +181 -0
  92. package/src/components/segmented/segmented.test.ts +20 -0
  93. package/src/components/segmented/segmented.ts +80 -0
  94. package/src/components/star-rating-input/index.ts +9 -0
  95. package/src/components/star-rating-input/star-rating-input.svelte +256 -0
  96. package/src/components/svg/index.ts +1 -0
  97. package/src/components/svg/svg.svelte +9 -0
  98. package/src/effects/border-beam/BorderBeam.svelte +1 -1
  99. package/src/effects/image-comparison/ImageComparison.css +42 -8
  100. package/src/effects/image-comparison/ImageComparison.svelte +138 -21
  101. package/src/effects/image-comparison/compare.test.ts +17 -0
  102. package/src/effects/image-comparison/compare.ts +5 -0
  103. package/src/effects/interactive-hover-button/InteractiveHoverButton.svelte +338 -0
  104. package/src/effects/magic-card/MagicCard.css +47 -0
  105. package/src/effects/magic-card/MagicCard.svelte +57 -0
  106. package/src/effects/marquee/Marquee.css +27 -1
  107. package/src/effects/marquee/Marquee.svelte +67 -3
  108. package/src/effects/reveal/index.ts +2 -1
  109. package/src/effects/reveal/observe.test.ts +60 -0
  110. package/src/effects/reveal/observe.ts +33 -1
  111. package/src/effects/reveal/types.ts +7 -0
  112. package/src/effects/theme-toggle/ThemeToggle.css +199 -6
  113. package/src/effects/theme-toggle/ThemeToggle.svelte +51 -26
  114. package/src/gallery.test.ts +52 -0
  115. package/src/index.ts +5 -1
  116. package/src/lib/panel.ts +7 -1
  117. package/src/lib/sliding-pill.ts +68 -0
  118. package/src/lib/theme-transition.ts +41 -13
  119. package/src/lib/tone.ts +48 -0
  120. package/src/shadcn/accordion/accordion-trigger.svelte +15 -6
  121. package/src/shadcn/alert/alert.svelte +3 -1
  122. package/src/shadcn/badge/badge.svelte +8 -7
  123. package/src/shadcn/breadcrumb/breadcrumb-ellipsis.svelte +2 -2
  124. package/src/shadcn/breadcrumb/breadcrumb-separator.svelte +2 -2
  125. package/src/shadcn/calendar/calendar-month-select.svelte +2 -2
  126. package/src/shadcn/calendar/calendar-next-button.svelte +2 -2
  127. package/src/shadcn/calendar/calendar-prev-button.svelte +2 -2
  128. package/src/shadcn/calendar/calendar-year-select.svelte +2 -2
  129. package/src/shadcn/calendar/calendar.svelte +6 -0
  130. package/src/shadcn/code-block/code-block-actions.svelte +23 -0
  131. package/src/shadcn/code-block/code-block-content.svelte +55 -0
  132. package/src/shadcn/code-block/code-block-copy-button.svelte +10 -0
  133. package/src/shadcn/code-block/code-block-footer.svelte +20 -0
  134. package/src/shadcn/code-block/code-block-header.svelte +23 -0
  135. package/src/shadcn/code-block/code-block-line.svelte +71 -0
  136. package/src/shadcn/code-block/code-block-title.svelte +23 -0
  137. package/src/shadcn/code-block/code-block.svelte +47 -0
  138. package/src/shadcn/code-block/index.ts +42 -0
  139. package/src/shadcn/command/index.ts +3 -0
  140. package/src/shadcn/field/index.ts +3 -0
  141. package/src/shadcn/field/simple-field.svelte +71 -0
  142. package/src/shadcn/field/simple-field.test.ts +47 -0
  143. package/src/shadcn/hooks/highlighter.ts +132 -0
  144. package/src/shadcn/hooks/use-highlighted-code.svelte.ts +98 -0
  145. package/src/shadcn/kbd/index.ts +10 -0
  146. package/src/shadcn/kbd/kbd-group.svelte +20 -0
  147. package/src/shadcn/kbd/kbd.svelte +23 -0
  148. package/src/shadcn/message-scroller/index.ts +28 -0
  149. package/src/shadcn/message-scroller/message-scroller-button.svelte +52 -0
  150. package/src/shadcn/message-scroller/message-scroller-content.svelte +17 -0
  151. package/src/shadcn/message-scroller/message-scroller-item.svelte +22 -0
  152. package/src/shadcn/message-scroller/message-scroller-provider.svelte +7 -0
  153. package/src/shadcn/message-scroller/message-scroller-viewport.svelte +20 -0
  154. package/src/shadcn/message-scroller/message-scroller.svelte +20 -0
  155. package/src/shadcn/radio-group/radio-group-item.svelte +3 -2
  156. package/src/shadcn/sheet/sheet-content.svelte +1 -0
  157. package/src/shadcn/sheet/sheet.css +48 -0
  158. package/src/shadcn/sonner/sonner.svelte +7 -10
  159. package/src/shadcn/tabs/tabs-list.svelte +13 -2
  160. package/src/shadcn/tabs/tabs-trigger.svelte +1 -1
  161. package/src/shadcn/toggle-group/toggle-group.svelte +10 -3
  162. package/src/shadcn/trace/index.ts +29 -0
  163. package/src/shadcn/trace/trace-collapsible-content.svelte +29 -0
  164. package/src/shadcn/trace/trace-collapsible-trigger.svelte +29 -0
  165. package/src/shadcn/trace/trace-collapsible.svelte +20 -0
  166. package/src/shadcn/trace/trace-description.svelte +20 -0
  167. package/src/shadcn/trace/trace-icon.svelte +24 -0
  168. package/src/shadcn/trace/trace-line.svelte +31 -0
  169. package/src/shadcn/trace/trace-title.svelte +20 -0
  170. package/src/shadcn/trace/trace.svelte +23 -0
  171. package/src/ai/composer/Composer.css +0 -108
  172. package/src/ai/composer/Composer.svelte +0 -111
  173. package/src/ai/composer/index.ts +0 -10
  174. package/src/ai/conversation/Conversation.svelte +0 -28
  175. package/src/ai/conversation/ConversationContent.svelte +0 -35
  176. package/src/ai/conversation/ConversationEmptyState.svelte +0 -46
  177. package/src/ai/conversation/ConversationScrollButton.svelte +0 -51
  178. package/src/ai/conversation/index.ts +0 -33
  179. package/src/ai/conversation/stick-to-bottom-context.svelte.ts +0 -131
  180. package/src/animations/accordion.css +0 -58
  181. package/src/animations/icon-swap.css +0 -43
  182. package/src/animations/notification-badge.css +0 -81
  183. package/src/animations/panel.css +0 -86
  184. package/src/animations/reasoning-stream.css +0 -49
  185. package/src/animations/skeleton-reveal.css +0 -97
  186. package/src/animations/streaming-text.css +0 -31
  187. package/src/animations/tabs-sliding.css +0 -83
  188. package/src/animations/texts-reveal.css +0 -70
  189. package/src/animations/tooltip.css +0 -72
  190. package/src/animations/view-transition-reveal.ts +0 -74
  191. package/src/charts/animated-value.css +0 -7
  192. package/src/charts/animated-value.svelte +0 -110
  193. package/src/charts/area-chart.css +0 -29
  194. package/src/charts/area-chart.svelte +0 -195
  195. package/src/charts/bar-chart.css +0 -119
  196. package/src/charts/bar-chart.svelte +0 -269
  197. package/src/charts/charts.css +0 -201
  198. package/src/charts/crosshair.svelte +0 -35
  199. package/src/charts/donut-chart.css +0 -56
  200. package/src/charts/donut-chart.svelte +0 -158
  201. package/src/charts/edge-fade.svelte +0 -43
  202. package/src/charts/edge-fade.ts +0 -16
  203. package/src/charts/figure.css +0 -100
  204. package/src/charts/figure.svelte +0 -122
  205. package/src/charts/gauge-chart.css +0 -94
  206. package/src/charts/gauge-chart.svelte +0 -303
  207. package/src/charts/hover-band.test.ts +0 -30
  208. package/src/charts/hover-band.ts +0 -21
  209. package/src/charts/hover-focus.svelte +0 -85
  210. package/src/charts/index.ts +0 -30
  211. package/src/charts/legend.css +0 -131
  212. package/src/charts/legend.svelte +0 -112
  213. package/src/charts/line-chart.css +0 -26
  214. package/src/charts/line-chart.svelte +0 -256
  215. package/src/charts/motion.ts +0 -19
  216. package/src/charts/number-chart.css +0 -168
  217. package/src/charts/number-chart.svelte +0 -177
  218. package/src/charts/primitives/chart-container.svelte +0 -57
  219. package/src/charts/primitives/chart-style.svelte +0 -36
  220. package/src/charts/primitives/chart-tooltip.svelte +0 -161
  221. package/src/charts/primitives/chart-utils.ts +0 -54
  222. package/src/charts/primitives/index.ts +0 -11
  223. package/src/charts/reveal.svelte +0 -61
  224. package/src/charts/ring-chart.css +0 -96
  225. package/src/charts/ring-chart.svelte +0 -158
  226. package/src/charts/sparkline.css +0 -45
  227. package/src/charts/sparkline.svelte +0 -140
  228. package/src/charts/stat-card.css +0 -103
  229. package/src/charts/stat-card.svelte +0 -267
  230. package/src/charts/time-series-chart.css +0 -28
  231. package/src/charts/time-series-chart.svelte +0 -179
  232. package/src/charts/trend-pill.css +0 -38
  233. package/src/charts/trend-pill.svelte +0 -48
  234. package/src/lib/hooks/is-mobile.svelte.ts +0 -11
  235. package/src/lib/utils.ts +0 -45
  236. package/src/showcase/AiSection.svelte +0 -157
  237. package/src/showcase/AnimationsSection.svelte +0 -1658
  238. package/src/showcase/ChartsSection.svelte +0 -458
  239. package/src/showcase/EffectsSection.svelte +0 -152
  240. package/src/showcase/ShadcnSection.svelte +0 -27
  241. package/src/showcase/ShowcaseImport.svelte +0 -126
  242. package/src/showcase/ShowcaseList.svelte +0 -132
  243. package/src/showcase/ShowcaseNav.svelte +0 -247
  244. package/src/showcase/ShowcaseSection.svelte +0 -112
  245. package/src/showcase/ShowcaseShell.svelte +0 -55
  246. package/src/showcase/ShowcaseStage.svelte +0 -342
  247. package/src/showcase/ShowcaseVariant.svelte +0 -109
  248. package/src/showcase/assets/image-reveal/art-1.jpg +0 -0
  249. package/src/showcase/assets/image-reveal/art-2.jpg +0 -0
  250. package/src/showcase/assets/image-reveal/art-3.jpg +0 -0
  251. package/src/showcase/check.svg +0 -1
  252. package/src/showcase/chevron-arms.svg +0 -2
  253. package/src/showcase/chevron-down.svg +0 -1
  254. package/src/showcase/copy.svg +0 -2
  255. package/src/showcase/demos/ai/confirmation.svelte +0 -59
  256. package/src/showcase/demos/ai/conversation.svelte +0 -59
  257. package/src/showcase/demos/ai/loading-state.svelte +0 -19
  258. package/src/showcase/demos/ai/prompt-input.svelte +0 -57
  259. package/src/showcase/demos/ai/reasoning.svelte +0 -19
  260. package/src/showcase/demos/ai/thinking-dots.svelte +0 -15
  261. package/src/showcase/demos/ai/voice-waveform.svelte +0 -24
  262. package/src/showcase/demos/effects/animated-beam.svelte +0 -50
  263. package/src/showcase/demos/effects/animated-group.svelte +0 -47
  264. package/src/showcase/demos/effects/border-beam-default.svelte +0 -20
  265. package/src/showcase/demos/effects/border-beam-line.svelte +0 -20
  266. package/src/showcase/demos/effects/border-beam-mono.svelte +0 -20
  267. package/src/showcase/demos/effects/border-beam-sunset.svelte +0 -20
  268. package/src/showcase/demos/effects/image-comparison.svelte +0 -25
  269. package/src/showcase/demos/effects/image-reveal.svelte +0 -49
  270. package/src/showcase/demos/effects/in-view.svelte +0 -41
  271. package/src/showcase/demos/effects/integrations-hub.svelte +0 -82
  272. package/src/showcase/demos/effects/magnetic.svelte +0 -31
  273. package/src/showcase/demos/effects/marquee.svelte +0 -33
  274. package/src/showcase/demos/effects/progressive-blur.svelte +0 -47
  275. package/src/showcase/demos/effects/spotlight.svelte +0 -40
  276. package/src/showcase/demos/effects/text-effect.svelte +0 -55
  277. package/src/showcase/demos/shadcn/accordion.svelte +0 -45
  278. package/src/showcase/demos/shadcn/alert-dialog.svelte +0 -23
  279. package/src/showcase/demos/shadcn/alert.svelte +0 -30
  280. package/src/showcase/demos/shadcn/attachment.svelte +0 -71
  281. package/src/showcase/demos/shadcn/avatar.svelte +0 -30
  282. package/src/showcase/demos/shadcn/badge.svelte +0 -26
  283. package/src/showcase/demos/shadcn/breadcrumb.svelte +0 -34
  284. package/src/showcase/demos/shadcn/bubble.svelte +0 -36
  285. package/src/showcase/demos/shadcn/button.svelte +0 -11
  286. package/src/showcase/demos/shadcn/calendar.svelte +0 -8
  287. package/src/showcase/demos/shadcn/card.svelte +0 -39
  288. package/src/showcase/demos/shadcn/checkbox.svelte +0 -39
  289. package/src/showcase/demos/shadcn/collapsible.svelte +0 -20
  290. package/src/showcase/demos/shadcn/command.svelte +0 -48
  291. package/src/showcase/demos/shadcn/context-menu.svelte +0 -54
  292. package/src/showcase/demos/shadcn/demo-harness.svelte +0 -12
  293. package/src/showcase/demos/shadcn/demos.test.ts +0 -20
  294. package/src/showcase/demos/shadcn/dialog.svelte +0 -38
  295. package/src/showcase/demos/shadcn/dropdown-menu.svelte +0 -59
  296. package/src/showcase/demos/shadcn/empty.svelte +0 -29
  297. package/src/showcase/demos/shadcn/field.svelte +0 -115
  298. package/src/showcase/demos/shadcn/hover-card.svelte +0 -32
  299. package/src/showcase/demos/shadcn/index.ts +0 -358
  300. package/src/showcase/demos/shadcn/input-otp.svelte +0 -19
  301. package/src/showcase/demos/shadcn/input.svelte +0 -5
  302. package/src/showcase/demos/shadcn/label.svelte +0 -11
  303. package/src/showcase/demos/shadcn/marker.svelte +0 -30
  304. package/src/showcase/demos/shadcn/message.svelte +0 -75
  305. package/src/showcase/demos/shadcn/popover.svelte +0 -36
  306. package/src/showcase/demos/shadcn/progress.svelte +0 -13
  307. package/src/showcase/demos/shadcn/radio-group.svelte +0 -19
  308. package/src/showcase/demos/shadcn/scroll-area.svelte +0 -18
  309. package/src/showcase/demos/shadcn/select.svelte +0 -29
  310. package/src/showcase/demos/shadcn/separator.svelte +0 -12
  311. package/src/showcase/demos/shadcn/sheet.svelte +0 -48
  312. package/src/showcase/demos/shadcn/skeleton.svelte +0 -11
  313. package/src/showcase/demos/shadcn/slider.svelte +0 -7
  314. package/src/showcase/demos/shadcn/sonner.svelte +0 -18
  315. package/src/showcase/demos/shadcn/spinner.svelte +0 -11
  316. package/src/showcase/demos/shadcn/switch.svelte +0 -9
  317. package/src/showcase/demos/shadcn/table.svelte +0 -76
  318. package/src/showcase/demos/shadcn/tabs.svelte +0 -62
  319. package/src/showcase/demos/shadcn/textarea.svelte +0 -5
  320. package/src/showcase/demos/shadcn/toggle-group.svelte +0 -18
  321. package/src/showcase/demos/shadcn/toggle.svelte +0 -14
  322. package/src/showcase/demos/shadcn/tooltip.svelte +0 -13
  323. package/src/showcase/heart.svg +0 -1
  324. package/src/showcase/index.ts +0 -38
  325. package/src/showcase/kit.test.ts +0 -72
  326. package/src/showcase/kit.ts +0 -17
  327. package/src/showcase/plus.svg +0 -1
  328. package/src/showcase/showcase-shell.css +0 -91
  329. package/src/showcase/stacked-section.css +0 -15
  330. package/src/showcase/success-check.svg +0 -1
  331. package/src/showcase/types.ts +0 -29
  332. package/src/svg-raw.d.ts +0 -7
@@ -1,458 +0,0 @@
1
- <!-- ========================== -->
2
- <!-- IMPORTS -->
3
- <!-- ========================== -->
4
- <script lang="ts">
5
- import {
6
- AreaChart,
7
- BarChart,
8
- DonutChart,
9
- GaugeChart,
10
- Legend,
11
- LineChart,
12
- NumberChart,
13
- RingChart,
14
- Sparkline,
15
- StatCard,
16
- } from "../charts/index.js";
17
- import ShowcaseStage from "./ShowcaseStage.svelte";
18
- import ShowcaseVariant from "./ShowcaseVariant.svelte";
19
-
20
- // =========================
21
- // STATE
22
- // =========================
23
- const monthly = [
24
- { month: "Jan", revenue: 4200, costs: 2800 },
25
- { month: "Feb", revenue: 5100, costs: 3100 },
26
- { month: "Mar", revenue: 4800, costs: 2950 },
27
- { month: "Apr", revenue: 6200, costs: 3400 },
28
- { month: "May", revenue: 7100, costs: 3600 },
29
- { month: "Jun", revenue: 6800, costs: 3500 },
30
- ];
31
-
32
- const distribution = [
33
- { label: "Search", users: 420, color: "var(--chart-1)" },
34
- { label: "Direct", users: 310, color: "var(--chart-2)" },
35
- { label: "Social", users: 180, color: "var(--chart-3)" },
36
- { label: "Email", users: 90, color: "var(--chart-4)" },
37
- ];
38
-
39
- const channels = [
40
- { label: "Organic", value: 4250, maxValue: 5000, color: "var(--chart-1)" },
41
- { label: "Paid", value: 3120, maxValue: 5000, color: "var(--chart-2)" },
42
- { label: "Email", value: 2100, maxValue: 5000, color: "var(--chart-3)" },
43
- { label: "Social", value: 1580, maxValue: 5000, color: "var(--chart-4)" },
44
- ];
45
- let ringHover = $state<number | null>(null);
46
-
47
- const sparkSeries = Array.from({ length: 24 }, (_, i) => ({
48
- i,
49
- v: 50 + Math.sin(i / 2) * 20 + Math.random() * 10,
50
- }));
51
-
52
- // Rising 12-month series for the stat-card hero (bklit-style).
53
- const revenueTrend = [
54
- { month: "Jan", revenue: 4700 },
55
- { month: "Feb", revenue: 5200 },
56
- { month: "Mar", revenue: 4950 },
57
- { month: "Apr", revenue: 4780 },
58
- { month: "May", revenue: 5600 },
59
- { month: "Jun", revenue: 6100 },
60
- { month: "Jul", revenue: 5900 },
61
- { month: "Aug", revenue: 6400 },
62
- { month: "Sep", revenue: 7200 },
63
- { month: "Oct", revenue: 6950 },
64
- { month: "Nov", revenue: 7600 },
65
- { month: "Dec", revenue: 8200 },
66
- ];
67
-
68
- // Smooth, gently rising session series for the line stat card (no noise so
69
- // curveBasis reads as flowing waves rather than spikes).
70
- const sessions = Array.from({ length: 16 }, (_, i) => ({
71
- i,
72
- v: 1080 + Math.sin(i / 2.1) * 110 + i * 16,
73
- }));
74
- </script>
75
-
76
- <!-- ========================== -->
77
- <!-- MARKUP -->
78
- <!-- ========================== -->
79
- <header class="group-head">
80
- <h2 class="group-title">Charts</h2>
81
- <p class="group-note">Visualisation primitives. Drop into any layout.</p>
82
- </header>
83
- <div class="grid">
84
- <ShowcaseStage
85
- title="BarChart"
86
- note="single series, vertical"
87
- importPath={"import { BarChart } from '@heyramzi/ui/charts';"}
88
- >
89
- <div class="full">
90
- <BarChart data={monthly} xKey="month" yKey="revenue" color="var(--chart-1)" />
91
- </div>
92
- </ShowcaseStage>
93
-
94
- <ShowcaseStage
95
- title="AreaChart"
96
- note="multi-series stacked, distinct colors"
97
- importPath={"import { AreaChart } from '@heyramzi/ui/charts';"}
98
- >
99
- <div class="full">
100
- <AreaChart
101
- data={monthly}
102
- xKey="month"
103
- series={[
104
- { key: "revenue", label: "Revenue", color: "var(--chart-1)" },
105
- { key: "costs", label: "Costs", color: "var(--chart-2)" },
106
- ]}
107
- stacked
108
- />
109
- </div>
110
- </ShowcaseStage>
111
-
112
- <ShowcaseStage
113
- title="LineChart"
114
- note="gradient fill, point markers, dashed in-progress tail"
115
- importPath={"import { LineChart } from '@heyramzi/ui/charts';"}
116
- >
117
- <div class="full">
118
- <LineChart
119
- data={monthly}
120
- xKey="month"
121
- yKey="revenue"
122
- color="var(--chart-1)"
123
- showMarkers
124
- dashFromIndex={4}
125
- />
126
- </div>
127
- </ShowcaseStage>
128
-
129
- <ShowcaseStage
130
- title="DonutChart"
131
- note="explicit colors per slice"
132
- importPath={"import { DonutChart } from '@heyramzi/ui/charts';"}
133
- >
134
- <div class="full">
135
- <DonutChart data={distribution} valueKey="users" labelKey="label" colorKey="color" />
136
- </div>
137
- </ShowcaseStage>
138
-
139
- <ShowcaseStage
140
- title="GaugeChart"
141
- note="notched radial meter, count-up center value, format options"
142
- importPath={"import { GaugeChart } from '@heyramzi/ui/charts';"}
143
- >
144
- <div class="gauge">
145
- <GaugeChart
146
- value={66}
147
- centerValue={428000}
148
- defaultLabel="ARR run rate"
149
- formatOptions={{ style: "currency", currency: "USD", notation: "compact" }}
150
- />
151
- </div>
152
- </ShowcaseStage>
153
-
154
- <ShowcaseStage
155
- title="RingChart + Legend"
156
- note="concentric progress rings, hover-synced legend with progress bars"
157
- importPath={"import { RingChart, Legend } from '@heyramzi/ui/charts';"}
158
- >
159
- <div class="ring-row">
160
- <div class="ring-slot">
161
- <RingChart data={channels} bind:hoveredIndex={ringHover} defaultLabel="Sessions" />
162
- </div>
163
- <Legend items={channels} bind:hoveredIndex={ringHover} showProgress showPercentage />
164
- </div>
165
- </ShowcaseStage>
166
-
167
- <ShowcaseStage
168
- title="Legend"
169
- note="standalone: progress bars, percentages, hover-dim, keyboard focus"
170
- importPath={"import { Legend } from '@heyramzi/ui/charts';"}
171
- >
172
- <div class="full">
173
- <Legend title="Traffic by channel" items={channels} showProgress showPercentage />
174
- </div>
175
- </ShowcaseStage>
176
-
177
- <ShowcaseStage
178
- title="Sparkline"
179
- note="a trendline the width of whatever holds it"
180
- importPath={"import { Sparkline } from '@heyramzi/ui/charts';"}
181
- >
182
- <ShowcaseVariant label="showLast: end-cap dot and inline value">
183
- <div class="full">
184
- <Sparkline data={sparkSeries} xKey="i" yKey="v" color="var(--chart-1)" showLast />
185
- </div>
186
- </ShowcaseVariant>
187
- <ShowcaseVariant label="bare: no chrome, for the foot of a card that links">
188
- <div class="full">
189
- <Sparkline data={sparkSeries} xKey="i" yKey="v" color="var(--chart-1)" height={48} bare />
190
- </div>
191
- </ShowcaseVariant>
192
- </ShowcaseStage>
193
-
194
- <ShowcaseStage title="Chart tokens" note="Theme charts globally with five CSS custom properties">
195
- <!-- WHY the name sits beside the colour and not on it: five arbitrary palette entries cannot all carry legible text, and a fixed near-black label read -->
196
- <!-- 2.9:1 on --chart-1. A chip plus a label on the ground is AA whatever the token is set to, which is the point of a token showcase. -->
197
- <div class="swatches">
198
- {#each [1, 2, 3, 4, 5] as n (n)}
199
- <div class="swatch">
200
- <span class="swatch-chip" style="background: var(--chart-{n})"></span>
201
- <span class="swatch-name">--chart-{n}</span>
202
- </div>
203
- {/each}
204
- </div>
205
- </ShowcaseStage>
206
- </div>
207
-
208
- <header class="group-head">
209
- <h2 class="group-title">Cards</h2>
210
- <p class="group-note">
211
- Composed KPI blocks: one figure on its own, or a Figure (label, value, trend) over a chart, on a
212
- card.
213
- </p>
214
- </header>
215
- <div class="grid">
216
- <ShowcaseStage
217
- title="NumberChart"
218
- note="a figure on its own, with or without a scale under it"
219
- importPath={"import { NumberChart } from '@heyramzi/ui/charts';"}
220
- >
221
- <ShowcaseVariant label="size=lg: count-up, direction-aware delta">
222
- <div class="full">
223
- <NumberChart
224
- label="Total cash"
225
- value={128400}
226
- delta={6.1}
227
- direction="up-good"
228
- size="lg"
229
- caption="across 4 accounts"
230
- formatOptions={{ style: "currency", currency: "USD", maximumFractionDigits: 0 }}
231
- />
232
- </div>
233
- </ShowcaseVariant>
234
- <ShowcaseVariant label="share: the scale a lone number cannot carry">
235
- <div class="full">
236
- <NumberChart
237
- label="Expenses"
238
- value={41250}
239
- delta={-3.4}
240
- direction="down-good"
241
- share={0.38}
242
- shareLabel="of revenue"
243
- color="var(--chart-4)"
244
- formatOptions={{ style: "currency", currency: "USD", maximumFractionDigits: 0 }}
245
- />
246
- </div>
247
- </ShowcaseVariant>
248
- <ShowcaseVariant label="bare: no chrome, for a figure inside a band or a panel">
249
- <div class="full">
250
- <NumberChart
251
- bare
252
- label="Net income"
253
- value={67150}
254
- delta={0.2}
255
- direction="up-good"
256
- share={0.62}
257
- shareLabel="of revenue"
258
- color="var(--chart-2)"
259
- formatOptions={{ style: "currency", currency: "USD", maximumFractionDigits: 0 }}
260
- />
261
- </div>
262
- </ShowcaseVariant>
263
- </ShowcaseStage>
264
-
265
- <ShowcaseStage
266
- title="StatCard"
267
- note="a Figure over a chart, on a card: three chart kinds"
268
- importPath={"import { StatCard } from '@heyramzi/ui/charts';"}
269
- >
270
- <ShowcaseVariant label="variant=area: edge-to-edge chart, trend pill, count-up value">
271
- <div class="full">
272
- <StatCard
273
- label="Total Revenue"
274
- value={8200}
275
- delta={12.4}
276
- caption="Avg"
277
- data={revenueTrend}
278
- xKey="month"
279
- yKey="revenue"
280
- variant="area"
281
- formatValue={(v) =>
282
- v.toLocaleString("en-US", {
283
- style: "currency",
284
- currency: "USD",
285
- maximumFractionDigits: 0,
286
- })}
287
- />
288
- </div>
289
- </ShowcaseVariant>
290
- <ShowcaseVariant label="variant=line: denser series">
291
- <div class="full">
292
- <StatCard
293
- label="Active sessions"
294
- value={1344}
295
- delta={8.2}
296
- caption="Avg"
297
- data={sessions}
298
- xKey="i"
299
- yKey="v"
300
- variant="line"
301
- color="var(--chart-3)"
302
- />
303
- </div>
304
- </ShowcaseVariant>
305
- <ShowcaseVariant label="variant=bar: negative trend, down state">
306
- <div class="full">
307
- <StatCard
308
- label="Refunds"
309
- value={3500}
310
- delta={-2.8}
311
- caption="vs last month"
312
- data={monthly}
313
- xKey="month"
314
- yKey="costs"
315
- variant="bar"
316
- color="var(--chart-4)"
317
- formatValue={(v) =>
318
- v.toLocaleString("en-US", {
319
- style: "currency",
320
- currency: "USD",
321
- maximumFractionDigits: 0,
322
- })}
323
- />
324
- </div>
325
- </ShowcaseVariant>
326
- </ShowcaseStage>
327
-
328
- <!-- The other two forms drop half the card, so they read together and not as
329
- the tail of a row of three charts. -->
330
- <ShowcaseStage
331
- title="StatCard"
332
- note="the two forms that drop half the card"
333
- importPath={"import { StatCard } from '@heyramzi/ui/charts';"}
334
- >
335
- <ShowcaseVariant label="variant=gauge: figure left, radial gauge right">
336
- <div class="full">
337
- <StatCard
338
- variant="gauge"
339
- label="Deliverables"
340
- caption="2 of 6 complete"
341
- gaugeValue={33}
342
- delta={5}
343
- color="var(--chart-1)"
344
- />
345
- </div>
346
- </ShowcaseVariant>
347
- <ShowcaseVariant label="figureOnly: the bare edge-to-edge chart, no labels">
348
- <div class="full">
349
- <StatCard
350
- figureOnly
351
- data={revenueTrend}
352
- xKey="month"
353
- yKey="revenue"
354
- variant="area"
355
- height={170}
356
- />
357
- </div>
358
- </ShowcaseVariant>
359
- </ShowcaseStage>
360
- </div>
361
-
362
- <!-- ========================== -->
363
- <!-- STYLE -->
364
- <!-- ========================== -->
365
- <style>
366
- .group-head {
367
- display: flex;
368
- flex-direction: column;
369
- gap: 0.125rem;
370
- }
371
- /* WHY: the second group ("Cards") needs breathing room from the grid above it. */
372
- .group-head:not(:first-child) {
373
- margin-top: 2.5rem;
374
- }
375
- .group-title {
376
- font-size: 1.125rem;
377
- font-weight: 600;
378
- letter-spacing: -0.01em;
379
- margin: 0 0 0.125rem;
380
- }
381
- .group-note {
382
- margin: 0 0 1rem;
383
- font-size: 0.8125rem;
384
- color: var(--muted-foreground);
385
- }
386
- /* One demo per row, the rule ShowcaseSection states for `.sc-stack`. A
387
- quarter-width column is also what squeezed the gauge card's title into
388
- its trend pill. */
389
- .grid {
390
- display: grid;
391
- grid-template-columns: minmax(0, 1fr);
392
- column-gap: 1rem;
393
- row-gap: 0;
394
- }
395
-
396
- /*
397
- * Every card in a band starts and ends on the same line. The stage's header and its ground are two tracks of this grid, so a two-line title no longer
398
- */
399
-
400
- /*
401
- * pushes its own card down past its neighbour's. Row gap is zero because the stage's own padding-block already separates the bands, and a subgrid
402
- */
403
-
404
- /*
405
- * inherits the parent's gutters into the tracks it spans.
406
- */
407
- .grid > :global(.sc-stage) {
408
- display: grid;
409
- grid-template-rows: subgrid;
410
- grid-row: span 2;
411
- }
412
-
413
- .full {
414
- width: 100%;
415
- }
416
- .gauge {
417
- display: flex;
418
- justify-content: center;
419
- width: 100%;
420
- }
421
- .gauge :global(.hr-gauge) {
422
- max-width: 240px;
423
- }
424
- .ring-row {
425
- display: flex;
426
- flex-wrap: wrap;
427
- align-items: center;
428
- gap: 1.25rem 1.5rem;
429
- }
430
- .ring-slot {
431
- flex: 0 0 auto;
432
- width: 180px;
433
- }
434
- .ring-row :global(.hr-legend) {
435
- flex: 1 1 160px;
436
- }
437
- .swatches {
438
- display: flex;
439
- flex-direction: column;
440
- gap: 0.375rem;
441
- width: 100%;
442
- }
443
- .swatch {
444
- display: flex;
445
- align-items: center;
446
- gap: 0.625rem;
447
- font-size: 0.75rem;
448
- font-family: ui-monospace, SFMono-Regular, monospace;
449
- color: var(--foreground);
450
- }
451
- .swatch-chip {
452
- width: 2.5rem;
453
- height: 1.25rem;
454
- flex: none;
455
- border-radius: 0.375rem;
456
- box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--border) 65%, transparent);
457
- }
458
- </style>
@@ -1,152 +0,0 @@
1
- <!-- ========================== -->
2
- <!-- IMPORTS -->
3
- <!-- ========================== -->
4
- <script lang="ts">
5
- import type { Component } from "svelte";
6
- import ShowcaseStage from "./ShowcaseStage.svelte";
7
- import ShowcaseVariant from "./ShowcaseVariant.svelte";
8
- import Default from "./demos/effects/border-beam-default.svelte";
9
- import Sunset from "./demos/effects/border-beam-sunset.svelte";
10
- import Line from "./demos/effects/border-beam-line.svelte";
11
- import Mono from "./demos/effects/border-beam-mono.svelte";
12
- import Beam from "./demos/effects/animated-beam.svelte";
13
- import Hub from "./demos/effects/integrations-hub.svelte";
14
- import SpotlightDemo from "./demos/effects/spotlight.svelte";
15
- import MarqueeDemo from "./demos/effects/marquee.svelte";
16
- import RevealDemo from "./demos/effects/image-reveal.svelte";
17
- import TextEffectDemo from "./demos/effects/text-effect.svelte";
18
- import AnimatedGroupDemo from "./demos/effects/animated-group.svelte";
19
- import InViewDemo from "./demos/effects/in-view.svelte";
20
- import ProgressiveBlurDemo from "./demos/effects/progressive-blur.svelte";
21
- import ImageComparisonDemo from "./demos/effects/image-comparison.svelte";
22
- import MagneticDemo from "./demos/effects/magnetic.svelte";
23
-
24
- // =========================
25
- // TYPES
26
- // =========================
27
- // A family shows its presets stacked in one stage. One component, one number,
28
- // one copy control, however many variants it ships.
29
- type Demo = {
30
- title: string;
31
- note: string;
32
- path: string;
33
- Comp?: Component;
34
- variants?: { label: string; Comp: Component }[];
35
- };
36
-
37
- // =========================
38
- // STATE
39
- // =========================
40
- const demos: Demo[] = [
41
- {
42
- title: "BorderBeam",
43
- note: "Animated gradient border, four presets",
44
- path: "import { BorderBeam } from '@heyramzi/ui';",
45
- variants: [
46
- { label: "default", Comp: Default },
47
- { label: "staticColors, duration=6, colorVariant=sunset", Comp: Sunset },
48
- { label: "size=line, colorVariant=ocean", Comp: Line },
49
- { label: "size=sm, colorVariant=mono", Comp: Mono },
50
- ],
51
- },
52
- {
53
- title: "AnimatedBeam",
54
- note: "Gradient comet along a path between two anchors",
55
- path: "import { AnimatedBeam } from '@heyramzi/ui';",
56
- variants: [
57
- { label: "two nodes", Comp: Beam },
58
- { label: "many beams fanning into one node", Comp: Hub },
59
- ],
60
- },
61
- {
62
- title: "Spotlight",
63
- note: "Soft sweeping beam over a dark surface",
64
- Comp: SpotlightDemo,
65
- path: "import { Spotlight } from '@heyramzi/ui';",
66
- },
67
- {
68
- title: "Marquee",
69
- note: "pauseOnHover, masked edges",
70
- Comp: MarqueeDemo,
71
- path: "import { Marquee } from '@heyramzi/ui';",
72
- },
73
- {
74
- title: "ImageReveal",
75
- note: "Pixel-mosaic loader dissolving into a generated image",
76
- Comp: RevealDemo,
77
- path: "import { ImageReveal } from '@heyramzi/ui';",
78
- },
79
- {
80
- title: "TextEffect",
81
- note: "per=char, preset=blur-slide, staggered",
82
- Comp: TextEffectDemo,
83
- path: "import { TextEffect } from '@heyramzi/ui';",
84
- },
85
- {
86
- title: "AnimatedGroup",
87
- note: "Staggered entrance for any children",
88
- Comp: AnimatedGroupDemo,
89
- path: "import { AnimatedGroup } from '@heyramzi/ui';",
90
- },
91
- {
92
- title: "InView",
93
- note: "Replays as the block scrolls back in",
94
- Comp: InViewDemo,
95
- path: "import { InView } from '@heyramzi/ui';",
96
- },
97
- {
98
- title: "ProgressiveBlur",
99
- note: "Masked backdrop-filter ramp, no runtime",
100
- Comp: ProgressiveBlurDemo,
101
- path: "import { ProgressiveBlur } from '@heyramzi/ui';",
102
- },
103
- {
104
- title: "ImageComparison",
105
- note: "Before / after wipe, drag or arrow keys",
106
- Comp: ImageComparisonDemo,
107
- path: "import { ImageComparison } from '@heyramzi/ui';",
108
- },
109
- {
110
- title: "Magnetic",
111
- note: "use:magnetic pulls the button toward the pointer",
112
- Comp: MagneticDemo,
113
- path: "import { magnetic } from '@heyramzi/ui';",
114
- },
115
- ];
116
- </script>
117
-
118
- <!-- ========================== -->
119
- <!-- MARKUP -->
120
- <!-- ========================== -->
121
- <div class="grid">
122
- {#each demos as d (d.title)}
123
- <ShowcaseStage title={d.title} note={d.note} importPath={d.path}>
124
- {#if d.variants}
125
- {#each d.variants as v (v.label)}
126
- <ShowcaseVariant label={v.label}>
127
- <div class="card"><v.Comp /></div>
128
- </ShowcaseVariant>
129
- {/each}
130
- {:else if d.Comp}
131
- <div class="card"><d.Comp /></div>
132
- {/if}
133
- </ShowcaseStage>
134
- {/each}
135
- </div>
136
-
137
- <!-- ========================== -->
138
- <!-- STYLE -->
139
- <!-- ========================== -->
140
- <style>
141
- /* One demo per row, the rule ShowcaseSection states for `.sc-stack`. An
142
- effect is read by watching it run, and a quarter-width stage clips it. */
143
- .grid {
144
- display: grid;
145
- grid-template-columns: minmax(0, 1fr);
146
- gap: 1rem;
147
- }
148
- .card {
149
- width: 100%;
150
- min-height: 5rem;
151
- }
152
- </style>
@@ -1,27 +0,0 @@
1
- <!-- ========================== -->
2
- <!-- IMPORTS -->
3
- <!-- ========================== -->
4
- <script lang="ts">
5
- // Every shadcn primitive this package ships, demoed by upstream's own example
6
- // and listed by the sync. Nothing here is typed by hand: see
7
- // ../../docs/decisions.md and `pnpm sync:shadcn`.
8
- import { TooltipProvider } from "../shadcn/tooltip/index.js";
9
- import ShowcaseStage from "./ShowcaseStage.svelte";
10
- import { SHADCN_DEMOS } from "./demos/shadcn/index.js";
11
- import "./stacked-section.css";
12
- </script>
13
-
14
- <!-- ========================== -->
15
- <!-- MARKUP -->
16
- <!-- ========================== -->
17
- <!-- The provider an app mounts once at its root: upstream's demos assume one is
18
- there, and `input-group` throws without it. -->
19
- <TooltipProvider>
20
- <div class="sc-stacked">
21
- {#each SHADCN_DEMOS as demo (demo.name)}
22
- <ShowcaseStage title={demo.title} note={demo.note} importPath={demo.path} tag="shadcn" wide>
23
- <demo.Comp />
24
- </ShowcaseStage>
25
- {/each}
26
- </div>
27
- </TooltipProvider>