@heyramzi/ui 2.11.1 → 2.11.2

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 (266) hide show
  1. package/dist/agents/helpers.js +38 -38
  2. package/dist/agents/page-state.js +49 -50
  3. package/dist/agents/vendor/color.js +146 -127
  4. package/dist/agents/vendor/draw.js +617 -508
  5. package/dist/agents/vendor/engine.js +698 -599
  6. package/dist/agents/vendor/mesh.js +653 -683
  7. package/dist/agents/vendor/plastic.js +3913 -3112
  8. package/dist/agents/vendor/presets.js +163 -164
  9. package/dist/agents/vendor/shapes.js +21 -20
  10. package/dist/agents/vendor/ticker.js +41 -42
  11. package/dist/agents/vendor/types.js +1 -0
  12. package/dist/agents/vendor/wear.js +1421 -1448
  13. package/dist/ai/confirmation/confirmation-context.svelte.js +6 -6
  14. package/dist/ai/confirmation/index.js +3 -1
  15. package/dist/ai/index.js +33 -0
  16. package/dist/ai/prompt-input/index.js +3 -1
  17. package/dist/ai/reasoning/index.js +3 -1
  18. package/dist/ai/reasoning/reasoning-context.svelte.js +6 -6
  19. package/dist/ai/suggestion/index.js +3 -1
  20. package/dist/ai/typing-dots/index.js +3 -1
  21. package/dist/animations/text-swap.js +24 -24
  22. package/dist/brand/index.js +54 -48
  23. package/dist/canvas/card/resize.js +5 -3
  24. package/dist/canvas/edges/edge-path.js +255 -242
  25. package/dist/canvas/editor/context-menu.js +39 -36
  26. package/dist/canvas/editor/dispatch.svelte.js +154 -151
  27. package/dist/canvas/editor/editor-context.js +7 -2
  28. package/dist/canvas/editor/editor-mode.js +1 -0
  29. package/dist/canvas/editor/frame.js +73 -76
  30. package/dist/canvas/editor/hand-context.js +5 -2
  31. package/dist/canvas/editor/history-core.js +163 -191
  32. package/dist/canvas/editor/keymap.js +95 -169
  33. package/dist/canvas/editor/layout-actions.js +143 -144
  34. package/dist/canvas/editor/lock.js +52 -51
  35. package/dist/canvas/editor/rebase.js +217 -240
  36. package/dist/canvas/editor/style.js +132 -137
  37. package/dist/canvas/editor/text-field-context.js +7 -2
  38. package/dist/canvas/editor/z-order.js +65 -70
  39. package/dist/canvas/headless/alignment.js +22 -16
  40. package/dist/canvas/headless/break-apart-find.js +286 -279
  41. package/dist/canvas/headless/break-apart-pieces.js +62 -58
  42. package/dist/canvas/headless/break-apart-plan.js +299 -325
  43. package/dist/canvas/headless/break-apart-style.js +75 -70
  44. package/dist/canvas/headless/break-apart.js +188 -181
  45. package/dist/canvas/headless/canvas-cleanup.js +78 -58
  46. package/dist/canvas/headless/edge-anchors.js +115 -116
  47. package/dist/canvas/headless/edge-memo.js +24 -22
  48. package/dist/canvas/headless/edge-serialization.js +17 -27
  49. package/dist/canvas/headless/figure-geometry.js +232 -264
  50. package/dist/canvas/headless/fit-viewport.js +84 -67
  51. package/dist/canvas/headless/grid.js +88 -86
  52. package/dist/canvas/headless/icon-node.js +44 -36
  53. package/dist/canvas/headless/index.js +1 -0
  54. package/dist/canvas/headless/linkify.js +17 -19
  55. package/dist/canvas/headless/pen-marks.js +101 -95
  56. package/dist/canvas/headless/sketch.js +231 -209
  57. package/dist/canvas/headless/snap-guides.js +99 -83
  58. package/dist/canvas/headless/svg-figure.js +133 -117
  59. package/dist/canvas/headless/table-layout.js +146 -107
  60. package/dist/canvas/index.js +2 -0
  61. package/dist/canvas/lod/lod-mode.svelte.js +20 -18
  62. package/dist/canvas/lod/render-all.svelte.js +36 -39
  63. package/dist/canvas/ops/arrange.js +78 -71
  64. package/dist/canvas/ops/ops.js +260 -255
  65. package/dist/canvas/pen/colors.js +37 -35
  66. package/dist/canvas/pen/eraser.js +28 -27
  67. package/dist/canvas/pen/geometry.js +120 -130
  68. package/dist/canvas/pen/index.js +1 -0
  69. package/dist/canvas/pen/ops.js +11 -11
  70. package/dist/canvas/pen/pen-session.js +150 -159
  71. package/dist/canvas/pen/plugin.js +107 -104
  72. package/dist/canvas/pen/shapes.js +73 -68
  73. package/dist/canvas/pen/stroke-path.js +32 -30
  74. package/dist/canvas/pen/types.js +21 -21
  75. package/dist/canvas/pen/ui.js +10 -8
  76. package/dist/canvas/plugin.js +46 -46
  77. package/dist/canvas/screen/glyphs.js +12 -11
  78. package/dist/canvas/screen/labels.js +22 -22
  79. package/dist/canvas/screen/parts.js +98 -111
  80. package/dist/canvas/screen/plugin.js +47 -56
  81. package/dist/canvas/screen/types.js +30 -35
  82. package/dist/canvas/screen/ui.js +7 -7
  83. package/dist/canvas/test-utils.js +14 -14
  84. package/dist/canvas/types.js +1 -0
  85. package/dist/canvas/ui/forward-wheel.js +24 -25
  86. package/dist/canvas/ui/icons.js +64 -131
  87. package/dist/canvas/ui/place-panel.js +58 -49
  88. package/dist/canvas/ui/shortcut-tip.js +14 -12
  89. package/dist/canvas/ui/tools.js +300 -385
  90. package/dist/charts/dashboard/chart.js +4 -0
  91. package/dist/charts/dashboard/data-table.js +11 -0
  92. package/dist/charts/dashboard/windows.js +8 -3
  93. package/dist/charts/edge-fade.js +10 -5
  94. package/dist/charts/hover-band.js +16 -11
  95. package/dist/charts/index.js +0 -1
  96. package/dist/charts/motion.js +11 -7
  97. package/dist/charts/primitives/chart-utils.js +12 -12
  98. package/dist/components/copy/clipboard.js +32 -32
  99. package/dist/components/copy/copied.svelte.js +31 -23
  100. package/dist/components/data-table/data-table.js +39 -39
  101. package/dist/components/docs/index.js +4 -0
  102. package/dist/components/docs/scroll-spy.svelte.js +73 -68
  103. package/dist/components/list-page/filter-section.js +4 -1
  104. package/dist/components/list-page/index.js +2 -0
  105. package/dist/components/list-page/list-table.js +7 -2
  106. package/dist/components/list-page/queue-rail.js +14 -0
  107. package/dist/components/list-page/section-host.js +4 -2
  108. package/dist/components/list-page/step.js +4 -3
  109. package/dist/components/list-page/types.js +1 -0
  110. package/dist/components/picker/trigger.js +48 -30
  111. package/dist/components/picker/types.js +1 -0
  112. package/dist/components/segmented/collapse.js +38 -27
  113. package/dist/components/segmented/index.js +8 -0
  114. package/dist/components/segmented/segmented.js +67 -42
  115. package/dist/components/star-rating-input/index.js +3 -1
  116. package/dist/components/table-view/types.js +1 -0
  117. package/dist/components/tags-input/tags.js +81 -69
  118. package/dist/components/theme/index.js +4 -0
  119. package/dist/components/toolbar/index.js +4 -0
  120. package/dist/components/toolbar/toolbar-trigger.js +14 -1
  121. package/dist/editor/anchors.js +17 -13
  122. package/dist/editor/block-id.js +52 -51
  123. package/dist/editor/block-ops.js +108 -80
  124. package/dist/editor/doc-blocks.js +155 -166
  125. package/dist/editor/extensions.js +139 -180
  126. package/dist/editor/index.js +4 -0
  127. package/dist/editor/markdown-test-helpers.js +4 -2
  128. package/dist/editor/markdown.js +420 -408
  129. package/dist/editor/serializer.js +204 -200
  130. package/dist/editor/slash-items.js +89 -101
  131. package/dist/editor/youtube-url.js +25 -20
  132. package/dist/effects/animated-beam/path-calculator.svelte.js +43 -38
  133. package/dist/effects/animated-beam/types.js +1 -0
  134. package/dist/effects/border-beam/css.js +92 -78
  135. package/dist/effects/border-beam/presets.js +1705 -1720
  136. package/dist/effects/border-beam/register-properties.js +43 -33
  137. package/dist/effects/border-beam/types.js +1 -0
  138. package/dist/effects/image-comparison/compare.js +3 -2
  139. package/dist/effects/image-reveal/types.js +1 -0
  140. package/dist/effects/magnetic/magnetic.js +58 -52
  141. package/dist/effects/reveal/observe.js +50 -40
  142. package/dist/effects/reveal/types.js +1 -0
  143. package/dist/effects/shader-gradient/color.js +36 -29
  144. package/dist/effects/shader-gradient/renderer.js +384 -295
  145. package/dist/effects/shader-gradient/shaders.js +31 -0
  146. package/dist/effects/shader-gradient/types.js +1 -0
  147. package/dist/icons/apple-symbol-exports.js +99 -124
  148. package/dist/icons/sf-symbols.js +357 -461
  149. package/dist/icons/trades.js +43 -28
  150. package/dist/inbox/index.js +1 -0
  151. package/dist/inbox/logic.js +126 -122
  152. package/dist/inbox/types.js +43 -43
  153. package/dist/lib/arrive.js +19 -12
  154. package/dist/lib/icon-types.js +1 -0
  155. package/dist/lib/initials.js +16 -10
  156. package/dist/lib/layout.js +5 -0
  157. package/dist/lib/panel.js +13 -0
  158. package/dist/lib/result.js +22 -22
  159. package/dist/lib/sliding-pill.js +59 -44
  160. package/dist/lib/theme-transition.js +43 -43
  161. package/dist/lib/tone.js +31 -24
  162. package/dist/lib/utils.js +3 -1
  163. package/dist/onboarding/define-tours.js +24 -23
  164. package/dist/onboarding/onboarding.svelte.js +16 -12
  165. package/dist/onboarding/pick.js +10 -6
  166. package/dist/onboarding/stores.js +40 -41
  167. package/dist/onboarding/wait.js +24 -23
  168. package/dist/panel/side-panel-types.js +1 -0
  169. package/dist/record/demo-data.js +459 -486
  170. package/dist/record/fields.js +129 -131
  171. package/dist/record/format.js +70 -82
  172. package/dist/record/gutter.js +1 -0
  173. package/dist/record/kinds.js +95 -105
  174. package/dist/record/logic.js +238 -219
  175. package/dist/record/types.js +49 -48
  176. package/dist/shadcn/accordion/index.js +3 -1
  177. package/dist/shadcn/alert/index.js +3 -1
  178. package/dist/shadcn/alert-dialog/index.js +3 -1
  179. package/dist/shadcn/attachment/index.js +3 -1
  180. package/dist/shadcn/avatar/index.js +3 -1
  181. package/dist/shadcn/breadcrumb/index.js +3 -1
  182. package/dist/shadcn/bubble/index.js +3 -1
  183. package/dist/shadcn/button/index.js +3 -1
  184. package/dist/shadcn/calendar/index.js +3 -1
  185. package/dist/shadcn/card/index.js +3 -1
  186. package/dist/shadcn/checkbox/index.js +3 -1
  187. package/dist/shadcn/code-block/index.js +3 -1
  188. package/dist/shadcn/collapsible/index.js +3 -1
  189. package/dist/shadcn/command/index.js +4 -1
  190. package/dist/shadcn/context-menu/index.js +3 -1
  191. package/dist/shadcn/dialog/index.js +3 -1
  192. package/dist/shadcn/dropdown-menu/menu-item.js +40 -20
  193. package/dist/shadcn/empty/index.js +3 -1
  194. package/dist/shadcn/field/index.js +3 -1
  195. package/dist/shadcn/hooks/highlighter.js +77 -75
  196. package/dist/shadcn/hooks/is-mobile.svelte.js +3 -3
  197. package/dist/shadcn/hooks/use-highlighted-code.svelte.js +62 -62
  198. package/dist/shadcn/input/index.js +3 -1
  199. package/dist/shadcn/kbd/index.js +3 -1
  200. package/dist/shadcn/label/index.js +3 -1
  201. package/dist/shadcn/marker/index.js +3 -1
  202. package/dist/shadcn/message/index.js +3 -1
  203. package/dist/shadcn/message-scroller/index.js +3 -1
  204. package/dist/shadcn/popover/index.js +3 -1
  205. package/dist/shadcn/progress/index.js +3 -1
  206. package/dist/shadcn/progress/tone.js +8 -7
  207. package/dist/shadcn/radio-group/index.js +3 -1
  208. package/dist/shadcn/scroll-area/index.js +3 -1
  209. package/dist/shadcn/select/index.js +3 -1
  210. package/dist/shadcn/separator/index.js +3 -1
  211. package/dist/shadcn/sheet/index.js +3 -1
  212. package/dist/shadcn/sidebar/context.svelte.js +42 -28
  213. package/dist/shadcn/sidebar/index.js +3 -1
  214. package/dist/shadcn/skeleton/index.js +3 -1
  215. package/dist/shadcn/slider/index.js +3 -1
  216. package/dist/shadcn/switch/index.js +3 -1
  217. package/dist/shadcn/table/index.js +3 -1
  218. package/dist/shadcn/tabs/index.js +3 -1
  219. package/dist/shadcn/textarea/index.js +3 -1
  220. package/dist/shadcn/toggle/index.js +3 -1
  221. package/dist/shadcn/toggle-group/index.js +3 -1
  222. package/dist/shadcn/tooltip/context.js +7 -2
  223. package/dist/shadcn/tooltip/index.js +3 -1
  224. package/dist/shadcn/trace/index.js +3 -1
  225. package/dist/slides/bridges.js +65 -59
  226. package/dist/slides/deck-controller.svelte.js +210 -207
  227. package/dist/slides/export/capture.js +66 -71
  228. package/dist/slides/export/ffmpeg.js +76 -72
  229. package/dist/slides/export/index.js +3 -0
  230. package/dist/slides/export/launch.js +9 -6
  231. package/dist/slides/export/pdf.js +60 -54
  232. package/dist/slides/export/types.js +1 -0
  233. package/dist/slides/labels.js +24 -24
  234. package/dist/slides/layout.js +39 -41
  235. package/dist/slides/model.js +9 -7
  236. package/dist/slides/navigation.js +78 -73
  237. package/dist/slides/types.js +2 -2
  238. package/dist/status/define-statuses.js +18 -14
  239. package/dist/status/status-types.js +1 -0
  240. package/dist/test-setup.js +24 -20
  241. package/dist/thread/logic.js +73 -77
  242. package/dist/thread/types.js +21 -21
  243. package/dist/work/board-order.js +94 -90
  244. package/dist/work/dates.js +16 -9
  245. package/dist/work/detail/detail-types.js +18 -18
  246. package/dist/work/docs/edited.js +32 -29
  247. package/dist/work/docs/index.js +4 -0
  248. package/dist/work/docs/labels.js +34 -34
  249. package/dist/work/docs/menu.js +113 -106
  250. package/dist/work/docs/outline.js +39 -29
  251. package/dist/work/gantt/logic.js +211 -235
  252. package/dist/work/inbox/inbox-logic.js +71 -75
  253. package/dist/work/inbox/inbox-statuses.js +75 -72
  254. package/dist/work/inbox/inbox-types.js +1 -0
  255. package/dist/work/kanban-drag.js +27 -22
  256. package/dist/work/kanban-types.js +1 -0
  257. package/dist/work/presets/sales.js +36 -32
  258. package/dist/work/reorder.js +9 -8
  259. package/dist/work/task-types.js +1 -0
  260. package/dist/work/time/duration.js +51 -46
  261. package/dist/work/time/time-types.js +23 -23
  262. package/dist/work/use-kanban-dnd.svelte.js +126 -125
  263. package/package.json +3 -1
  264. package/src/components/list-page/master-detail.svelte +3 -1
  265. package/src/components/list-page/rail-row.svelte +4 -4
  266. package/src/editor/markdown.ts +30 -35
@@ -1,133 +1,66 @@
1
1
  export const ICON_PATHS = {
2
- select: [
3
- "M5 3.5 18.5 10l-5.6 1.9L10.7 17.5z"
4
- ],
5
- hand: [
6
- "M8 13V6.5a1.5 1.5 0 0 1 3 0V11m0-5.5a1.5 1.5 0 0 1 3 0V11m0-4a1.5 1.5 0 0 1 3 0v6.5a6.5 6.5 0 0 1-6.5 6.5h-.4a6 6 0 0 1-4.7-2.3L4.6 14.6a1.5 1.5 0 0 1 2.3-1.9L8 14"
7
- ],
8
- pen: [
9
- "M4 20l1-4L16.5 4.5a2.1 2.1 0 0 1 3 3L8 19z",
10
- "M14.5 6.5l3 3"
11
- ],
12
- highlighter: [
13
- "M14.5 4.5l5 5-8 8-5 1.5 1-5z",
14
- "M4 21h16"
15
- ],
16
- eraser: [
17
- "M4.5 15l8.5-8.5a2.1 2.1 0 0 1 3 0l3 3a2.1 2.1 0 0 1 0 3L12 20H8z",
18
- "M10.5 9l6 6M12 20h8"
19
- ],
20
- text: [
21
- "M5 7V5.5h14V7M12 5.5V19M9 19h6"
22
- ],
23
- rectangle: [
24
- "M6 6h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2z"
25
- ],
26
- ellipse: [
27
- "M4 12a8 6 0 1 0 16 0a8 6 0 1 0-16 0"
28
- ],
29
- diamond: [
30
- "M12 4l8 8-8 8-8-8z"
31
- ],
32
- frame: [
33
- "M8 4v16M16 4v16M4 8h16M4 16h16"
34
- ],
35
- shapes: [
36
- "M5 12.5h5a1.5 1.5 0 0 1 1.5 1.5v5a1.5 1.5 0 0 1-1.5 1.5H5A1.5 1.5 0 0 1 3.5 19v-5A1.5 1.5 0 0 1 5 12.5z",
37
- "M11.5 8a4.5 4.5 0 1 0 9 0a4.5 4.5 0 1 0-9 0"
38
- ],
39
- undo: [
40
- "M9 14 4 9l5-5M4 9h9.5a6 6 0 0 1 0 12H11"
41
- ],
42
- redo: [
43
- "M15 14l5-5-5-5M20 9h-9.5a6 6 0 0 0 0 12H13"
44
- ],
45
- cards: [
46
- "M7 4h10a3 3 0 0 1 3 3v10a3 3 0 0 1-3 3H7a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3z",
47
- "M12 8.5v7M8.5 12h7"
48
- ],
49
- search: [
50
- "M4.5 11a6.5 6.5 0 1 0 13 0a6.5 6.5 0 1 0-13 0",
51
- "M16 16l4 4"
52
- ],
53
- note: [
54
- "M6 4h12a1 1 0 0 1 1 1v9l-5 5H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1z",
55
- "M19 14h-4a1 1 0 0 0-1 1v4"
56
- ],
57
- insert: [
58
- "M12 5v14M5 12h14"
59
- ],
60
- connect: [
61
- "M4.5 4.5a1.5 1.5 0 1 0 3 0a1.5 1.5 0 1 0-3 0",
62
- "M6 6v4.5a3 3 0 0 0 3 3h9",
63
- "M15 10.5l3.5 3-3.5 3"
64
- ],
65
- "distribute-h": [
66
- "M4 4v16M20 4v16",
67
- "M9 8h6v8H9z"
68
- ],
69
- "distribute-v": [
70
- "M4 4h16M4 20h16",
71
- "M8 9h8v6H8z"
72
- ],
73
- minus: [
74
- "M5 12h14"
75
- ],
76
- more: [
77
- "M4.8 12a1.2 1.2 0 1 0 2.4 0a1.2 1.2 0 1 0-2.4 0",
78
- "M10.8 12a1.2 1.2 0 1 0 2.4 0a1.2 1.2 0 1 0-2.4 0",
79
- "M16.8 12a1.2 1.2 0 1 0 2.4 0a1.2 1.2 0 1 0-2.4 0"
80
- ],
81
- "mm-child": [
82
- "M4.0 8h3.0a1.5 1.5 0 0 1 1.5 1.5v5.0a1.5 1.5 0 0 1-1.5 1.5h-3.0a1.5 1.5 0 0 1-1.5-1.5v-5.0a1.5 1.5 0 0 1 1.5-1.5z",
83
- "M8.5 12h3.5",
84
- "M14 7h5.5a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2h-5.5a2 2 0 0 1-2-2v-6a2 2 0 0 1 2-2z",
85
- "M16.75 10v4M14.75 12h4"
86
- ],
87
- "mm-sibling": [
88
- "M4 6h2.5M4 17.5h2.5M4 6v11.5",
89
- "M8.5 3h7a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2h-7a2 2 0 0 1-2-2v-2a2 2 0 0 1 2-2z",
90
- "M8.5 14.5h7a2 2 0 0 1 2 2v2.5a2 2 0 0 1-2 2h-7a2 2 0 0 1-2-2v-2.5a2 2 0 0 1 2-2z",
91
- "M12 15.75v4M10 17.75h4"
92
- ],
93
- "mm-line-solid": [
94
- "M2.5 12a2 2 0 1 0 4 0a2 2 0 1 0-4 0",
95
- "M6.5 12h11",
96
- "M17.5 12a2 2 0 1 0 4 0a2 2 0 1 0-4 0"
97
- ],
98
- "mm-line-dashed": [
99
- "M2.5 12a2 2 0 1 0 4 0a2 2 0 1 0-4 0",
100
- "M7.5 12h2M11 12h2M14.5 12h2",
101
- "M17.5 12a2 2 0 1 0 4 0a2 2 0 1 0-4 0"
102
- ],
103
- "mm-ai": [
104
- "M10.5 5l1.9 5.1L17.5 12l-5.1 1.9L10.5 19l-1.9-5.1L3.5 12l5.1-1.9z",
105
- "M18.5 3.5v4M16.5 5.5h4"
106
- ],
107
- "mm-map": [
108
- "M9 10h6v4H9z",
109
- "M9 12C6 12 6 6 3 6M9 12c-3 0-3 6-6 6M15 12c3 0 3-6 6-6M15 12c3 0 3 6 6 6"
110
- ],
111
- "mm-right": [
112
- "M3 10h6v4H3z",
113
- "M9 12c4 0 4-6 8-6h4M9 12c4 0 4 6 8 6h4"
114
- ],
115
- "mm-tree": [
116
- "M9 3h6v4H9z",
117
- "M12 7v4M5 11h14M5 11v3M19 11v3M12 11v3",
118
- "M3 14h4v4H3zM10 14h4v4h-4zM17 14h4v4h-4z"
119
- ],
120
- "mm-curve": [
121
- "M4 18c8 0 8-12 16-12"
122
- ],
123
- "mm-elbow": [
124
- "M4 18h8V6h8"
125
- ],
126
- "mm-straight": [
127
- "M4 18 20 6"
128
- ],
129
- "mm-center": [
130
- "M12 8a4 4 0 1 0 0 8 4 4 0 1 0 0-8z",
131
- "M12 3v3M12 18v3M3 12h3M18 12h3"
132
- ]
2
+ select: ["M5 3.5 18.5 10l-5.6 1.9L10.7 17.5z"],
3
+ hand: ["M8 13V6.5a1.5 1.5 0 0 1 3 0V11m0-5.5a1.5 1.5 0 0 1 3 0V11m0-4a1.5 1.5 0 0 1 3 0v6.5a6.5 6.5 0 0 1-6.5 6.5h-.4a6 6 0 0 1-4.7-2.3L4.6 14.6a1.5 1.5 0 0 1 2.3-1.9L8 14"],
4
+ pen: ["M4 20l1-4L16.5 4.5a2.1 2.1 0 0 1 3 3L8 19z", "M14.5 6.5l3 3"],
5
+ highlighter: ["M14.5 4.5l5 5-8 8-5 1.5 1-5z", "M4 21h16"],
6
+ eraser: ["M4.5 15l8.5-8.5a2.1 2.1 0 0 1 3 0l3 3a2.1 2.1 0 0 1 0 3L12 20H8z", "M10.5 9l6 6M12 20h8"],
7
+ text: ["M5 7V5.5h14V7M12 5.5V19M9 19h6"],
8
+ rectangle: ["M6 6h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2z"],
9
+ ellipse: ["M4 12a8 6 0 1 0 16 0a8 6 0 1 0-16 0"],
10
+ diamond: ["M12 4l8 8-8 8-8-8z"],
11
+ frame: ["M8 4v16M16 4v16M4 8h16M4 16h16"],
12
+ shapes: ["M5 12.5h5a1.5 1.5 0 0 1 1.5 1.5v5a1.5 1.5 0 0 1-1.5 1.5H5A1.5 1.5 0 0 1 3.5 19v-5A1.5 1.5 0 0 1 5 12.5z", "M11.5 8a4.5 4.5 0 1 0 9 0a4.5 4.5 0 1 0-9 0"],
13
+ undo: ["M9 14 4 9l5-5M4 9h9.5a6 6 0 0 1 0 12H11"],
14
+ redo: ["M15 14l5-5-5-5M20 9h-9.5a6 6 0 0 0 0 12H13"],
15
+ cards: ["M7 4h10a3 3 0 0 1 3 3v10a3 3 0 0 1-3 3H7a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3z", "M12 8.5v7M8.5 12h7"],
16
+ search: ["M4.5 11a6.5 6.5 0 1 0 13 0a6.5 6.5 0 1 0-13 0", "M16 16l4 4"],
17
+ note: ["M6 4h12a1 1 0 0 1 1 1v9l-5 5H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1z", "M19 14h-4a1 1 0 0 0-1 1v4"],
18
+ insert: ["M12 5v14M5 12h14"],
19
+ connect: [
20
+ "M4.5 4.5a1.5 1.5 0 1 0 3 0a1.5 1.5 0 1 0-3 0",
21
+ "M6 6v4.5a3 3 0 0 0 3 3h9",
22
+ "M15 10.5l3.5 3-3.5 3"
23
+ ],
24
+ "distribute-h": ["M4 4v16M20 4v16", "M9 8h6v8H9z"],
25
+ "distribute-v": ["M4 4h16M4 20h16", "M8 9h8v6H8z"],
26
+ minus: ["M5 12h14"],
27
+ more: [
28
+ "M4.8 12a1.2 1.2 0 1 0 2.4 0a1.2 1.2 0 1 0-2.4 0",
29
+ "M10.8 12a1.2 1.2 0 1 0 2.4 0a1.2 1.2 0 1 0-2.4 0",
30
+ "M16.8 12a1.2 1.2 0 1 0 2.4 0a1.2 1.2 0 1 0-2.4 0"
31
+ ],
32
+ "mm-child": [
33
+ "M4.0 8h3.0a1.5 1.5 0 0 1 1.5 1.5v5.0a1.5 1.5 0 0 1-1.5 1.5h-3.0a1.5 1.5 0 0 1-1.5-1.5v-5.0a1.5 1.5 0 0 1 1.5-1.5z",
34
+ "M8.5 12h3.5",
35
+ "M14 7h5.5a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2h-5.5a2 2 0 0 1-2-2v-6a2 2 0 0 1 2-2z",
36
+ "M16.75 10v4M14.75 12h4"
37
+ ],
38
+ "mm-sibling": [
39
+ "M4 6h2.5M4 17.5h2.5M4 6v11.5",
40
+ "M8.5 3h7a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2h-7a2 2 0 0 1-2-2v-2a2 2 0 0 1 2-2z",
41
+ "M8.5 14.5h7a2 2 0 0 1 2 2v2.5a2 2 0 0 1-2 2h-7a2 2 0 0 1-2-2v-2.5a2 2 0 0 1 2-2z",
42
+ "M12 15.75v4M10 17.75h4"
43
+ ],
44
+ "mm-line-solid": [
45
+ "M2.5 12a2 2 0 1 0 4 0a2 2 0 1 0-4 0",
46
+ "M6.5 12h11",
47
+ "M17.5 12a2 2 0 1 0 4 0a2 2 0 1 0-4 0"
48
+ ],
49
+ "mm-line-dashed": [
50
+ "M2.5 12a2 2 0 1 0 4 0a2 2 0 1 0-4 0",
51
+ "M7.5 12h2M11 12h2M14.5 12h2",
52
+ "M17.5 12a2 2 0 1 0 4 0a2 2 0 1 0-4 0"
53
+ ],
54
+ "mm-ai": ["M10.5 5l1.9 5.1L17.5 12l-5.1 1.9L10.5 19l-1.9-5.1L3.5 12l5.1-1.9z", "M18.5 3.5v4M16.5 5.5h4"],
55
+ "mm-map": ["M9 10h6v4H9z", "M9 12C6 12 6 6 3 6M9 12c-3 0-3 6-6 6M15 12c3 0 3-6 6-6M15 12c3 0 3 6 6 6"],
56
+ "mm-right": ["M3 10h6v4H3z", "M9 12c4 0 4-6 8-6h4M9 12c4 0 4 6 8 6h4"],
57
+ "mm-tree": [
58
+ "M9 3h6v4H9z",
59
+ "M12 7v4M5 11h14M5 11v3M19 11v3M12 11v3",
60
+ "M3 14h4v4H3zM10 14h4v4h-4zM17 14h4v4h-4z"
61
+ ],
62
+ "mm-curve": ["M4 18c8 0 8-12 16-12"],
63
+ "mm-elbow": ["M4 18h8V6h8"],
64
+ "mm-straight": ["M4 18 20 6"],
65
+ "mm-center": ["M12 8a4 4 0 1 0 0 8 4 4 0 1 0 0-8z", "M12 3v3M12 18v3M3 12h3M18 12h3"]
133
66
  };
@@ -1,57 +1,66 @@
1
+ /** The panel's gap from the selection: past the grips, which stick out half their size and have a hit area around them. */
1
2
  export const CLEARANCE = 20;
3
+ /** The size chip hangs under a selected card, so a panel below leaves room for it. */
2
4
  const CHIP_ROOM = 40;
5
+ /** The canvas's own docks: the rail on the left, the pill along the bottom, a small margin elsewhere. */
3
6
  const INSET = {
4
- left: 72,
5
- top: 12,
6
- right: 12,
7
- bottom: 76
7
+ left: 72,
8
+ top: 12,
9
+ right: 12,
10
+ bottom: 76
8
11
  };
12
+ /** The minimap fills the bottom-right corner, so a panel that reaches it stops above it. */
9
13
  const MINIMAP = {
10
- width: 232,
11
- height: 172
14
+ width: 232,
15
+ height: 172
12
16
  };
17
+ /**
18
+ * The first side with room for the panel (right, left, below, above), centred on the
19
+ * selection. Null when none fits, and the caller docks it at the edge.
20
+ */
13
21
  export function placeBeside(selection, panel, canvas) {
14
- const free = {
15
- left: INSET.left,
16
- top: INSET.top,
17
- right: canvas.width - INSET.right,
18
- bottom: canvas.height - INSET.bottom
19
- };
20
- const centreX = (selection.left + selection.right) / 2 - panel.width / 2;
21
- const centreY = (selection.top + selection.bottom) / 2 - panel.height / 2;
22
- const floor = (x, width)=>x + width > canvas.width - MINIMAP.width ? canvas.height - MINIMAP.height : free.bottom;
23
- const clampX = (x)=>Math.min(Math.max(x, free.left), free.right - panel.width);
24
- const clampY = (y, x)=>Math.min(Math.max(y, free.top), floor(x, panel.width) - panel.height);
25
- const tries = [
26
- {
27
- side: "right",
28
- x: selection.right + CLEARANCE,
29
- y: clampY(centreY, selection.right + CLEARANCE),
30
- fits: selection.right + CLEARANCE + panel.width <= free.right
31
- },
32
- {
33
- side: "left",
34
- x: selection.left - CLEARANCE - panel.width,
35
- y: clampY(centreY, selection.left - CLEARANCE - panel.width),
36
- fits: selection.left - CLEARANCE - panel.width >= free.left
37
- },
38
- {
39
- side: "below",
40
- x: clampX(centreX),
41
- y: selection.bottom + CLEARANCE + CHIP_ROOM,
42
- fits: selection.bottom + CLEARANCE + CHIP_ROOM + panel.height <= floor(clampX(centreX), panel.width)
43
- },
44
- {
45
- side: "above",
46
- x: clampX(centreX),
47
- y: selection.top - CLEARANCE - panel.height,
48
- fits: selection.top - CLEARANCE - panel.height >= free.top
49
- }
50
- ];
51
- const found = tries.find((attempt)=>attempt.fits);
52
- return found ? {
53
- x: found.x,
54
- y: found.y,
55
- side: found.side
56
- } : null;
22
+ const free = {
23
+ left: INSET.left,
24
+ top: INSET.top,
25
+ right: canvas.width - INSET.right,
26
+ bottom: canvas.height - INSET.bottom
27
+ };
28
+ const centreX = (selection.left + selection.right) / 2 - panel.width / 2;
29
+ const centreY = (selection.top + selection.bottom) / 2 - panel.height / 2;
30
+ // The lowest a panel may reach where it stands: above the minimap when it reaches that corner.
31
+ const floor = (x, width) => x + width > canvas.width - MINIMAP.width ? canvas.height - MINIMAP.height : free.bottom;
32
+ const clampX = (x) => Math.min(Math.max(x, free.left), free.right - panel.width);
33
+ const clampY = (y, x) => Math.min(Math.max(y, free.top), floor(x, panel.width) - panel.height);
34
+ const tries = [
35
+ {
36
+ side: "right",
37
+ x: selection.right + CLEARANCE,
38
+ y: clampY(centreY, selection.right + CLEARANCE),
39
+ fits: selection.right + CLEARANCE + panel.width <= free.right
40
+ },
41
+ {
42
+ side: "left",
43
+ x: selection.left - CLEARANCE - panel.width,
44
+ y: clampY(centreY, selection.left - CLEARANCE - panel.width),
45
+ fits: selection.left - CLEARANCE - panel.width >= free.left
46
+ },
47
+ {
48
+ side: "below",
49
+ x: clampX(centreX),
50
+ y: selection.bottom + CLEARANCE + CHIP_ROOM,
51
+ fits: selection.bottom + CLEARANCE + CHIP_ROOM + panel.height <= floor(clampX(centreX), panel.width)
52
+ },
53
+ {
54
+ side: "above",
55
+ x: clampX(centreX),
56
+ y: selection.top - CLEARANCE - panel.height,
57
+ fits: selection.top - CLEARANCE - panel.height >= free.top
58
+ }
59
+ ];
60
+ const found = tries.find((attempt) => attempt.fits);
61
+ return found ? {
62
+ x: found.x,
63
+ y: found.y,
64
+ side: found.side
65
+ } : null;
57
66
  }
@@ -1,18 +1,20 @@
1
+ // The text a tool bar tooltip shows beside its label, so every button names its key the same way.
1
2
  const GLYPHS = {
2
- mod: {
3
- mac: "⌘",
4
- other: "Ctrl"
5
- },
6
- shift: {
7
- mac: "⇧",
8
- other: "Shift"
9
- }
3
+ mod: {
4
+ mac: "⌘",
5
+ other: "Ctrl"
6
+ },
7
+ shift: {
8
+ mac: "⇧",
9
+ other: "Shift"
10
+ }
10
11
  };
11
12
  export function isMacPlatform() {
12
- return typeof navigator !== "undefined" && navigator.platform.includes("Mac");
13
+ return typeof navigator !== "undefined" && navigator.platform.includes("Mac");
13
14
  }
15
+ /** "Undo ⌘Z" on a Mac, "Undo Ctrl+Z" elsewhere. `keys` are the same words the shortcut list uses. */
14
16
  export function shortcutTip(label, keys, mac = isMacPlatform()) {
15
- if (keys.length === 0) return label;
16
- const parts = keys.map((key)=>GLYPHS[key]?.[mac ? "mac" : "other"] ?? key);
17
- return `${label} ${parts.join(mac ? "" : "+")}`;
17
+ if (keys.length === 0) return label;
18
+ const parts = keys.map((key) => GLYPHS[key]?.[mac ? "mac" : "other"] ?? key);
19
+ return `${label} ${parts.join(mac ? "" : "+")}`;
18
20
  }