kritzel-stencil 0.0.169 → 0.0.171

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 (117) hide show
  1. package/dist/cjs/{default-line-tool.config-Bs88k0jE.js → default-line-tool.config-JuTDR6PF.js} +514 -13
  2. package/dist/cjs/default-line-tool.config-JuTDR6PF.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +2 -1
  4. package/dist/cjs/index.cjs.js.map +1 -1
  5. package/dist/cjs/kritzel-color_22.cjs.entry.js +170 -41
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/stencil.cjs.js +1 -1
  8. package/dist/collection/classes/core/core.class.js +89 -1
  9. package/dist/collection/classes/core/core.class.js.map +1 -1
  10. package/dist/collection/classes/core/reviver.class.js +4 -0
  11. package/dist/collection/classes/core/reviver.class.js.map +1 -1
  12. package/dist/collection/classes/handlers/key.handler.js +3 -0
  13. package/dist/collection/classes/handlers/key.handler.js.map +1 -1
  14. package/dist/collection/classes/handlers/move.handler.js +63 -0
  15. package/dist/collection/classes/handlers/move.handler.js.map +1 -1
  16. package/dist/collection/classes/handlers/rotation.handler.js +2 -0
  17. package/dist/collection/classes/handlers/rotation.handler.js.map +1 -1
  18. package/dist/collection/classes/handlers/selection.handler.js +23 -5
  19. package/dist/collection/classes/handlers/selection.handler.js.map +1 -1
  20. package/dist/collection/classes/objects/group.class.js +394 -0
  21. package/dist/collection/classes/objects/group.class.js.map +1 -0
  22. package/dist/collection/classes/objects/line.class.js +2 -1
  23. package/dist/collection/classes/objects/line.class.js.map +1 -1
  24. package/dist/collection/classes/objects/selection-group.class.js +19 -3
  25. package/dist/collection/classes/objects/selection-group.class.js.map +1 -1
  26. package/dist/collection/classes/registries/icon-registry.class.js +2 -0
  27. package/dist/collection/classes/registries/icon-registry.class.js.map +1 -1
  28. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +17 -2
  29. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
  30. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +44 -4
  31. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  32. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +3 -66
  33. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js.map +1 -1
  34. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +38 -1
  35. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js.map +1 -1
  36. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +2 -2
  37. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +2 -2
  38. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +4 -4
  39. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js.map +1 -1
  40. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +1 -1
  41. package/dist/collection/helpers/event.helper.js +10 -2
  42. package/dist/collection/helpers/event.helper.js.map +1 -1
  43. package/dist/collection/index.js +1 -0
  44. package/dist/collection/index.js.map +1 -1
  45. package/dist/components/index.js +3 -3
  46. package/dist/components/kritzel-brush-style.js +1 -1
  47. package/dist/components/kritzel-context-menu.js +1 -1
  48. package/dist/components/kritzel-control-brush-config.js +1 -1
  49. package/dist/components/kritzel-control-text-config.js +1 -1
  50. package/dist/components/kritzel-controls.js +1 -1
  51. package/dist/components/kritzel-editor.js +28 -13
  52. package/dist/components/kritzel-editor.js.map +1 -1
  53. package/dist/components/kritzel-engine.js +1 -1
  54. package/dist/components/kritzel-icon.js +1 -1
  55. package/dist/components/kritzel-menu-item.js +1 -1
  56. package/dist/components/kritzel-menu.js +1 -1
  57. package/dist/components/kritzel-split-button.js +1 -1
  58. package/dist/components/kritzel-tooltip.js +1 -1
  59. package/dist/components/kritzel-utility-panel.js +1 -1
  60. package/dist/components/kritzel-workspace-manager.js +1 -1
  61. package/dist/components/{p-Bwv1dxAB.js → p-BUsg2vtg.js} +12 -4
  62. package/dist/components/{p-Bwv1dxAB.js.map → p-BUsg2vtg.js.map} +1 -1
  63. package/dist/components/{p-xcQV8l_c.js → p-BhLtP5Cg.js} +12 -12
  64. package/dist/components/p-BhLtP5Cg.js.map +1 -0
  65. package/dist/components/{p-5OECjGHq.js → p-C29Efgmc.js} +5 -5
  66. package/dist/components/{p-5OECjGHq.js.map → p-C29Efgmc.js.map} +1 -1
  67. package/dist/components/{p-BoazmhlG.js → p-C6-tSCMR.js} +3 -3
  68. package/dist/components/{p-BoazmhlG.js.map → p-C6-tSCMR.js.map} +1 -1
  69. package/dist/components/{p-Cv4BGNPb.js → p-CIts5Uma.js} +4 -2
  70. package/dist/components/p-CIts5Uma.js.map +1 -0
  71. package/dist/components/{p-D8L0t-Ro.js → p-CO8bwl_3.js} +5 -5
  72. package/dist/components/{p-D8L0t-Ro.js.map → p-CO8bwl_3.js.map} +1 -1
  73. package/dist/components/{p-f_ut_1_F.js → p-D0UgEnEL.js} +611 -20
  74. package/dist/components/p-D0UgEnEL.js.map +1 -0
  75. package/dist/components/{p-BSBMBjhq.js → p-DGnDUmrk.js} +4 -4
  76. package/dist/components/{p-BSBMBjhq.js.map → p-DGnDUmrk.js.map} +1 -1
  77. package/dist/components/{p-C1S1zPH-.js → p-DO4auCYf.js} +4 -29
  78. package/dist/components/p-DO4auCYf.js.map +1 -0
  79. package/dist/components/{p-D1YAsWrL.js → p-nIBAWFcK.js} +41 -4
  80. package/dist/components/p-nIBAWFcK.js.map +1 -0
  81. package/dist/components/{p-BmdYFhLx.js → p-nZdy-Ii5.js} +4 -4
  82. package/dist/components/{p-BmdYFhLx.js.map → p-nZdy-Ii5.js.map} +1 -1
  83. package/dist/components/{p-CiM-IPaD.js → p-y25EBKEA.js} +5 -5
  84. package/dist/components/{p-CiM-IPaD.js.map → p-y25EBKEA.js.map} +1 -1
  85. package/dist/esm/{default-line-tool.config-PvsWHpO2.js → default-line-tool.config-CuBm2vpW.js} +514 -14
  86. package/dist/esm/default-line-tool.config-CuBm2vpW.js.map +1 -0
  87. package/dist/esm/index.js +2 -2
  88. package/dist/esm/kritzel-color_22.entry.js +170 -41
  89. package/dist/esm/loader.js +1 -1
  90. package/dist/esm/stencil.js +1 -1
  91. package/dist/stencil/index.esm.js +1 -1
  92. package/dist/stencil/p-CuBm2vpW.js +2 -0
  93. package/dist/stencil/p-CuBm2vpW.js.map +1 -0
  94. package/dist/stencil/p-d3f7214e.entry.js +10 -0
  95. package/dist/stencil/p-d3f7214e.entry.js.map +1 -0
  96. package/dist/stencil/stencil.esm.js +1 -1
  97. package/dist/types/classes/core/core.class.d.ts +11 -1
  98. package/dist/types/classes/handlers/move.handler.d.ts +11 -0
  99. package/dist/types/classes/objects/group.class.d.ts +97 -0
  100. package/dist/types/classes/objects/selection-group.class.d.ts +5 -0
  101. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +2 -0
  102. package/dist/types/components/shared/kritzel-tooltip/kritzel-tooltip.d.ts +0 -3
  103. package/dist/types/components/ui/kritzel-context-menu/kritzel-context-menu.d.ts +3 -0
  104. package/dist/types/components.d.ts +4 -18
  105. package/dist/types/index.d.ts +1 -0
  106. package/package.json +1 -1
  107. package/dist/cjs/default-line-tool.config-Bs88k0jE.js.map +0 -1
  108. package/dist/components/p-C1S1zPH-.js.map +0 -1
  109. package/dist/components/p-Cv4BGNPb.js.map +0 -1
  110. package/dist/components/p-D1YAsWrL.js.map +0 -1
  111. package/dist/components/p-f_ut_1_F.js.map +0 -1
  112. package/dist/components/p-xcQV8l_c.js.map +0 -1
  113. package/dist/esm/default-line-tool.config-PvsWHpO2.js.map +0 -1
  114. package/dist/stencil/p-9913896b.entry.js +0 -10
  115. package/dist/stencil/p-9913896b.entry.js.map +0 -1
  116. package/dist/stencil/p-PvsWHpO2.js +0 -2
  117. package/dist/stencil/p-PvsWHpO2.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index-Cj__YTlG.js');
4
- var defaultLineTool_config = require('./default-line-tool.config-Bs88k0jE.js');
4
+ var defaultLineTool_config = require('./default-line-tool.config-JuTDR6PF.js');
5
5
 
6
6
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
7
7
 
@@ -103,6 +103,7 @@ KritzelColorPalette.style = kritzelColorPaletteCss;
103
103
 
104
104
  const kritzelContextMenuCss = ":host{display:block}.menu-container{display:flex;flex-direction:column;background-color:var(--kritzel-context-menu-background-color, #ffffff);border-radius:var(--kritzel-context-menu-border-radius, 12px);box-shadow:var(--kritzel-context-menu-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12));border:var(--kritzel-context-menu-border, 1px solid #ebebeb);padding:var(--kritzel-context-menu-padding,4px)}.menu-item{display:flex;align-items:center;gap:var(--kritzel-context-menu-item-gap, 8px);background:none;border:none;text-align:left;padding:var(--kritzel-context-menu-item-padding, 8px);border-radius:var(--kritzel-context-menu-item-border-radius, 12px);cursor:var(--kritzel-pointer-cursor, pointer);font-size:var(--kritzel-context-menu-item-font-size, 14px);color:var(--kritzel-context-menu-item-color, #333333);white-space:nowrap;-webkit-tap-highlight-color:transparent}.menu-item:not(.disabled):hover{background-color:var(--kritzel-context-menu-item-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.menu-item:not(.disabled):active{background-color:var(--kritzel-context-menu-item-active-background-color, hsl(0, 0%, 0%, 8.6%))}.menu-item.disabled{color:var(--kritzel-context-menu-item-disabled-color, #aaaaaa)}.menu-item kritzel-icon{opacity:0.8;flex-shrink:0}.menu-item.disabled kritzel-icon{opacity:0.4}.label{flex-grow:1}";
105
105
 
106
+ const VIEWPORT_PADDING = 8;
106
107
  const KritzelContextMenu = class {
107
108
  constructor(hostRef) {
108
109
  index.registerInstance(this, hostRef);
@@ -127,6 +128,42 @@ const KritzelContextMenu = class {
127
128
  componentWillLoad() {
128
129
  this.updateMenuItems();
129
130
  }
131
+ componentDidLoad() {
132
+ this.adjustPositionToViewport();
133
+ }
134
+ componentDidUpdate() {
135
+ this.adjustPositionToViewport();
136
+ }
137
+ adjustPositionToViewport() {
138
+ const rect = this.host.getBoundingClientRect();
139
+ const viewportWidth = window.innerWidth;
140
+ const viewportHeight = window.innerHeight;
141
+ const currentLeft = parseFloat(this.host.style.left) || 0;
142
+ const currentTop = parseFloat(this.host.style.top) || 0;
143
+ let newLeft = currentLeft;
144
+ let newTop = currentTop;
145
+ // Check if menu extends beyond right edge
146
+ if (rect.right > viewportWidth - VIEWPORT_PADDING) {
147
+ newLeft = viewportWidth - rect.width - VIEWPORT_PADDING;
148
+ }
149
+ // Check if menu extends beyond bottom edge
150
+ if (rect.bottom > viewportHeight - VIEWPORT_PADDING) {
151
+ newTop = viewportHeight - rect.height - VIEWPORT_PADDING;
152
+ }
153
+ // Ensure menu doesn't go beyond left edge
154
+ if (newLeft < VIEWPORT_PADDING) {
155
+ newLeft = VIEWPORT_PADDING;
156
+ }
157
+ // Ensure menu doesn't go beyond top edge
158
+ if (newTop < VIEWPORT_PADDING) {
159
+ newTop = VIEWPORT_PADDING;
160
+ }
161
+ // Only update if position changed to avoid infinite loops
162
+ if (newLeft !== currentLeft || newTop !== currentTop) {
163
+ this.host.style.left = `${newLeft}px`;
164
+ this.host.style.top = `${newTop}px`;
165
+ }
166
+ }
130
167
  handleItemClick(item, isDisabled) {
131
168
  if (!isDisabled) {
132
169
  this.actionSelected.emit(item);
@@ -153,7 +190,7 @@ const KritzelContextMenu = class {
153
190
  return defaultValue;
154
191
  }
155
192
  render() {
156
- return (index.h(index.Host, { key: '102f1fd72d991e6d5c0fa6025ed75d860e8e9852' }, index.h("div", { key: '510ea27fdcddc78a51220f68a8d8ba82fd2bd108', class: "menu-container" }, this.processedItems.map(({ item, isDisabled }, index$1) => (index.h("button", { key: `${item.label}-${index$1}`, class: { 'menu-item': true, 'disabled': isDisabled }, onClick: () => this.handleItemClick(item, isDisabled), disabled: isDisabled }, item.icon && index.h("kritzel-icon", { name: item.icon, size: 16 }), index.h("span", { class: "label" }, item.label)))))));
193
+ return (index.h(index.Host, { key: '96a3530caa4567d30410f49311389818bbd45f64' }, index.h("div", { key: '79e4229815a152720ae21069233ff344f297349b', class: "menu-container" }, this.processedItems.map(({ item, isDisabled }, index$1) => (index.h("button", { key: `${item.label}-${index$1}`, class: { 'menu-item': true, 'disabled': isDisabled }, onClick: () => this.handleItemClick(item, isDisabled), disabled: isDisabled }, item.icon && index.h("kritzel-icon", { name: item.icon, size: 16 }), index.h("span", { class: "label" }, item.label)))))));
157
194
  }
158
195
  static get watchers() { return {
159
196
  "items": ["onItemsChanged"]
@@ -196,14 +233,14 @@ const KritzelControlBrushConfig = class {
196
233
  this.toolChange.emit(this.tool);
197
234
  }
198
235
  render() {
199
- return (index.h(index.Host, { key: '3111b2870e4a02da26bac5450424cadeef8c8d39' }, index.h("div", { key: '4bbf6bede0822c35e206566dd176e6b150b54098', style: {
236
+ return (index.h(index.Host, { key: '8fe8c0564f491121c0c44c6ff4083034f92dbb67' }, index.h("div", { key: '3e8a69b827785976768bfc1e809126bee7c48c62', style: {
200
237
  display: 'flex',
201
238
  flexDirection: 'row',
202
239
  alignItems: this.isExpanded ? 'flex-start' : 'center',
203
240
  justifyContent: 'flex-start',
204
241
  width: '100%',
205
242
  gap: '8px',
206
- } }, index.h("kritzel-color-palette", { key: 'eb9c5690f823ca278d60629b9ac0595411771d05', colors: this.palette, selectedColor: this.tool.color, isExpanded: this.isExpanded, isOpaque: true, onColorChange: color => this.handleColorChange(color) }), index.h("button", { key: 'd5b0d12188babdd26bbf97344cec60760b7c4f87', class: "expand-toggle", onClick: () => this.handleToggleExpand(), title: this.isExpanded ? 'Collapse' : 'Expand', style: this.palette.length > 6 ? { visibillity: 'visible' } : { visibility: 'hidden' } }, index.h("kritzel-icon", { key: 'e1beea772a60dda335a56815fa39609c37849769', name: this.isExpanded ? 'chevron-up' : 'chevron-down' }))), index.h("kritzel-stroke-size", { key: '8b31bac4e67752f55d2c2281b37a38e6fd801a57', selectedSize: this.tool.size, onSizeChange: event => this.handleSizeChange(event) })));
243
+ } }, index.h("kritzel-color-palette", { key: 'c9056f81cf47d81fef0a0f5743000dcd6633258a', colors: this.palette, selectedColor: this.tool.color, isExpanded: this.isExpanded, isOpaque: true, onColorChange: color => this.handleColorChange(color) }), index.h("button", { key: '2f307264b80a732d976edeb025d509bc1164606b', class: "expand-toggle", onClick: () => this.handleToggleExpand(), title: this.isExpanded ? 'Collapse' : 'Expand', style: this.palette.length > 6 ? { visibillity: 'visible' } : { visibility: 'hidden' } }, index.h("kritzel-icon", { key: '08133ba0a23353b2bb3f87c685a7a0798b8dd16c', name: this.isExpanded ? 'chevron-up' : 'chevron-down' }))), index.h("kritzel-stroke-size", { key: '3de25cc80029ffdfdc173c4c79e937a7dc329743', selectedSize: this.tool.size, onSizeChange: event => this.handleSizeChange(event) })));
207
244
  }
208
245
  static get watchers() { return {
209
246
  "tool": ["handleToolChange"]
@@ -237,14 +274,14 @@ const KritzelControlTextConfig = class {
237
274
  this.toolChange.emit(this.tool);
238
275
  }
239
276
  render() {
240
- return (index.h(index.Host, { key: '172bfe742f7fcb7db080729ac9b07cfd7a2f3f86' }, index.h("div", { key: 'de4000668ebc8a0fb27d9ae9b817b68a5d3e69b0', style: {
277
+ return (index.h(index.Host, { key: '3695b187943af25566885d63257ae3de9f405ea5' }, index.h("div", { key: '7bb146ae3c188478ba17f18f70fd170ce3536308', style: {
241
278
  display: 'flex',
242
279
  flexDirection: 'row',
243
280
  alignItems: 'center',
244
281
  justifyContent: 'flex-start',
245
282
  width: '100%',
246
283
  gap: '8px',
247
- } }, index.h("kritzel-font-family", { key: '4940703e315d0991d4eb2000f4e1a1da6e113cb2', selectedFontFamily: this.tool.fontFamily, onFontFamilyChange: event => this.handleFamilyChange(event) }), index.h("button", { key: '5a32fe373c1ce5cd312fa67e2b345fcc9eda81e5', class: "expand-toggle", onClick: () => this.handleToggleExpand(), title: this.isExpanded ? 'Collapse' : 'Expand' }, index.h("kritzel-icon", { key: '2dc5d0ed3d4bfe02e560e0d9b7fc487e343f56d9', name: this.isExpanded ? 'chevron-up' : 'chevron-down' }))), index.h("kritzel-color-palette", { key: 'c3cba9ef7408aa726954b649d76bd1ae40f0aec6', colors: this.tool.palette, selectedColor: this.tool.fontColor, isExpanded: this.isExpanded, onColorChange: event => this.handleColorChange(event) }), index.h("kritzel-font-size", { key: 'b9f879d5f2bcc4b92519235e6fc0a22195a30a8f', selectedSize: this.tool.fontSize, fontFamily: this.tool.fontFamily, onSizeChange: event => this.handleSizeChange(event) })));
284
+ } }, index.h("kritzel-font-family", { key: '87f4c5ac2e2a4cfea216b1b828faad231438b9ec', selectedFontFamily: this.tool.fontFamily, onFontFamilyChange: event => this.handleFamilyChange(event) }), index.h("button", { key: '2e73aaf7da659b9e069c247cc762f68394212293', class: "expand-toggle", onClick: () => this.handleToggleExpand(), title: this.isExpanded ? 'Collapse' : 'Expand' }, index.h("kritzel-icon", { key: '785b664697ba266432c535ea26e0665f8d8d657f', name: this.isExpanded ? 'chevron-up' : 'chevron-down' }))), index.h("kritzel-color-palette", { key: 'ed2517a39d254b77f45154914b3ce6a934f66c33', colors: this.tool.palette, selectedColor: this.tool.fontColor, isExpanded: this.isExpanded, onColorChange: event => this.handleColorChange(event) }), index.h("kritzel-font-size", { key: '9b25c9607fa69c991e769852e3e3e378e48387bd', selectedSize: this.tool.fontSize, fontFamily: this.tool.fontFamily, onSizeChange: event => this.handleSizeChange(event) })));
248
285
  }
249
286
  };
250
287
  KritzelControlTextConfig.style = kritzelControlTextConfigCss;
@@ -395,13 +432,13 @@ const KritzelControls = class {
395
432
  render() {
396
433
  const hasConfigUI = this.activeControl?.tool instanceof defaultLineTool_config.KritzelBrushTool ||
397
434
  this.activeControl?.tool instanceof defaultLineTool_config.KritzelTextTool;
398
- return (index.h(index.Host, { key: '542415492107a5aa516602f53cbb830ee58ae320', class: {
435
+ return (index.h(index.Host, { key: '92696a0ac908d498211edcbe9b2b90c81aa28a4f', class: {
399
436
  mobile: this.isTouchDevice,
400
- } }, this.isUtilityPanelVisible && (index.h("kritzel-utility-panel", { key: '38ea0136db9c81b38753a88915b98433f75dc9d4', style: {
437
+ } }, this.isUtilityPanelVisible && (index.h("kritzel-utility-panel", { key: 'a75649503fa82aa173fd19c0558b4b54503ff4d6', style: {
401
438
  position: 'absolute',
402
439
  bottom: '56px',
403
440
  left: '12px',
404
- }, undoState: this.undoState, onUndo: () => this.kritzelEngine?.undo(), onRedo: () => this.kritzelEngine?.redo(), onDelete: () => this.kritzelEngine?.delete() })), index.h("div", { key: '30843843f99eeb50cdbe2dd22472c112bfe952f4', class: "kritzel-controls" }, this.controls.map(control => {
441
+ }, undoState: this.undoState, onUndo: () => this.kritzelEngine?.undo(), onRedo: () => this.kritzelEngine?.redo(), onDelete: () => this.kritzelEngine?.delete() })), index.h("div", { key: 'e45118f06606306309114470546c34a8b5afd8f7', class: "kritzel-controls" }, this.controls.map(control => {
405
442
  if (control.type === 'tool') {
406
443
  // Check if this control has sub-options (split-button)
407
444
  if (control.subOptions?.length) {
@@ -417,7 +454,7 @@ const KritzelControls = class {
417
454
  } }, index.h("button", { class: "kritzel-control-main", onClick: () => this.handleControlClick(control), title: selectedSubOption?.label }, index.h("kritzel-icon", { name: selectedSubOption?.icon || control.icon })), index.h("button", { class: {
418
455
  'kritzel-control-dropdown': true,
419
456
  'visible': isActive,
420
- }, onClick: (e) => this.toggleSubMenu(e, control), "aria-label": "Select shape type", "aria-expanded": isSubMenuOpen ? 'true' : 'false', tabIndex: isActive ? 0 : -1 }, index.h("kritzel-icon", { name: "chevron-down", size: 12 })), index.h("kritzel-tooltip", { isVisible: isSubMenuOpen, anchorElement: control._anchorRef, showArrow: false, onTooltipClosed: () => { this.openSubMenuControl = null; } }, index.h("div", { class: "kritzel-submenu-content" }, control.subOptions.map(option => (index.h("button", { class: {
457
+ }, onClick: (e) => this.toggleSubMenu(e, control), "aria-label": "Select shape type", "aria-expanded": isSubMenuOpen ? 'true' : 'false', tabIndex: isActive ? 0 : -1 }, index.h("kritzel-icon", { name: "chevron-down", size: 12 })), index.h("kritzel-tooltip", { isVisible: isSubMenuOpen, anchorElement: control._anchorRef, onTooltipClosed: () => { this.openSubMenuControl = null; } }, index.h("div", { class: "kritzel-submenu-content" }, control.subOptions.map(option => (index.h("button", { class: {
421
458
  'kritzel-submenu-item': true,
422
459
  'active': option.id === selectedSubOption?.id,
423
460
  }, key: option.id, onClick: () => this.selectSubOption(control, option) }, index.h("kritzel-icon", { name: option.icon, size: 20 }), index.h("span", null, option.label))))))));
@@ -1319,6 +1356,21 @@ const KritzelEditor = class {
1319
1356
  { label: 'Delete', icon: 'delete', action: () => this.engineRef.delete() },
1320
1357
  { label: 'Bring to Front', icon: 'bring-to-front', action: () => this.engineRef.bringToFront() },
1321
1358
  { label: 'Send to Back', icon: 'send-to-back', action: () => this.engineRef.sendToBack() },
1359
+ {
1360
+ label: 'Group',
1361
+ icon: 'group',
1362
+ disabled: async () => (await this.engineRef.getSelectedObjects()).length < 2,
1363
+ action: () => this.engineRef.group(),
1364
+ },
1365
+ {
1366
+ label: 'Ungroup',
1367
+ icon: 'ungroup',
1368
+ disabled: async () => {
1369
+ const selectedObjects = await this.engineRef.getSelectedObjects();
1370
+ return !selectedObjects.some(obj => obj.__class__ === 'KritzelGroup');
1371
+ },
1372
+ action: () => this.engineRef.ungroup(),
1373
+ },
1322
1374
  ];
1323
1375
  customSvgIcons = {};
1324
1376
  isControlsVisible = true;
@@ -1470,7 +1522,7 @@ const KritzelEditor = class {
1470
1522
  }
1471
1523
  }
1472
1524
  render() {
1473
- return (index.h(index.Host, { key: 'a39268fb2722bc9e1627a46a3430a574322dfdfb' }, index.h("kritzel-workspace-manager", { key: 'b0c08f2cab64347c0ee14a87ed0ab769a2e95733', workspaces: this.workspaces, activeWorkspace: this.activeWorkspace, onWorkspaceChange: event => (this.activeWorkspace = event.detail), onIsWorkspaceManagerReady: () => (this.isWorkspaceManagerReady = true) }), index.h("kritzel-engine", { key: 'c0efb9b0cdfdf3a9ba945e71e37c60ebfc45e981', ref: el => (this.engineRef = el), workspace: this.activeWorkspace, syncConfig: this.syncConfig, scaleMax: this.scaleMax, scaleMin: this.scaleMin, globalContextMenuItems: this.globalContextMenuItems, objectContextMenuItems: this.objectContextMenuItems, onIsEngineReady: event => this.onEngineReady(event), onWorkspacesChange: event => this.handleWorkspacesChange(event), onObjectsChange: event => this.handleObjectsChange(event), onUndoStateChange: event => this.handleUndoStateChange(event) }), index.h("kritzel-controls", { key: '5a275fb94e2f55a1f79d6d5b5f518305cd739f24', class: { 'keyboard-open': this.isVirtualKeyboardOpen }, style: { display: this.isControlsVisible ? 'flex' : 'none' }, ref: el => (this.controlsRef = el), controls: this.controls, isUtilityPanelVisible: this.isUtilityPanelVisible, undoState: this.undoState, onIsControlsReady: () => (this.isControlsReady = true) })));
1525
+ return (index.h(index.Host, { key: '497c7c69759c966dd2132007d80c5c772258a6c9' }, index.h("kritzel-workspace-manager", { key: '169e10c9b338283e1be32868aa0e354e7a149749', workspaces: this.workspaces, activeWorkspace: this.activeWorkspace, onWorkspaceChange: event => (this.activeWorkspace = event.detail), onIsWorkspaceManagerReady: () => (this.isWorkspaceManagerReady = true) }), index.h("kritzel-engine", { key: 'c8cf58aa8bfc9a5d4a2e4a4499c60938b0d55758', ref: el => (this.engineRef = el), workspace: this.activeWorkspace, syncConfig: this.syncConfig, scaleMax: this.scaleMax, scaleMin: this.scaleMin, globalContextMenuItems: this.globalContextMenuItems, objectContextMenuItems: this.objectContextMenuItems, onIsEngineReady: event => this.onEngineReady(event), onWorkspacesChange: event => this.handleWorkspacesChange(event), onObjectsChange: event => this.handleObjectsChange(event), onUndoStateChange: event => this.handleUndoStateChange(event) }), index.h("kritzel-controls", { key: '68f2bce210dab937080618a2a4f069bf8103449f', class: { 'keyboard-open': this.isVirtualKeyboardOpen }, style: { display: this.isControlsVisible ? 'flex' : 'none' }, ref: el => (this.controlsRef = el), controls: this.controls, isUtilityPanelVisible: this.isUtilityPanelVisible, undoState: this.undoState, onIsControlsReady: () => (this.isControlsReady = true) })));
1474
1526
  }
1475
1527
  static get watchers() { return {
1476
1528
  "isEngineReady": ["onIsEngineReady"],
@@ -18920,6 +18972,9 @@ class KritzelKeyHandler extends defaultLineTool_config.KritzelBaseHandler {
18920
18972
  { key: '-', ctrl: true, condition: c => !!c.store.selectionGroup, action: c => c.sendBackward() },
18921
18973
  { key: '*', shift: true, condition: c => !!c.store.selectionGroup, action: c => c.bringToFront() },
18922
18974
  { key: '_', shift: true, condition: c => !!c.store.selectionGroup, action: c => c.sendToBack() },
18975
+ // Grouping
18976
+ { key: 'g', ctrl: true, condition: c => !!c.store.selectionGroup && c.store.selectionGroup.objects.length >= 2, action: c => c.group() },
18977
+ { key: 'G', ctrl: true, shift: true, condition: c => !!c.store.selectionGroup, action: c => c.ungroup() },
18923
18978
  ];
18924
18979
  constructor(core) {
18925
18980
  super(core);
@@ -19164,6 +19219,9 @@ class KritzelReviver {
19164
19219
  case 'KritzelSelectionGroup':
19165
19220
  revivedObj = defaultLineTool_config.KritzelSelectionGroup.create(this._core).deserialize(obj);
19166
19221
  break;
19222
+ case 'KritzelGroup':
19223
+ revivedObj = defaultLineTool_config.KritzelGroup.create(this._core).deserialize(obj);
19224
+ break;
19167
19225
  case 'KritzelWorkspace':
19168
19226
  revivedObj = defaultLineTool_config.KritzelWorkspace.create(this._core, obj).deserialize(obj);
19169
19227
  break;
@@ -19999,7 +20057,15 @@ class KritzelCore {
19999
20057
  addObject(object) {
20000
20058
  this._store.state.objects.insert(object);
20001
20059
  }
20002
- removeObject(object) {
20060
+ removeObject(object, preserveChildren = false) {
20061
+ // Handle KritzelGroup: recursively delete all children first (unless preserveChildren is true)
20062
+ if (object instanceof defaultLineTool_config.KritzelGroup && !preserveChildren) {
20063
+ // Get children before removing the group
20064
+ const children = [...object.children];
20065
+ children.forEach(child => {
20066
+ this.removeObject(child);
20067
+ });
20068
+ }
20003
20069
  // Handle anchor cleanup
20004
20070
  if (object instanceof defaultLineTool_config.KritzelLine) {
20005
20071
  // If removing a line, clean up its anchor index entries
@@ -20136,6 +20202,28 @@ class KritzelCore {
20136
20202
  obj.updatePosition(obj.translateX + offsetX, obj.translateY + offsetY);
20137
20203
  // Update z-index
20138
20204
  obj.zIndex = this._store.currentZIndex + i;
20205
+ // Handle KritzelGroup: also add pending children with offset
20206
+ if (obj instanceof defaultLineTool_config.KritzelGroup) {
20207
+ const pendingChildren = obj._pendingChildren;
20208
+ if (pendingChildren) {
20209
+ pendingChildren.forEach((child, childIndex) => {
20210
+ // Update workspace
20211
+ if (child.workspaceId !== activeWorkspace.id) {
20212
+ child.workspaceId = activeWorkspace.id;
20213
+ }
20214
+ // Update position with offset
20215
+ child.updatePosition(child.translateX + offsetX, child.translateY + offsetY);
20216
+ // Update z-index
20217
+ child.zIndex = this._store.currentZIndex + i + childIndex;
20218
+ // Add child to store
20219
+ this.addObject(child);
20220
+ });
20221
+ // Clear pending children
20222
+ delete obj._pendingChildren;
20223
+ // Finalize the group's bounding box and snapshots
20224
+ obj.finalize();
20225
+ }
20226
+ }
20139
20227
  // Add to objectsMap
20140
20228
  this.addObject(obj);
20141
20229
  // Add to selection group
@@ -20247,6 +20335,63 @@ class KritzelCore {
20247
20335
  });
20248
20336
  this.rerender();
20249
20337
  }
20338
+ /**
20339
+ * Groups the currently selected objects into a KritzelGroup.
20340
+ * Requires at least 2 objects to be selected.
20341
+ */
20342
+ group() {
20343
+ const selectionGroup = this._store.selectionGroup;
20344
+ if (!selectionGroup || selectionGroup.objects.length < 2) {
20345
+ return;
20346
+ }
20347
+ // Create a group from the selected objects
20348
+ const group = defaultLineTool_config.KritzelGroup.createFromObjects(this, selectionGroup.objects);
20349
+ // Add the group to the object store
20350
+ this.addObject(group);
20351
+ // Remove the selection group and create a new one with just the group
20352
+ this.removeSelectionGroup();
20353
+ const newSelectionGroup = defaultLineTool_config.KritzelSelectionGroup.create(this);
20354
+ newSelectionGroup.addOrRemove(group);
20355
+ newSelectionGroup.isSelected = true;
20356
+ newSelectionGroup.rotation = group.rotation;
20357
+ this.addSelectionGroup(newSelectionGroup);
20358
+ this.engine.emitObjectsChange();
20359
+ this.rerender();
20360
+ }
20361
+ /**
20362
+ * Ungroups any KritzelGroup objects in the current selection.
20363
+ * Children are extracted and become top-level objects.
20364
+ */
20365
+ ungroup() {
20366
+ const selectionGroup = this._store.selectionGroup;
20367
+ if (!selectionGroup) {
20368
+ return;
20369
+ }
20370
+ const groups = selectionGroup.objects.filter(obj => obj instanceof defaultLineTool_config.KritzelGroup);
20371
+ if (groups.length === 0) {
20372
+ return;
20373
+ }
20374
+ // Collect all children from all groups
20375
+ const allChildren = [];
20376
+ const nonGroupObjects = selectionGroup.objects.filter(obj => !(obj instanceof defaultLineTool_config.KritzelGroup));
20377
+ groups.forEach(group => {
20378
+ // Get children before removing the group
20379
+ const children = group.ungroup();
20380
+ allChildren.push(...children);
20381
+ // Remove the group from the store (but keep children)
20382
+ this.removeObject(group, true);
20383
+ });
20384
+ // Create a new selection group with all the ungrouped children and non-group objects
20385
+ this.removeSelectionGroup();
20386
+ const newSelectionGroup = defaultLineTool_config.KritzelSelectionGroup.create(this);
20387
+ [...allChildren, ...nonGroupObjects].forEach(child => {
20388
+ newSelectionGroup.addOrRemove(child);
20389
+ });
20390
+ newSelectionGroup.isSelected = true;
20391
+ this.addSelectionGroup(newSelectionGroup);
20392
+ this.engine.emitObjectsChange();
20393
+ this.rerender();
20394
+ }
20250
20395
  selectObjects(objects) {
20251
20396
  if (objects.length === 0) {
20252
20397
  return;
@@ -20645,6 +20790,12 @@ const KritzelEngine = class {
20645
20790
  async sendToBack(object) {
20646
20791
  this.core.sendToBack(object);
20647
20792
  }
20793
+ async group() {
20794
+ this.core.group();
20795
+ }
20796
+ async ungroup() {
20797
+ this.core.ungroup();
20798
+ }
20648
20799
  async undo() {
20649
20800
  this.core.undo();
20650
20801
  }
@@ -20827,7 +20978,7 @@ const KritzelEngine = class {
20827
20978
  };
20828
20979
  const visibleObjects = this.core.store.state.objects.query(viewportBounds).sort((a, b) => a.zIndex - b.zIndex);
20829
20980
  this.core.cursorManager.applyCursor();
20830
- return (index.h(index.Host, { key: '209ccf8414c635c9e04ca4807c95a29c629071ec' }, this.core.store.state.debugInfo.showViewportInfo && (index.h("div", { key: 'df6a03d1341887960bb91cbaa0a5dca6880a9293', class: "debug-panel" }, index.h("div", { key: '65157757ec6549ad2af311085a9618ab661f5ac0' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), index.h("div", { key: '20137b6c651a9aa8df15bce66d5bfe870a7af139' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), index.h("div", { key: '49dd30286641236ae428c731bb181cb06269852e' }, "TranslateX: ", this.core.store.state?.translateX), index.h("div", { key: 'd8ee431a10335e99aec40a596817765d7ee3f67b' }, "TranslateY: ", this.core.store.state?.translateY), index.h("div", { key: '34b1f31146080780433d6c1718d13bbfe397cb9b' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), index.h("div", { key: '4c279a106101cf808c91a2be4987569b21ae52b3' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), index.h("div", { key: '6ebd7ad3c803ef45d58a74180c52e8be8af8bca3' }, "PointerCount: ", this.core.store.state.pointers.size), index.h("div", { key: '345970c8b2b54f3a0d8fe1d9bb1b7b33023db386' }, "Scale: ", this.core.store.state?.scale), index.h("div", { key: 'fc265ae0e71cf22311cab3006dfc29b9d24397d2' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), index.h("div", { key: '9f921032a58b55e60f82d11a76f269051357d3e1' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), index.h("div", { key: '6d197e06cc362a9ecb8bfe00d272aecfec2b49e1' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), index.h("div", { key: '5313589ba2a509c95a5730dcf29c4003d9884cbf' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), index.h("div", { key: '8af9f9d6e33a2897c20962048bbf2a058f9d4a45' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), index.h("div", { key: '81aec0050d3e2122643b61fd725e71b25d97bc27' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), index.h("div", { key: 'c9956f05c01b74ee1666d9395a2715c3463fe401' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), index.h("div", { key: 'ae0a01c8f8aafc08326b136720c6a75b6aec6299' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), index.h("div", { key: '7816d40d73248a55120440e6d721325e1894178e' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), index.h("div", { key: 'c22383bacca0ada584f2e8a8577523c905d74ae2' }, "IsRotationHandleHovered: ", this.core.store.state.isRotationHandleHovered ? 'true' : 'false'), index.h("div", { key: '8185a7318c6cdfde558cc372b79582d58b706f9e' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), index.h("div", { key: '2d56b05377693ef032ab2316fa753ecedf264b9c' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), index.h("div", { key: '2e2bf9fd321ef04dc0ac6dc21539eb0117c9fb23' }, "IsPointerDown: ", this.core.store.isPointerDown ? 'true' : 'false'), index.h("div", { key: '3118ab970d5d37e01405c42308fc051d675d4bfa' }, "PointerX: ", this.core.store.state?.pointerX), index.h("div", { key: 'd8a31065843f89552f2d9c03dcbca960a716fa6c' }, "PointerY: ", this.core.store.state?.pointerY), index.h("div", { key: 'cb8d28b6ea63cbb6572f761011fccb847b748227' }, "SelectedObjects: ", this.core.store.selectionGroup?.objects.length || 0), index.h("div", { key: 'd112a7e833c265085246817423557bfdc5b30b74' }, "ViewportCenter: (", viewportCenterX.toFixed(2), ", ", viewportCenterY.toFixed(2), ")"))), index.h("div", { key: 'df4f302192a8fc9644b7f883618b0a0f8a600dc8', id: "origin", class: "origin", style: {
20981
+ return (index.h(index.Host, { key: 'd0f13eb1d34a6edcba439a501edbaab1875112f1' }, this.core.store.state.debugInfo.showViewportInfo && (index.h("div", { key: 'f722474cfd43ab13e306cea908871af77015d015', class: "debug-panel" }, index.h("div", { key: 'efd483bc92223d78f6a0f661a1911820de83682a' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), index.h("div", { key: '37c213c1e3d57cb79ccb99ff65404fa3e03f07e0' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), index.h("div", { key: '68bcdc9e10d89a6a4284dbdc11d679f6c8bed6df' }, "TranslateX: ", this.core.store.state?.translateX), index.h("div", { key: 'c653966e412a801d536bfdcf8ab79176376693a5' }, "TranslateY: ", this.core.store.state?.translateY), index.h("div", { key: 'db83b7d58514296daa1465926867d099df6988f9' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), index.h("div", { key: '1f15e3edec3165920207ba8f1b2886aa72049d08' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), index.h("div", { key: 'c4e468e3c602f1fd62d4b13de1ec39dd1302768f' }, "PointerCount: ", this.core.store.state.pointers.size), index.h("div", { key: '8eae67aac27495a611ba125e029473119665bb7e' }, "Scale: ", this.core.store.state?.scale), index.h("div", { key: '8b22934652db52d915cb21f48f8340ceb2fe1327' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), index.h("div", { key: 'd4d1872b8e1c33f0925a2f3cfcf4bc652cc5637e' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), index.h("div", { key: '76fc159e2f38324248db21cab17fe76dd7add144' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), index.h("div", { key: 'aa5a5a7c5faac899492f9c87cb9bf5cf960329cb' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), index.h("div", { key: '21d4d43e7fc91a187055906c9f38529407f4ec6f' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), index.h("div", { key: 'b43ba7bafd3ac52f5622e7d980456e7cbf5ff0fb' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), index.h("div", { key: 'ecf9749bf4eece2970a62230d323fc205ce62fed' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), index.h("div", { key: '6f9c7b7fa357f86c05aa76c02428ab0584856f3d' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), index.h("div", { key: '7b61ed971fd7b4a029204861b19677421c049a33' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), index.h("div", { key: '875ed8cdf18b46c362b6b0c331a8f9fcba6bc1e2' }, "IsRotationHandleHovered: ", this.core.store.state.isRotationHandleHovered ? 'true' : 'false'), index.h("div", { key: 'f56f27eff2c7e715528a32b4fe874da5220bc1ef' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), index.h("div", { key: '7831c3571031b029766b0fa16fe2b0e29e8c19b5' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), index.h("div", { key: 'd4167e465da2f690b9d1f6d3cb8778f4a618843f' }, "IsPointerDown: ", this.core.store.isPointerDown ? 'true' : 'false'), index.h("div", { key: '00dfeba01da344a0e3c40f2f92ca539ef59d5da5' }, "PointerX: ", this.core.store.state?.pointerX), index.h("div", { key: '30948e66636501df9863caa67da468d45517a44f' }, "PointerY: ", this.core.store.state?.pointerY), index.h("div", { key: '9ee2c0bb69e9a150b7ab7c0ca9881897b5ec2a72' }, "SelectedObjects: ", this.core.store.selectionGroup?.objects.length || 0), index.h("div", { key: '9d470ca319b0c32de7565c46b28c6483d4b9c1cb' }, "ViewportCenter: (", viewportCenterX.toFixed(2), ", ", viewportCenterY.toFixed(2), ")"))), index.h("div", { key: '4eaaf1e928e62c872b354523e55f33f01c25c5e7', id: "origin", class: "origin", style: {
20831
20982
  transform: `matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`,
20832
20983
  } }, visibleObjects?.map(object => {
20833
20984
  return (index.h("div", { key: object.id, style: {
@@ -21076,18 +21227,18 @@ const KritzelEngine = class {
21076
21227
  stroke: 'var(--kritzel-snap-indicator-stroke, #3b82f6)',
21077
21228
  strokeWidth: data.indicatorStrokeWidth,
21078
21229
  } }))));
21079
- })()), this.core.store.state.isContextMenuVisible && (index.h("kritzel-context-menu", { key: '70aefa0f3cf33036edb455dbe75448d2521e6dc9', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.selectionGroup?.objects || [], style: {
21230
+ })()), this.core.store.state.isContextMenuVisible && (index.h("kritzel-context-menu", { key: 'f726cabc77f66c24618dc0b54cca8bd681608dde', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.selectionGroup?.objects || [], style: {
21080
21231
  position: 'fixed',
21081
21232
  left: `${this.core.store.state.contextMenuX}px`,
21082
21233
  top: `${this.core.store.state.contextMenuY}px`,
21083
- zIndex: '10000',
21234
+ zIndex: '10002',
21084
21235
  }, onActionSelected: event => {
21085
21236
  event.detail.action({
21086
21237
  x: (-this.core.store.state.translateX + this.core.store.state.contextMenuX) / this.core.store.state.scale,
21087
21238
  y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,
21088
21239
  }, this.core.store.selectionGroup?.objects);
21089
21240
  this.hideContextMenu();
21090
- }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof defaultLineTool_config.KritzelEraserTool && !this.core.store.state.isScaling && index.h("kritzel-cursor-trail", { key: '68106a187ca81a38a819f1d52895b2858a8a28cb', core: this.core })));
21241
+ }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof defaultLineTool_config.KritzelEraserTool && !this.core.store.state.isScaling && index.h("kritzel-cursor-trail", { key: 'bf42f27e52c03f9d00a5459883ac45ed39bb1dcd', core: this.core })));
21091
21242
  }
21092
21243
  static get watchers() { return {
21093
21244
  "workspace": ["onWorkspaceChange"],
@@ -21779,13 +21930,10 @@ const KritzelTooltip = class {
21779
21930
  get host() { return index.getElement(this); }
21780
21931
  isVisible = false;
21781
21932
  anchorElement;
21782
- arrowSize = 8;
21783
21933
  offsetY = 24;
21784
- showArrow = true;
21785
21934
  tooltipClosed;
21786
21935
  positionX = 0;
21787
21936
  positionY = 0;
21788
- arrowOffset = '0px';
21789
21937
  handleOutsideClick(event) {
21790
21938
  if (!this.isVisible)
21791
21939
  return;
@@ -21837,36 +21985,17 @@ const KritzelTooltip = class {
21837
21985
  this.positionX = Math.max(minLeft, Math.min(idealLeft, maxLeft));
21838
21986
  // Step 3: Calculate bottom position (distance from viewport bottom to top of anchor + offset)
21839
21987
  this.positionY = window.innerHeight - anchorRect.top + this.offsetY;
21840
- // Step 4: Calculate arrow offset to point to the center of the anchor element
21841
- // Arrow should point to anchorCenterX, relative to where tooltip is positioned
21842
- const arrowPositionInTooltip = anchorCenterX - this.positionX - this.arrowSize;
21843
- this.arrowOffset = `${arrowPositionInTooltip}px`;
21844
21988
  }
21845
21989
  }
21846
21990
  render() {
21847
- return (index.h(index.Host, { key: '468ba81a0a9265f04725e23b19dd879c1287e473', style: {
21991
+ return (index.h(index.Host, { key: 'b6e220084f7ce3eead25bf60cef965322f59f3e0', style: {
21848
21992
  position: 'fixed',
21849
21993
  zIndex: '9999',
21850
21994
  transition: 'opacity 0.3s ease-in-out, transform 0.3s ease-in-out',
21851
21995
  visibility: this.isVisible ? 'visible' : 'hidden',
21852
21996
  left: `${this.positionX}px`,
21853
21997
  bottom: `${this.positionY}px`,
21854
- } }, index.h("div", { key: 'c6867197197f4e80e93bc63f0e7dd5dfbb19a523', class: "tooltip-content", onClick: event => event.stopPropagation() }, index.h("slot", { key: 'a4df46360e349cbf68af08c0cc3297dd8d141b3c' }), this.showArrow && (index.h("div", { key: '9a7c9011b3286179f592c36afb2cdaf927838930', class: "tooltip-arrow-wrapper", style: {
21855
- position: 'fixed',
21856
- left: this.arrowOffset,
21857
- bottom: `-${this.arrowSize * 2}px`,
21858
- } }, index.h("div", { key: 'd215175c6cb66c72b1fcb30eafc6af073946ad87', class: "tooltip-arrow", style: {
21859
- borderLeft: `${this.arrowSize}px solid transparent`,
21860
- borderRight: `${this.arrowSize}px solid transparent`,
21861
- borderTop: `${this.arrowSize}px solid var(--kritzel-controls-tooltip-background-color, #ffffff)`,
21862
- filter: 'drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2))',
21863
- } }), index.h("div", { key: '65cd5bf2f0de3897794e7ba4e77d0866aa5724e5', class: "tooltip-arrow-rect", style: {
21864
- position: 'relative',
21865
- width: `${this.arrowSize * 2}px`,
21866
- height: `${this.arrowSize}px`,
21867
- backgroundColor: 'var(--kritzel-controls-tooltip-background-color, #ffffff)',
21868
- bottom: `${this.arrowSize * 2}px`,
21869
- } }))))));
21998
+ } }, index.h("div", { key: '0ab91fedc3301b0c42fa773607ce6aa335b73c2e', class: "tooltip-content", onClick: event => event.stopPropagation() }, index.h("slot", { key: 'bde0c798a393d006737c1d2c54660b6bbdace9e5' }))));
21870
21999
  }
21871
22000
  };
21872
22001
  KritzelTooltip.style = kritzelTooltipCss;
@@ -21897,7 +22026,7 @@ const KritzelUtilityPanel = class {
21897
22026
  this.redo.emit();
21898
22027
  }
21899
22028
  render() {
21900
- return (index.h(index.Host, { key: '6e33687f7c71ec342d47f1ae4a507de1f08fad6f' }, index.h("button", { key: 'd0cf45d78743a954764d03abdb49a725c0979cf8', class: "utility-button", disabled: !this.undoState?.canUndo, onClick: event => this.handleUndo(event) }, index.h("kritzel-icon", { key: '6303892952ef0426023dde47b909fe90abfbd4c6', name: "undo" })), index.h("button", { key: '0542b66850c61e001d7461ddcbceb7999f98dc6a', class: "utility-button", disabled: !this.undoState?.canRedo, onClick: event => this.handleRedo(event) }, index.h("kritzel-icon", { key: 'faf61b34c8d5abe3ba0bdb1787a08418874532a4', name: "redo" })), index.h("div", { key: 'a8482d17b7e9b68204d81097ced692daa1fb11cc', class: "utility-separator" }), index.h("button", { key: 'd733f273095a96c914285908088d9c1536dddaf0', class: "utility-button" }, index.h("kritzel-icon", { key: 'd5322357c8ffc646c77acb02c5c5ce9131ba66cd', name: "delete", onClick: () => this.delete.emit() }))));
22029
+ return (index.h(index.Host, { key: '05ec19a2b644f00680139513c97650e6e7c612f2' }, index.h("button", { key: 'a62b621b7a1abe33fbf3fc0aa1f8e1d6c7ed8be3', class: "utility-button", disabled: !this.undoState?.canUndo, onClick: event => this.handleUndo(event) }, index.h("kritzel-icon", { key: 'ca8d0f9c9e5cebaf20ffc239602c4b4ce37b7e6b', name: "undo" })), index.h("button", { key: '7f1ba8b6ae3b8edf0ac0127fee30f3c070d47b44', class: "utility-button", disabled: !this.undoState?.canRedo, onClick: event => this.handleRedo(event) }, index.h("kritzel-icon", { key: '4680f7f9523fe6c17924662e025f5e6dfc3e9d78', name: "redo" })), index.h("div", { key: '77148d676ed708e4029b32e25a3daac628302478', class: "utility-separator" }), index.h("button", { key: 'b740674dc96d41c0b7b4d2cfb365d45c0f453a27', class: "utility-button" }, index.h("kritzel-icon", { key: '73d2ed9b6b400106521b0f53915e93516f9d3aad', name: "delete", onClick: () => this.delete.emit() }))));
21901
22030
  }
21902
22031
  };
21903
22032
  KritzelUtilityPanel.style = kritzelUtilityPanelCss;
@@ -6,7 +6,7 @@ var appGlobals = require('./app-globals-V2Kpy_OQ.js');
6
6
  const defineCustomElements = async (win, options) => {
7
7
  if (typeof window === 'undefined') return undefined;
8
8
  await appGlobals.globalScripts();
9
- return index.bootstrapLazy([["kritzel-color_22.cjs",[[768,"kritzel-editor",{"scaleMax":[2,"scale-max"],"scaleMin":[2,"scale-min"],"controls":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"customSvgIcons":[16],"isControlsVisible":[4,"is-controls-visible"],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"syncConfig":[16],"isEngineReady":[32],"isControlsReady":[32],"isWorkspaceManagerReady":[32],"workspaces":[32],"activeWorkspace":[32],"isVirtualKeyboardOpen":[32],"undoState":[32],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"dblclick","onTouchStart"]],{"isEngineReady":["onIsEngineReady"],"isControlsReady":["onIsControlsReady"],"workspaces":["onWorkspacesChange"]}],[769,"kritzel-controls",{"controls":[16],"activeControl":[1040],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"undoState":[16],"firstConfig":[32],"isTooltipVisible":[32],"isTouchDevice":[32],"selectedSubOptions":[32],"openSubMenuControl":[32],"closeTooltip":[64]},[[4,"click","handleDocumentClick"],[8,"keydown","handleKeyDown"],[4,"activeToolChange","handleActiveToolChange"]]],[769,"kritzel-workspace-manager",{"activeWorkspace":[1040],"workspaces":[16],"childMenuAnchor":[32],"openChildMenuItem":[32],"newWorkspace":[32],"editingItemId":[32]},[[8,"wheel","handleWheel"]]],[769,"kritzel-engine",{"workspace":[16],"syncConfig":[16],"activeTool":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"cursorTarget":[16],"forceUpdate":[32],"registerTool":[64],"changeActiveTool":[64],"disable":[64],"enable":[64],"delete":[64],"copy":[64],"paste":[64],"bringForward":[64],"sendBackward":[64],"bringToFront":[64],"sendToBack":[64],"undo":[64],"redo":[64],"hideContextMenu":[64],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"getCopiedObjects":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[0,"longpress","handleLongPress"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[4,"dblclick","preventDoubleTapZoomOnTouchDevices"]],{"workspace":["onWorkspaceChange"],"scaleMax":["validateScaleMax"],"scaleMin":["validateScaleMin"],"cursorTarget":["onCursorTargetChange"]}],[769,"kritzel-control-text-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"]}],[769,"kritzel-control-brush-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"],"palette":[32]},null,{"tool":["handleToolChange"]}],[769,"kritzel-split-button",{"buttonIcon":[1,"button-icon"],"dropdownIcon":[1,"dropdown-icon"],"items":[16],"mainButtonDisabled":[4,"main-button-disabled"],"menuButtonDisabled":[4,"menu-button-disabled"],"isMenuOpen":[32],"isTouchDevice":[32],"anchorElement":[32],"menuScrollTop":[32],"open":[64],"focusMenu":[64]}],[769,"kritzel-context-menu",{"items":[16],"objects":[16],"processedItems":[32]},[[9,"pointerdown","handleOutsideClick"]],{"items":["onItemsChanged"]}],[769,"kritzel-utility-panel",{"undoState":[16]}],[769,"kritzel-cursor-trail",{"core":[16],"cursorTrailPoints":[32],"isLeftButtonDown":[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[769,"kritzel-tooltip",{"isVisible":[4,"is-visible"],"anchorElement":[16],"arrowSize":[2,"arrow-size"],"offsetY":[2,"offset-y"],"showArrow":[4,"show-arrow"],"positionX":[32],"positionY":[32],"arrowOffset":[32],"focusContent":[64]},[[4,"click","handleOutsideClick"],[9,"resize","handleWindowResize"]]],[769,"kritzel-font-family",{"fontOptions":[16],"selectedFontFamily":[1025,"selected-font-family"]}],[769,"kritzel-font-size",{"sizes":[16],"selectedSize":[1026,"selected-size"],"fontFamily":[1,"font-family"]}],[769,"kritzel-stroke-size",{"sizes":[16],"selectedSize":[1026,"selected-size"]}],[769,"kritzel-color-palette",{"colors":[16],"selectedColor":[1025,"selected-color"],"isExpanded":[4,"is-expanded"],"isOpaque":[4,"is-opaque"]}],[769,"kritzel-font",{"fontFamily":[1,"font-family"],"size":[2],"color":[1]}],[769,"kritzel-menu",{"items":[16],"parent":[16],"selectedIndex":[32],"setScrollTop":[64],"setFocus":[64]}],[769,"kritzel-menu-item",{"item":[16],"parent":[16],"isDirty":[32]},null,{"item":["onItemChange"]}],[769,"kritzel-dropdown",{"options":[16],"value":[1],"width":[1],"selectStyles":[8,"select-styles"],"internalValue":[32],"hasSuffixContent":[32],"hasPrefixContent":[32]},null,{"options":["optionsChanged"],"value":["externalValueChanged"]}],[769,"kritzel-portal",{"anchor":[16],"offsetX":[2,"offset-x"],"offsetY":[2,"offset-y"],"autoFocus":[4,"auto-focus"]},[[8,"click","handleOutsideClick"],[8,"keydown","handleKeyDown"],[11,"resize","handleResize"],[11,"scroll","handleWindowScroll"]],{"anchor":["anchorChanged"]}],[769,"kritzel-color",{"value":[1],"size":[2]}],[769,"kritzel-icon",{"name":[1],"label":[1],"size":[2]}]]],["kritzel-brush-style.cjs",[[769,"kritzel-brush-style",{"type":[1],"brushOptions":[16]}]]]], options);
9
+ return index.bootstrapLazy([["kritzel-color_22.cjs",[[768,"kritzel-editor",{"scaleMax":[2,"scale-max"],"scaleMin":[2,"scale-min"],"controls":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"customSvgIcons":[16],"isControlsVisible":[4,"is-controls-visible"],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"syncConfig":[16],"isEngineReady":[32],"isControlsReady":[32],"isWorkspaceManagerReady":[32],"workspaces":[32],"activeWorkspace":[32],"isVirtualKeyboardOpen":[32],"undoState":[32],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"dblclick","onTouchStart"]],{"isEngineReady":["onIsEngineReady"],"isControlsReady":["onIsControlsReady"],"workspaces":["onWorkspacesChange"]}],[769,"kritzel-controls",{"controls":[16],"activeControl":[1040],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"undoState":[16],"firstConfig":[32],"isTooltipVisible":[32],"isTouchDevice":[32],"selectedSubOptions":[32],"openSubMenuControl":[32],"closeTooltip":[64]},[[4,"click","handleDocumentClick"],[8,"keydown","handleKeyDown"],[4,"activeToolChange","handleActiveToolChange"]]],[769,"kritzel-workspace-manager",{"activeWorkspace":[1040],"workspaces":[16],"childMenuAnchor":[32],"openChildMenuItem":[32],"newWorkspace":[32],"editingItemId":[32]},[[8,"wheel","handleWheel"]]],[769,"kritzel-engine",{"workspace":[16],"syncConfig":[16],"activeTool":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"cursorTarget":[16],"forceUpdate":[32],"registerTool":[64],"changeActiveTool":[64],"disable":[64],"enable":[64],"delete":[64],"copy":[64],"paste":[64],"bringForward":[64],"sendBackward":[64],"bringToFront":[64],"sendToBack":[64],"group":[64],"ungroup":[64],"undo":[64],"redo":[64],"hideContextMenu":[64],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"getCopiedObjects":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[0,"longpress","handleLongPress"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[4,"dblclick","preventDoubleTapZoomOnTouchDevices"]],{"workspace":["onWorkspaceChange"],"scaleMax":["validateScaleMax"],"scaleMin":["validateScaleMin"],"cursorTarget":["onCursorTargetChange"]}],[769,"kritzel-control-text-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"]}],[769,"kritzel-control-brush-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"],"palette":[32]},null,{"tool":["handleToolChange"]}],[769,"kritzel-split-button",{"buttonIcon":[1,"button-icon"],"dropdownIcon":[1,"dropdown-icon"],"items":[16],"mainButtonDisabled":[4,"main-button-disabled"],"menuButtonDisabled":[4,"menu-button-disabled"],"isMenuOpen":[32],"isTouchDevice":[32],"anchorElement":[32],"menuScrollTop":[32],"open":[64],"focusMenu":[64]}],[769,"kritzel-context-menu",{"items":[16],"objects":[16],"processedItems":[32]},[[9,"pointerdown","handleOutsideClick"]],{"items":["onItemsChanged"]}],[769,"kritzel-utility-panel",{"undoState":[16]}],[769,"kritzel-cursor-trail",{"core":[16],"cursorTrailPoints":[32],"isLeftButtonDown":[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[769,"kritzel-tooltip",{"isVisible":[4,"is-visible"],"anchorElement":[16],"offsetY":[2,"offset-y"],"positionX":[32],"positionY":[32],"focusContent":[64]},[[4,"click","handleOutsideClick"],[9,"resize","handleWindowResize"]]],[769,"kritzel-font-family",{"fontOptions":[16],"selectedFontFamily":[1025,"selected-font-family"]}],[769,"kritzel-font-size",{"sizes":[16],"selectedSize":[1026,"selected-size"],"fontFamily":[1,"font-family"]}],[769,"kritzel-stroke-size",{"sizes":[16],"selectedSize":[1026,"selected-size"]}],[769,"kritzel-color-palette",{"colors":[16],"selectedColor":[1025,"selected-color"],"isExpanded":[4,"is-expanded"],"isOpaque":[4,"is-opaque"]}],[769,"kritzel-font",{"fontFamily":[1,"font-family"],"size":[2],"color":[1]}],[769,"kritzel-menu",{"items":[16],"parent":[16],"selectedIndex":[32],"setScrollTop":[64],"setFocus":[64]}],[769,"kritzel-menu-item",{"item":[16],"parent":[16],"isDirty":[32]},null,{"item":["onItemChange"]}],[769,"kritzel-dropdown",{"options":[16],"value":[1],"width":[1],"selectStyles":[8,"select-styles"],"internalValue":[32],"hasSuffixContent":[32],"hasPrefixContent":[32]},null,{"options":["optionsChanged"],"value":["externalValueChanged"]}],[769,"kritzel-portal",{"anchor":[16],"offsetX":[2,"offset-x"],"offsetY":[2,"offset-y"],"autoFocus":[4,"auto-focus"]},[[8,"click","handleOutsideClick"],[8,"keydown","handleKeyDown"],[11,"resize","handleResize"],[11,"scroll","handleWindowScroll"]],{"anchor":["anchorChanged"]}],[769,"kritzel-color",{"value":[1],"size":[2]}],[769,"kritzel-icon",{"name":[1],"label":[1],"size":[2]}]]],["kritzel-brush-style.cjs",[[769,"kritzel-brush-style",{"type":[1],"brushOptions":[16]}]]]], options);
10
10
  };
11
11
 
12
12
  exports.setNonce = index.setNonce;
@@ -19,7 +19,7 @@ var patchBrowser = () => {
19
19
 
20
20
  patchBrowser().then(async (options) => {
21
21
  await appGlobals.globalScripts();
22
- return index.bootstrapLazy([["kritzel-color_22.cjs",[[768,"kritzel-editor",{"scaleMax":[2,"scale-max"],"scaleMin":[2,"scale-min"],"controls":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"customSvgIcons":[16],"isControlsVisible":[4,"is-controls-visible"],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"syncConfig":[16],"isEngineReady":[32],"isControlsReady":[32],"isWorkspaceManagerReady":[32],"workspaces":[32],"activeWorkspace":[32],"isVirtualKeyboardOpen":[32],"undoState":[32],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"dblclick","onTouchStart"]],{"isEngineReady":["onIsEngineReady"],"isControlsReady":["onIsControlsReady"],"workspaces":["onWorkspacesChange"]}],[769,"kritzel-controls",{"controls":[16],"activeControl":[1040],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"undoState":[16],"firstConfig":[32],"isTooltipVisible":[32],"isTouchDevice":[32],"selectedSubOptions":[32],"openSubMenuControl":[32],"closeTooltip":[64]},[[4,"click","handleDocumentClick"],[8,"keydown","handleKeyDown"],[4,"activeToolChange","handleActiveToolChange"]]],[769,"kritzel-workspace-manager",{"activeWorkspace":[1040],"workspaces":[16],"childMenuAnchor":[32],"openChildMenuItem":[32],"newWorkspace":[32],"editingItemId":[32]},[[8,"wheel","handleWheel"]]],[769,"kritzel-engine",{"workspace":[16],"syncConfig":[16],"activeTool":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"cursorTarget":[16],"forceUpdate":[32],"registerTool":[64],"changeActiveTool":[64],"disable":[64],"enable":[64],"delete":[64],"copy":[64],"paste":[64],"bringForward":[64],"sendBackward":[64],"bringToFront":[64],"sendToBack":[64],"undo":[64],"redo":[64],"hideContextMenu":[64],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"getCopiedObjects":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[0,"longpress","handleLongPress"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[4,"dblclick","preventDoubleTapZoomOnTouchDevices"]],{"workspace":["onWorkspaceChange"],"scaleMax":["validateScaleMax"],"scaleMin":["validateScaleMin"],"cursorTarget":["onCursorTargetChange"]}],[769,"kritzel-control-text-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"]}],[769,"kritzel-control-brush-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"],"palette":[32]},null,{"tool":["handleToolChange"]}],[769,"kritzel-split-button",{"buttonIcon":[1,"button-icon"],"dropdownIcon":[1,"dropdown-icon"],"items":[16],"mainButtonDisabled":[4,"main-button-disabled"],"menuButtonDisabled":[4,"menu-button-disabled"],"isMenuOpen":[32],"isTouchDevice":[32],"anchorElement":[32],"menuScrollTop":[32],"open":[64],"focusMenu":[64]}],[769,"kritzel-context-menu",{"items":[16],"objects":[16],"processedItems":[32]},[[9,"pointerdown","handleOutsideClick"]],{"items":["onItemsChanged"]}],[769,"kritzel-utility-panel",{"undoState":[16]}],[769,"kritzel-cursor-trail",{"core":[16],"cursorTrailPoints":[32],"isLeftButtonDown":[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[769,"kritzel-tooltip",{"isVisible":[4,"is-visible"],"anchorElement":[16],"arrowSize":[2,"arrow-size"],"offsetY":[2,"offset-y"],"showArrow":[4,"show-arrow"],"positionX":[32],"positionY":[32],"arrowOffset":[32],"focusContent":[64]},[[4,"click","handleOutsideClick"],[9,"resize","handleWindowResize"]]],[769,"kritzel-font-family",{"fontOptions":[16],"selectedFontFamily":[1025,"selected-font-family"]}],[769,"kritzel-font-size",{"sizes":[16],"selectedSize":[1026,"selected-size"],"fontFamily":[1,"font-family"]}],[769,"kritzel-stroke-size",{"sizes":[16],"selectedSize":[1026,"selected-size"]}],[769,"kritzel-color-palette",{"colors":[16],"selectedColor":[1025,"selected-color"],"isExpanded":[4,"is-expanded"],"isOpaque":[4,"is-opaque"]}],[769,"kritzel-font",{"fontFamily":[1,"font-family"],"size":[2],"color":[1]}],[769,"kritzel-menu",{"items":[16],"parent":[16],"selectedIndex":[32],"setScrollTop":[64],"setFocus":[64]}],[769,"kritzel-menu-item",{"item":[16],"parent":[16],"isDirty":[32]},null,{"item":["onItemChange"]}],[769,"kritzel-dropdown",{"options":[16],"value":[1],"width":[1],"selectStyles":[8,"select-styles"],"internalValue":[32],"hasSuffixContent":[32],"hasPrefixContent":[32]},null,{"options":["optionsChanged"],"value":["externalValueChanged"]}],[769,"kritzel-portal",{"anchor":[16],"offsetX":[2,"offset-x"],"offsetY":[2,"offset-y"],"autoFocus":[4,"auto-focus"]},[[8,"click","handleOutsideClick"],[8,"keydown","handleKeyDown"],[11,"resize","handleResize"],[11,"scroll","handleWindowScroll"]],{"anchor":["anchorChanged"]}],[769,"kritzel-color",{"value":[1],"size":[2]}],[769,"kritzel-icon",{"name":[1],"label":[1],"size":[2]}]]],["kritzel-brush-style.cjs",[[769,"kritzel-brush-style",{"type":[1],"brushOptions":[16]}]]]], options);
22
+ return index.bootstrapLazy([["kritzel-color_22.cjs",[[768,"kritzel-editor",{"scaleMax":[2,"scale-max"],"scaleMin":[2,"scale-min"],"controls":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"customSvgIcons":[16],"isControlsVisible":[4,"is-controls-visible"],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"syncConfig":[16],"isEngineReady":[32],"isControlsReady":[32],"isWorkspaceManagerReady":[32],"workspaces":[32],"activeWorkspace":[32],"isVirtualKeyboardOpen":[32],"undoState":[32],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"dblclick","onTouchStart"]],{"isEngineReady":["onIsEngineReady"],"isControlsReady":["onIsControlsReady"],"workspaces":["onWorkspacesChange"]}],[769,"kritzel-controls",{"controls":[16],"activeControl":[1040],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"undoState":[16],"firstConfig":[32],"isTooltipVisible":[32],"isTouchDevice":[32],"selectedSubOptions":[32],"openSubMenuControl":[32],"closeTooltip":[64]},[[4,"click","handleDocumentClick"],[8,"keydown","handleKeyDown"],[4,"activeToolChange","handleActiveToolChange"]]],[769,"kritzel-workspace-manager",{"activeWorkspace":[1040],"workspaces":[16],"childMenuAnchor":[32],"openChildMenuItem":[32],"newWorkspace":[32],"editingItemId":[32]},[[8,"wheel","handleWheel"]]],[769,"kritzel-engine",{"workspace":[16],"syncConfig":[16],"activeTool":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"cursorTarget":[16],"forceUpdate":[32],"registerTool":[64],"changeActiveTool":[64],"disable":[64],"enable":[64],"delete":[64],"copy":[64],"paste":[64],"bringForward":[64],"sendBackward":[64],"bringToFront":[64],"sendToBack":[64],"group":[64],"ungroup":[64],"undo":[64],"redo":[64],"hideContextMenu":[64],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"getCopiedObjects":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[0,"longpress","handleLongPress"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[4,"dblclick","preventDoubleTapZoomOnTouchDevices"]],{"workspace":["onWorkspaceChange"],"scaleMax":["validateScaleMax"],"scaleMin":["validateScaleMin"],"cursorTarget":["onCursorTargetChange"]}],[769,"kritzel-control-text-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"]}],[769,"kritzel-control-brush-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"],"palette":[32]},null,{"tool":["handleToolChange"]}],[769,"kritzel-split-button",{"buttonIcon":[1,"button-icon"],"dropdownIcon":[1,"dropdown-icon"],"items":[16],"mainButtonDisabled":[4,"main-button-disabled"],"menuButtonDisabled":[4,"menu-button-disabled"],"isMenuOpen":[32],"isTouchDevice":[32],"anchorElement":[32],"menuScrollTop":[32],"open":[64],"focusMenu":[64]}],[769,"kritzel-context-menu",{"items":[16],"objects":[16],"processedItems":[32]},[[9,"pointerdown","handleOutsideClick"]],{"items":["onItemsChanged"]}],[769,"kritzel-utility-panel",{"undoState":[16]}],[769,"kritzel-cursor-trail",{"core":[16],"cursorTrailPoints":[32],"isLeftButtonDown":[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[769,"kritzel-tooltip",{"isVisible":[4,"is-visible"],"anchorElement":[16],"offsetY":[2,"offset-y"],"positionX":[32],"positionY":[32],"focusContent":[64]},[[4,"click","handleOutsideClick"],[9,"resize","handleWindowResize"]]],[769,"kritzel-font-family",{"fontOptions":[16],"selectedFontFamily":[1025,"selected-font-family"]}],[769,"kritzel-font-size",{"sizes":[16],"selectedSize":[1026,"selected-size"],"fontFamily":[1,"font-family"]}],[769,"kritzel-stroke-size",{"sizes":[16],"selectedSize":[1026,"selected-size"]}],[769,"kritzel-color-palette",{"colors":[16],"selectedColor":[1025,"selected-color"],"isExpanded":[4,"is-expanded"],"isOpaque":[4,"is-opaque"]}],[769,"kritzel-font",{"fontFamily":[1,"font-family"],"size":[2],"color":[1]}],[769,"kritzel-menu",{"items":[16],"parent":[16],"selectedIndex":[32],"setScrollTop":[64],"setFocus":[64]}],[769,"kritzel-menu-item",{"item":[16],"parent":[16],"isDirty":[32]},null,{"item":["onItemChange"]}],[769,"kritzel-dropdown",{"options":[16],"value":[1],"width":[1],"selectStyles":[8,"select-styles"],"internalValue":[32],"hasSuffixContent":[32],"hasPrefixContent":[32]},null,{"options":["optionsChanged"],"value":["externalValueChanged"]}],[769,"kritzel-portal",{"anchor":[16],"offsetX":[2,"offset-x"],"offsetY":[2,"offset-y"],"autoFocus":[4,"auto-focus"]},[[8,"click","handleOutsideClick"],[8,"keydown","handleKeyDown"],[11,"resize","handleResize"],[11,"scroll","handleWindowScroll"]],{"anchor":["anchorChanged"]}],[769,"kritzel-color",{"value":[1],"size":[2]}],[769,"kritzel-icon",{"name":[1],"label":[1],"size":[2]}]]],["kritzel-brush-style.cjs",[[769,"kritzel-brush-style",{"type":[1],"brushOptions":[16]}]]]], options);
23
23
  });
24
24
 
25
25
  exports.setNonce = index.setNonce;