@heyramzi/ui 2.24.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 (855) hide show
  1. package/COMPONENTS.md +13 -9
  2. package/README.md +5 -4
  3. package/dist/canvas/index.js +0 -1
  4. package/dist/canvas/pen/node-name.svelte.js +25 -0
  5. package/dist/canvas/ui/tools.js +7 -0
  6. package/dist/charts/chart-a11y.js +59 -0
  7. package/dist/charts/dashboard/index.js +0 -1
  8. package/dist/components/data-table/menu-key.js +19 -0
  9. package/dist/components/list-page/index.js +0 -1
  10. package/dist/components/theme/index.js +0 -1
  11. package/dist/components/toolbar/index.js +2 -4
  12. package/dist/components/work-parts/index.js +0 -1
  13. package/dist/editor/block-move.js +40 -0
  14. package/dist/editor/doc-blocks.js +2 -2
  15. package/dist/editor/extensions.js +14 -1
  16. package/dist/effects/border-beam/index.js +2 -0
  17. package/dist/effects/image-comparison/index.js +1 -0
  18. package/dist/effects/interactive-hover-button/index.js +1 -0
  19. package/dist/effects/magic-card/index.js +1 -0
  20. package/dist/effects/marquee/index.js +1 -0
  21. package/dist/effects/progressive-blur/index.js +1 -0
  22. package/dist/effects/spotlight/index.js +1 -0
  23. package/dist/effects/theme-toggle/index.js +1 -0
  24. package/dist/inbox/index.js +1 -1
  25. package/dist/lib/focus.js +15 -0
  26. package/dist/lib/tone.js +3 -4
  27. package/dist/shadcn/alert/alert-variants.js +1 -1
  28. package/dist/shadcn/attachment/context.js +10 -0
  29. package/dist/shadcn/dropdown-menu/menu-item.js +1 -1
  30. package/dist/shadcn/hooks/highlighter.js +58 -5
  31. package/dist/shadcn/sidebar/constants.js +1 -1
  32. package/dist/shadcn/sidebar/context.svelte.js +12 -1
  33. package/dist/slides/deck-controller.svelte.js +3 -20
  34. package/dist/status/index.js +0 -1
  35. package/dist/work/index.js +0 -1
  36. package/dist/work/kanban-keyboard.js +10 -5
  37. package/package.json +36 -106
  38. package/scripts/svelte-dts.mjs +62 -0
  39. package/scripts/sync-shadcn.mjs +3 -1
  40. package/src/agents/agent-avatar.svelte +24 -12
  41. package/src/agents/agent-avatar.svelte.d.ts +6 -0
  42. package/src/agents/agent-avatar.test.ts +40 -0
  43. package/src/agents/agent-cast.svelte +83 -78
  44. package/src/agents/agent-cast.svelte.d.ts +20 -0
  45. package/src/agents/types.ts +1 -0
  46. package/src/ai/ai-button/AiButton.svelte +21 -10
  47. package/src/ai/ai-button/AiButton.svelte.d.ts +16 -0
  48. package/src/ai/ai-button/ai-button.svelte.test.ts +27 -0
  49. package/src/ai/confirmation/Confirmation.svelte +20 -4
  50. package/src/ai/confirmation/Confirmation.svelte.d.ts +12 -0
  51. package/src/ai/confirmation/ConfirmationAction.svelte +10 -3
  52. package/src/ai/confirmation/ConfirmationAction.svelte.d.ts +8 -0
  53. package/src/ai/confirmation/ConfirmationActions.svelte.d.ts +9 -0
  54. package/src/ai/confirmation/ConfirmationState.svelte.d.ts +10 -0
  55. package/src/ai/confirmation/ConfirmationTitle.svelte.d.ts +9 -0
  56. package/src/ai/confirmation/confirmation-focus.test.svelte +33 -0
  57. package/src/ai/confirmation/confirmation-focus.test.svelte.d.ts +8 -0
  58. package/src/ai/confirmation/confirmation-focus.test.ts +34 -0
  59. package/src/ai/confirmation/confirmation-parts.test.svelte.d.ts +7 -0
  60. package/src/ai/generation-progress/GenerationProgress.svelte +198 -171
  61. package/src/ai/generation-progress/GenerationProgress.svelte.d.ts +15 -0
  62. package/src/ai/generation-progress/generation-progress.test.ts +37 -0
  63. package/src/ai/loading-state/PixelLoader.svelte +41 -36
  64. package/src/ai/loading-state/PixelLoader.svelte.d.ts +13 -0
  65. package/src/ai/prompt-input/PromptInput.svelte +1 -1
  66. package/src/ai/prompt-input/PromptInput.svelte.d.ts +14 -0
  67. package/src/ai/prompt-input/PromptInputBody.svelte.d.ts +9 -0
  68. package/src/ai/prompt-input/PromptInputSubmit.svelte +3 -3
  69. package/src/ai/prompt-input/PromptInputSubmit.svelte.d.ts +19 -0
  70. package/src/ai/prompt-input/PromptInputTextarea.svelte +6 -1
  71. package/src/ai/prompt-input/PromptInputTextarea.svelte.d.ts +14 -0
  72. package/src/ai/prompt-input/PromptInputToolbar.svelte.d.ts +9 -0
  73. package/src/ai/prompt-input/prompt-input.test.ts +64 -0
  74. package/src/ai/reasoning/Reasoning.svelte.d.ts +10 -0
  75. package/src/ai/reasoning/ReasoningContent.svelte.d.ts +8 -0
  76. package/src/ai/reasoning/ReasoningTrigger.svelte +2 -1
  77. package/src/ai/reasoning/ReasoningTrigger.svelte.d.ts +8 -0
  78. package/src/ai/response/Response.css +23 -19
  79. package/src/ai/response/Response.svelte.d.ts +11 -0
  80. package/src/ai/suggestion/Suggestion.svelte.d.ts +10 -0
  81. package/src/ai/suggestion/Suggestions.svelte +5 -2
  82. package/src/ai/suggestion/Suggestions.svelte.d.ts +11 -0
  83. package/src/ai/typing-dots/TypingDots.css +27 -23
  84. package/src/ai/typing-dots/TypingDots.svelte.d.ts +12 -0
  85. package/src/ai/voice-waveform/VoiceWaveform.css +31 -27
  86. package/src/ai/voice-waveform/VoiceWaveform.svelte.d.ts +10 -0
  87. package/src/animations/avatar-group-hover.css +25 -21
  88. package/src/animations/card-tilt.css +71 -65
  89. package/src/animations/digit-pop-in.css +49 -40
  90. package/src/animations/dropdown.css +125 -107
  91. package/src/animations/input-clear-dissolve.css +69 -59
  92. package/src/animations/input-shake.css +55 -48
  93. package/src/animations/learn-more-hover.css +53 -43
  94. package/src/animations/like-button.css +74 -62
  95. package/src/animations/modal.css +83 -74
  96. package/src/animations/page-side-by-side.css +50 -42
  97. package/src/animations/plus-menu-morph.css +96 -87
  98. package/src/animations/resize.css +16 -13
  99. package/src/animations/shimmer-text.css +46 -40
  100. package/src/animations/spinning-counter.css +50 -43
  101. package/src/animations/success-check.css +69 -58
  102. package/src/animations/text-swap.css +35 -31
  103. package/src/animations/thinking-states.css +61 -54
  104. package/src/canvas/card/card-frame.svelte.d.ts +14 -0
  105. package/src/canvas/card/card.css +16 -10
  106. package/src/canvas/card/resize-handles.svelte.d.ts +11 -0
  107. package/src/canvas/chrome/chrome-zoom.svelte.d.ts +3 -0
  108. package/src/canvas/chrome/chrome.css +75 -69
  109. package/src/canvas/chrome/lock-badge.svelte.d.ts +8 -0
  110. package/src/canvas/chrome/side-handles.svelte.d.ts +6 -0
  111. package/src/canvas/chrome/size-chip.svelte.d.ts +3 -0
  112. package/src/canvas/chrome/snap-guides.svelte +16 -12
  113. package/src/canvas/chrome/snap-guides.svelte.d.ts +9 -0
  114. package/src/canvas/components/icons/ToolIcon.svelte.d.ts +8 -0
  115. package/src/canvas/components/shared/svg/PreviewSvg.svelte +9 -5
  116. package/src/canvas/components/shared/svg/PreviewSvg.svelte.d.ts +13 -0
  117. package/src/canvas/components/shared/svg/ShapeOutline.svelte +8 -4
  118. package/src/canvas/components/shared/svg/ShapeOutline.svelte.d.ts +15 -0
  119. package/src/canvas/components/shared/svg/StrokeNode.svelte +21 -11
  120. package/src/canvas/components/shared/svg/StrokeNode.svelte.d.ts +5 -0
  121. package/src/canvas/components/shared/svg/TextRule.svelte +8 -4
  122. package/src/canvas/components/shared/svg/TextRule.svelte.d.ts +9 -0
  123. package/src/canvas/edges/bend-handle.svelte +18 -14
  124. package/src/canvas/edges/bend-handle.svelte.d.ts +10 -0
  125. package/src/canvas/edges/edge-gradient.svelte.d.ts +16 -0
  126. package/src/canvas/edges/gradient-edge.svelte.d.ts +21 -0
  127. package/src/canvas/index.ts +0 -1
  128. package/src/canvas/lod/lod-switch.svelte +38 -33
  129. package/src/canvas/lod/lod-switch.svelte.d.ts +14 -0
  130. package/src/canvas/pen/PenField.svelte.d.ts +26 -0
  131. package/src/canvas/pen/PenOverlay.svelte +10 -6
  132. package/src/canvas/pen/PenOverlay.svelte.d.ts +23 -0
  133. package/src/canvas/pen/ShapeNode.svelte +6 -0
  134. package/src/canvas/pen/ShapeNode.svelte.d.ts +5 -0
  135. package/src/canvas/pen/TextNode.svelte +12 -2
  136. package/src/canvas/pen/TextNode.svelte.d.ts +5 -0
  137. package/src/canvas/pen/host-field.test.svelte.d.ts +6 -0
  138. package/src/canvas/pen/node-name.svelte.ts +32 -0
  139. package/src/canvas/pen/pen.css +69 -63
  140. package/src/canvas/screen/GlyphIcon.svelte.d.ts +9 -0
  141. package/src/canvas/screen/PartView.svelte +25 -25
  142. package/src/canvas/screen/PartView.svelte.d.ts +17 -0
  143. package/src/canvas/screen/ScreenBody.svelte +4 -4
  144. package/src/canvas/screen/ScreenBody.svelte.d.ts +11 -0
  145. package/src/canvas/screen/ScreenCard.svelte.d.ts +9 -0
  146. package/src/canvas/screen/screen.css +509 -505
  147. package/src/canvas/ui/CanvasToolbar.svelte.d.ts +30 -0
  148. package/src/canvas/ui/FrameLayer.svelte +18 -14
  149. package/src/canvas/ui/FrameLayer.svelte.d.ts +9 -0
  150. package/src/canvas/ui/PenLayer.svelte.d.ts +15 -0
  151. package/src/canvas/ui/StylePanel.svelte +41 -37
  152. package/src/canvas/ui/StylePanel.svelte.d.ts +32 -0
  153. package/src/canvas/ui/canvas-grid.svelte.d.ts +11 -0
  154. package/src/canvas/ui/canvas-ui.css +286 -277
  155. package/src/canvas/ui/tools.test.ts +39 -0
  156. package/src/canvas/ui/tools.ts +8 -0
  157. package/src/charts/README.md +2 -2
  158. package/src/charts/animated-value.css +6 -2
  159. package/src/charts/animated-value.svelte.d.ts +24 -0
  160. package/src/charts/area-chart.css +27 -21
  161. package/src/charts/area-chart.svelte +42 -10
  162. package/src/charts/area-chart.svelte.d.ts +60 -0
  163. package/src/charts/bar-chart.css +112 -102
  164. package/src/charts/bar-chart.svelte +39 -41
  165. package/src/charts/bar-chart.svelte.d.ts +64 -0
  166. package/src/charts/chart-a11y.css +23 -0
  167. package/src/charts/chart-a11y.test.ts +59 -0
  168. package/src/charts/chart-a11y.ts +92 -0
  169. package/src/charts/chart-plot.svelte +106 -0
  170. package/src/charts/chart-plot.svelte.d.ts +18 -0
  171. package/src/charts/chart-tokens.css +52 -51
  172. package/src/charts/charts.css +154 -142
  173. package/src/charts/crosshair.svelte.d.ts +7 -0
  174. package/src/charts/dashboard/dashboard-section.svelte +19 -3
  175. package/src/charts/dashboard/dashboard-section.svelte.d.ts +17 -0
  176. package/src/charts/dashboard/data-table.svelte +1 -1
  177. package/src/charts/dashboard/data-table.svelte.d.ts +86 -0
  178. package/src/charts/dashboard/index.ts +0 -1
  179. package/src/charts/dashboard/panel-grid.svelte +1 -1
  180. package/src/charts/dashboard/panel-grid.svelte.d.ts +14 -0
  181. package/src/charts/dashboard/period-filter.svelte.d.ts +37 -0
  182. package/src/charts/dashboard/rating-chip.svelte.d.ts +9 -0
  183. package/src/charts/dashboard/stat-band.svelte.d.ts +14 -0
  184. package/src/charts/dashboard/stat-tile.svelte +9 -5
  185. package/src/charts/dashboard/stat-tile.svelte.d.ts +62 -0
  186. package/src/charts/donut-chart.css +52 -46
  187. package/src/charts/donut-chart.svelte.d.ts +39 -0
  188. package/src/charts/edge-fade.svelte.d.ts +9 -0
  189. package/src/charts/figure.css +104 -91
  190. package/src/charts/figure.svelte.d.ts +40 -0
  191. package/src/charts/gauge-chart.css +74 -70
  192. package/src/charts/gauge-chart.svelte.d.ts +58 -0
  193. package/src/charts/hover-focus.svelte.d.ts +14 -0
  194. package/src/charts/legend.css +112 -108
  195. package/src/charts/legend.svelte +3 -3
  196. package/src/charts/legend.svelte.d.ts +30 -0
  197. package/src/charts/line-chart.css +27 -21
  198. package/src/charts/line-chart.svelte +61 -37
  199. package/src/charts/line-chart.svelte.d.ts +53 -0
  200. package/src/charts/number-chart.css +185 -163
  201. package/src/charts/number-chart.svelte +8 -4
  202. package/src/charts/number-chart.svelte.d.ts +58 -0
  203. package/src/charts/pop-value.svelte.d.ts +9 -0
  204. package/src/charts/primitives/chart-container.svelte.d.ts +9 -0
  205. package/src/charts/primitives/chart-style.svelte.d.ts +8 -0
  206. package/src/charts/primitives/chart-tooltip.svelte +1 -1
  207. package/src/charts/primitives/chart-tooltip.svelte.d.ts +26 -0
  208. package/src/charts/reference-line.css +18 -14
  209. package/src/charts/reference-line.svelte.d.ts +15 -0
  210. package/src/charts/reveal.svelte.d.ts +9 -0
  211. package/src/charts/ring-chart.css +82 -78
  212. package/src/charts/ring-chart.svelte +3 -3
  213. package/src/charts/ring-chart.svelte.d.ts +41 -0
  214. package/src/charts/sparkline.css +43 -34
  215. package/src/charts/sparkline.svelte +52 -8
  216. package/src/charts/sparkline.svelte.d.ts +51 -0
  217. package/src/charts/stat-card.css +110 -92
  218. package/src/charts/stat-card.svelte.d.ts +65 -0
  219. package/src/charts/time-series-chart.css +24 -19
  220. package/src/charts/time-series-chart.svelte +43 -10
  221. package/src/charts/time-series-chart.svelte.d.ts +30 -0
  222. package/src/charts/trend-pill.css +39 -32
  223. package/src/charts/trend-pill.svelte.d.ts +14 -0
  224. package/src/class-tokens.test.ts +34 -0
  225. package/src/components/chip/count-chip.svelte.d.ts +12 -0
  226. package/src/components/chip/tag-chip.svelte +6 -6
  227. package/src/components/chip/tag-chip.svelte.d.ts +20 -0
  228. package/src/components/copy/copy-button.svelte +22 -18
  229. package/src/components/copy/copy-button.svelte.d.ts +37 -0
  230. package/src/components/data-table/infinite-scroll.svelte.d.ts +37 -0
  231. package/src/components/data-table/menu-key.ts +22 -0
  232. package/src/components/data-table/pagination.svelte +36 -11
  233. package/src/components/data-table/pagination.svelte.d.ts +14 -0
  234. package/src/components/data-table/row-arrow.svelte.d.ts +6 -0
  235. package/src/components/data-table/row-context-menu.svelte +7 -6
  236. package/src/components/data-table/row-context-menu.svelte.d.ts +15 -0
  237. package/src/components/data-table/sortable-head.svelte +13 -18
  238. package/src/components/data-table/sortable-head.svelte.d.ts +38 -0
  239. package/src/components/data-table/table-skeleton.svelte.d.ts +18 -0
  240. package/src/components/docs/doc-page.svelte +8 -4
  241. package/src/components/docs/doc-page.svelte.d.ts +34 -0
  242. package/src/components/docs/on-this-page.svelte +109 -101
  243. package/src/components/docs/on-this-page.svelte.d.ts +17 -0
  244. package/src/components/field-row/field-row.svelte.d.ts +16 -0
  245. package/src/components/hold-to-confirm/hold-to-confirm.svelte +113 -66
  246. package/src/components/hold-to-confirm/hold-to-confirm.svelte.d.ts +22 -0
  247. package/src/components/hold-to-confirm/hold-to-confirm.test.ts +105 -0
  248. package/src/components/language-flag/language-flag.svelte +2 -1
  249. package/src/components/language-flag/language-flag.svelte.d.ts +11 -0
  250. package/src/components/list-page/detail-header.svelte.d.ts +15 -0
  251. package/src/components/list-page/detail-row.svelte.d.ts +9 -0
  252. package/src/components/list-page/detail-stack.svelte.d.ts +9 -0
  253. package/src/components/list-page/empty-state.svelte +16 -12
  254. package/src/components/list-page/empty-state.svelte.d.ts +23 -0
  255. package/src/components/list-page/filter-item.svelte +1 -1
  256. package/src/components/list-page/filter-item.svelte.d.ts +10 -0
  257. package/src/components/list-page/filter-popover.svelte +1 -1
  258. package/src/components/list-page/filter-popover.svelte.d.ts +20 -0
  259. package/src/components/list-page/grouped-list.svelte +1 -0
  260. package/src/components/list-page/grouped-list.svelte.d.ts +49 -0
  261. package/src/components/list-page/index.ts +0 -1
  262. package/src/components/list-page/list-page-shell.svelte.d.ts +31 -0
  263. package/src/components/list-page/master-detail-focus.test.ts +28 -0
  264. package/src/components/list-page/master-detail.svelte +57 -28
  265. package/src/components/list-page/master-detail.svelte.d.ts +18 -0
  266. package/src/components/list-page/master-detail.test.ts +1 -1
  267. package/src/components/list-page/notice-bar.svelte.d.ts +14 -0
  268. package/src/components/list-page/prev-next.svelte +7 -7
  269. package/src/components/list-page/prev-next.svelte.d.ts +14 -0
  270. package/src/components/list-page/rail-body.svelte.d.ts +8 -0
  271. package/src/components/list-page/rail-head.svelte.d.ts +10 -0
  272. package/src/components/list-page/rail-row.svelte.d.ts +18 -0
  273. package/src/components/mark/mark.svelte +2 -0
  274. package/src/components/mark/mark.svelte.d.ts +16 -0
  275. package/src/components/open-in/open-in.svelte +3 -3
  276. package/src/components/open-in/open-in.svelte.d.ts +35 -0
  277. package/src/components/picker/mark-picker.svelte +2 -2
  278. package/src/components/picker/mark-picker.svelte.d.ts +38 -0
  279. package/src/components/picker/picker.svelte +47 -3
  280. package/src/components/picker/picker.svelte.d.ts +59 -0
  281. package/src/components/picker/picker.test.ts +71 -0
  282. package/src/components/section-card/section-card.svelte.d.ts +13 -0
  283. package/src/components/section-header/section-header.svelte.d.ts +17 -0
  284. package/src/components/section-header/section-label.svelte.d.ts +10 -0
  285. package/src/components/segmented/animated-tabs.svelte.d.ts +61 -0
  286. package/src/components/segmented/section-runs.svelte.d.ts +23 -0
  287. package/src/components/segmented/segment.svelte +1 -1
  288. package/src/components/segmented/segment.svelte.d.ts +30 -0
  289. package/src/components/segmented/segmented-filter.svelte +4 -4
  290. package/src/components/segmented/segmented-filter.svelte.d.ts +43 -0
  291. package/src/components/segmented/segmented-nav.svelte.d.ts +17 -0
  292. package/src/components/segmented/segmented-overflow.svelte +1 -0
  293. package/src/components/segmented/segmented-overflow.svelte.d.ts +37 -0
  294. package/src/components/segmented/segmented-track.svelte +107 -103
  295. package/src/components/segmented/segmented-track.svelte.d.ts +19 -0
  296. package/src/components/star-rating-input/star-rating-input.svelte +151 -146
  297. package/src/components/star-rating-input/star-rating-input.svelte.d.ts +31 -0
  298. package/src/components/star-rating-input/star-rating-input.test.ts +90 -0
  299. package/src/components/svg/svg.svelte.d.ts +7 -0
  300. package/src/components/table-view/table-view.svelte +34 -28
  301. package/src/components/table-view/table-view.svelte.d.ts +96 -0
  302. package/src/components/table-view/table-view.test.ts +32 -6
  303. package/src/components/tags-input/tags-input.svelte +68 -16
  304. package/src/components/tags-input/tags-input.svelte.d.ts +40 -0
  305. package/src/components/tags-input/tags-input.test.ts +101 -0
  306. package/src/components/theme/index.ts +0 -1
  307. package/src/components/theme/theme-provider.svelte +8 -3
  308. package/src/components/theme/theme-provider.svelte.d.ts +19 -0
  309. package/src/components/theme/theme-provider.test.ts +5 -5
  310. package/src/components/toolbar/index.ts +2 -4
  311. package/src/components/toolbar/toolbar-search.svelte +4 -0
  312. package/src/components/toolbar/toolbar-search.svelte.d.ts +11 -0
  313. package/src/components/toolbar/toolbar.svelte +1 -1
  314. package/src/components/toolbar/toolbar.svelte.d.ts +47 -0
  315. package/src/components/toolbar/toolbar.test.ts +7 -0
  316. package/src/components/work-parts/group-head.svelte.d.ts +16 -0
  317. package/src/components/work-parts/index.ts +0 -1
  318. package/src/components/work-parts/property-row.svelte.d.ts +19 -0
  319. package/src/components/work-parts/work-card.svelte.d.ts +11 -0
  320. package/src/components/work-parts/work-well.svelte.d.ts +13 -0
  321. package/src/css-layers.test.ts +138 -0
  322. package/src/editor/README.md +1 -1
  323. package/src/editor/block-move.test.ts +58 -0
  324. package/src/editor/block-move.ts +52 -0
  325. package/src/editor/content.css +356 -352
  326. package/src/editor/doc-blocks.ts +3 -3
  327. package/src/editor/doc-page.css +328 -324
  328. package/src/editor/editor-toolbar.svelte +46 -39
  329. package/src/editor/editor-toolbar.svelte.d.ts +13 -0
  330. package/src/editor/editor.svelte +218 -157
  331. package/src/editor/editor.svelte.d.ts +27 -0
  332. package/src/editor/extensions.ts +18 -2
  333. package/src/editor/image-align.test.ts +35 -0
  334. package/src/editor/image-toolbar.svelte +73 -57
  335. package/src/editor/image-toolbar.svelte.d.ts +11 -0
  336. package/src/editor/inline-editor.svelte +27 -16
  337. package/src/editor/inline-editor.svelte.d.ts +40 -0
  338. package/src/editor/renderer.svelte.d.ts +11 -0
  339. package/src/editor/slash-menu.svelte +103 -88
  340. package/src/editor/slash-menu.svelte.d.ts +17 -0
  341. package/src/effects/animated-beam/AnimatedBeam.svelte.d.ts +4 -0
  342. package/src/effects/animated-beam/diagrams/BeamSvg.svelte.d.ts +22 -0
  343. package/src/effects/border-beam/BorderBeam.svelte.d.ts +4 -0
  344. package/src/effects/border-beam/index.ts +10 -0
  345. package/src/effects/image-comparison/ImageComparison.css +114 -97
  346. package/src/effects/image-comparison/ImageComparison.svelte.d.ts +44 -0
  347. package/src/effects/image-comparison/index.ts +4 -0
  348. package/src/effects/image-reveal/ImageReveal.css +14 -9
  349. package/src/effects/image-reveal/ImageReveal.svelte.d.ts +11 -0
  350. package/src/effects/interactive-hover-button/InteractiveHoverButton.svelte +234 -222
  351. package/src/effects/interactive-hover-button/InteractiveHoverButton.svelte.d.ts +16 -0
  352. package/src/effects/interactive-hover-button/index.ts +1 -0
  353. package/src/effects/magic-card/MagicCard.css +49 -45
  354. package/src/effects/magic-card/MagicCard.svelte.d.ts +15 -0
  355. package/src/effects/magic-card/index.ts +1 -0
  356. package/src/effects/marquee/Marquee.css +81 -62
  357. package/src/effects/marquee/Marquee.svelte +1 -0
  358. package/src/effects/marquee/Marquee.svelte.d.ts +27 -0
  359. package/src/effects/marquee/index.ts +1 -0
  360. package/src/effects/marquee/marquee.test.ts +24 -0
  361. package/src/effects/progressive-blur/ProgressiveBlur.css +13 -8
  362. package/src/effects/progressive-blur/ProgressiveBlur.svelte.d.ts +14 -0
  363. package/src/effects/progressive-blur/index.ts +1 -0
  364. package/src/effects/reveal/AnimatedGroup.svelte.d.ts +14 -0
  365. package/src/effects/reveal/InView.svelte.d.ts +12 -0
  366. package/src/effects/reveal/TextEffect.svelte.d.ts +16 -0
  367. package/src/effects/reveal/reveal.css +89 -73
  368. package/src/effects/shader-gradient/ShaderGradient.svelte.d.ts +4 -0
  369. package/src/effects/spotlight/Spotlight.css +8 -4
  370. package/src/effects/spotlight/Spotlight.svelte.d.ts +8 -0
  371. package/src/effects/spotlight/index.ts +1 -0
  372. package/src/effects/theme-toggle/ThemeToggle.css +165 -160
  373. package/src/effects/theme-toggle/ThemeToggle.svelte +12 -6
  374. package/src/effects/theme-toggle/ThemeToggle.svelte.d.ts +24 -0
  375. package/src/effects/theme-toggle/index.ts +1 -0
  376. package/src/icon-names.test.ts +88 -0
  377. package/src/inbox/index.ts +1 -2
  378. package/src/inbox/thread-inbox.svelte +1 -1
  379. package/src/inbox/thread-inbox.svelte.d.ts +52 -0
  380. package/src/lib/focus.ts +19 -0
  381. package/src/lib/live-region.svelte +14 -0
  382. package/src/lib/live-region.svelte.d.ts +5 -0
  383. package/src/lib/panel.svelte +2 -2
  384. package/src/lib/panel.svelte.d.ts +30 -0
  385. package/src/lib/tone.ts +3 -4
  386. package/src/modules.test.ts +119 -7
  387. package/src/onboarding/README.md +2 -2
  388. package/src/onboarding/onboarding-provider.svelte +1 -1
  389. package/src/onboarding/onboarding-provider.svelte.d.ts +17 -0
  390. package/src/onboarding/tour-card.svelte +10 -10
  391. package/src/onboarding/tour-card.svelte.d.ts +21 -0
  392. package/src/onboarding/tour-runner.svelte +62 -60
  393. package/src/onboarding/tour-runner.svelte.d.ts +11 -0
  394. package/src/panel/side-panel.svelte +4 -9
  395. package/src/panel/side-panel.svelte.d.ts +48 -0
  396. package/src/record/field-section.svelte.d.ts +19 -0
  397. package/src/record/info-list.svelte +4 -3
  398. package/src/record/info-list.svelte.d.ts +25 -0
  399. package/src/record/next-up.svelte.d.ts +14 -0
  400. package/src/record/project-list.svelte.d.ts +18 -0
  401. package/src/record/record-header.svelte.d.ts +27 -0
  402. package/src/record/record-rail.svelte.d.ts +23 -0
  403. package/src/record/record-shell.svelte.d.ts +48 -0
  404. package/src/record/record-stats.svelte.d.ts +10 -0
  405. package/src/record/record-timeline.svelte +3 -1
  406. package/src/record/record-timeline.svelte.d.ts +29 -0
  407. package/src/record/steps-rail.svelte +9 -9
  408. package/src/record/steps-rail.svelte.d.ts +23 -0
  409. package/src/record/where-we-are.svelte.d.ts +25 -0
  410. package/src/shadcn/accordion/accordion-content.svelte.d.ts +4 -0
  411. package/src/shadcn/accordion/accordion-item.svelte.d.ts +4 -0
  412. package/src/shadcn/accordion/accordion-trigger.svelte +1 -1
  413. package/src/shadcn/accordion/accordion-trigger.svelte.d.ts +12 -0
  414. package/src/shadcn/accordion/accordion.svelte.d.ts +4 -0
  415. package/src/shadcn/alert/alert-description.svelte.d.ts +5 -0
  416. package/src/shadcn/alert/alert-title.svelte.d.ts +5 -0
  417. package/src/shadcn/alert/alert-variants.ts +1 -1
  418. package/src/shadcn/alert/alert.svelte.d.ts +10 -0
  419. package/src/shadcn/alert-dialog/alert-dialog-action.svelte.d.ts +4 -0
  420. package/src/shadcn/alert-dialog/alert-dialog-cancel.svelte.d.ts +4 -0
  421. package/src/shadcn/alert-dialog/alert-dialog-content.svelte.d.ts +10 -0
  422. package/src/shadcn/alert-dialog/alert-dialog-description.svelte.d.ts +4 -0
  423. package/src/shadcn/alert-dialog/alert-dialog-footer.svelte.d.ts +9 -0
  424. package/src/shadcn/alert-dialog/alert-dialog-header.svelte.d.ts +5 -0
  425. package/src/shadcn/alert-dialog/alert-dialog-overlay.svelte.d.ts +4 -0
  426. package/src/shadcn/alert-dialog/alert-dialog-portal.svelte.d.ts +3 -0
  427. package/src/shadcn/alert-dialog/alert-dialog-title.svelte.d.ts +4 -0
  428. package/src/shadcn/alert-dialog/alert-dialog-trigger.svelte.d.ts +4 -0
  429. package/src/shadcn/alert-dialog/alert-dialog.svelte.d.ts +3 -0
  430. package/src/shadcn/attachment/attachment-action.svelte +7 -0
  431. package/src/shadcn/attachment/attachment-action.svelte.d.ts +4 -0
  432. package/src/shadcn/attachment/attachment-actions.svelte.d.ts +5 -0
  433. package/src/shadcn/attachment/attachment-content.svelte.d.ts +5 -0
  434. package/src/shadcn/attachment/attachment-description.svelte.d.ts +5 -0
  435. package/src/shadcn/attachment/attachment-group.svelte.d.ts +5 -0
  436. package/src/shadcn/attachment/attachment-media.svelte.d.ts +16 -0
  437. package/src/shadcn/attachment/attachment-title.svelte +3 -0
  438. package/src/shadcn/attachment/attachment-title.svelte.d.ts +5 -0
  439. package/src/shadcn/attachment/attachment-trigger.svelte +5 -0
  440. package/src/shadcn/attachment/attachment-trigger.svelte.d.ts +11 -0
  441. package/src/shadcn/attachment/attachment.svelte +4 -0
  442. package/src/shadcn/attachment/attachment.svelte.d.ts +25 -0
  443. package/src/shadcn/attachment/context.ts +13 -0
  444. package/src/shadcn/avatar/avatar-badge.svelte.d.ts +5 -0
  445. package/src/shadcn/avatar/avatar-fallback.svelte.d.ts +4 -0
  446. package/src/shadcn/avatar/avatar-group-count.svelte.d.ts +5 -0
  447. package/src/shadcn/avatar/avatar-group.svelte.d.ts +5 -0
  448. package/src/shadcn/avatar/avatar-image.svelte.d.ts +4 -0
  449. package/src/shadcn/avatar/avatar.svelte.d.ts +7 -0
  450. package/src/shadcn/badge/badge.svelte.d.ts +13 -0
  451. package/src/shadcn/breadcrumb/breadcrumb-ellipsis.svelte +1 -1
  452. package/src/shadcn/breadcrumb/breadcrumb-ellipsis.svelte.d.ts +5 -0
  453. package/src/shadcn/breadcrumb/breadcrumb-item.svelte.d.ts +5 -0
  454. package/src/shadcn/breadcrumb/breadcrumb-link.svelte.d.ts +11 -0
  455. package/src/shadcn/breadcrumb/breadcrumb-list.svelte.d.ts +5 -0
  456. package/src/shadcn/breadcrumb/breadcrumb-page.svelte.d.ts +5 -0
  457. package/src/shadcn/breadcrumb/breadcrumb-separator.svelte +1 -1
  458. package/src/shadcn/breadcrumb/breadcrumb-separator.svelte.d.ts +5 -0
  459. package/src/shadcn/breadcrumb/breadcrumb.svelte.d.ts +5 -0
  460. package/src/shadcn/bubble/bubble-content.svelte.d.ts +11 -0
  461. package/src/shadcn/bubble/bubble-group.svelte.d.ts +5 -0
  462. package/src/shadcn/bubble/bubble-reactions.svelte.d.ts +22 -0
  463. package/src/shadcn/bubble/bubble.svelte +1 -1
  464. package/src/shadcn/bubble/bubble.svelte.d.ts +22 -0
  465. package/src/shadcn/button/button.svelte +1 -1
  466. package/src/shadcn/button/button.svelte.d.ts +33 -0
  467. package/src/shadcn/calendar/calendar-caption.svelte.d.ts +19 -0
  468. package/src/shadcn/calendar/calendar-cell.svelte.d.ts +4 -0
  469. package/src/shadcn/calendar/calendar-day.svelte.d.ts +4 -0
  470. package/src/shadcn/calendar/calendar-grid-body.svelte.d.ts +4 -0
  471. package/src/shadcn/calendar/calendar-grid-head.svelte.d.ts +4 -0
  472. package/src/shadcn/calendar/calendar-grid-row.svelte.d.ts +4 -0
  473. package/src/shadcn/calendar/calendar-grid.svelte.d.ts +4 -0
  474. package/src/shadcn/calendar/calendar-head-cell.svelte.d.ts +4 -0
  475. package/src/shadcn/calendar/calendar-header.svelte.d.ts +4 -0
  476. package/src/shadcn/calendar/calendar-heading.svelte.d.ts +4 -0
  477. package/src/shadcn/calendar/calendar-month-select.svelte +1 -1
  478. package/src/shadcn/calendar/calendar-month-select.svelte.d.ts +4 -0
  479. package/src/shadcn/calendar/calendar-month.svelte.d.ts +5 -0
  480. package/src/shadcn/calendar/calendar-months.svelte.d.ts +5 -0
  481. package/src/shadcn/calendar/calendar-nav.svelte.d.ts +5 -0
  482. package/src/shadcn/calendar/calendar-next-button.svelte +1 -1
  483. package/src/shadcn/calendar/calendar-next-button.svelte.d.ts +8 -0
  484. package/src/shadcn/calendar/calendar-prev-button.svelte +1 -1
  485. package/src/shadcn/calendar/calendar-prev-button.svelte.d.ts +8 -0
  486. package/src/shadcn/calendar/calendar-year-select.svelte +1 -1
  487. package/src/shadcn/calendar/calendar-year-select.svelte.d.ts +4 -0
  488. package/src/shadcn/calendar/calendar.svelte.d.ts +21 -0
  489. package/src/shadcn/card/card-action.svelte.d.ts +5 -0
  490. package/src/shadcn/card/card-content.svelte.d.ts +5 -0
  491. package/src/shadcn/card/card-description.svelte.d.ts +5 -0
  492. package/src/shadcn/card/card-footer.svelte.d.ts +5 -0
  493. package/src/shadcn/card/card-header.svelte.d.ts +5 -0
  494. package/src/shadcn/card/card-title.svelte.d.ts +8 -0
  495. package/src/shadcn/card/card.svelte.d.ts +8 -0
  496. package/src/shadcn/checkbox/checkbox.svelte +2 -2
  497. package/src/shadcn/checkbox/checkbox.svelte.d.ts +4 -0
  498. package/src/shadcn/code-block/code-block-actions.svelte.d.ts +5 -0
  499. package/src/shadcn/code-block/code-block-content.svelte +1 -1
  500. package/src/shadcn/code-block/code-block-content.svelte.d.ts +12 -0
  501. package/src/shadcn/code-block/code-block-copy-button.svelte.d.ts +3 -0
  502. package/src/shadcn/code-block/code-block-footer.svelte.d.ts +5 -0
  503. package/src/shadcn/code-block/code-block-header.svelte +1 -1
  504. package/src/shadcn/code-block/code-block-header.svelte.d.ts +5 -0
  505. package/src/shadcn/code-block/code-block-line.svelte +1 -1
  506. package/src/shadcn/code-block/code-block-line.svelte.d.ts +25 -0
  507. package/src/shadcn/code-block/code-block-title.svelte +1 -1
  508. package/src/shadcn/code-block/code-block-title.svelte.d.ts +5 -0
  509. package/src/shadcn/code-block/code-block.svelte +3 -2
  510. package/src/shadcn/code-block/code-block.svelte.d.ts +18 -0
  511. package/src/shadcn/collapsible/collapsible-content.svelte.d.ts +4 -0
  512. package/src/shadcn/collapsible/collapsible-trigger.svelte.d.ts +4 -0
  513. package/src/shadcn/collapsible/collapsible.svelte.d.ts +4 -0
  514. package/src/shadcn/command/command-dialog.svelte.d.ts +14 -0
  515. package/src/shadcn/command/command-empty.svelte.d.ts +4 -0
  516. package/src/shadcn/command/command-group.svelte.d.ts +7 -0
  517. package/src/shadcn/command/command-input.svelte +2 -2
  518. package/src/shadcn/command/command-input.svelte.d.ts +13 -0
  519. package/src/shadcn/command/command-item.svelte +1 -1
  520. package/src/shadcn/command/command-item.svelte.d.ts +4 -0
  521. package/src/shadcn/command/command-link-item.svelte.d.ts +4 -0
  522. package/src/shadcn/command/command-list.svelte +7 -1
  523. package/src/shadcn/command/command-list.svelte.d.ts +4 -0
  524. package/src/shadcn/command/command-loading.svelte.d.ts +4 -0
  525. package/src/shadcn/command/command-separator.svelte.d.ts +4 -0
  526. package/src/shadcn/command/command-shortcut.svelte.d.ts +5 -0
  527. package/src/shadcn/command/command.svelte.d.ts +8 -0
  528. package/src/shadcn/context-menu/context-menu-checkbox-item.svelte +1 -1
  529. package/src/shadcn/context-menu/context-menu-checkbox-item.svelte.d.ts +10 -0
  530. package/src/shadcn/context-menu/context-menu-content.svelte.d.ts +10 -0
  531. package/src/shadcn/context-menu/context-menu-group-heading.svelte.d.ts +7 -0
  532. package/src/shadcn/context-menu/context-menu-group.svelte.d.ts +4 -0
  533. package/src/shadcn/context-menu/context-menu-item.svelte +1 -1
  534. package/src/shadcn/context-menu/context-menu-item.svelte.d.ts +8 -0
  535. package/src/shadcn/context-menu/context-menu-label.svelte.d.ts +8 -0
  536. package/src/shadcn/context-menu/context-menu-portal.svelte.d.ts +3 -0
  537. package/src/shadcn/context-menu/context-menu-radio-group.svelte.d.ts +4 -0
  538. package/src/shadcn/context-menu/context-menu-radio-item.svelte +1 -1
  539. package/src/shadcn/context-menu/context-menu-radio-item.svelte.d.ts +8 -0
  540. package/src/shadcn/context-menu/context-menu-separator.svelte.d.ts +4 -0
  541. package/src/shadcn/context-menu/context-menu-shortcut.svelte.d.ts +5 -0
  542. package/src/shadcn/context-menu/context-menu-sub-content.svelte.d.ts +4 -0
  543. package/src/shadcn/context-menu/context-menu-sub-trigger.svelte +1 -1
  544. package/src/shadcn/context-menu/context-menu-sub-trigger.svelte.d.ts +8 -0
  545. package/src/shadcn/context-menu/context-menu-sub.svelte.d.ts +3 -0
  546. package/src/shadcn/context-menu/context-menu-trigger.svelte.d.ts +4 -0
  547. package/src/shadcn/context-menu/context-menu.svelte.d.ts +3 -0
  548. package/src/shadcn/dialog/dialog-body.svelte.d.ts +5 -0
  549. package/src/shadcn/dialog/dialog-close.svelte.d.ts +4 -0
  550. package/src/shadcn/dialog/dialog-content.svelte +3 -4
  551. package/src/shadcn/dialog/dialog-content.svelte.d.ts +16 -0
  552. package/src/shadcn/dialog/dialog-description.svelte.d.ts +4 -0
  553. package/src/shadcn/dialog/dialog-footer.svelte.d.ts +15 -0
  554. package/src/shadcn/dialog/dialog-header.svelte.d.ts +5 -0
  555. package/src/shadcn/dialog/dialog-overlay.svelte.d.ts +4 -0
  556. package/src/shadcn/dialog/dialog-portal.svelte.d.ts +3 -0
  557. package/src/shadcn/dialog/dialog-title.svelte.d.ts +4 -0
  558. package/src/shadcn/dialog/dialog-trigger.svelte.d.ts +4 -0
  559. package/src/shadcn/dialog/dialog.svelte.d.ts +3 -0
  560. package/src/shadcn/dropdown-menu/dropdown-menu-checkbox-group.svelte.d.ts +4 -0
  561. package/src/shadcn/dropdown-menu/dropdown-menu-checkbox-item.svelte +2 -2
  562. package/src/shadcn/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +9 -0
  563. package/src/shadcn/dropdown-menu/dropdown-menu-content.svelte.d.ts +10 -0
  564. package/src/shadcn/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +8 -0
  565. package/src/shadcn/dropdown-menu/dropdown-menu-group.svelte.d.ts +4 -0
  566. package/src/shadcn/dropdown-menu/dropdown-menu-item.svelte.d.ts +8 -0
  567. package/src/shadcn/dropdown-menu/dropdown-menu-label.svelte.d.ts +8 -0
  568. package/src/shadcn/dropdown-menu/dropdown-menu-portal.svelte.d.ts +3 -0
  569. package/src/shadcn/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +4 -0
  570. package/src/shadcn/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
  571. package/src/shadcn/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +4 -0
  572. package/src/shadcn/dropdown-menu/dropdown-menu-separator.svelte.d.ts +4 -0
  573. package/src/shadcn/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts +5 -0
  574. package/src/shadcn/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +4 -0
  575. package/src/shadcn/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
  576. package/src/shadcn/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +7 -0
  577. package/src/shadcn/dropdown-menu/dropdown-menu-sub.svelte.d.ts +3 -0
  578. package/src/shadcn/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +4 -0
  579. package/src/shadcn/dropdown-menu/dropdown-menu.svelte.d.ts +3 -0
  580. package/src/shadcn/dropdown-menu/menu-item.ts +1 -1
  581. package/src/shadcn/empty/empty-content.svelte.d.ts +5 -0
  582. package/src/shadcn/empty/empty-description.svelte.d.ts +5 -0
  583. package/src/shadcn/empty/empty-header.svelte.d.ts +5 -0
  584. package/src/shadcn/empty/empty-media.svelte.d.ts +16 -0
  585. package/src/shadcn/empty/empty-title.svelte.d.ts +5 -0
  586. package/src/shadcn/empty/empty.svelte.d.ts +5 -0
  587. package/src/shadcn/field/field-content.svelte.d.ts +5 -0
  588. package/src/shadcn/field/field-description.svelte.d.ts +5 -0
  589. package/src/shadcn/field/field-error.svelte +1 -1
  590. package/src/shadcn/field/field-error.svelte.d.ts +12 -0
  591. package/src/shadcn/field/field-group.svelte.d.ts +5 -0
  592. package/src/shadcn/field/field-label.svelte.d.ts +10 -0
  593. package/src/shadcn/field/field-legend.svelte.d.ts +8 -0
  594. package/src/shadcn/field/field-separator.svelte.d.ts +9 -0
  595. package/src/shadcn/field/field-set.svelte.d.ts +5 -0
  596. package/src/shadcn/field/field-title.svelte.d.ts +5 -0
  597. package/src/shadcn/field/field.svelte +1 -1
  598. package/src/shadcn/field/field.svelte.d.ts +17 -0
  599. package/src/shadcn/field/simple-field.svelte.d.ts +15 -0
  600. package/src/shadcn/hooks/highlighter.ts +51 -2
  601. package/src/shadcn/hover-card/hover-card-content.svelte.d.ts +10 -0
  602. package/src/shadcn/hover-card/hover-card-portal.svelte.d.ts +3 -0
  603. package/src/shadcn/hover-card/hover-card-trigger.svelte.d.ts +4 -0
  604. package/src/shadcn/hover-card/hover-card.svelte.d.ts +3 -0
  605. package/src/shadcn/input/input.svelte.d.ts +13 -0
  606. package/src/shadcn/input/secret-input.svelte +3 -3
  607. package/src/shadcn/input/secret-input.svelte.d.ts +9 -0
  608. package/src/shadcn/input-otp/input-otp-group.svelte.d.ts +5 -0
  609. package/src/shadcn/input-otp/input-otp-separator.svelte.d.ts +5 -0
  610. package/src/shadcn/input-otp/input-otp-slot.svelte.d.ts +4 -0
  611. package/src/shadcn/input-otp/input-otp.svelte.d.ts +4 -0
  612. package/src/shadcn/kbd/kbd-group.svelte.d.ts +5 -0
  613. package/src/shadcn/kbd/kbd.svelte.d.ts +5 -0
  614. package/src/shadcn/label/label.svelte.d.ts +4 -0
  615. package/src/shadcn/marker/marker-content.svelte.d.ts +5 -0
  616. package/src/shadcn/marker/marker-icon.svelte.d.ts +5 -0
  617. package/src/shadcn/marker/marker.svelte.d.ts +21 -0
  618. package/src/shadcn/message/message-avatar.svelte.d.ts +5 -0
  619. package/src/shadcn/message/message-content.svelte.d.ts +5 -0
  620. package/src/shadcn/message/message-footer.svelte.d.ts +5 -0
  621. package/src/shadcn/message/message-group.svelte.d.ts +5 -0
  622. package/src/shadcn/message/message-header.svelte.d.ts +5 -0
  623. package/src/shadcn/message/message.svelte.d.ts +8 -0
  624. package/src/shadcn/message-scroller/message-scroller-button.svelte +13 -1
  625. package/src/shadcn/message-scroller/message-scroller-button.svelte.d.ts +9 -0
  626. package/src/shadcn/message-scroller/message-scroller-content.svelte.d.ts +4 -0
  627. package/src/shadcn/message-scroller/message-scroller-item.svelte.d.ts +4 -0
  628. package/src/shadcn/message-scroller/message-scroller-provider.svelte.d.ts +4 -0
  629. package/src/shadcn/message-scroller/message-scroller-viewport.svelte.d.ts +4 -0
  630. package/src/shadcn/message-scroller/message-scroller.svelte.d.ts +4 -0
  631. package/src/shadcn/popover/popover-close.svelte.d.ts +4 -0
  632. package/src/shadcn/popover/popover-content.svelte.d.ts +10 -0
  633. package/src/shadcn/popover/popover-description.svelte.d.ts +5 -0
  634. package/src/shadcn/popover/popover-header.svelte.d.ts +5 -0
  635. package/src/shadcn/popover/popover-portal.svelte.d.ts +3 -0
  636. package/src/shadcn/popover/popover-title.svelte.d.ts +5 -0
  637. package/src/shadcn/popover/popover-trigger.svelte.d.ts +4 -0
  638. package/src/shadcn/popover/popover.svelte.d.ts +3 -0
  639. package/src/shadcn/progress/progress.svelte.d.ts +10 -0
  640. package/src/shadcn/radio-group/radio-group-item.svelte +1 -1
  641. package/src/shadcn/radio-group/radio-group-item.svelte.d.ts +4 -0
  642. package/src/shadcn/radio-group/radio-group.svelte.d.ts +4 -0
  643. package/src/shadcn/scroll-area/scroll-area-scrollbar.svelte.d.ts +4 -0
  644. package/src/shadcn/scroll-area/scroll-area.svelte +1 -0
  645. package/src/shadcn/scroll-area/scroll-area.svelte.d.ts +11 -0
  646. package/src/shadcn/select/select-content.svelte.d.ts +11 -0
  647. package/src/shadcn/select/select-group-heading.svelte.d.ts +10 -0
  648. package/src/shadcn/select/select-group.svelte.d.ts +4 -0
  649. package/src/shadcn/select/select-item.svelte +1 -1
  650. package/src/shadcn/select/select-item.svelte.d.ts +4 -0
  651. package/src/shadcn/select/select-label.svelte.d.ts +6 -0
  652. package/src/shadcn/select/select-portal.svelte.d.ts +3 -0
  653. package/src/shadcn/select/select-scroll-down-button.svelte +1 -1
  654. package/src/shadcn/select/select-scroll-down-button.svelte.d.ts +4 -0
  655. package/src/shadcn/select/select-scroll-up-button.svelte +1 -1
  656. package/src/shadcn/select/select-scroll-up-button.svelte.d.ts +4 -0
  657. package/src/shadcn/select/select-separator.svelte.d.ts +4 -0
  658. package/src/shadcn/select/select-trigger.svelte +1 -0
  659. package/src/shadcn/select/select-trigger.svelte.d.ts +8 -0
  660. package/src/shadcn/select/select.svelte.d.ts +3 -0
  661. package/src/shadcn/separator/separator.svelte.d.ts +4 -0
  662. package/src/shadcn/sheet/sheet-body.svelte.d.ts +5 -0
  663. package/src/shadcn/sheet/sheet-close.svelte.d.ts +4 -0
  664. package/src/shadcn/sheet/sheet-content.svelte +5 -7
  665. package/src/shadcn/sheet/sheet-content.svelte.d.ts +21 -0
  666. package/src/shadcn/sheet/sheet-description.svelte.d.ts +4 -0
  667. package/src/shadcn/sheet/sheet-footer.svelte.d.ts +12 -0
  668. package/src/shadcn/sheet/sheet-header.svelte.d.ts +5 -0
  669. package/src/shadcn/sheet/sheet-overlay.svelte.d.ts +4 -0
  670. package/src/shadcn/sheet/sheet-portal.svelte.d.ts +3 -0
  671. package/src/shadcn/sheet/sheet-title.svelte.d.ts +4 -0
  672. package/src/shadcn/sheet/sheet-trigger.svelte.d.ts +4 -0
  673. package/src/shadcn/sheet/sheet.css +47 -43
  674. package/src/shadcn/sheet/sheet.svelte.d.ts +3 -0
  675. package/src/shadcn/sidebar/constants.ts +1 -1
  676. package/src/shadcn/sidebar/context.svelte.ts +16 -1
  677. package/src/shadcn/sidebar/sidebar-content.svelte.d.ts +5 -0
  678. package/src/shadcn/sidebar/sidebar-footer.svelte.d.ts +5 -0
  679. package/src/shadcn/sidebar/sidebar-group-action.svelte.d.ts +11 -0
  680. package/src/shadcn/sidebar/sidebar-group-content.svelte.d.ts +5 -0
  681. package/src/shadcn/sidebar/sidebar-group-label.svelte.d.ts +11 -0
  682. package/src/shadcn/sidebar/sidebar-group.svelte.d.ts +5 -0
  683. package/src/shadcn/sidebar/sidebar-header.svelte.d.ts +5 -0
  684. package/src/shadcn/sidebar/sidebar-input.svelte.d.ts +11 -0
  685. package/src/shadcn/sidebar/sidebar-inset.svelte.d.ts +5 -0
  686. package/src/shadcn/sidebar/sidebar-menu-action.svelte.d.ts +12 -0
  687. package/src/shadcn/sidebar/sidebar-menu-badge.svelte.d.ts +5 -0
  688. package/src/shadcn/sidebar/sidebar-menu-button.svelte.d.ts +31 -0
  689. package/src/shadcn/sidebar/sidebar-menu-item.svelte.d.ts +5 -0
  690. package/src/shadcn/sidebar/sidebar-menu-skeleton.svelte.d.ts +8 -0
  691. package/src/shadcn/sidebar/sidebar-menu-sub-button.svelte.d.ts +13 -0
  692. package/src/shadcn/sidebar/sidebar-menu-sub-item.svelte.d.ts +5 -0
  693. package/src/shadcn/sidebar/sidebar-menu-sub.svelte.d.ts +5 -0
  694. package/src/shadcn/sidebar/sidebar-menu.svelte.d.ts +5 -0
  695. package/src/shadcn/sidebar/sidebar-provider.svelte +3 -0
  696. package/src/shadcn/sidebar/sidebar-provider.svelte.d.ts +9 -0
  697. package/src/shadcn/sidebar/sidebar-rail.svelte.d.ts +5 -0
  698. package/src/shadcn/sidebar/sidebar-separator.svelte.d.ts +13 -0
  699. package/src/shadcn/sidebar/sidebar-trigger.svelte +3 -1
  700. package/src/shadcn/sidebar/sidebar-trigger.svelte.d.ts +8 -0
  701. package/src/shadcn/sidebar/sidebar.svelte +3 -0
  702. package/src/shadcn/sidebar/sidebar.svelte.d.ts +10 -0
  703. package/src/shadcn/sidebar/sidebar.test.ts +69 -0
  704. package/src/shadcn/skeleton/skeleton-delay.svelte.d.ts +20 -0
  705. package/src/shadcn/skeleton/skeleton.svelte.d.ts +5 -0
  706. package/src/shadcn/slider/slider.svelte.d.ts +11 -0
  707. package/src/shadcn/sonner/sonner.svelte +4 -4
  708. package/src/shadcn/sonner/sonner.svelte.d.ts +4 -0
  709. package/src/shadcn/spinner/spinner.svelte.d.ts +4 -0
  710. package/src/shadcn/switch/switch.svelte.d.ts +8 -0
  711. package/src/shadcn/table/table-body.svelte.d.ts +5 -0
  712. package/src/shadcn/table/table-caption.svelte.d.ts +5 -0
  713. package/src/shadcn/table/table-cell.svelte +16 -12
  714. package/src/shadcn/table/table-cell.svelte.d.ts +9 -0
  715. package/src/shadcn/table/table-footer.svelte.d.ts +5 -0
  716. package/src/shadcn/table/table-head.svelte.d.ts +5 -0
  717. package/src/shadcn/table/table-header.svelte.d.ts +5 -0
  718. package/src/shadcn/table/table-row.svelte.d.ts +5 -0
  719. package/src/shadcn/table/table.svelte.d.ts +5 -0
  720. package/src/shadcn/tabs/tabs-content.svelte.d.ts +4 -0
  721. package/src/shadcn/tabs/tabs-list.svelte.d.ts +8 -0
  722. package/src/shadcn/tabs/tabs-trigger.svelte.d.ts +4 -0
  723. package/src/shadcn/tabs/tabs.svelte.d.ts +4 -0
  724. package/src/shadcn/textarea/textarea.svelte.d.ts +5 -0
  725. package/src/shadcn/toggle/toggle.svelte.d.ts +10 -0
  726. package/src/shadcn/toggle-group/toggle-group-item.svelte.d.ts +6 -0
  727. package/src/shadcn/toggle-group/toggle-group.svelte.d.ts +15 -0
  728. package/src/shadcn/tooltip/tooltip-content.svelte.d.ts +11 -0
  729. package/src/shadcn/tooltip/tooltip-portal.svelte.d.ts +4 -0
  730. package/src/shadcn/tooltip/tooltip-provider.svelte.d.ts +4 -0
  731. package/src/shadcn/tooltip/tooltip-trigger.svelte.d.ts +4 -0
  732. package/src/shadcn/tooltip/tooltip.svelte.d.ts +4 -0
  733. package/src/shadcn/trace/trace-collapsible-content.svelte.d.ts +4 -0
  734. package/src/shadcn/trace/trace-collapsible-trigger.svelte +2 -2
  735. package/src/shadcn/trace/trace-collapsible-trigger.svelte.d.ts +4 -0
  736. package/src/shadcn/trace/trace-collapsible.svelte.d.ts +4 -0
  737. package/src/shadcn/trace/trace-description.svelte +1 -1
  738. package/src/shadcn/trace/trace-description.svelte.d.ts +5 -0
  739. package/src/shadcn/trace/trace-icon.svelte.d.ts +5 -0
  740. package/src/shadcn/trace/trace-line.svelte +1 -1
  741. package/src/shadcn/trace/trace-line.svelte.d.ts +9 -0
  742. package/src/shadcn/trace/trace-title.svelte.d.ts +5 -0
  743. package/src/shadcn/trace/trace.svelte.d.ts +5 -0
  744. package/src/slides/Controls.svelte +96 -92
  745. package/src/slides/Controls.svelte.d.ts +10 -0
  746. package/src/slides/Deck.svelte +65 -58
  747. package/src/slides/Deck.svelte.d.ts +5 -0
  748. package/src/slides/Fragment.svelte +25 -21
  749. package/src/slides/Fragment.svelte.d.ts +15 -0
  750. package/src/slides/Overview.svelte +65 -60
  751. package/src/slides/Overview.svelte.d.ts +8 -0
  752. package/src/slides/Presenter.svelte +146 -139
  753. package/src/slides/Presenter.svelte.d.ts +8 -0
  754. package/src/slides/README.md +1 -1
  755. package/src/slides/Slide.svelte +68 -63
  756. package/src/slides/Slide.svelte.d.ts +18 -0
  757. package/src/slides/SlideList.svelte.d.ts +9 -0
  758. package/src/slides/deck-controller.svelte.ts +3 -22
  759. package/src/slides/deck-keys.test.ts +49 -0
  760. package/src/slides/theme.css +197 -176
  761. package/src/slides/types.ts +2 -1
  762. package/src/status/index.ts +0 -1
  763. package/src/status/status-badge.svelte +7 -5
  764. package/src/status/status-badge.svelte.d.ts +28 -0
  765. package/src/status/status-badge.test.ts +44 -0
  766. package/src/status/status-dot.svelte +54 -49
  767. package/src/status/status-dot.svelte.d.ts +16 -0
  768. package/src/status/status-icon.svelte +19 -6
  769. package/src/status/status-icon.svelte.d.ts +14 -0
  770. package/src/status/status-pill.svelte.d.ts +13 -0
  771. package/src/test-setup.test.ts +5 -0
  772. package/src/thread/thread-body.svelte.d.ts +9 -0
  773. package/src/thread/thread-events.svelte.d.ts +8 -0
  774. package/src/thread/thread-focus.svelte.test.ts +90 -0
  775. package/src/thread/thread.svelte +70 -15
  776. package/src/thread/thread.svelte.d.ts +40 -0
  777. package/src/tokens/base.css +47 -45
  778. package/src/tokens/design.css +8 -0
  779. package/src/tokens/index.css +3 -0
  780. package/src/triage/triage-plan.svelte +42 -9
  781. package/src/triage/triage-plan.svelte.d.ts +28 -0
  782. package/src/triage/triage-queue.svelte +61 -23
  783. package/src/triage/triage-queue.svelte.d.ts +41 -0
  784. package/src/triage/triage-task.svelte +11 -3
  785. package/src/triage/triage-task.svelte.d.ts +22 -0
  786. package/src/triage/triage.svelte.test.ts +130 -0
  787. package/src/work/README.md +8 -7
  788. package/src/work/detail/task-chip.svelte.d.ts +10 -0
  789. package/src/work/detail/task-detail.svelte.d.ts +36 -0
  790. package/src/work/docs/doc-editor-page.svelte +20 -16
  791. package/src/work/docs/doc-editor-page.svelte.d.ts +31 -0
  792. package/src/work/docs/doc-menu.svelte +44 -38
  793. package/src/work/docs/doc-menu.svelte.d.ts +35 -0
  794. package/src/work/docs/edited-chip.svelte +9 -9
  795. package/src/work/docs/edited-chip.svelte.d.ts +26 -0
  796. package/src/work/gantt/gantt-bar.svelte +87 -78
  797. package/src/work/gantt/gantt-bar.svelte.d.ts +29 -0
  798. package/src/work/gantt/gantt-grid.svelte +30 -26
  799. package/src/work/gantt/gantt-grid.svelte.d.ts +14 -0
  800. package/src/work/gantt/gantt-group-row.svelte +12 -8
  801. package/src/work/gantt/gantt-group-row.svelte.d.ts +12 -0
  802. package/src/work/gantt/gantt-header.svelte +2 -4
  803. package/src/work/gantt/gantt-header.svelte.d.ts +17 -0
  804. package/src/work/gantt/gantt-task-row.svelte +43 -36
  805. package/src/work/gantt/gantt-task-row.svelte.d.ts +53 -0
  806. package/src/work/gantt/gantt.css +14 -10
  807. package/src/work/gantt/gantt.test.ts +14 -2
  808. package/src/work/inbox/inbox-card.svelte +13 -16
  809. package/src/work/inbox/inbox-card.svelte.d.ts +22 -0
  810. package/src/work/inbox/inbox-draft.svelte +3 -3
  811. package/src/work/inbox/inbox-draft.svelte.d.ts +18 -0
  812. package/src/work/inbox/inbox-trace.svelte.d.ts +11 -0
  813. package/src/work/index.ts +0 -24
  814. package/src/work/kanban-board.svelte +103 -66
  815. package/src/work/kanban-board.svelte.d.ts +107 -0
  816. package/src/work/kanban-board.svelte.test.ts +89 -0
  817. package/src/work/kanban-column-head.svelte.d.ts +40 -0
  818. package/src/work/kanban-column.svelte +45 -43
  819. package/src/work/kanban-column.svelte.d.ts +20 -0
  820. package/src/work/kanban-fold-chevron.svelte +15 -11
  821. package/src/work/kanban-fold-chevron.svelte.d.ts +8 -0
  822. package/src/work/kanban-hidden-rail.svelte +2 -1
  823. package/src/work/kanban-hidden-rail.svelte.d.ts +39 -0
  824. package/src/work/kanban-keyboard.ts +8 -6
  825. package/src/work/task-gantt.svelte +18 -4
  826. package/src/work/task-gantt.svelte.d.ts +85 -0
  827. package/src/work/task-list.svelte +166 -116
  828. package/src/work/task-list.svelte.d.ts +81 -0
  829. package/src/work/task-list.svelte.test.ts +113 -0
  830. package/src/work/time/time-chip.svelte +2 -4
  831. package/src/work/time/time-chip.svelte.d.ts +14 -0
  832. package/src/work/time/time-dot.svelte +30 -25
  833. package/src/work/time/time-dot.svelte.d.ts +9 -0
  834. package/src/work/time/time-ring.svelte +15 -11
  835. package/src/work/time/time-ring.svelte.d.ts +18 -0
  836. package/src/work/time/time-tracker.svelte +49 -44
  837. package/src/work/time/time-tracker.svelte.d.ts +59 -0
  838. package/dist/ai/index.js +0 -40
  839. package/dist/index.js +0 -18
  840. package/dist/record/demo-data.js +0 -485
  841. package/dist/test-setup.js +0 -30
  842. package/src/agents/demo.svelte +0 -137
  843. package/src/ai/index.ts +0 -101
  844. package/src/design/index.css +0 -215
  845. package/src/design/polish.css +0 -150
  846. package/src/index.ts +0 -53
  847. package/src/onboarding/demo.svelte +0 -105
  848. package/src/record/demo-data.ts +0 -352
  849. package/src/record/record-demo.svelte +0 -342
  850. package/src/slides/demo-slides.svelte +0 -382
  851. package/src/slides/demo.svelte +0 -180
  852. package/src/test-setup.ts +0 -34
  853. package/src/work/demo.svelte +0 -561
  854. package/src/work/detail/detail-demo.svelte +0 -258
  855. package/src/work/docs/docs-demo.svelte +0 -227
@@ -1,6 +1,8 @@
1
1
  <script lang="ts" generics="T, C extends KanbanColumnDef = KanbanColumnDef">
2
2
  import type { Snippet } from "svelte";
3
3
  import { slide } from "svelte/transition";
4
+ import LiveRegion from "../lib/live-region.svelte";
5
+ import { focusAfterRender } from "../lib/focus.js";
4
6
  import KanbanColumn from "./kanban-column.svelte";
5
7
  import KanbanColumnHead from "./kanban-column-head.svelte";
6
8
  import KanbanFoldChevron from "./kanban-fold-chevron.svelte";
@@ -51,8 +53,10 @@
51
53
  wrapColumn?: Snippet<[C, Snippet<[Record<string, unknown>]>]>;
52
54
  /** Enter or Space on a focused card. Leave out when the card holds its own links and buttons. */
53
55
  onSelect?: (id: string) => void;
54
- /** The screen-reader name of a card. Defaults to a hint about the keyboard move. */
56
+ /** The screen-reader name of a card. Defaults to the card's own text. */
55
57
  getLabel?: (item: T) => string;
58
+ /** Read after a card's name, as its description. */
59
+ moveHint?: string;
56
60
  emptyLabel?: string;
57
61
  /** Shows a plus in each default column head that adds a card to that column. */
58
62
  onAdd?: (columnId: string) => void;
@@ -93,6 +97,8 @@
93
97
  * preventDefault, so it is not a drop target.
94
98
  */
95
99
  isDroppable?: (columnId: string) => boolean;
100
+ /** What a screen reader hears after a card moves with the keyboard. */
101
+ movedLabel?: (column: C) => string;
96
102
  class?: string;
97
103
  }
98
104
 
@@ -111,6 +117,7 @@
111
117
  columnFooter,
112
118
  wrapColumn,
113
119
  getLabel,
120
+ moveHint = "Press Alt plus Left or Right arrow to move between columns.",
114
121
  onSelect,
115
122
  emptyLabel = "Nothing here yet",
116
123
  onAdd,
@@ -129,6 +136,7 @@
129
136
  hiddenItem,
130
137
  dropAtTop,
131
138
  isDroppable,
139
+ movedLabel = (column) => `Moved to ${column.label}`,
132
140
  class: className,
133
141
  }: Props<T, C> = $props();
134
142
 
@@ -155,6 +163,19 @@
155
163
  const rail = board.rail;
156
164
 
157
165
  type ColumnView = KanbanColumnView<T, C>;
166
+
167
+ const uid = $props.id();
168
+ const hintId = `${uid}-hint`;
169
+ let boardEl: HTMLDivElement | undefined = $state();
170
+ let live: LiveRegion | undefined = $state();
171
+
172
+ async function onCardKeyDown(e: KeyboardEvent, id: string) {
173
+ const moved = board.onCardKeyDown(e, id);
174
+ if (!moved) return;
175
+ await moved.done;
176
+ void live?.announce(movedLabel(moved.column));
177
+ await focusAfterRender(boardEl, `[data-kanban-card="${CSS.escape(id)}"]`);
178
+ }
158
179
  </script>
159
180
 
160
181
  <!-- The slot keeps the drag state where it is, or hovering it would bubble to the column and jump it to the end. -->
@@ -173,6 +194,7 @@
173
194
 
174
195
  {#snippet card(column: C, item: T, index: number, list: T[])}
175
196
  {@const id = getId(item)}
197
+ {@const cardId = `${uid}-card-${encodeURIComponent(id)}`}
176
198
  {@const nextId = board.idAt(list, index + 1)}
177
199
  {@const isSource = dnd.isDragSource(id)}
178
200
  <!-- The slot right after the held card is its own spot, so the card's place shows it instead. -->
@@ -186,8 +208,11 @@
186
208
  <div
187
209
  role="listitem"
188
210
  tabindex="0"
189
- aria-label={getLabel?.(item) ??
190
- "Card. Press Alt plus Left or Right arrow to move between columns."}
211
+ id={cardId}
212
+ data-kanban-card={id}
213
+ aria-label={getLabel?.(item)}
214
+ aria-labelledby={getLabel ? undefined : cardId}
215
+ aria-describedby={hintId}
191
216
  aria-keyshortcuts="Alt+ArrowLeft Alt+ArrowRight"
192
217
  draggable="true"
193
218
  ondragstart={(e) => {
@@ -200,7 +225,7 @@
200
225
  rail.dragOverHidden = null;
201
226
  }}
202
227
  ondragover={(e) => dnd.onItemDragOver(e, column.id, id, nextId)}
203
- onkeydown={(e) => board.onCardKeyDown(e, id)}
228
+ onkeydown={(e) => void onCardKeyDown(e, id)}
204
229
  class={cn(
205
230
  "kanban-card cursor-grab outline-none focus-visible:shadow-(--ring-focus) active:cursor-grabbing",
206
231
  workLooks.card,
@@ -244,14 +269,19 @@
244
269
  />
245
270
  {/snippet}
246
271
 
247
- {#each head as item, index (getId(item))}
248
- {@render card(column, item, index, list)}
249
- {/each}
272
+ <!-- contents: the list owns the cards for screen readers and leaves the column's flex gap alone. -->
273
+ {#if head.length > 0}
274
+ <div role="list" class="contents">
275
+ {#each head as item, index (getId(item))}
276
+ {@render card(column, item, index, list)}
277
+ {/each}
278
+ </div>
279
+ {/if}
250
280
 
251
281
  {#if showTail}
252
282
  <!-- The tail sits shut in a 0fr row, so opening and closing animate its height. -->
253
283
  <div class="kanban-fold" data-open={open} inert={!open}>
254
- <div class="kanban-fold-inner">
284
+ <div class="kanban-fold-inner" role="list">
255
285
  {#each tail as item, index (getId(item))}
256
286
  {@render card(column, item, head.length + index, list)}
257
287
  {/each}
@@ -289,6 +319,7 @@
289
319
  {/snippet}
290
320
 
291
321
  <div
322
+ bind:this={boardEl}
292
323
  class={cn(
293
324
  "kanban-board @container/kanban-board flex min-h-0 flex-1 items-stretch gap-4 overflow-x-auto pb-2",
294
325
  "max-sm:-mx-4 max-sm:snap-x max-sm:snap-proximity max-sm:scroll-px-4 max-sm:px-4",
@@ -319,75 +350,81 @@
319
350
  {hiddenItem}
320
351
  />
321
352
  {/if}
353
+
354
+ <LiveRegion bind:this={live} />
355
+ <p id={hintId} hidden>{moveHint}</p>
322
356
  </div>
323
357
 
324
358
  <style>
325
- /* A grid row folds the card out of the column smoothly, so the cards below slide up. */
326
- .kanban-card {
327
- display: grid;
328
- grid-template-columns: minmax(0, 1fr);
329
- grid-template-rows: 1fr;
330
- transition:
331
- grid-template-rows var(--duration-quick) var(--ease-smooth-out),
332
- margin-top var(--duration-quick) var(--ease-smooth-out);
333
- }
359
+ @layer theme, base, components, utilities;
334
360
 
335
- .kanban-card > :global(*) {
336
- min-height: 0;
337
- }
361
+ @layer components {
362
+ /* A grid row folds the card out of the column smoothly, so the cards below slide up. */
363
+ .kanban-card {
364
+ display: grid;
365
+ grid-template-columns: minmax(0, 1fr);
366
+ grid-template-rows: 1fr;
367
+ transition:
368
+ grid-template-rows var(--duration-quick) var(--ease-smooth-out),
369
+ margin-top var(--duration-quick) var(--ease-smooth-out);
370
+ }
338
371
 
339
- /* -0.375rem cancels the column's gap-1.5, so a folded card leaves no gap behind. */
340
- .kanban-lifted-out {
341
- grid-template-rows: 0fr;
342
- margin-top: -0.375rem;
343
- }
372
+ .kanban-card > :global(*) {
373
+ min-height: 0;
374
+ }
344
375
 
345
- .kanban-lifted-out > :global(*) {
346
- overflow: hidden;
347
- visibility: hidden;
348
- }
376
+ /* -0.375rem cancels the column's gap-1.5, so a folded card leaves no gap behind. */
377
+ .kanban-lifted-out {
378
+ grid-template-rows: 0fr;
379
+ margin-top: -0.375rem;
380
+ }
349
381
 
350
- /* The fold: height rides grid-template-rows 0fr to 1fr, the fade runs shorter so it leads.
351
- Shut, -0.375rem cancels the well's gap-1.5, so a closed fold leaves no gap behind. */
352
- .kanban-fold {
353
- display: grid;
354
- grid-template-rows: 0fr;
355
- margin-top: -0.375rem;
356
- opacity: 0;
357
- transition:
358
- grid-template-rows var(--duration-fast) var(--ease-smooth-out),
359
- margin-top var(--duration-fast) var(--ease-smooth-out),
360
- opacity var(--duration-quick) var(--ease-smooth-out);
361
- }
382
+ .kanban-lifted-out > :global(*) {
383
+ overflow: hidden;
384
+ visibility: hidden;
385
+ }
362
386
 
363
- .kanban-fold[data-open="true"] {
364
- grid-template-rows: 1fr;
365
- margin-top: 0;
366
- opacity: 1;
367
- }
387
+ /* The fold: height rides grid-template-rows 0fr to 1fr and the shorter fade leads.
388
+ Shut, -0.375rem cancels the well's gap-1.5, so a closed fold leaves no gap. */
389
+ .kanban-fold {
390
+ display: grid;
391
+ grid-template-rows: 0fr;
392
+ margin-top: -0.375rem;
393
+ opacity: 0;
394
+ transition:
395
+ grid-template-rows var(--duration-fast) var(--ease-smooth-out),
396
+ margin-top var(--duration-fast) var(--ease-smooth-out),
397
+ opacity var(--duration-quick) var(--ease-smooth-out);
398
+ }
368
399
 
369
- /* clip, not hidden: the margin lets a lifted card's shadow out while the fold stays shut.
370
- relative: a card's sr-only labels are absolute, and clip only cuts what this box contains.
371
- Without it they hang below a shut fold and the page scrolls past its last lane (TSK-1617). */
372
- .kanban-fold-inner {
373
- position: relative;
374
- display: flex;
375
- flex-direction: column;
376
- gap: 0.375rem;
377
- min-height: 0;
378
- overflow: clip;
379
- overflow-clip-margin: 0.375rem;
380
- }
400
+ .kanban-fold[data-open="true"] {
401
+ grid-template-rows: 1fr;
402
+ margin-top: 0;
403
+ opacity: 1;
404
+ }
381
405
 
382
- /* The held card's place keeps its hole, never its content. */
383
- .kanban-origin-slot > :global(*) {
384
- visibility: hidden;
385
- }
406
+ /* clip, not hidden, lets a lifted card's shadow out. relative keeps cards' absolute
407
+ sr-only labels clipped, or they hang below a shut fold and scroll the page (TSK-1617). */
408
+ .kanban-fold-inner {
409
+ position: relative;
410
+ display: flex;
411
+ flex-direction: column;
412
+ gap: 0.375rem;
413
+ min-height: 0;
414
+ overflow: clip;
415
+ overflow-clip-margin: 0.375rem;
416
+ }
386
417
 
387
- @media (prefers-reduced-motion: reduce) {
388
- .kanban-card,
389
- .kanban-fold {
390
- transition: none;
418
+ /* The held card's place keeps its hole, never its content. */
419
+ .kanban-origin-slot > :global(*) {
420
+ visibility: hidden;
421
+ }
422
+
423
+ @media (prefers-reduced-motion: reduce) {
424
+ .kanban-card,
425
+ .kanban-fold {
426
+ transition: none;
427
+ }
391
428
  }
392
429
  }
393
430
  </style>
@@ -0,0 +1,107 @@
1
+ import type { Snippet } from "svelte";
2
+ import type { KanbanCardContext, KanbanColumn as KanbanColumnDef, KanbanColumnContext, KanbanMove, KanbanSortKey } from "./kanban-types.js";
3
+ interface Props<T, C extends KanbanColumnDef> {
4
+ /** Plain column defs, or your own type that extends one. Snippets get it back as you passed it. */
5
+ columns: C[];
6
+ items: T[];
7
+ /** The stable id of a card. Used for keys, drag payloads and move events. */
8
+ getId: (item: T) => string;
9
+ /** The column id a card belongs to. */
10
+ getColumn: (item: T) => string;
11
+ /** Called on drop with what to persist. Awaited, so the caller can save. */
12
+ onMove: (id: string, move: KanbanMove) => void | Promise<void>;
13
+ renderCard: Snippet<[T, KanbanCardContext]>;
14
+ /** Reads a card's manual order key. Required for `sortKey="manual"` ordering. */
15
+ boardOrder?: (item: T) => string | null | undefined;
16
+ /** Breaks a tie in manual order: two cards with the same key, or both without one. */
17
+ manualTiebreak?: (a: T, b: T) => number;
18
+ /** Extra named sorts, e.g. by title or owner. `manual` is always available. */
19
+ sortKeys?: KanbanSortKey<T>[];
20
+ /** The active sort. `"manual"` (default) orders by `boardOrder`, else by the order of `items`. */
21
+ sortKey?: string;
22
+ /** Optional column header. Defaults to the label plus a count. */
23
+ columnHeader?: Snippet<[C, KanbanColumnContext]>;
24
+ /** Rendered under a column's cards, e.g. a "Show all 12" or an add button. */
25
+ columnFooter?: Snippet<[C, KanbanColumnContext]>;
26
+ /**
27
+ * Wraps a column for a context menu or tooltip: render `column` once and spread the
28
+ * `props` it hands you, so the trigger lands on the column.
29
+ */
30
+ wrapColumn?: Snippet<[C, Snippet<[Record<string, unknown>]>]>;
31
+ /** Enter or Space on a focused card. Leave out when the card holds its own links and buttons. */
32
+ onSelect?: (id: string) => void;
33
+ /** The screen-reader name of a card. Defaults to the card's own text. */
34
+ getLabel?: (item: T) => string;
35
+ /** Read after a card's name, as its description. */
36
+ moveHint?: string;
37
+ emptyLabel?: string;
38
+ /** Shows a plus in each default column head that adds a card to that column. */
39
+ onAdd?: (columnId: string) => void;
40
+ /** The plus button's accessible name, followed by the column label. */
41
+ addLabel?: string;
42
+ /**
43
+ * Cards a column shows before the rest fold behind "Show N more": a number for every
44
+ * column, or per column (undefined for no cap). `Infinity` turns the fold off.
45
+ */
46
+ limit?: number | ((columnId: string) => number | undefined);
47
+ /** The fold's open button, given how many cards it holds. */
48
+ moreLabel?: (hidden: number) => string;
49
+ /** The fold's close button. */
50
+ lessLabel?: string;
51
+ /** The header caret's open and close names, followed by the column label. */
52
+ expandColumnLabel?: string;
53
+ collapseColumnLabel?: string;
54
+ /**
55
+ * Column ids the header caret opened. Pass one array to every board in a stack of
56
+ * swimlanes, so the caret opens that column in each. "Show N more" stays per board.
57
+ */
58
+ expanded?: string[];
59
+ onExpandedChange?: (ids: string[]) => void;
60
+ /** Column ids folded into the rail on the right. Controlled; leave out to let the board remember. */
61
+ hidden?: string[];
62
+ onHiddenChange?: (ids: string[]) => void;
63
+ /** Heading over the rail of hidden columns. */
64
+ hiddenLabel?: string;
65
+ /** The rail's button that brings every hidden column back. */
66
+ showAllLabel?: string;
67
+ /** Content of one entry in the hidden rail. Defaults to the label and a count. */
68
+ hiddenItem?: Snippet<[C, {
69
+ count: number;
70
+ active: boolean;
71
+ }]>;
72
+ /** A capped column is one whose tail is hidden, so its empty space drops on top. Overrides `limit`. */
73
+ dropAtTop?: (columnId: string) => boolean;
74
+ /**
75
+ * Override per-column drop targets. Defaults to each column's `droppable`
76
+ * flag (true when unset). A column it returns false for never calls
77
+ * preventDefault, so it is not a drop target.
78
+ */
79
+ isDroppable?: (columnId: string) => boolean;
80
+ /** What a screen reader hears after a card moves with the keyboard. */
81
+ movedLabel?: (column: C) => string;
82
+ class?: string;
83
+ }
84
+ declare function $$render<T, C extends KanbanColumnDef = KanbanColumnDef>(): {
85
+ props: Props<T, C>;
86
+ exports: {};
87
+ bindings: "";
88
+ slots: {};
89
+ events: {};
90
+ };
91
+ declare class __sveltets_Render<T, C extends KanbanColumnDef = KanbanColumnDef> {
92
+ props(): ReturnType<typeof $$render<T, C>>['props'];
93
+ events(): ReturnType<typeof $$render<T, C>>['events'];
94
+ slots(): ReturnType<typeof $$render<T, C>>['slots'];
95
+ bindings(): "";
96
+ exports(): {};
97
+ }
98
+ interface $$IsomorphicComponent {
99
+ new <T, C extends KanbanColumnDef = KanbanColumnDef>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T, C>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T, C>['props']>, ReturnType<__sveltets_Render<T, C>['events']>, ReturnType<__sveltets_Render<T, C>['slots']>> & {
100
+ $$bindings?: ReturnType<__sveltets_Render<T, C>['bindings']>;
101
+ } & ReturnType<__sveltets_Render<T, C>['exports']>;
102
+ <T, C extends KanbanColumnDef = KanbanColumnDef>(internal: unknown, props: ReturnType<__sveltets_Render<T, C>['props']> & {}): ReturnType<__sveltets_Render<T, C>['exports']>;
103
+ z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
104
+ }
105
+ declare const $$Component: $$IsomorphicComponent;
106
+ type $$Component<T, C extends KanbanColumnDef = KanbanColumnDef> = InstanceType<typeof $$Component<T, C>>;
107
+ export default $$Component;
@@ -0,0 +1,89 @@
1
+ import { createRawSnippet, flushSync, mount, tick, unmount } from "svelte";
2
+ import { describe, expect, it } from "vite-plus/test";
3
+ import KanbanBoard from "./kanban-board.svelte";
4
+ import type { KanbanMove } from "./kanban-types.js";
5
+
6
+ type Task = { id: string; columnId: string; title: string; boardOrder: string };
7
+
8
+ const columns = [
9
+ { id: "todo", label: "To do" },
10
+ { id: "doing", label: "In progress" },
11
+ { id: "done", label: "Done" },
12
+ ];
13
+
14
+ const renderCard = createRawSnippet((task: () => Task) => ({
15
+ render: () => `<p>${task().title}</p>`,
16
+ }));
17
+
18
+ function render() {
19
+ const props = $state({
20
+ columns,
21
+ items: [
22
+ { id: "k1", columnId: "todo", title: "Draft notes", boardOrder: "a0" },
23
+ { id: "k2", columnId: "doing", title: "Ship flow", boardOrder: "a0" },
24
+ ] as Task[],
25
+ getId: (t: Task) => t.id,
26
+ getColumn: (t: Task) => t.columnId,
27
+ boardOrder: (t: Task) => t.boardOrder,
28
+ renderCard,
29
+ onMove: (id: string, move: KanbanMove) => {
30
+ props.items = props.items.map((t) =>
31
+ t.id === id ? { ...t, columnId: move.columnId, boardOrder: move.boardOrder ?? "" } : t,
32
+ );
33
+ },
34
+ });
35
+ const target = document.createElement("div");
36
+ document.body.appendChild(target);
37
+ const app = mount(KanbanBoard<Task>, { target, props });
38
+ flushSync();
39
+ return {
40
+ target,
41
+ card: (id: string) => target.querySelector<HTMLElement>(`[data-kanban-card="${id}"]`),
42
+ done: () => {
43
+ void unmount(app);
44
+ target.remove();
45
+ },
46
+ };
47
+ }
48
+
49
+ // Waits out the board's await of onMove and its tick, then Svelte's flush.
50
+ async function settle() {
51
+ for (let i = 0; i < 4; i++) await tick();
52
+ flushSync();
53
+ }
54
+
55
+ describe("KanbanBoard keyboard move", () => {
56
+ it("keeps focus on the moved card in its new column and announces the move", async () => {
57
+ const { target, card, done } = render();
58
+ const before = card("k1");
59
+ before?.focus();
60
+ before?.dispatchEvent(
61
+ new KeyboardEvent("keydown", { key: "ArrowRight", altKey: true, bubbles: true }),
62
+ );
63
+ await settle();
64
+
65
+ const moved = card("k1");
66
+ expect(moved?.closest('[aria-label="In progress"]')).not.toBeNull();
67
+ expect(document.activeElement).toBe(moved);
68
+ expect(target.querySelector('[role="status"]')?.textContent).toBe("Moved to In progress");
69
+ done();
70
+ });
71
+
72
+ it("names a card by its own text and describes it with the move hint", () => {
73
+ const { card, done } = render();
74
+ const el = card("k1");
75
+ expect(el?.hasAttribute("aria-label")).toBe(false);
76
+ expect(el?.getAttribute("aria-labelledby")).toBe(el?.id);
77
+ const hint = document.getElementById(el?.getAttribute("aria-describedby") ?? "");
78
+ expect(hint?.textContent).toBe("Press Alt plus Left or Right arrow to move between columns.");
79
+ done();
80
+ });
81
+
82
+ it("puts every card inside a list", () => {
83
+ const { target, done } = render();
84
+ for (const item of target.querySelectorAll('[role="listitem"]')) {
85
+ expect(item.parentElement?.getAttribute("role")).toBe("list");
86
+ }
87
+ done();
88
+ });
89
+ });
@@ -0,0 +1,40 @@
1
+ import type { Snippet } from "svelte";
2
+ import type { KanbanColumn as KanbanColumnDef, KanbanColumnContext } from "./kanban-types.js";
3
+ declare function $$render<C extends KanbanColumnDef>(): {
4
+ props: {
5
+ column: C;
6
+ context: KanbanColumnContext;
7
+ /** The board's `columnHeader`. Left out, the head is GroupHead. */
8
+ columnHeader?: Snippet<[C, KanbanColumnContext]>;
9
+ onAdd?: (columnId: string) => void;
10
+ addLabel: string;
11
+ /** The column holds more cards than its cap, so the caret shows. */
12
+ foldable: boolean;
13
+ /** The caret has the column open in every lane. */
14
+ columnOpen: boolean;
15
+ onToggle: () => void;
16
+ expandColumnLabel: string;
17
+ collapseColumnLabel: string;
18
+ };
19
+ exports: {};
20
+ bindings: "";
21
+ slots: {};
22
+ events: {};
23
+ };
24
+ declare class __sveltets_Render<C extends KanbanColumnDef> {
25
+ props(): ReturnType<typeof $$render<C>>['props'];
26
+ events(): ReturnType<typeof $$render<C>>['events'];
27
+ slots(): ReturnType<typeof $$render<C>>['slots'];
28
+ bindings(): "";
29
+ exports(): {};
30
+ }
31
+ interface $$IsomorphicComponent {
32
+ new <C extends KanbanColumnDef>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<C>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<C>['props']>, ReturnType<__sveltets_Render<C>['events']>, ReturnType<__sveltets_Render<C>['slots']>> & {
33
+ $$bindings?: ReturnType<__sveltets_Render<C>['bindings']>;
34
+ } & ReturnType<__sveltets_Render<C>['exports']>;
35
+ <C extends KanbanColumnDef>(internal: unknown, props: ReturnType<__sveltets_Render<C>['props']> & {}): ReturnType<__sveltets_Render<C>['exports']>;
36
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
37
+ }
38
+ declare const $$Component: $$IsomorphicComponent;
39
+ type $$Component<C extends KanbanColumnDef> = InstanceType<typeof $$Component<C>>;
40
+ export default $$Component;
@@ -65,40 +65,57 @@
65
65
  </div>
66
66
 
67
67
  <style>
68
- /* Columns split the board's width equally, never under 240px (the board scrolls instead)
69
- nor over 420px (a 2-line card title stays near 55 characters a line). At 280px four
70
- columns needed 1168px, so a docs page at 1440 cut the Done column off; 240px fits four
71
- in the 1008px a 1440 page leaves, and a card's meta row still fits on one line. */
72
- .kanban-column {
73
- flex: 1 1 0;
74
- min-width: var(--kanban-column-min, 240px);
75
- max-width: var(--kanban-column-max, 420px);
76
- transition: opacity var(--duration-quick) var(--ease-smooth-out);
77
- }
68
+ @layer theme, base, components, utilities;
78
69
 
79
- /* A board under 40rem wide (a phone, a side panel) shows one column and a peek of the next, as 82vw did on a phone. */
80
- @container kanban-board (width < 40rem) {
70
+ @layer components {
71
+ /* Equal columns, 240px to 420px (the board scrolls below that): four fit the 1008px a
72
+ 1440 page leaves, and a 2-line title stays near 55 characters a line. */
81
73
  .kanban-column {
82
- flex: 0 0 88cqw;
83
- min-width: 0;
84
- max-width: 88cqw;
85
- scroll-snap-align: start;
74
+ flex: 1 1 0;
75
+ min-width: var(--kanban-column-min, 240px);
76
+ max-width: var(--kanban-column-max, 420px);
77
+ transition: opacity var(--duration-quick) var(--ease-smooth-out);
86
78
  }
87
- }
88
79
 
89
- .kanban-column-collapsing,
90
- .kanban-column-expanding {
91
- will-change: opacity;
92
- overflow: hidden;
93
- }
80
+ /* A board under 40rem wide (a phone, a side panel) shows one column and a peek of the next, as 82vw did on a phone. */
81
+ @container kanban-board (width < 40rem) {
82
+ .kanban-column {
83
+ flex: 0 0 88cqw;
84
+ min-width: 0;
85
+ max-width: 88cqw;
86
+ scroll-snap-align: start;
87
+ }
88
+ }
94
89
 
95
- .kanban-column-collapsing {
96
- pointer-events: none;
97
- animation: column-fold var(--duration-slow) var(--ease-smooth-out) forwards;
98
- }
90
+ .kanban-column-collapsing,
91
+ .kanban-column-expanding {
92
+ will-change: opacity;
93
+ overflow: hidden;
94
+ }
95
+
96
+ .kanban-column-collapsing {
97
+ pointer-events: none;
98
+ animation: column-fold var(--duration-slow) var(--ease-smooth-out) forwards;
99
+ }
100
+
101
+ .kanban-column-expanding {
102
+ animation: column-unfold var(--duration-slow) var(--ease-smooth-out) both;
103
+ }
99
104
 
100
- .kanban-column-expanding {
101
- animation: column-unfold var(--duration-slow) var(--ease-smooth-out) both;
105
+ @media (prefers-reduced-motion: reduce) {
106
+ .kanban-column-expanding {
107
+ animation: none;
108
+ }
109
+
110
+ .kanban-column-collapsing {
111
+ animation: none;
112
+ opacity: 0;
113
+ flex: 0 0 0;
114
+ min-width: 0;
115
+ max-width: 0;
116
+ margin-inline-end: -1rem;
117
+ }
118
+ }
102
119
  }
103
120
 
104
121
  /* One end only: the other is the column's resting width, whatever the container gave it.
@@ -124,19 +141,4 @@
124
141
  margin-inline-end: -1rem;
125
142
  }
126
143
  }
127
-
128
- @media (prefers-reduced-motion: reduce) {
129
- .kanban-column-expanding {
130
- animation: none;
131
- }
132
-
133
- .kanban-column-collapsing {
134
- animation: none;
135
- opacity: 0;
136
- flex: 0 0 0;
137
- min-width: 0;
138
- max-width: 0;
139
- margin-inline-end: -1rem;
140
- }
141
- }
142
144
  </style>
@@ -0,0 +1,20 @@
1
+ import type { Snippet } from "svelte";
2
+ import type { HTMLAttributes } from "svelte/elements";
3
+ interface Props extends HTMLAttributes<HTMLDivElement> {
4
+ /** Any CSS color. Only shows while a card is held over the column. */
5
+ hue?: string;
6
+ active?: boolean;
7
+ collapsing?: boolean;
8
+ expanding?: boolean;
9
+ ariaLabel?: string;
10
+ header: Snippet;
11
+ children: Snippet;
12
+ ondragover?: (e: DragEvent) => void;
13
+ ondragleave?: (e: DragEvent) => void;
14
+ ondrop?: (e: DragEvent) => void;
15
+ class?: string;
16
+ bodyClass?: string;
17
+ }
18
+ declare const $$Component: import("svelte").Component<Props, {}, "">;
19
+ type $$Component = ReturnType<typeof $$Component>;
20
+ export default $$Component;
@@ -13,22 +13,26 @@
13
13
 
14
14
  <span
15
15
  class={cn("kanban-fold-chevron [&>svg]:size-full", open && "kanban-fold-chevron-open", className)}
16
- aria-hidden="true"><CaretDown weight="bold" /></span
16
+ aria-hidden="true"><CaretDown aria-hidden="true" weight="bold" /></span
17
17
  >
18
18
 
19
19
  <style>
20
- .kanban-fold-chevron {
21
- display: inline-flex;
22
- transition: transform var(--duration-fast) var(--ease-smooth-out);
23
- }
24
-
25
- .kanban-fold-chevron-open {
26
- transform: scaleY(-1);
27
- }
20
+ @layer theme, base, components, utilities;
28
21
 
29
- @media (prefers-reduced-motion: reduce) {
22
+ @layer components {
30
23
  .kanban-fold-chevron {
31
- transition: none;
24
+ display: inline-flex;
25
+ transition: transform var(--duration-fast) var(--ease-smooth-out);
26
+ }
27
+
28
+ .kanban-fold-chevron-open {
29
+ transform: scaleY(-1);
30
+ }
31
+
32
+ @media (prefers-reduced-motion: reduce) {
33
+ .kanban-fold-chevron {
34
+ transition: none;
35
+ }
32
36
  }
33
37
  }
34
38
  </style>
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ /** Flips the caret to point up. */
3
+ open: boolean;
4
+ class?: string;
5
+ }
6
+ declare const $$Component: import("svelte").Component<Props, {}, "">;
7
+ type $$Component = ReturnType<typeof $$Component>;
8
+ export default $$Component;