@heyramzi/ui 2.8.0 → 2.10.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 (426) hide show
  1. package/COMPONENTS.md +1 -1
  2. package/README.md +1 -1
  3. package/dist/agents/helpers.js +52 -0
  4. package/dist/agents/index.js +3 -0
  5. package/dist/agents/page-state.js +65 -0
  6. package/dist/agents/types.js +1 -0
  7. package/dist/agents/vendor/color.js +149 -0
  8. package/dist/agents/vendor/draw.js +548 -0
  9. package/dist/agents/vendor/engine.js +632 -0
  10. package/dist/agents/vendor/mesh.js +727 -0
  11. package/dist/agents/vendor/plastic.js +3273 -0
  12. package/dist/agents/vendor/presets.js +171 -0
  13. package/dist/agents/vendor/shapes.js +24 -0
  14. package/dist/agents/vendor/ticker.js +56 -0
  15. package/dist/agents/vendor/types.js +0 -0
  16. package/dist/agents/vendor/wear.js +1525 -0
  17. package/dist/ai/ai-button/index.js +2 -0
  18. package/dist/ai/confirmation/confirmation-context.svelte.js +12 -0
  19. package/dist/ai/confirmation/index.js +9 -0
  20. package/dist/ai/generation-progress/index.js +2 -0
  21. package/dist/ai/index.js +11 -0
  22. package/dist/ai/loading-state/index.js +3 -0
  23. package/dist/ai/prompt-input/index.js +6 -0
  24. package/dist/ai/reasoning/index.js +4 -0
  25. package/dist/ai/reasoning/reasoning-context.svelte.js +12 -0
  26. package/dist/ai/response/index.js +3 -0
  27. package/dist/ai/suggestion/index.js +3 -0
  28. package/dist/ai/thinking-dots/index.js +3 -0
  29. package/dist/ai/typing-dots/index.js +2 -0
  30. package/dist/ai/voice-waveform/index.js +3 -0
  31. package/dist/animations/text-swap.js +30 -0
  32. package/dist/brand/index.js +65 -0
  33. package/dist/canvas/card/resize.js +10 -0
  34. package/dist/canvas/edges/edge-path.js +284 -0
  35. package/dist/canvas/editor/context-menu.js +42 -0
  36. package/dist/canvas/editor/dispatch.svelte.js +157 -0
  37. package/dist/canvas/editor/editor-context.js +8 -0
  38. package/dist/canvas/editor/editor-mode.js +0 -0
  39. package/dist/canvas/editor/frame.js +87 -0
  40. package/dist/canvas/editor/hand-context.js +8 -0
  41. package/dist/canvas/editor/history-core.js +221 -0
  42. package/dist/canvas/editor/keymap.js +193 -0
  43. package/dist/canvas/editor/layout-actions.js +170 -0
  44. package/dist/canvas/editor/lock.js +65 -0
  45. package/dist/canvas/editor/rebase.js +279 -0
  46. package/dist/canvas/editor/style.js +174 -0
  47. package/dist/canvas/editor/text-field-context.js +8 -0
  48. package/dist/canvas/editor/z-order.js +82 -0
  49. package/dist/canvas/headless/alignment.js +20 -0
  50. package/dist/canvas/headless/break-apart-find.js +324 -0
  51. package/dist/canvas/headless/break-apart-pieces.js +74 -0
  52. package/dist/canvas/headless/break-apart-plan.js +378 -0
  53. package/dist/canvas/headless/break-apart-style.js +93 -0
  54. package/dist/canvas/headless/break-apart.js +206 -0
  55. package/dist/canvas/headless/canvas-cleanup.js +70 -0
  56. package/dist/canvas/headless/edge-anchors.js +134 -0
  57. package/dist/canvas/headless/edge-memo.js +28 -0
  58. package/dist/canvas/headless/edge-serialization.js +31 -0
  59. package/dist/canvas/headless/figure-geometry.js +331 -0
  60. package/dist/canvas/headless/fit-viewport.js +82 -0
  61. package/dist/canvas/headless/grid.js +96 -0
  62. package/dist/canvas/headless/icon-node.js +45 -0
  63. package/dist/canvas/headless/index.js +1 -0
  64. package/dist/canvas/headless/linkify.js +25 -0
  65. package/dist/canvas/headless/pen-marks.js +115 -0
  66. package/dist/canvas/headless/sketch.js +250 -0
  67. package/dist/canvas/headless/snap-guides.js +100 -0
  68. package/dist/canvas/headless/svg-figure.js +137 -0
  69. package/dist/canvas/headless/table-layout.js +161 -0
  70. package/dist/canvas/index.js +25 -0
  71. package/dist/canvas/lod/lod-mode.svelte.js +22 -0
  72. package/dist/canvas/lod/render-all.svelte.js +45 -0
  73. package/dist/canvas/ops/arrange.js +83 -0
  74. package/dist/canvas/ops/ops.js +318 -0
  75. package/dist/canvas/pen/colors.js +41 -0
  76. package/dist/canvas/pen/eraser.js +35 -0
  77. package/dist/canvas/pen/geometry.js +143 -0
  78. package/dist/canvas/pen/index.js +9 -0
  79. package/dist/canvas/pen/ops.js +15 -0
  80. package/dist/canvas/pen/pen-session.js +171 -0
  81. package/dist/canvas/pen/plugin.js +129 -0
  82. package/dist/canvas/pen/shapes.js +80 -0
  83. package/dist/canvas/pen/stroke-path.js +37 -0
  84. package/dist/canvas/pen/types.js +30 -0
  85. package/dist/canvas/pen/ui.js +20 -0
  86. package/dist/canvas/plugin.js +51 -0
  87. package/dist/canvas/screen/glyphs.js +24 -0
  88. package/dist/canvas/screen/labels.js +24 -0
  89. package/dist/canvas/screen/parts.js +140 -0
  90. package/dist/canvas/screen/plugin.js +71 -0
  91. package/dist/canvas/screen/types.js +44 -0
  92. package/dist/canvas/screen/ui.js +13 -0
  93. package/dist/canvas/test-utils.js +18 -0
  94. package/dist/canvas/types.js +0 -0
  95. package/dist/canvas/ui/forward-wheel.js +27 -0
  96. package/dist/canvas/ui/icons.js +133 -0
  97. package/dist/canvas/ui/place-panel.js +57 -0
  98. package/dist/canvas/ui/shortcut-tip.js +18 -0
  99. package/dist/canvas/ui/tools.js +411 -0
  100. package/dist/charts/dashboard/chart.js +1 -0
  101. package/dist/charts/dashboard/data-table.js +7 -0
  102. package/dist/charts/dashboard/index.js +13 -0
  103. package/dist/charts/dashboard/windows.js +5 -0
  104. package/dist/charts/edge-fade.js +7 -0
  105. package/dist/charts/hover-band.js +13 -0
  106. package/dist/charts/index.js +19 -0
  107. package/dist/charts/motion.js +15 -0
  108. package/dist/charts/primitives/chart-utils.js +22 -0
  109. package/dist/charts/primitives/index.js +4 -0
  110. package/dist/components/copy/clipboard.js +38 -0
  111. package/dist/components/copy/copied.svelte.js +26 -0
  112. package/dist/components/copy/index.js +3 -0
  113. package/dist/components/data-table/data-table.js +55 -0
  114. package/dist/components/data-table/index.js +7 -0
  115. package/dist/components/docs/index.js +3 -0
  116. package/dist/components/docs/scroll-spy.svelte.js +71 -0
  117. package/dist/components/field-row/index.js +1 -0
  118. package/dist/components/hold-to-confirm/index.js +1 -0
  119. package/dist/components/icon/index.js +1 -0
  120. package/dist/components/language-flag/index.js +1 -0
  121. package/dist/components/list-page/filter-section.js +4 -0
  122. package/dist/components/list-page/index.js +25 -0
  123. package/dist/components/list-page/list-table.js +5 -0
  124. package/dist/components/list-page/queue-rail.js +3 -0
  125. package/dist/components/list-page/section-host.js +8 -0
  126. package/dist/components/list-page/step.js +5 -0
  127. package/dist/components/list-page/types.js +0 -0
  128. package/dist/components/locale-switch/index.js +1 -0
  129. package/dist/components/mark/index.js +1 -0
  130. package/dist/components/open-in/index.js +1 -0
  131. package/dist/components/picker/index.js +3 -0
  132. package/dist/components/picker/trigger.js +33 -0
  133. package/dist/components/picker/types.js +0 -0
  134. package/dist/components/section-card/index.js +1 -0
  135. package/dist/components/section-header/index.js +2 -0
  136. package/dist/components/segmented/collapse.js +32 -0
  137. package/dist/components/segmented/index.js +8 -0
  138. package/dist/components/segmented/segmented.js +50 -0
  139. package/dist/components/star-rating-input/index.js +2 -0
  140. package/dist/components/svg/index.js +1 -0
  141. package/dist/components/table-view/index.js +1 -0
  142. package/dist/components/table-view/types.js +0 -0
  143. package/dist/components/tags-input/index.js +2 -0
  144. package/dist/components/tags-input/tags.js +90 -0
  145. package/dist/components/theme/index.js +3 -0
  146. package/dist/components/toolbar/index.js +3 -0
  147. package/dist/components/toolbar/toolbar-trigger.js +4 -0
  148. package/dist/editor/anchors.js +17 -0
  149. package/dist/editor/block-id.js +62 -0
  150. package/dist/editor/block-ops.js +105 -0
  151. package/dist/editor/doc-blocks.js +181 -0
  152. package/dist/editor/extensions.js +200 -0
  153. package/dist/editor/index.js +4 -0
  154. package/dist/editor/markdown-test-helpers.js +6 -0
  155. package/dist/editor/markdown.js +486 -0
  156. package/dist/editor/serializer.js +268 -0
  157. package/dist/editor/slash-items.js +104 -0
  158. package/dist/editor/youtube-url.js +27 -0
  159. package/dist/effects/animated-beam/index.js +1 -0
  160. package/dist/effects/animated-beam/path-calculator.svelte.js +42 -0
  161. package/dist/effects/animated-beam/types.js +0 -0
  162. package/dist/effects/border-beam/css.js +420 -0
  163. package/dist/effects/border-beam/presets.js +1792 -0
  164. package/dist/effects/border-beam/register-properties.js +39 -0
  165. package/dist/effects/border-beam/types.js +0 -0
  166. package/dist/effects/image-comparison/compare.js +4 -0
  167. package/dist/effects/image-reveal/index.js +1 -0
  168. package/dist/effects/image-reveal/types.js +0 -0
  169. package/dist/effects/magnetic/magnetic.js +54 -0
  170. package/dist/effects/reveal/index.js +4 -0
  171. package/dist/effects/reveal/observe.js +43 -0
  172. package/dist/effects/reveal/types.js +0 -0
  173. package/dist/effects/shader-gradient/color.js +34 -0
  174. package/dist/effects/shader-gradient/index.js +1 -0
  175. package/dist/effects/shader-gradient/renderer.js +320 -0
  176. package/dist/effects/shader-gradient/shaders.js +280 -0
  177. package/dist/effects/shader-gradient/types.js +0 -0
  178. package/dist/icons/apple-symbol-exports.js +126 -0
  179. package/dist/icons/sf-symbols.js +465 -0
  180. package/dist/icons/trades.js +34 -0
  181. package/dist/inbox/index.js +4 -0
  182. package/dist/inbox/logic.js +156 -0
  183. package/dist/inbox/types.js +46 -0
  184. package/dist/index.js +18 -0
  185. package/dist/lib/arrive.js +13 -0
  186. package/dist/lib/icon-types.js +0 -0
  187. package/dist/lib/initials.js +17 -0
  188. package/dist/lib/layout.js +1 -0
  189. package/dist/lib/panel.js +3 -0
  190. package/dist/lib/result.js +26 -0
  191. package/dist/lib/sliding-pill.js +45 -0
  192. package/dist/lib/theme-transition.js +53 -0
  193. package/dist/lib/tone.js +32 -0
  194. package/dist/lib/utils.js +5 -0
  195. package/dist/onboarding/define-tours.js +28 -0
  196. package/dist/onboarding/index.js +4 -0
  197. package/dist/onboarding/onboarding.svelte.js +15 -0
  198. package/dist/onboarding/pick.js +16 -0
  199. package/dist/onboarding/stores.js +50 -0
  200. package/dist/onboarding/types.js +1 -0
  201. package/dist/onboarding/wait.js +25 -0
  202. package/dist/panel/index.js +1 -0
  203. package/dist/panel/side-panel-types.js +0 -0
  204. package/dist/record/demo-data.js +512 -0
  205. package/dist/record/fields.js +148 -0
  206. package/dist/record/format.js +97 -0
  207. package/dist/record/gutter.js +1 -0
  208. package/dist/record/index.js +15 -0
  209. package/dist/record/kinds.js +110 -0
  210. package/dist/record/logic.js +255 -0
  211. package/dist/record/types.js +52 -0
  212. package/dist/shadcn/accordion/index.js +5 -0
  213. package/dist/shadcn/alert/index.js +5 -0
  214. package/dist/shadcn/alert-dialog/index.js +12 -0
  215. package/dist/shadcn/attachment/index.js +10 -0
  216. package/dist/shadcn/avatar/index.js +7 -0
  217. package/dist/shadcn/badge/index.js +2 -0
  218. package/dist/shadcn/breadcrumb/index.js +8 -0
  219. package/dist/shadcn/bubble/index.js +5 -0
  220. package/dist/shadcn/button/index.js +2 -0
  221. package/dist/shadcn/calendar/index.js +19 -0
  222. package/dist/shadcn/card/index.js +8 -0
  223. package/dist/shadcn/checkbox/index.js +2 -0
  224. package/dist/shadcn/code-block/index.js +9 -0
  225. package/dist/shadcn/collapsible/index.js +4 -0
  226. package/dist/shadcn/command/index.js +13 -0
  227. package/dist/shadcn/context-menu/index.js +17 -0
  228. package/dist/shadcn/dialog/index.js +11 -0
  229. package/dist/shadcn/dropdown-menu/index.js +19 -0
  230. package/dist/shadcn/dropdown-menu/menu-item.js +23 -0
  231. package/dist/shadcn/empty/index.js +7 -0
  232. package/dist/shadcn/field/index.js +12 -0
  233. package/dist/shadcn/hooks/highlighter.js +92 -0
  234. package/dist/shadcn/hooks/is-mobile.svelte.js +7 -0
  235. package/dist/shadcn/hooks/use-highlighted-code.svelte.js +65 -0
  236. package/dist/shadcn/hover-card/index.js +5 -0
  237. package/dist/shadcn/input/index.js +3 -0
  238. package/dist/shadcn/input-otp/index.js +5 -0
  239. package/dist/shadcn/kbd/index.js +3 -0
  240. package/dist/shadcn/label/index.js +2 -0
  241. package/dist/shadcn/marker/index.js +4 -0
  242. package/dist/shadcn/message/index.js +7 -0
  243. package/dist/shadcn/message-scroller/index.js +8 -0
  244. package/dist/shadcn/popover/index.js +9 -0
  245. package/dist/shadcn/progress/index.js +2 -0
  246. package/dist/shadcn/progress/tone.js +11 -0
  247. package/dist/shadcn/radio-group/index.js +3 -0
  248. package/dist/shadcn/scroll-area/index.js +3 -0
  249. package/dist/shadcn/select/index.js +12 -0
  250. package/dist/shadcn/separator/index.js +2 -0
  251. package/dist/shadcn/sheet/index.js +11 -0
  252. package/dist/shadcn/sidebar/constants.js +6 -0
  253. package/dist/shadcn/sidebar/context.svelte.js +38 -0
  254. package/dist/shadcn/sidebar/index.js +25 -0
  255. package/dist/shadcn/skeleton/index.js +2 -0
  256. package/dist/shadcn/slider/index.js +2 -0
  257. package/dist/shadcn/sonner/index.js +1 -0
  258. package/dist/shadcn/spinner/index.js +1 -0
  259. package/dist/shadcn/switch/index.js +2 -0
  260. package/dist/shadcn/table/index.js +9 -0
  261. package/dist/shadcn/tabs/index.js +5 -0
  262. package/dist/shadcn/textarea/index.js +2 -0
  263. package/dist/shadcn/toggle/index.js +3 -0
  264. package/dist/shadcn/toggle-group/index.js +3 -0
  265. package/dist/shadcn/tooltip/context.js +8 -0
  266. package/dist/shadcn/tooltip/index.js +6 -0
  267. package/dist/shadcn/trace/index.js +9 -0
  268. package/dist/slides/bridges.js +66 -0
  269. package/dist/slides/deck-controller.svelte.js +221 -0
  270. package/dist/slides/export/capture.js +81 -0
  271. package/dist/slides/export/ffmpeg.js +85 -0
  272. package/dist/slides/export/index.js +4 -0
  273. package/dist/slides/export/launch.js +8 -0
  274. package/dist/slides/export/pdf.js +78 -0
  275. package/dist/slides/export/types.js +0 -0
  276. package/dist/slides/index.js +7 -0
  277. package/dist/slides/labels.js +26 -0
  278. package/dist/slides/layout.js +47 -0
  279. package/dist/slides/model.js +9 -0
  280. package/dist/slides/navigation.js +89 -0
  281. package/dist/slides/types.js +6 -0
  282. package/dist/status/define-statuses.js +16 -0
  283. package/dist/status/index.js +4 -0
  284. package/dist/status/status-types.js +0 -0
  285. package/dist/test-setup.js +26 -0
  286. package/dist/thread/index.js +3 -0
  287. package/dist/thread/logic.js +94 -0
  288. package/dist/thread/types.js +23 -0
  289. package/dist/work/board-order.js +109 -0
  290. package/dist/work/dates.js +19 -0
  291. package/dist/work/detail/detail-types.js +20 -0
  292. package/dist/work/docs/edited.js +39 -0
  293. package/dist/work/docs/index.js +7 -0
  294. package/dist/work/docs/labels.js +38 -0
  295. package/dist/work/docs/menu.js +121 -0
  296. package/dist/work/docs/outline.js +39 -0
  297. package/dist/work/gantt/logic.js +260 -0
  298. package/dist/work/inbox/inbox-logic.js +94 -0
  299. package/dist/work/inbox/inbox-statuses.js +86 -0
  300. package/dist/work/inbox/inbox-types.js +0 -0
  301. package/dist/work/inbox/index.js +1 -0
  302. package/dist/work/index.js +21 -0
  303. package/dist/work/kanban-drag.js +25 -0
  304. package/dist/work/kanban-types.js +0 -0
  305. package/dist/work/presets/sales.js +35 -0
  306. package/dist/work/reorder.js +10 -0
  307. package/dist/work/task-types.js +0 -0
  308. package/dist/work/time/duration.js +60 -0
  309. package/dist/work/time/time-types.js +25 -0
  310. package/dist/work/use-kanban-dnd.svelte.js +128 -0
  311. package/package.json +102 -76
  312. package/src/agents/vendor/draw.ts +4 -4
  313. package/src/canvas/headless/canvas-cleanup.test.ts +1 -1
  314. package/src/canvas/ops/ops.ts +1 -1
  315. package/src/charts/area-chart.svelte +11 -1
  316. package/src/charts/bar-chart.svelte +18 -3
  317. package/src/charts/line-chart.svelte +11 -1
  318. package/src/components/data-table/data-table.ts +4 -5
  319. package/src/components/data-table/pagination.svelte +5 -3
  320. package/src/components/docs/on-this-page.svelte +82 -5
  321. package/src/components/docs/scroll-spy.svelte.ts +6 -1
  322. package/src/components/list-page/detail-header.svelte +7 -3
  323. package/src/components/list-page/empty-state.svelte +3 -1
  324. package/src/components/list-page/filter-popover.svelte +2 -2
  325. package/src/components/list-page/rail-row.svelte +5 -2
  326. package/src/components/mark/mark.svelte +2 -1
  327. package/src/components/section-card/section-card.svelte +3 -1
  328. package/src/components/section-header/section-header.svelte +5 -5
  329. package/src/components/segmented/segment.svelte +1 -1
  330. package/src/components/table-view/table-view.svelte +6 -1
  331. package/src/components/tags-input/tags-input.svelte +1 -1
  332. package/src/components/toolbar/toolbar-trigger.ts +8 -2
  333. package/src/components/toolbar/toolbar.svelte +1 -1
  334. package/src/editor/anchors.ts +28 -0
  335. package/src/editor/doc-blocks.ts +168 -0
  336. package/src/editor/doc-page.css +389 -0
  337. package/src/editor/editor.svelte +47 -5
  338. package/src/editor/extensions.ts +26 -2
  339. package/src/editor/markdown.ts +27 -2
  340. package/src/editor/slash-items.ts +18 -0
  341. package/src/icons/trades.ts +1 -1
  342. package/src/inbox/README.md +6 -4
  343. package/src/inbox/inbox.test.ts +1 -1
  344. package/src/inbox/index.ts +2 -2
  345. package/src/inbox/logic.ts +29 -5
  346. package/src/inbox/thread-inbox.svelte +219 -92
  347. package/src/inbox/types.ts +27 -1
  348. package/src/lib/initials.test.ts +25 -0
  349. package/src/lib/initials.ts +29 -0
  350. package/src/modules.test.ts +4 -64
  351. package/src/panel/README.md +1 -1
  352. package/src/record/README.md +1 -1
  353. package/src/record/demo-data.ts +4 -4
  354. package/src/record/info-list.svelte +5 -4
  355. package/src/record/next-up.svelte +1 -1
  356. package/src/record/project-list.svelte +1 -1
  357. package/src/record/record-demo.svelte +2 -2
  358. package/src/record/steps-rail.svelte +3 -3
  359. package/src/shadcn/badge/badge.svelte +1 -1
  360. package/src/shadcn/card/card-title.svelte +1 -5
  361. package/src/shadcn/empty/empty-description.svelte +1 -1
  362. package/src/shadcn/progress/progress.svelte +8 -1
  363. package/src/shadcn/table/table-cell.svelte +10 -2
  364. package/src/status/README.md +1 -1
  365. package/src/thread/README.md +2 -0
  366. package/src/thread/index.ts +9 -1
  367. package/src/thread/logic.ts +33 -3
  368. package/src/thread/thread-body.svelte +37 -0
  369. package/src/thread/thread-events.svelte +30 -0
  370. package/src/thread/thread.svelte +74 -59
  371. package/src/thread/types.ts +21 -0
  372. package/src/{tasks → work}/README.md +11 -8
  373. package/src/{tasks → work}/detail/task-thread.svelte +8 -15
  374. package/src/work/docs/doc-editor-page.svelte +194 -0
  375. package/src/work/docs/doc-menu.svelte +333 -0
  376. package/src/work/docs/docs-demo.svelte +227 -0
  377. package/src/work/docs/edited-chip.svelte +125 -0
  378. package/src/work/docs/edited.ts +54 -0
  379. package/src/work/docs/index.ts +38 -0
  380. package/src/work/docs/labels.ts +70 -0
  381. package/src/work/docs/menu.ts +127 -0
  382. package/src/work/docs/outline.ts +60 -0
  383. package/src/{tasks → work}/gantt/gantt-group-row.svelte +1 -1
  384. package/src/{tasks → work}/inbox/inbox-card.svelte +113 -50
  385. package/src/work/inbox/inbox-logic.ts +98 -0
  386. package/src/work/inbox/inbox-trace.svelte +58 -0
  387. package/src/{tasks → work}/inbox/inbox-types.ts +2 -0
  388. package/src/{tasks → work}/index.ts +0 -10
  389. package/src/{tasks → work}/kanban-board.svelte +1 -1
  390. package/src/{tasks → work}/task-list.svelte +1 -1
  391. package/src/{tasks → work}/time/time-tracker.svelte +2 -5
  392. package/src/tasks/inbox/inbox-logic.ts +0 -21
  393. package/src/tasks/inbox/inbox-trace.svelte +0 -51
  394. /package/src/{tasks → work}/ambient.d.ts +0 -0
  395. /package/src/{tasks → work}/board-order.ts +0 -0
  396. /package/src/{tasks → work}/dates.ts +0 -0
  397. /package/src/{tasks → work}/demo.svelte +0 -0
  398. /package/src/{tasks → work}/detail/detail-demo.svelte +0 -0
  399. /package/src/{tasks → work}/detail/detail-types.ts +0 -0
  400. /package/src/{tasks → work}/detail/task-chip.svelte +0 -0
  401. /package/src/{tasks → work}/detail/task-detail.svelte +0 -0
  402. /package/src/{tasks → work}/detail/task-property.svelte +0 -0
  403. /package/src/{tasks → work}/gantt/gantt-bar.svelte +0 -0
  404. /package/src/{tasks → work}/gantt/gantt-grid.svelte +0 -0
  405. /package/src/{tasks → work}/gantt/gantt-header.svelte +0 -0
  406. /package/src/{tasks → work}/gantt/gantt-task-row.svelte +0 -0
  407. /package/src/{tasks → work}/gantt/gantt.css +0 -0
  408. /package/src/{tasks → work}/gantt/gantt.test.ts +0 -0
  409. /package/src/{tasks → work}/gantt/logic.test.ts +0 -0
  410. /package/src/{tasks → work}/gantt/logic.ts +0 -0
  411. /package/src/{tasks → work}/inbox/inbox-draft.svelte +0 -0
  412. /package/src/{tasks → work}/inbox/inbox-statuses.ts +0 -0
  413. /package/src/{tasks → work}/inbox/index.ts +0 -0
  414. /package/src/{tasks → work}/kanban-column.svelte +0 -0
  415. /package/src/{tasks → work}/kanban-drag.ts +0 -0
  416. /package/src/{tasks → work}/kanban-types.ts +0 -0
  417. /package/src/{tasks → work}/presets/sales.ts +0 -0
  418. /package/src/{tasks → work}/reorder.ts +0 -0
  419. /package/src/{tasks → work}/task-gantt.svelte +0 -0
  420. /package/src/{tasks → work}/task-types.ts +0 -0
  421. /package/src/{tasks → work}/time/duration.ts +0 -0
  422. /package/src/{tasks → work}/time/time-chip.svelte +0 -0
  423. /package/src/{tasks → work}/time/time-dot.svelte +0 -0
  424. /package/src/{tasks → work}/time/time-ring.svelte +0 -0
  425. /package/src/{tasks → work}/time/time-types.ts +0 -0
  426. /package/src/{tasks → work}/use-kanban-dnd.svelte.ts +0 -0
@@ -0,0 +1,128 @@
1
+ import { boardOrderAt } from "./board-order.js";
2
+ export function createKanbanDnd(config) {
3
+ let draggedId = $state(null);
4
+ let dragOver = $state(null);
5
+ function readDraggedId(e) {
6
+ const raw = e.dataTransfer?.getData("text/plain");
7
+ if (!raw) return null;
8
+ try {
9
+ const parsed = JSON.parse(raw);
10
+ return parsed.id ?? null;
11
+ } catch {
12
+ return null;
13
+ }
14
+ }
15
+ function onDragStart(e, id) {
16
+ if (e.dataTransfer) {
17
+ e.dataTransfer.effectAllowed = "move";
18
+ e.dataTransfer.setData("text/plain", JSON.stringify({
19
+ id
20
+ }));
21
+ }
22
+ requestAnimationFrame(()=>{
23
+ draggedId = id;
24
+ });
25
+ }
26
+ function onItemDragOver(e, columnId, overId, nextId) {
27
+ if (config.isDroppable && !config.isDroppable(columnId)) return;
28
+ e.preventDefault();
29
+ e.stopPropagation();
30
+ if (e.dataTransfer) e.dataTransfer.dropEffect = "move";
31
+ const rect = e.currentTarget.getBoundingClientRect();
32
+ const insertAfter = e.clientY > rect.top + rect.height / 2;
33
+ const targetOverId = insertAfter ? nextId : overId;
34
+ if (targetOverId === draggedId) return;
35
+ if (dragOver?.columnId === columnId && dragOver.overId === targetOverId) return;
36
+ dragOver = {
37
+ columnId,
38
+ overId: targetOverId
39
+ };
40
+ }
41
+ function onColumnDragOver(e, columnId) {
42
+ if (config.isDroppable && !config.isDroppable(columnId)) return;
43
+ e.preventDefault();
44
+ if (e.dataTransfer) e.dataTransfer.dropEffect = "move";
45
+ if (dragOver?.columnId !== columnId || dragOver.overId !== null) {
46
+ dragOver = {
47
+ columnId,
48
+ overId: null
49
+ };
50
+ }
51
+ }
52
+ function onDragLeave(e) {
53
+ if (!e.currentTarget.contains(e.relatedTarget)) {
54
+ dragOver = null;
55
+ }
56
+ }
57
+ function clearDragOver() {
58
+ dragOver = null;
59
+ }
60
+ function resetDrag() {
61
+ draggedId = null;
62
+ dragOver = null;
63
+ }
64
+ function manualInsertIndex(column, overId, columnId) {
65
+ const overIndex = overId ? column.findIndex((item)=>config.getId(item) === overId) : -1;
66
+ if (overIndex !== -1) return overIndex;
67
+ return config.dropAtTop?.(columnId) ? 0 : column.length;
68
+ }
69
+ function onDrop(e, targetColumnId) {
70
+ e.preventDefault();
71
+ if (config.isDroppable && !config.isDroppable(targetColumnId)) return;
72
+ const overId = dragOver?.overId ?? null;
73
+ dragOver = null;
74
+ draggedId = null;
75
+ const id = readDraggedId(e);
76
+ const item = id ? config.items().find((entry)=>config.getId(entry) === id) : undefined;
77
+ if (!item) return;
78
+ const movedId = config.getId(item);
79
+ if (config.getSortKey() !== "manual") {
80
+ if (config.getColumn(item) !== targetColumnId) {
81
+ void config.onMove(movedId, {
82
+ columnId: targetColumnId
83
+ });
84
+ }
85
+ return;
86
+ }
87
+ const column = config.getColumnItems(targetColumnId).filter((entry)=>config.getId(entry) !== movedId);
88
+ const index = manualInsertIndex(column, overId, targetColumnId);
89
+ const before = column[index - 1];
90
+ const after = column[index];
91
+ const orderOf = config.boardOrder;
92
+ void config.onMove(movedId, {
93
+ columnId: targetColumnId,
94
+ ...orderOf ? {
95
+ boardOrder: boardOrderAt(column, index, orderOf)
96
+ } : {},
97
+ beforeId: before === undefined ? null : config.getId(before),
98
+ afterId: after === undefined ? null : config.getId(after)
99
+ });
100
+ }
101
+ return {
102
+ get draggedId () {
103
+ return draggedId;
104
+ },
105
+ get dragOver () {
106
+ return dragOver;
107
+ },
108
+ set dragOver (value){
109
+ dragOver = value;
110
+ },
111
+ onDragStart,
112
+ onItemDragOver,
113
+ onColumnDragOver,
114
+ onDragLeave,
115
+ onDrop,
116
+ clearDragOver,
117
+ resetDrag,
118
+ isDragSource (id) {
119
+ return draggedId === id;
120
+ },
121
+ showIndicatorBefore (columnId, itemId) {
122
+ return dragOver?.columnId === columnId && dragOver.overId === itemId && draggedId !== null;
123
+ },
124
+ showIndicatorEnd (columnId) {
125
+ return dragOver?.columnId === columnId && dragOver.overId === null && draggedId !== null;
126
+ }
127
+ };
128
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@heyramzi/ui",
3
- "version": "2.8.0",
4
- "description": "Svelte 5 UI for apps: primitives, effects and animations, plus tasks, charts, slides, an editor, onboarding and a canvas as subpaths.",
3
+ "version": "2.10.0",
4
+ "description": "Svelte 5 UI for apps: primitives, effects and animations, plus work (tasks and docs), charts, slides, an editor, onboarding and a canvas as subpaths.",
5
5
  "homepage": "https://ui.heyramzi.com",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -14,7 +14,8 @@
14
14
  "scripts",
15
15
  "package.json",
16
16
  "README.md",
17
- "COMPONENTS.md"
17
+ "COMPONENTS.md",
18
+ "dist"
18
19
  ],
19
20
  "type": "module",
20
21
  "svelte": "./src/index.ts",
@@ -26,22 +27,27 @@
26
27
  ".": {
27
28
  "svelte": "./src/index.ts",
28
29
  "types": "./src/index.ts",
30
+ "node": "./dist/index.js",
29
31
  "default": "./src/index.ts"
30
32
  },
33
+ "./package.json": "./package.json",
31
34
  "./tokens.css": "./src/tokens/index.css",
32
35
  "./brand": {
33
36
  "svelte": "./src/brand/index.ts",
34
37
  "types": "./src/brand/index.ts",
38
+ "node": "./dist/brand/index.js",
35
39
  "default": "./src/brand/index.ts"
36
40
  },
37
41
  "./lib/*.js": {
38
42
  "svelte": "./src/lib/*.ts",
39
43
  "types": "./src/lib/*.ts",
44
+ "node": "./dist/lib/*.js",
40
45
  "default": "./src/lib/*.ts"
41
46
  },
42
47
  "./lib/*": {
43
48
  "svelte": "./src/lib/*.ts",
44
49
  "types": "./src/lib/*.ts",
50
+ "node": "./dist/lib/*.js",
45
51
  "default": "./src/lib/*.ts"
46
52
  },
47
53
  "./border-beam": {
@@ -63,6 +69,7 @@
63
69
  "./effects/animated-beam": {
64
70
  "svelte": "./src/effects/animated-beam/index.ts",
65
71
  "types": "./src/effects/animated-beam/index.ts",
72
+ "node": "./dist/effects/animated-beam/index.js",
66
73
  "default": "./src/effects/animated-beam/index.ts"
67
74
  },
68
75
  "./effects/spotlight": {
@@ -80,16 +87,19 @@
80
87
  "./effects/image-reveal": {
81
88
  "svelte": "./src/effects/image-reveal/index.ts",
82
89
  "types": "./src/effects/image-reveal/index.ts",
90
+ "node": "./dist/effects/image-reveal/index.js",
83
91
  "default": "./src/effects/image-reveal/index.ts"
84
92
  },
85
93
  "./effects/shader-gradient": {
86
94
  "svelte": "./src/effects/shader-gradient/index.ts",
87
95
  "types": "./src/effects/shader-gradient/index.ts",
96
+ "node": "./dist/effects/shader-gradient/index.js",
88
97
  "default": "./src/effects/shader-gradient/index.ts"
89
98
  },
90
99
  "./effects/reveal": {
91
100
  "svelte": "./src/effects/reveal/index.ts",
92
101
  "types": "./src/effects/reveal/index.ts",
102
+ "node": "./dist/effects/reveal/index.js",
93
103
  "default": "./src/effects/reveal/index.ts"
94
104
  },
95
105
  "./effects/progressive-blur": {
@@ -107,16 +117,19 @@
107
117
  "./effects/magnetic": {
108
118
  "svelte": "./src/effects/magnetic/magnetic.ts",
109
119
  "types": "./src/effects/magnetic/magnetic.ts",
120
+ "node": "./dist/effects/magnetic/magnetic.js",
110
121
  "default": "./src/effects/magnetic/magnetic.ts"
111
122
  },
112
123
  "./icons/sf-symbols": {
113
124
  "svelte": "./src/icons/sf-symbols.ts",
114
125
  "types": "./src/icons/sf-symbols.ts",
126
+ "node": "./dist/icons/sf-symbols.js",
115
127
  "default": "./src/icons/sf-symbols.ts"
116
128
  },
117
129
  "./icons/trades": {
118
130
  "svelte": "./src/icons/trades.ts",
119
131
  "types": "./src/icons/trades.ts",
132
+ "node": "./dist/icons/trades.js",
120
133
  "default": "./src/icons/trades.ts"
121
134
  },
122
135
  "./icons/TradeIcon": {
@@ -132,6 +145,7 @@
132
145
  "default": "./src/animations/index.css"
133
146
  },
134
147
  "./animations/text-swap": {
148
+ "node": "./dist/animations/text-swap.js",
135
149
  "default": "./src/animations/text-swap.ts"
136
150
  },
137
151
  "./animations/*": {
@@ -140,16 +154,19 @@
140
154
  "./shadcn/hooks/*": {
141
155
  "svelte": "./src/shadcn/hooks/*.ts",
142
156
  "types": "./src/shadcn/hooks/*.ts",
157
+ "node": "./dist/shadcn/hooks/*.js",
143
158
  "default": "./src/shadcn/hooks/*.ts"
144
159
  },
145
160
  "./shadcn/*": {
146
161
  "svelte": "./src/shadcn/*/index.ts",
147
162
  "types": "./src/shadcn/*/index.ts",
163
+ "node": "./dist/shadcn/*/index.js",
148
164
  "default": "./src/shadcn/*/index.ts"
149
165
  },
150
166
  "./components/*": {
151
167
  "svelte": "./src/components/*/index.ts",
152
168
  "types": "./src/components/*/index.ts",
169
+ "node": "./dist/components/*/index.js",
153
170
  "default": "./src/components/*/index.ts"
154
171
  },
155
172
  "./shadcn/utilities.css": {
@@ -159,137 +176,135 @@
159
176
  "./ai": {
160
177
  "svelte": "./src/ai/index.ts",
161
178
  "types": "./src/ai/index.ts",
179
+ "node": "./dist/ai/index.js",
162
180
  "default": "./src/ai/index.ts"
163
181
  },
164
182
  "./ai/*": {
165
183
  "svelte": "./src/ai/*/index.ts",
166
184
  "types": "./src/ai/*/index.ts",
185
+ "node": "./dist/ai/*/index.js",
167
186
  "default": "./src/ai/*/index.ts"
168
187
  },
169
188
  "./agents": {
170
189
  "svelte": "./src/agents/index.ts",
171
190
  "types": "./src/agents/index.ts",
191
+ "node": "./dist/agents/index.js",
172
192
  "default": "./src/agents/index.ts"
173
193
  },
174
194
  "./agents/demo.svelte": "./src/agents/demo.svelte",
175
195
  "./status": {
176
196
  "svelte": "./src/status/index.ts",
177
197
  "types": "./src/status/index.ts",
198
+ "node": "./dist/status/index.js",
178
199
  "default": "./src/status/index.ts"
179
200
  },
180
201
  "./panel": {
181
202
  "svelte": "./src/panel/index.ts",
182
203
  "types": "./src/panel/index.ts",
204
+ "node": "./dist/panel/index.js",
183
205
  "default": "./src/panel/index.ts"
184
206
  },
185
207
  "./record": {
186
208
  "svelte": "./src/record/index.ts",
187
209
  "types": "./src/record/index.ts",
210
+ "node": "./dist/record/index.js",
188
211
  "default": "./src/record/index.ts"
189
212
  },
213
+ "./record/demo.svelte": "./src/record/record-demo.svelte",
190
214
  "./thread": {
191
215
  "svelte": "./src/thread/index.ts",
192
216
  "types": "./src/thread/index.ts",
217
+ "node": "./dist/thread/index.js",
193
218
  "default": "./src/thread/index.ts"
194
219
  },
195
220
  "./inbox": {
196
221
  "svelte": "./src/inbox/index.ts",
197
222
  "types": "./src/inbox/index.ts",
223
+ "node": "./dist/inbox/index.js",
198
224
  "default": "./src/inbox/index.ts"
199
225
  },
200
- "./tasks": {
201
- "svelte": "./src/tasks/index.ts",
202
- "types": "./src/tasks/index.ts",
203
- "default": "./src/tasks/index.ts"
204
- },
205
- "./tasks/kanban": {
206
- "svelte": "./src/tasks/kanban-board.svelte",
207
- "types": "./src/tasks/kanban-board.svelte",
208
- "default": "./src/tasks/kanban-board.svelte"
209
- },
210
- "./tasks/list": {
211
- "svelte": "./src/tasks/task-list.svelte",
212
- "types": "./src/tasks/task-list.svelte",
213
- "default": "./src/tasks/task-list.svelte"
214
- },
215
- "./tasks/gantt": {
216
- "svelte": "./src/tasks/task-gantt.svelte",
217
- "types": "./src/tasks/task-gantt.svelte",
218
- "default": "./src/tasks/task-gantt.svelte"
219
- },
220
- "./tasks/status": {
221
- "svelte": "./src/status/status-badge.svelte",
222
- "types": "./src/status/status-badge.svelte",
223
- "default": "./src/status/status-badge.svelte"
224
- },
225
- "./tasks/status-dot": {
226
- "svelte": "./src/status/status-dot.svelte",
227
- "types": "./src/status/status-dot.svelte",
228
- "default": "./src/status/status-dot.svelte"
229
- },
230
- "./tasks/statuses": {
231
- "svelte": "./src/status/define-statuses.ts",
232
- "types": "./src/status/define-statuses.ts",
233
- "default": "./src/status/define-statuses.ts"
234
- },
235
- "./tasks/time": {
236
- "svelte": "./src/tasks/time/time-tracker.svelte",
237
- "types": "./src/tasks/time/time-tracker.svelte",
238
- "default": "./src/tasks/time/time-tracker.svelte"
239
- },
240
- "./tasks/inbox": {
241
- "svelte": "./src/tasks/inbox/index.ts",
242
- "types": "./src/tasks/inbox/index.ts",
243
- "default": "./src/tasks/inbox/index.ts"
244
- },
245
- "./tasks/side-panel": {
246
- "svelte": "./src/panel/side-panel.svelte",
247
- "types": "./src/panel/side-panel.svelte",
248
- "default": "./src/panel/side-panel.svelte"
249
- },
250
- "./tasks/presets/sales": {
251
- "svelte": "./src/tasks/presets/sales.ts",
252
- "types": "./src/tasks/presets/sales.ts",
253
- "default": "./src/tasks/presets/sales.ts"
254
- },
255
- "./tasks/detail": {
256
- "svelte": "./src/tasks/detail/task-detail.svelte",
257
- "types": "./src/tasks/detail/task-detail.svelte",
258
- "default": "./src/tasks/detail/task-detail.svelte"
259
- },
260
- "./tasks/detail-demo.svelte": "./src/tasks/detail/detail-demo.svelte",
261
- "./tasks/record": {
262
- "svelte": "./src/record/index.ts",
263
- "types": "./src/record/index.ts",
264
- "default": "./src/record/index.ts"
265
- },
266
- "./tasks/record-demo.svelte": "./src/record/record-demo.svelte",
267
- "./tasks/demo": {
268
- "svelte": "./src/tasks/demo.svelte",
269
- "default": "./src/tasks/demo.svelte"
270
- },
271
- "./tasks/demo.svelte": "./src/tasks/demo.svelte",
226
+ "./work": {
227
+ "svelte": "./src/work/index.ts",
228
+ "types": "./src/work/index.ts",
229
+ "node": "./dist/work/index.js",
230
+ "default": "./src/work/index.ts"
231
+ },
232
+ "./work/kanban": {
233
+ "svelte": "./src/work/kanban-board.svelte",
234
+ "types": "./src/work/kanban-board.svelte",
235
+ "default": "./src/work/kanban-board.svelte"
236
+ },
237
+ "./work/list": {
238
+ "svelte": "./src/work/task-list.svelte",
239
+ "types": "./src/work/task-list.svelte",
240
+ "default": "./src/work/task-list.svelte"
241
+ },
242
+ "./work/gantt": {
243
+ "svelte": "./src/work/task-gantt.svelte",
244
+ "types": "./src/work/task-gantt.svelte",
245
+ "default": "./src/work/task-gantt.svelte"
246
+ },
247
+ "./work/time": {
248
+ "svelte": "./src/work/time/time-tracker.svelte",
249
+ "types": "./src/work/time/time-tracker.svelte",
250
+ "default": "./src/work/time/time-tracker.svelte"
251
+ },
252
+ "./work/inbox": {
253
+ "svelte": "./src/work/inbox/index.ts",
254
+ "types": "./src/work/inbox/index.ts",
255
+ "node": "./dist/work/inbox/index.js",
256
+ "default": "./src/work/inbox/index.ts"
257
+ },
258
+ "./work/presets/sales": {
259
+ "svelte": "./src/work/presets/sales.ts",
260
+ "types": "./src/work/presets/sales.ts",
261
+ "node": "./dist/work/presets/sales.js",
262
+ "default": "./src/work/presets/sales.ts"
263
+ },
264
+ "./work/detail": {
265
+ "svelte": "./src/work/detail/task-detail.svelte",
266
+ "types": "./src/work/detail/task-detail.svelte",
267
+ "default": "./src/work/detail/task-detail.svelte"
268
+ },
269
+ "./work/docs": {
270
+ "svelte": "./src/work/docs/index.ts",
271
+ "types": "./src/work/docs/index.ts",
272
+ "node": "./dist/work/docs/index.js",
273
+ "default": "./src/work/docs/index.ts"
274
+ },
275
+ "./work/docs-demo.svelte": "./src/work/docs/docs-demo.svelte",
276
+ "./work/detail-demo.svelte": "./src/work/detail/detail-demo.svelte",
277
+ "./work/demo": {
278
+ "svelte": "./src/work/demo.svelte",
279
+ "default": "./src/work/demo.svelte"
280
+ },
281
+ "./work/demo.svelte": "./src/work/demo.svelte",
272
282
  "./charts": {
273
283
  "svelte": "./src/charts/index.ts",
274
284
  "types": "./src/charts/index.ts",
285
+ "node": "./dist/charts/index.js",
275
286
  "default": "./src/charts/index.ts"
276
287
  },
277
288
  "./charts/dashboard": {
278
289
  "svelte": "./src/charts/dashboard/index.ts",
279
290
  "types": "./src/charts/dashboard/index.ts",
291
+ "node": "./dist/charts/dashboard/index.js",
280
292
  "default": "./src/charts/dashboard/index.ts"
281
293
  },
282
294
  "./slides": {
283
295
  "types": "./src/slides/index.ts",
284
296
  "svelte": "./src/slides/index.ts",
297
+ "node": "./dist/slides/index.js",
285
298
  "default": "./src/slides/index.ts"
286
299
  },
287
300
  "./slides/model": {
288
301
  "types": "./src/slides/model.ts",
302
+ "node": "./dist/slides/model.js",
289
303
  "default": "./src/slides/model.ts"
290
304
  },
291
305
  "./slides/export": {
292
306
  "types": "./src/slides/export/index.ts",
307
+ "node": "./dist/slides/export/index.js",
293
308
  "default": "./src/slides/export/index.ts"
294
309
  },
295
310
  "./slides/demo": {
@@ -305,18 +320,22 @@
305
320
  "./editor": {
306
321
  "svelte": "./src/editor/index.ts",
307
322
  "types": "./src/editor/index.ts",
323
+ "node": "./dist/editor/index.js",
308
324
  "default": "./src/editor/index.ts"
309
325
  },
310
326
  "./editor/serializer": {
311
327
  "types": "./src/editor/serializer.ts",
328
+ "node": "./dist/editor/serializer.js",
312
329
  "default": "./src/editor/serializer.ts"
313
330
  },
314
331
  "./editor/markdown": {
315
332
  "types": "./src/editor/markdown.ts",
333
+ "node": "./dist/editor/markdown.js",
316
334
  "default": "./src/editor/markdown.ts"
317
335
  },
318
336
  "./editor/block-ops": {
319
337
  "types": "./src/editor/block-ops.ts",
338
+ "node": "./dist/editor/block-ops.js",
320
339
  "default": "./src/editor/block-ops.ts"
321
340
  },
322
341
  "./editor/inline-editor": {
@@ -330,11 +349,13 @@
330
349
  "./onboarding": {
331
350
  "svelte": "./src/onboarding/index.ts",
332
351
  "types": "./src/onboarding/index.ts",
352
+ "node": "./dist/onboarding/index.js",
333
353
  "default": "./src/onboarding/index.ts"
334
354
  },
335
355
  "./onboarding/stores": {
336
356
  "svelte": "./src/onboarding/stores.ts",
337
357
  "types": "./src/onboarding/stores.ts",
358
+ "node": "./dist/onboarding/stores.js",
338
359
  "default": "./src/onboarding/stores.ts"
339
360
  },
340
361
  "./onboarding/demo": {
@@ -345,6 +366,7 @@
345
366
  "./canvas": {
346
367
  "types": "./src/canvas/index.ts",
347
368
  "svelte": "./src/canvas/index.ts",
369
+ "node": "./dist/canvas/index.js",
348
370
  "default": "./src/canvas/index.ts"
349
371
  },
350
372
  "./canvas/*.svelte": {
@@ -356,6 +378,7 @@
356
378
  "./canvas/*.js": {
357
379
  "types": "./src/canvas/*.ts",
358
380
  "svelte": "./src/canvas/*.ts",
381
+ "node": "./dist/canvas/*.js",
359
382
  "default": "./src/canvas/*.ts"
360
383
  }
361
384
  },
@@ -365,7 +388,9 @@
365
388
  "@tiptap/core": "^3.32.0",
366
389
  "@tiptap/extension-drag-handle": "^3.32.0",
367
390
  "@tiptap/extension-image": "^3.32.0",
391
+ "@tiptap/extension-list": "^3.32.0",
368
392
  "@tiptap/extension-placeholder": "^3.32.0",
393
+ "@tiptap/extension-table": "^3.32.0",
369
394
  "@tiptap/pm": "^3.32.0",
370
395
  "@tiptap/starter-kit": "^3.32.0",
371
396
  "@zag-js/svelte": "^1.46.0",
@@ -432,6 +457,7 @@
432
457
  "sync:shadcn": "node scripts/sync-shadcn.mjs",
433
458
  "sync": "pnpm sync:transitions && pnpm sync:shadcn",
434
459
  "sync:check": "node scripts/sync-transitions.mjs --check && node scripts/sync-shadcn.mjs --check",
435
- "check": "svelte-check --tsconfig ./tsconfig.json"
460
+ "check": "svelte-check --tsconfig ./tsconfig.json",
461
+ "build": "node ../../../vibe-kit/scripts/build-dist.mjs"
436
462
  }
437
463
  }
@@ -102,9 +102,9 @@ const HALF_DEPTH = 15;
102
102
  const CAP = 0.9;
103
103
  const profile = (z: number, cap: number) => cap + (1 - cap) * Math.sqrt(Math.max(0, 1 - z * z));
104
104
 
105
- /* Big, plain dark eyes: they carry the face at 24px. */
105
+ /* Big, plain eyes, a little taller than wide: a round dot reads as a button at 24px. */
106
106
  const EYE_GAP = 25;
107
- const EYE_RX = 6.3;
107
+ const EYE_RX = 5.6;
108
108
  const EYE_Y = { eyes: 1, mouth: -3.5 } as const;
109
109
 
110
110
  interface Palette {
@@ -781,9 +781,9 @@ function drawFace(ctx: CanvasRenderingContext2D, pose: Pose, cfg: DrawConfig): [
781
781
  kSleep = ws;
782
782
  const x0 = kOpen * 0.01 + kShut * 5.4 + kLaugh * 6.2 + kSleep * 6;
783
783
  const y0 =
784
- kOpen * 1.1 * tall + kShut * 0.6 + kLaugh * (2.2 - lift * 1.5) + kSleep * (-1.4 + sag);
784
+ kOpen * 2 * tall + kShut * 0.6 + kLaugh * (2.2 - lift * 1.5) + kSleep * (-1.4 + sag);
785
785
  const cy =
786
- kOpen * -3.3 * tall + kShut * 0.6 + kLaugh * (-11.4 - 4 * lift) + kSleep * (5.4 + 2 * sag);
786
+ kOpen * -6 * tall + kShut * 0.6 + kLaugh * (-11.4 - 4 * lift) + kSleep * (5.4 + 2 * sag);
787
787
  const w = kOpen * EYE_RX * 2 * wide + kShut * 2.8 + kLaugh * 4.4 + kSleep * 4;
788
788
  /* the eyes drift toward the look when open, less so when shut */
789
789
  const dx = lx * (kOpen + 0.5 * (kShut + kLaugh)),
@@ -3,7 +3,7 @@ import { sortParentsFirst, stripCallbacks } from "./canvas-cleanup.js";
3
3
  import { makeNode } from "../test-utils.js";
4
4
  import type { CanvasNode } from "../types.js";
5
5
 
6
- /** Read serialized data as a loose record: these tests exercise legacy fields
6
+ /** Read serialized data as a loose record: these tests exercise old fields
7
7
  * that are no longer part of any per-type shape but must survive the denylist. */
8
8
  function loose(node: { data: unknown }): Record<string, unknown> {
9
9
  return node.data as Record<string, unknown>;
@@ -36,7 +36,7 @@ export const patchNodeOp = z.object({
36
36
  kind: z.literal("patchNode"),
37
37
  nodeId: z.string().min(1),
38
38
  data: z.record(z.string(), z.unknown()).optional(),
39
- // Merged into the node's style object. A legacy CSS-string style is replaced
39
+ // Merged into the node's style object. A CSS-string style from an old save is replaced
40
40
  // wholesale (there is nothing sane to merge into).
41
41
  style: z.record(z.string(), z.unknown()).optional(),
42
42
  width: z.number().optional(),
@@ -114,6 +114,16 @@
114
114
  const fadeMask = $derived(fade > 0 ? `url(#${uid}-fade)` : undefined);
115
115
  const fallback = $derived(data.length > 0 ? data[data.length - 1] : null);
116
116
  const display = $derived(active ?? fallback);
117
+
118
+ // A long tick label ("1,000,000") falls back to "1M" so the left gutter holds it.
119
+ const compact = new Intl.NumberFormat(undefined, {
120
+ notation: "compact",
121
+ maximumFractionDigits: 1,
122
+ });
123
+ function valueTick(v: number): string {
124
+ const full = formatValue(v);
125
+ return full.length > 6 && Number.isFinite(v) ? compact.format(v) : full;
126
+ }
117
127
  const figureRows = $derived(
118
128
  display
119
129
  ? series.map((s) => ({ value: Number(display[s.key]), label: s.label, color: s.color }))
@@ -158,7 +168,7 @@
158
168
  motion={DOMAIN_MOTION}
159
169
  >
160
170
  <Svg>
161
- <Axis placement="left" format={(v) => formatValue(Number(v))} ticks={4} />
171
+ <Axis placement="left" format={(v) => valueTick(Number(v))} ticks={4} />
162
172
  <Axis placement="bottom" format={(v) => formatX(v)} ticks={xTicks} />
163
173
  <g class="hr-area-grid">
164
174
  <Axis placement="left" grid rule={false} ticks={4} format={() => ""} />
@@ -75,7 +75,11 @@
75
75
  // =========================
76
76
  let active = $state<TData | null>(null);
77
77
 
78
- // ========================= FUNCTIONS ========================= WHY: called from the tooltip header's value expression so it re-runs on every active-band change; an unread {@const} side effect only evaluates once.
78
+ // =========================
79
+ // FUNCTIONS
80
+ // =========================
81
+
82
+ // WHY: the tooltip header calls this so it re-runs per active band; an unread {@const} runs once.
79
83
 
80
84
  // The microtask defers the state write out of template evaluation.
81
85
  function trackActive(d: TData): string {
@@ -128,6 +132,17 @@
128
132
  return [...groups].map(([c, rows]) => ({ key: c, color: c, rows, at: undefined }));
129
133
  });
130
134
  const activeColor = $derived(active && colorOf ? colorOf(active) : color);
135
+
136
+ // WHY: "1,000,000" overflows the 48px gutter and the gap between ticks, so a long label
137
+ // falls back to "1M"; the tooltip keeps the full value.
138
+ const compact = new Intl.NumberFormat(undefined, {
139
+ notation: "compact",
140
+ maximumFractionDigits: 1,
141
+ });
142
+ function valueTick(v: number): string {
143
+ const full = formatValue(v);
144
+ return full.length > 6 && Number.isFinite(v) ? compact.format(v) : full;
145
+ }
131
146
  </script>
132
147
 
133
148
  <!-- =========================== -->
@@ -172,12 +187,12 @@
172
187
  <Svg>
173
188
  {#if horizontal}
174
189
  <Axis placement="left" format={(v) => (formatTick ?? formatX)(v)} />
175
- <Axis placement="bottom" format={(v) => formatValue(Number(v))} ticks={4} />
190
+ <Axis placement="bottom" format={(v) => valueTick(Number(v))} ticks={4} />
176
191
  <g class="hr-bar-grid">
177
192
  <Axis placement="bottom" grid rule={false} ticks={4} format={() => ""} />
178
193
  </g>
179
194
  {:else}
180
- <Axis placement="left" format={(v) => formatValue(Number(v))} ticks={4} />
195
+ <Axis placement="left" format={(v) => valueTick(Number(v))} ticks={4} />
181
196
  <Axis placement="bottom" format={(v) => (formatTick ?? formatX)(v)} />
182
197
  <g class="hr-bar-grid">
183
198
  <Axis placement="left" grid rule={false} ticks={4} format={() => ""} />