@heyramzi/ui 2.23.0 → 3.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 (929) hide show
  1. package/COMPONENTS.md +16 -15
  2. package/README.md +5 -4
  3. package/dist/ai/confirmation/index.js +3 -6
  4. package/dist/canvas/index.js +0 -1
  5. package/dist/canvas/pen/node-name.svelte.js +25 -0
  6. package/dist/canvas/ui/tools.js +7 -0
  7. package/dist/charts/chart-a11y.js +59 -0
  8. package/dist/charts/dashboard/index.js +0 -3
  9. package/dist/charts/primitives/chart-utils.js +14 -0
  10. package/dist/components/chip/index.js +1 -0
  11. package/dist/components/data-table/menu-key.js +19 -0
  12. package/dist/components/language-flag/flags.js +5 -0
  13. package/dist/components/language-flag/index.js +1 -0
  14. package/dist/components/list-page/index.js +1 -4
  15. package/dist/components/theme/index.js +0 -1
  16. package/dist/components/toolbar/index.js +2 -4
  17. package/dist/components/work-parts/index.js +0 -1
  18. package/dist/editor/block-move.js +40 -0
  19. package/dist/editor/doc-blocks.js +4 -3
  20. package/dist/editor/extensions.js +14 -1
  21. package/dist/effects/animated-beam/path-calculator.svelte.js +13 -6
  22. package/dist/effects/border-beam/index.js +2 -0
  23. package/dist/effects/image-comparison/index.js +1 -0
  24. package/dist/effects/interactive-hover-button/index.js +1 -0
  25. package/dist/effects/magic-card/index.js +1 -0
  26. package/dist/effects/marquee/index.js +1 -0
  27. package/dist/effects/progressive-blur/index.js +1 -0
  28. package/dist/effects/spotlight/index.js +1 -0
  29. package/dist/effects/theme-toggle/index.js +1 -0
  30. package/dist/inbox/index.js +1 -1
  31. package/dist/lib/dates.js +41 -0
  32. package/dist/lib/focus.js +15 -0
  33. package/dist/lib/panel.js +2 -2
  34. package/dist/lib/tone.js +13 -1
  35. package/dist/record/format.js +2 -18
  36. package/dist/record/logic.js +3 -6
  37. package/dist/shadcn/alert/alert-variants.js +1 -1
  38. package/dist/shadcn/attachment/context.js +10 -0
  39. package/dist/shadcn/dropdown-menu/menu-item.js +1 -1
  40. package/dist/shadcn/hooks/highlighter.js +58 -5
  41. package/dist/shadcn/sidebar/constants.js +1 -1
  42. package/dist/shadcn/sidebar/context.svelte.js +12 -1
  43. package/dist/slides/deck-controller.svelte.js +3 -20
  44. package/dist/status/index.js +0 -1
  45. package/dist/work/dates.js +2 -3
  46. package/dist/work/detail/detail-types.js +0 -8
  47. package/dist/work/docs/edited.js +8 -7
  48. package/dist/work/inbox/inbox-logic.js +5 -20
  49. package/dist/work/index.js +0 -3
  50. package/dist/work/kanban-keyboard.js +10 -5
  51. package/dist/work/time/duration.js +2 -3
  52. package/package.json +36 -126
  53. package/scripts/svelte-dts.mjs +62 -0
  54. package/scripts/sync-shadcn.mjs +3 -1
  55. package/src/agents/agent-avatar.svelte +24 -12
  56. package/src/agents/agent-avatar.svelte.d.ts +6 -0
  57. package/src/agents/agent-avatar.test.ts +40 -0
  58. package/src/agents/agent-cast.svelte +83 -78
  59. package/src/agents/agent-cast.svelte.d.ts +20 -0
  60. package/src/agents/types.ts +1 -0
  61. package/src/ai/ai-button/AiButton.svelte +21 -10
  62. package/src/ai/ai-button/AiButton.svelte.d.ts +16 -0
  63. package/src/ai/ai-button/ai-button.svelte.test.ts +27 -0
  64. package/src/ai/confirmation/Confirmation.svelte +22 -6
  65. package/src/ai/confirmation/Confirmation.svelte.d.ts +12 -0
  66. package/src/ai/confirmation/ConfirmationAction.svelte +10 -3
  67. package/src/ai/confirmation/ConfirmationAction.svelte.d.ts +8 -0
  68. package/src/ai/confirmation/ConfirmationActions.svelte.d.ts +9 -0
  69. package/src/ai/confirmation/{ConfirmationRequest.svelte → ConfirmationState.svelte} +6 -3
  70. package/src/ai/confirmation/ConfirmationState.svelte.d.ts +10 -0
  71. package/src/ai/confirmation/ConfirmationTitle.svelte.d.ts +9 -0
  72. package/src/ai/confirmation/confirmation-context.svelte.ts +2 -2
  73. package/src/ai/confirmation/confirmation-focus.test.svelte +33 -0
  74. package/src/ai/confirmation/confirmation-focus.test.svelte.d.ts +8 -0
  75. package/src/ai/confirmation/confirmation-focus.test.ts +34 -0
  76. package/src/ai/confirmation/confirmation-parts.test.svelte +17 -0
  77. package/src/ai/confirmation/confirmation-parts.test.svelte.d.ts +7 -0
  78. package/src/ai/confirmation/confirmation-parts.test.ts +23 -0
  79. package/src/ai/confirmation/index.ts +6 -21
  80. package/src/ai/generation-progress/GenerationProgress.svelte +198 -171
  81. package/src/ai/generation-progress/GenerationProgress.svelte.d.ts +15 -0
  82. package/src/ai/generation-progress/generation-progress.test.ts +37 -0
  83. package/src/ai/loading-state/PixelLoader.svelte +41 -36
  84. package/src/ai/loading-state/PixelLoader.svelte.d.ts +13 -0
  85. package/src/ai/prompt-input/PromptInput.svelte +1 -1
  86. package/src/ai/prompt-input/PromptInput.svelte.d.ts +14 -0
  87. package/src/ai/prompt-input/PromptInputBody.svelte.d.ts +9 -0
  88. package/src/ai/prompt-input/PromptInputSubmit.svelte +3 -3
  89. package/src/ai/prompt-input/PromptInputSubmit.svelte.d.ts +19 -0
  90. package/src/ai/prompt-input/PromptInputTextarea.svelte +6 -1
  91. package/src/ai/prompt-input/PromptInputTextarea.svelte.d.ts +14 -0
  92. package/src/ai/prompt-input/PromptInputToolbar.svelte.d.ts +9 -0
  93. package/src/ai/prompt-input/prompt-input.test.ts +64 -0
  94. package/src/ai/reasoning/Reasoning.svelte.d.ts +10 -0
  95. package/src/ai/reasoning/ReasoningContent.svelte.d.ts +8 -0
  96. package/src/ai/reasoning/ReasoningTrigger.svelte +2 -1
  97. package/src/ai/reasoning/ReasoningTrigger.svelte.d.ts +8 -0
  98. package/src/ai/response/Response.css +23 -19
  99. package/src/ai/response/Response.svelte.d.ts +11 -0
  100. package/src/ai/suggestion/Suggestion.svelte.d.ts +10 -0
  101. package/src/ai/suggestion/Suggestions.svelte +5 -2
  102. package/src/ai/suggestion/Suggestions.svelte.d.ts +11 -0
  103. package/src/ai/typing-dots/TypingDots.css +27 -23
  104. package/src/ai/typing-dots/TypingDots.svelte +32 -12
  105. package/src/ai/typing-dots/TypingDots.svelte.d.ts +12 -0
  106. package/src/ai/typing-dots/typing-dots.test.ts +36 -0
  107. package/src/ai/voice-waveform/VoiceWaveform.css +31 -27
  108. package/src/ai/voice-waveform/VoiceWaveform.svelte.d.ts +10 -0
  109. package/src/animations/avatar-group-hover.css +25 -21
  110. package/src/animations/card-tilt.css +71 -65
  111. package/src/animations/digit-pop-in.css +49 -40
  112. package/src/animations/dropdown.css +125 -107
  113. package/src/animations/input-clear-dissolve.css +69 -59
  114. package/src/animations/input-shake.css +55 -48
  115. package/src/animations/learn-more-hover.css +53 -43
  116. package/src/animations/like-button.css +74 -62
  117. package/src/animations/modal.css +83 -74
  118. package/src/animations/page-side-by-side.css +50 -42
  119. package/src/animations/plus-menu-morph.css +96 -87
  120. package/src/animations/resize.css +16 -13
  121. package/src/animations/shimmer-text.css +46 -40
  122. package/src/animations/spinning-counter.css +50 -43
  123. package/src/animations/success-check.css +69 -58
  124. package/src/animations/text-swap.css +35 -31
  125. package/src/animations/thinking-states.css +61 -54
  126. package/src/canvas/card/card-frame.svelte.d.ts +14 -0
  127. package/src/canvas/card/card.css +16 -10
  128. package/src/canvas/card/resize-handles.svelte.d.ts +11 -0
  129. package/src/canvas/chrome/chrome-zoom.svelte.d.ts +3 -0
  130. package/src/canvas/chrome/chrome.css +75 -69
  131. package/src/canvas/chrome/lock-badge.svelte.d.ts +8 -0
  132. package/src/canvas/chrome/side-handles.svelte.d.ts +6 -0
  133. package/src/canvas/chrome/size-chip.svelte.d.ts +3 -0
  134. package/src/canvas/chrome/snap-guides.svelte +16 -12
  135. package/src/canvas/chrome/snap-guides.svelte.d.ts +9 -0
  136. package/src/canvas/components/icons/ToolIcon.svelte.d.ts +8 -0
  137. package/src/canvas/components/shared/svg/PreviewSvg.svelte +9 -5
  138. package/src/canvas/components/shared/svg/PreviewSvg.svelte.d.ts +13 -0
  139. package/src/canvas/components/shared/svg/ShapeOutline.svelte +8 -4
  140. package/src/canvas/components/shared/svg/ShapeOutline.svelte.d.ts +15 -0
  141. package/src/canvas/components/shared/svg/StrokeNode.svelte +21 -11
  142. package/src/canvas/components/shared/svg/StrokeNode.svelte.d.ts +5 -0
  143. package/src/canvas/components/shared/svg/TextRule.svelte +8 -4
  144. package/src/canvas/components/shared/svg/TextRule.svelte.d.ts +9 -0
  145. package/src/canvas/edges/bend-handle.svelte +18 -14
  146. package/src/canvas/edges/bend-handle.svelte.d.ts +10 -0
  147. package/src/canvas/edges/edge-gradient.svelte.d.ts +16 -0
  148. package/src/canvas/edges/gradient-edge.svelte.d.ts +21 -0
  149. package/src/canvas/index.ts +0 -1
  150. package/src/canvas/lod/lod-switch.svelte +38 -33
  151. package/src/canvas/lod/lod-switch.svelte.d.ts +14 -0
  152. package/src/canvas/pen/PenField.svelte.d.ts +26 -0
  153. package/src/canvas/pen/PenOverlay.svelte +10 -6
  154. package/src/canvas/pen/PenOverlay.svelte.d.ts +23 -0
  155. package/src/canvas/pen/ShapeNode.svelte +6 -0
  156. package/src/canvas/pen/ShapeNode.svelte.d.ts +5 -0
  157. package/src/canvas/pen/TextNode.svelte +12 -2
  158. package/src/canvas/pen/TextNode.svelte.d.ts +5 -0
  159. package/src/canvas/pen/host-field.test.svelte.d.ts +6 -0
  160. package/src/canvas/pen/node-name.svelte.ts +32 -0
  161. package/src/canvas/pen/pen.css +69 -63
  162. package/src/canvas/screen/GlyphIcon.svelte.d.ts +9 -0
  163. package/src/canvas/screen/PartView.svelte +25 -25
  164. package/src/canvas/screen/PartView.svelte.d.ts +17 -0
  165. package/src/canvas/screen/ScreenBody.svelte +4 -4
  166. package/src/canvas/screen/ScreenBody.svelte.d.ts +11 -0
  167. package/src/canvas/screen/ScreenCard.svelte.d.ts +9 -0
  168. package/src/canvas/screen/screen.css +509 -505
  169. package/src/canvas/ui/CanvasToolbar.svelte.d.ts +30 -0
  170. package/src/canvas/ui/FrameLayer.svelte +18 -14
  171. package/src/canvas/ui/FrameLayer.svelte.d.ts +9 -0
  172. package/src/canvas/ui/PenLayer.svelte.d.ts +15 -0
  173. package/src/canvas/ui/StylePanel.svelte +41 -37
  174. package/src/canvas/ui/StylePanel.svelte.d.ts +32 -0
  175. package/src/canvas/ui/canvas-grid.svelte.d.ts +11 -0
  176. package/src/canvas/ui/canvas-ui.css +287 -266
  177. package/src/canvas/ui/tools.test.ts +39 -0
  178. package/src/canvas/ui/tools.ts +8 -0
  179. package/src/charts/README.md +3 -3
  180. package/src/charts/animated-value.css +6 -2
  181. package/src/charts/animated-value.svelte.d.ts +24 -0
  182. package/src/charts/area-chart.css +27 -21
  183. package/src/charts/area-chart.svelte +45 -20
  184. package/src/charts/area-chart.svelte.d.ts +60 -0
  185. package/src/charts/bar-chart.css +112 -102
  186. package/src/charts/bar-chart.svelte +43 -53
  187. package/src/charts/bar-chart.svelte.d.ts +64 -0
  188. package/src/charts/chart-a11y.css +23 -0
  189. package/src/charts/chart-a11y.test.ts +59 -0
  190. package/src/charts/chart-a11y.ts +92 -0
  191. package/src/charts/chart-plot.svelte +106 -0
  192. package/src/charts/chart-plot.svelte.d.ts +18 -0
  193. package/src/charts/chart-tokens.css +52 -51
  194. package/src/charts/charts.css +154 -142
  195. package/src/charts/crosshair.svelte.d.ts +7 -0
  196. package/src/charts/dashboard/dashboard-section.svelte +19 -3
  197. package/src/charts/dashboard/dashboard-section.svelte.d.ts +17 -0
  198. package/src/charts/dashboard/data-table.svelte +22 -22
  199. package/src/charts/dashboard/data-table.svelte.d.ts +86 -0
  200. package/src/charts/dashboard/index.ts +0 -3
  201. package/src/charts/dashboard/panel-grid.svelte +1 -1
  202. package/src/charts/dashboard/panel-grid.svelte.d.ts +14 -0
  203. package/src/charts/dashboard/period-filter.svelte.d.ts +37 -0
  204. package/src/charts/dashboard/rating-chip.svelte +9 -11
  205. package/src/charts/dashboard/rating-chip.svelte.d.ts +9 -0
  206. package/src/charts/dashboard/stat-band.svelte.d.ts +14 -0
  207. package/src/charts/dashboard/stat-tile.svelte +11 -8
  208. package/src/charts/dashboard/stat-tile.svelte.d.ts +62 -0
  209. package/src/charts/donut-chart.css +52 -46
  210. package/src/charts/donut-chart.svelte.d.ts +39 -0
  211. package/src/charts/edge-fade.svelte.d.ts +9 -0
  212. package/src/charts/figure.css +104 -91
  213. package/src/charts/figure.svelte.d.ts +40 -0
  214. package/src/charts/gauge-chart.css +74 -70
  215. package/src/charts/gauge-chart.svelte.d.ts +58 -0
  216. package/src/charts/hover-focus.svelte.d.ts +14 -0
  217. package/src/charts/legend.css +112 -108
  218. package/src/charts/legend.svelte +3 -3
  219. package/src/charts/legend.svelte.d.ts +30 -0
  220. package/src/charts/line-chart.css +27 -21
  221. package/src/charts/line-chart.svelte +64 -47
  222. package/src/charts/line-chart.svelte.d.ts +53 -0
  223. package/src/charts/number-chart.css +185 -163
  224. package/src/charts/number-chart.svelte +8 -4
  225. package/src/charts/number-chart.svelte.d.ts +58 -0
  226. package/src/charts/pop-value.svelte.d.ts +9 -0
  227. package/src/charts/primitives/chart-container.svelte.d.ts +9 -0
  228. package/src/charts/primitives/chart-style.svelte.d.ts +8 -0
  229. package/src/charts/primitives/chart-tooltip.svelte +1 -1
  230. package/src/charts/primitives/chart-tooltip.svelte.d.ts +26 -0
  231. package/src/charts/primitives/chart-utils.test.ts +17 -0
  232. package/src/charts/primitives/chart-utils.ts +16 -0
  233. package/src/charts/reference-line.css +18 -14
  234. package/src/charts/reference-line.svelte.d.ts +15 -0
  235. package/src/charts/reveal.svelte.d.ts +9 -0
  236. package/src/charts/ring-chart.css +82 -78
  237. package/src/charts/ring-chart.svelte +3 -3
  238. package/src/charts/ring-chart.svelte.d.ts +41 -0
  239. package/src/charts/sparkline.css +43 -34
  240. package/src/charts/sparkline.svelte +52 -8
  241. package/src/charts/sparkline.svelte.d.ts +51 -0
  242. package/src/charts/stat-card.css +110 -92
  243. package/src/charts/stat-card.svelte.d.ts +65 -0
  244. package/src/charts/time-series-chart.css +24 -19
  245. package/src/charts/time-series-chart.svelte +51 -14
  246. package/src/charts/time-series-chart.svelte.d.ts +30 -0
  247. package/src/charts/trend-pill.css +39 -32
  248. package/src/charts/trend-pill.svelte.d.ts +14 -0
  249. package/src/class-tokens.test.ts +34 -0
  250. package/src/components/chip/count-chip.svelte +35 -0
  251. package/src/components/chip/count-chip.svelte.d.ts +12 -0
  252. package/src/components/chip/index.ts +1 -0
  253. package/src/components/chip/tag-chip.svelte +6 -6
  254. package/src/components/chip/tag-chip.svelte.d.ts +20 -0
  255. package/src/components/copy/copy-button.svelte +22 -18
  256. package/src/components/copy/copy-button.svelte.d.ts +37 -0
  257. package/src/components/data-table/data-table.ts +1 -1
  258. package/src/components/data-table/infinite-scroll.svelte.d.ts +37 -0
  259. package/src/components/data-table/menu-key.ts +22 -0
  260. package/src/components/data-table/pagination.svelte +36 -11
  261. package/src/components/data-table/pagination.svelte.d.ts +14 -0
  262. package/src/components/data-table/row-arrow.svelte.d.ts +6 -0
  263. package/src/components/data-table/row-context-menu.svelte +10 -10
  264. package/src/components/data-table/row-context-menu.svelte.d.ts +15 -0
  265. package/src/components/data-table/sortable-head.svelte +55 -25
  266. package/src/components/data-table/sortable-head.svelte.d.ts +38 -0
  267. package/src/components/data-table/table-skeleton.svelte.d.ts +18 -0
  268. package/src/components/docs/doc-page.svelte +8 -4
  269. package/src/components/docs/doc-page.svelte.d.ts +34 -0
  270. package/src/components/docs/on-this-page.svelte +109 -101
  271. package/src/components/docs/on-this-page.svelte.d.ts +17 -0
  272. package/src/components/field-row/field-row.svelte.d.ts +16 -0
  273. package/src/components/hold-to-confirm/hold-to-confirm.svelte +113 -66
  274. package/src/components/hold-to-confirm/hold-to-confirm.svelte.d.ts +22 -0
  275. package/src/components/hold-to-confirm/hold-to-confirm.test.ts +105 -0
  276. package/src/components/language-flag/flags.ts +5 -0
  277. package/src/components/language-flag/index.ts +1 -0
  278. package/src/components/language-flag/language-flag.svelte +5 -12
  279. package/src/components/language-flag/language-flag.svelte.d.ts +11 -0
  280. package/src/components/list-page/detail-header.svelte.d.ts +15 -0
  281. package/src/components/list-page/detail-row.svelte.d.ts +9 -0
  282. package/src/components/list-page/detail-stack.svelte.d.ts +9 -0
  283. package/src/components/list-page/empty-state.svelte +106 -24
  284. package/src/components/list-page/empty-state.svelte.d.ts +23 -0
  285. package/src/components/list-page/filter-item.svelte +1 -1
  286. package/src/components/list-page/filter-item.svelte.d.ts +10 -0
  287. package/src/components/list-page/filter-popover.svelte +3 -6
  288. package/src/components/list-page/filter-popover.svelte.d.ts +20 -0
  289. package/src/components/list-page/grouped-list.svelte +3 -4
  290. package/src/components/list-page/grouped-list.svelte.d.ts +49 -0
  291. package/src/components/list-page/index.ts +1 -4
  292. package/src/components/list-page/list-page-shell.svelte.d.ts +31 -0
  293. package/src/components/list-page/master-detail-focus.test.ts +28 -0
  294. package/src/components/list-page/master-detail.svelte +57 -28
  295. package/src/components/list-page/master-detail.svelte.d.ts +18 -0
  296. package/src/components/list-page/master-detail.test.ts +1 -1
  297. package/src/components/list-page/notice-bar.svelte.d.ts +14 -0
  298. package/src/components/list-page/prev-next.svelte +7 -7
  299. package/src/components/list-page/prev-next.svelte.d.ts +14 -0
  300. package/src/components/list-page/rail-body.svelte.d.ts +8 -0
  301. package/src/components/list-page/rail-head.svelte.d.ts +10 -0
  302. package/src/components/list-page/rail-row.svelte.d.ts +18 -0
  303. package/src/components/mark/mark.svelte +2 -0
  304. package/src/components/mark/mark.svelte.d.ts +16 -0
  305. package/src/components/open-in/open-in.svelte +3 -3
  306. package/src/components/open-in/open-in.svelte.d.ts +35 -0
  307. package/src/components/picker/mark-picker.svelte +2 -2
  308. package/src/components/picker/mark-picker.svelte.d.ts +38 -0
  309. package/src/components/picker/picker.svelte +47 -3
  310. package/src/components/picker/picker.svelte.d.ts +59 -0
  311. package/src/components/picker/picker.test.ts +71 -0
  312. package/src/components/section-card/section-card.svelte.d.ts +13 -0
  313. package/src/components/section-header/section-header.svelte +2 -6
  314. package/src/components/section-header/section-header.svelte.d.ts +17 -0
  315. package/src/components/section-header/section-label.svelte.d.ts +10 -0
  316. package/src/components/segmented/animated-tabs.svelte.d.ts +61 -0
  317. package/src/components/segmented/section-runs.svelte.d.ts +23 -0
  318. package/src/components/segmented/segment.svelte +13 -19
  319. package/src/components/segmented/segment.svelte.d.ts +30 -0
  320. package/src/components/segmented/segmented-filter.svelte +4 -5
  321. package/src/components/segmented/segmented-filter.svelte.d.ts +43 -0
  322. package/src/components/segmented/segmented-nav.svelte.d.ts +17 -0
  323. package/src/components/segmented/segmented-overflow.svelte +1 -0
  324. package/src/components/segmented/segmented-overflow.svelte.d.ts +37 -0
  325. package/src/components/segmented/segmented-track.svelte +107 -103
  326. package/src/components/segmented/segmented-track.svelte.d.ts +19 -0
  327. package/src/components/star-rating-input/star-rating-input.svelte +151 -146
  328. package/src/components/star-rating-input/star-rating-input.svelte.d.ts +31 -0
  329. package/src/components/star-rating-input/star-rating-input.test.ts +90 -0
  330. package/src/components/svg/svg.svelte.d.ts +7 -0
  331. package/src/components/table-view/table-view.svelte +65 -73
  332. package/src/components/table-view/table-view.svelte.d.ts +96 -0
  333. package/src/components/table-view/table-view.test.ts +35 -6
  334. package/src/components/tags-input/tags-input.svelte +68 -16
  335. package/src/components/tags-input/tags-input.svelte.d.ts +40 -0
  336. package/src/components/tags-input/tags-input.test.ts +101 -0
  337. package/src/components/theme/index.ts +0 -1
  338. package/src/components/theme/theme-provider.svelte +8 -3
  339. package/src/components/theme/theme-provider.svelte.d.ts +19 -0
  340. package/src/components/theme/theme-provider.test.ts +5 -5
  341. package/src/components/toolbar/index.ts +2 -4
  342. package/src/components/toolbar/toolbar-search.svelte +4 -0
  343. package/src/components/toolbar/toolbar-search.svelte.d.ts +11 -0
  344. package/src/components/toolbar/toolbar.svelte +1 -1
  345. package/src/components/toolbar/toolbar.svelte.d.ts +47 -0
  346. package/src/components/toolbar/toolbar.test.ts +7 -0
  347. package/src/components/work-parts/group-head.svelte +1 -1
  348. package/src/components/work-parts/group-head.svelte.d.ts +16 -0
  349. package/src/components/work-parts/index.ts +0 -1
  350. package/src/components/work-parts/property-row.svelte.d.ts +19 -0
  351. package/src/components/work-parts/work-card.svelte.d.ts +11 -0
  352. package/src/components/work-parts/work-well.svelte.d.ts +13 -0
  353. package/src/css-layers.test.ts +138 -0
  354. package/src/editor/README.md +1 -1
  355. package/src/editor/block-move.test.ts +58 -0
  356. package/src/editor/block-move.ts +52 -0
  357. package/src/editor/content.css +356 -352
  358. package/src/editor/doc-blocks.ts +5 -4
  359. package/src/editor/doc-page.css +328 -324
  360. package/src/editor/editor-toolbar.svelte +46 -39
  361. package/src/editor/editor-toolbar.svelte.d.ts +13 -0
  362. package/src/editor/editor.svelte +218 -157
  363. package/src/editor/editor.svelte.d.ts +27 -0
  364. package/src/editor/extensions.ts +18 -2
  365. package/src/editor/image-align.test.ts +35 -0
  366. package/src/editor/image-toolbar.svelte +73 -57
  367. package/src/editor/image-toolbar.svelte.d.ts +11 -0
  368. package/src/editor/inline-editor.svelte +27 -16
  369. package/src/editor/inline-editor.svelte.d.ts +40 -0
  370. package/src/editor/renderer.svelte.d.ts +11 -0
  371. package/src/editor/slash-menu.svelte +103 -88
  372. package/src/editor/slash-menu.svelte.d.ts +17 -0
  373. package/src/effects/animated-beam/AnimatedBeam.svelte.d.ts +4 -0
  374. package/src/effects/animated-beam/diagrams/BeamSvg.svelte.d.ts +22 -0
  375. package/src/effects/animated-beam/path-calculator.svelte.ts +19 -5
  376. package/src/effects/border-beam/BorderBeam.svelte.d.ts +4 -0
  377. package/src/effects/border-beam/index.ts +10 -0
  378. package/src/effects/image-comparison/ImageComparison.css +114 -97
  379. package/src/effects/image-comparison/ImageComparison.svelte.d.ts +44 -0
  380. package/src/effects/image-comparison/index.ts +4 -0
  381. package/src/effects/image-reveal/ImageReveal.css +14 -9
  382. package/src/effects/image-reveal/ImageReveal.svelte.d.ts +11 -0
  383. package/src/effects/interactive-hover-button/InteractiveHoverButton.svelte +234 -222
  384. package/src/effects/interactive-hover-button/InteractiveHoverButton.svelte.d.ts +16 -0
  385. package/src/effects/interactive-hover-button/index.ts +1 -0
  386. package/src/effects/magic-card/MagicCard.css +49 -45
  387. package/src/effects/magic-card/MagicCard.svelte.d.ts +15 -0
  388. package/src/effects/magic-card/index.ts +1 -0
  389. package/src/effects/marquee/Marquee.css +83 -61
  390. package/src/effects/marquee/Marquee.svelte +7 -2
  391. package/src/effects/marquee/Marquee.svelte.d.ts +27 -0
  392. package/src/effects/marquee/index.ts +1 -0
  393. package/src/effects/marquee/marquee.test.ts +24 -0
  394. package/src/effects/progressive-blur/ProgressiveBlur.css +13 -8
  395. package/src/effects/progressive-blur/ProgressiveBlur.svelte.d.ts +14 -0
  396. package/src/effects/progressive-blur/index.ts +1 -0
  397. package/src/effects/reveal/AnimatedGroup.svelte.d.ts +14 -0
  398. package/src/effects/reveal/InView.svelte.d.ts +12 -0
  399. package/src/effects/reveal/TextEffect.svelte.d.ts +16 -0
  400. package/src/effects/reveal/reveal.css +89 -73
  401. package/src/effects/shader-gradient/ShaderGradient.svelte.d.ts +4 -0
  402. package/src/effects/spotlight/Spotlight.css +8 -4
  403. package/src/effects/spotlight/Spotlight.svelte.d.ts +8 -0
  404. package/src/effects/spotlight/index.ts +1 -0
  405. package/src/effects/theme-toggle/ThemeToggle.css +165 -160
  406. package/src/effects/theme-toggle/ThemeToggle.svelte +12 -6
  407. package/src/effects/theme-toggle/ThemeToggle.svelte.d.ts +24 -0
  408. package/src/effects/theme-toggle/index.ts +1 -0
  409. package/src/icon-names.test.ts +88 -0
  410. package/src/inbox/index.ts +1 -2
  411. package/src/inbox/thread-inbox.svelte +7 -5
  412. package/src/inbox/thread-inbox.svelte.d.ts +52 -0
  413. package/src/lib/dates.test.ts +63 -0
  414. package/src/lib/dates.ts +63 -0
  415. package/src/lib/focus.ts +19 -0
  416. package/src/lib/live-region.svelte +14 -0
  417. package/src/lib/live-region.svelte.d.ts +5 -0
  418. package/src/lib/panel.svelte +116 -0
  419. package/src/lib/panel.svelte.d.ts +30 -0
  420. package/src/lib/panel.ts +2 -2
  421. package/src/lib/tone.ts +15 -1
  422. package/src/modules.test.ts +119 -7
  423. package/src/onboarding/README.md +2 -2
  424. package/src/onboarding/onboarding-provider.svelte +1 -1
  425. package/src/onboarding/onboarding-provider.svelte.d.ts +17 -0
  426. package/src/onboarding/tour-card.svelte +10 -10
  427. package/src/onboarding/tour-card.svelte.d.ts +21 -0
  428. package/src/onboarding/tour-runner.svelte +62 -60
  429. package/src/onboarding/tour-runner.svelte.d.ts +11 -0
  430. package/src/panel/side-panel.svelte +8 -13
  431. package/src/panel/side-panel.svelte.d.ts +48 -0
  432. package/src/record/field-section.svelte.d.ts +19 -0
  433. package/src/record/format.ts +3 -15
  434. package/src/record/info-list.svelte +4 -3
  435. package/src/record/info-list.svelte.d.ts +25 -0
  436. package/src/record/logic.ts +2 -6
  437. package/src/record/next-up.svelte.d.ts +14 -0
  438. package/src/record/project-list.svelte.d.ts +18 -0
  439. package/src/record/record-header.svelte.d.ts +27 -0
  440. package/src/record/record-rail.svelte.d.ts +23 -0
  441. package/src/record/record-shell.svelte.d.ts +48 -0
  442. package/src/record/record-stats.svelte +4 -3
  443. package/src/record/record-stats.svelte.d.ts +10 -0
  444. package/src/record/record-timeline.svelte +3 -1
  445. package/src/record/record-timeline.svelte.d.ts +29 -0
  446. package/src/record/steps-rail.svelte +16 -13
  447. package/src/record/steps-rail.svelte.d.ts +23 -0
  448. package/src/record/where-we-are.svelte.d.ts +25 -0
  449. package/src/shadcn/accordion/accordion-content.svelte.d.ts +4 -0
  450. package/src/shadcn/accordion/accordion-item.svelte.d.ts +4 -0
  451. package/src/shadcn/accordion/accordion-trigger.svelte +1 -1
  452. package/src/shadcn/accordion/accordion-trigger.svelte.d.ts +12 -0
  453. package/src/shadcn/accordion/accordion.svelte.d.ts +4 -0
  454. package/src/shadcn/alert/alert-description.svelte.d.ts +5 -0
  455. package/src/shadcn/alert/alert-title.svelte.d.ts +5 -0
  456. package/src/shadcn/alert/alert-variants.ts +1 -1
  457. package/src/shadcn/alert/alert.svelte.d.ts +10 -0
  458. package/src/shadcn/alert-dialog/alert-dialog-action.svelte.d.ts +4 -0
  459. package/src/shadcn/alert-dialog/alert-dialog-cancel.svelte.d.ts +4 -0
  460. package/src/shadcn/alert-dialog/alert-dialog-content.svelte.d.ts +10 -0
  461. package/src/shadcn/alert-dialog/alert-dialog-description.svelte.d.ts +4 -0
  462. package/src/shadcn/alert-dialog/alert-dialog-footer.svelte.d.ts +9 -0
  463. package/src/shadcn/alert-dialog/alert-dialog-header.svelte.d.ts +5 -0
  464. package/src/shadcn/alert-dialog/alert-dialog-overlay.svelte.d.ts +4 -0
  465. package/src/shadcn/alert-dialog/alert-dialog-portal.svelte.d.ts +3 -0
  466. package/src/shadcn/alert-dialog/alert-dialog-title.svelte.d.ts +4 -0
  467. package/src/shadcn/alert-dialog/alert-dialog-trigger.svelte.d.ts +4 -0
  468. package/src/shadcn/alert-dialog/alert-dialog.svelte.d.ts +3 -0
  469. package/src/shadcn/attachment/attachment-action.svelte +7 -0
  470. package/src/shadcn/attachment/attachment-action.svelte.d.ts +4 -0
  471. package/src/shadcn/attachment/attachment-actions.svelte.d.ts +5 -0
  472. package/src/shadcn/attachment/attachment-content.svelte.d.ts +5 -0
  473. package/src/shadcn/attachment/attachment-description.svelte.d.ts +5 -0
  474. package/src/shadcn/attachment/attachment-group.svelte.d.ts +5 -0
  475. package/src/shadcn/attachment/attachment-media.svelte.d.ts +16 -0
  476. package/src/shadcn/attachment/attachment-title.svelte +3 -0
  477. package/src/shadcn/attachment/attachment-title.svelte.d.ts +5 -0
  478. package/src/shadcn/attachment/attachment-trigger.svelte +5 -0
  479. package/src/shadcn/attachment/attachment-trigger.svelte.d.ts +11 -0
  480. package/src/shadcn/attachment/attachment.svelte +4 -0
  481. package/src/shadcn/attachment/attachment.svelte.d.ts +25 -0
  482. package/src/shadcn/attachment/context.ts +13 -0
  483. package/src/shadcn/avatar/avatar-badge.svelte.d.ts +5 -0
  484. package/src/shadcn/avatar/avatar-fallback.svelte.d.ts +4 -0
  485. package/src/shadcn/avatar/avatar-group-count.svelte.d.ts +5 -0
  486. package/src/shadcn/avatar/avatar-group.svelte.d.ts +5 -0
  487. package/src/shadcn/avatar/avatar-image.svelte.d.ts +4 -0
  488. package/src/shadcn/avatar/avatar.svelte.d.ts +7 -0
  489. package/src/shadcn/badge/badge.svelte.d.ts +13 -0
  490. package/src/shadcn/breadcrumb/breadcrumb-ellipsis.svelte +1 -1
  491. package/src/shadcn/breadcrumb/breadcrumb-ellipsis.svelte.d.ts +5 -0
  492. package/src/shadcn/breadcrumb/breadcrumb-item.svelte.d.ts +5 -0
  493. package/src/shadcn/breadcrumb/breadcrumb-link.svelte.d.ts +11 -0
  494. package/src/shadcn/breadcrumb/breadcrumb-list.svelte.d.ts +5 -0
  495. package/src/shadcn/breadcrumb/breadcrumb-page.svelte.d.ts +5 -0
  496. package/src/shadcn/breadcrumb/breadcrumb-separator.svelte +1 -1
  497. package/src/shadcn/breadcrumb/breadcrumb-separator.svelte.d.ts +5 -0
  498. package/src/shadcn/breadcrumb/breadcrumb.svelte.d.ts +5 -0
  499. package/src/shadcn/bubble/bubble-content.svelte.d.ts +11 -0
  500. package/src/shadcn/bubble/bubble-group.svelte.d.ts +5 -0
  501. package/src/shadcn/bubble/bubble-reactions.svelte.d.ts +22 -0
  502. package/src/shadcn/bubble/bubble.svelte +1 -1
  503. package/src/shadcn/bubble/bubble.svelte.d.ts +22 -0
  504. package/src/shadcn/button/button.svelte +1 -1
  505. package/src/shadcn/button/button.svelte.d.ts +33 -0
  506. package/src/shadcn/calendar/calendar-caption.svelte.d.ts +19 -0
  507. package/src/shadcn/calendar/calendar-cell.svelte.d.ts +4 -0
  508. package/src/shadcn/calendar/calendar-day.svelte.d.ts +4 -0
  509. package/src/shadcn/calendar/calendar-grid-body.svelte.d.ts +4 -0
  510. package/src/shadcn/calendar/calendar-grid-head.svelte.d.ts +4 -0
  511. package/src/shadcn/calendar/calendar-grid-row.svelte.d.ts +4 -0
  512. package/src/shadcn/calendar/calendar-grid.svelte.d.ts +4 -0
  513. package/src/shadcn/calendar/calendar-head-cell.svelte.d.ts +4 -0
  514. package/src/shadcn/calendar/calendar-header.svelte.d.ts +4 -0
  515. package/src/shadcn/calendar/calendar-heading.svelte.d.ts +4 -0
  516. package/src/shadcn/calendar/calendar-month-select.svelte +1 -1
  517. package/src/shadcn/calendar/calendar-month-select.svelte.d.ts +4 -0
  518. package/src/shadcn/calendar/calendar-month.svelte.d.ts +5 -0
  519. package/src/shadcn/calendar/calendar-months.svelte.d.ts +5 -0
  520. package/src/shadcn/calendar/calendar-nav.svelte.d.ts +5 -0
  521. package/src/shadcn/calendar/calendar-next-button.svelte +1 -1
  522. package/src/shadcn/calendar/calendar-next-button.svelte.d.ts +8 -0
  523. package/src/shadcn/calendar/calendar-prev-button.svelte +1 -1
  524. package/src/shadcn/calendar/calendar-prev-button.svelte.d.ts +8 -0
  525. package/src/shadcn/calendar/calendar-year-select.svelte +1 -1
  526. package/src/shadcn/calendar/calendar-year-select.svelte.d.ts +4 -0
  527. package/src/shadcn/calendar/calendar.svelte.d.ts +21 -0
  528. package/src/shadcn/card/card-action.svelte.d.ts +5 -0
  529. package/src/shadcn/card/card-content.svelte.d.ts +5 -0
  530. package/src/shadcn/card/card-description.svelte.d.ts +5 -0
  531. package/src/shadcn/card/card-footer.svelte.d.ts +5 -0
  532. package/src/shadcn/card/card-header.svelte.d.ts +5 -0
  533. package/src/shadcn/card/card-title.svelte.d.ts +8 -0
  534. package/src/shadcn/card/card.svelte.d.ts +8 -0
  535. package/src/shadcn/checkbox/checkbox.svelte +2 -2
  536. package/src/shadcn/checkbox/checkbox.svelte.d.ts +4 -0
  537. package/src/shadcn/code-block/code-block-actions.svelte.d.ts +5 -0
  538. package/src/shadcn/code-block/code-block-content.svelte +1 -1
  539. package/src/shadcn/code-block/code-block-content.svelte.d.ts +12 -0
  540. package/src/shadcn/code-block/code-block-copy-button.svelte.d.ts +3 -0
  541. package/src/shadcn/code-block/code-block-footer.svelte.d.ts +5 -0
  542. package/src/shadcn/code-block/code-block-header.svelte +1 -1
  543. package/src/shadcn/code-block/code-block-header.svelte.d.ts +5 -0
  544. package/src/shadcn/code-block/code-block-line.svelte +1 -1
  545. package/src/shadcn/code-block/code-block-line.svelte.d.ts +25 -0
  546. package/src/shadcn/code-block/code-block-title.svelte +1 -1
  547. package/src/shadcn/code-block/code-block-title.svelte.d.ts +5 -0
  548. package/src/shadcn/code-block/code-block.svelte +3 -2
  549. package/src/shadcn/code-block/code-block.svelte.d.ts +18 -0
  550. package/src/shadcn/collapsible/collapsible-content.svelte.d.ts +4 -0
  551. package/src/shadcn/collapsible/collapsible-trigger.svelte.d.ts +4 -0
  552. package/src/shadcn/collapsible/collapsible.svelte.d.ts +4 -0
  553. package/src/shadcn/command/command-dialog.svelte.d.ts +14 -0
  554. package/src/shadcn/command/command-empty.svelte.d.ts +4 -0
  555. package/src/shadcn/command/command-group.svelte.d.ts +7 -0
  556. package/src/shadcn/command/command-input.svelte +2 -2
  557. package/src/shadcn/command/command-input.svelte.d.ts +13 -0
  558. package/src/shadcn/command/command-item.svelte +1 -1
  559. package/src/shadcn/command/command-item.svelte.d.ts +4 -0
  560. package/src/shadcn/command/command-link-item.svelte.d.ts +4 -0
  561. package/src/shadcn/command/command-list.svelte +7 -1
  562. package/src/shadcn/command/command-list.svelte.d.ts +4 -0
  563. package/src/shadcn/command/command-loading.svelte.d.ts +4 -0
  564. package/src/shadcn/command/command-separator.svelte.d.ts +4 -0
  565. package/src/shadcn/command/command-shortcut.svelte.d.ts +5 -0
  566. package/src/shadcn/command/command.svelte.d.ts +8 -0
  567. package/src/shadcn/context-menu/context-menu-checkbox-item.svelte +1 -1
  568. package/src/shadcn/context-menu/context-menu-checkbox-item.svelte.d.ts +10 -0
  569. package/src/shadcn/context-menu/context-menu-content.svelte.d.ts +10 -0
  570. package/src/shadcn/context-menu/context-menu-group-heading.svelte.d.ts +7 -0
  571. package/src/shadcn/context-menu/context-menu-group.svelte.d.ts +4 -0
  572. package/src/shadcn/context-menu/context-menu-item.svelte +1 -1
  573. package/src/shadcn/context-menu/context-menu-item.svelte.d.ts +8 -0
  574. package/src/shadcn/context-menu/context-menu-label.svelte.d.ts +8 -0
  575. package/src/shadcn/context-menu/context-menu-portal.svelte.d.ts +3 -0
  576. package/src/shadcn/context-menu/context-menu-radio-group.svelte.d.ts +4 -0
  577. package/src/shadcn/context-menu/context-menu-radio-item.svelte +1 -1
  578. package/src/shadcn/context-menu/context-menu-radio-item.svelte.d.ts +8 -0
  579. package/src/shadcn/context-menu/context-menu-separator.svelte.d.ts +4 -0
  580. package/src/shadcn/context-menu/context-menu-shortcut.svelte.d.ts +5 -0
  581. package/src/shadcn/context-menu/context-menu-sub-content.svelte.d.ts +4 -0
  582. package/src/shadcn/context-menu/context-menu-sub-trigger.svelte +1 -1
  583. package/src/shadcn/context-menu/context-menu-sub-trigger.svelte.d.ts +8 -0
  584. package/src/shadcn/context-menu/context-menu-sub.svelte.d.ts +3 -0
  585. package/src/shadcn/context-menu/context-menu-trigger.svelte.d.ts +4 -0
  586. package/src/shadcn/context-menu/context-menu.svelte.d.ts +3 -0
  587. package/src/shadcn/dialog/dialog-body.svelte.d.ts +5 -0
  588. package/src/shadcn/dialog/dialog-close.svelte.d.ts +4 -0
  589. package/src/shadcn/dialog/dialog-content.svelte +3 -4
  590. package/src/shadcn/dialog/dialog-content.svelte.d.ts +16 -0
  591. package/src/shadcn/dialog/dialog-description.svelte.d.ts +4 -0
  592. package/src/shadcn/dialog/dialog-footer.svelte.d.ts +15 -0
  593. package/src/shadcn/dialog/dialog-header.svelte.d.ts +5 -0
  594. package/src/shadcn/dialog/dialog-overlay.svelte.d.ts +4 -0
  595. package/src/shadcn/dialog/dialog-portal.svelte.d.ts +3 -0
  596. package/src/shadcn/dialog/dialog-title.svelte.d.ts +4 -0
  597. package/src/shadcn/dialog/dialog-trigger.svelte.d.ts +4 -0
  598. package/src/shadcn/dialog/dialog.svelte.d.ts +3 -0
  599. package/src/shadcn/dropdown-menu/dropdown-menu-checkbox-group.svelte.d.ts +4 -0
  600. package/src/shadcn/dropdown-menu/dropdown-menu-checkbox-item.svelte +2 -2
  601. package/src/shadcn/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +9 -0
  602. package/src/shadcn/dropdown-menu/dropdown-menu-content.svelte.d.ts +10 -0
  603. package/src/shadcn/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +8 -0
  604. package/src/shadcn/dropdown-menu/dropdown-menu-group.svelte.d.ts +4 -0
  605. package/src/shadcn/dropdown-menu/dropdown-menu-item.svelte.d.ts +8 -0
  606. package/src/shadcn/dropdown-menu/dropdown-menu-label.svelte.d.ts +8 -0
  607. package/src/shadcn/dropdown-menu/dropdown-menu-portal.svelte.d.ts +3 -0
  608. package/src/shadcn/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +4 -0
  609. package/src/shadcn/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
  610. package/src/shadcn/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +4 -0
  611. package/src/shadcn/dropdown-menu/dropdown-menu-separator.svelte.d.ts +4 -0
  612. package/src/shadcn/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts +5 -0
  613. package/src/shadcn/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +4 -0
  614. package/src/shadcn/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
  615. package/src/shadcn/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +7 -0
  616. package/src/shadcn/dropdown-menu/dropdown-menu-sub.svelte.d.ts +3 -0
  617. package/src/shadcn/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +4 -0
  618. package/src/shadcn/dropdown-menu/dropdown-menu.svelte.d.ts +3 -0
  619. package/src/shadcn/dropdown-menu/menu-item.ts +1 -1
  620. package/src/shadcn/empty/empty-content.svelte.d.ts +5 -0
  621. package/src/shadcn/empty/empty-description.svelte.d.ts +5 -0
  622. package/src/shadcn/empty/empty-header.svelte.d.ts +5 -0
  623. package/src/shadcn/empty/empty-media.svelte.d.ts +16 -0
  624. package/src/shadcn/empty/empty-title.svelte.d.ts +5 -0
  625. package/src/shadcn/empty/empty.svelte.d.ts +5 -0
  626. package/src/shadcn/field/field-content.svelte.d.ts +5 -0
  627. package/src/shadcn/field/field-description.svelte.d.ts +5 -0
  628. package/src/shadcn/field/field-error.svelte +1 -1
  629. package/src/shadcn/field/field-error.svelte.d.ts +12 -0
  630. package/src/shadcn/field/field-group.svelte.d.ts +5 -0
  631. package/src/shadcn/field/field-label.svelte.d.ts +10 -0
  632. package/src/shadcn/field/field-legend.svelte.d.ts +8 -0
  633. package/src/shadcn/field/field-separator.svelte.d.ts +9 -0
  634. package/src/shadcn/field/field-set.svelte.d.ts +5 -0
  635. package/src/shadcn/field/field-title.svelte.d.ts +5 -0
  636. package/src/shadcn/field/field.svelte +1 -1
  637. package/src/shadcn/field/field.svelte.d.ts +17 -0
  638. package/src/shadcn/field/simple-field.svelte.d.ts +15 -0
  639. package/src/shadcn/hooks/highlighter.ts +51 -2
  640. package/src/shadcn/hover-card/hover-card-content.svelte.d.ts +10 -0
  641. package/src/shadcn/hover-card/hover-card-portal.svelte.d.ts +3 -0
  642. package/src/shadcn/hover-card/hover-card-trigger.svelte.d.ts +4 -0
  643. package/src/shadcn/hover-card/hover-card.svelte.d.ts +3 -0
  644. package/src/shadcn/input/input.svelte.d.ts +13 -0
  645. package/src/shadcn/input/secret-input.svelte +3 -3
  646. package/src/shadcn/input/secret-input.svelte.d.ts +9 -0
  647. package/src/shadcn/input-otp/input-otp-group.svelte.d.ts +5 -0
  648. package/src/shadcn/input-otp/input-otp-separator.svelte.d.ts +5 -0
  649. package/src/shadcn/input-otp/input-otp-slot.svelte.d.ts +4 -0
  650. package/src/shadcn/input-otp/input-otp.svelte.d.ts +4 -0
  651. package/src/shadcn/kbd/kbd-group.svelte.d.ts +5 -0
  652. package/src/shadcn/kbd/kbd.svelte.d.ts +5 -0
  653. package/src/shadcn/label/label.svelte.d.ts +4 -0
  654. package/src/shadcn/marker/marker-content.svelte.d.ts +5 -0
  655. package/src/shadcn/marker/marker-icon.svelte.d.ts +5 -0
  656. package/src/shadcn/marker/marker.svelte.d.ts +21 -0
  657. package/src/shadcn/message/message-avatar.svelte.d.ts +5 -0
  658. package/src/shadcn/message/message-content.svelte.d.ts +5 -0
  659. package/src/shadcn/message/message-footer.svelte.d.ts +5 -0
  660. package/src/shadcn/message/message-group.svelte.d.ts +5 -0
  661. package/src/shadcn/message/message-header.svelte.d.ts +5 -0
  662. package/src/shadcn/message/message.svelte.d.ts +8 -0
  663. package/src/shadcn/message-scroller/message-scroller-button.svelte +13 -1
  664. package/src/shadcn/message-scroller/message-scroller-button.svelte.d.ts +9 -0
  665. package/src/shadcn/message-scroller/message-scroller-content.svelte.d.ts +4 -0
  666. package/src/shadcn/message-scroller/message-scroller-item.svelte.d.ts +4 -0
  667. package/src/shadcn/message-scroller/message-scroller-provider.svelte.d.ts +4 -0
  668. package/src/shadcn/message-scroller/message-scroller-viewport.svelte.d.ts +4 -0
  669. package/src/shadcn/message-scroller/message-scroller.svelte.d.ts +4 -0
  670. package/src/shadcn/popover/popover-close.svelte.d.ts +4 -0
  671. package/src/shadcn/popover/popover-content.svelte.d.ts +10 -0
  672. package/src/shadcn/popover/popover-description.svelte.d.ts +5 -0
  673. package/src/shadcn/popover/popover-header.svelte.d.ts +5 -0
  674. package/src/shadcn/popover/popover-portal.svelte.d.ts +3 -0
  675. package/src/shadcn/popover/popover-title.svelte.d.ts +5 -0
  676. package/src/shadcn/popover/popover-trigger.svelte.d.ts +4 -0
  677. package/src/shadcn/popover/popover.svelte.d.ts +3 -0
  678. package/src/shadcn/progress/progress.svelte.d.ts +10 -0
  679. package/src/shadcn/radio-group/radio-group-item.svelte +1 -1
  680. package/src/shadcn/radio-group/radio-group-item.svelte.d.ts +4 -0
  681. package/src/shadcn/radio-group/radio-group.svelte.d.ts +4 -0
  682. package/src/shadcn/scroll-area/scroll-area-scrollbar.svelte.d.ts +4 -0
  683. package/src/shadcn/scroll-area/scroll-area.svelte +1 -0
  684. package/src/shadcn/scroll-area/scroll-area.svelte.d.ts +11 -0
  685. package/src/shadcn/select/select-content.svelte.d.ts +11 -0
  686. package/src/shadcn/select/select-group-heading.svelte.d.ts +10 -0
  687. package/src/shadcn/select/select-group.svelte.d.ts +4 -0
  688. package/src/shadcn/select/select-item.svelte +1 -1
  689. package/src/shadcn/select/select-item.svelte.d.ts +4 -0
  690. package/src/shadcn/select/select-label.svelte.d.ts +6 -0
  691. package/src/shadcn/select/select-portal.svelte.d.ts +3 -0
  692. package/src/shadcn/select/select-scroll-down-button.svelte +1 -1
  693. package/src/shadcn/select/select-scroll-down-button.svelte.d.ts +4 -0
  694. package/src/shadcn/select/select-scroll-up-button.svelte +1 -1
  695. package/src/shadcn/select/select-scroll-up-button.svelte.d.ts +4 -0
  696. package/src/shadcn/select/select-separator.svelte.d.ts +4 -0
  697. package/src/shadcn/select/select-trigger.svelte +1 -0
  698. package/src/shadcn/select/select-trigger.svelte.d.ts +8 -0
  699. package/src/shadcn/select/select.svelte.d.ts +3 -0
  700. package/src/shadcn/separator/separator.svelte.d.ts +4 -0
  701. package/src/shadcn/sheet/sheet-body.svelte.d.ts +5 -0
  702. package/src/shadcn/sheet/sheet-close.svelte.d.ts +4 -0
  703. package/src/shadcn/sheet/sheet-content.svelte +5 -7
  704. package/src/shadcn/sheet/sheet-content.svelte.d.ts +21 -0
  705. package/src/shadcn/sheet/sheet-description.svelte.d.ts +4 -0
  706. package/src/shadcn/sheet/sheet-footer.svelte.d.ts +12 -0
  707. package/src/shadcn/sheet/sheet-header.svelte.d.ts +5 -0
  708. package/src/shadcn/sheet/sheet-overlay.svelte.d.ts +4 -0
  709. package/src/shadcn/sheet/sheet-portal.svelte.d.ts +3 -0
  710. package/src/shadcn/sheet/sheet-title.svelte.d.ts +4 -0
  711. package/src/shadcn/sheet/sheet-trigger.svelte.d.ts +4 -0
  712. package/src/shadcn/sheet/sheet.css +47 -43
  713. package/src/shadcn/sheet/sheet.svelte.d.ts +3 -0
  714. package/src/shadcn/sidebar/constants.ts +1 -1
  715. package/src/shadcn/sidebar/context.svelte.ts +16 -1
  716. package/src/shadcn/sidebar/sidebar-content.svelte.d.ts +5 -0
  717. package/src/shadcn/sidebar/sidebar-footer.svelte.d.ts +5 -0
  718. package/src/shadcn/sidebar/sidebar-group-action.svelte.d.ts +11 -0
  719. package/src/shadcn/sidebar/sidebar-group-content.svelte.d.ts +5 -0
  720. package/src/shadcn/sidebar/sidebar-group-label.svelte.d.ts +11 -0
  721. package/src/shadcn/sidebar/sidebar-group.svelte.d.ts +5 -0
  722. package/src/shadcn/sidebar/sidebar-header.svelte.d.ts +5 -0
  723. package/src/shadcn/sidebar/sidebar-input.svelte.d.ts +11 -0
  724. package/src/shadcn/sidebar/sidebar-inset.svelte.d.ts +5 -0
  725. package/src/shadcn/sidebar/sidebar-menu-action.svelte.d.ts +12 -0
  726. package/src/shadcn/sidebar/sidebar-menu-badge.svelte.d.ts +5 -0
  727. package/src/shadcn/sidebar/sidebar-menu-button.svelte.d.ts +31 -0
  728. package/src/shadcn/sidebar/sidebar-menu-item.svelte.d.ts +5 -0
  729. package/src/shadcn/sidebar/sidebar-menu-skeleton.svelte.d.ts +8 -0
  730. package/src/shadcn/sidebar/sidebar-menu-sub-button.svelte.d.ts +13 -0
  731. package/src/shadcn/sidebar/sidebar-menu-sub-item.svelte.d.ts +5 -0
  732. package/src/shadcn/sidebar/sidebar-menu-sub.svelte.d.ts +5 -0
  733. package/src/shadcn/sidebar/sidebar-menu.svelte.d.ts +5 -0
  734. package/src/shadcn/sidebar/sidebar-provider.svelte +3 -0
  735. package/src/shadcn/sidebar/sidebar-provider.svelte.d.ts +9 -0
  736. package/src/shadcn/sidebar/sidebar-rail.svelte.d.ts +5 -0
  737. package/src/shadcn/sidebar/sidebar-separator.svelte.d.ts +13 -0
  738. package/src/shadcn/sidebar/sidebar-trigger.svelte +3 -1
  739. package/src/shadcn/sidebar/sidebar-trigger.svelte.d.ts +8 -0
  740. package/src/shadcn/sidebar/sidebar.svelte +3 -0
  741. package/src/shadcn/sidebar/sidebar.svelte.d.ts +10 -0
  742. package/src/shadcn/sidebar/sidebar.test.ts +69 -0
  743. package/src/shadcn/skeleton/skeleton-delay.svelte.d.ts +20 -0
  744. package/src/shadcn/skeleton/skeleton.svelte.d.ts +5 -0
  745. package/src/shadcn/slider/slider.svelte.d.ts +11 -0
  746. package/src/shadcn/sonner/sonner.svelte +4 -4
  747. package/src/shadcn/sonner/sonner.svelte.d.ts +4 -0
  748. package/src/shadcn/spinner/spinner.svelte.d.ts +4 -0
  749. package/src/shadcn/switch/switch.svelte.d.ts +8 -0
  750. package/src/shadcn/table/table-body.svelte.d.ts +5 -0
  751. package/src/shadcn/table/table-caption.svelte.d.ts +5 -0
  752. package/src/shadcn/table/table-cell.svelte +16 -12
  753. package/src/shadcn/table/table-cell.svelte.d.ts +9 -0
  754. package/src/shadcn/table/table-footer.svelte.d.ts +5 -0
  755. package/src/shadcn/table/table-head.svelte.d.ts +5 -0
  756. package/src/shadcn/table/table-header.svelte.d.ts +5 -0
  757. package/src/shadcn/table/table-row.svelte.d.ts +5 -0
  758. package/src/shadcn/table/table.svelte.d.ts +5 -0
  759. package/src/shadcn/tabs/tabs-content.svelte.d.ts +4 -0
  760. package/src/shadcn/tabs/tabs-list.svelte.d.ts +8 -0
  761. package/src/shadcn/tabs/tabs-trigger.svelte.d.ts +4 -0
  762. package/src/shadcn/tabs/tabs.svelte.d.ts +4 -0
  763. package/src/shadcn/textarea/textarea.svelte.d.ts +5 -0
  764. package/src/shadcn/toggle/toggle.svelte.d.ts +10 -0
  765. package/src/shadcn/toggle-group/toggle-group-item.svelte.d.ts +6 -0
  766. package/src/shadcn/toggle-group/toggle-group.svelte.d.ts +15 -0
  767. package/src/shadcn/tooltip/tooltip-content.svelte.d.ts +11 -0
  768. package/src/shadcn/tooltip/tooltip-portal.svelte.d.ts +4 -0
  769. package/src/shadcn/tooltip/tooltip-provider.svelte.d.ts +4 -0
  770. package/src/shadcn/tooltip/tooltip-trigger.svelte.d.ts +4 -0
  771. package/src/shadcn/tooltip/tooltip.svelte.d.ts +4 -0
  772. package/src/shadcn/trace/trace-collapsible-content.svelte.d.ts +4 -0
  773. package/src/shadcn/trace/trace-collapsible-trigger.svelte +2 -2
  774. package/src/shadcn/trace/trace-collapsible-trigger.svelte.d.ts +4 -0
  775. package/src/shadcn/trace/trace-collapsible.svelte.d.ts +4 -0
  776. package/src/shadcn/trace/trace-description.svelte +1 -1
  777. package/src/shadcn/trace/trace-description.svelte.d.ts +5 -0
  778. package/src/shadcn/trace/trace-icon.svelte.d.ts +5 -0
  779. package/src/shadcn/trace/trace-line.svelte +1 -1
  780. package/src/shadcn/trace/trace-line.svelte.d.ts +9 -0
  781. package/src/shadcn/trace/trace-title.svelte.d.ts +5 -0
  782. package/src/shadcn/trace/trace.svelte.d.ts +5 -0
  783. package/src/slides/Controls.svelte +96 -92
  784. package/src/slides/Controls.svelte.d.ts +10 -0
  785. package/src/slides/Deck.svelte +65 -58
  786. package/src/slides/Deck.svelte.d.ts +5 -0
  787. package/src/slides/Fragment.svelte +25 -21
  788. package/src/slides/Fragment.svelte.d.ts +15 -0
  789. package/src/slides/Overview.svelte +65 -60
  790. package/src/slides/Overview.svelte.d.ts +8 -0
  791. package/src/slides/Presenter.svelte +146 -139
  792. package/src/slides/Presenter.svelte.d.ts +8 -0
  793. package/src/slides/README.md +1 -1
  794. package/src/slides/Slide.svelte +68 -63
  795. package/src/slides/Slide.svelte.d.ts +18 -0
  796. package/src/slides/SlideList.svelte.d.ts +9 -0
  797. package/src/slides/deck-controller.svelte.ts +3 -22
  798. package/src/slides/deck-keys.test.ts +49 -0
  799. package/src/slides/theme.css +197 -176
  800. package/src/slides/types.ts +2 -1
  801. package/src/status/index.ts +0 -1
  802. package/src/status/status-badge.svelte +7 -5
  803. package/src/status/status-badge.svelte.d.ts +28 -0
  804. package/src/status/status-badge.test.ts +44 -0
  805. package/src/status/status-dot.svelte +54 -49
  806. package/src/status/status-dot.svelte.d.ts +16 -0
  807. package/src/status/status-icon.svelte +19 -6
  808. package/src/status/status-icon.svelte.d.ts +14 -0
  809. package/src/status/status-pill.svelte +2 -8
  810. package/src/status/status-pill.svelte.d.ts +13 -0
  811. package/src/test-setup.test.ts +5 -0
  812. package/src/thread/thread-body.svelte.d.ts +9 -0
  813. package/src/thread/thread-events.svelte.d.ts +8 -0
  814. package/src/thread/thread-focus.svelte.test.ts +90 -0
  815. package/src/thread/thread.svelte +73 -21
  816. package/src/thread/thread.svelte.d.ts +40 -0
  817. package/src/tokens/base.css +47 -45
  818. package/src/tokens/design.css +8 -0
  819. package/src/tokens/index.css +3 -0
  820. package/src/triage/triage-plan.svelte +42 -9
  821. package/src/triage/triage-plan.svelte.d.ts +28 -0
  822. package/src/triage/triage-queue.svelte +61 -23
  823. package/src/triage/triage-queue.svelte.d.ts +41 -0
  824. package/src/triage/triage-task.svelte +11 -3
  825. package/src/triage/triage-task.svelte.d.ts +22 -0
  826. package/src/triage/triage.svelte.test.ts +130 -0
  827. package/src/work/README.md +8 -8
  828. package/src/work/dates.ts +3 -3
  829. package/src/work/detail/detail-types.ts +1 -29
  830. package/src/work/detail/task-chip.svelte.d.ts +10 -0
  831. package/src/work/detail/task-detail.svelte +18 -17
  832. package/src/work/detail/task-detail.svelte.d.ts +36 -0
  833. package/src/work/docs/doc-editor-page.svelte +20 -16
  834. package/src/work/docs/doc-editor-page.svelte.d.ts +31 -0
  835. package/src/work/docs/doc-menu.svelte +46 -39
  836. package/src/work/docs/doc-menu.svelte.d.ts +35 -0
  837. package/src/work/docs/edited-chip.svelte +9 -9
  838. package/src/work/docs/edited-chip.svelte.d.ts +26 -0
  839. package/src/work/docs/edited.ts +4 -7
  840. package/src/work/gantt/gantt-bar.svelte +87 -78
  841. package/src/work/gantt/gantt-bar.svelte.d.ts +29 -0
  842. package/src/work/gantt/gantt-grid.svelte +30 -26
  843. package/src/work/gantt/gantt-grid.svelte.d.ts +14 -0
  844. package/src/work/gantt/gantt-group-row.svelte +12 -8
  845. package/src/work/gantt/gantt-group-row.svelte.d.ts +12 -0
  846. package/src/work/gantt/gantt-header.svelte +2 -4
  847. package/src/work/gantt/gantt-header.svelte.d.ts +17 -0
  848. package/src/work/gantt/gantt-task-row.svelte +43 -36
  849. package/src/work/gantt/gantt-task-row.svelte.d.ts +53 -0
  850. package/src/work/gantt/gantt.css +14 -10
  851. package/src/work/gantt/gantt.test.ts +14 -2
  852. package/src/work/inbox/inbox-card.svelte +17 -25
  853. package/src/work/inbox/inbox-card.svelte.d.ts +22 -0
  854. package/src/work/inbox/inbox-draft.svelte +3 -3
  855. package/src/work/inbox/inbox-draft.svelte.d.ts +18 -0
  856. package/src/work/inbox/inbox-logic.ts +4 -16
  857. package/src/work/inbox/inbox-trace.svelte.d.ts +11 -0
  858. package/src/work/index.ts +1 -27
  859. package/src/work/kanban-board.svelte +103 -66
  860. package/src/work/kanban-board.svelte.d.ts +107 -0
  861. package/src/work/kanban-board.svelte.test.ts +89 -0
  862. package/src/work/kanban-column-head.svelte.d.ts +40 -0
  863. package/src/work/kanban-column.svelte +45 -43
  864. package/src/work/kanban-column.svelte.d.ts +20 -0
  865. package/src/work/kanban-fold-chevron.svelte +15 -11
  866. package/src/work/kanban-fold-chevron.svelte.d.ts +8 -0
  867. package/src/work/kanban-hidden-rail.svelte +2 -1
  868. package/src/work/kanban-hidden-rail.svelte.d.ts +39 -0
  869. package/src/work/kanban-keyboard.ts +8 -6
  870. package/src/work/task-gantt.svelte +18 -4
  871. package/src/work/task-gantt.svelte.d.ts +85 -0
  872. package/src/work/task-list.svelte +166 -116
  873. package/src/work/task-list.svelte.d.ts +81 -0
  874. package/src/work/task-list.svelte.test.ts +113 -0
  875. package/src/work/time/duration.ts +2 -3
  876. package/src/work/time/time-chip.svelte +2 -4
  877. package/src/work/time/time-chip.svelte.d.ts +14 -0
  878. package/src/work/time/time-dot.svelte +30 -25
  879. package/src/work/time/time-dot.svelte.d.ts +9 -0
  880. package/src/work/time/time-ring.svelte +15 -11
  881. package/src/work/time/time-ring.svelte.d.ts +18 -0
  882. package/src/work/time/time-tracker.svelte +49 -44
  883. package/src/work/time/time-tracker.svelte.d.ts +59 -0
  884. package/dist/ai/index.js +0 -44
  885. package/dist/ai/thinking-dots/index.js +0 -3
  886. package/dist/components/icon/index.js +0 -1
  887. package/dist/components/locale-switch/index.js +0 -1
  888. package/dist/icons/trades.js +0 -49
  889. package/dist/index.js +0 -18
  890. package/dist/record/demo-data.js +0 -485
  891. package/dist/status/pill-tint.js +0 -13
  892. package/dist/test-setup.js +0 -30
  893. package/dist/work/presets/sales.js +0 -39
  894. package/src/agents/demo.svelte +0 -137
  895. package/src/ai/confirmation/ConfirmationAccepted.svelte +0 -23
  896. package/src/ai/confirmation/ConfirmationFailed.svelte +0 -23
  897. package/src/ai/confirmation/ConfirmationRejected.svelte +0 -23
  898. package/src/ai/index.ts +0 -111
  899. package/src/ai/thinking-dots/ThinkingDots.svelte +0 -42
  900. package/src/ai/thinking-dots/index.ts +0 -5
  901. package/src/charts/dashboard/dashboard-empty.svelte +0 -55
  902. package/src/charts/dashboard/data-panel.svelte +0 -81
  903. package/src/charts/dashboard/data-sort-head.svelte +0 -102
  904. package/src/components/icon/icon.svelte +0 -23
  905. package/src/components/icon/index.ts +0 -1
  906. package/src/components/list-page/detail-empty.svelte +0 -45
  907. package/src/components/list-page/detail-panel.svelte +0 -82
  908. package/src/components/list-page/rail-empty.svelte +0 -44
  909. package/src/components/locale-switch/index.ts +0 -1
  910. package/src/components/locale-switch/locale-switch.svelte +0 -59
  911. package/src/components/work-parts/count-chip.svelte +0 -20
  912. package/src/design/index.css +0 -215
  913. package/src/design/polish.css +0 -150
  914. package/src/icons/TradeIcon.svelte +0 -16
  915. package/src/icons/trades.ts +0 -89
  916. package/src/index.ts +0 -53
  917. package/src/onboarding/demo.svelte +0 -105
  918. package/src/record/demo-data.ts +0 -352
  919. package/src/record/record-demo.svelte +0 -342
  920. package/src/slides/demo-slides.svelte +0 -382
  921. package/src/slides/demo.svelte +0 -180
  922. package/src/status/pill-tint.ts +0 -16
  923. package/src/test-setup.ts +0 -34
  924. package/src/work/demo.svelte +0 -553
  925. package/src/work/detail/detail-demo.svelte +0 -255
  926. package/src/work/detail/task-property.svelte +0 -17
  927. package/src/work/detail/task-thread.svelte +0 -221
  928. package/src/work/docs/docs-demo.svelte +0 -227
  929. package/src/work/presets/sales.ts +0 -16
package/COMPONENTS.md CHANGED
@@ -3,7 +3,7 @@
3
3
  Every component in `@heyramzi/ui`, one line each. Import a component from its subpath, e.g.
4
4
  `import { Button } from "@heyramzi/ui/shadcn/button"`.
5
5
 
6
- The style layer lives in [`src/tokens.css`](./src/tokens.css) and the motion CSS in
6
+ The style layer lives in [`src/tokens`](./src/tokens) and the motion CSS in
7
7
  [`src/animations`](./src/animations). Components that already exist in
8
8
  [shadcn-svelte](https://shadcn-svelte.com) are linked there from the root README.
9
9
 
@@ -64,31 +64,31 @@ Generic pieces built on the primitives, imported from `@heyramzi/ui/components/<
64
64
  - `copy` — CopyButton, copyText, copyRichText, htmlToPlainText, Copied
65
65
  - `data-table` — SortableHead, Pagination, InfiniteScroll, RowContextMenu, TableSkeleton, and the sort, page and filter helpers
66
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
- - `toolbar` — Toolbar: one row at any width; search, tabs and the view switch fold into menus in a narrow pane
71
- - `locale-switch` — LocaleSwitch, a language switch on SegmentedFilter
67
+ - `language-flag` — LanguageFlag, LANGUAGE_FLAGS (code to `/flags/*.svg`, also a SegmentedFilter option's `image`)
68
+ - `list-page` — ListPageShell, MasterDetail, GroupedList, RailRow and the rest of the master-detail page kit, DetailPanel, ToolbarSearch, toolbarTriggerClass, NoticeBar, EmptyState, FilterPopover, setSectionHost
69
+ - `toolbar` — Toolbar: one row at any width; search, tabs and the view switch fold into menus in a narrow pane. Its search box is `list-page`'s ToolbarSearch
72
70
  - `mark` — Mark, a logo or photo glyph with an initial fallback
73
71
  - `open-in` — OpenIn, a link out to a tool that takes the tool's name, label and mark as a prop
74
72
  - `picker` — Picker, MarkPicker, pickerTriggerClass, a command palette at popover scale
75
73
  - `docs` — DocPage, OnThisPage, ScrollSpy: one page anatomy for documentation, an icon, title and summary header, a reading column and a contents rail that becomes a bar on a narrow pane
76
74
  - `section-card` — SectionCard, a card with a fixed-height header, an h3 title, optional actions and a line under it
77
- - `section-header` — SectionHeader, a section label with a count chip, a line of description and actions
75
+ - `section-header` — SectionHeader, a section label with a count chip, a line of description and actions; SectionLabel, the label alone
78
76
  - `field-row` — FieldRow, a labelled control with its action button at the control's height
79
77
  - `table-view` — TableView, a read-only table from columns and rows: numeric columns, footer row, custom cell; opt-in: `bare`, sortable heads (`column.sortable`, bind `sort`; the caller orders `rows`), `rowHref` (a real link over the row; `onRowLink` opens in place on a plain click), `onRowClick`, `selectable` + bind `selected`, `rowMenu` (context-menu items), `group` (a `null` key sits with no header) + `groupHeader` + `collapsible`, `subRow` + `expanded`, `loading` (skeleton rows in the frame), `empty`, `trailing`, `head`, and per-column `hideBelow`, `sticky`, `interactive`, `class`
80
78
  - `segmented` — AnimatedTabs (pill or underline), SegmentedFilter, SegmentedNav, SectionRuns, one bordered track with a sliding pill, a badge note and an overflow menu
81
- - `theme` — ThemeProvider, mode, userPrefersMode, setMode, toggleMode, resetMode: the one light and dark system (mode-watcher, optional peer). Mount `<ThemeProvider initial onChange themeColors modeStorageKey />` once; flip with `toggleMode()`, read `mode.current`. Pair with `theme-toggle`'s `revealTheme(event, toggleMode)` for the wipe
79
+ - `theme` — ThemeProvider, mode, userPrefersMode, setMode, toggleMode, resetMode: the one light and dark system (mode-watcher, optional peer). Mount `<ThemeProvider initial onModeChange themeColors modeStorageKey />` once; flip with `toggleMode()`, read `mode.current`. Pair with `revealTheme(event, toggleMode)` from `@heyramzi/ui/lib/theme-transition.js` for the wipe
82
80
  - `star-rating-input` — StarRatingInput
83
81
  - `svg` — Svg, an SVG file imported with `?raw`
84
82
 
85
83
  ## Effects (`src/effects`)
86
84
 
87
- - `interactive-hover-button` — InteractiveHoverButton, a dot that grows into the fill
85
+ Named exports from `@heyramzi/ui/effects/<name>`, e.g.
86
+ `import { Marquee } from "@heyramzi/ui/effects/marquee"`.
88
87
 
88
+ - `interactive-hover-button` — InteractiveHoverButton, a dot that grows into the fill
89
89
  - `animated-beam` — AnimatedBeam, AnimatedBeamProps, AnchorPosition
90
- - `border-beam` — BorderBeam
91
- - `image-comparison` — ImageComparison, a before/after wipe with a bindable position, side badges and a hint sweep
90
+ - `border-beam` — BorderBeam, sizePresets, sizeThemePresets, themeColors and their types
91
+ - `image-comparison` — ImageComparison, ComparisonImage, a before/after wipe with a bindable position, side badges and a hint sweep
92
92
  - `image-reveal` — ImageReveal, ImageRevealProps, ImageRevealHandle
93
93
  - `magnetic` — magnetic
94
94
  - `magic-card` — MagicCard. Props: `glow`, `radius`, `class`, `contentClass`; the glow colour is `--magic-card-glow` set on `class`.
@@ -97,7 +97,7 @@ Generic pieces built on the primitives, imported from `@heyramzi/ui/components/<
97
97
  - `reveal` — InView, AnimatedGroup, TextEffect, observeInView, RevealPreset, RevealPer
98
98
  - `shader-gradient` — ShaderGradient, ShaderGradientProps, ShaderGradientUniforms
99
99
  - `spotlight` — Spotlight
100
- - `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`).
100
+ - `theme-toggle` — ThemeToggle. 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/lib/theme-transition.js"` (every `./lib` subpath ends in `.js`, though the source is `.ts`).
101
101
 
102
102
  ## Animations (`src/animations`)
103
103
 
@@ -121,16 +121,17 @@ Generic pieces built on the primitives, imported from `@heyramzi/ui/components/<
121
121
 
122
122
  ## AI and chat (`src/ai`)
123
123
 
124
+ Imported from `@heyramzi/ui/ai/<name>`, e.g. `import { AiButton } from "@heyramzi/ui/ai/ai-button"`.
125
+
124
126
  - `ai-button` — AiButton
125
- - `confirmation` — Confirmation, ConfirmationTitle, ConfirmationRequest, ConfirmationAccepted, ConfirmationRejected, ConfirmationActions, ConfirmationAction
127
+ - `confirmation` — Confirmation, ConfirmationTitle, ConfirmationState (`when` names the kind it shows), ConfirmationActions, ConfirmationAction, type ConfirmationKind
126
128
  - `generation-progress` — GenerationProgress
127
129
  - `loading-state` — PixelLoader
128
130
  - `prompt-input` — PromptInput, PromptInputBody, PromptInputToolbar, PromptInputTextarea, PromptInputSubmit
129
131
  - `reasoning` — Reasoning, ReasoningTrigger, ReasoningContent
130
132
  - `response` — Response
131
133
  - `suggestion` — Suggestion, Suggestions
132
- - `thinking-dots` — ThinkingDots
133
- - `typing-dots` — TypingDots
134
+ - `typing-dots` — TypingDots. A `label` makes it a `role="status"` line
134
135
  - `voice-waveform` — VoiceWaveform
135
136
 
136
137
  ## Record (`src/record`)
package/README.md CHANGED
@@ -81,13 +81,14 @@ runes only.
81
81
 
82
82
  ## Using a component
83
83
 
84
- Import from a subpath:
84
+ Import a named export from its subpath. There's no package root and no default export, and
85
+ each name has exactly one path:
85
86
 
86
87
  ```svelte
87
88
  <script lang="ts">
88
89
  import { Button } from "@heyramzi/ui/shadcn/button";
89
90
  import { Card, CardHeader, CardTitle, CardContent } from "@heyramzi/ui/shadcn/card";
90
- import Marquee from "@heyramzi/ui/effects/marquee/Marquee.svelte";
91
+ import { Marquee } from "@heyramzi/ui/effects/marquee";
91
92
  </script>
92
93
  ```
93
94
 
@@ -99,14 +100,14 @@ Many components take their content through snippets, so you keep full control:
99
100
 
100
101
  ## Sound
101
102
 
102
- `@heyramzi/ui/lib/sound` gives the kit's controls interaction sounds from
103
+ `@heyramzi/ui/lib/sound.js` gives the kit's controls interaction sounds from
103
104
  [cuelume](https://cuelume.dev). They're off until the person turns them on, and the choice is
104
105
  saved in their browser. Start it once in the root layout:
105
106
 
106
107
  ```svelte
107
108
  <script lang="ts">
108
109
  import { onMount } from "svelte";
109
- import { startSound } from "@heyramzi/ui/lib/sound";
110
+ import { startSound } from "@heyramzi/ui/lib/sound.js";
110
111
 
111
112
  onMount(() => startSound());
112
113
  </script>
@@ -1,11 +1,8 @@
1
1
  import Confirmation from "../../../src/ai/confirmation/Confirmation.svelte";
2
2
  import ConfirmationTitle from "../../../src/ai/confirmation/ConfirmationTitle.svelte";
3
- import ConfirmationRequest from "../../../src/ai/confirmation/ConfirmationRequest.svelte";
4
- import ConfirmationAccepted from "../../../src/ai/confirmation/ConfirmationAccepted.svelte";
5
- import ConfirmationRejected from "../../../src/ai/confirmation/ConfirmationRejected.svelte";
6
- import ConfirmationFailed from "../../../src/ai/confirmation/ConfirmationFailed.svelte";
3
+ import ConfirmationState from "../../../src/ai/confirmation/ConfirmationState.svelte";
7
4
  import ConfirmationActions from "../../../src/ai/confirmation/ConfirmationActions.svelte";
8
5
  import ConfirmationAction from "../../../src/ai/confirmation/ConfirmationAction.svelte";
9
- export { Confirmation, ConfirmationTitle, ConfirmationRequest, ConfirmationAccepted, ConfirmationRejected, ConfirmationFailed, ConfirmationActions, ConfirmationAction,
6
+ export { Confirmation, ConfirmationTitle, ConfirmationState, ConfirmationActions, ConfirmationAction,
10
7
  //
11
- Confirmation as Root, ConfirmationTitle as Title, ConfirmationRequest as Request, ConfirmationAccepted as Accepted, ConfirmationRejected as Rejected, ConfirmationFailed as Failed, ConfirmationActions as Actions, ConfirmationAction as Action };
8
+ Confirmation as Root, ConfirmationTitle as Title, ConfirmationState as State, ConfirmationActions as Actions, ConfirmationAction as Action };
@@ -2,7 +2,6 @@
2
2
  // Svelte components are imported by path, like "@heyramzi/ui/canvas/ui/canvas-grid.svelte".
3
3
  export * from "./types.js";
4
4
  export * from "./plugin.js";
5
- export { tryCatch, tryCatchAsync } from "../lib/result.js";
6
5
  export * from "./ops/ops.js";
7
6
  export * from "./headless/alignment.js";
8
7
  export * from "./headless/canvas-cleanup.js";
@@ -0,0 +1,25 @@
1
+ // A pen node's accessible name. Svelte Flow puts `ariaLabel` on the focusable node wrapper,
2
+ // so the name has to live on the node object and follow its words as they're edited.
3
+ import { useSvelteFlow } from "@xyflow/svelte";
4
+ import { untrack } from "svelte";
5
+ const cap = (word) => word.charAt(0).toUpperCase() + word.slice(1);
6
+ /** "Idea" for a text, "Rectangle: Idea" for a labelled shape, "Pen stroke" for a drawing. */
7
+ export function penNodeName(kind, data) {
8
+ if (kind === "text") return data.text?.trim() || "Empty text";
9
+ if (kind === "stroke") return `${cap(data.tool ?? "pen")} stroke`;
10
+ const shape = cap(data.shape ?? "shape");
11
+ const label = data.label?.trim();
12
+ return label ? `${shape}: ${label}` : shape;
13
+ }
14
+ /** Keeps node `id`'s ariaLabel equal to `name()`. Call it from a node component. */
15
+ export function useNodeName(id, name) {
16
+ const { getNode, updateNode } = useSvelteFlow();
17
+ $effect(() => {
18
+ const nodeId = id();
19
+ const label = name();
20
+ // untrack: updateNode reads the node list, and tracking it would rerun this on every write.
21
+ untrack(() => {
22
+ if (getNode(nodeId)?.ariaLabel !== label) updateNode(nodeId, { ariaLabel: label });
23
+ });
24
+ });
25
+ }
@@ -1,5 +1,6 @@
1
1
  // The tool bar's tools, their keys and the shortcut list the help panel renders.
2
2
  // Pure data and two lookups, so the keyboard, the bar and the panel can't disagree.
3
+ import { isEditingTarget } from "../editor/keymap.js";
3
4
  import { PEN_DEFAULTS } from "../pen/types.js";
4
5
  /** Every tool with its single-letter key. Shapes share one bar button but keep a key each. */
5
6
  export const TOOLS = [
@@ -53,6 +54,12 @@ const TOOL_BY_KEY = new Map(TOOLS.map((tool) => [tool.key.toLowerCase(), tool.id
53
54
  export function toolForKey(key) {
54
55
  return TOOL_BY_KEY.get(key.toLowerCase()) ?? null;
55
56
  }
57
+ /** The tool a key press picks: the tooltip's bare letter, never with a modifier or while a field has focus. */
58
+ export function resolveToolKey(event) {
59
+ if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return null;
60
+ if (isEditingTarget(event.target)) return null;
61
+ return toolForKey(event.key);
62
+ }
56
63
  export function keyForTool(tool) {
57
64
  return TOOLS.find((entry) => entry.id === tool)?.key ?? "";
58
65
  }
@@ -0,0 +1,59 @@
1
+ /** Builds the table and summary every cartesian chart hands to ChartPlot. A missing value reads `empty`. */
2
+ export function chartTable(data, x, series, format, { xLabel = "", empty = "No data" } = {}) {
3
+ const xs = data.map(x);
4
+ const rows = data.map((d, i) => ({
5
+ x: xs[i],
6
+ cells: series.map((s) => {
7
+ const n = numeric(s.value(d));
8
+ return n == null ? empty : (s.format ?? format)(n);
9
+ })
10
+ }));
11
+ const lines = series.map((s) => seriesLine(s.label, data.map((d) => numeric(s.value(d))), s.format ?? format));
12
+ const range = xs.length === 0 ? "No data" : xs.length === 1 ? xs[0] : `${xs[0]} to ${xs.at(-1)}`;
13
+ return {
14
+ xLabel,
15
+ columns: series.map((s) => s.label),
16
+ rows,
17
+ summary: xs.length === 0 ? "No data." : [`${range}.`, ...lines].join(" ")
18
+ };
19
+ }
20
+ function numeric(v) {
21
+ if (v == null) return null;
22
+ const n = Number(v);
23
+ return Number.isFinite(n) ? n : null;
24
+ }
25
+ function seriesLine(label, values, format) {
26
+ const nums = values.filter((n) => n != null);
27
+ if (nums.length === 0) return `${label}: no data.`;
28
+ let low = nums[0];
29
+ let high = nums[0];
30
+ for (const n of nums) {
31
+ if (n < low) low = n;
32
+ if (n > high) high = n;
33
+ }
34
+ const ends = `first ${format(nums[0])}, last ${format(nums[nums.length - 1])}`;
35
+ return `${label}: ${ends}, low ${format(low)}, high ${format(high)}.`;
36
+ }
37
+ /** What one row reads as when the arrow keys land on it, like "Mar: Revenue $4,100, Cost $2,100". */
38
+ export function rowSummary(table, i) {
39
+ const row = table.rows[i];
40
+ if (!row) return "";
41
+ return `${row.x}: ${table.columns.map((c, j) => `${c} ${row.cells[j]}`).join(", ")}`;
42
+ }
43
+ /**
44
+ * The point a key moves to from `at`, where -1 is none yet. `undefined` means the key isn't the
45
+ * plot's, and `null` means Escape cleared the point.
46
+ */
47
+ export function nextPoint(key, at, count) {
48
+ if (count === 0) return undefined;
49
+ switch (key) {
50
+ case "ArrowRight":
51
+ case "ArrowDown": return at < 0 ? 0 : Math.min(at + 1, count - 1);
52
+ case "ArrowLeft":
53
+ case "ArrowUp": return at < 0 ? count - 1 : Math.max(at - 1, 0);
54
+ case "Home": return 0;
55
+ case "End": return count - 1;
56
+ case "Escape": return at < 0 ? undefined : null;
57
+ default: return undefined;
58
+ }
59
+ }
@@ -1,8 +1,5 @@
1
- export { default as DataPanel } from "../../../src/charts/dashboard/data-panel.svelte";
2
- export { default as DataSortHead } from "../../../src/charts/dashboard/data-sort-head.svelte";
3
1
  export { default as DataTable } from "../../../src/charts/dashboard/data-table.svelte";
4
2
  export { default as RatingChip } from "../../../src/charts/dashboard/rating-chip.svelte";
5
- export { default as DashboardEmpty } from "../../../src/charts/dashboard/dashboard-empty.svelte";
6
3
  export { default as DashboardSection } from "../../../src/charts/dashboard/dashboard-section.svelte";
7
4
  export { default as PanelGrid } from "../../../src/charts/dashboard/panel-grid.svelte";
8
5
  export { default as PeriodFilter } from "../../../src/charts/dashboard/period-filter.svelte";
@@ -13,6 +13,20 @@ export function getPayloadConfigFromPayload(config, item, key) {
13
13
  }
14
14
  return configLabelKey in config ? config[configLabelKey] : config[key];
15
15
  }
16
+ const compact = new Intl.NumberFormat(undefined, {
17
+ notation: "compact",
18
+ maximumFractionDigits: 1
19
+ });
20
+ /**
21
+ * An axis tick formatter. "1,000,000" overflows the 48px gutter and the gap between ticks, so a
22
+ * label over 6 characters falls back to "1M"; the tooltip keeps the full value.
23
+ */
24
+ export function valueTick(format) {
25
+ return (v) => {
26
+ const full = format(v);
27
+ return full.length > 6 && Number.isFinite(v) ? compact.format(v) : full;
28
+ };
29
+ }
16
30
  const chartContextKey = Symbol("chart-context");
17
31
  export function setChartContext(value) {
18
32
  return setContext(chartContextKey, value);
@@ -1 +1,2 @@
1
+ export { default as CountChip } from "../../../src/components/chip/count-chip.svelte";
1
2
  export { default as TagChip } from "../../../src/components/chip/tag-chip.svelte";
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Shift+F10 or the ContextMenu key sends Bits UI's ContextMenu the `contextmenu` event Safari
3
+ * never fires for a key. Preventing the key stops Chrome sending a second one.
4
+ */
5
+ export function openMenuFromKey(event) {
6
+ const menuKey = event.key === "ContextMenu" || event.shiftKey && event.key === "F10";
7
+ if (!menuKey || event.defaultPrevented) return;
8
+ event.preventDefault();
9
+ const row = event.currentTarget;
10
+ const box = row.getBoundingClientRect();
11
+ row.dispatchEvent(new MouseEvent("contextmenu", {
12
+ bubbles: true,
13
+ cancelable: true,
14
+ clientX: box.left + 16,
15
+ clientY: box.top + box.height
16
+ }));
17
+ }
18
+ /** What a row with a menu tells a screen reader about the keys that open it. */
19
+ export const MENU_KEYS = "Shift+F10 ContextMenu";
@@ -0,0 +1,5 @@
1
+ /** Language code to flag image. The host serves these files from /flags. */
2
+ export const LANGUAGE_FLAGS = {
3
+ en: "/flags/US.svg",
4
+ fr: "/flags/FR.svg"
5
+ };
@@ -1 +1,2 @@
1
1
  export { default as LanguageFlag } from "../../../src/components/language-flag/language-flag.svelte";
2
+ export { LANGUAGE_FLAGS } from "./flags.js";
@@ -1,6 +1,5 @@
1
- export { default as DetailEmpty } from "../../../src/components/list-page/detail-empty.svelte";
2
1
  export { default as DetailHeader } from "../../../src/components/list-page/detail-header.svelte";
3
- export { default as DetailPanel } from "../../../src/components/list-page/detail-panel.svelte";
2
+ export { default as DetailPanel } from "../../../src/lib/panel.svelte";
4
3
  export { default as DetailRow } from "../../../src/components/list-page/detail-row.svelte";
5
4
  export { default as DetailStack } from "../../../src/components/list-page/detail-stack.svelte";
6
5
  export { default as EmptyState } from "../../../src/components/list-page/empty-state.svelte";
@@ -9,10 +8,8 @@ export { default as PrevNext } from "../../../src/components/list-page/prev-next
9
8
  export { stepTo } from "./step.js";
10
9
  export { default as NoticeBar } from "../../../src/components/list-page/notice-bar.svelte";
11
10
  export { default as RailBody } from "../../../src/components/list-page/rail-body.svelte";
12
- export { default as RailEmpty } from "../../../src/components/list-page/rail-empty.svelte";
13
11
  export { default as RailHead } from "../../../src/components/list-page/rail-head.svelte";
14
12
  export { default as RailRow } from "../../../src/components/list-page/rail-row.svelte";
15
- export { default as SectionLabel } from "../../../src/components/section-header/section-label.svelte";
16
13
  export { queueRailClass, queueRailWidth } from "./queue-rail.js";
17
14
  export { default as FilterPopover } from "../../../src/components/list-page/filter-popover.svelte";
18
15
  export { filterSectionClass } from "./filter-section.js";
@@ -3,5 +3,4 @@
3
3
  * layout, or the no-flash script never runs.
4
4
  */
5
5
  export { default as ThemeProvider } from "../../../src/components/theme/theme-provider.svelte";
6
- export { revealTheme } from "../../lib/theme-transition.js";
7
6
  export { mode, resetMode, setMode, systemPrefersMode, toggleMode, userPrefersMode } from "mode-watcher";
@@ -1,7 +1,5 @@
1
1
  /**
2
- * One toolbar row for a list page. Wide, it shows search, tabs and a view switch inline. Narrow,
3
- * each of those folds into a menu and the row never wraps.
2
+ * One toolbar row for a list page: search, tabs and a view switch inline, folded into menus when
3
+ * narrow, never wrapping. `ToolbarSearch` lives in list-page.
4
4
  */
5
5
  export { default as Toolbar } from "../../../src/components/toolbar/toolbar.svelte";
6
- export { default as ToolbarSearch } from "../../../src/components/toolbar/toolbar-search.svelte";
7
- export { toolbarTriggerClass } from "./toolbar-trigger.js";
@@ -1,4 +1,3 @@
1
- export { default as CountChip } from "../../../src/components/work-parts/count-chip.svelte";
2
1
  export { default as GroupHead } from "../../../src/components/work-parts/group-head.svelte";
3
2
  export { default as PropertyRow } from "../../../src/components/work-parts/property-row.svelte";
4
3
  export { default as WorkCard } from "../../../src/components/work-parts/work-card.svelte";
@@ -0,0 +1,40 @@
1
+ import { Extension } from "@tiptap/core";
2
+ import { Fragment } from "@tiptap/pm/model";
3
+ import { NodeSelection, Selection, TextSelection } from "@tiptap/pm/state";
4
+ /**
5
+ * Swaps the top-level block holding the selection with its neighbour, the same block the drag
6
+ * handle moves. Null at the top or bottom of the document.
7
+ */
8
+ export function moveBlock(state, dir) {
9
+ const { selection, doc } = state;
10
+ const index = selection.$from.index(0);
11
+ const other = index + dir;
12
+ if (other < 0 || other >= doc.childCount) return null;
13
+ const node = doc.child(index);
14
+ const start = selection.$from.posAtIndex(index, 0);
15
+ const neighbour = doc.child(other);
16
+ const from = dir === 1 ? start : start - neighbour.nodeSize;
17
+ const to = from + node.nodeSize + neighbour.nodeSize;
18
+ const pair = dir === 1 ? [neighbour, node] : [node, neighbour];
19
+ const tr = state.tr.replaceWith(from, to, Fragment.fromArray(pair));
20
+ const moved = dir === 1 ? from + neighbour.nodeSize : from;
21
+ const shift = moved - start;
22
+ const next = selection instanceof NodeSelection ? NodeSelection.create(tr.doc, selection.from + shift) : selection instanceof TextSelection ? TextSelection.create(tr.doc, selection.anchor + shift, selection.head + shift) : Selection.near(tr.doc.resolve(selection.head + shift));
23
+ return tr.setSelection(next).scrollIntoView();
24
+ }
25
+ /** Alt+Shift+Up and Down: the keyboard way to do what the drag handle does. */
26
+ export const BlockMove = Extension.create({
27
+ name: "blockMove",
28
+ addKeyboardShortcuts() {
29
+ const run = (dir) => () => {
30
+ const tr = moveBlock(this.editor.state, dir);
31
+ if (!tr) return false;
32
+ this.editor.view.dispatch(tr);
33
+ return true;
34
+ };
35
+ return {
36
+ "Alt-Shift-ArrowUp": run(-1),
37
+ "Alt-Shift-ArrowDown": run(1)
38
+ };
39
+ }
40
+ });
@@ -5,6 +5,7 @@
5
5
  import { Extension } from "@tiptap/core";
6
6
  import { Plugin, PluginKey } from "@tiptap/pm/state";
7
7
  import { Decoration, DecorationSet } from "@tiptap/pm/view";
8
+ import { copyText } from "../components/copy/clipboard.js";
8
9
  import { anchorIds } from "./anchors.js";
9
10
  const LINK_ICON = `<svg width="12" height="12" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true"><path d="M240 88.23a54.43 54.43 0 0 1-16 37L189.25 160a54.27 54.27 0 0 1-38.63 16h-.05A54.63 54.63 0 0 1 96 119.84a8 8 0 0 1 16 .45A38.62 38.62 0 0 0 150.58 160a38.4 38.4 0 0 0 27.31-11.31l34.75-34.75a38.63 38.63 0 0 0-54.63-54.63l-11 11A8 8 0 0 1 135.7 59l11-11a54.65 54.65 0 0 1 77.3 0A54.86 54.86 0 0 1 240 88.23ZM109 185.66l-11 11A38.41 38.41 0 0 1 70.6 208a38.63 38.63 0 0 1-27.29-65.94L78 107.31a38.63 38.63 0 0 1 54.63 0 8 8 0 0 0 11.31-11.31 54.65 54.65 0 0 0-77.3 0L32 130.75A54.62 54.62 0 0 0 70.56 224a54.28 54.28 0 0 0 38.64-16l11-11a8 8 0 0 0-11.2-11.34Z"/></svg>`;
10
11
  const anchorsKey = new PluginKey("headingAnchors");
@@ -14,7 +15,7 @@ export const HeadingAnchors = Extension.create({
14
15
  addOptions() {
15
16
  return {
16
17
  label: "Copy link",
17
- oncopy: undefined
18
+ onCopy: undefined
18
19
  };
19
20
  },
20
21
  addProseMirrorPlugins() {
@@ -48,10 +49,10 @@ export const HeadingAnchors = Extension.create({
48
49
  button.addEventListener("click", () => {
49
50
  const { origin, pathname, search } = window.location;
50
51
  const url = `${origin}${pathname}${search}#${id}`;
51
- void navigator.clipboard?.writeText(url).catch(() => {});
52
+ void copyText(url);
52
53
  button.dataset.copied = "true";
53
54
  setTimeout(() => delete button.dataset.copied, 1400);
54
- options.oncopy?.(url, id);
55
+ options.onCopy?.(url, id);
55
56
  });
56
57
  return button;
57
58
  }, {
@@ -6,6 +6,7 @@ import { DragHandle } from "@tiptap/extension-drag-handle";
6
6
  import { TaskItem, TaskList } from "@tiptap/extension-list";
7
7
  import { Table, TableCell, TableHeader, TableRow } from "@tiptap/extension-table";
8
8
  import { BlockIdExtension } from "./block-id.js";
9
+ import { BlockMove } from "./block-move.js";
9
10
  import { CodeBlockChrome, HeadingAnchors } from "./doc-blocks.js";
10
11
  const CmsBlock = TiptapNode.create({
11
12
  name: "cmsBlock",
@@ -114,6 +115,17 @@ function dedupeExtensions(extensions) {
114
115
  });
115
116
  }
116
117
  const DRAG_DOTS = `<svg width="12" height="12" viewBox="0 0 12 12" fill="none"><circle cx="2.5" cy="2.5" r="1" fill="currentColor"/><circle cx="2.5" cy="6" r="1" fill="currentColor"/><circle cx="2.5" cy="9.5" r="1" fill="currentColor"/><circle cx="6" cy="2.5" r="1" fill="currentColor"/><circle cx="6" cy="6" r="1" fill="currentColor"/><circle cx="6" cy="9.5" r="1" fill="currentColor"/></svg>`;
118
+ /** The stock Image has no align, so the image toolbar's choice was dropped. content.css reads data-align. */
119
+ const AlignedImage = Image.extend({ addAttributes() {
120
+ return {
121
+ ...this.parent?.(),
122
+ align: {
123
+ default: null,
124
+ parseHTML: (el) => el.getAttribute("data-align"),
125
+ renderHTML: (attrs) => attrs.align ? { "data-align": attrs.align } : {}
126
+ }
127
+ };
128
+ } });
117
129
  function dragHandle() {
118
130
  return DragHandle.configure({ render() {
119
131
  const el = document.createElement("div");
@@ -142,7 +154,7 @@ export function buildExtensions({ preset, placeholder, blockIds, anchors = false
142
154
  ...full ? [
143
155
  CmsBlock,
144
156
  Youtube,
145
- Image.configure({ inline: false }),
157
+ AlignedImage.configure({ inline: false }),
146
158
  TaskList,
147
159
  TaskItem.configure({ nested: true }),
148
160
  Table.configure({ resizable: false }),
@@ -154,6 +166,7 @@ export function buildExtensions({ preset, placeholder, blockIds, anchors = false
154
166
  ...anchors ? [HeadingAnchors.configure(anchors)] : [],
155
167
  Placeholder.configure({ placeholder }),
156
168
  dragHandle(),
169
+ BlockMove,
157
170
  ...blockIds ? [BlockIdExtension] : []
158
171
  ]);
159
172
  }
@@ -15,14 +15,21 @@ export function usePathCalculator() {
15
15
  const containerRect = containerRef.getBoundingClientRect();
16
16
  const rectA = fromRef.getBoundingClientRect();
17
17
  const rectB = toRef.getBoundingClientRect();
18
+ // A scaled ancestor shrinks every rect, but the SVG draws in the container's own pixels.
19
+ // Divide the scale out, or the beams stop short of their nodes.
20
+ const scaleX = containerRef.offsetWidth ? containerRect.width / containerRef.offsetWidth : 1;
21
+ const scaleY = containerRef.offsetHeight ? containerRect.height / containerRef.offsetHeight : 1;
22
+ const local = (rect) => new DOMRect((rect.left - containerRect.left) / scaleX, (rect.top - containerRect.top) / scaleY, rect.width / scaleX, rect.height / scaleY);
23
+ const a = local(rectA);
24
+ const b = local(rectB);
18
25
  svgDimensions = {
19
- width: containerRect.width,
20
- height: containerRect.height
26
+ width: containerRect.width / scaleX,
27
+ height: containerRect.height / scaleY
21
28
  };
22
- const startX = anchorX(rectA, containerRect.left, fromAnchor, startXOffset);
23
- const startY = rectA.top - containerRect.top + rectA.height / 2 + startYOffset;
24
- const endX = anchorX(rectB, containerRect.left, toAnchor, endXOffset);
25
- const endY = rectB.top - containerRect.top + rectB.height / 2 + endYOffset;
29
+ const startX = anchorX(a, 0, fromAnchor, startXOffset);
30
+ const startY = a.top + a.height / 2 + startYOffset;
31
+ const endX = anchorX(b, 0, toAnchor, endXOffset);
32
+ const endY = b.top + b.height / 2 + endYOffset;
26
33
  // A cubic with horizontal handles, not a quadratic through a raised midpoint.
27
34
  // The quadratic put its single control point at `midY` minus `curvature`, which for a fan into one node lands past the far end:
28
35
  // the top beam dove below the hub and crossed the middle beam before arriving, and three beams bundled into a lens for the last stretch.
@@ -0,0 +1,2 @@
1
+ export { default as BorderBeam } from "../../../src/effects/border-beam/BorderBeam.svelte";
2
+ export { sizePresets, sizeThemePresets, themeColors } from "./presets.js";
@@ -0,0 +1 @@
1
+ export { default as ImageComparison } from "../../../src/effects/image-comparison/ImageComparison.svelte";
@@ -0,0 +1 @@
1
+ export { default as InteractiveHoverButton } from "../../../src/effects/interactive-hover-button/InteractiveHoverButton.svelte";
@@ -0,0 +1 @@
1
+ export { default as MagicCard } from "../../../src/effects/magic-card/MagicCard.svelte";
@@ -0,0 +1 @@
1
+ export { default as Marquee } from "../../../src/effects/marquee/Marquee.svelte";
@@ -0,0 +1 @@
1
+ export { default as ProgressiveBlur } from "../../../src/effects/progressive-blur/ProgressiveBlur.svelte";
@@ -0,0 +1 @@
1
+ export { default as Spotlight } from "../../../src/effects/spotlight/Spotlight.svelte";
@@ -0,0 +1 @@
1
+ export { default as ThemeToggle } from "../../../src/effects/theme-toggle/ThemeToggle.svelte";
@@ -1,5 +1,5 @@
1
1
  export { default as ThreadInbox } from "../../src/inbox/thread-inbox.svelte";
2
2
  export { NO_FILTER, actorNames, entryLine, filterThreads, inboxKeyOf, isPending, resolveInboxLabels, snoozeChoices, subjectTypes, threadsOf } from "./logic.js";
3
3
  export { ALL, DEFAULT_INBOX_LABELS } from "./types.js";
4
- // The approval card a pinned proposal is drawn with, and the types its `proposal` field carries.
4
+ // The approval card a pinned proposal is drawn with. Its `proposal` types come from `./work/inbox`.
5
5
  export { default as InboxCard } from "../../src/work/inbox/inbox-card.svelte";
@@ -0,0 +1,41 @@
1
+ /** "Oct 23" in the caller's locale. */
2
+ export function shortDate(at, { locale, timeZone, year } = {}) {
3
+ return new Intl.DateTimeFormat(locale, {
4
+ month: "short",
5
+ day: "numeric",
6
+ year: year ? "numeric" : undefined,
7
+ timeZone
8
+ }).format(new Date(at));
9
+ }
10
+ const UNITS = [
11
+ [31536e3, "year"],
12
+ [2592e3, "month"],
13
+ [604800, "week"],
14
+ [86400, "day"],
15
+ [3600, "hour"],
16
+ [60, "minute"]
17
+ ];
18
+ /** "3 days ago", "in 2 weeks", "now": the largest whole unit between `at` and `now`. */
19
+ export function relativeTime(at, now = Date.now(), { locale, style = "long" } = {}) {
20
+ const seconds = Math.round((new Date(at).getTime() - new Date(now).getTime()) / 1e3);
21
+ const age = Math.abs(seconds);
22
+ const rtf = new Intl.RelativeTimeFormat(locale, {
23
+ numeric: "auto",
24
+ style
25
+ });
26
+ for (const [size, unit] of UNITS) {
27
+ if (age >= size) return rtf.format(Math.round(seconds / size), unit);
28
+ }
29
+ return rtf.format(0, "second");
30
+ }
31
+ /** The calendar day of a moment as `YYYY-MM-DD`, in the given zone or the viewer's own. Today by default. */
32
+ export function localDay(at = new Date(), timeZone) {
33
+ const parts = new Intl.DateTimeFormat("en-US", {
34
+ year: "numeric",
35
+ month: "2-digit",
36
+ day: "2-digit",
37
+ timeZone
38
+ }).formatToParts(new Date(at));
39
+ const part = (type) => parts.find((p) => p.type === type)?.value ?? "";
40
+ return `${part("year")}-${part("month")}-${part("day")}`;
41
+ }
@@ -0,0 +1,15 @@
1
+ import { tick } from "svelte";
2
+ /**
3
+ * Focuses the first target that takes focus, a selector under root or an element, once Svelte
4
+ * has rendered. A moved keyed item or opened pane is a new node.
5
+ */
6
+ export async function focusAfterRender(root, ...targets) {
7
+ await tick();
8
+ for (const target of targets) {
9
+ const el = typeof target === "string" ? root?.querySelector(target) : target;
10
+ if (!el?.isConnected) continue;
11
+ el.focus();
12
+ if (document.activeElement === el) return el;
13
+ }
14
+ return undefined;
15
+ }
package/dist/lib/panel.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /** The one panel shell: a titled box holding a table, a chart or a stack. */
2
- // WHY tokens, not markup: `DetailPanel` and `DataPanel` draw the same box with
3
- // different props, and their edges drifted because the classes were typed twice.
2
+ // Tokens beside `panel.svelte`, because skeletons and hand-built cards draw this
3
+ // same edge without the panel's header.
4
4
  // Dashboards used `Card`, so /ads had a ring and a shadow where /social had a
5
5
  // hairline. Flat, one hairline, `rounded-xl`.
6
6
  export const panelShellClass = "overflow-hidden rounded-xl border border-border bg-card";