@heyramzi/ui 2.1.0 → 2.2.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 (312) hide show
  1. package/package.json +7 -8
  2. package/scripts/sync-shadcn.mjs +3 -4
  3. package/src/agents/agent-avatar.svelte +604 -575
  4. package/src/agents/agent-cast.svelte +179 -183
  5. package/src/agents/demo.svelte +125 -113
  6. package/src/agents/helpers.ts +23 -17
  7. package/src/agents/index.ts +4 -4
  8. package/src/agents/page-state.ts +6 -6
  9. package/src/agents/types.ts +6 -6
  10. package/src/ai/ai-button/AiButton.svelte +4 -12
  11. package/src/ai/generation-progress/GenerationProgress.svelte +10 -3
  12. package/src/ai/prompt-input/PromptInputTextarea.svelte +1 -2
  13. package/src/ai/response/Response.css +2 -3
  14. package/src/animations/avatar-group-hover.css +2 -16
  15. package/src/animations/card-tilt.css +3 -6
  16. package/src/animations/digit-pop-in.css +2 -15
  17. package/src/animations/dropdown.css +4 -17
  18. package/src/animations/input-clear-dissolve.css +5 -18
  19. package/src/animations/input-shake.css +9 -41
  20. package/src/animations/learn-more-hover.css +17 -9
  21. package/src/animations/like-button.css +2 -4
  22. package/src/animations/page-side-by-side.css +2 -10
  23. package/src/animations/plus-menu-morph.css +2 -5
  24. package/src/animations/shimmer-text.css +5 -18
  25. package/src/animations/spinning-counter.css +2 -6
  26. package/src/animations/success-check.css +2 -15
  27. package/src/animations/thinking-states.css +2 -7
  28. package/src/brand/brand.test.ts +21 -5
  29. package/src/brand/index.ts +4 -10
  30. package/src/canvas/card/card-frame.svelte +43 -39
  31. package/src/canvas/card/resize-handles.svelte +89 -80
  32. package/src/canvas/chrome/chrome-zoom.svelte +101 -100
  33. package/src/canvas/chrome/lock-badge.svelte +8 -8
  34. package/src/canvas/chrome/side-handles.svelte +24 -19
  35. package/src/canvas/chrome/size-chip.svelte +30 -30
  36. package/src/canvas/chrome/snap-guides.svelte +20 -20
  37. package/src/canvas/components/icons/ToolIcon.svelte +8 -8
  38. package/src/canvas/components/shared/svg/PreviewSvg.svelte +19 -19
  39. package/src/canvas/components/shared/svg/ShapeOutline.svelte +71 -48
  40. package/src/canvas/components/shared/svg/StrokeNode.svelte +21 -27
  41. package/src/canvas/components/shared/svg/TextRule.svelte +25 -17
  42. package/src/canvas/edges/bend-handle.svelte +46 -46
  43. package/src/canvas/edges/edge-gradient.svelte +10 -10
  44. package/src/canvas/edges/gradient-edge.svelte +45 -29
  45. package/src/canvas/editor/lock.test.ts +6 -1
  46. package/src/canvas/editor/style.ts +7 -1
  47. package/src/canvas/headless/svg-figure.test.ts +5 -1
  48. package/src/canvas/lod/lod-switch.svelte +111 -106
  49. package/src/canvas/pen/PenField.svelte +87 -81
  50. package/src/canvas/pen/PenOverlay.svelte +127 -127
  51. package/src/canvas/pen/ShapeNode.svelte +31 -32
  52. package/src/canvas/pen/TextNode.svelte +54 -53
  53. package/src/canvas/pen/host-field.test.svelte +7 -7
  54. package/src/canvas/pen/shapes.ts +7 -1
  55. package/src/canvas/screen/GlyphIcon.svelte +22 -17
  56. package/src/canvas/screen/PartView.svelte +138 -72
  57. package/src/canvas/screen/ScreenBody.svelte +81 -60
  58. package/src/canvas/screen/ScreenCard.svelte +20 -20
  59. package/src/canvas/ui/CanvasToolbar.svelte +173 -85
  60. package/src/canvas/ui/FrameLayer.svelte +59 -59
  61. package/src/canvas/ui/PenLayer.svelte +39 -30
  62. package/src/canvas/ui/StylePanel.svelte +119 -102
  63. package/src/canvas/ui/canvas-grid.svelte +137 -129
  64. package/src/charts/animated-value.svelte +1 -1
  65. package/src/charts/area-chart.css +2 -5
  66. package/src/charts/area-chart.svelte +1 -1
  67. package/src/charts/bar-chart.css +2 -3
  68. package/src/charts/bar-chart.svelte +1 -1
  69. package/src/charts/charts.css +5 -17
  70. package/src/charts/crosshair.svelte +1 -1
  71. package/src/charts/dashboard/dashboard-empty.svelte +25 -25
  72. package/src/charts/dashboard/dashboard-section.svelte +24 -24
  73. package/src/charts/dashboard/data-panel.svelte +50 -50
  74. package/src/charts/dashboard/data-sort-head.svelte +56 -56
  75. package/src/charts/dashboard/data-table.svelte +138 -138
  76. package/src/charts/dashboard/panel-grid.svelte +30 -30
  77. package/src/charts/dashboard/period-filter.svelte +25 -25
  78. package/src/charts/dashboard/rating-chip.svelte +19 -19
  79. package/src/charts/dashboard/stat-band.svelte +32 -32
  80. package/src/charts/dashboard/stat-tile.svelte +106 -99
  81. package/src/charts/donut-chart.svelte +1 -1
  82. package/src/charts/edge-fade.svelte +1 -1
  83. package/src/charts/figure.svelte +1 -1
  84. package/src/charts/gauge-chart.css +4 -7
  85. package/src/charts/gauge-chart.svelte +1 -1
  86. package/src/charts/hover-focus.svelte +1 -1
  87. package/src/charts/legend.css +1 -3
  88. package/src/charts/legend.svelte +1 -1
  89. package/src/charts/line-chart.svelte +1 -1
  90. package/src/charts/number-chart.css +6 -9
  91. package/src/charts/number-chart.svelte +1 -1
  92. package/src/charts/reference-line.svelte +19 -19
  93. package/src/charts/reveal.svelte +1 -1
  94. package/src/charts/ring-chart.css +2 -4
  95. package/src/charts/ring-chart.svelte +1 -1
  96. package/src/charts/sparkline.svelte +5 -2
  97. package/src/charts/stat-card.svelte +1 -1
  98. package/src/charts/time-series-chart.css +2 -5
  99. package/src/charts/trend-pill.css +2 -4
  100. package/src/charts/trend-pill.svelte +1 -1
  101. package/src/components/copy/copy-button.svelte +93 -98
  102. package/src/components/copy/copy-button.test.ts +10 -2
  103. package/src/components/data-table/infinite-scroll.svelte +42 -42
  104. package/src/components/data-table/pagination.svelte +34 -22
  105. package/src/components/data-table/row-arrow.svelte +19 -16
  106. package/src/components/data-table/row-context-menu.svelte +52 -52
  107. package/src/components/data-table/sortable-head.svelte +25 -25
  108. package/src/components/data-table/table-skeleton.svelte +41 -36
  109. package/src/components/docs/doc-page.svelte +18 -9
  110. package/src/components/docs/on-this-page.svelte +16 -3
  111. package/src/components/docs/scroll-spy.svelte.ts +2 -3
  112. package/src/components/field-row/field-row.svelte +10 -8
  113. package/src/components/hold-to-confirm/hold-to-confirm.svelte +5 -1
  114. package/src/components/icon/icon.svelte +14 -14
  115. package/src/components/language-flag/language-flag.svelte +3 -1
  116. package/src/components/list-page/detail-empty.svelte +34 -34
  117. package/src/components/list-page/detail-header.svelte +55 -47
  118. package/src/components/list-page/detail-panel.svelte +51 -59
  119. package/src/components/list-page/detail-row.svelte +19 -19
  120. package/src/components/list-page/detail-stack.svelte +21 -21
  121. package/src/components/list-page/empty-state.svelte +30 -30
  122. package/src/components/list-page/filter-item.svelte +20 -20
  123. package/src/components/list-page/filter-popover.svelte +60 -55
  124. package/src/components/list-page/grouped-list.svelte +4 -2
  125. package/src/components/list-page/index.ts +5 -1
  126. package/src/components/list-page/list-page-shell.svelte +2 -5
  127. package/src/components/list-page/master-detail.svelte +87 -88
  128. package/src/components/list-page/notice-bar.svelte +38 -38
  129. package/src/components/list-page/prev-next.svelte +63 -63
  130. package/src/components/list-page/rail-body.svelte +18 -18
  131. package/src/components/list-page/rail-empty.svelte +23 -30
  132. package/src/components/list-page/rail-head.svelte +24 -24
  133. package/src/components/list-page/rail-row.svelte +77 -73
  134. package/src/components/list-page/section-host.ts +2 -3
  135. package/src/components/locale-switch/locale-switch.svelte +41 -41
  136. package/src/components/mark/mark.svelte +34 -38
  137. package/src/components/open-in/index.ts +1 -5
  138. package/src/components/open-in/open-in.svelte +40 -40
  139. package/src/components/picker/mark-picker.svelte +49 -49
  140. package/src/components/picker/picker.svelte +5 -3
  141. package/src/components/section-header/section-header.test.ts +7 -1
  142. package/src/components/section-header/section-label.svelte +20 -20
  143. package/src/components/segmented/animated-tabs.svelte +31 -2
  144. package/src/components/segmented/collapse.test.ts +2 -1
  145. package/src/components/segmented/index.ts +2 -0
  146. package/src/components/segmented/segment.svelte +52 -49
  147. package/src/components/segmented/segmented-filter.svelte +79 -80
  148. package/src/components/segmented/segmented-nav.svelte +34 -40
  149. package/src/components/segmented/segmented-overflow.svelte +53 -50
  150. package/src/components/segmented/segmented-track.svelte +62 -46
  151. package/src/components/segmented/segmented.ts +2 -3
  152. package/src/components/star-rating-input/star-rating-input.svelte +103 -103
  153. package/src/components/svg/svg.svelte +4 -4
  154. package/src/components/table-view/table-view.svelte +17 -2
  155. package/src/components/table-view/table-view.test.ts +7 -1
  156. package/src/components/table-view/types.ts +11 -11
  157. package/src/components/tags-input/index.ts +13 -0
  158. package/src/components/tags-input/tags-input.svelte +305 -0
  159. package/src/components/tags-input/tags.test.ts +64 -0
  160. package/src/components/tags-input/tags.ts +142 -0
  161. package/src/components/theme/index.ts +2 -4
  162. package/src/components/theme/theme-provider.svelte +1 -3
  163. package/src/components/toolbar/toolbar-search.svelte +25 -25
  164. package/src/components/toolbar/toolbar.svelte +11 -7
  165. package/src/components/toolbar/toolbar.test.ts +10 -1
  166. package/src/design/index.css +21 -78
  167. package/src/design/polish.css +26 -35
  168. package/src/editor/editor-toolbar.svelte +104 -99
  169. package/src/editor/editor.svelte +296 -266
  170. package/src/editor/image-toolbar.svelte +20 -22
  171. package/src/editor/index.ts +1 -4
  172. package/src/editor/inline-editor.svelte +280 -238
  173. package/src/editor/markdown.ts +15 -15
  174. package/src/editor/renderer.svelte +71 -71
  175. package/src/editor/slash-menu.svelte +24 -27
  176. package/src/effects/animated-beam/diagrams/BeamSvg.svelte +1 -1
  177. package/src/effects/image-comparison/ImageComparison.svelte +11 -1
  178. package/src/effects/interactive-hover-button/InteractiveHoverButton.svelte +59 -46
  179. package/src/effects/magic-card/MagicCard.css +14 -7
  180. package/src/effects/marquee/Marquee.svelte +3 -5
  181. package/src/effects/reveal/observe.ts +0 -3
  182. package/src/effects/spotlight/Spotlight.svelte +1 -1
  183. package/src/effects/theme-toggle/ThemeToggle.css +25 -22
  184. package/src/effects/theme-toggle/ThemeToggle.svelte +6 -7
  185. package/src/gallery.test.ts +14 -4
  186. package/src/inbox/README.md +1 -3
  187. package/src/inbox/inbox.test.ts +181 -138
  188. package/src/inbox/index.ts +20 -20
  189. package/src/inbox/logic.ts +114 -111
  190. package/src/inbox/thread-inbox.svelte +227 -151
  191. package/src/inbox/types.ts +130 -108
  192. package/src/lib/theme-transition.ts +2 -4
  193. package/src/lib/tone.ts +2 -4
  194. package/src/lib/utils.ts +2 -2
  195. package/src/modules.test.ts +79 -69
  196. package/src/onboarding/define-tours.test.ts +55 -40
  197. package/src/onboarding/define-tours.ts +23 -23
  198. package/src/onboarding/demo.svelte +24 -5
  199. package/src/onboarding/index.ts +1 -8
  200. package/src/onboarding/onboarding-provider.svelte +19 -7
  201. package/src/onboarding/onboarding.svelte.ts +16 -16
  202. package/src/onboarding/pick.test.ts +61 -52
  203. package/src/onboarding/pick.ts +16 -13
  204. package/src/onboarding/stores.test.ts +80 -80
  205. package/src/onboarding/stores.ts +41 -39
  206. package/src/onboarding/tour-card.svelte +30 -5
  207. package/src/onboarding/tour-runner.svelte +12 -3
  208. package/src/onboarding/types.ts +20 -12
  209. package/src/onboarding/wait.ts +22 -22
  210. package/src/panel/side-panel.svelte +94 -93
  211. package/src/record/demo-data.ts +291 -225
  212. package/src/record/field-section.svelte +38 -34
  213. package/src/record/fields.ts +148 -96
  214. package/src/record/format.ts +63 -56
  215. package/src/record/index.ts +49 -35
  216. package/src/record/info-list.svelte +145 -114
  217. package/src/record/kinds.ts +31 -31
  218. package/src/record/logic.ts +216 -214
  219. package/src/record/next-up.svelte +45 -34
  220. package/src/record/project-list.svelte +56 -50
  221. package/src/record/record-demo.svelte +130 -110
  222. package/src/record/record-header.svelte +37 -28
  223. package/src/record/record-shell.svelte +54 -54
  224. package/src/record/record-stats.svelte +25 -25
  225. package/src/record/record-timeline.svelte +134 -114
  226. package/src/record/record.test.ts +430 -309
  227. package/src/record/steps-rail.svelte +225 -216
  228. package/src/record/types.ts +234 -215
  229. package/src/record/where-we-are.svelte +62 -58
  230. package/src/shadcn/button/button.svelte +1 -1
  231. package/src/shadcn/card/card-title.svelte +1 -5
  232. package/src/shadcn/hooks/use-highlighted-code.svelte.ts +2 -13
  233. package/src/shadcn/sheet/sheet-content.svelte +2 -4
  234. package/src/shadcn/table/table-cell.svelte +2 -3
  235. package/src/shadcn/utilities.css +3 -8
  236. package/src/slides/Controls.svelte +150 -124
  237. package/src/slides/Deck.svelte +243 -238
  238. package/src/slides/Fragment.svelte +64 -57
  239. package/src/slides/Overview.svelte +106 -101
  240. package/src/slides/Presenter.svelte +300 -266
  241. package/src/slides/Slide.svelte +185 -170
  242. package/src/slides/SlideList.svelte +16 -12
  243. package/src/slides/ambient.d.ts +1 -1
  244. package/src/slides/bridges.ts +42 -23
  245. package/src/slides/deck-controller.svelte.ts +47 -35
  246. package/src/slides/demo-slides.svelte +330 -306
  247. package/src/slides/demo.svelte +164 -160
  248. package/src/slides/export/capture.ts +20 -16
  249. package/src/slides/export/ffmpeg.ts +43 -38
  250. package/src/slides/export/index.ts +5 -5
  251. package/src/slides/export/launch.ts +3 -1
  252. package/src/slides/export/pdf.ts +30 -27
  253. package/src/slides/export/types.ts +10 -8
  254. package/src/slides/index.ts +11 -11
  255. package/src/slides/labels.ts +22 -19
  256. package/src/slides/layout.ts +9 -2
  257. package/src/slides/model.ts +4 -4
  258. package/src/slides/navigation.ts +43 -31
  259. package/src/slides/theme.css +5 -7
  260. package/src/slides/types.ts +9 -10
  261. package/src/status/define-statuses.ts +17 -24
  262. package/src/status/index.ts +5 -5
  263. package/src/status/status-badge.svelte +3 -1
  264. package/src/status/status-dot.svelte +1 -3
  265. package/src/status/status-icon.svelte +1 -1
  266. package/src/status/status-types.ts +21 -21
  267. package/src/tasks/board-order.ts +2 -4
  268. package/src/tasks/demo.svelte +189 -31
  269. package/src/tasks/detail/detail-demo.svelte +73 -13
  270. package/src/tasks/detail/detail-types.ts +45 -45
  271. package/src/tasks/detail/task-detail.svelte +40 -10
  272. package/src/tasks/detail/task-property.svelte +8 -2
  273. package/src/tasks/detail/task-thread.svelte +53 -12
  274. package/src/tasks/gantt/gantt-bar.svelte +17 -6
  275. package/src/tasks/gantt/gantt-grid.svelte +40 -9
  276. package/src/tasks/gantt/gantt-group-row.svelte +8 -2
  277. package/src/tasks/gantt/gantt-header.svelte +9 -3
  278. package/src/tasks/gantt/gantt-task-row.svelte +26 -6
  279. package/src/tasks/gantt/gantt.css +2 -1
  280. package/src/tasks/gantt/gantt.test.ts +3 -1
  281. package/src/tasks/gantt/logic.test.ts +110 -20
  282. package/src/tasks/gantt/logic.ts +42 -6
  283. package/src/tasks/inbox/inbox-card.svelte +13 -5
  284. package/src/tasks/inbox/inbox-draft.svelte +1 -1
  285. package/src/tasks/inbox/inbox-logic.ts +6 -40
  286. package/src/tasks/inbox/inbox-statuses.ts +23 -23
  287. package/src/tasks/inbox/inbox-trace.svelte +9 -3
  288. package/src/tasks/inbox/inbox-types.ts +54 -58
  289. package/src/tasks/inbox/index.ts +22 -21
  290. package/src/tasks/index.ts +49 -52
  291. package/src/tasks/kanban-board.svelte +16 -12
  292. package/src/tasks/kanban-types.ts +2 -3
  293. package/src/tasks/presets/sales.ts +6 -6
  294. package/src/tasks/task-gantt.svelte +28 -8
  295. package/src/tasks/task-list.svelte +41 -17
  296. package/src/tasks/time/duration.ts +40 -40
  297. package/src/tasks/time/time-chip.svelte +9 -2
  298. package/src/tasks/time/time-dot.svelte +1 -1
  299. package/src/tasks/time/time-ring.svelte +11 -3
  300. package/src/tasks/time/time-tracker.svelte +57 -15
  301. package/src/tasks/time/time-types.ts +57 -57
  302. package/src/tasks/use-kanban-dnd.svelte.ts +2 -3
  303. package/src/thread/index.ts +7 -7
  304. package/src/thread/logic.ts +36 -33
  305. package/src/thread/thread.svelte +82 -16
  306. package/src/thread/thread.test.ts +58 -47
  307. package/src/thread/types.ts +68 -68
  308. package/src/tokens/craft.css +17 -53
  309. package/src/tokens/index.css +3 -13
  310. package/src/tokens/palette.css +13 -11
  311. package/src/tokens/primitives.css +10 -23
  312. package/src/tasks/inbox/inbox.svelte +0 -203
@@ -1,72 +1,64 @@
1
1
  <script lang="ts">
2
- // =========================
3
- // IMPORTS
4
- // =========================
5
- import type { Snippet } from "svelte";
6
- import SectionLabel from "../section-header/section-label.svelte";
7
- import { cn } from "../../lib/utils.js";
8
- import { panelHeaderClass, panelShellClass } from "../../lib/panel.js";
9
- import type { PhosphorIcon } from "../../lib/icon-types.js";
2
+ // =========================
3
+ // IMPORTS
4
+ // =========================
5
+ import type { Snippet } from "svelte";
6
+ import SectionLabel from "../section-header/section-label.svelte";
7
+ import { cn } from "../../lib/utils.js";
8
+ import { panelHeaderClass, panelShellClass } from "../../lib/panel.js";
9
+ import type { PhosphorIcon } from "../../lib/icon-types.js";
10
10
 
11
- // =========================
12
- // TYPES
13
- // =========================
14
- interface Props {
15
- // One panel per idea in a detail pane. Hand-rolled copies drifted between
16
- // 8px and 12px corners, so rounded-xl lives here once.
17
- label?: string;
18
- labelIcon?: PhosphorIcon;
19
- // A mark the icon set does not carry (a platform logo), drawn ahead of the
20
- // label at the same optical size.
21
- labelLead?: Snippet;
22
- // The right side of the header bar: a count, a hint, a button cluster.
23
- actions?: Snippet;
24
- // WHY: a panel whose body is a media grid or a full-bleed list supplies its
25
- // own padding, so the shell must be able to step out of the way.
26
- pad?: boolean;
27
- // Takes the height the panels above it did not use, inside a `fill` stack.
28
- // One panel per stack, and it is the one the reader works in.
29
- grow?: boolean;
30
- children: Snippet;
31
- class?: string;
32
- bodyClass?: string;
33
- };
11
+ // =========================
12
+ // TYPES
13
+ // =========================
14
+ interface Props {
15
+ // One panel per idea in a detail pane. Hand-rolled copies drifted between
16
+ // 8px and 12px corners, so rounded-xl lives here once.
17
+ label?: string;
18
+ labelIcon?: PhosphorIcon;
19
+ // A mark the icon set does not carry (a platform logo), drawn ahead of the
20
+ // label at the same optical size.
21
+ labelLead?: Snippet;
22
+ // The right side of the header bar: a count, a hint, a button cluster.
23
+ actions?: Snippet;
24
+ // WHY: a panel whose body is a media grid or a full-bleed list supplies its
25
+ // own padding, so the shell must be able to step out of the way.
26
+ pad?: boolean;
27
+ // Takes the height the panels above it did not use, inside a `fill` stack.
28
+ // One panel per stack, and it is the one the reader works in.
29
+ grow?: boolean;
30
+ children: Snippet;
31
+ class?: string;
32
+ bodyClass?: string;
33
+ }
34
34
 
35
- // =========================
36
- // PROPS
37
- // =========================
38
- let {
39
- label,
40
- labelIcon,
41
- labelLead,
42
- actions,
43
- pad = true,
44
- grow = false,
45
- children,
46
- class: className,
47
- bodyClass,
48
- }: Props = $props();
35
+ // =========================
36
+ // PROPS
37
+ // =========================
38
+ let {
39
+ label,
40
+ labelIcon,
41
+ labelLead,
42
+ actions,
43
+ pad = true,
44
+ grow = false,
45
+ children,
46
+ class: className,
47
+ bodyClass,
48
+ }: Props = $props();
49
49
 
50
- // =========================
51
- // DERIVED
52
- // =========================
53
- let hasHeader = $derived(Boolean(label || labelLead || actions));
50
+ // =========================
51
+ // DERIVED
52
+ // =========================
53
+ let hasHeader = $derived(Boolean(label || labelLead || actions));
54
54
  </script>
55
55
 
56
56
  <!-- =========================== -->
57
57
  <!-- MARKUP -->
58
58
  <!-- =========================== -->
59
- <section
60
- class={cn(
61
- panelShellClass,
62
- grow && "flex min-h-0 flex-1 flex-col",
63
- className,
64
- )}
65
- >
59
+ <section class={cn(panelShellClass, grow && "flex min-h-0 flex-1 flex-col", className)}>
66
60
  {#if hasHeader}
67
- <div
68
- class={panelHeaderClass}
69
- >
61
+ <div class={panelHeaderClass}>
70
62
  {#if label || labelLead}
71
63
  <SectionLabel icon={labelIcon}>
72
64
  {#if labelLead}
@@ -1,25 +1,25 @@
1
1
  <script lang="ts">
2
- // =========================
3
- // IMPORTS
4
- // =========================
5
- import type { Snippet } from "svelte";
6
- import { cn } from "../../lib/utils.js";
2
+ // =========================
3
+ // IMPORTS
4
+ // =========================
5
+ import type { Snippet } from "svelte";
6
+ import { cn } from "../../lib/utils.js";
7
7
 
8
- // =========================
9
- // TYPES
10
- // =========================
11
- interface Props {
12
- // A hairline band inside `DetailHeader` or `DetailPanel` for the record's
13
- // own facts, so the page never nests cards inside cards.
14
- muted?: boolean;
15
- children: Snippet;
16
- class?: string;
17
- };
8
+ // =========================
9
+ // TYPES
10
+ // =========================
11
+ interface Props {
12
+ // A hairline band inside `DetailHeader` or `DetailPanel` for the record's
13
+ // own facts, so the page never nests cards inside cards.
14
+ muted?: boolean;
15
+ children: Snippet;
16
+ class?: string;
17
+ }
18
18
 
19
- // =========================
20
- // PROPS
21
- // =========================
22
- let { muted = false, children, class: className }: Props = $props();
19
+ // =========================
20
+ // PROPS
21
+ // =========================
22
+ let { muted = false, children, class: className }: Props = $props();
23
23
  </script>
24
24
 
25
25
  <!-- =========================== -->
@@ -1,28 +1,28 @@
1
1
  <script lang="ts">
2
- // =========================
3
- // IMPORTS
4
- // =========================
5
- import type { Snippet } from "svelte";
6
- import { cn } from "../../lib/utils.js";
2
+ // =========================
3
+ // IMPORTS
4
+ // =========================
5
+ import type { Snippet } from "svelte";
6
+ import { cn } from "../../lib/utils.js";
7
7
 
8
- // =========================
9
- // TYPES
10
- // =========================
11
- interface Props {
12
- // A flat stack of panels at one gap. `xl:pr-1` keeps the top panel's
13
- // corner clear of the shell's scrollbar.
8
+ // =========================
9
+ // TYPES
10
+ // =========================
11
+ interface Props {
12
+ // A flat stack of panels at one gap. `xl:pr-1` keeps the top panel's
13
+ // corner clear of the shell's scrollbar.
14
14
 
15
- // `fill` makes the stack at least as tall as its scroller, so a `grow`
16
- // panel (like a writing box) takes the empty bottom third back.
17
- fill?: boolean;
18
- children: Snippet;
19
- class?: string;
20
- };
15
+ // `fill` makes the stack at least as tall as its scroller, so a `grow`
16
+ // panel (like a writing box) takes the empty bottom third back.
17
+ fill?: boolean;
18
+ children: Snippet;
19
+ class?: string;
20
+ }
21
21
 
22
- // =========================
23
- // PROPS
24
- // =========================
25
- let { fill = false, children, class: className }: Props = $props();
22
+ // =========================
23
+ // PROPS
24
+ // =========================
25
+ let { fill = false, children, class: className }: Props = $props();
26
26
  </script>
27
27
 
28
28
  <!-- =========================== -->
@@ -1,36 +1,36 @@
1
1
  <script lang="ts">
2
- // =========================
3
- // IMPORTS
4
- // =========================
5
- import { Button } from "../../shadcn/button/index.js";
6
- import * as Empty from "../../shadcn/empty/index.js";
7
- import type { PhosphorIcon, IconWeight } from "../../lib/icon-types.js";
2
+ // =========================
3
+ // IMPORTS
4
+ // =========================
5
+ import { Button } from "../../shadcn/button/index.js";
6
+ import * as Empty from "../../shadcn/empty/index.js";
7
+ import type { PhosphorIcon, IconWeight } from "../../lib/icon-types.js";
8
8
 
9
- // =========================
10
- // TYPES
11
- // =========================
12
- interface Props {
13
- icon?: PhosphorIcon;
14
- iconWeight?: IconWeight;
15
- title: string;
16
- description?: string;
17
- actionLabel?: string;
18
- actionHref?: string;
19
- onAction?: () => void;
20
- }
9
+ // =========================
10
+ // TYPES
11
+ // =========================
12
+ interface Props {
13
+ icon?: PhosphorIcon;
14
+ iconWeight?: IconWeight;
15
+ title: string;
16
+ description?: string;
17
+ actionLabel?: string;
18
+ actionHref?: string;
19
+ onAction?: () => void;
20
+ }
21
21
 
22
- // =========================
23
- // PROPS
24
- // =========================
25
- let {
26
- icon: Icon,
27
- iconWeight,
28
- title,
29
- description,
30
- actionLabel,
31
- actionHref,
32
- onAction,
33
- }: Props = $props();
22
+ // =========================
23
+ // PROPS
24
+ // =========================
25
+ let {
26
+ icon: Icon,
27
+ iconWeight,
28
+ title,
29
+ description,
30
+ actionLabel,
31
+ actionHref,
32
+ onAction,
33
+ }: Props = $props();
34
34
  </script>
35
35
 
36
36
  <!-- =========================== -->
@@ -1,26 +1,26 @@
1
1
  <script lang="ts">
2
- // =========================
3
- // IMPORTS
4
- // =========================
5
- import type { Snippet } from "svelte";
6
- import { Checkbox } from "../../shadcn/checkbox/index.js";
7
- import { Check } from "phosphor-svelte";
8
- import { cn } from "../../lib/utils.js";
2
+ // =========================
3
+ // IMPORTS
4
+ // =========================
5
+ import type { Snippet } from "svelte";
6
+ import { Checkbox } from "../../shadcn/checkbox/index.js";
7
+ import { Check } from "phosphor-svelte";
8
+ import { cn } from "../../lib/utils.js";
9
9
 
10
- // =========================
11
- // TYPES
12
- // =========================
13
- interface Props {
14
- checked: boolean;
15
- onclick: () => void;
16
- variant?: "checkbox" | "radio";
17
- children: Snippet;
18
- };
10
+ // =========================
11
+ // TYPES
12
+ // =========================
13
+ interface Props {
14
+ checked: boolean;
15
+ onclick: () => void;
16
+ variant?: "checkbox" | "radio";
17
+ children: Snippet;
18
+ }
19
19
 
20
- // =========================
21
- // PROPS
22
- // =========================
23
- let { checked, onclick, variant = "checkbox", children }: Props = $props();
20
+ // =========================
21
+ // PROPS
22
+ // =========================
23
+ let { checked, onclick, variant = "checkbox", children }: Props = $props();
24
24
  </script>
25
25
 
26
26
  <!-- =========================== -->
@@ -1,62 +1,62 @@
1
1
  <script lang="ts">
2
- // =========================
3
- // IMPORTS
4
- // =========================
5
- import type { Snippet } from "svelte";
6
- import * as Popover from "../../shadcn/popover/index.js";
7
- import { Funnel as FunnelIcon } from "phosphor-svelte";
8
- import { cn } from "../../lib/utils.js";
9
- import { Button } from "../../shadcn/button/index.js";
10
- import { toolbarTriggerClass } from "../toolbar/toolbar-trigger.js";
11
- import type { PhosphorIcon } from "../../lib/icon-types.js";
2
+ // =========================
3
+ // IMPORTS
4
+ // =========================
5
+ import type { Snippet } from "svelte";
6
+ import * as Popover from "../../shadcn/popover/index.js";
7
+ import { Funnel as FunnelIcon } from "phosphor-svelte";
8
+ import { cn } from "../../lib/utils.js";
9
+ import { Button } from "../../shadcn/button/index.js";
10
+ import { toolbarTriggerClass } from "../toolbar/toolbar-trigger.js";
11
+ import type { PhosphorIcon } from "../../lib/icon-types.js";
12
12
 
13
- // phosphor-svelte v2 (resolved here) and v3 (what consumers run) differ only in
14
- // Component generics. The cast bridges that type-only gap.
15
- const DefaultFunnelIcon = FunnelIcon as unknown as PhosphorIcon;
13
+ // phosphor-svelte v2 (resolved here) and v3 (what consumers run) differ only in
14
+ // Component generics. The cast bridges that type-only gap.
15
+ const DefaultFunnelIcon = FunnelIcon as unknown as PhosphorIcon;
16
16
 
17
- // =========================
18
- // TYPES
19
- // =========================
20
- interface Props {
21
- label: string;
22
- icon?: PhosphorIcon;
23
- count?: number;
24
- active?: boolean;
25
- onClear?: () => void;
26
- align?: "start" | "center" | "end";
27
- width?: `w-${string}`;
28
- open?: boolean;
29
- clearLabel?: string;
30
- triggerClass?: string;
31
- contentClass?: string;
32
- children: Snippet;
33
- trailing?: Snippet;
34
- };
17
+ // =========================
18
+ // TYPES
19
+ // =========================
20
+ interface Props {
21
+ label: string;
22
+ icon?: PhosphorIcon;
23
+ count?: number;
24
+ active?: boolean;
25
+ onClear?: () => void;
26
+ align?: "start" | "center" | "end";
27
+ width?: `w-${string}`;
28
+ open?: boolean;
29
+ clearLabel?: string;
30
+ triggerClass?: string;
31
+ contentClass?: string;
32
+ children: Snippet;
33
+ trailing?: Snippet;
34
+ }
35
35
 
36
- // =========================
37
- // PROPS
38
- // =========================
39
- let {
40
- label,
41
- icon: IconComponent = DefaultFunnelIcon,
42
- count = 0,
43
- active,
44
- onClear,
45
- align = "start",
46
- width = "w-52",
47
- open = $bindable(false),
48
- clearLabel = "Clear",
49
- triggerClass,
50
- contentClass,
51
- children,
52
- trailing,
53
- }: Props = $props();
36
+ // =========================
37
+ // PROPS
38
+ // =========================
39
+ let {
40
+ label,
41
+ icon: IconComponent = DefaultFunnelIcon,
42
+ count = 0,
43
+ active,
44
+ onClear,
45
+ align = "start",
46
+ width = "w-52",
47
+ open = $bindable(false),
48
+ clearLabel = "Clear",
49
+ triggerClass,
50
+ contentClass,
51
+ children,
52
+ trailing,
53
+ }: Props = $props();
54
54
 
55
- // =========================
56
- // DERIVED
57
- // =========================
58
- let hasCount = $derived(count > 0);
59
- let isActive = $derived(active ?? hasCount);
55
+ // =========================
56
+ // DERIVED
57
+ // =========================
58
+ let hasCount = $derived(count > 0);
59
+ let isActive = $derived(active ?? hasCount);
60
60
  </script>
61
61
 
62
62
  <!-- =========================== -->
@@ -80,7 +80,12 @@ let isActive = $derived(active ?? hasCount);
80
80
  <Popover.Content class={cn("p-2", width, contentClass)} {align}>
81
81
  {@render children()}
82
82
  {#if onClear && hasCount}
83
- <Button variant="ghost" size="sm" class="mt-2 w-full text-xs text-muted-foreground" onclick={onClear}>
83
+ <Button
84
+ variant="ghost"
85
+ size="sm"
86
+ class="mt-2 w-full text-xs text-muted-foreground"
87
+ onclick={onClear}
88
+ >
84
89
  {clearLabel}
85
90
  </Button>
86
91
  {/if}
@@ -26,7 +26,7 @@
26
26
  onGroupDragOver?: (e: DragEvent, group: TGroup) => void;
27
27
  onGroupDragLeave?: (e: DragEvent) => void;
28
28
  onGroupDrop?: (e: DragEvent, group: TGroup) => void;
29
- };
29
+ }
30
30
 
31
31
  // =========================
32
32
  // PROPS
@@ -77,7 +77,9 @@
77
77
  ondragleave={onGroupDragLeave}
78
78
  ondrop={onGroupDrop ? (e) => onGroupDrop(e, group) : undefined}
79
79
  >
80
- <div class="group/header flex items-center gap-1 rounded-lg transition-colors hover:bg-muted/60">
80
+ <div
81
+ class="group/header flex items-center gap-1 rounded-lg transition-colors hover:bg-muted/60"
82
+ >
81
83
  <button
82
84
  type="button"
83
85
  class="flex min-w-0 flex-1 cursor-pointer items-center gap-2.5 rounded-lg px-3 py-2 text-left"
@@ -25,4 +25,8 @@ export { default as ToolbarSearch } from "../toolbar/toolbar-search.svelte";
25
25
  export { toolbarTriggerClass } from "../toolbar/toolbar-trigger.js";
26
26
  export { listTable } from "./list-table.js";
27
27
  export type { ViewMode } from "./types.js";
28
- export { getSectionHost, setSectionHost, type SectionHost } from "./section-host.js";
28
+ export {
29
+ getSectionHost,
30
+ setSectionHost,
31
+ type SectionHost,
32
+ } from "./section-host.js";
@@ -39,7 +39,7 @@
39
39
  content?: Snippet;
40
40
  empty?: Snippet;
41
41
  extra?: Snippet;
42
- };
42
+ }
43
43
 
44
44
  // =========================
45
45
  // PROPS
@@ -105,10 +105,7 @@
105
105
  let innerClass = $derived(
106
106
  maxWidth === false
107
107
  ? cn("flex min-w-0 flex-1 flex-col gap-4", fillHeight && "min-h-0")
108
- : cn(
109
- "mx-auto flex w-full min-w-0 flex-1 flex-col gap-4",
110
- fillHeight && "min-h-0",
111
- ),
108
+ : cn("mx-auto flex w-full min-w-0 flex-1 flex-col gap-4", fillHeight && "min-h-0"),
112
109
  );
113
110
  let innerStyle = $derived(maxWidth ? `max-width: ${maxWidth}` : undefined);
114
111
  </script>