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
@@ -0,0 +1,237 @@
1
+ import { p as proxyCustomElement, H, c as createEvent, h, d as Host } from './p-BqrTPNyu.js';
2
+ import { O as ObjectHelper } from './p-Bb6od8He.js';
3
+
4
+ const KritzelPortal = /*@__PURE__*/ proxyCustomElement(class KritzelPortal extends H {
5
+ constructor(registerHost) {
6
+ super();
7
+ if (registerHost !== false) {
8
+ this.__registerHost();
9
+ }
10
+ this.__attachShadow();
11
+ this.close = createEvent(this, "close");
12
+ this.autoFocus = true;
13
+ this.id = `portal-${ObjectHelper.generateUUID()}`;
14
+ this.defaultOffset = 0;
15
+ this.minLeft = 0;
16
+ }
17
+ anchorChanged(newValue) {
18
+ if (newValue) {
19
+ this.openPortal();
20
+ this.calculatePosition();
21
+ if (this.autoFocus) {
22
+ this.focusFirstElement();
23
+ }
24
+ }
25
+ else {
26
+ this.closePortal();
27
+ }
28
+ }
29
+ handleOutsideClick(event) {
30
+ event.stopPropagation();
31
+ const isLastPortal = this.lastAddedPortal === this.portal;
32
+ if (!isLastPortal)
33
+ return;
34
+ const target = event.target;
35
+ if (!this.host.contains(target)) {
36
+ this.close.emit();
37
+ this.closePortal();
38
+ }
39
+ }
40
+ handleKeyDown(event) {
41
+ event.stopPropagation();
42
+ const isLastPortal = this.lastAddedPortal === this.portal;
43
+ if (!isLastPortal)
44
+ return;
45
+ if (event.key === 'Escape') {
46
+ this.anchor.focus();
47
+ this.close.emit();
48
+ this.closePortal();
49
+ }
50
+ if (event.key === 'Tab') {
51
+ this.trapFocus(event);
52
+ }
53
+ if (event.key === 'Enter') {
54
+ const activeElement = this.getDeepActiveElement();
55
+ if (activeElement === null || activeElement === void 0 ? void 0 : activeElement.click) {
56
+ event.preventDefault();
57
+ activeElement.click();
58
+ }
59
+ }
60
+ }
61
+ handleResize() {
62
+ this.calculatePosition();
63
+ }
64
+ focusFirstElement() {
65
+ requestAnimationFrame(() => {
66
+ var _a, _b;
67
+ (_b = (_a = this.firstFocusableElement) === null || _a === void 0 ? void 0 : _a.focus) === null || _b === void 0 ? void 0 : _b.call(_a);
68
+ });
69
+ }
70
+ getDeepActiveElement() {
71
+ var _a;
72
+ let activeEl = document.activeElement;
73
+ while ((_a = activeEl === null || activeEl === void 0 ? void 0 : activeEl.shadowRoot) === null || _a === void 0 ? void 0 : _a.activeElement) {
74
+ activeEl = activeEl.shadowRoot.activeElement;
75
+ }
76
+ return activeEl;
77
+ }
78
+ trapFocus(event) {
79
+ const focusableElements = this.getFocusableElements(this.host);
80
+ if (focusableElements.length === 0)
81
+ return;
82
+ const firstFocusable = focusableElements[0];
83
+ const lastFocusable = focusableElements[focusableElements.length - 1];
84
+ const activeElement = this.getDeepActiveElement();
85
+ if (event.shiftKey) {
86
+ /* shift + tab */
87
+ if (activeElement === firstFocusable) {
88
+ lastFocusable.focus();
89
+ event.preventDefault();
90
+ }
91
+ }
92
+ else {
93
+ /* tab */
94
+ if (activeElement === lastFocusable) {
95
+ firstFocusable.focus();
96
+ event.preventDefault();
97
+ }
98
+ }
99
+ }
100
+ getFocusableElements(root) {
101
+ if (!root)
102
+ return [];
103
+ const focusableElements = [];
104
+ const focusableSelector = 'a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), details, [tabindex]:not([tabindex="-1"])';
105
+ const isVisible = (el) => {
106
+ return el.offsetParent !== null;
107
+ };
108
+ // Check if the root element itself is focusable
109
+ if (root.matches(focusableSelector) && !root.hasAttribute('disabled') && isVisible(root)) {
110
+ focusableElements.push(root);
111
+ }
112
+ // Function to recursively find focusable elements
113
+ const findFocusable = (element) => {
114
+ // Search in shadow root
115
+ if (element.shadowRoot) {
116
+ Array.from(element.shadowRoot.querySelectorAll(focusableSelector)).forEach(el => {
117
+ if (isVisible(el)) {
118
+ focusableElements.push(el);
119
+ }
120
+ });
121
+ Array.from(element.shadowRoot.children).forEach(findFocusable);
122
+ }
123
+ // Search in light DOM
124
+ Array.from(element.querySelectorAll(focusableSelector)).forEach(el => {
125
+ if (!focusableElements.includes(el) && isVisible(el)) {
126
+ focusableElements.push(el);
127
+ }
128
+ });
129
+ // Handle slotted content
130
+ if (element.tagName === 'SLOT') {
131
+ element.assignedElements({ flatten: true }).forEach(el => findFocusable(el));
132
+ }
133
+ Array.from(element.children).forEach(findFocusable);
134
+ };
135
+ findFocusable(root);
136
+ // Return unique elements in document order
137
+ return [...new Set(focusableElements)];
138
+ }
139
+ get firstFocusableElement() {
140
+ var _a, _b;
141
+ const slotEl = (_a = this.host.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('slot');
142
+ const firstAssigned = slotEl === null || slotEl === void 0 ? void 0 : slotEl.assignedElements({ flatten: true })[0];
143
+ if (!firstAssigned)
144
+ return null;
145
+ const focusable = this.getFocusableElements(firstAssigned);
146
+ return (_b = focusable[0]) !== null && _b !== void 0 ? _b : firstAssigned;
147
+ }
148
+ get lastAddedPortal() {
149
+ const portals = Array.from(document.querySelectorAll('[id^="portal-"]'));
150
+ return portals.length ? portals[portals.length - 1] : null;
151
+ }
152
+ calculateLeft() {
153
+ var _a;
154
+ if (!this.anchor || !this.portal)
155
+ return 0;
156
+ const refRect = this.anchor.getBoundingClientRect();
157
+ const portalRect = this.portal.getBoundingClientRect();
158
+ const offset = (_a = this.offsetX) !== null && _a !== void 0 ? _a : this.defaultOffset;
159
+ let left = refRect.left + offset;
160
+ const maxLeft = window.innerWidth - portalRect.width - this.minLeft;
161
+ if (left < this.minLeft)
162
+ left = this.minLeft;
163
+ if (left > maxLeft)
164
+ left = maxLeft;
165
+ return Math.round(left + window.scrollX);
166
+ }
167
+ calculateTop() {
168
+ var _a;
169
+ if (!this.anchor || !this.portal)
170
+ return 0;
171
+ const refRect = this.anchor.getBoundingClientRect();
172
+ const portalRect = this.portal.getBoundingClientRect();
173
+ const offset = (_a = this.offsetY) !== null && _a !== void 0 ? _a : this.defaultOffset;
174
+ let top = refRect.bottom + offset;
175
+ if (top + portalRect.height > window.innerHeight) {
176
+ top = refRect.top - portalRect.height - offset;
177
+ }
178
+ return Math.round(top + window.scrollY);
179
+ }
180
+ openPortal() {
181
+ this.portal = document.createElement('div');
182
+ this.portal.setAttribute('id', this.id);
183
+ this.portal.style.zIndex = '1';
184
+ this.portal.style.position = 'absolute';
185
+ this.portal.style.top = '0px';
186
+ this.portal.style.left = '0px';
187
+ this.portal.appendChild(this.host);
188
+ document.body.append(this.portal);
189
+ }
190
+ closePortal() {
191
+ const portal = document.getElementById(this.id);
192
+ if (!portal)
193
+ return;
194
+ document.body.removeChild(portal);
195
+ this.host.remove();
196
+ }
197
+ calculatePosition() {
198
+ if (!this.anchor || !this.portal)
199
+ return;
200
+ const top = this.calculateTop();
201
+ const left = this.calculateLeft();
202
+ this.portal.style.top = `${top}px`;
203
+ this.portal.style.left = `${left}px`;
204
+ }
205
+ render() {
206
+ return (h(Host, { key: '968f0360b9396da16f5b970293ba20f8a1dcc09a', style: { display: this.anchor ? 'block' : 'none' } }, h("slot", { key: '0fe1569bde60a834e9226d7c838d113a64151164' })));
207
+ }
208
+ get host() { return this; }
209
+ static get watchers() { return {
210
+ "anchor": ["anchorChanged"]
211
+ }; }
212
+ }, [257, "kritzel-portal", {
213
+ "anchor": [16],
214
+ "offsetX": [2, "offset-x"],
215
+ "offsetY": [2, "offset-y"],
216
+ "autoFocus": [4, "auto-focus"]
217
+ }, [[8, "click", "handleOutsideClick"], [8, "keydown", "handleKeyDown"], [11, "resize", "handleResize"]], {
218
+ "anchor": ["anchorChanged"]
219
+ }]);
220
+ function defineCustomElement() {
221
+ if (typeof customElements === "undefined") {
222
+ return;
223
+ }
224
+ const components = ["kritzel-portal"];
225
+ components.forEach(tagName => { switch (tagName) {
226
+ case "kritzel-portal":
227
+ if (!customElements.get(tagName)) {
228
+ customElements.define(tagName, KritzelPortal);
229
+ }
230
+ break;
231
+ } });
232
+ }
233
+
234
+ export { KritzelPortal as K, defineCustomElement as d };
235
+ //# sourceMappingURL=p-jpGLgpoq.js.map
236
+
237
+ //# sourceMappingURL=p-jpGLgpoq.js.map
@@ -0,0 +1 @@
1
+ {"file":"p-jpGLgpoq.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/shared/kritzel-portal/kritzel-portal.tsx"],"sourcesContent":["import { Component, Host, Listen, Prop, Watch, h, Event, EventEmitter, Element } from '@stencil/core';\r\nimport { ObjectHelper } from '../../../helpers/object.helper';\r\n\r\n@Component({\r\n tag: 'kritzel-portal',\r\n shadow: true,\r\n})\r\nexport class KritzelPortal {\r\n @Element() host: HTMLElement;\r\n\r\n @Prop() anchor: HTMLElement;\r\n @Watch('anchor')\r\n anchorChanged(newValue: HTMLElement) {\r\n if (newValue) {\r\n this.openPortal();\r\n this.calculatePosition();\r\n if (this.autoFocus) {\r\n this.focusFirstElement();\r\n }\r\n } else {\r\n this.closePortal();\r\n }\r\n }\r\n\r\n @Prop() offsetX: number;\r\n @Prop() offsetY: number;\r\n @Prop() autoFocus: boolean = true;\r\n\r\n @Event() close: EventEmitter<void>;\r\n\r\n @Listen('click', { target: 'window' })\r\n handleOutsideClick(event: MouseEvent) {\r\n event.stopPropagation();\r\n\r\n const isLastPortal = this.lastAddedPortal === this.portal;\r\n if (!isLastPortal) return;\r\n\r\n const target = event.target as HTMLElement;\r\n if (!this.host.contains(target)) {\r\n this.close.emit();\r\n this.closePortal();\r\n }\r\n }\r\n\r\n @Listen('keydown', { target: 'window' })\r\n handleKeyDown(event: KeyboardEvent) {\r\n event.stopPropagation();\r\n\r\n const isLastPortal = this.lastAddedPortal === this.portal;\r\n if (!isLastPortal) return;\r\n\r\n if (event.key === 'Escape') {\r\n this.anchor.focus();\r\n this.close.emit();\r\n this.closePortal();\r\n }\r\n\r\n if (event.key === 'Tab') {\r\n this.trapFocus(event);\r\n }\r\n\r\n if (event.key === 'Enter') {\r\n const activeElement = this.getDeepActiveElement() as HTMLElement;\r\n if (activeElement?.click) {\r\n event.preventDefault();\r\n activeElement.click();\r\n }\r\n }\r\n }\r\n\r\n @Listen('resize', { target: 'window', capture: true })\r\n handleResize() {\r\n this.calculatePosition();\r\n }\r\n\r\n private portal: HTMLElement;\r\n private id: string = `portal-${ObjectHelper.generateUUID()}`;\r\n private defaultOffset = 0;\r\n private minLeft = 0;\r\n\r\n private focusFirstElement() {\r\n requestAnimationFrame(() => {\r\n this.firstFocusableElement?.focus?.();\r\n });\r\n }\r\n\r\n private getDeepActiveElement(): Element {\r\n let activeEl = document.activeElement;\r\n while (activeEl?.shadowRoot?.activeElement) {\r\n activeEl = activeEl.shadowRoot.activeElement;\r\n }\r\n return activeEl;\r\n }\r\n\r\n private trapFocus(event: KeyboardEvent) {\r\n const focusableElements = this.getFocusableElements(this.host);\r\n if (focusableElements.length === 0) return;\r\n\r\n const firstFocusable = focusableElements[0];\r\n const lastFocusable = focusableElements[focusableElements.length - 1];\r\n const activeElement = this.getDeepActiveElement();\r\n\r\n if (event.shiftKey) {\r\n /* shift + tab */\r\n if (activeElement === firstFocusable) {\r\n lastFocusable.focus();\r\n event.preventDefault();\r\n }\r\n } else {\r\n /* tab */\r\n if (activeElement === lastFocusable) {\r\n firstFocusable.focus();\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n private getFocusableElements(root: HTMLElement): HTMLElement[] {\r\n if (!root) return [];\r\n\r\n const focusableElements: HTMLElement[] = [];\r\n const focusableSelector = 'a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), details, [tabindex]:not([tabindex=\"-1\"])';\r\n\r\n const isVisible = (el: HTMLElement) => {\r\n return el.offsetParent !== null;\r\n };\r\n\r\n // Check if the root element itself is focusable\r\n if (root.matches(focusableSelector) && !root.hasAttribute('disabled') && isVisible(root)) {\r\n focusableElements.push(root);\r\n }\r\n\r\n // Function to recursively find focusable elements\r\n const findFocusable = (element: Element) => {\r\n // Search in shadow root\r\n if (element.shadowRoot) {\r\n Array.from(element.shadowRoot.querySelectorAll<HTMLElement>(focusableSelector)).forEach(el => {\r\n if (isVisible(el)) {\r\n focusableElements.push(el);\r\n }\r\n });\r\n Array.from(element.shadowRoot.children).forEach(findFocusable);\r\n }\r\n\r\n // Search in light DOM\r\n Array.from(element.querySelectorAll<HTMLElement>(focusableSelector)).forEach(el => {\r\n if (!focusableElements.includes(el) && isVisible(el)) {\r\n focusableElements.push(el);\r\n }\r\n });\r\n\r\n // Handle slotted content\r\n if (element.tagName === 'SLOT') {\r\n (element as HTMLSlotElement).assignedElements({ flatten: true }).forEach(el => findFocusable(el));\r\n }\r\n\r\n Array.from(element.children).forEach(findFocusable);\r\n };\r\n\r\n findFocusable(root);\r\n\r\n // Return unique elements in document order\r\n return [...new Set(focusableElements)];\r\n }\r\n\r\n private get firstFocusableElement(): HTMLElement | null {\r\n const slotEl = this.host.shadowRoot?.querySelector('slot') as HTMLSlotElement | null;\r\n const firstAssigned = slotEl?.assignedElements({ flatten: true })[0] as HTMLElement | undefined;\r\n if (!firstAssigned) return null;\r\n\r\n const focusable = this.getFocusableElements(firstAssigned);\r\n return focusable[0] ?? firstAssigned;\r\n }\r\n\r\n private get lastAddedPortal(): HTMLElement | null {\r\n const portals = Array.from(document.querySelectorAll<HTMLElement>('[id^=\"portal-\"]'));\r\n return portals.length ? portals[portals.length - 1] : null;\r\n }\r\n\r\n private calculateLeft() {\r\n if (!this.anchor || !this.portal) return 0;\r\n const refRect = this.anchor.getBoundingClientRect();\r\n const portalRect = this.portal.getBoundingClientRect();\r\n\r\n const offset = this.offsetX ?? this.defaultOffset;\r\n let left = refRect.left + offset;\r\n\r\n const maxLeft = window.innerWidth - portalRect.width - this.minLeft;\r\n if (left < this.minLeft) left = this.minLeft;\r\n if (left > maxLeft) left = maxLeft;\r\n\r\n return Math.round(left + window.scrollX);\r\n }\r\n\r\n private calculateTop() {\r\n if (!this.anchor || !this.portal) return 0;\r\n const refRect = this.anchor.getBoundingClientRect();\r\n const portalRect = this.portal.getBoundingClientRect();\r\n const offset = this.offsetY ?? this.defaultOffset;\r\n\r\n let top = refRect.bottom + offset;\r\n\r\n if (top + portalRect.height > window.innerHeight) {\r\n top = refRect.top - portalRect.height - offset;\r\n }\r\n\r\n return Math.round(top + window.scrollY);\r\n }\r\n\r\n private openPortal() {\r\n this.portal = document.createElement('div');\r\n this.portal.setAttribute('id', this.id);\r\n this.portal.style.zIndex = '1';\r\n this.portal.style.position = 'absolute';\r\n this.portal.style.top = '0px';\r\n this.portal.style.left = '0px';\r\n this.portal.appendChild(this.host);\r\n document.body.append(this.portal);\r\n }\r\n\r\n private closePortal() {\r\n const portal = document.getElementById(this.id);\r\n if (!portal) return;\r\n document.body.removeChild(portal);\r\n this.host.remove();\r\n }\r\n\r\n private calculatePosition() {\r\n if (!this.anchor || !this.portal) return;\r\n const top = this.calculateTop();\r\n const left = this.calculateLeft();\r\n this.portal.style.top = `${top}px`;\r\n this.portal.style.left = `${left}px`;\r\n }\r\n\r\n render() {\r\n return (\r\n <Host style={{ display: this.anchor ? 'block' : 'none' }}>\r\n <slot />\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"version":3}
@@ -135,11 +135,11 @@ class AddObjectCommand extends KritzelBaseCommand {
135
135
  this.object = object;
136
136
  }
137
137
  execute() {
138
- this._store.state.objectsOctree.insert(this.object);
138
+ this._store.state.objectsMap.insert(this.object);
139
139
  this._store.addObjectToDatabase(ObjectHelper.clone(this.object));
140
140
  }
141
141
  undo() {
142
- this._store.state.objectsOctree.remove(object => object.id === this.object.id);
142
+ this._store.state.objectsMap.remove(object => object.id === this.object.id);
143
143
  this._store.deleteObjectFromDatabase(this.object.id);
144
144
  }
145
145
  }
@@ -237,6 +237,24 @@ class KritzelKeyboardHelper {
237
237
  meta.setAttribute('content', newContent);
238
238
  }
239
239
  }
240
+ static onKeyboardVisibleChanged(callback) {
241
+ if ('visualViewport' in window) {
242
+ const VIEWPORT_VS_CLIENT_HEIGHT_RATIO = 0.75;
243
+ const onResize = (event) => {
244
+ const target = event.target;
245
+ const isOpen = (target.height * target.scale) / window.screen.height < VIEWPORT_VS_CLIENT_HEIGHT_RATIO;
246
+ callback(isOpen);
247
+ };
248
+ window.visualViewport.addEventListener('resize', onResize);
249
+ return () => window.visualViewport.removeEventListener('resize', onResize);
250
+ }
251
+ else {
252
+ // Fallback for older browsers does not provide a reliable event-based mechanism.
253
+ console.warn('Listening for keyboard visibility changes is not reliably supported in this browser.');
254
+ // Return a no-op cleanup function.
255
+ return () => { };
256
+ }
257
+ }
240
258
  }
241
259
 
242
260
  class KritzelTextTool extends KritzelBaseTool {
@@ -598,7 +616,7 @@ class KritzelBaseObject {
598
616
  updatePosition(x, y) {
599
617
  this.translateX = x;
600
618
  this.translateY = y;
601
- this._store.state.objectsOctree.update(this);
619
+ this._store.state.objectsMap.update(this);
602
620
  }
603
621
  }
604
622
 
@@ -912,7 +930,7 @@ class KritzelPath extends KritzelBaseObject {
912
930
  this.translateX = x;
913
931
  this.translateY = y;
914
932
  this._adjustedPoints = null;
915
- this._store.state.objectsOctree.update(this);
933
+ this._store.state.objectsMap.update(this);
916
934
  }
917
935
  computeAdjustedPoints() {
918
936
  var _a;
@@ -1264,13 +1282,13 @@ class RemoveObjectCommand extends KritzelBaseCommand {
1264
1282
  this.object = object;
1265
1283
  }
1266
1284
  execute() {
1267
- this._store.state.objectsOctree.remove(object => object.id === this.object.id);
1268
- this._store.state.objectsOctree.filter(object => object instanceof KritzelCustomElement).forEach(object => object.remount());
1285
+ this._store.state.objectsMap.remove(object => object.id === this.object.id);
1286
+ this._store.state.objectsMap.filter(object => object instanceof KritzelCustomElement).forEach(object => object.remount());
1269
1287
  this._store.deleteObjectFromDatabase(this.object.id);
1270
1288
  }
1271
1289
  undo() {
1272
- this._store.state.objectsOctree.insert(this.object);
1273
- this._store.state.objectsOctree.filter(object => object instanceof KritzelCustomElement).forEach(object => object.remount());
1290
+ this._store.state.objectsMap.insert(this.object);
1291
+ this._store.state.objectsMap.filter(object => object instanceof KritzelCustomElement).forEach(object => object.remount());
1274
1292
  this._store.addObjectToDatabase(ObjectHelper.clone(this.object));
1275
1293
  }
1276
1294
  }
@@ -1363,12 +1381,12 @@ class RemoveSelectionGroupCommand extends KritzelBaseCommand {
1363
1381
  this.previousSelectionGroup = this._store.state.selectionGroup;
1364
1382
  }
1365
1383
  execute() {
1366
- this._store.state.objectsOctree.remove(object => { var _a; return object.id === ((_a = this.previousSelectionGroup) === null || _a === void 0 ? void 0 : _a.id); });
1384
+ this._store.state.objectsMap.remove(object => { var _a; return object.id === ((_a = this.previousSelectionGroup) === null || _a === void 0 ? void 0 : _a.id); });
1367
1385
  this._store.state.selectionGroup = null;
1368
1386
  }
1369
1387
  undo() {
1370
1388
  if (this.previousSelectionGroup) {
1371
- this._store.state.objectsOctree.insert(this.previousSelectionGroup);
1389
+ this._store.state.objectsMap.insert(this.previousSelectionGroup);
1372
1390
  this._store.state.selectionGroup = this.previousSelectionGroup;
1373
1391
  }
1374
1392
  }
@@ -1687,14 +1705,14 @@ class RotateSelectionGroupCommand extends KritzelBaseCommand {
1687
1705
  this._store.state.selectionGroup = this.selectionGroup;
1688
1706
  this._store.state.selectionGroup.rotate(this.rotation);
1689
1707
  this._store.state.selectionGroup.objects.forEach(object => {
1690
- this._store.state.objectsOctree.update(object);
1708
+ this._store.state.objectsMap.update(object);
1691
1709
  });
1692
1710
  }
1693
1711
  undo() {
1694
1712
  this._store.state.selectionGroup = this.selectionGroup;
1695
1713
  this._store.state.selectionGroup.rotate(this.rotation - this.initialRotation);
1696
1714
  this._store.state.selectionGroup.objects.forEach(object => {
1697
- this._store.state.objectsOctree.update(object);
1715
+ this._store.state.objectsMap.update(object);
1698
1716
  });
1699
1717
  }
1700
1718
  }
@@ -1840,13 +1858,13 @@ class AddSelectionGroupCommand extends KritzelBaseCommand {
1840
1858
  this.selectionGroup = selectionGroup;
1841
1859
  }
1842
1860
  execute() {
1843
- this._store.state.objectsOctree.remove(object => object instanceof KrtizelSelectionBox);
1844
- this._store.state.objectsOctree.insert(this.selectionGroup);
1861
+ this._store.state.objectsMap.remove(object => object instanceof KrtizelSelectionBox);
1862
+ this._store.state.objectsMap.insert(this.selectionGroup);
1845
1863
  this._store.state.selectionGroup = this.selectionGroup;
1846
1864
  this._store.state.selectionBox = null;
1847
1865
  }
1848
1866
  undo() {
1849
- this._store.state.objectsOctree.remove(object => object.id === this.selectionGroup.id);
1867
+ this._store.state.objectsMap.remove(object => object.id === this.selectionGroup.id);
1850
1868
  this._store.state.selectionGroup = null;
1851
1869
  this._store.state.selectionBox = null;
1852
1870
  }
@@ -1938,7 +1956,7 @@ class KritzelSelectionHandler extends KritzelBaseHandler {
1938
1956
  removeSelectionBox() {
1939
1957
  this._store.state.selectionBox = null;
1940
1958
  this._store.state.isSelecting = false;
1941
- this._store.state.objectsOctree.remove(o => o instanceof KrtizelSelectionBox);
1959
+ this._store.state.objectsMap.remove(o => o instanceof KrtizelSelectionBox);
1942
1960
  this._store.rerender();
1943
1961
  }
1944
1962
  startMouseSelection(event) {
@@ -1953,8 +1971,8 @@ class KritzelSelectionHandler extends KritzelBaseHandler {
1953
1971
  this._store.state.selectionGroup = null;
1954
1972
  this._store.state.selectionBox = selectionBox;
1955
1973
  this._store.state.isSelecting = true;
1956
- this._store.state.objectsOctree.remove(o => o instanceof KrtizelSelectionBox || o instanceof KritzelSelectionGroup);
1957
- this._store.state.objectsOctree.insert(selectionBox);
1974
+ this._store.state.objectsMap.remove(o => o instanceof KrtizelSelectionBox || o instanceof KritzelSelectionGroup);
1975
+ this._store.state.objectsMap.insert(selectionBox);
1958
1976
  }
1959
1977
  startTouchSelection() {
1960
1978
  const activePointers = Array.from(this._store.state.pointers.values());
@@ -1975,8 +1993,8 @@ class KritzelSelectionHandler extends KritzelBaseHandler {
1975
1993
  this._store.state.selectionGroup = null;
1976
1994
  this._store.state.selectionBox = selectionBox;
1977
1995
  this._store.state.isSelecting = true;
1978
- this._store.state.objectsOctree.remove(o => o instanceof KrtizelSelectionBox || o instanceof KritzelSelectionGroup);
1979
- this._store.state.objectsOctree.insert(selectionBox);
1996
+ this._store.state.objectsMap.remove(o => o instanceof KrtizelSelectionBox || o instanceof KritzelSelectionGroup);
1997
+ this._store.state.objectsMap.insert(selectionBox);
1980
1998
  }
1981
1999
  updateMouseSelection(event) {
1982
2000
  let clientX, clientY;
@@ -2313,17 +2331,17 @@ class KritzelSelectionGroup extends KritzelBaseObject {
2313
2331
  });
2314
2332
  this.translateX = x;
2315
2333
  this.translateY = y;
2316
- this._store.state.objectsOctree.update(this);
2334
+ this._store.state.objectsMap.update(this);
2317
2335
  }
2318
2336
  move(startX, startY, endX, endY) {
2319
2337
  const deltaX = (startX - endX) / this._store.state.scale;
2320
2338
  const deltaY = (startY - endY) / this._store.state.scale;
2321
2339
  this.translateX += deltaX;
2322
2340
  this.translateY += deltaY;
2323
- this._store.state.objectsOctree.update(this);
2341
+ this._store.state.objectsMap.update(this);
2324
2342
  this.objects.forEach(obj => {
2325
2343
  obj.move(startX, startY, endX, endY);
2326
- this._store.state.objectsOctree.update(obj);
2344
+ this._store.state.objectsMap.update(obj);
2327
2345
  });
2328
2346
  this.unchangedObjects.forEach(obj => {
2329
2347
  obj.translateX += deltaX;
@@ -2341,7 +2359,7 @@ class KritzelSelectionGroup extends KritzelBaseObject {
2341
2359
  const updatedX = child.translateX + deltaX + (child.translateX - this.translateX) * (widthScaleFactor - 1);
2342
2360
  const updatedY = child.translateY + deltaY + (child.translateY - this.translateY) * (heightScaleFactor - 1);
2343
2361
  child.resize(updatedX, updatedY, updatedWidth, updatedHeight);
2344
- this._store.state.objectsOctree.update(child);
2362
+ this._store.state.objectsMap.update(child);
2345
2363
  });
2346
2364
  this.refreshObjectDimensions();
2347
2365
  this.unchangedObjects = ObjectHelper.clone(this.objects);
@@ -2362,7 +2380,7 @@ class KritzelSelectionGroup extends KritzelBaseObject {
2362
2380
  child.translateX = centerX + rotatedX - child.totalWidth / 2 / child.scale;
2363
2381
  child.translateY = centerY + rotatedY - child.totalHeight / 2 / child.scale;
2364
2382
  child.rotate(this.objects.length === 1 ? value : value + unchangedChild.rotation);
2365
- this._store.state.objectsOctree.update(child);
2383
+ this._store.state.objectsMap.update(child);
2366
2384
  });
2367
2385
  }
2368
2386
  copy() {
@@ -2402,7 +2420,7 @@ class KritzelSelectionGroup extends KritzelBaseObject {
2402
2420
  this.width = (this.maxX - this.minX - this.padding) * this.scale;
2403
2421
  this.height = (this.maxY - this.minY - this.padding) * this.scale;
2404
2422
  }
2405
- this._store.state.objectsOctree.update(this);
2423
+ this._store.state.objectsMap.update(this);
2406
2424
  }
2407
2425
  getOffsetXToCenter(obj) {
2408
2426
  const objCenterX = obj.translateX + obj.totalWidth / obj.scale / 2;
@@ -2605,7 +2623,7 @@ const DEFAULT_TEXT_CONFIG = {
2605
2623
  ],
2606
2624
  };
2607
2625
 
2608
- export { AddObjectCommand as A, BatchCommand as B, DEFAULT_BRUSH_CONFIG as D, KritzelBrushTool as K, ObjectHelper as O, RemoveSelectionGroupCommand as R, UpdateObjectCommand as U, KritzelTextTool as a, KritzelMouseButton as b, KritzelSelectionTool as c, KritzelEraserTool as d, DEFAULT_TEXT_CONFIG as e, KritzelImageTool as f, KritzelEventHelper as g, KritzelBaseCommand as h, KritzelSelectionGroup as i, KrtizelSelectionBox as j, KritzelReviver as k, RemoveObjectCommand as l, AddSelectionGroupCommand as m, KritzelToolRegistry as n, KritzelBaseHandler as o, KritzelBaseTool as p, KritzelKeyboardHelper as q, KritzelText as r, KritzelPath as s, KritzelImage as t };
2609
- //# sourceMappingURL=index-J4NpPimy.js.map
2626
+ export { AddObjectCommand as A, BatchCommand as B, DEFAULT_BRUSH_CONFIG as D, KritzelBrushTool as K, ObjectHelper as O, RemoveSelectionGroupCommand as R, UpdateObjectCommand as U, KritzelTextTool as a, KritzelMouseButton as b, KritzelSelectionTool as c, KritzelEraserTool as d, DEFAULT_TEXT_CONFIG as e, KritzelImageTool as f, KritzelKeyboardHelper as g, KritzelEventHelper as h, KritzelBaseCommand as i, KritzelSelectionGroup as j, KrtizelSelectionBox as k, KritzelReviver as l, RemoveObjectCommand as m, AddSelectionGroupCommand as n, KritzelToolRegistry as o, KritzelBaseHandler as p, KritzelBaseTool as q, KritzelText as r, KritzelPath as s, KritzelImage as t };
2627
+ //# sourceMappingURL=index-DqqxAoZI.js.map
2610
2628
 
2611
- //# sourceMappingURL=index-J4NpPimy.js.map
2629
+ //# sourceMappingURL=index-DqqxAoZI.js.map