@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,5 +1,5 @@
1
- import { untrack } from 'svelte';
2
- import { fitBox, gridBoxes, type Box, type Size } from './layout.js';
1
+ import { untrack } from "svelte";
2
+ import { fitBox, gridBoxes, type Box, type Size } from "./layout.js";
3
3
  import {
4
4
  keyAction,
5
5
  nextPosition,
@@ -11,9 +11,9 @@ import {
11
11
  type KeyAction,
12
12
  type Position,
13
13
  type SlideState,
14
- } from './navigation.js';
15
- import { resolveLabels, type DeckLabels } from './labels.js';
16
- import { DEFAULT_CANVAS, type Canvas, type SlideNotes } from './types.js';
14
+ } from "./navigation.js";
15
+ import { resolveLabels, type DeckLabels } from "./labels.js";
16
+ import { DEFAULT_CANVAS, type Canvas, type SlideNotes } from "./types.js";
17
17
 
18
18
  /** What a mounted Slide tells the deck. Properties are getters over the slide's own props. */
19
19
  export type SlideEntry = {
@@ -26,7 +26,7 @@ export type SlideEntry = {
26
26
  };
27
27
 
28
28
  /** `remote` is a move that came from another window or frame, so it must not be echoed back. */
29
- export type Source = 'local' | 'remote';
29
+ export type Source = "local" | "remote";
30
30
  export type Listener = (position: Position, source: Source) => void;
31
31
 
32
32
  /** `index` and `step` are read and written through, so a Deck can back them with its bindable props. */
@@ -62,15 +62,19 @@ const MORPH_MS = 900;
62
62
  const clamp = (value: number, min: number, max: number) => Math.min(max, Math.max(min, value));
63
63
 
64
64
  function isEditable(el: HTMLElement) {
65
- return el.isContentEditable || ['INPUT', 'TEXTAREA', 'SELECT'].includes(el.tagName);
65
+ return el.isContentEditable || ["INPUT", "TEXTAREA", "SELECT"].includes(el.tagName);
66
66
  }
67
67
 
68
68
  const byDocumentOrder = (a: SlideEntry, b: SlideEntry) =>
69
- a.el && b.el ? (a.el.compareDocumentPosition(b.el) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1) : 0;
69
+ a.el && b.el
70
+ ? a.el.compareDocumentPosition(b.el) & Node.DOCUMENT_POSITION_FOLLOWING
71
+ ? -1
72
+ : 1
73
+ : 0;
70
74
 
71
75
  export class DeckController {
72
76
  entries = $state.raw<SlideEntry[]>([]);
73
- view = $state<'slide' | 'overview'>('slide');
77
+ view = $state<"slide" | "overview">("slide");
74
78
  /** The highlighted thumbnail in the overview, as an index among the visible slides. */
75
79
  cursor = $state(0);
76
80
  direction = $state<1 | -1>(1);
@@ -88,7 +92,10 @@ export class DeckController {
88
92
  canvas = $derived(this.options.canvas ?? DEFAULT_CANVAS);
89
93
  labels = $derived(resolveLabels(this.options.labels));
90
94
  slides = $derived<SlideState[]>(
91
- this.entries.map((entry) => ({ steps: this.options.fragments === false ? 0 : entry.steps, hidden: entry.hidden })),
95
+ this.entries.map((entry) => ({
96
+ steps: this.options.fragments === false ? 0 : entry.steps,
97
+ hidden: entry.hidden,
98
+ })),
92
99
  );
93
100
  visible = $derived(visibleIndexes(this.slides));
94
101
  position = $derived(settle(this.slides, { index: this.options.index, step: this.options.step }));
@@ -97,7 +104,7 @@ export class DeckController {
97
104
  current = $derived(this.entries[this.position.index]);
98
105
  /** The slide after this one, for a presenter's preview. Null on the last. */
99
106
  upcoming = $derived(this.visible.find((i) => i > this.position.index) ?? null);
100
- overview = $derived(this.view === 'overview');
107
+ overview = $derived(this.view === "overview");
101
108
  /** True when every fragment shows: in the overview, or on a deck that doesn't stage reveals. */
102
109
  revealAll = $derived(this.overview || this.options.fragments === false);
103
110
  atStart = $derived(prevPosition(this.slides, this.position, this.options.loop) === null);
@@ -105,7 +112,10 @@ export class DeckController {
105
112
  fit = $derived(fitBox(this.size, this.canvas));
106
113
  grid = $derived(
107
114
  gridBoxes(
108
- { w: this.size.w, h: Math.max(0, this.size.h - (this.options.controls === false ? 0 : CONTROLS_ROOM)) },
115
+ {
116
+ w: this.size.w,
117
+ h: Math.max(0, this.size.h - (this.options.controls === false ? 0 : CONTROLS_ROOM)),
118
+ },
109
119
  this.canvas,
110
120
  this.visible.length,
111
121
  ),
@@ -159,7 +169,7 @@ export class DeckController {
159
169
  this.options.step = position.step;
160
170
  }
161
171
 
162
- commit(target: Position | null, source: Source = 'local') {
172
+ commit(target: Position | null, source: Source = "local") {
163
173
  if (!target) return;
164
174
  const from = this.position;
165
175
  const to = settle(this.slides, target);
@@ -179,7 +189,7 @@ export class DeckController {
179
189
  this.commit(prevPosition(this.slides, this.position, this.options.loop));
180
190
  }
181
191
 
182
- go(index: number, step = 0, source: Source = 'local') {
192
+ go(index: number, step = 0, source: Source = "local") {
183
193
  this.commit({ index, step }, source);
184
194
  }
185
195
 
@@ -187,7 +197,7 @@ export class DeckController {
187
197
  const open = force ?? !this.overview;
188
198
  if (open === this.overview) return;
189
199
  if (open) this.cursor = Math.max(0, this.visible.indexOf(this.position.index));
190
- this.view = open ? 'overview' : 'slide';
200
+ this.view = open ? "overview" : "slide";
191
201
  this.#morph();
192
202
  }
193
203
 
@@ -213,13 +223,15 @@ export class DeckController {
213
223
  * `fullscreen` and `presenter` are returned untouched, since they need the page.
214
224
  */
215
225
  handleKey(event: KeyboardEvent): KeyAction | null {
216
- if (event.defaultPrevented || !this.listening || event.altKey || event.ctrlKey || event.metaKey) return null;
226
+ if (event.defaultPrevented || !this.listening || event.altKey || event.ctrlKey || event.metaKey)
227
+ return null;
217
228
  const target = event.target instanceof HTMLElement ? event.target : null;
218
229
  if (target && isEditable(target)) return null;
219
230
  const action = keyAction(event.key, event.shiftKey);
220
231
  if (!action) return null;
221
232
  /* Space and Enter belong to a focused control, not to the deck. */
222
- if ((event.key === ' ' || event.key === 'Enter') && target?.closest('button, a, summary')) return null;
233
+ if ((event.key === " " || event.key === "Enter") && target?.closest("button, a, summary"))
234
+ return null;
223
235
 
224
236
  const handled = this.overview ? this.#overviewKey(action) : this.#slideKey(action);
225
237
  if (!handled) return null;
@@ -229,24 +241,24 @@ export class DeckController {
229
241
 
230
242
  #slideKey(action: KeyAction): boolean {
231
243
  switch (action) {
232
- case 'next':
244
+ case "next":
233
245
  this.next();
234
246
  return true;
235
- case 'prev':
247
+ case "prev":
236
248
  this.prev();
237
249
  return true;
238
- case 'first':
250
+ case "first":
239
251
  this.go(this.visible[0] ?? 0);
240
252
  return true;
241
- case 'last':
253
+ case "last":
242
254
  this.go(this.visible[this.visible.length - 1] ?? 0);
243
255
  return true;
244
- case 'overview':
256
+ case "overview":
245
257
  this.toggleOverview(true);
246
258
  return true;
247
- case 'fullscreen':
259
+ case "fullscreen":
248
260
  return true;
249
- case 'presenter':
261
+ case "presenter":
250
262
  return !!this.options.presenter;
251
263
  default:
252
264
  return false;
@@ -256,34 +268,34 @@ export class DeckController {
256
268
  #overviewKey(action: KeyAction): boolean {
257
269
  const cols = this.grid.cols;
258
270
  switch (action) {
259
- case 'next':
271
+ case "next":
260
272
  this.#moveCursor(this.cursor + 1);
261
273
  return true;
262
- case 'prev':
274
+ case "prev":
263
275
  this.#moveCursor(this.cursor - 1);
264
276
  return true;
265
- case 'down':
277
+ case "down":
266
278
  this.#moveCursor(this.cursor + cols);
267
279
  return true;
268
- case 'up':
280
+ case "up":
269
281
  this.#moveCursor(this.cursor - cols);
270
282
  return true;
271
- case 'first':
283
+ case "first":
272
284
  this.#moveCursor(0);
273
285
  return true;
274
- case 'last':
286
+ case "last":
275
287
  this.#moveCursor(this.visible.length - 1);
276
288
  return true;
277
- case 'select':
289
+ case "select":
278
290
  this.select(this.visible[this.cursor] ?? this.position.index);
279
291
  return true;
280
- case 'close':
281
- case 'overview':
292
+ case "close":
293
+ case "overview":
282
294
  this.toggleOverview(false);
283
295
  return true;
284
- case 'fullscreen':
296
+ case "fullscreen":
285
297
  return true;
286
- case 'presenter':
298
+ case "presenter":
287
299
  return !!this.options.presenter;
288
300
  default:
289
301
  return false;