@oh-just-another/state 0.59.0 → 0.61.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 (163) hide show
  1. package/CHANGELOG.md +189 -0
  2. package/README.md +6 -4
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/actions/actionArrange.js +4 -4
  5. package/dist/actions/actionArrange.js.map +1 -1
  6. package/dist/actions/actionClipboard.d.ts.map +1 -1
  7. package/dist/actions/actionClipboard.js +5 -0
  8. package/dist/actions/actionClipboard.js.map +1 -1
  9. package/dist/actions/actionKeyboard.d.ts.map +1 -1
  10. package/dist/actions/actionKeyboard.js +79 -11
  11. package/dist/actions/actionKeyboard.js.map +1 -1
  12. package/dist/actions/actionMode.d.ts +2 -0
  13. package/dist/actions/actionMode.d.ts.map +1 -1
  14. package/dist/actions/actionMode.js +81 -27
  15. package/dist/actions/actionMode.js.map +1 -1
  16. package/dist/actions/actionSelection.d.ts.map +1 -1
  17. package/dist/actions/actionSelection.js +1 -0
  18. package/dist/actions/actionSelection.js.map +1 -1
  19. package/dist/actions/actionView.d.ts +6 -0
  20. package/dist/actions/actionView.d.ts.map +1 -1
  21. package/dist/actions/actionView.js +19 -1
  22. package/dist/actions/actionView.js.map +1 -1
  23. package/dist/actions/actionZoom.d.ts.map +1 -1
  24. package/dist/actions/actionZoom.js +5 -0
  25. package/dist/actions/actionZoom.js.map +1 -1
  26. package/dist/actions/index.d.ts +3 -3
  27. package/dist/actions/index.d.ts.map +1 -1
  28. package/dist/actions/index.js +3 -3
  29. package/dist/actions/index.js.map +1 -1
  30. package/dist/actions/registry.d.ts.map +1 -1
  31. package/dist/actions/registry.js +13 -0
  32. package/dist/actions/registry.js.map +1 -1
  33. package/dist/actions/types.d.ts +10 -1
  34. package/dist/actions/types.d.ts.map +1 -1
  35. package/dist/actions/types.js.map +1 -1
  36. package/dist/built-in-handlers.d.ts +8 -0
  37. package/dist/built-in-handlers.d.ts.map +1 -1
  38. package/dist/built-in-handlers.js +31 -16
  39. package/dist/built-in-handlers.js.map +1 -1
  40. package/dist/clipboard.d.ts +0 -14
  41. package/dist/clipboard.d.ts.map +1 -1
  42. package/dist/clipboard.js +1 -1
  43. package/dist/clipboard.js.map +1 -1
  44. package/dist/constants.d.ts +253 -18
  45. package/dist/constants.d.ts.map +1 -1
  46. package/dist/constants.js +255 -2
  47. package/dist/constants.js.map +1 -1
  48. package/dist/dom-events.d.ts +1 -2
  49. package/dist/dom-events.d.ts.map +1 -1
  50. package/dist/dom-events.js.map +1 -1
  51. package/dist/editor/animation-scene.d.ts +15 -0
  52. package/dist/editor/animation-scene.d.ts.map +1 -1
  53. package/dist/editor/animation-scene.js +159 -0
  54. package/dist/editor/animation-scene.js.map +1 -1
  55. package/dist/editor/applies/create.d.ts +0 -6
  56. package/dist/editor/applies/create.d.ts.map +1 -1
  57. package/dist/editor/applies/create.js +1 -1
  58. package/dist/editor/applies/create.js.map +1 -1
  59. package/dist/editor/applies/link-move.d.ts +0 -8
  60. package/dist/editor/applies/link-move.d.ts.map +1 -1
  61. package/dist/editor/applies/link-move.js +1 -1
  62. package/dist/editor/applies/link-move.js.map +1 -1
  63. package/dist/editor/event-fanout.d.ts +6 -6
  64. package/dist/editor/event-fanout.d.ts.map +1 -1
  65. package/dist/editor/event-fanout.js +8 -8
  66. package/dist/editor/event-fanout.js.map +1 -1
  67. package/dist/editor/hit-test.d.ts +8 -0
  68. package/dist/editor/hit-test.d.ts.map +1 -1
  69. package/dist/editor/hit-test.js +31 -16
  70. package/dist/editor/hit-test.js.map +1 -1
  71. package/dist/editor/interaction-state.d.ts +184 -0
  72. package/dist/editor/interaction-state.d.ts.map +1 -0
  73. package/dist/editor/interaction-state.js +139 -0
  74. package/dist/editor/interaction-state.js.map +1 -0
  75. package/dist/editor/link-handle-drag.d.ts +172 -0
  76. package/dist/editor/link-handle-drag.d.ts.map +1 -0
  77. package/dist/editor/link-handle-drag.js +369 -0
  78. package/dist/editor/link-handle-drag.js.map +1 -0
  79. package/dist/editor/pointer-binding.d.ts +9 -11
  80. package/dist/editor/pointer-binding.d.ts.map +1 -1
  81. package/dist/editor/pointer-binding.js +1247 -909
  82. package/dist/editor/pointer-binding.js.map +1 -1
  83. package/dist/editor/public/brush.d.ts +93 -13
  84. package/dist/editor/public/brush.d.ts.map +1 -1
  85. package/dist/editor/public/brush.js +240 -22
  86. package/dist/editor/public/brush.js.map +1 -1
  87. package/dist/editor/public/cursor.d.ts +1 -15
  88. package/dist/editor/public/cursor.d.ts.map +1 -1
  89. package/dist/editor/public/cursor.js +17 -7
  90. package/dist/editor/public/cursor.js.map +1 -1
  91. package/dist/editor/public/eraser.d.ts +55 -0
  92. package/dist/editor/public/eraser.d.ts.map +1 -0
  93. package/dist/editor/public/eraser.js +65 -0
  94. package/dist/editor/public/eraser.js.map +1 -0
  95. package/dist/editor/public/laser.d.ts +38 -0
  96. package/dist/editor/public/laser.d.ts.map +1 -0
  97. package/dist/editor/public/laser.js +42 -0
  98. package/dist/editor/public/laser.js.map +1 -0
  99. package/dist/editor/public/placement.d.ts.map +1 -1
  100. package/dist/editor/public/placement.js +9 -1
  101. package/dist/editor/public/placement.js.map +1 -1
  102. package/dist/editor/public/selection-ops.d.ts +12 -0
  103. package/dist/editor/public/selection-ops.d.ts.map +1 -1
  104. package/dist/editor/public/selection-ops.js +19 -1
  105. package/dist/editor/public/selection-ops.js.map +1 -1
  106. package/dist/editor/public/stroke-eraser-coverage.d.ts +37 -0
  107. package/dist/editor/public/stroke-eraser-coverage.d.ts.map +1 -0
  108. package/dist/editor/public/stroke-eraser-coverage.js +168 -0
  109. package/dist/editor/public/stroke-eraser-coverage.js.map +1 -0
  110. package/dist/editor/public/stroke-eraser.d.ts +50 -0
  111. package/dist/editor/public/stroke-eraser.d.ts.map +1 -0
  112. package/dist/editor/public/stroke-eraser.js +176 -0
  113. package/dist/editor/public/stroke-eraser.js.map +1 -0
  114. package/dist/editor/public/stroke-smoothing.d.ts +21 -0
  115. package/dist/editor/public/stroke-smoothing.d.ts.map +1 -0
  116. package/dist/editor/public/stroke-smoothing.js +37 -0
  117. package/dist/editor/public/stroke-smoothing.js.map +1 -0
  118. package/dist/editor/public/tool-ops.d.ts +130 -0
  119. package/dist/editor/public/tool-ops.d.ts.map +1 -0
  120. package/dist/editor/public/tool-ops.js +392 -0
  121. package/dist/editor/public/tool-ops.js.map +1 -0
  122. package/dist/editor/public/z-order.d.ts +1 -12
  123. package/dist/editor/public/z-order.d.ts.map +1 -1
  124. package/dist/editor/public/z-order.js +1 -1
  125. package/dist/editor/public/z-order.js.map +1 -1
  126. package/dist/editor/public/zoom-pan.d.ts +9 -0
  127. package/dist/editor/public/zoom-pan.d.ts.map +1 -1
  128. package/dist/editor/public/zoom-pan.js +31 -0
  129. package/dist/editor/public/zoom-pan.js.map +1 -1
  130. package/dist/editor/render-orchestrator.d.ts +180 -5
  131. package/dist/editor/render-orchestrator.d.ts.map +1 -1
  132. package/dist/editor/render-orchestrator.js +516 -353
  133. package/dist/editor/render-orchestrator.js.map +1 -1
  134. package/dist/editor/text-edit.d.ts +136 -0
  135. package/dist/editor/text-edit.d.ts.map +1 -0
  136. package/dist/editor/text-edit.js +328 -0
  137. package/dist/editor/text-edit.js.map +1 -0
  138. package/dist/editor-events.d.ts +5 -5
  139. package/dist/editor-events.d.ts.map +1 -1
  140. package/dist/editor.d.ts +560 -250
  141. package/dist/editor.d.ts.map +1 -1
  142. package/dist/editor.js +1650 -743
  143. package/dist/editor.js.map +1 -1
  144. package/dist/handle.d.ts +0 -2
  145. package/dist/handle.d.ts.map +1 -1
  146. package/dist/handle.js +0 -6
  147. package/dist/handle.js.map +1 -1
  148. package/dist/index.d.ts +7 -2
  149. package/dist/index.d.ts.map +1 -1
  150. package/dist/index.js +7 -1
  151. package/dist/index.js.map +1 -1
  152. package/dist/modes.d.ts +34 -1
  153. package/dist/modes.d.ts.map +1 -1
  154. package/dist/modes.js.map +1 -1
  155. package/dist/overlay.d.ts +98 -21
  156. package/dist/overlay.d.ts.map +1 -1
  157. package/dist/overlay.js +442 -116
  158. package/dist/overlay.js.map +1 -1
  159. package/dist/search.d.ts +37 -0
  160. package/dist/search.d.ts.map +1 -0
  161. package/dist/search.js +45 -0
  162. package/dist/search.js.map +1 -0
  163. package/package.json +5 -4
@@ -66,6 +66,8 @@ export class ActionRegistry {
66
66
  const action = this.entries.get(id);
67
67
  if (!action)
68
68
  return false;
69
+ if (isReadOnlyBlocked(action, ctx))
70
+ return false;
69
71
  if (action.predicate && !action.predicate(ctx))
70
72
  return false;
71
73
  action.perform(ctx);
@@ -91,6 +93,8 @@ export class ActionRegistry {
91
93
  const action = this.entries.get(id);
92
94
  if (!action)
93
95
  continue;
96
+ if (isReadOnlyBlocked(action, fullCtx))
97
+ continue;
94
98
  // 2. Custom keyTest escape hatch (before declarative matchers).
95
99
  if (action.keyTest?.(event, fullCtx)) {
96
100
  if (action.predicate && !action.predicate(fullCtx))
@@ -136,6 +140,8 @@ export class ActionRegistry {
136
140
  const action = this.entries.get(id);
137
141
  if (!action?.sequence || action.sequence.length === 0)
138
142
  continue;
143
+ if (isReadOnlyBlocked(action, ctx))
144
+ continue;
139
145
  const seq = action.sequence;
140
146
  const tail = this.seqBuffer.slice(-seq.length);
141
147
  if (tail.length !== seq.length)
@@ -151,6 +157,13 @@ export class ActionRegistry {
151
157
  return false;
152
158
  }
153
159
  }
160
+ /**
161
+ * Read-only gate: in view mode only actions flagged `viewMode: true`
162
+ * (zoom / pan / select / grid / the read-only toggle itself, plus
163
+ * non-mutating file ops like Save / Export) may run. Everything that
164
+ * creates, edits or deletes is short-circuited before its `perform`.
165
+ */
166
+ const isReadOnlyBlocked = (action, ctx) => ctx.editor.readOnly && action.viewMode !== true;
154
167
  const matchesHotkey = (event, m) => {
155
168
  if (m.key !== undefined && !matchKeyOrCode(event, m.key))
156
169
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/actions/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/actions/registry.ts"],"names":[],"mappings":"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"}
@@ -39,7 +39,7 @@ export interface HotkeyMatcher {
39
39
  /**
40
40
  * Category groups Actions in the help dialog / menus.
41
41
  */
42
- export type ActionCategory = "history" | "selection" | "clipboard" | "z-order" | "grouping" | "zoom" | "mode" | "layout" | "arrange" | "edit" | "other";
42
+ export type ActionCategory = "history" | "selection" | "clipboard" | "z-order" | "grouping" | "zoom" | "tool" | "layout" | "arrange" | "edit" | "other";
43
43
  export interface Action {
44
44
  /** Stable identifier — used by context menu / hotkey routing. */
45
45
  readonly id: string;
@@ -64,6 +64,15 @@ export interface Action {
64
64
  * before the declarative `hotkey` matchers.
65
65
  */
66
66
  readonly keyTest?: (event: KeyboardEvent, ctx: ActionContext) => boolean;
67
+ /**
68
+ * Display-ONLY hotkey shown in the help dialog for actions whose real
69
+ * binding is a `keyTest` the declarative matcher can't express (e.g. plain
70
+ * arrows, or a modifier combo that must exclude Ctrl on macOS). NEVER
71
+ * dispatched — `dispatchHotkey` ignores it — so it can't double-fire or match
72
+ * combos the `keyTest` deliberately excludes. Use it purely to surface the
73
+ * chip; `keyTest` remains the source of truth for behaviour.
74
+ */
75
+ readonly displayHotkey?: HotkeyMatcher | readonly HotkeyMatcher[];
67
76
  /**
68
77
  * `true` when the action makes sense in the current state — used
69
78
  * by menus to gate visibility AND by `dispatch` to short-circuit
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/actions/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC5C;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,WAAW,GACX,WAAW,GACX,SAAS,GACT,UAAU,GACV,MAAM,GACN,MAAM,GACN,QAAQ,GACR,SAAS,GACT,MAAM,GACN,OAAO,CAAC;AAEZ,MAAM,WAAW,MAAM;IACrB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IACnC,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,SAAS,aAAa,EAAE,CAAC;IAC3D;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;IACzE;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;IACrD;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;IACnD;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IACpD;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;CAChD;AAED,2DAA2D;AAC3D,eAAO,MAAM,YAAY,GAAI,KAAK,aAAa,KAAG,OAAwC,CAAC;AAE3F;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,KAAK,aAAa,KAAG,OACY,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/actions/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC5C;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,WAAW,GACX,WAAW,GACX,SAAS,GACT,UAAU,GACV,MAAM,GACN,MAAM,GACN,QAAQ,GACR,SAAS,GACT,MAAM,GACN,OAAO,CAAC;AAEZ,MAAM,WAAW,MAAM;IACrB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IACnC,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,SAAS,aAAa,EAAE,CAAC;IAC3D;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;IACzE;;;;;;;OAOG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,aAAa,EAAE,CAAC;IAClE;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;IACrD;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;IACnD;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IACpD;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;CAChD;AAED,2DAA2D;AAC3D,eAAO,MAAM,YAAY,GAAI,KAAK,aAAa,KAAG,OAAwC,CAAC;AAE3F;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,KAAK,aAAa,KAAG,OACY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/actions/types.ts"],"names":[],"mappings":"AA6GA,2DAA2D;AAC3D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAkB,EAAW,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;AAE3F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAkB,EAAW,EAAE,CAChE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/actions/types.ts"],"names":[],"mappings":"AAsHA,2DAA2D;AAC3D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAkB,EAAW,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;AAE3F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAkB,EAAW,EAAE,CAChE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC"}
@@ -10,6 +10,14 @@ import { type FileDropHandler } from "./file-drop.js";
10
10
  * and supply their own.
11
11
  */
12
12
  export declare const imageFileDropHandler: FileDropHandler;
13
+ /**
14
+ * Build the hidden, muted, looping `<video>` element both the drop handler
15
+ * and scene rehydration attach for an mp4/webm shape. The element is parked
16
+ * in the animated-image sink (1px, off to the side) so it keeps decoding
17
+ * frames; the canvas reads the current frame every animation tick. The
18
+ * caller decides when to await `loadedmetadata` / call `play()`.
19
+ */
20
+ export declare const createHiddenLoopingVideo: (src: string) => HTMLVideoElement;
13
21
  /**
14
22
  * Built-in video file-drop handler. Drops a `<video>` element into
15
23
  * the hidden sink (autoplay + muted + loop so it advances frames
@@ -1 +1 @@
1
- {"version":3,"file":"built-in-handlers.d.ts","sourceRoot":"","sources":["../src/built-in-handlers.ts"],"names":[],"mappings":"AAEA,OAAO,EAA+C,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAsBnG;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,EAAE,eA8GlC,CAAC;AAiCF;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAkDlC,CAAC"}
1
+ {"version":3,"file":"built-in-handlers.d.ts","sourceRoot":"","sources":["../src/built-in-handlers.ts"],"names":[],"mappings":"AAMA,OAAO,EAA+C,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAsBnG;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,EAAE,eA8GlC,CAAC;AAiCF;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,GAAI,KAAK,MAAM,KAAG,gBActD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,EAAE,eA2ClC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { DEFAULT_IMAGE_MAX_EDGE_PX } from "./constants.js";
1
+ import { DEFAULT_IMAGE_MAX_EDGE_PX, VIDEO_FALLBACK_WIDTH_PX, VIDEO_FALLBACK_HEIGHT_PX, } from "./constants.js";
2
2
  import { isImageFile, isVideoFile, readFileAsDataURL } from "./file-drop.js";
3
3
  /**
4
4
  * Read an image data URL and return its natural pixel dimensions
@@ -168,6 +168,28 @@ const ensureAnimatedImageSink = () => {
168
168
  document.body.appendChild(div);
169
169
  return div;
170
170
  };
171
+ /**
172
+ * Build the hidden, muted, looping `<video>` element both the drop handler
173
+ * and scene rehydration attach for an mp4/webm shape. The element is parked
174
+ * in the animated-image sink (1px, off to the side) so it keeps decoding
175
+ * frames; the canvas reads the current frame every animation tick. The
176
+ * caller decides when to await `loadedmetadata` / call `play()`.
177
+ */
178
+ export const createHiddenLoopingVideo = (src) => {
179
+ const video = document.createElement("video");
180
+ video.src = src;
181
+ video.muted = true;
182
+ video.loop = true;
183
+ video.playsInline = true;
184
+ video.autoplay = true;
185
+ video.style.position = "absolute";
186
+ video.style.left = "-99999px";
187
+ video.style.top = "-99999px";
188
+ video.style.width = "1px";
189
+ video.style.height = "1px";
190
+ ensureAnimatedImageSink().appendChild(video);
191
+ return video;
192
+ };
171
193
  /**
172
194
  * Built-in video file-drop handler. Drops a `<video>` element into
173
195
  * the hidden sink (autoplay + muted + loop so it advances frames
@@ -184,20 +206,12 @@ export const videoFileDropHandler = {
184
206
  handle: async (file, { editor, worldPoint }) => {
185
207
  if (typeof document === "undefined")
186
208
  return;
209
+ // Persist the bytes in Scene.files FIRST — the live <video> handle and
210
+ // its blob: URL die with the page, so without a `fileId` a reloaded
211
+ // scene has nothing to rehydrate the video from.
212
+ const fileId = await editor.addBinaryFile(file, file.name);
187
213
  const url = URL.createObjectURL(file);
188
- const video = document.createElement("video");
189
- video.src = url;
190
- video.muted = true;
191
- video.loop = true;
192
- video.playsInline = true;
193
- video.autoplay = true;
194
- const sink = ensureAnimatedImageSink();
195
- video.style.position = "absolute";
196
- video.style.left = "-99999px";
197
- video.style.top = "-99999px";
198
- video.style.width = "1px";
199
- video.style.height = "1px";
200
- sink.appendChild(video);
214
+ const video = createHiddenLoopingVideo(url);
201
215
  await new Promise((resolve) => {
202
216
  const done = () => {
203
217
  resolve();
@@ -205,8 +219,8 @@ export const videoFileDropHandler = {
205
219
  video.onloadedmetadata = done;
206
220
  video.onerror = done;
207
221
  });
208
- const nW = video.videoWidth || 480;
209
- const nH = video.videoHeight || 270;
222
+ const nW = video.videoWidth || VIDEO_FALLBACK_WIDTH_PX;
223
+ const nH = video.videoHeight || VIDEO_FALLBACK_HEIGHT_PX;
210
224
  const max = DEFAULT_IMAGE_MAX_EDGE_PX;
211
225
  const scale = Math.max(nW, nH) > max ? max / Math.max(nW, nH) : 1;
212
226
  const width = Math.round(nW * scale);
@@ -227,6 +241,7 @@ export const videoFileDropHandler = {
227
241
  position: topLeft,
228
242
  image: video,
229
243
  animated: true,
244
+ fileId,
230
245
  });
231
246
  },
232
247
  };
@@ -1 +1 @@
1
- {"version":3,"file":"built-in-handlers.js","sourceRoot":"","sources":["../src/built-in-handlers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAwB,MAAM,gBAAgB,CAAC;AAEnG;;;GAGG;AACH,MAAM,YAAY,GAAG,CAAC,OAAe,EAA8C,EAAE,CACnF,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;IACxB,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;QAChB,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC;IACF,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE;QACjB,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC;IACF,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC;AACpB,CAAC,CAAC,CAAC;AAEL;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAoB;IACnD,EAAE,EAAE,OAAO;IACX,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;IACnC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE;QAC7C,oEAAoE;QACpE,iEAAiE;QACjE,qEAAqE;QACrE,qCAAqC;QACrC,EAAE;QACF,qEAAqE;QACrE,qEAAqE;QACrE,oEAAoE;QACpE,wDAAwD;QACxD,MAAM,YAAY,GAAG,OAAO,GAAG,KAAK,WAAW,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,UAAU,CAAC;QAC7F,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAErF,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,yBAAyB,CAAC;QACtC,MAAM,KAAK,GACT,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG;YAC3C,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;YAC/C,CAAC,CAAC,CAAC,CAAC;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;QAClD,6CAA6C;QAC7C,MAAM,OAAO,GAAS;YACpB,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;YAC3B,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC;SAC7B,CAAC;QACF,iEAAiE;QACjE,mEAAmE;QACnE,sEAAsE;QACtE,SAAS;QACT,EAAE;QACF,sEAAsE;QACtE,oEAAoE;QACpE,uEAAuE;QACvE,yCAAyC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,GAAG,GAA4B,IAAI,CAAC;QACxC,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE,CAAC;YACjC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;YAClB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;YACd,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACpC,MAAM,IAAI,GAAG,uBAAuB,EAAE,CAAC;gBACvC,kEAAkE;gBAClE,gEAAgE;gBAChE,8DAA8D;gBAC9D,4DAA4D;gBAC5D,4DAA4D;gBAC5D,+DAA+D;gBAC/D,6DAA6D;gBAC7D,6BAA6B;gBAC7B,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;gBAC7B,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;gBACrB,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;gBACpB,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;gBACxB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;gBACzB,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;gBAC3B,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;gBACxB,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;gBACjC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;YACD,qEAAqE;YACrE,qEAAqE;YACrE,4BAA4B;YAC5B,MAAM,EAAE,GAAG,GAAG,CAAC;YACf,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;gBACjB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAClC,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE;wBACf,OAAO,EAAE,CAAC;oBACZ,CAAC,CAAC;oBACF,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE;wBAChB,OAAO,EAAE,CAAC;oBACZ,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,oEAAoE;QACpE,sEAAsE;QACtE,kEAAkE;QAClE,sEAAsE;QACtE,uEAAuE;QACvE,yDAAyD;QACzD,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,0EAA0E;QAC1E,wEAAwE;QACxE,uEAAuE;QACvE,mCAAmC;QACnC,IAAI,WAAW,GAA+C,GAAG,IAAI,SAAS,CAAC;QAC/E,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,iBAAiB,KAAK,UAAU,EAAE,CAAC;YAC7D,IAAI,CAAC;gBACH,WAAW,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACP,qDAAqD;YACvD,CAAC;QACH,CAAC;QACD,MAAM,CAAC,WAAW,CAAC;YACjB,GAAG;YACH,MAAM;YACN,KAAK;YACL,MAAM;YACN,QAAQ,EAAE,OAAO;YACjB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,QAAQ,EAAE,KAAK;YACf,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,OAAO,GAAG,qCAAqC,CAAC;AAEtD,MAAM,uBAAuB,GAAG,GAAgB,EAAE;IAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IACjB,GAAG,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACxC,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC7B,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;IACrB,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;IACpB,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;IACtB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IACvB,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC/B,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;IACjC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAoB;IACnD,EAAE,EAAE,OAAO;IACX,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;IACnC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE;QAC7C,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO;QAC5C,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;QAChB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACnB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QACzB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtB,MAAM,IAAI,GAAG,uBAAuB,EAAE,CAAC;QACvC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QAClC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;QAC9B,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC;QAC7B,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QAC1B,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,IAAI,GAAG,GAAS,EAAE;gBACtB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC9B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC;QACnC,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC;QACpC,MAAM,GAAG,GAAG,yBAAyB,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;QACtC,MAAM,OAAO,GAAS;YACpB,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;YAC3B,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC;SAC7B,CAAC;QACF,yDAAyD;QACzD,6CAA6C;QAC7C,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;YAC3B,+EAA+E;QACjF,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC;YACjB,GAAG,EAAE,GAAG;YACR,KAAK;YACL,MAAM;YACN,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,KAAoC;YAC3C,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"built-in-handlers.js","sourceRoot":"","sources":["../src/built-in-handlers.ts"],"names":[],"mappings":"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"}
@@ -16,20 +16,6 @@ export interface PasteResult {
16
16
  readonly scene: Scene;
17
17
  readonly newIds: readonly ElementId[];
18
18
  }
19
- /**
20
- * Clone a shape for the clipboard buffer / paste output. Deep-clones the
21
- * plain data (so later edits don't bleed into the buffer) but carries
22
- * live runtime handles by reference instead of cloning them:
23
- *
24
- * - `metadata.image` — a decoded `HTMLImageElement`; `structuredClone`
25
- * throws `DataCloneError` on DOM nodes.
26
- * - `animationData` — the raw GIF/video buffer; large and re-derivable
27
- * from `fileId`, so sharing the reference avoids copying megabytes.
28
- *
29
- * The live `<img>` / buffer is shared, so the pasted shape draws
30
- * immediately (same as the original) and still references its `fileId`.
31
- */
32
- export declare const cloneElementForClipboard: (shape: Element) => Element;
33
19
  /**
34
20
  * Snapshot every selected shape into a fresh array. Uses
35
21
  * {@link cloneElementForClipboard} so live runtime handles (decoded
@@ -1 +1 @@
1
- {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../src/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAML,KAAK,KAAK,EACV,KAAK,OAAO,EACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;CACvC;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,wBAAwB,GAAI,OAAO,OAAO,KAAG,OAsBzD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,EAAE,WAAW,QAAQ,CAAC,SAAS,CAAC,KAAG,OAAO,EAOlF,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,GACxB,OAAO,KAAK,EACZ,SAAS,eAAe,EACxB,WAAW,SAAS,OAAO,EAAE,EAC7B,QAAQ,IAAI,GAAG,IAAI,EACnB,OAAO,MAAM,SAAS,KACrB,WA0CF,CAAC"}
1
+ {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../src/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAML,KAAK,KAAK,EACV,KAAK,OAAO,EACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;CACvC;AAuCD;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,EAAE,WAAW,QAAQ,CAAC,SAAS,CAAC,KAAG,OAAO,EAOlF,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,GACxB,OAAO,KAAK,EACZ,SAAS,eAAe,EACxB,WAAW,SAAS,OAAO,EAAE,EAC7B,QAAQ,IAAI,GAAG,IAAI,EACnB,OAAO,MAAM,SAAS,KACrB,WA0CF,CAAC"}
package/dist/clipboard.js CHANGED
@@ -12,7 +12,7 @@ import { addElement, batch, getElement, orderForTop, } from "@oh-just-another/sc
12
12
  * The live `<img>` / buffer is shared, so the pasted shape draws
13
13
  * immediately (same as the original) and still references its `fileId`.
14
14
  */
15
- export const cloneElementForClipboard = (shape) => {
15
+ const cloneElementForClipboard = (shape) => {
16
16
  const meta = shape.metadata;
17
17
  const liveImage = meta && "image" in meta ? meta.image : undefined;
18
18
  const liveAnim = shape.animationData;
@@ -1 +1 @@
1
- {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../src/clipboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../src/clipboard.ts"],"names":[],"mappings":"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"}
@@ -112,24 +112,6 @@ export declare const LINK_HIT_THRESHOLD = 9;
112
112
  * thickness. Range: 3–8.
113
113
  */
114
114
  export declare const SELECTION_HALO_PEEK_PX = 4;
115
- /**
116
- * Connection anchors.
117
- *
118
- * Two visual roles, shown at different times:
119
- *
120
- * - **link-start** anchors — shown when an element is SELECTED. The user
121
- * drags from one to begin a link. Filled brand centre + neutral ring.
122
- * - **link-attach** anchors — shown when the cursor HOVERS / nears an
123
- * element (including while dragging a link). Where a link can land.
124
- * The inverse fill/ring of link-start, so the two roles read
125
- * differently at a glance.
126
- *
127
- * Radii are screen px (zoom-independent). Colours reuse the selection
128
- * brand blue / handle white so anchors share the resize-handle visual
129
- * language (they equal `DEFAULT_OVERLAY_STYLE.selectionStroke` / `.handleFill`).
130
- */
131
- export declare const ANCHOR_BRAND_COLOR = "#1a73e8";
132
- export declare const ANCHOR_NEUTRAL_COLOR = "#fff";
133
115
  /** Resting anchor-dot radius (screen px). */
134
116
  export declare const ANCHOR_DOT_RADIUS = 3.5;
135
117
  /** Highlighted radius for the hovered / snap-target anchor (screen px). */
@@ -345,6 +327,13 @@ export declare const DOUBLE_CLICK_TOLERANCE_PX = 8;
345
327
  * context.
346
328
  */
347
329
  export declare const ISOLATION_DIM_OPACITY = 0.6;
330
+ /**
331
+ * Opacity of an element MARKED for erasing while the eraser is swept over it
332
+ * (before the delete commits on pointer-up). Much lower than
333
+ * {@link ISOLATION_DIM_OPACITY} so "about to be deleted" reads clearly at a
334
+ * glance — matches the Excalidraw eraser's ~20% preview. Range: 0.15–0.4.
335
+ */
336
+ export declare const ERASE_DIM_OPACITY = 0.2;
348
337
  /**
349
338
  * Opacity of the WYSIWYG shape-draw preview (the live rect / ellipse drawn
350
339
  * through its real renderer while dragging out a new shape). Slightly below
@@ -455,6 +444,193 @@ export declare const MAX_BRUSH_WIDTH = 6;
455
444
  * Chromium) so a click-drag still produces a visible stroke.
456
445
  */
457
446
  export declare const DEFAULT_BRUSH_WIDTH = 2;
447
+ /**
448
+ * Default brush line colour — the paint a fresh stroke is committed with when
449
+ * the host hasn't changed the drawing panel. A dark neutral that reads on a
450
+ * light canvas (matches the pre-settings hard-coded value).
451
+ */
452
+ export declare const DEFAULT_BRUSH_COLOR = "#222222";
453
+ /**
454
+ * Default brush opacity (0–1) for a fresh stroke. 1 = fully opaque.
455
+ */
456
+ export declare const DEFAULT_BRUSH_OPACITY = 1;
457
+ /**
458
+ * Samples per Catmull-Rom span when smoothing a committed brush stroke. Brush
459
+ * points are captured sparsely (one per pointer-move), so the raw polyline is
460
+ * angular; on commit each span is resampled into this many sub-points along a
461
+ * Catmull-Rom curve through the captured points (interpolating per-point width
462
+ * too), baking a smooth stroke into the scene. Higher = smoother but more stored
463
+ * vertices per stroke. Range: 2–8.
464
+ */
465
+ export declare const BRUSH_SMOOTH_SEGMENTS = 4;
466
+ /**
467
+ * Input-time low-pass (streamline) strength for brush capture, 0-0.9. Each
468
+ * pointer-move stores a point pulled only `1 - BRUSH_STREAMLINE` of the way
469
+ * from the previous stored point toward the raw sample, filtering hand jitter
470
+ * and sensor noise into a steady line. 0 = raw input (off); higher = steadier
471
+ * but laggier (the commit-time catch-up point hides the lag at the stroke
472
+ * end). Range: 0.3-0.7.
473
+ */
474
+ export declare const BRUSH_STREAMLINE = 0.5;
475
+ /**
476
+ * Per-sample lerp rate (0-1) toward the target pressure while capturing a
477
+ * brush stroke — rate-limits pressure changes so a single outlier sample (pen
478
+ * lift-off spike, sudden speed jump on mouse) can't kink the width profile.
479
+ * 1 = follow instantly (off); lower = smoother but slower to adapt. 0.3 keeps
480
+ * the width felt-tip steady. Range: 0.2-0.7.
481
+ */
482
+ export declare const BRUSH_PRESSURE_SMOOTHING = 0.3;
483
+ /**
484
+ * Screen-pixel distance per pointer sample at which SIMULATED pressure (mouse /
485
+ * touch — no real pressure channel) bottoms out. Standing still targets full
486
+ * pressure (thick); moving this fast per sample targets the minimum (thin) —
487
+ * the "slower = thicker" response. Measured in screen px so the feel is
488
+ * zoom-independent. 32 keeps the speed response gentle (marker-like); halve it
489
+ * for a livelier calligraphic feel. Range: 8-48.
490
+ */
491
+ export declare const BRUSH_SIM_THIN_DIST_PX = 32;
492
+ /**
493
+ * Floor for simulated brush pressure (0-1) — the width multiplier a fast
494
+ * mouse / touch stroke converges to (`× base width`). Together with
495
+ * BRUSH_SIM_PRESSURE_MAX it sets the width band of a simulated stroke: a
496
+ * narrow band (0.55-0.7, the default) reads as a felt-tip marker; widen it
497
+ * (e.g. 0.25-0.8) for a pen-like thin-thick response. Range: 0.15-0.7.
498
+ */
499
+ export declare const BRUSH_SIM_PRESSURE_MIN = 0.55;
500
+ /**
501
+ * Ceiling for simulated brush pressure (0-1) — the width multiplier a slow /
502
+ * stationary mouse or touch stroke converges to (`× base width`). Without a
503
+ * ceiling a slow stroke fattens all the way to the full base width, which
504
+ * reads too thick next to the medium-speed line. See BRUSH_SIM_PRESSURE_MIN
505
+ * for the band the two clamps form. Real pen pressure is not clamped.
506
+ * Range: 0.6-1.
507
+ */
508
+ export declare const BRUSH_SIM_PRESSURE_MAX = 0.7;
509
+ /**
510
+ * Initial simulated pressure (0-1) for the first sample of a mouse / touch
511
+ * stroke. A felt-tip touches the paper at full width, so it starts at the
512
+ * BRUSH_SIM_PRESSURE_MAX ceiling and thins as the stroke speeds up. Keep
513
+ * within the [MIN, MAX] clamp band. Range: 0.4-0.7.
514
+ */
515
+ export declare const BRUSH_SIM_PRESSURE_START = 0.7;
516
+ /**
517
+ * Minimum SCREEN-pixel displacement of the raw input before a new brush point
518
+ * is stored — decimation of near-duplicate pointer samples (120 Hz devices
519
+ * emit far more moves than a stroke needs). Skipped samples still update the
520
+ * commit catch-up point. Smaller = denser capture; larger = coarser but
521
+ * cheaper strokes. Range: 1-4.
522
+ */
523
+ export declare const BRUSH_MIN_POINT_DIST_PX = 1.5;
524
+ /**
525
+ * Soft cap on captured brush points per stroke. When capture exceeds it, the
526
+ * stroke's interior points are halved (endpoints kept), bounding memory and
527
+ * render cost on very long strokes — each halving doubles the remaining
528
+ * capacity instead of stopping the stroke. Range: 1024-8192.
529
+ */
530
+ export declare const MAX_BRUSH_POINTS = 2048;
531
+ /**
532
+ * Length of the end taper of a brush stroke, as a multiple of the base
533
+ * half-width — arc length from each tip over which the width eases down.
534
+ * Capped at half the stroke length so short strokes stay symmetric. 0 (the
535
+ * default) disables tapering: blunt round caps, the felt-tip marker look.
536
+ * Set 2-5 for pen-like ends that trail off to a point. Range: 0-5.
537
+ */
538
+ export declare const BRUSH_TAPER_LENGTH_FACTOR = 0;
539
+ /**
540
+ * Width factor at the very tip of a tapered brush stroke (0-1 of the captured
541
+ * width) — the tip converges to this instead of a full-width round cap,
542
+ * mimicking a pen lifting off. Range: 0.05-0.3.
543
+ */
544
+ export declare const BRUSH_TAPER_MIN = 0.1;
545
+ /**
546
+ * World-pixel distance under which a brush stroke's last point is treated as
547
+ * meeting its first — the trigger for auto-closing (and filling) a stroke on
548
+ * commit. Only applies when a fill colour is set and the stroke has ≥3 points.
549
+ * Scaled to the max stroke width so a thick stroke closes as forgivingly as it
550
+ * looks. Range: 6–30; larger closes more eagerly. Default: `MAX_BRUSH_WIDTH * 3`.
551
+ */
552
+ export declare const BRUSH_CLOSE_DISTANCE: number;
553
+ /**
554
+ * Eraser sampling step in WORLD units. While the eraser is dragged the host
555
+ * hit-tests points spaced this far apart along the pointer path so a fast
556
+ * swipe doesn't skip over small shapes between two move events. Smaller →
557
+ * more hit-tests per move (safer, costlier); larger → cheaper but can jump a
558
+ * thin shape. 6 px matches the default brush width so nothing narrower than a
559
+ * stroke slips through. Range: 3–12.
560
+ */
561
+ export declare const ERASER_SAMPLE_STEP = 6;
562
+ /**
563
+ * Stroke colour of the eraser cursor ring (and its fading drag trail). A neutral
564
+ * mid-grey so it reads on both light and dark canvases without looking like a
565
+ * tool accent. Range: any mid-luminance grey (#666–#aaa).
566
+ */
567
+ export declare const ERASER_CURSOR_STROKE = "#888888";
568
+ /**
569
+ * Screen-pixel line width of the eraser cursor ring. Constant on screen (the
570
+ * ring is drawn in screen space) so it stays crisp at any zoom. Range: 1–3.
571
+ */
572
+ export declare const ERASER_CURSOR_LINE_WIDTH = 1.5;
573
+ /**
574
+ * Lifetime (ms) of an eraser drag-trail point before it fully fades — the knob
575
+ * for how LONG the eraser wake is. Much shorter than {@link LASER_TRAIL_TTL_MS}
576
+ * (the laser comet) so the eraser leaves only a tight, brief wake behind the
577
+ * cursor, matching Excalidraw. Lower = shorter/snappier. Range: 100–400.
578
+ */
579
+ export declare const ERASER_TRAIL_TTL_MS = 120;
580
+ /**
581
+ * Stroke-eraser (Shift) samples a brush polyline this densely — as a FRACTION of
582
+ * the eraser radius — when computing which arc-length spans fall under the disc.
583
+ * The eraser cuts the line's GEOMETRY (segments), not just its vertices, so a big
584
+ * disc merely grazing a sparsely-sampled stroke still removes the covered span.
585
+ * Smaller = finer edges / more samples per move; larger = coarser / cheaper. The
586
+ * covered-span endpoints are refined by bisection ({@link ERASE_BOUNDARY_BISECT_ITERS})
587
+ * regardless, so this mainly bounds the miss-a-tiny-dip risk. Range: 0.15–0.5.
588
+ */
589
+ export declare const ERASE_COVERAGE_SAMPLE_FRACTION = 0.25;
590
+ /**
591
+ * Floor (world units) for the stroke-eraser sample step, so a tiny eraser radius
592
+ * doesn't explode the sample count on a long stroke. Range: 0.25–2.
593
+ */
594
+ export declare const ERASE_COVERAGE_MIN_SAMPLE_STEP = 0.5;
595
+ /**
596
+ * Bisection iterations used to pin each covered-span endpoint to the eraser ring
597
+ * (where the brush polyline crosses distance = radius). Each iteration halves the
598
+ * error, so 10 ≈ step/1024 — visually exact. Range: 6–14.
599
+ */
600
+ export declare const ERASE_BOUNDARY_BISECT_ITERS = 10;
601
+ /**
602
+ * A surviving stroke-eraser fragment shorter than this arc length (world units)
603
+ * is dropped as litter — an isolated nub reads as a stray dot, not a line. Range:
604
+ * 0.5–3.
605
+ */
606
+ export declare const ERASE_FRAGMENT_MIN_ARC = 1;
607
+ /**
608
+ * Lifetime (ms) of a laser-pointer trail point before it fully fades. Each
609
+ * point stores its birth time; the overlay ramps its opacity from 1 → 0 over
610
+ * this window and the editor prunes points older than it, so a stroke trails
611
+ * the cursor like a comet and vanishes ~this long after the pointer stops.
612
+ * "A couple of seconds" — range 800–3000.
613
+ */
614
+ export declare const LASER_TRAIL_TTL_MS = 1400;
615
+ /**
616
+ * Stroke colour of the laser-pointer trail. A saturated red reads as a
617
+ * presentation laser and stands out over any diagram fill.
618
+ */
619
+ export declare const LASER_COLOR = "#ff2d2d";
620
+ /**
621
+ * Screen-pixel stroke width of the laser trail. Constant on screen (drawn in
622
+ * screen space, not world) so the beam stays the same thickness at every zoom.
623
+ * Range: 2–6.
624
+ */
625
+ export declare const LASER_WIDTH = 4;
626
+ /**
627
+ * Samples per Catmull-Rom span when smoothing a laser trail for rendering.
628
+ * Laser points are collected sparsely (one per pointer-move), so the raw
629
+ * polyline looks angular; the overlay resamples each span into this many
630
+ * sub-points along a Catmull-Rom curve through the captured points, keeping the
631
+ * beam smooth. Higher = smoother but more segments per frame. Range: 4–16.
632
+ */
633
+ export declare const LASER_SMOOTH_SEGMENTS = 8;
458
634
  /**
459
635
  * Default upper bound on the longer edge of a freshly-inserted
460
636
  * image (CSS pixels). Larger images get downscaled proportionally
@@ -464,6 +640,13 @@ export declare const DEFAULT_BRUSH_WIDTH = 2;
464
640
  * register their own.
465
641
  */
466
642
  export declare const DEFAULT_IMAGE_MAX_EDGE_PX = 480;
643
+ /**
644
+ * Placeholder size (world px, 16:9) for a dropped video whose metadata never
645
+ * loads (`videoWidth`/`videoHeight` = 0 — unsupported codec, aborted load).
646
+ * Only affects the created element's initial box. Range: 160×90 – 960×540.
647
+ */
648
+ export declare const VIDEO_FALLBACK_WIDTH_PX = 480;
649
+ export declare const VIDEO_FALLBACK_HEIGHT_PX = 270;
467
650
  /**
468
651
  * Adaptive animation-tick throttling (GIF / video playback). The tick
469
652
  * drives a full re-render every frame while an animated shape is
@@ -543,6 +726,27 @@ export declare const TEXT_RESIZE_MIN_FONT_SIZE = 4;
543
726
  * 1.1 ≈ a gentle 10 % step. Range: 1.05–1.5.
544
727
  */
545
728
  export declare const TEXT_FONT_SIZE_STEP = 1.1;
729
+ /**
730
+ * Gap (world px) between a source node and the connected node spawned by the
731
+ * flowchart create shortcut (`Cmd/Ctrl+Arrow`). Measured from the source's
732
+ * edge to the new node's edge along the spawn direction. Range: 40–160 —
733
+ * enough that the connecting link is clearly visible.
734
+ */
735
+ export declare const SPAWN_CONNECTED_GAP_PX = 80;
736
+ /**
737
+ * Upper cap on how many sibling nodes a single flowchart create session
738
+ * (`Cmd/Ctrl+Arrow` held, tapped an arrow repeatedly) can pending-grow before
739
+ * commit. Guards against an accidental key-repeat spraying dozens of nodes.
740
+ * Range: 4–16.
741
+ */
742
+ export declare const FLOWCHART_MAX_SIBLINGS = 8;
743
+ /**
744
+ * Opacity of the pending flowchart-create preview (the not-yet-committed
745
+ * nodes + links drawn on the overlay while `Cmd/Ctrl` is held). Below 1 so the
746
+ * preview reads as provisional, high enough to judge placement. Range:
747
+ * 0.35–0.65.
748
+ */
749
+ export declare const FLOWCHART_PREVIEW_OPACITY = 0.5;
546
750
  /**
547
751
  * Upper clamp (world px) for font size — matches the property panel's slider
548
752
  * ceiling so the keyboard and the panel agree on the maximum.
@@ -566,4 +770,35 @@ export declare const GIF_BADGE_BG_COLOR = "rgba(0,0,0,0.65)";
566
770
  export declare const LOCK_BADGE_SIZE = 16;
567
771
  export declare const LOCK_BADGE_COLOR = "#1a73e8";
568
772
  export declare const LOCK_BADGE_KEYHOLE_COLOR = "#fff";
773
+ /**
774
+ * Image-crop UX (Excalidraw-style handle cropping).
775
+ *
776
+ * - `CROP_MIN_SIZE` — smallest allowed crop window edge, in element-LOCAL
777
+ * units (unscaled). Dragging an edge handle inward stops here so the window
778
+ * can never collapse to zero. Range: 4–24.
779
+ * - `CROP_HANDLE_HIT_RADIUS` — screen-pixel grab radius around each of the 8
780
+ * crop handles. Divided by zoom before hit-testing so the effective screen
781
+ * target stays constant. Mirrors {@link HANDLE_HIT_SLOP}. Range: 8–14.
782
+ * - `CROP_GHOST_OPACITY` — alpha of the faint full-image "ghost" painted over
783
+ * the virtual full-image rect while cropping, so the user sees the hidden
784
+ * parts of the source. Low so the real (cropped) pixels stay dominant.
785
+ * Range: 0.08–0.2.
786
+ * - `CROP_BRACKET_LEN` — arm length (screen px) of the L-shaped corner brackets
787
+ * that mark the crop frame (Excalidraw-style), drawn instead of round nubs.
788
+ * Range: 10–20.
789
+ * - `CROP_BRACKET_WIDTH` — stroke width (screen px) of those brackets. Thicker
790
+ * than the frame outline so the corners read as grabbable. Range: 2–4.
791
+ */
792
+ export declare const CROP_MIN_SIZE = 10;
793
+ export declare const CROP_HANDLE_HIT_RADIUS = 11;
794
+ export declare const CROP_GHOST_OPACITY = 0.12;
795
+ export declare const CROP_BRACKET_LEN = 14;
796
+ export declare const CROP_BRACKET_WIDTH = 3;
797
+ /**
798
+ * Snap radius (screen px) of the caption drag: while the pill's arc-length
799
+ * position is within this distance of the path middle, the explicit
800
+ * `label.position` is dropped and the label returns to its default placement
801
+ * (midpoint / elbow longest-segment). Range: 4–16.
802
+ */
803
+ export declare const LINK_LABEL_DRAG_SNAP_PX = 8;
569
804
  //# sourceMappingURL=constants.d.ts.map