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.
- package/dist/cjs/index-CUSIflVf.js +2 -2
- package/dist/cjs/{index-C7Read21.js → index-CfXjPLHb.js} +46 -28
- package/dist/cjs/index-CfXjPLHb.js.map +1 -0
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/{kritzel-brush-style_22.cjs.entry.js → kritzel-brush-style_23.cjs.entry.js} +502 -438
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/stencil.cjs.js +1 -1
- package/dist/collection/classes/commands/add-object.command.js +2 -2
- package/dist/collection/classes/commands/add-object.command.js.map +1 -1
- package/dist/collection/classes/commands/add-selection-group.command.js +3 -3
- package/dist/collection/classes/commands/add-selection-group.command.js.map +1 -1
- package/dist/collection/classes/commands/remove-object.command.js +4 -4
- package/dist/collection/classes/commands/remove-object.command.js.map +1 -1
- package/dist/collection/classes/commands/remove-selection-group.command.js +2 -2
- package/dist/collection/classes/commands/remove-selection-group.command.js.map +1 -1
- package/dist/collection/classes/commands/rotate-selection-group.command.js +2 -2
- package/dist/collection/classes/commands/rotate-selection-group.command.js.map +1 -1
- package/dist/collection/classes/handlers/selection.handler.js +5 -5
- package/dist/collection/classes/handlers/selection.handler.js.map +1 -1
- package/dist/collection/classes/objects/base-object.class.js +1 -1
- package/dist/collection/classes/objects/base-object.class.js.map +1 -1
- package/dist/collection/classes/objects/path.class.js +1 -1
- package/dist/collection/classes/objects/path.class.js.map +1 -1
- package/dist/collection/classes/objects/selection-group.class.js +6 -6
- package/dist/collection/classes/objects/selection-group.class.js.map +1 -1
- package/dist/collection/classes/store.class.js +9 -22
- package/dist/collection/classes/store.class.js.map +1 -1
- package/dist/collection/classes/structures/object-map.structure.js +42 -0
- package/dist/collection/classes/structures/object-map.structure.js.map +1 -0
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.css +7 -0
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +12 -2
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +17 -17
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
- package/dist/collection/components/shared/kritzel-menu/kritzel-menu.css +15 -155
- package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +167 -177
- package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js.map +1 -1
- package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.css +129 -0
- package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +261 -0
- package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js.map +1 -0
- package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +160 -43
- package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js.map +1 -1
- package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.css +83 -74
- package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +142 -118
- package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js.map +1 -1
- package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +1 -1
- package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +4 -4
- package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +2 -2
- package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +2 -2
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +5 -8
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +3 -3
- package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +1 -1
- package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js +110 -88
- package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js.map +1 -1
- package/dist/collection/configs/default-engine-state.js +1 -1
- package/dist/collection/configs/default-engine-state.js.map +1 -1
- package/dist/collection/helpers/keyboard.helper.js +18 -0
- package/dist/collection/helpers/keyboard.helper.js.map +1 -1
- package/dist/collection/index.js +1 -0
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/interfaces/engine-state.interface.js.map +1 -1
- package/dist/collection/interfaces/menu-item.interface.js.map +1 -1
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.js +3 -2
- package/dist/components/index.js.map +1 -1
- package/dist/components/kritzel-control-brush-config.js +1 -1
- package/dist/components/kritzel-control-text-config.js +1 -1
- package/dist/components/kritzel-controls.js +1 -1
- package/dist/components/kritzel-editor.js +53 -39
- package/dist/components/kritzel-editor.js.map +1 -1
- package/dist/components/kritzel-engine.js +1 -1
- package/dist/components/kritzel-menu-item.d.ts +11 -0
- package/dist/components/kritzel-menu-item.js +9 -0
- package/dist/components/kritzel-menu-item.js.map +1 -0
- package/dist/components/kritzel-menu.js +1 -1
- package/dist/components/kritzel-portal.js +1 -1
- package/dist/components/kritzel-split-button.js +1 -1
- package/dist/components/kritzel-stroke-size.js +1 -1
- package/dist/components/kritzel-tooltip.js +1 -1
- package/dist/components/kritzel-utility-panel.js +1 -1
- package/dist/components/kritzel-workspace-manager.js +1 -1
- package/dist/components/{p-jG1e48OE.js → p-26poIWa_.js} +6 -6
- package/dist/components/{p-jG1e48OE.js.map → p-26poIWa_.js.map} +1 -1
- package/dist/components/{p-rQeWFfPG.js → p-BGccckxP.js} +3 -3
- package/dist/components/{p-rQeWFfPG.js.map → p-BGccckxP.js.map} +1 -1
- package/dist/components/p-BcQWRzsB.js +183 -0
- package/dist/components/p-BcQWRzsB.js.map +1 -0
- package/dist/components/p-C-DqsDXz.js +238 -0
- package/dist/components/p-C-DqsDXz.js.map +1 -0
- package/dist/components/{p-B7VrEdgP.js → p-C9-70hiF.js} +25 -7
- package/dist/components/p-C9-70hiF.js.map +1 -0
- package/dist/components/p-CJKA5zIE.js +10 -0
- package/dist/components/p-CJKA5zIE.js.map +1 -0
- package/dist/components/p-CaPdvVd4.js +127 -0
- package/dist/components/p-CaPdvVd4.js.map +1 -0
- package/dist/components/{p-a7KmQzo4.js → p-Cb1IUD_g.js} +5 -5
- package/dist/components/{p-a7KmQzo4.js.map → p-Cb1IUD_g.js.map} +1 -1
- package/dist/components/{p-BaKb8ZLg.js → p-Crni2OI4.js} +4 -4
- package/dist/components/{p-BaKb8ZLg.js.map → p-Crni2OI4.js.map} +1 -1
- package/dist/components/{p-BB22cVkU.js → p-D_Uh-xv_.js} +13 -18
- package/dist/components/p-D_Uh-xv_.js.map +1 -0
- package/dist/components/{p-BzSz74Ci.js → p-fyfT6A5K.js} +3 -3
- package/dist/components/{p-BzSz74Ci.js.map → p-fyfT6A5K.js.map} +1 -1
- package/dist/components/{p-D-zg05gA.js → p-jGaWxggY.js} +93 -179
- package/dist/components/p-jGaWxggY.js.map +1 -0
- package/dist/components/p-jpGLgpoq.js +237 -0
- package/dist/components/p-jpGLgpoq.js.map +1 -0
- package/dist/esm/{index-J4NpPimy.js → index-DqqxAoZI.js} +47 -29
- package/dist/esm/index-DqqxAoZI.js.map +1 -0
- package/dist/esm/index-NiIEUDzj.js +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/{kritzel-brush-style_22.entry.js → kritzel-brush-style_23.entry.js} +502 -439
- package/dist/esm/loader.js +1 -1
- package/dist/esm/stencil.js +1 -1
- package/dist/stencil/index.esm.js +1 -1
- package/dist/stencil/p-DqqxAoZI.js +2 -0
- package/dist/stencil/p-DqqxAoZI.js.map +1 -0
- package/dist/stencil/p-eebdbf65.entry.js +2 -0
- package/dist/stencil/p-eebdbf65.entry.js.map +1 -0
- package/dist/stencil/stencil.esm.js +1 -1
- package/dist/types/classes/structures/object-map.structure.d.ts +11 -0
- package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +3 -0
- package/dist/types/components/shared/kritzel-menu/kritzel-menu.d.ts +18 -18
- package/dist/types/components/shared/kritzel-menu-item/kritzel-menu-item.d.ts +26 -0
- package/dist/types/components/shared/kritzel-portal/kritzel-portal.d.ts +15 -10
- package/dist/types/components/shared/kritzel-split-button/kritzel-split-button.d.ts +25 -16
- package/dist/types/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.d.ts +18 -14
- package/dist/types/components.d.ts +90 -61
- package/dist/types/helpers/keyboard.helper.d.ts +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/interfaces/engine-state.interface.d.ts +2 -2
- package/dist/types/interfaces/menu-item.interface.d.ts +21 -7
- package/package.json +1 -1
- package/dist/cjs/index-C7Read21.js.map +0 -1
- package/dist/collection/classes/structures/octree.structure.js +0 -115
- package/dist/collection/classes/structures/octree.structure.js.map +0 -1
- package/dist/components/p-B7VrEdgP.js.map +0 -1
- package/dist/components/p-BB22cVkU.js.map +0 -1
- package/dist/components/p-BmJbJwkH.js +0 -167
- package/dist/components/p-BmJbJwkH.js.map +0 -1
- package/dist/components/p-D-zg05gA.js.map +0 -1
- package/dist/components/p-DV4ERZv5.js +0 -112
- package/dist/components/p-DV4ERZv5.js.map +0 -1
- package/dist/components/p-hSuNJiIq.js +0 -152
- package/dist/components/p-hSuNJiIq.js.map +0 -1
- package/dist/components/p-sQmW5NRu.js +0 -156
- package/dist/components/p-sQmW5NRu.js.map +0 -1
- package/dist/esm/index-J4NpPimy.js.map +0 -1
- package/dist/stencil/p-4a0009e7.entry.js +0 -2
- package/dist/stencil/p-4a0009e7.entry.js.map +0 -1
- package/dist/stencil/p-J4NpPimy.js +0 -2
- package/dist/stencil/p-J4NpPimy.js.map +0 -1
- 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":";;;MAOa,aAAa,iBAAAA,kBAAA,CAAA,MAAA,aAAA,SAAAC,CAAA,CAAA;AAJ1B,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;;;AAuBU,QAAA,IAAS,CAAA,SAAA,GAAY,IAAI;QAkDzB,IAAA,CAAA,EAAE,GAAW,CAAA,OAAA,EAAU,YAAY,CAAC,YAAY,EAAE,CAAA,CAAE;AACpD,QAAA,IAAa,CAAA,aAAA,GAAG,CAAC;AACjB,QAAA,IAAO,CAAA,OAAA,GAAG,CAAC;AAoKpB;AAtOC,IAAA,aAAa,CAAC,QAAqB,EAAA;QACjC,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,iBAAiB,EAAE;;;aAErB;YACL,IAAI,CAAC,WAAW,EAAE;;;AAWtB,IAAA,kBAAkB,CAAC,KAAiB,EAAA;QAClC,KAAK,CAAC,eAAe,EAAE;QAEvB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,MAAM;AACzD,QAAA,IAAI,CAAC,YAAY;YAAE;AAEnB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YACjB,IAAI,CAAC,WAAW,EAAE;;;AAKtB,IAAA,aAAa,CAAC,KAAoB,EAAA;QAChC,KAAK,CAAC,eAAe,EAAE;QAEvB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,MAAM;AACzD,QAAA,IAAI,CAAC,YAAY;YAAE;AAEnB,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YACjB,IAAI,CAAC,WAAW,EAAE;;AAGpB,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;AAGvB,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;AACzB,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAiB;YAChE,IAAI,aAAa,aAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAE,KAAK,EAAE;gBACxB,KAAK,CAAC,cAAc,EAAE;gBACtB,aAAa,CAAC,KAAK,EAAE;;;;IAM3B,YAAY,GAAA;QACV,IAAI,CAAC,iBAAiB,EAAE;;IAQlB,iBAAiB,GAAA;QACvB,qBAAqB,CAAC,MAAK;;YACzB,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,qBAAqB,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,KAAK,kDAAI;AACvC,SAAC,CAAC;;IAGI,oBAAoB,GAAA;;AAC1B,QAAA,IAAI,QAAQ,GAAG,QAAQ,CAAC,aAAa;AACrC,QAAA,OAAO,CAAA,EAAA,GAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,aAAa,EAAE;AAC1C,YAAA,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa;;AAE9C,QAAA,OAAO,QAAQ;;AAGT,IAAA,SAAS,CAAC,KAAoB,EAAA;QACpC,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9D,QAAA,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC;YAAE;AAEpC,QAAA,MAAM,cAAc,GAAG,iBAAiB,CAAC,CAAC,CAAC;QAC3C,MAAM,aAAa,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;AACrE,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAEjD,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;;AAElB,YAAA,IAAI,aAAa,KAAK,cAAc,EAAE;gBACpC,aAAa,CAAC,KAAK,EAAE;gBACrB,KAAK,CAAC,cAAc,EAAE;;;aAEnB;;AAEL,YAAA,IAAI,aAAa,KAAK,aAAa,EAAE;gBACnC,cAAc,CAAC,KAAK,EAAE;gBACtB,KAAK,CAAC,cAAc,EAAE;;;;AAKpB,IAAA,oBAAoB,CAAC,IAAiB,EAAA;AAC5C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;QAEpB,MAAM,iBAAiB,GAAkB,EAAE;QAC3C,MAAM,iBAAiB,GAAG,oJAAoJ;AAE9K,QAAA,MAAM,SAAS,GAAG,CAAC,EAAe,KAAI;AACpC,YAAA,OAAO,EAAE,CAAC,YAAY,KAAK,IAAI;AACjC,SAAC;;QAGD,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACxF,YAAA,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAI9B,QAAA,MAAM,aAAa,GAAG,CAAC,OAAgB,KAAI;;AAEzC,YAAA,IAAI,OAAO,CAAC,UAAU,EAAE;AACtB,gBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAc,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAG;AAC3F,oBAAA,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE;AACjB,wBAAA,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;;AAE9B,iBAAC,CAAC;AACF,gBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;;;AAIhE,YAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAc,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAG;AAChF,gBAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE;AACpD,oBAAA,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;;AAE9B,aAAC,CAAC;;AAGF,YAAA,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,EAAE;gBAC7B,OAA2B,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;;AAGnG,YAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;AACrD,SAAC;QAED,aAAa,CAAC,IAAI,CAAC;;QAGnB,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;;AAGxC,IAAA,IAAY,qBAAqB,GAAA;;AAC/B,QAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC,UAAU,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,aAAa,CAAC,MAAM,CAA2B;AACpF,QAAA,MAAM,aAAa,GAAG,MAAM,aAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAE,CAAA,CAAC,CAA4B;AAC/F,QAAA,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,IAAI;QAE/B,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;QAC1D,OAAO,MAAA,SAAS,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,aAAa;;AAGtC,IAAA,IAAY,eAAe,GAAA;AACzB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAc,iBAAiB,CAAC,CAAC;AACrF,QAAA,OAAO,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;;IAGpD,aAAa,GAAA;;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE;QAEtD,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAA,IAAI,CAAC,aAAa;AACjD,QAAA,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM;AAEhC,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO;AACnE,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO;AAAE,YAAA,IAAI,GAAG,IAAI,CAAC,OAAO;QAC5C,IAAI,IAAI,GAAG,OAAO;YAAE,IAAI,GAAG,OAAO;QAElC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;;IAGlC,YAAY,GAAA;;QAClB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE;QACtD,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAA,IAAI,CAAC,aAAa;AAEjD,QAAA,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM;QAEjC,IAAI,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE;YAChD,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM;;QAGhD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;;IAGjC,UAAU,GAAA;QAChB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG;QAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;QACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK;QAC9B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;;IAG3B,WAAW,GAAA;QACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;IAGZ,iBAAiB,GAAA;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AAClC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;QACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,GAAG,CAAA,EAAA,CAAI;QAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI;;IAGtC,MAAM,GAAA;AACJ,QAAA,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,EAAA,EACtD,CAAQ,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
1268
|
-
this._store.state.
|
|
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.
|
|
1273
|
-
this._store.state.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
1844
|
-
this._store.state.
|
|
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.
|
|
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.
|
|
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.
|
|
1957
|
-
this._store.state.
|
|
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.
|
|
1979
|
-
this._store.state.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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,
|
|
2609
|
-
//# sourceMappingURL=index-
|
|
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-
|
|
2629
|
+
//# sourceMappingURL=index-DqqxAoZI.js.map
|