kritzel-stencil 0.0.128 → 0.0.130

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 (154) hide show
  1. package/dist/cjs/index-CUSIflVf.js +2 -2
  2. package/dist/cjs/{index-C7Read21.js → index-CfXjPLHb.js} +46 -28
  3. package/dist/cjs/index-CfXjPLHb.js.map +1 -0
  4. package/dist/cjs/index.cjs.js +1 -1
  5. package/dist/cjs/{kritzel-brush-style_22.cjs.entry.js → kritzel-brush-style_23.cjs.entry.js} +502 -438
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/stencil.cjs.js +1 -1
  8. package/dist/collection/classes/commands/add-object.command.js +2 -2
  9. package/dist/collection/classes/commands/add-object.command.js.map +1 -1
  10. package/dist/collection/classes/commands/add-selection-group.command.js +3 -3
  11. package/dist/collection/classes/commands/add-selection-group.command.js.map +1 -1
  12. package/dist/collection/classes/commands/remove-object.command.js +4 -4
  13. package/dist/collection/classes/commands/remove-object.command.js.map +1 -1
  14. package/dist/collection/classes/commands/remove-selection-group.command.js +2 -2
  15. package/dist/collection/classes/commands/remove-selection-group.command.js.map +1 -1
  16. package/dist/collection/classes/commands/rotate-selection-group.command.js +2 -2
  17. package/dist/collection/classes/commands/rotate-selection-group.command.js.map +1 -1
  18. package/dist/collection/classes/handlers/selection.handler.js +5 -5
  19. package/dist/collection/classes/handlers/selection.handler.js.map +1 -1
  20. package/dist/collection/classes/objects/base-object.class.js +1 -1
  21. package/dist/collection/classes/objects/base-object.class.js.map +1 -1
  22. package/dist/collection/classes/objects/path.class.js +1 -1
  23. package/dist/collection/classes/objects/path.class.js.map +1 -1
  24. package/dist/collection/classes/objects/selection-group.class.js +6 -6
  25. package/dist/collection/classes/objects/selection-group.class.js.map +1 -1
  26. package/dist/collection/classes/store.class.js +9 -22
  27. package/dist/collection/classes/store.class.js.map +1 -1
  28. package/dist/collection/classes/structures/object-map.structure.js +42 -0
  29. package/dist/collection/classes/structures/object-map.structure.js.map +1 -0
  30. package/dist/collection/collection-manifest.json +1 -0
  31. package/dist/collection/components/core/kritzel-editor/kritzel-editor.css +7 -0
  32. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +12 -2
  33. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
  34. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +17 -17
  35. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  36. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.css +15 -155
  37. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +167 -177
  38. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js.map +1 -1
  39. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.css +129 -0
  40. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +261 -0
  41. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js.map +1 -0
  42. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +160 -43
  43. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js.map +1 -1
  44. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.css +83 -74
  45. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +142 -118
  46. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js.map +1 -1
  47. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +1 -1
  48. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +4 -4
  49. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +2 -2
  50. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +2 -2
  51. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +5 -8
  52. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +3 -3
  53. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +1 -1
  54. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js +110 -88
  55. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js.map +1 -1
  56. package/dist/collection/configs/default-engine-state.js +1 -1
  57. package/dist/collection/configs/default-engine-state.js.map +1 -1
  58. package/dist/collection/helpers/keyboard.helper.js +18 -0
  59. package/dist/collection/helpers/keyboard.helper.js.map +1 -1
  60. package/dist/collection/index.js +1 -0
  61. package/dist/collection/index.js.map +1 -1
  62. package/dist/collection/interfaces/engine-state.interface.js.map +1 -1
  63. package/dist/collection/interfaces/menu-item.interface.js.map +1 -1
  64. package/dist/components/index.d.ts +2 -0
  65. package/dist/components/index.js +3 -2
  66. package/dist/components/index.js.map +1 -1
  67. package/dist/components/kritzel-control-brush-config.js +1 -1
  68. package/dist/components/kritzel-control-text-config.js +1 -1
  69. package/dist/components/kritzel-controls.js +1 -1
  70. package/dist/components/kritzel-editor.js +53 -39
  71. package/dist/components/kritzel-editor.js.map +1 -1
  72. package/dist/components/kritzel-engine.js +1 -1
  73. package/dist/components/kritzel-menu-item.d.ts +11 -0
  74. package/dist/components/kritzel-menu-item.js +9 -0
  75. package/dist/components/kritzel-menu-item.js.map +1 -0
  76. package/dist/components/kritzel-menu.js +1 -1
  77. package/dist/components/kritzel-portal.js +1 -1
  78. package/dist/components/kritzel-split-button.js +1 -1
  79. package/dist/components/kritzel-stroke-size.js +1 -1
  80. package/dist/components/kritzel-tooltip.js +1 -1
  81. package/dist/components/kritzel-utility-panel.js +1 -1
  82. package/dist/components/kritzel-workspace-manager.js +1 -1
  83. package/dist/components/{p-jG1e48OE.js → p-26poIWa_.js} +6 -6
  84. package/dist/components/{p-jG1e48OE.js.map → p-26poIWa_.js.map} +1 -1
  85. package/dist/components/{p-rQeWFfPG.js → p-BGccckxP.js} +3 -3
  86. package/dist/components/{p-rQeWFfPG.js.map → p-BGccckxP.js.map} +1 -1
  87. package/dist/components/p-BcQWRzsB.js +183 -0
  88. package/dist/components/p-BcQWRzsB.js.map +1 -0
  89. package/dist/components/p-C-DqsDXz.js +238 -0
  90. package/dist/components/p-C-DqsDXz.js.map +1 -0
  91. package/dist/components/{p-B7VrEdgP.js → p-C9-70hiF.js} +25 -7
  92. package/dist/components/p-C9-70hiF.js.map +1 -0
  93. package/dist/components/p-CJKA5zIE.js +10 -0
  94. package/dist/components/p-CJKA5zIE.js.map +1 -0
  95. package/dist/components/p-CaPdvVd4.js +127 -0
  96. package/dist/components/p-CaPdvVd4.js.map +1 -0
  97. package/dist/components/{p-a7KmQzo4.js → p-Cb1IUD_g.js} +5 -5
  98. package/dist/components/{p-a7KmQzo4.js.map → p-Cb1IUD_g.js.map} +1 -1
  99. package/dist/components/{p-BaKb8ZLg.js → p-Crni2OI4.js} +4 -4
  100. package/dist/components/{p-BaKb8ZLg.js.map → p-Crni2OI4.js.map} +1 -1
  101. package/dist/components/{p-BB22cVkU.js → p-D_Uh-xv_.js} +13 -18
  102. package/dist/components/p-D_Uh-xv_.js.map +1 -0
  103. package/dist/components/{p-BzSz74Ci.js → p-fyfT6A5K.js} +3 -3
  104. package/dist/components/{p-BzSz74Ci.js.map → p-fyfT6A5K.js.map} +1 -1
  105. package/dist/components/{p-D-zg05gA.js → p-jGaWxggY.js} +93 -179
  106. package/dist/components/p-jGaWxggY.js.map +1 -0
  107. package/dist/components/p-jpGLgpoq.js +237 -0
  108. package/dist/components/p-jpGLgpoq.js.map +1 -0
  109. package/dist/esm/{index-J4NpPimy.js → index-DqqxAoZI.js} +47 -29
  110. package/dist/esm/index-DqqxAoZI.js.map +1 -0
  111. package/dist/esm/index-NiIEUDzj.js +2 -2
  112. package/dist/esm/index.js +1 -1
  113. package/dist/esm/{kritzel-brush-style_22.entry.js → kritzel-brush-style_23.entry.js} +502 -439
  114. package/dist/esm/loader.js +1 -1
  115. package/dist/esm/stencil.js +1 -1
  116. package/dist/stencil/index.esm.js +1 -1
  117. package/dist/stencil/p-DqqxAoZI.js +2 -0
  118. package/dist/stencil/p-DqqxAoZI.js.map +1 -0
  119. package/dist/stencil/p-eebdbf65.entry.js +2 -0
  120. package/dist/stencil/p-eebdbf65.entry.js.map +1 -0
  121. package/dist/stencil/stencil.esm.js +1 -1
  122. package/dist/types/classes/structures/object-map.structure.d.ts +11 -0
  123. package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +3 -0
  124. package/dist/types/components/shared/kritzel-menu/kritzel-menu.d.ts +18 -18
  125. package/dist/types/components/shared/kritzel-menu-item/kritzel-menu-item.d.ts +26 -0
  126. package/dist/types/components/shared/kritzel-portal/kritzel-portal.d.ts +15 -10
  127. package/dist/types/components/shared/kritzel-split-button/kritzel-split-button.d.ts +25 -16
  128. package/dist/types/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.d.ts +18 -14
  129. package/dist/types/components.d.ts +90 -61
  130. package/dist/types/helpers/keyboard.helper.d.ts +1 -0
  131. package/dist/types/index.d.ts +1 -0
  132. package/dist/types/interfaces/engine-state.interface.d.ts +2 -2
  133. package/dist/types/interfaces/menu-item.interface.d.ts +21 -7
  134. package/package.json +1 -1
  135. package/dist/cjs/index-C7Read21.js.map +0 -1
  136. package/dist/collection/classes/structures/octree.structure.js +0 -115
  137. package/dist/collection/classes/structures/octree.structure.js.map +0 -1
  138. package/dist/components/p-B7VrEdgP.js.map +0 -1
  139. package/dist/components/p-BB22cVkU.js.map +0 -1
  140. package/dist/components/p-BmJbJwkH.js +0 -167
  141. package/dist/components/p-BmJbJwkH.js.map +0 -1
  142. package/dist/components/p-D-zg05gA.js.map +0 -1
  143. package/dist/components/p-DV4ERZv5.js +0 -112
  144. package/dist/components/p-DV4ERZv5.js.map +0 -1
  145. package/dist/components/p-hSuNJiIq.js +0 -152
  146. package/dist/components/p-hSuNJiIq.js.map +0 -1
  147. package/dist/components/p-sQmW5NRu.js +0 -156
  148. package/dist/components/p-sQmW5NRu.js.map +0 -1
  149. package/dist/esm/index-J4NpPimy.js.map +0 -1
  150. package/dist/stencil/p-4a0009e7.entry.js +0 -2
  151. package/dist/stencil/p-4a0009e7.entry.js.map +0 -1
  152. package/dist/stencil/p-J4NpPimy.js +0 -2
  153. package/dist/stencil/p-J4NpPimy.js.map +0 -1
  154. package/dist/types/classes/structures/octree.structure.d.ts +0 -18
@@ -9,7 +9,7 @@ export class KritzelStrokeSize {
9
9
  this.sizeChange.emit(size);
10
10
  }
11
11
  render() {
12
- return (h(Host, { key: '0185d3243c35c49169324c98f87df6a286fc3d31' }, this.sizes.map(size => (h("div", { class: {
12
+ return (h(Host, { key: 'f9f0fe49963655a2beeffe5c369ccbe018c8aa5e' }, this.sizes.map(size => (h("div", { class: {
13
13
  'size-container': true,
14
14
  'selected': this.selectedSize === size,
15
15
  }, onClick: () => this.handleSizeClick(size) }, h("kritzel-color", { value: '#000000', size: size }))))));
@@ -37,23 +37,23 @@ export class KritzelTooltip {
37
37
  }
38
38
  }
39
39
  render() {
40
- return (h(Host, { key: '7610e8185e037813cc363daa3212a4164a20daaf', style: {
40
+ return (h(Host, { key: '6eb67bcfd08234affe3724dff4d94ddf7907a1a7', style: {
41
41
  position: 'fixed',
42
42
  zIndex: '9999',
43
43
  transition: 'opacity 0.3s ease-in-out, transform 0.3s ease-in-out',
44
44
  visibility: this.isVisible ? 'visible' : 'hidden',
45
45
  left: !this.isMobileView ? `${this.positionX}px` : '50%',
46
46
  marginBottom: `${this.offsetY + this.arrowSize}px`,
47
- } }, h("div", { key: 'bd5c1f0f7ff3afddfcf2469277189d026e79b453', class: "tooltip-content", onClick: event => event.stopPropagation() }, h("slot", { key: '547e5a8fcb8131225461881a1ad0125fa4b0d55b' }), h("div", { key: 'de1d30c31667a81a36873d32bec20fcc911ec89f', class: "tooltip-arrow-wrapper", style: {
47
+ } }, h("div", { key: '9314b30b71200776e3728027b2ac7332cf4ab669', class: "tooltip-content", onClick: event => event.stopPropagation() }, h("slot", { key: '80cb8d0a8a91d9c816580cedc02fc9382fb07f8c' }), h("div", { key: '87fb2399463a0eb7beb1ca0f2c2867d8ff033f3a', class: "tooltip-arrow-wrapper", style: {
48
48
  position: 'fixed',
49
49
  left: this.arrowOffset,
50
50
  bottom: `-${this.arrowSize * 2}px`,
51
- } }, h("div", { key: 'ebbf83bd4d35e252b0258a7c81ebcef48ac10004', class: "tooltip-arrow", style: {
51
+ } }, h("div", { key: 'fc3953ad9b6aa5a4b2228653573fc3a7e37c0487', class: "tooltip-arrow", style: {
52
52
  borderLeft: `${this.arrowSize}px solid transparent`,
53
53
  borderRight: `${this.arrowSize}px solid transparent`,
54
54
  borderTop: `${this.arrowSize}px solid var(--kritzel-controls-tooltip-background-color, #ffffff)`,
55
55
  filter: 'drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2))',
56
- } }), h("div", { key: '918ca46c438657dc4f72ccc73f81d58076d637c5', class: "tooltip-arrow-rect", style: {
56
+ } }), h("div", { key: '5b8e4e3eb90c4c47c47fa47dc96e4149794e1732', class: "tooltip-arrow-rect", style: {
57
57
  position: 'relative',
58
58
  width: `${this.arrowSize * 2}px`,
59
59
  height: `${this.arrowSize}px`,
@@ -28,14 +28,14 @@ export class KritzelControlBrushConfig {
28
28
  this.toolChange.emit(this.tool);
29
29
  }
30
30
  render() {
31
- return (h(Host, { key: 'd099d1c6722678fdfb06c34eb0860e8819dd17ca' }, h("div", { key: '0856f0150666415ee452a0fcec5c76b6d25b82c4', style: {
31
+ return (h(Host, { key: 'a1f04aba4ed04e91c7b375e0f88bcff4fea1cba4' }, h("div", { key: 'c7cd734c96498c8cd6a27321fb6d11773e7aa8a9', style: {
32
32
  display: 'flex',
33
33
  flexDirection: 'row',
34
34
  alignItems: 'center',
35
35
  justifyContent: 'flex-start',
36
36
  width: '100%',
37
37
  gap: '8px',
38
- } }, h("kritzel-brush-style", { key: '364e6026d1b280a02c3618c7ded11f40c7e3cba4', type: this.tool.type, onTypeChange: event => this.handleTypeChange(event) }), h("button", { key: 'fc58c9ceb9e92ef8c79836e686b9a64653f91210', class: "expand-toggle", onClick: () => this.handleToggleExpand(), title: this.isExpanded ? 'Collapse' : 'Expand', style: this.palette.length > 6 ? { visibillity: 'visible' } : { visibility: 'hidden' } }, h("kritzel-icon", { key: 'ab219c72a9ace56853c725ba75767be2079a3c10', name: this.isExpanded ? 'chevron-up' : 'chevron-down' }))), h("kritzel-color-palette", { key: '8757c754217a3de88dad2c465ff748571716ae64', colors: this.palette, selectedColor: this.tool.color, isExpanded: this.isExpanded, isOpaque: true, onColorChange: color => this.handleColorChange(color) }), h("kritzel-stroke-size", { key: '056b227dd9a92b06588816739b55a80f5ce80835', selectedSize: this.tool.size, onSizeChange: event => this.handleSizeChange(event) })));
38
+ } }, h("kritzel-brush-style", { key: '67958dc2a34302eb23fabbafea3c7dc7863f1984', type: this.tool.type, onTypeChange: event => this.handleTypeChange(event) }), h("button", { key: '5c84a72d9f337dff253a161abe19acb832275272', class: "expand-toggle", onClick: () => this.handleToggleExpand(), title: this.isExpanded ? 'Collapse' : 'Expand', style: this.palette.length > 6 ? { visibillity: 'visible' } : { visibility: 'hidden' } }, h("kritzel-icon", { key: 'b3e0c44db35b53a584757e18b507df09f30bfa8a', name: this.isExpanded ? 'chevron-up' : 'chevron-down' }))), h("kritzel-color-palette", { key: 'eb098094ae69aa5901244f9686a3eb990271c07d', colors: this.palette, selectedColor: this.tool.color, isExpanded: this.isExpanded, isOpaque: true, onColorChange: color => this.handleColorChange(color) }), h("kritzel-stroke-size", { key: '18ae184b282ca2ec6511a6ac0065914edf66f91b', selectedSize: this.tool.size, onSizeChange: event => this.handleSizeChange(event) })));
39
39
  }
40
40
  static get is() { return "kritzel-control-brush-config"; }
41
41
  static get encapsulation() { return "shadow"; }
@@ -19,14 +19,14 @@ export class KritzelControlTextConfig {
19
19
  this.toolChange.emit(this.tool);
20
20
  }
21
21
  render() {
22
- return (h(Host, { key: 'f0d35cc43f1fe58a5a26f21dad99f1a733b66cce' }, h("div", { key: 'efc7d31c11460015a41185b4215e9ff45970abdd', style: {
22
+ return (h(Host, { key: 'a5c0e3eb4343637d758888d7d2a0843549fa0c25' }, h("div", { key: '1d4d42af117ed9da1a91d1747a7d6f6531e0de9b', style: {
23
23
  display: 'flex',
24
24
  flexDirection: 'row',
25
25
  alignItems: 'center',
26
26
  justifyContent: 'flex-start',
27
27
  width: '100%',
28
28
  gap: '8px',
29
- } }, h("kritzel-font-family", { key: '7f7d3ccb061d4b0e5e0f181ba4224f3de430a88c', selectedFontFamily: this.tool.fontFamily, onFontFamilyChange: event => this.handleFamilyChange(event) }), h("button", { key: '6676fcfa245874d54fa9933888c242c6f611c58c', class: "expand-toggle", onClick: () => this.handleToggleExpand(), title: this.isExpanded ? 'Collapse' : 'Expand' }, h("kritzel-icon", { key: '0734f636889c77f9087a2de2899a28ebd8df30a2', name: this.isExpanded ? 'chevron-up' : 'chevron-down' }))), h("kritzel-color-palette", { key: '68373ef79578d6a73028da681f1e3b0e8e3e5874', colors: this.tool.palette, selectedColor: this.tool.fontColor, isExpanded: this.isExpanded, onColorChange: event => this.handleColorChange(event) }), h("kritzel-font-size", { key: '56e6828f6ceaac3d37910b7d092a30bacbd84519', selectedSize: this.tool.fontSize, fontFamily: this.tool.fontFamily, onSizeChange: event => this.handleSizeChange(event) })));
29
+ } }, h("kritzel-font-family", { key: 'b19e1edcbc7bafb0829d3e173d33cff37d2a5959', selectedFontFamily: this.tool.fontFamily, onFontFamilyChange: event => this.handleFamilyChange(event) }), h("button", { key: 'ca3dce970ee5dd1a7c8c617127777859b45380c4', class: "expand-toggle", onClick: () => this.handleToggleExpand(), title: this.isExpanded ? 'Collapse' : 'Expand' }, h("kritzel-icon", { key: '241d82cd06db8d20794a369a4df6e6a71531131a', name: this.isExpanded ? 'chevron-up' : 'chevron-down' }))), h("kritzel-color-palette", { key: 'ec82e5c09046e70e904cc1ec9716c53bec9cac2b', colors: this.tool.palette, selectedColor: this.tool.fontColor, isExpanded: this.isExpanded, onColorChange: event => this.handleColorChange(event) }), h("kritzel-font-size", { key: '1cbddf6e6de21bd62f3803cca9e21ef9e01f15c0', selectedSize: this.tool.fontSize, fontFamily: this.tool.fontFamily, onSizeChange: event => this.handleSizeChange(event) })));
30
30
  }
31
31
  static get is() { return "kritzel-control-text-config"; }
32
32
  static get encapsulation() { return "shadow"; }
@@ -4,6 +4,11 @@
4
4
  user-select: none;
5
5
  }
6
6
 
7
+ :host(.mobile) {
8
+ --kritzel-controls-control-hover-background-color: transparent;
9
+ --kritzel-controls-control-active-background-color: transparent;
10
+ }
11
+
7
12
  .kritzel-controls {
8
13
  display: flex;
9
14
  flex-direction: row;
@@ -39,18 +44,10 @@
39
44
  background-color: var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%));
40
45
  }
41
46
 
42
- :host(.mobile) .kritzel-control:hover {
43
- background-color: unset;
44
- }
45
-
46
47
  .kritzel-control:active {
47
48
  background-color: var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%));
48
49
  }
49
50
 
50
- :host(.mobile) .kritzel-control:active {
51
- background-color: unset;
52
- }
53
-
54
51
  .kritzel-control.selected,
55
52
  .kritzel-control.selected:hover,
56
53
  .kritzel-control.selected:active {
@@ -93,13 +93,13 @@ export class KritzelControls {
93
93
  render() {
94
94
  var _a, _b;
95
95
  const hasNoConfig = ((_a = this.activeControl) === null || _a === void 0 ? void 0 : _a.config) === undefined || ((_b = this.activeControl) === null || _b === void 0 ? void 0 : _b.config) === null;
96
- return (h(Host, { key: 'af04746b6eaa04a51482cd9d25ba3ab303d631f1', class: {
96
+ return (h(Host, { key: '7ab1f3e176848cb9a34be7e7b90e13c2a861d78b', class: {
97
97
  mobile: this.isTouchDevice,
98
- } }, this.isUtilityPanelVisible && (h("kritzel-utility-panel", { key: 'd6ecb1087a332162f3fc809ed4321fc48f72c3e7', style: {
98
+ } }, this.isUtilityPanelVisible && (h("kritzel-utility-panel", { key: 'f168b27cb9cc3a1a7d0028055cd58c60cec9776f', style: {
99
99
  position: 'absolute',
100
100
  bottom: '56px',
101
101
  left: '12px',
102
- }, onUndo: () => { var _a; return (_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.undo(); }, onRedo: () => { var _a; return (_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.redo(); }, onDelete: () => { var _a; return (_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.delete(); } })), h("div", { key: '34723e47249d53fd544848d2d577deba4df1f131', class: "kritzel-controls" }, this.controls.map(control => {
102
+ }, onUndo: () => { var _a; return (_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.undo(); }, onRedo: () => { var _a; return (_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.redo(); }, onDelete: () => { var _a; return (_a = this.kritzelEngine) === null || _a === void 0 ? void 0 : _a.delete(); } })), h("div", { key: '9e568217b23632d73b051350d7f795f0cd7ab9ed', class: "kritzel-controls" }, this.controls.map(control => {
103
103
  var _a, _b, _c, _d, _e, _f, _g, _h;
104
104
  if (control.type === 'tool') {
105
105
  return (h("button", { class: {
@@ -13,7 +13,7 @@ export class KritzelUtilityPanel {
13
13
  this.redo.emit();
14
14
  }
15
15
  render() {
16
- return (h(Host, { key: 'cf7b5c501b6535fda22b17ea218e90bd60223c6e' }, h("button", { key: '05db2cee7f2e191674167ef503e70718200bf904', class: "utility-button", onClick: event => this.handleUndo(event) }, h("kritzel-icon", { key: '10412c038b9d4e66851c8a0c9b51b99607bac397', name: "undo" })), h("button", { key: 'edf0289de8ce5cddd9341bc1855eae095274226c', class: "utility-button", onClick: event => this.handleRedo(event) }, h("kritzel-icon", { key: '46263e3d3f166b224c9a18ba383085e020fac51a', name: "redo" })), h("div", { key: '3a6c0eca21f44887683d6308ca5741b095eceb77', class: "utility-separator" }), h("button", { key: 'ced83e0c47fc920edabdc5b3379a8805f1827374', class: "utility-button" }, h("kritzel-icon", { key: 'd49c6412d778d34fe21e86482f2114631621106a', name: "delete", onClick: () => this.delete.emit() }))));
16
+ return (h(Host, { key: '134058928a840d11fdc39849b35f08b21840fc0c' }, h("button", { key: '8d80cb496983b0709c06bacb12ca6819789aa47d', class: "utility-button", onClick: event => this.handleUndo(event) }, h("kritzel-icon", { key: 'c6733ef61ab6a272f80a580243fdd15063b8bf0c', name: "undo" })), h("button", { key: 'dc6147152bccd43ea54b9af20d019d305e550987', class: "utility-button", onClick: event => this.handleRedo(event) }, h("kritzel-icon", { key: '3ab8bced0f398a8d5f053cb0f388199fd2148bfc', name: "redo" })), h("div", { key: 'ebbfd25fb69faf2b669de20dc74a3dcabc01f489', class: "utility-separator" }), h("button", { key: 'd86caf8a7f2c2bc899b09871f555973137693eb9', class: "utility-button" }, h("kritzel-icon", { key: 'e1b4e9eef3d3ab2a2ddd1688818d4bcd2d7226c1', name: "delete", onClick: () => this.delete.emit() }))));
17
17
  }
18
18
  static get is() { return "kritzel-utility-panel"; }
19
19
  static get encapsulation() { return "shadow"; }
@@ -1,55 +1,17 @@
1
- import { Host, h } from "@stencil/core";
2
1
  import { KritzelWorkspace } from "../../../classes/workspace.class";
3
2
  import { ObjectHelper } from "../../../helpers/object.helper";
3
+ import { Host, h } from "@stencil/core";
4
4
  export class KritzelWorkspaceManager {
5
5
  constructor() {
6
6
  this.workspaces = [];
7
- this.editingIndex = null;
7
+ this.childMenuAnchor = null;
8
+ this.openChildMenuItem = null;
8
9
  this.newWorkspace = null;
9
- this.kritzelEngine = null;
10
- this.handleNewWorkspace = async () => {
11
- var _a;
12
- await ((_a = this.splitButtonRef) === null || _a === void 0 ? void 0 : _a.openMenu());
13
- requestAnimationFrame(() => {
14
- this.newWorkspace = new KritzelWorkspace(ObjectHelper.generateUUID(), 'New Workspace');
15
- this.editingIndex = 0;
16
- });
17
- };
18
- this.handleMenuClosed = () => {
19
- this.editingIndex = null;
20
- this.newWorkspace = null;
21
- };
22
- this.handleSave = async (item) => {
23
- const workspace = item.value;
24
- const updatedWorkspace = Object.assign(Object.assign({}, workspace), { name: item.label });
25
- if (this.newWorkspace) {
26
- await this.kritzelEngine.createWorkspace(updatedWorkspace);
27
- this.selectWorkspace(updatedWorkspace);
28
- }
29
- else {
30
- await this.kritzelEngine.updateWorkspace(updatedWorkspace);
31
- }
32
- this.editingIndex = null;
33
- this.newWorkspace = null;
34
- };
35
- this.handleRename = (index) => {
36
- this.editingIndex = index;
37
- };
38
- this.handleDelete = async (workspaceToDelete) => {
39
- var _a;
40
- await this.kritzelEngine.deleteWorkspace(workspaceToDelete);
41
- if (((_a = this.activeWorkspace) === null || _a === void 0 ? void 0 : _a.id) === workspaceToDelete.id) {
42
- const newActiveWorkspace = this.sortedWorkspaces.find(w => w.id !== workspaceToDelete.id) || null;
43
- this.selectWorkspace(newActiveWorkspace);
44
- }
45
- };
10
+ this.editingItemId = null;
11
+ this.kritzelEngineRef = null;
46
12
  }
47
13
  get sortedWorkspaces() {
48
- const uniqueWorkspaces = [...new Map(this.workspaces.map(workspace => [workspace.id, workspace])).values()];
49
- return [this.newWorkspace, ...uniqueWorkspaces].filter(ws => ws !== null).sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
50
- }
51
- get activeItemIndex() {
52
- return this.sortedWorkspaces.findIndex(ws => { var _a; return ws.id === ((_a = this.activeWorkspace) === null || _a === void 0 ? void 0 : _a.id); });
14
+ return [this.newWorkspace, ...this.workspaces].filter(ws => ws != null).sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
53
15
  }
54
16
  async componentWillLoad() {
55
17
  await this.initializeEngine();
@@ -57,42 +19,100 @@ export class KritzelWorkspaceManager {
57
19
  }
58
20
  async initializeEngine() {
59
21
  await customElements.whenDefined('kritzel-engine');
60
- this.kritzelEngine = this.host.parentElement.querySelector('kritzel-engine');
61
- if (!this.kritzelEngine) {
22
+ this.kritzelEngineRef = this.host.parentElement.querySelector('kritzel-engine');
23
+ if (!this.kritzelEngineRef) {
62
24
  throw new Error('kritzel-engine not found in parent element.');
63
25
  }
64
26
  }
65
- handleSelect(workspace) {
66
- this.selectWorkspace(workspace);
67
- }
68
- selectWorkspace(workspace) {
69
- if (this.editingIndex !== null)
27
+ async select(item, parent) {
28
+ if (this.editingItemId) {
29
+ return;
30
+ }
31
+ if (item.action) {
32
+ item.action(item, parent);
70
33
  return;
71
- this.activeWorkspace = this.sortedWorkspaces.find(ws => ws.id === workspace.id);
72
- this.workspaceChange.emit(workspace);
34
+ }
35
+ this.workspaceChange.emit(item.value);
36
+ }
37
+ async add() {
38
+ this.newWorkspace = new KritzelWorkspace(ObjectHelper.generateUUID(), 'New Workspace');
39
+ this.editingItemId = this.newWorkspace.id;
40
+ await this.splitButtonRef.open();
41
+ }
42
+ edit(item) {
43
+ this.openChildMenuItem = null;
44
+ this.childMenuAnchor = null;
45
+ requestAnimationFrame(() => {
46
+ this.editingItemId = item.id;
47
+ });
48
+ }
49
+ async save(item) {
50
+ if (this.newWorkspace) {
51
+ await this.kritzelEngineRef.createWorkspace(Object.assign(Object.assign({}, item.value), { name: item.label }));
52
+ this.workspaceChange.emit(this.newWorkspace);
53
+ }
54
+ else {
55
+ await this.kritzelEngineRef.updateWorkspace(Object.assign(Object.assign({}, item.value), { name: item.label }));
56
+ }
57
+ this.editingItemId = null;
58
+ this.newWorkspace = null;
59
+ }
60
+ cancel() {
61
+ this.newWorkspace = null;
62
+ this.editingItemId = null;
63
+ }
64
+ async delete(item) {
65
+ this.openChildMenuItem = null;
66
+ this.childMenuAnchor = null;
67
+ await this.kritzelEngineRef.deleteWorkspace(item.value);
68
+ }
69
+ toggleChildMenu(item, anchor) {
70
+ this.openChildMenuItem = item;
71
+ this.childMenuAnchor = anchor;
72
+ }
73
+ closeChildMenu() {
74
+ this.openChildMenuItem = null;
75
+ this.childMenuAnchor = null;
76
+ }
77
+ closeMenu() {
78
+ this.cancel();
79
+ this.closeChildMenu();
73
80
  }
74
81
  render() {
75
- const workspaceSelectionOptions = this.sortedWorkspaces.map((ws, index) => ({
76
- label: ws.name,
77
- value: ws,
78
- select: () => this.handleSelect(ws),
79
- cancel: this.handleMenuClosed,
80
- save: this.handleSave,
81
- children: [
82
- {
83
- label: 'Rename',
84
- value: 'rename',
85
- select: () => this.handleRename(index),
86
- },
87
- {
88
- label: 'Delete',
89
- value: 'delete',
90
- disabled: this.sortedWorkspaces.length <= 1,
91
- select: () => this.handleDelete(ws),
92
- },
93
- ],
94
- }));
95
- return (h(Host, { key: '1703451717d5583d6520edfbcdbe38a5b8f6840f' }, h("kritzel-split-button", { key: 'efd5d9b714ee72b23fd28c9b20ea6985957fe9b9', ref: el => (this.splitButtonRef = el), buttonIcon: "plus", options: workspaceSelectionOptions, activeItemIndex: this.activeItemIndex, editingIndex: this.editingIndex, onButtonClick: this.handleNewWorkspace, onMenuClosed: this.handleMenuClosed })));
82
+ console.log('render workspace manager');
83
+ const menuItems = this.sortedWorkspaces
84
+ .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime())
85
+ .filter(ws => ws !== null)
86
+ .map(ws => {
87
+ var _a, _b, _c, _d;
88
+ return {
89
+ id: ws.id,
90
+ label: ws.name,
91
+ value: ws,
92
+ isEditing: this.editingItemId === ws.id,
93
+ isSelected: ((_a = this.activeWorkspace) === null || _a === void 0 ? void 0 : _a.id) === ws.id,
94
+ isNewItem: ((_b = this.newWorkspace) === null || _b === void 0 ? void 0 : _b.id) === ws.id,
95
+ isChildMenuOpen: ((_c = this.openChildMenuItem) === null || _c === void 0 ? void 0 : _c.id) === ws.id,
96
+ childMenuAnchor: ((_d = this.openChildMenuItem) === null || _d === void 0 ? void 0 : _d.id) === ws.id ? this.childMenuAnchor : null,
97
+ children: [
98
+ {
99
+ id: `${ws.id}-rename`,
100
+ label: 'Rename',
101
+ value: 'rename',
102
+ action: (_item, parent) => this.edit(parent),
103
+ },
104
+ {
105
+ id: `${ws.id}-delete`,
106
+ label: 'Delete',
107
+ value: 'delete',
108
+ action: (_item, parent) => this.delete(parent),
109
+ },
110
+ ],
111
+ };
112
+ });
113
+ return (h(Host, null, h("kritzel-split-button", { ref: el => (this.splitButtonRef = el), items: menuItems, mainButtonDisabled: this.editingItemId != null, onButtonClick: () => this.add(), onItemSelect: event => this.select(event.detail.item, event.detail.parent), onItemToggleChildMenu: event => this.toggleChildMenu(event.detail.item, event.detail.childMenuAnchor), onItemSave: event => this.save(event.detail), onItemCancel: () => this.cancel(), onItemCloseChildMenu: () => this.closeChildMenu(), onClose: () => {
114
+ this.closeMenu();
115
+ } })));
96
116
  }
97
117
  static get is() { return "kritzel-workspace-manager"; }
98
118
  static get encapsulation() { return "shadow"; }
@@ -108,13 +128,13 @@ export class KritzelWorkspaceManager {
108
128
  }
109
129
  static get properties() {
110
130
  return {
111
- "workspaces": {
131
+ "activeWorkspace": {
112
132
  "type": "unknown",
113
- "attribute": "workspaces",
133
+ "attribute": "active-workspace",
114
134
  "mutable": false,
115
135
  "complexType": {
116
- "original": "KritzelWorkspace[]",
117
- "resolved": "KritzelWorkspace[]",
136
+ "original": "KritzelWorkspace",
137
+ "resolved": "KritzelWorkspace",
118
138
  "references": {
119
139
  "KritzelWorkspace": {
120
140
  "location": "import",
@@ -130,16 +150,15 @@ export class KritzelWorkspaceManager {
130
150
  "text": ""
131
151
  },
132
152
  "getter": false,
133
- "setter": false,
134
- "defaultValue": "[]"
153
+ "setter": false
135
154
  },
136
- "activeWorkspace": {
155
+ "workspaces": {
137
156
  "type": "unknown",
138
- "attribute": "active-workspace",
139
- "mutable": true,
157
+ "attribute": "workspaces",
158
+ "mutable": false,
140
159
  "complexType": {
141
- "original": "KritzelWorkspace",
142
- "resolved": "KritzelWorkspace",
160
+ "original": "KritzelWorkspace[]",
161
+ "resolved": "KritzelWorkspace[]",
143
162
  "references": {
144
163
  "KritzelWorkspace": {
145
164
  "location": "import",
@@ -155,14 +174,17 @@ export class KritzelWorkspaceManager {
155
174
  "text": ""
156
175
  },
157
176
  "getter": false,
158
- "setter": false
177
+ "setter": false,
178
+ "defaultValue": "[]"
159
179
  }
160
180
  };
161
181
  }
162
182
  static get states() {
163
183
  return {
164
- "editingIndex": {},
165
- "newWorkspace": {}
184
+ "childMenuAnchor": {},
185
+ "openChildMenuItem": {},
186
+ "newWorkspace": {},
187
+ "editingItemId": {}
166
188
  };
167
189
  }
168
190
  static get events() {
@@ -1 +1 @@
1
- {"version":3,"file":"kritzel-workspace-manager.js","sourceRoot":"","sources":["../../../../src/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAgB,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAQ9D,MAAM,OAAO,uBAAuB;IALpC;QAOE,eAAU,GAAuB,EAAE,CAAC;QAMpC,iBAAY,GAAkB,IAAI,CAAC;QAGnC,iBAAY,GAA4B,IAAI,CAAC;QAW7C,kBAAa,GAAoC,IAAI,CAAC;QA+B9C,uBAAkB,GAAG,KAAK,IAAI,EAAE;;YACtC,MAAM,CAAA,MAAA,IAAI,CAAC,cAAc,0CAAE,QAAQ,EAAE,CAAA,CAAC;YAEtC,qBAAqB,CAAC,GAAG,EAAE;gBACzB,IAAI,CAAC,YAAY,GAAG,IAAI,gBAAgB,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,eAAe,CAAC,CAAC;gBACvF,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEM,qBAAgB,GAAG,GAAG,EAAE;YAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC,CAAC;QAEM,eAAU,GAAG,KAAK,EAAE,IAAuC,EAAE,EAAE;YACrE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;YAC7B,MAAM,gBAAgB,mCAAQ,SAAS,KAAE,IAAI,EAAE,IAAI,CAAC,KAAK,GAAE,CAAC;YAE5D,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;gBAC3D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;YAC7D,CAAC;YACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC,CAAC;QAEM,iBAAY,GAAG,CAAC,KAAa,EAAE,EAAE;YACvC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5B,CAAC,CAAC;QAEM,iBAAY,GAAG,KAAK,EAAE,iBAAmC,EAAE,EAAE;;YACnE,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;YAE5D,IAAI,CAAA,MAAA,IAAI,CAAC,eAAe,0CAAE,EAAE,MAAK,iBAAiB,CAAC,EAAE,EAAE,CAAC;gBACtD,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,iBAAiB,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;gBAClG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC;KA4CH;IA9GC,IAAI,gBAAgB;QAClB,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5G,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,gBAAgB,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1I,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,WAAC,OAAA,EAAE,CAAC,EAAE,MAAK,MAAA,IAAI,CAAC,eAAe,0CAAE,EAAE,CAAA,CAAA,EAAA,CAAC,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9B,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,cAAc,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAE7E,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,SAA2B;QAC9C,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IA2CO,eAAe,CAAC,SAA2B;QACjD,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI;YAAE,OAAO;QACvC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,MAAM;QACJ,MAAM,yBAAyB,GAAwC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC/G,KAAK,EAAE,EAAE,CAAC,IAAI;YACd,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,gBAAgB;YAC7B,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,QAAQ,EAAE;gBACR;oBACE,KAAK,EAAE,QAAQ;oBACf,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;iBACvC;gBACD;oBACE,KAAK,EAAE,QAAQ;oBACf,KAAK,EAAE,QAAQ;oBACf,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC;oBAC3C,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;iBACpC;aACF;SACF,CAAC,CAAC,CAAC;QAEJ,OAAO,CACL,EAAC,IAAI;YACH,6EACE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,EACrC,UAAU,EAAC,MAAM,EACjB,OAAO,EAAE,yBAAyB,EAClC,eAAe,EAAE,IAAI,CAAC,eAAe,EACrC,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,aAAa,EAAE,IAAI,CAAC,kBAAkB,EACtC,YAAY,EAAE,IAAI,CAAC,gBAAgB,GACb,CACnB,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Element, Event, EventEmitter, Host, Prop, State, h } from '@stencil/core';\r\nimport { KritzelWorkspace } from '../../../classes/workspace.class';\r\nimport { ObjectHelper } from '../../../helpers/object.helper';\r\nimport { KritzelMenuItem } from '../../../interfaces/menu-item.interface';\r\n\r\n@Component({\r\n tag: 'kritzel-workspace-manager',\r\n styleUrl: 'kritzel-workspace-manager.css',\r\n shadow: true,\r\n})\r\nexport class KritzelWorkspaceManager {\r\n @Prop()\r\n workspaces: KritzelWorkspace[] = [];\r\n\r\n @Prop({ mutable: true })\r\n activeWorkspace: KritzelWorkspace;\r\n\r\n @State()\r\n editingIndex: number | null = null;\r\n\r\n @State()\r\n newWorkspace: KritzelWorkspace | null = null;\r\n\r\n @Event()\r\n isWorkspaceManagerReady: EventEmitter<void>;\r\n\r\n @Event()\r\n workspaceChange: EventEmitter<KritzelWorkspace>;\r\n\r\n @Element()\r\n host!: HTMLElement;\r\n\r\n kritzelEngine: HTMLKritzelEngineElement | null = null;\r\n\r\n splitButtonRef!: HTMLKritzelSplitButtonElement;\r\n\r\n get sortedWorkspaces() {\r\n const uniqueWorkspaces = [...new Map(this.workspaces.map(workspace => [workspace.id, workspace])).values()];\r\n return [this.newWorkspace, ...uniqueWorkspaces].filter(ws => ws !== null).sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());\r\n }\r\n\r\n get activeItemIndex() {\r\n return this.sortedWorkspaces.findIndex(ws => ws.id === this.activeWorkspace?.id);\r\n }\r\n\r\n async componentWillLoad() {\r\n await this.initializeEngine();\r\n this.isWorkspaceManagerReady.emit();\r\n }\r\n\r\n private async initializeEngine() {\r\n await customElements.whenDefined('kritzel-engine');\r\n this.kritzelEngine = this.host.parentElement.querySelector('kritzel-engine');\r\n\r\n if (!this.kritzelEngine) {\r\n throw new Error('kritzel-engine not found in parent element.');\r\n }\r\n }\r\n\r\n private handleSelect(workspace: KritzelWorkspace) {\r\n this.selectWorkspace(workspace);\r\n }\r\n\r\n private handleNewWorkspace = async () => {\r\n await this.splitButtonRef?.openMenu();\r\n\r\n requestAnimationFrame(() => {\r\n this.newWorkspace = new KritzelWorkspace(ObjectHelper.generateUUID(), 'New Workspace');\r\n this.editingIndex = 0;\r\n });\r\n };\r\n\r\n private handleMenuClosed = () => {\r\n this.editingIndex = null;\r\n this.newWorkspace = null;\r\n };\r\n\r\n private handleSave = async (item: KritzelMenuItem<KritzelWorkspace>) => {\r\n const workspace = item.value;\r\n const updatedWorkspace = { ...workspace, name: item.label };\r\n\r\n if (this.newWorkspace) {\r\n await this.kritzelEngine.createWorkspace(updatedWorkspace);\r\n this.selectWorkspace(updatedWorkspace);\r\n } else {\r\n await this.kritzelEngine.updateWorkspace(updatedWorkspace);\r\n }\r\n this.editingIndex = null;\r\n this.newWorkspace = null;\r\n };\r\n\r\n private handleRename = (index: number) => {\r\n this.editingIndex = index;\r\n };\r\n\r\n private handleDelete = async (workspaceToDelete: KritzelWorkspace) => {\r\n await this.kritzelEngine.deleteWorkspace(workspaceToDelete);\r\n\r\n if (this.activeWorkspace?.id === workspaceToDelete.id) {\r\n const newActiveWorkspace = this.sortedWorkspaces.find(w => w.id !== workspaceToDelete.id) || null;\r\n this.selectWorkspace(newActiveWorkspace);\r\n }\r\n };\r\n\r\n private selectWorkspace(workspace: KritzelWorkspace) {\r\n if (this.editingIndex !== null) return;\r\n this.activeWorkspace = this.sortedWorkspaces.find(ws => ws.id === workspace.id);\r\n this.workspaceChange.emit(workspace);\r\n }\r\n\r\n render() {\r\n const workspaceSelectionOptions: KritzelMenuItem<KritzelWorkspace>[] = this.sortedWorkspaces.map((ws, index) => ({\r\n label: ws.name,\r\n value: ws,\r\n select: () => this.handleSelect(ws),\r\n cancel: this.handleMenuClosed,\r\n save: this.handleSave,\r\n children: [\r\n {\r\n label: 'Rename',\r\n value: 'rename',\r\n select: () => this.handleRename(index),\r\n },\r\n {\r\n label: 'Delete',\r\n value: 'delete',\r\n disabled: this.sortedWorkspaces.length <= 1,\r\n select: () => this.handleDelete(ws),\r\n },\r\n ],\r\n }));\r\n\r\n return (\r\n <Host>\r\n <kritzel-split-button\r\n ref={el => (this.splitButtonRef = el)}\r\n buttonIcon=\"plus\"\r\n options={workspaceSelectionOptions}\r\n activeItemIndex={this.activeItemIndex}\r\n editingIndex={this.editingIndex}\r\n onButtonClick={this.handleNewWorkspace}\r\n onMenuClosed={this.handleMenuClosed}\r\n ></kritzel-split-button>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"kritzel-workspace-manager.js","sourceRoot":"","sources":["../../../../src/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAgB,OAAO,EAAE,MAAM,eAAe,CAAC;AAO9F,MAAM,OAAO,uBAAuB;IALpC;QASU,eAAU,GAAuB,EAAE,CAAC;QAKnC,oBAAe,GAAgB,IAAI,CAAC;QACpC,sBAAiB,GAAqB,IAAI,CAAC;QAC3C,iBAAY,GAA4B,IAAI,CAAC;QAC7C,kBAAa,GAAkB,IAAI,CAAC;QAE7C,qBAAgB,GAAoC,IAAI,CAAC;KAyI1D;IAtIC,IAAI,gBAAgB;QAClB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IACxI,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9B,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,cAAc,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACnD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAEhF,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,IAAsB,EAAE,MAAwB;QACnE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAEO,KAAK,CAAC,GAAG;QACf,IAAI,CAAC,YAAY,GAAG,IAAI,gBAAgB,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,eAAe,CAAC,CAAC;QACvF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAEO,IAAI,CAAC,IAAsB;QACjC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,qBAAqB,CAAC,GAAG,EAAE;YACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,IAAsB;QACvC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,iCAAM,IAAI,CAAC,KAAK,KAAE,IAAI,EAAE,IAAI,CAAC,KAAK,IAAG,CAAC;YACjF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,iCAAM,IAAI,CAAC,KAAK,KAAE,IAAI,EAAE,IAAI,CAAC,KAAK,IAAG,CAAC;QACnF,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAEO,MAAM;QACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,IAAsB;QACzC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IAEO,eAAe,CAAC,IAAsB,EAAE,MAAmB;QACjE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;IAChC,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED,MAAM;QACJ,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB;aACpC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;aAC7D,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;aACzB,GAAG,CAAC,EAAE,CAAC,EAAE;;YACR,OAAO;gBACL,EAAE,EAAE,EAAE,CAAC,EAAE;gBACT,KAAK,EAAE,EAAE,CAAC,IAAI;gBACd,KAAK,EAAE,EAAE;gBACT,SAAS,EAAE,IAAI,CAAC,aAAa,KAAK,EAAE,CAAC,EAAE;gBACvC,UAAU,EAAE,CAAA,MAAA,IAAI,CAAC,eAAe,0CAAE,EAAE,MAAK,EAAE,CAAC,EAAE;gBAC9C,SAAS,EAAE,CAAA,MAAA,IAAI,CAAC,YAAY,0CAAE,EAAE,MAAK,EAAE,CAAC,EAAE;gBAC1C,eAAe,EAAE,CAAA,MAAA,IAAI,CAAC,iBAAiB,0CAAE,EAAE,MAAK,EAAE,CAAC,EAAE;gBACrD,eAAe,EAAE,CAAA,MAAA,IAAI,CAAC,iBAAiB,0CAAE,EAAE,MAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;gBACnF,QAAQ,EAAE;oBACR;wBACE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS;wBACrB,KAAK,EAAE,QAAQ;wBACf,KAAK,EAAE,QAAQ;wBACf,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;qBAC7C;oBACD;wBACE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS;wBACrB,KAAK,EAAE,QAAQ;wBACf,KAAK,EAAE,QAAQ;wBACf,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;qBAC/C;iBACF;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEL,OAAO,CACL,EAAC,IAAI;YACH,4BACE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,EACrC,KAAK,EAAE,SAAS,EAChB,kBAAkB,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI,EAC9C,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAC/B,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAC1E,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,EACrG,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAC5C,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EACjC,oBAAoB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,EACjD,OAAO,EAAE,GAAG,EAAE;oBACZ,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,CAAC,GACqB,CACnB,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { KritzelWorkspace } from '../../../classes/workspace.class';\r\nimport { ObjectHelper } from '../../../helpers/object.helper';\r\nimport { IKritzelMenuItem } from '../../../interfaces/menu-item.interface';\r\nimport { Host, h, Component, State, Prop, Event, EventEmitter, Element } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'kritzel-workspace-manager',\r\n styleUrl: 'kritzel-workspace-manager.css',\r\n shadow: true,\r\n})\r\nexport class KritzelWorkspaceManager {\r\n @Element() host!: HTMLElement;\r\n\r\n @Prop() activeWorkspace: KritzelWorkspace;\r\n @Prop() workspaces: KritzelWorkspace[] = [];\r\n\r\n @Event() isWorkspaceManagerReady: EventEmitter<void>;\r\n @Event() workspaceChange: EventEmitter<KritzelWorkspace>;\r\n\r\n @State() childMenuAnchor: HTMLElement = null;\r\n @State() openChildMenuItem: IKritzelMenuItem = null;\r\n @State() newWorkspace: KritzelWorkspace | null = null;\r\n @State() editingItemId: string | null = null;\r\n\r\n kritzelEngineRef: HTMLKritzelEngineElement | null = null;\r\n splitButtonRef!: HTMLKritzelSplitButtonElement;\r\n\r\n get sortedWorkspaces() {\r\n return [this.newWorkspace, ...this.workspaces].filter(ws => ws != null).sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());\r\n }\r\n\r\n async componentWillLoad() {\r\n await this.initializeEngine();\r\n this.isWorkspaceManagerReady.emit();\r\n }\r\n\r\n private async initializeEngine() {\r\n await customElements.whenDefined('kritzel-engine');\r\n this.kritzelEngineRef = this.host.parentElement.querySelector('kritzel-engine');\r\n\r\n if (!this.kritzelEngineRef) {\r\n throw new Error('kritzel-engine not found in parent element.');\r\n }\r\n }\r\n\r\n private async select(item: IKritzelMenuItem, parent: IKritzelMenuItem) {\r\n if (this.editingItemId) {\r\n return;\r\n }\r\n\r\n if (item.action) {\r\n item.action(item, parent);\r\n return;\r\n }\r\n\r\n this.workspaceChange.emit(item.value);\r\n }\r\n\r\n private async add() {\r\n this.newWorkspace = new KritzelWorkspace(ObjectHelper.generateUUID(), 'New Workspace');\r\n this.editingItemId = this.newWorkspace.id;\r\n await this.splitButtonRef.open();\r\n }\r\n\r\n private edit(item: IKritzelMenuItem) {\r\n this.openChildMenuItem = null;\r\n this.childMenuAnchor = null;\r\n requestAnimationFrame(() => {\r\n this.editingItemId = item.id;\r\n });\r\n }\r\n\r\n private async save(item: IKritzelMenuItem) {\r\n if (this.newWorkspace) {\r\n await this.kritzelEngineRef.createWorkspace({ ...item.value, name: item.label });\r\n this.workspaceChange.emit(this.newWorkspace);\r\n } else {\r\n await this.kritzelEngineRef.updateWorkspace({ ...item.value, name: item.label });\r\n }\r\n\r\n this.editingItemId = null;\r\n this.newWorkspace = null;\r\n }\r\n\r\n private cancel() {\r\n this.newWorkspace = null;\r\n this.editingItemId = null;\r\n }\r\n\r\n private async delete(item: IKritzelMenuItem) {\r\n this.openChildMenuItem = null;\r\n this.childMenuAnchor = null;\r\n await this.kritzelEngineRef.deleteWorkspace(item.value);\r\n }\r\n\r\n private toggleChildMenu(item: IKritzelMenuItem, anchor: HTMLElement) {\r\n this.openChildMenuItem = item;\r\n this.childMenuAnchor = anchor;\r\n }\r\n\r\n private closeChildMenu() {\r\n this.openChildMenuItem = null;\r\n this.childMenuAnchor = null;\r\n }\r\n\r\n private closeMenu() {\r\n this.cancel();\r\n this.closeChildMenu();\r\n }\r\n\r\n render() {\r\n console.log('render workspace manager');\r\n const menuItems = this.sortedWorkspaces\r\n .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime())\r\n .filter(ws => ws !== null)\r\n .map(ws => {\r\n return {\r\n id: ws.id,\r\n label: ws.name,\r\n value: ws,\r\n isEditing: this.editingItemId === ws.id,\r\n isSelected: this.activeWorkspace?.id === ws.id,\r\n isNewItem: this.newWorkspace?.id === ws.id,\r\n isChildMenuOpen: this.openChildMenuItem?.id === ws.id,\r\n childMenuAnchor: this.openChildMenuItem?.id === ws.id ? this.childMenuAnchor : null,\r\n children: [\r\n {\r\n id: `${ws.id}-rename`,\r\n label: 'Rename',\r\n value: 'rename',\r\n action: (_item, parent) => this.edit(parent),\r\n },\r\n {\r\n id: `${ws.id}-delete`,\r\n label: 'Delete',\r\n value: 'delete',\r\n action: (_item, parent) => this.delete(parent),\r\n },\r\n ],\r\n };\r\n });\r\n\r\n return (\r\n <Host>\r\n <kritzel-split-button\r\n ref={el => (this.splitButtonRef = el)}\r\n items={menuItems}\r\n mainButtonDisabled={this.editingItemId != null}\r\n onButtonClick={() => this.add()}\r\n onItemSelect={event => this.select(event.detail.item, event.detail.parent)}\r\n onItemToggleChildMenu={event => this.toggleChildMenu(event.detail.item, event.detail.childMenuAnchor)}\r\n onItemSave={event => this.save(event.detail)}\r\n onItemCancel={() => this.cancel()}\r\n onItemCloseChildMenu={() => this.closeChildMenu()}\r\n onClose={() => {\r\n this.closeMenu();\r\n }}\r\n ></kritzel-split-button>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
@@ -4,7 +4,7 @@ export const DEFAULT_ENGINE_STATE = {
4
4
  activeText: null,
5
5
  currentPath: null,
6
6
  copiedObjects: null,
7
- objectsOctree: null,
7
+ objectsMap: null,
8
8
  selectionBox: null,
9
9
  selectionGroup: null,
10
10
  resizeHandleType: null,
@@ -1 +1 @@
1
- {"version":3,"file":"default-engine-state.js","sourceRoot":"","sources":["../../src/configs/default-engine-state.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAuB;IACtD,eAAe,EAAE,IAAI;IACrB,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,IAAI;IACjB,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,IAAI;IACnB,YAAY,EAAE,IAAI;IAClB,cAAc,EAAE,IAAI;IACpB,gBAAgB,EAAE,IAAI;IACtB,kBAAkB,EAAE,KAAK;IACzB,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,KAAK;IACjB,sBAAsB,EAAE,KAAK;IAC7B,UAAU,EAAE,KAAK;IACjB,wBAAwB,EAAE,KAAK;IAC/B,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,gBAAgB,EAAE,KAAK;IACvB,oBAAoB,EAAE,KAAK;IAC3B,gBAAgB,EAAE,EAAE;IACpB,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,CAAC;IACf,eAAe,EAAE,KAAK;IACtB,SAAS,EAAE;QACT,cAAc,EAAE,KAAK;QACrB,gBAAgB,EAAE,KAAK;QACvB,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,KAAK;KACnB;IACD,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,KAAK;IAChB,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,GAAG;IAClB,aAAa,EAAE,CAAC;IAChB,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,GAAG;IAClB,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC;IACjB,iBAAiB,EAAE,IAAI;IACvB,gBAAgB,EAAE,IAAI;IACtB,cAAc,EAAE,GAAG;IACnB,QAAQ,EAAE,IAAI,GAAG,EAAwB;IACzC,UAAU,EAAE,EAAE;CACf,CAAC","sourcesContent":["import { KritzelEngineState } from \"../interfaces/engine-state.interface\";\r\n\r\nexport const DEFAULT_ENGINE_STATE: KritzelEngineState = {\r\n activeWorkspace: null,\r\n activeTool: null,\r\n activeText: null,\r\n currentPath: null,\r\n copiedObjects: null,\r\n objectsOctree: null,\r\n selectionBox: null,\r\n selectionGroup: null,\r\n resizeHandleType: null,\r\n hasViewportChanged: false,\r\n isReady: false,\r\n isEnabled: true,\r\n isScaling: false,\r\n isPanning: false,\r\n isFocused: false,\r\n isSelecting: false,\r\n isResizing: false,\r\n isResizeHandleSelected: false,\r\n isRotating: false,\r\n isRotationHandleSelected: false,\r\n isDragging: false,\r\n isDrawing: false,\r\n isErasing: false,\r\n isWriting: false,\r\n isCtrlKeyPressed: false,\r\n isContextMenuVisible: false,\r\n contextMenuItems: [],\r\n contextMenuX: 0,\r\n contextMenuY: 0,\r\n skipContextMenu: false,\r\n debugInfo: {\r\n showObjectInfo: false,\r\n showViewportInfo: false,\r\n logCommands: false,\r\n logDatabase: false,\r\n },\r\n host: null,\r\n pointerX: 0,\r\n pointerY: 0,\r\n scale: 1,\r\n scaleMax: 1,\r\n scaleMin: 1,\r\n scaleStep: 0.075,\r\n startX: 0,\r\n startY: 0,\r\n translateX: 0,\r\n translateXMax: 400,\r\n translateXMin: 0,\r\n translateY: 0,\r\n translateYMax: 400,\r\n translateYMin: 0,\r\n viewportWidth: 0,\r\n viewportHeight: 0,\r\n historyBufferSize: 1000,\r\n longTouchTimeout: null,\r\n longTouchDelay: 300,\r\n pointers: new Map<number, PointerEvent>(),\r\n workspaces: [],\r\n};"]}
1
+ {"version":3,"file":"default-engine-state.js","sourceRoot":"","sources":["../../src/configs/default-engine-state.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAuB;IACtD,eAAe,EAAE,IAAI;IACrB,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,IAAI;IACjB,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,IAAI;IAClB,cAAc,EAAE,IAAI;IACpB,gBAAgB,EAAE,IAAI;IACtB,kBAAkB,EAAE,KAAK;IACzB,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,KAAK;IACjB,sBAAsB,EAAE,KAAK;IAC7B,UAAU,EAAE,KAAK;IACjB,wBAAwB,EAAE,KAAK;IAC/B,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,gBAAgB,EAAE,KAAK;IACvB,oBAAoB,EAAE,KAAK;IAC3B,gBAAgB,EAAE,EAAE;IACpB,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,CAAC;IACf,eAAe,EAAE,KAAK;IACtB,SAAS,EAAE;QACT,cAAc,EAAE,KAAK;QACrB,gBAAgB,EAAE,KAAK;QACvB,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,KAAK;KACnB;IACD,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,KAAK;IAChB,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,GAAG;IAClB,aAAa,EAAE,CAAC;IAChB,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,GAAG;IAClB,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC;IACjB,iBAAiB,EAAE,IAAI;IACvB,gBAAgB,EAAE,IAAI;IACtB,cAAc,EAAE,GAAG;IACnB,QAAQ,EAAE,IAAI,GAAG,EAAwB;IACzC,UAAU,EAAE,EAAE;CACf,CAAC","sourcesContent":["import { KritzelEngineState } from \"../interfaces/engine-state.interface\";\r\n\r\nexport const DEFAULT_ENGINE_STATE: KritzelEngineState = {\r\n activeWorkspace: null,\r\n activeTool: null,\r\n activeText: null,\r\n currentPath: null,\r\n copiedObjects: null,\r\n objectsMap: null,\r\n selectionBox: null,\r\n selectionGroup: null,\r\n resizeHandleType: null,\r\n hasViewportChanged: false,\r\n isReady: false,\r\n isEnabled: true,\r\n isScaling: false,\r\n isPanning: false,\r\n isFocused: false,\r\n isSelecting: false,\r\n isResizing: false,\r\n isResizeHandleSelected: false,\r\n isRotating: false,\r\n isRotationHandleSelected: false,\r\n isDragging: false,\r\n isDrawing: false,\r\n isErasing: false,\r\n isWriting: false,\r\n isCtrlKeyPressed: false,\r\n isContextMenuVisible: false,\r\n contextMenuItems: [],\r\n contextMenuX: 0,\r\n contextMenuY: 0,\r\n skipContextMenu: false,\r\n debugInfo: {\r\n showObjectInfo: false,\r\n showViewportInfo: false,\r\n logCommands: false,\r\n logDatabase: false,\r\n },\r\n host: null,\r\n pointerX: 0,\r\n pointerY: 0,\r\n scale: 1,\r\n scaleMax: 1,\r\n scaleMin: 1,\r\n scaleStep: 0.075,\r\n startX: 0,\r\n startY: 0,\r\n translateX: 0,\r\n translateXMax: 400,\r\n translateXMin: 0,\r\n translateY: 0,\r\n translateYMax: 400,\r\n translateYMin: 0,\r\n viewportWidth: 0,\r\n viewportHeight: 0,\r\n historyBufferSize: 1000,\r\n longTouchTimeout: null,\r\n longTouchDelay: 300,\r\n pointers: new Map<number, PointerEvent>(),\r\n workspaces: [],\r\n};"]}
@@ -27,5 +27,23 @@ export class KritzelKeyboardHelper {
27
27
  meta.setAttribute('content', newContent);
28
28
  }
29
29
  }
30
+ static onKeyboardVisibleChanged(callback) {
31
+ if ('visualViewport' in window) {
32
+ const VIEWPORT_VS_CLIENT_HEIGHT_RATIO = 0.75;
33
+ const onResize = (event) => {
34
+ const target = event.target;
35
+ const isOpen = (target.height * target.scale) / window.screen.height < VIEWPORT_VS_CLIENT_HEIGHT_RATIO;
36
+ callback(isOpen);
37
+ };
38
+ window.visualViewport.addEventListener('resize', onResize);
39
+ return () => window.visualViewport.removeEventListener('resize', onResize);
40
+ }
41
+ else {
42
+ // Fallback for older browsers does not provide a reliable event-based mechanism.
43
+ console.warn('Listening for keyboard visibility changes is not reliably supported in this browser.');
44
+ // Return a no-op cleanup function.
45
+ return () => { };
46
+ }
47
+ }
30
48
  }
31
49
  //# sourceMappingURL=keyboard.helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"keyboard.helper.js","sourceRoot":"","sources":["../../src/helpers/keyboard.helper.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,qBAAqB;IAChC,MAAM,CAAC,iBAAiB;QACtB,IAAI,QAAQ,CAAC,aAAa,YAAY,WAAW,EAAE,CAAC;YAClD,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,uBAAuB;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,sEAAsE,CAAC,CAAC;QAC5G,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,oCAAoC,CAAC,EAAE,CAAC;gBACnE,cAAc,IAAI,sCAAsC,CAAC;YAC3D,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,MAAM,CAAC,wBAAwB;QAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,sEAAsE,CAAC,CAAC;QAC5G,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,gDAAgD,EAAE,EAAE,CAAC,CAAC;YAC9F,UAAU,GAAG,UAAU;iBACpB,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;iBACzB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;iBACjB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;iBACjB,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;CACF","sourcesContent":["export class KritzelKeyboardHelper {\r\n static forceHideKeyboard(): void {\r\n if (document.activeElement instanceof HTMLElement) {\r\n document.activeElement.blur();\r\n }\r\n }\r\n\r\n static enableInteractiveWidget(): void {\r\n const meta = document.querySelector('meta[name=\"viewport\"][content*=\"interactive-widget=resizes-content\"]');\r\n if (meta) {\r\n let currentContent = meta.getAttribute('content');\r\n if (!currentContent.includes('interactive-widget=resizes-content')) {\r\n currentContent += ', interactive-widget=resizes-content';\r\n }\r\n meta.setAttribute('content', currentContent);\r\n }\r\n }\r\n\r\n static disableInteractiveWidget(): void {\r\n const meta = document.querySelector('meta[name=\"viewport\"][content*=\"interactive-widget=resizes-content\"]');\r\n if (meta) {\r\n let currentContent = meta.getAttribute('content');\r\n let newContent = currentContent.replace(/\\s*interactive-widget=resizes-content\\s*[,;]?/g, '');\r\n newContent = newContent\r\n .replace(/,(\\s*,)+/g, ',')\r\n .replace(/^,/, '')\r\n .replace(/,$/, '')\r\n .trim();\r\n meta.setAttribute('content', newContent);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"keyboard.helper.js","sourceRoot":"","sources":["../../src/helpers/keyboard.helper.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,qBAAqB;IAChC,MAAM,CAAC,iBAAiB;QACtB,IAAI,QAAQ,CAAC,aAAa,YAAY,WAAW,EAAE,CAAC;YAClD,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,uBAAuB;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,sEAAsE,CAAC,CAAC;QAC5G,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,oCAAoC,CAAC,EAAE,CAAC;gBACnE,cAAc,IAAI,sCAAsC,CAAC;YAC3D,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,MAAM,CAAC,wBAAwB;QAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,sEAAsE,CAAC,CAAC;QAC5G,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,gDAAgD,EAAE,EAAE,CAAC,CAAC;YAC9F,UAAU,GAAG,UAAU;iBACpB,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;iBACzB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;iBACjB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;iBACjB,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,QAAmC;QACjE,IAAI,gBAAgB,IAAI,MAAM,EAAE,CAAC;YAC/B,MAAM,+BAA+B,GAAG,IAAI,CAAC;YAC7C,MAAM,QAAQ,GAAG,CAAC,KAAY,EAAE,EAAE;gBAChC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAwB,CAAC;gBAC9C,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,+BAA+B,CAAC;gBACvG,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnB,CAAC,CAAC;YAEF,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC3D,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,iFAAiF;YACjF,OAAO,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAC;YACrG,mCAAmC;YACnC,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF","sourcesContent":["export class KritzelKeyboardHelper {\r\n static forceHideKeyboard(): void {\r\n if (document.activeElement instanceof HTMLElement) {\r\n document.activeElement.blur();\r\n }\r\n }\r\n\r\n static enableInteractiveWidget(): void {\r\n const meta = document.querySelector('meta[name=\"viewport\"][content*=\"interactive-widget=resizes-content\"]');\r\n if (meta) {\r\n let currentContent = meta.getAttribute('content');\r\n if (!currentContent.includes('interactive-widget=resizes-content')) {\r\n currentContent += ', interactive-widget=resizes-content';\r\n }\r\n meta.setAttribute('content', currentContent);\r\n }\r\n }\r\n\r\n static disableInteractiveWidget(): void {\r\n const meta = document.querySelector('meta[name=\"viewport\"][content*=\"interactive-widget=resizes-content\"]');\r\n if (meta) {\r\n let currentContent = meta.getAttribute('content');\r\n let newContent = currentContent.replace(/\\s*interactive-widget=resizes-content\\s*[,;]?/g, '');\r\n newContent = newContent\r\n .replace(/,(\\s*,)+/g, ',')\r\n .replace(/^,/, '')\r\n .replace(/,$/, '')\r\n .trim();\r\n meta.setAttribute('content', newContent);\r\n }\r\n }\r\n\r\n static onKeyboardVisibleChanged(callback: (isOpen: boolean) => void): () => void {\r\n if ('visualViewport' in window) {\r\n const VIEWPORT_VS_CLIENT_HEIGHT_RATIO = 0.75;\r\n const onResize = (event: Event) => {\r\n const target = event.target as VisualViewport;\r\n const isOpen = (target.height * target.scale) / window.screen.height < VIEWPORT_VS_CLIENT_HEIGHT_RATIO;\r\n callback(isOpen);\r\n };\r\n\r\n window.visualViewport.addEventListener('resize', onResize);\r\n return () => window.visualViewport.removeEventListener('resize', onResize);\r\n } else {\r\n // Fallback for older browsers does not provide a reliable event-based mechanism.\r\n console.warn('Listening for keyboard visibility changes is not reliably supported in this browser.');\r\n // Return a no-op cleanup function.\r\n return () => {};\r\n }\r\n }\r\n}\r\n"]}
@@ -16,6 +16,7 @@ export * from './classes/tools/image-tool.class';
16
16
  export * from './classes/tools/text-tool.class';
17
17
  export * from './classes/tools/selection-tool.class';
18
18
  export * from './interfaces/toolbar-control.interface';
19
+ export * from './interfaces/menu-item.interface';
19
20
  export * from './configs/default-brush-tool.config';
20
21
  export * from './configs/default-text-tool.config';
21
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AAErD,cAAc,wCAAwC,CAAC;AAEvD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC","sourcesContent":["/**\r\n * @fileoverview entry point for your component library\r\n *\r\n * This is the entry point for your component library. Use this file to export utilities,\r\n * constants or data structure that accompany your components.\r\n *\r\n * DO NOT use this file to export your components. Instead, use the recommended approaches\r\n * to consume components of this package as outlined in the `README.md`.\r\n */\r\n\r\nexport type * from './components';\r\n\r\nexport * from './classes/objects/text.class';\r\nexport * from './classes/objects/path.class';\r\nexport * from './classes/objects/image.class';\r\n\r\nexport * from './classes/tools/brush-tool.class';\r\nexport * from './classes/tools/eraser-tool.class';\r\nexport * from './classes/tools/image-tool.class';\r\nexport * from './classes/tools/text-tool.class';\r\nexport * from './classes/tools/selection-tool.class';\r\n\r\nexport * from './interfaces/toolbar-control.interface';\r\n\r\nexport * from './configs/default-brush-tool.config';\r\nexport * from './configs/default-text-tool.config';\r\n\r\n\r\n\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AAErD,cAAc,wCAAwC,CAAC;AACvD,cAAc,kCAAkC,CAAC;AAEjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC","sourcesContent":["/**\r\n * @fileoverview entry point for your component library\r\n *\r\n * This is the entry point for your component library. Use this file to export utilities,\r\n * constants or data structure that accompany your components.\r\n *\r\n * DO NOT use this file to export your components. Instead, use the recommended approaches\r\n * to consume components of this package as outlined in the `README.md`.\r\n */\r\n\r\nexport type * from './components';\r\n\r\nexport * from './classes/objects/text.class';\r\nexport * from './classes/objects/path.class';\r\nexport * from './classes/objects/image.class';\r\n\r\nexport * from './classes/tools/brush-tool.class';\r\nexport * from './classes/tools/eraser-tool.class';\r\nexport * from './classes/tools/image-tool.class';\r\nexport * from './classes/tools/text-tool.class';\r\nexport * from './classes/tools/selection-tool.class';\r\n\r\nexport * from './interfaces/toolbar-control.interface';\r\nexport * from './interfaces/menu-item.interface';\r\n\r\nexport * from './configs/default-brush-tool.config';\r\nexport * from './configs/default-text-tool.config';\r\n\r\n\r\n\r\n\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"engine-state.interface.js","sourceRoot":"","sources":["../../src/interfaces/engine-state.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { KritzelBaseObject } from \"../classes/objects/base-object.class\";\r\nimport { KritzelPath } from \"../classes/objects/path.class\";\r\nimport { KrtizelSelectionBox } from \"../classes/objects/selection-box.class\";\r\nimport { KritzelSelectionGroup } from \"../classes/objects/selection-group.class\";\r\nimport { KritzelText } from \"../classes/objects/text.class\";\r\nimport { KritzelOctree } from \"../classes/structures/octree.structure\";\r\nimport { KritzelBaseTool } from \"../classes/tools/base-tool.class\";\r\nimport { KritzelWorkspace } from \"../classes/workspace.class\";\r\nimport { KritzelHandleType } from \"../enums/handle-type.enum\";\r\nimport { ContextMenuItem } from \"./context-menu-item.interface\";\r\nimport { KritzelDebugInfo } from \"./debug-info.interface\";\r\n\r\nexport interface KritzelEngineState {\r\n activeWorkspace: KritzelWorkspace;\r\n activeTool: KritzelBaseTool;\r\n activeText: KritzelText;\r\n currentPath?: KritzelPath;\r\n copiedObjects?: KritzelSelectionGroup;\r\n objectsOctree: KritzelOctree<KritzelBaseObject<Element>>;\r\n selectionBox?: KrtizelSelectionBox;\r\n selectionGroup?: KritzelSelectionGroup;\r\n resizeHandleType: KritzelHandleType;\r\n hasViewportChanged: boolean;\r\n isReady: boolean;\r\n isEnabled: boolean;\r\n isScaling: boolean;\r\n isPanning: boolean;\r\n isFocused: boolean;\r\n isSelecting: boolean;\r\n isResizing: boolean;\r\n isResizeHandleSelected: boolean;\r\n isRotating: boolean;\r\n isRotationHandleSelected: boolean;\r\n isDragging: boolean;\r\n isDrawing: boolean;\r\n isErasing: boolean;\r\n isWriting: boolean;\r\n isCtrlKeyPressed: boolean;\r\n isContextMenuVisible: boolean;\r\n contextMenuItems: ContextMenuItem[];\r\n contextMenuX: number;\r\n contextMenuY: number;\r\n skipContextMenu: boolean;\r\n debugInfo: KritzelDebugInfo;\r\n host: HTMLElement;\r\n pointerX: number;\r\n pointerY: number;\r\n scale: number;\r\n scaleMax: number;\r\n scaleMin: number;\r\n scaleStep: number;\r\n startX: number;\r\n startY: number;\r\n translateX: number;\r\n translateXMax: number;\r\n translateXMin: number;\r\n translateY: number;\r\n translateYMax: number;\r\n translateYMin: number;\r\n viewportWidth: number;\r\n viewportHeight: number;\r\n historyBufferSize: number;\r\n longTouchTimeout: number;\r\n longTouchDelay: number;\r\n pointers: Map<number, PointerEvent>;\r\n workspaces: KritzelWorkspace[];\r\n}"]}
1
+ {"version":3,"file":"engine-state.interface.js","sourceRoot":"","sources":["../../src/interfaces/engine-state.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { KritzelBaseObject } from \"../classes/objects/base-object.class\";\r\nimport { KritzelPath } from \"../classes/objects/path.class\";\r\nimport { KrtizelSelectionBox } from \"../classes/objects/selection-box.class\";\r\nimport { KritzelSelectionGroup } from \"../classes/objects/selection-group.class\";\r\nimport { KritzelText } from \"../classes/objects/text.class\";\r\nimport { KritzelObjectMap } from \"../classes/structures/object-map.structure\";\r\nimport { KritzelBaseTool } from \"../classes/tools/base-tool.class\";\r\nimport { KritzelWorkspace } from \"../classes/workspace.class\";\r\nimport { KritzelHandleType } from \"../enums/handle-type.enum\";\r\nimport { ContextMenuItem } from \"./context-menu-item.interface\";\r\nimport { KritzelDebugInfo } from \"./debug-info.interface\";\r\n\r\nexport interface KritzelEngineState {\r\n activeWorkspace: KritzelWorkspace;\r\n activeTool: KritzelBaseTool;\r\n activeText: KritzelText;\r\n currentPath?: KritzelPath;\r\n copiedObjects?: KritzelSelectionGroup;\r\n objectsMap: KritzelObjectMap<KritzelBaseObject<Element>>;\r\n selectionBox?: KrtizelSelectionBox;\r\n selectionGroup?: KritzelSelectionGroup;\r\n resizeHandleType: KritzelHandleType;\r\n hasViewportChanged: boolean;\r\n isReady: boolean;\r\n isEnabled: boolean;\r\n isScaling: boolean;\r\n isPanning: boolean;\r\n isFocused: boolean;\r\n isSelecting: boolean;\r\n isResizing: boolean;\r\n isResizeHandleSelected: boolean;\r\n isRotating: boolean;\r\n isRotationHandleSelected: boolean;\r\n isDragging: boolean;\r\n isDrawing: boolean;\r\n isErasing: boolean;\r\n isWriting: boolean;\r\n isCtrlKeyPressed: boolean;\r\n isContextMenuVisible: boolean;\r\n contextMenuItems: ContextMenuItem[];\r\n contextMenuX: number;\r\n contextMenuY: number;\r\n skipContextMenu: boolean;\r\n debugInfo: KritzelDebugInfo;\r\n host: HTMLElement;\r\n pointerX: number;\r\n pointerY: number;\r\n scale: number;\r\n scaleMax: number;\r\n scaleMin: number;\r\n scaleStep: number;\r\n startX: number;\r\n startY: number;\r\n translateX: number;\r\n translateXMax: number;\r\n translateXMin: number;\r\n translateY: number;\r\n translateYMax: number;\r\n translateYMin: number;\r\n viewportWidth: number;\r\n viewportHeight: number;\r\n historyBufferSize: number;\r\n longTouchTimeout: number;\r\n longTouchDelay: number;\r\n pointers: Map<number, PointerEvent>;\r\n workspaces: KritzelWorkspace[];\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-item.interface.js","sourceRoot":"","sources":["../../src/interfaces/menu-item.interface.ts"],"names":[],"mappings":"","sourcesContent":["export interface KritzelMenuItem<T = any> {\r\n value: T;\r\n label: string;\r\n select?: (item: KritzelMenuItem) => void;\r\n save?: (item: KritzelMenuItem) => void;\r\n cancel?: (item: KritzelMenuItem) => void;\r\n disabled?: boolean;\r\n children?: KritzelMenuItem[];\r\n}"]}
1
+ {"version":3,"file":"menu-item.interface.js","sourceRoot":"","sources":["../../src/interfaces/menu-item.interface.ts"],"names":[],"mappings":"","sourcesContent":["export interface IKritzelMenuItem<T = any> {\r\n id: string;\r\n label: string;\r\n value?: T;\r\n children?: IKritzelMenuItem[];\r\n isSelectable?: boolean;\r\n isSelected?: boolean;\r\n isEditing?: boolean;\r\n isDisabled?: boolean;\r\n isChildMenuOpen?: boolean;\r\n isNewItem?: boolean;\r\n childMenuAnchor?: HTMLElement;\r\n unchangedState?: Partial<IKritzelMenuItem>;\r\n action?: (item: IKritzelMenuItem, parent: IKritzelMenuItem) => void;\r\n}\r\n\r\nexport interface IKritzelMenuItemSelectEvent {\r\n item: IKritzelMenuItem;\r\n parent: IKritzelMenuItem;\r\n}\r\n\r\nexport interface IKritzelMenuItemToggleChildMenuEvent {\r\n item: IKritzelMenuItem;\r\n childMenuAnchor: HTMLElement;\r\n}\r\n"]}
@@ -31,6 +31,8 @@ export { KritzelIcon as KritzelIcon } from '../types/components/shared/kritzel-i
31
31
  export { defineCustomElement as defineCustomElementKritzelIcon } from './kritzel-icon';
32
32
  export { KritzelMenu as KritzelMenu } from '../types/components/shared/kritzel-menu/kritzel-menu';
33
33
  export { defineCustomElement as defineCustomElementKritzelMenu } from './kritzel-menu';
34
+ export { KritzelMenuItem as KritzelMenuItem } from '../types/components/shared/kritzel-menu-item/kritzel-menu-item';
35
+ export { defineCustomElement as defineCustomElementKritzelMenuItem } from './kritzel-menu-item';
34
36
  export { KritzelPortal as KritzelPortal } from '../types/components/shared/kritzel-portal/kritzel-portal';
35
37
  export { defineCustomElement as defineCustomElementKritzelPortal } from './kritzel-portal';
36
38
  export { KritzelSplitButton as KritzelSplitButton } from '../types/components/shared/kritzel-split-button/kritzel-split-button';
@@ -1,6 +1,6 @@
1
1
  export { g as getAssetPath, r as render, s as setAssetPath, a as setNonce, b as setPlatformOptions } from './p-BqrTPNyu.js';
2
- export { b as KritzelBrushTool, a as KritzelPath, K as KritzelText, c as KritzelTextTool } from './p-B7VrEdgP.js';
3
- export { a as KritzelEraserTool, K as KritzelImage, b as KritzelImageTool, c as KritzelSelectionTool } from './p-D-zg05gA.js';
2
+ export { b as KritzelBrushTool, a as KritzelPath, K as KritzelText, c as KritzelTextTool } from './p-C9-70hiF.js';
3
+ export { a as KritzelEraserTool, K as KritzelImage, b as KritzelImageTool, c as KritzelSelectionTool } from './p-jGaWxggY.js';
4
4
  export { D as DEFAULT_BRUSH_CONFIG, a as DEFAULT_TEXT_CONFIG, KritzelEditor, defineCustomElement as defineCustomElementKritzelEditor } from './kritzel-editor.js';
5
5
  export { KritzelBrushStyle, defineCustomElement as defineCustomElementKritzelBrushStyle } from './kritzel-brush-style.js';
6
6
  export { KritzelColor, defineCustomElement as defineCustomElementKritzelColor } from './kritzel-color.js';
@@ -17,6 +17,7 @@ export { KritzelFontFamily, defineCustomElement as defineCustomElementKritzelFon
17
17
  export { KritzelFontSize, defineCustomElement as defineCustomElementKritzelFontSize } from './kritzel-font-size.js';
18
18
  export { KritzelIcon, defineCustomElement as defineCustomElementKritzelIcon } from './kritzel-icon.js';
19
19
  export { KritzelMenu, defineCustomElement as defineCustomElementKritzelMenu } from './kritzel-menu.js';
20
+ export { KritzelMenuItem, defineCustomElement as defineCustomElementKritzelMenuItem } from './kritzel-menu-item.js';
20
21
  export { KritzelPortal, defineCustomElement as defineCustomElementKritzelPortal } from './kritzel-portal.js';
21
22
  export { KritzelSplitButton, defineCustomElement as defineCustomElementKritzelSplitButton } from './kritzel-split-button.js';
22
23
  export { KritzelStrokeSize, defineCustomElement as defineCustomElementKritzelStrokeSize } from './kritzel-stroke-size.js';
@@ -1 +1 @@
1
- {"file":"index.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
1
+ {"file":"index.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
@@ -1,4 +1,4 @@
1
- import { K as KritzelControlBrushConfig$1, d as defineCustomElement$1 } from './p-a7KmQzo4.js';
1
+ import { K as KritzelControlBrushConfig$1, d as defineCustomElement$1 } from './p-Cb1IUD_g.js';
2
2
 
3
3
  const KritzelControlBrushConfig = KritzelControlBrushConfig$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,4 +1,4 @@
1
- import { K as KritzelControlTextConfig$1, d as defineCustomElement$1 } from './p-BaKb8ZLg.js';
1
+ import { K as KritzelControlTextConfig$1, d as defineCustomElement$1 } from './p-Crni2OI4.js';
2
2
 
3
3
  const KritzelControlTextConfig = KritzelControlTextConfig$1;
4
4
  const defineCustomElement = defineCustomElement$1;