kritzel-stencil 0.0.165 → 0.0.167
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/{default-line-tool.config-DEuVgTP4.js → default-line-tool.config-BNBO4I1t.js} +47 -32
- package/dist/cjs/default-line-tool.config-BNBO4I1t.js.map +1 -0
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/kritzel-color_22.cjs.entry.js +62 -34
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/stencil.cjs.js +1 -1
- package/dist/collection/classes/tools/brush-tool.class.js +45 -30
- package/dist/collection/classes/tools/brush-tool.class.js.map +1 -1
- package/dist/collection/components/shared/kritzel-menu/kritzel-menu.css +2 -1
- package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +25 -2
- package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js.map +1 -1
- package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +48 -22
- package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js.map +1 -1
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +2 -16
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +8 -9
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js.map +1 -1
- package/dist/components/index.js +3 -3
- package/dist/components/kritzel-controls.js +1 -1
- package/dist/components/kritzel-editor.js +8 -8
- package/dist/components/kritzel-engine.js +1 -1
- package/dist/components/kritzel-menu-item.js +1 -1
- 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-tooltip.js +1 -1
- package/dist/components/kritzel-workspace-manager.js +1 -1
- package/dist/components/{p-BuS7MM1j.js → p-BmdYFhLx.js} +4 -4
- package/dist/components/{p-BuS7MM1j.js.map → p-BmdYFhLx.js.map} +1 -1
- package/dist/components/{p-DguzZn_x.js → p-BoazmhlG.js} +4 -4
- package/dist/components/{p-DguzZn_x.js.map → p-BoazmhlG.js.map} +1 -1
- package/dist/components/{p-Dz2XHHqa.js → p-Bwv1dxAB.js} +47 -32
- package/dist/components/{p-Dz2XHHqa.js.map → p-Bwv1dxAB.js.map} +1 -1
- package/dist/components/{p-9Fzdviju.js → p-C1S1zPH-.js} +30 -23
- package/dist/components/p-C1S1zPH-.js.map +1 -0
- package/dist/components/{p-BDX0tuVV.js → p-CIXaR1a8.js} +3 -3
- package/dist/components/{p-BDX0tuVV.js.map → p-CIXaR1a8.js.map} +1 -1
- package/dist/components/{p-I3iPEDpx.js → p-CiM-IPaD.js} +5 -5
- package/dist/components/{p-I3iPEDpx.js.map → p-CiM-IPaD.js.map} +1 -1
- package/dist/components/{p-OFrACpZf.js → p-aeYt0bPO.js} +27 -4
- package/dist/components/p-aeYt0bPO.js.map +1 -0
- package/dist/components/{p-tp96UZ0l.js → p-xcQV8l_c.js} +13 -14
- package/dist/components/p-xcQV8l_c.js.map +1 -0
- package/dist/esm/{default-line-tool.config-D-XCKjDC.js → default-line-tool.config-DJ488kil.js} +47 -32
- package/dist/esm/default-line-tool.config-DJ488kil.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/kritzel-color_22.entry.js +62 -34
- 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-DJ488kil.js +2 -0
- package/dist/stencil/p-DJ488kil.js.map +1 -0
- package/dist/stencil/{p-eac6fcb8.entry.js → p-a9f3c47e.entry.js} +3 -3
- package/dist/stencil/p-a9f3c47e.entry.js.map +1 -0
- package/dist/stencil/stencil.esm.js +1 -1
- package/dist/types/classes/tools/brush-tool.class.d.ts +1 -0
- package/dist/types/components/shared/kritzel-tooltip/kritzel-tooltip.d.ts +2 -1
- package/dist/types/components.d.ts +8 -0
- package/package.json +1 -1
- package/dist/cjs/default-line-tool.config-DEuVgTP4.js.map +0 -1
- package/dist/components/p-9Fzdviju.js.map +0 -1
- package/dist/components/p-OFrACpZf.js.map +0 -1
- package/dist/components/p-tp96UZ0l.js.map +0 -1
- package/dist/esm/default-line-tool.config-D-XCKjDC.js.map +0 -1
- package/dist/stencil/p-D-XCKjDC.js +0 -2
- package/dist/stencil/p-D-XCKjDC.js.map +0 -1
- package/dist/stencil/p-eac6fcb8.entry.js.map +0 -1
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var index = require('./index-Cj__YTlG.js');
|
|
4
|
-
var defaultLineTool_config = require('./default-line-tool.config-
|
|
4
|
+
var defaultLineTool_config = require('./default-line-tool.config-BNBO4I1t.js');
|
|
5
5
|
|
|
6
6
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
7
7
|
|
|
@@ -249,7 +249,7 @@ const KritzelControlTextConfig = class {
|
|
|
249
249
|
};
|
|
250
250
|
KritzelControlTextConfig.style = kritzelControlTextConfigCss;
|
|
251
251
|
|
|
252
|
-
const kritzelControlsCss = ":host{display:flex;flex-direction:column;user-select:none}:host(.mobile){--kritzel-controls-control-hover-background-color:transparent;--kritzel-controls-control-active-background-color:transparent}.kritzel-controls{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:var(--kritzel-controls-gap, 8px);height:100%;padding:var(--kritzel-controls-padding, 8px);background-color:var(--kritzel-controls-background-color, #ffffff);border-radius:var(--kritzel-controls-border-radius, 16px);box-shadow:var(--kritzel-controls-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-controls-border, 1px solid #ebebeb);z-index:10000;position:relative}.kritzel-control{display:flex;justify-content:center;align-items:center;color:var(--kritzel-controls-control-color, #000000);border-radius:var(--kritzel-controls-control-border-radius, 12px);padding:var(--kritzel-controls-control-padding, 8px);border:none;background:none;cursor:var(--kritzel-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;font-weight:bold}.kritzel-control:focus,.kritzel-control:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-control:active{background-color:var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%))}.kritzel-control.selected,.kritzel-control.selected:hover,.kritzel-control.selected:active{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF) !important;color:var(--kritzel-controls-control-selected-color, #ffffff) !important}.kritzel-control.selected:focus{background-color:var(--kritzel-controls-control-selected-background-color, #007bffe3) !important}.kritzel-control-split{position:relative;display:flex;align-items:center;border-radius:var(--kritzel-controls-control-border-radius, 12px);color:var(--kritzel-controls-control-color, #000000)}.kritzel-control-split .kritzel-control-main{display:flex;justify-content:center;align-items:center;padding:var(--kritzel-controls-control-padding, 8px);border:none;background:none;cursor:var(--kritzel-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;border-radius:var(--kritzel-controls-control-border-radius, 12px);color:inherit}.kritzel-control-split.selected .kritzel-control-main{border-radius:var(--kritzel-controls-control-border-radius, 12px) 0 0 var(--kritzel-controls-control-border-radius, 12px)}.kritzel-control-split .kritzel-control-dropdown{display:flex;justify-content:center;align-items:center;align-self:stretch;border:none;background:none;cursor:var(--kritzel-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;border-radius:0 var(--kritzel-controls-control-border-radius, 12px) var(--kritzel-controls-control-border-radius, 12px) 0;color:inherit;width:0;padding:0;opacity:0;overflow:hidden;pointer-events:none;transition:width 0.15s ease-out, padding 0.15s ease-out, opacity 0.15s ease-out}.kritzel-control-split .kritzel-control-dropdown.visible{width:auto;padding:0 6px;opacity:1;pointer-events:auto}.kritzel-control-split .kritzel-control-main:focus,.kritzel-control-split .kritzel-control-main:hover,.kritzel-control-split .kritzel-control-dropdown:focus,.kritzel-control-split .kritzel-control-dropdown:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-control-split .kritzel-control-main:active,.kritzel-control-split .kritzel-control-dropdown:active{background-color:var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%))}.kritzel-control-split.selected{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF) !important;color:var(--kritzel-controls-control-selected-color, #ffffff) !important}.kritzel-control-split.selected .kritzel-control-main:hover,.kritzel-control-split.selected .kritzel-control-dropdown:hover{background-color:rgba(255, 255, 255, 0.15)}.kritzel-submenu{
|
|
252
|
+
const kritzelControlsCss = ":host{display:flex;flex-direction:column;user-select:none}:host(.mobile){--kritzel-controls-control-hover-background-color:transparent;--kritzel-controls-control-active-background-color:transparent}.kritzel-controls{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:var(--kritzel-controls-gap, 8px);height:100%;padding:var(--kritzel-controls-padding, 8px);background-color:var(--kritzel-controls-background-color, #ffffff);border-radius:var(--kritzel-controls-border-radius, 16px);box-shadow:var(--kritzel-controls-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-controls-border, 1px solid #ebebeb);z-index:10000;position:relative}.kritzel-control{display:flex;justify-content:center;align-items:center;color:var(--kritzel-controls-control-color, #000000);border-radius:var(--kritzel-controls-control-border-radius, 12px);padding:var(--kritzel-controls-control-padding, 8px);border:none;background:none;cursor:var(--kritzel-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;font-weight:bold}.kritzel-control:focus,.kritzel-control:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-control:active{background-color:var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%))}.kritzel-control.selected,.kritzel-control.selected:hover,.kritzel-control.selected:active{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF) !important;color:var(--kritzel-controls-control-selected-color, #ffffff) !important}.kritzel-control.selected:focus{background-color:var(--kritzel-controls-control-selected-background-color, #007bffe3) !important}.kritzel-control-split{position:relative;display:flex;align-items:center;border-radius:var(--kritzel-controls-control-border-radius, 12px);color:var(--kritzel-controls-control-color, #000000)}.kritzel-control-split .kritzel-control-main{display:flex;justify-content:center;align-items:center;padding:var(--kritzel-controls-control-padding, 8px);border:none;background:none;cursor:var(--kritzel-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;border-radius:var(--kritzel-controls-control-border-radius, 12px);color:inherit}.kritzel-control-split.selected .kritzel-control-main{border-radius:var(--kritzel-controls-control-border-radius, 12px) 0 0 var(--kritzel-controls-control-border-radius, 12px)}.kritzel-control-split .kritzel-control-dropdown{display:flex;justify-content:center;align-items:center;align-self:stretch;border:none;background:none;cursor:var(--kritzel-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;border-radius:0 var(--kritzel-controls-control-border-radius, 12px) var(--kritzel-controls-control-border-radius, 12px) 0;color:inherit;width:0;padding:0;opacity:0;overflow:hidden;pointer-events:none;transition:width 0.15s ease-out, padding 0.15s ease-out, opacity 0.15s ease-out}.kritzel-control-split .kritzel-control-dropdown.visible{width:auto;padding:0 6px;opacity:1;pointer-events:auto}.kritzel-control-split .kritzel-control-main:focus,.kritzel-control-split .kritzel-control-main:hover,.kritzel-control-split .kritzel-control-dropdown:focus,.kritzel-control-split .kritzel-control-dropdown:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-control-split .kritzel-control-main:active,.kritzel-control-split .kritzel-control-dropdown:active{background-color:var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%))}.kritzel-control-split.selected{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF) !important;color:var(--kritzel-controls-control-selected-color, #ffffff) !important}.kritzel-control-split.selected .kritzel-control-main:hover,.kritzel-control-split.selected .kritzel-control-dropdown:hover{background-color:rgba(255, 255, 255, 0.15)}.kritzel-submenu-content{display:flex;flex-direction:column;min-width:140px}.kritzel-submenu-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border:none;background:none;cursor:var(--kritzel-pointer-cursor, pointer);border-radius:8px;color:var(--kritzel-controls-control-color, #000000);font-size:14px;text-align:left;white-space:nowrap;-webkit-tap-highlight-color:transparent}.kritzel-submenu-item:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-submenu-item.active{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF);color:var(--kritzel-controls-control-selected-color, #ffffff)}.kritzel-submenu-item.active:hover{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF)}.kritzel-config-container{position:relative;display:flex;justify-content:center;align-items:center;height:40px;box-sizing:border-box;-webkit-tap-highlight-color:transparent;width:0;opacity:0;overflow:hidden;pointer-events:none;margin-left:calc(-1 * var(--kritzel-controls-gap, 8px));transition:width 0.2s ease-out, opacity 0.2s ease-out, margin-left 0.2s ease-out}.kritzel-config-container.visible{width:40px;opacity:1;pointer-events:auto;margin-left:0}.kritzel-config{display:flex;justify-content:center;align-items:center;cursor:var(--kritzel-pointer-cursor, pointer);border-radius:50%}.color-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box;background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.font-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box;background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.no-config{height:24px;width:24px;border-radius:50%;border:1px dashed gray}kritzel-tooltip{z-index:10001}";
|
|
253
253
|
|
|
254
254
|
const KritzelControls = class {
|
|
255
255
|
constructor(hostRef) {
|
|
@@ -273,10 +273,6 @@ const KritzelControls = class {
|
|
|
273
273
|
return;
|
|
274
274
|
}
|
|
275
275
|
this.isTooltipVisible = false;
|
|
276
|
-
// Close submenu when clicking outside
|
|
277
|
-
if (!element.closest('.kritzel-control-split') && !element.closest('.kritzel-submenu')) {
|
|
278
|
-
this.openSubMenuControl = null;
|
|
279
|
-
}
|
|
280
276
|
}
|
|
281
277
|
handleKeyDown(event) {
|
|
282
278
|
if (event.key === 'Escape') {
|
|
@@ -399,13 +395,13 @@ const KritzelControls = class {
|
|
|
399
395
|
render() {
|
|
400
396
|
const hasConfigUI = this.activeControl?.tool instanceof defaultLineTool_config.KritzelBrushTool ||
|
|
401
397
|
this.activeControl?.tool instanceof defaultLineTool_config.KritzelTextTool;
|
|
402
|
-
return (index.h(index.Host, { key: '
|
|
398
|
+
return (index.h(index.Host, { key: '542415492107a5aa516602f53cbb830ee58ae320', class: {
|
|
403
399
|
mobile: this.isTouchDevice,
|
|
404
|
-
} }, this.isUtilityPanelVisible && (index.h("kritzel-utility-panel", { key: '
|
|
400
|
+
} }, this.isUtilityPanelVisible && (index.h("kritzel-utility-panel", { key: '38ea0136db9c81b38753a88915b98433f75dc9d4', style: {
|
|
405
401
|
position: 'absolute',
|
|
406
402
|
bottom: '56px',
|
|
407
403
|
left: '12px',
|
|
408
|
-
}, undoState: this.undoState, onUndo: () => this.kritzelEngine?.undo(), onRedo: () => this.kritzelEngine?.redo(), onDelete: () => this.kritzelEngine?.delete() })), index.h("div", { key: '
|
|
404
|
+
}, undoState: this.undoState, onUndo: () => this.kritzelEngine?.undo(), onRedo: () => this.kritzelEngine?.redo(), onDelete: () => this.kritzelEngine?.delete() })), index.h("div", { key: '30843843f99eeb50cdbe2dd22472c112bfe952f4', class: "kritzel-controls" }, this.controls.map(control => {
|
|
409
405
|
if (control.type === 'tool') {
|
|
410
406
|
// Check if this control has sub-options (split-button)
|
|
411
407
|
if (control.subOptions?.length) {
|
|
@@ -415,10 +411,13 @@ const KritzelControls = class {
|
|
|
415
411
|
return (index.h("div", { class: {
|
|
416
412
|
'kritzel-control-split': true,
|
|
417
413
|
'selected': isActive,
|
|
418
|
-
}, key: control.name
|
|
414
|
+
}, key: control.name, ref: el => {
|
|
415
|
+
if (el)
|
|
416
|
+
control._anchorRef = el;
|
|
417
|
+
} }, index.h("button", { class: "kritzel-control-main", onClick: () => this.handleControlClick(control), title: selectedSubOption?.label }, index.h("kritzel-icon", { name: selectedSubOption?.icon || control.icon })), index.h("button", { class: {
|
|
419
418
|
'kritzel-control-dropdown': true,
|
|
420
419
|
'visible': isActive,
|
|
421
|
-
}, onClick: (e) => this.toggleSubMenu(e, control), "aria-label": "Select shape type", "aria-expanded": isSubMenuOpen ? 'true' : 'false', tabIndex: isActive ? 0 : -1 }, index.h("kritzel-icon", { name: "chevron-down", size: 12 })), isSubMenuOpen
|
|
420
|
+
}, onClick: (e) => this.toggleSubMenu(e, control), "aria-label": "Select shape type", "aria-expanded": isSubMenuOpen ? 'true' : 'false', tabIndex: isActive ? 0 : -1 }, index.h("kritzel-icon", { name: "chevron-down", size: 12 })), index.h("kritzel-tooltip", { isVisible: isSubMenuOpen, anchorElement: control._anchorRef, showArrow: false, onTooltipClosed: () => { this.openSubMenuControl = null; } }, index.h("div", { class: "kritzel-submenu-content" }, control.subOptions.map(option => (index.h("button", { class: {
|
|
422
421
|
'kritzel-submenu-item': true,
|
|
423
422
|
'active': option.id === selectedSubOption?.id,
|
|
424
423
|
}, key: option.id, onClick: () => this.selectSubOption(control, option) }, index.h("kritzel-icon", { name: option.icon, size: 20 }), index.h("span", null, option.label))))))));
|
|
@@ -21209,7 +21208,7 @@ const KritzelIcon = class {
|
|
|
21209
21208
|
};
|
|
21210
21209
|
KritzelIcon.style = kritzelIconCss;
|
|
21211
21210
|
|
|
21212
|
-
const kritzelMenuCss = ":host{position:relative;display:flex;flex-direction:column;background-color:var(--kritzel-menu-background-color, #ffffff);width:var(--kritzel-menu-width, 200px);padding:var(--kritzel-menu-padding, 8px);border-radius:var(--kritzel-menu-border-radius, 12px);box-shadow:var(--kritzel-menu-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-menu-border, 1px solid #ebebeb);z-index:2;gap:var(--kritzel-menu-gap, 4px);overflow-y:auto;scrollbar-color:#ebebeb transparent;scrollbar-width:thin;max-height:300px}.has-open-child-overlay{position:absolute;top:0;left:0;right:0;bottom:0;z-index:3}";
|
|
21211
|
+
const kritzelMenuCss = ":host{position:relative;display:flex;flex-direction:column;background-color:var(--kritzel-menu-background-color, #ffffff);width:var(--kritzel-menu-width, 200px);padding:var(--kritzel-menu-padding, 8px);border-radius:var(--kritzel-menu-border-radius, 12px);box-shadow:var(--kritzel-menu-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-menu-border, 1px solid #ebebeb);z-index:2;gap:var(--kritzel-menu-gap, 4px);overflow-y:auto;scrollbar-color:#ebebeb transparent;scrollbar-width:thin;max-height:var(--kritzel-portal-max-height, 300px);box-sizing:border-box}.has-open-child-overlay{position:absolute;top:0;left:0;right:0;bottom:0;z-index:3}";
|
|
21213
21212
|
|
|
21214
21213
|
const KritzelMenu = class {
|
|
21215
21214
|
constructor(hostRef) {
|
|
@@ -21587,10 +21586,33 @@ const KritzelPortal = class {
|
|
|
21587
21586
|
const refRect = this.anchor.getBoundingClientRect();
|
|
21588
21587
|
const portalRect = this.portal.getBoundingClientRect();
|
|
21589
21588
|
const offset = this.offsetY ?? this.defaultOffset;
|
|
21589
|
+
const padding = 8; // Minimum padding from viewport edges
|
|
21590
21590
|
let top = refRect.bottom + offset;
|
|
21591
|
-
|
|
21591
|
+
const spaceBelow = window.innerHeight - refRect.bottom - offset - padding;
|
|
21592
|
+
const spaceAbove = refRect.top - offset - padding;
|
|
21593
|
+
// Reset max-height CSS custom property
|
|
21594
|
+
this.host.style.removeProperty('--kritzel-portal-max-height');
|
|
21595
|
+
if (portalRect.height <= spaceBelow) {
|
|
21596
|
+
// Fits below the anchor
|
|
21597
|
+
top = refRect.bottom + offset;
|
|
21598
|
+
}
|
|
21599
|
+
else if (portalRect.height <= spaceAbove) {
|
|
21600
|
+
// Fits above the anchor
|
|
21592
21601
|
top = refRect.top - portalRect.height - offset;
|
|
21593
21602
|
}
|
|
21603
|
+
else {
|
|
21604
|
+
// Doesn't fit above or below - constrain the height
|
|
21605
|
+
if (spaceBelow >= spaceAbove) {
|
|
21606
|
+
// More space below, keep it below with constrained height
|
|
21607
|
+
top = refRect.bottom + offset;
|
|
21608
|
+
this.host.style.setProperty('--kritzel-portal-max-height', `${spaceBelow}px`);
|
|
21609
|
+
}
|
|
21610
|
+
else {
|
|
21611
|
+
// More space above, position above with constrained height
|
|
21612
|
+
top = padding;
|
|
21613
|
+
this.host.style.setProperty('--kritzel-portal-max-height', `${spaceAbove}px`);
|
|
21614
|
+
}
|
|
21615
|
+
}
|
|
21594
21616
|
return Math.round(top + window.scrollY);
|
|
21595
21617
|
}
|
|
21596
21618
|
openPortal() {
|
|
@@ -21619,7 +21641,7 @@ const KritzelPortal = class {
|
|
|
21619
21641
|
this.portal.style.left = `${left}px`;
|
|
21620
21642
|
}
|
|
21621
21643
|
render() {
|
|
21622
|
-
return (index.h(index.Host, { key: '
|
|
21644
|
+
return (index.h(index.Host, { key: 'aa7399f8a2e744eaa89e881bc9e710bd8a0c6c53', style: { display: this.anchor ? 'block' : 'none' } }, index.h("slot", { key: 'df4d8446cf770dfd98476d19c6b18511e2531574' })));
|
|
21623
21645
|
}
|
|
21624
21646
|
static get watchers() { return {
|
|
21625
21647
|
"anchor": ["anchorChanged"]
|
|
@@ -21749,7 +21771,6 @@ KritzelStrokeSize.style = kritzelStrokeSizeCss;
|
|
|
21749
21771
|
|
|
21750
21772
|
const kritzelTooltipCss = ":host{width:auto}.tooltip-content{position:relative;padding:8px 12px;border-radius:4px;width:fit-content;background-color:var(--kritzel-controls-tooltip-background-color, #ffffff);color:var(--kritzel-controls-tooltip-color, #000000);padding:var(--kritzel-controls-tooltip-padding, 8px);border-radius:var(--kritzel-controls-tooltip-border-radius, 16px);white-space:nowrap;box-shadow:var(--kritzel-controls-tooltip-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12))}";
|
|
21751
21773
|
|
|
21752
|
-
const MOBILE_BREAKPOINT = 768;
|
|
21753
21774
|
const KritzelTooltip = class {
|
|
21754
21775
|
constructor(hostRef) {
|
|
21755
21776
|
index.registerInstance(this, hostRef);
|
|
@@ -21760,10 +21781,11 @@ const KritzelTooltip = class {
|
|
|
21760
21781
|
anchorElement;
|
|
21761
21782
|
arrowSize = 8;
|
|
21762
21783
|
offsetY = 24;
|
|
21784
|
+
showArrow = true;
|
|
21763
21785
|
tooltipClosed;
|
|
21764
21786
|
positionX = 0;
|
|
21787
|
+
positionY = 0;
|
|
21765
21788
|
arrowOffset = '0px';
|
|
21766
|
-
isMobileView = window.innerWidth < MOBILE_BREAKPOINT;
|
|
21767
21789
|
handleOutsideClick(event) {
|
|
21768
21790
|
if (!this.isVisible)
|
|
21769
21791
|
return;
|
|
@@ -21773,7 +21795,6 @@ const KritzelTooltip = class {
|
|
|
21773
21795
|
}
|
|
21774
21796
|
}
|
|
21775
21797
|
handleWindowResize() {
|
|
21776
|
-
this.isMobileView = window.innerWidth < MOBILE_BREAKPOINT;
|
|
21777
21798
|
this.calculateAdjustedPosition();
|
|
21778
21799
|
}
|
|
21779
21800
|
async focusContent() {
|
|
@@ -21786,7 +21807,6 @@ const KritzelTooltip = class {
|
|
|
21786
21807
|
this.focusSlottedContent();
|
|
21787
21808
|
}
|
|
21788
21809
|
componentWillLoad() {
|
|
21789
|
-
this.isMobileView = window.innerWidth < MOBILE_BREAKPOINT;
|
|
21790
21810
|
this.calculateAdjustedPosition();
|
|
21791
21811
|
}
|
|
21792
21812
|
componentWillUpdate() {
|
|
@@ -21804,41 +21824,49 @@ const KritzelTooltip = class {
|
|
|
21804
21824
|
if (this.isVisible && this.anchorElement) {
|
|
21805
21825
|
const anchorRect = this.anchorElement.getBoundingClientRect();
|
|
21806
21826
|
const tooltipContent = this.host.shadowRoot?.querySelector('.tooltip-content');
|
|
21807
|
-
|
|
21808
|
-
|
|
21809
|
-
|
|
21810
|
-
|
|
21811
|
-
|
|
21812
|
-
|
|
21813
|
-
|
|
21814
|
-
|
|
21815
|
-
|
|
21827
|
+
const tooltipRect = tooltipContent?.getBoundingClientRect();
|
|
21828
|
+
const tooltipWidth = tooltipRect?.width || 0;
|
|
21829
|
+
const viewportPadding = 12; // Minimum distance from viewport edges
|
|
21830
|
+
const anchorCenterX = anchorRect.left + anchorRect.width / 2;
|
|
21831
|
+
// Step 1: Try to center the tooltip above the anchor
|
|
21832
|
+
let idealLeft = anchorCenterX - tooltipWidth / 2;
|
|
21833
|
+
// Step 2: Clamp to viewport bounds
|
|
21834
|
+
const minLeft = viewportPadding;
|
|
21835
|
+
const maxLeft = window.innerWidth - tooltipWidth - viewportPadding;
|
|
21836
|
+
// Apply clamping - adjust if tooltip would overflow
|
|
21837
|
+
this.positionX = Math.max(minLeft, Math.min(idealLeft, maxLeft));
|
|
21838
|
+
// Step 3: Calculate bottom position (distance from viewport bottom to top of anchor + offset)
|
|
21839
|
+
this.positionY = window.innerHeight - anchorRect.top + this.offsetY;
|
|
21840
|
+
// Step 4: Calculate arrow offset to point to the center of the anchor element
|
|
21841
|
+
// Arrow should point to anchorCenterX, relative to where tooltip is positioned
|
|
21842
|
+
const arrowPositionInTooltip = anchorCenterX - this.positionX - this.arrowSize;
|
|
21843
|
+
this.arrowOffset = `${arrowPositionInTooltip}px`;
|
|
21816
21844
|
}
|
|
21817
21845
|
}
|
|
21818
21846
|
render() {
|
|
21819
|
-
return (index.h(index.Host, { key: '
|
|
21847
|
+
return (index.h(index.Host, { key: '468ba81a0a9265f04725e23b19dd879c1287e473', style: {
|
|
21820
21848
|
position: 'fixed',
|
|
21821
21849
|
zIndex: '9999',
|
|
21822
21850
|
transition: 'opacity 0.3s ease-in-out, transform 0.3s ease-in-out',
|
|
21823
21851
|
visibility: this.isVisible ? 'visible' : 'hidden',
|
|
21824
|
-
left:
|
|
21825
|
-
|
|
21826
|
-
} }, index.h("div", { key: '
|
|
21852
|
+
left: `${this.positionX}px`,
|
|
21853
|
+
bottom: `${this.positionY}px`,
|
|
21854
|
+
} }, index.h("div", { key: 'c6867197197f4e80e93bc63f0e7dd5dfbb19a523', class: "tooltip-content", onClick: event => event.stopPropagation() }, index.h("slot", { key: 'a4df46360e349cbf68af08c0cc3297dd8d141b3c' }), this.showArrow && (index.h("div", { key: '9a7c9011b3286179f592c36afb2cdaf927838930', class: "tooltip-arrow-wrapper", style: {
|
|
21827
21855
|
position: 'fixed',
|
|
21828
21856
|
left: this.arrowOffset,
|
|
21829
21857
|
bottom: `-${this.arrowSize * 2}px`,
|
|
21830
|
-
} }, index.h("div", { key: '
|
|
21858
|
+
} }, index.h("div", { key: 'd215175c6cb66c72b1fcb30eafc6af073946ad87', class: "tooltip-arrow", style: {
|
|
21831
21859
|
borderLeft: `${this.arrowSize}px solid transparent`,
|
|
21832
21860
|
borderRight: `${this.arrowSize}px solid transparent`,
|
|
21833
21861
|
borderTop: `${this.arrowSize}px solid var(--kritzel-controls-tooltip-background-color, #ffffff)`,
|
|
21834
21862
|
filter: 'drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2))',
|
|
21835
|
-
} }), index.h("div", { key: '
|
|
21863
|
+
} }), index.h("div", { key: '65cd5bf2f0de3897794e7ba4e77d0866aa5724e5', class: "tooltip-arrow-rect", style: {
|
|
21836
21864
|
position: 'relative',
|
|
21837
21865
|
width: `${this.arrowSize * 2}px`,
|
|
21838
21866
|
height: `${this.arrowSize}px`,
|
|
21839
21867
|
backgroundColor: 'var(--kritzel-controls-tooltip-background-color, #ffffff)',
|
|
21840
21868
|
bottom: `${this.arrowSize * 2}px`,
|
|
21841
|
-
} })))));
|
|
21869
|
+
} }))))));
|
|
21842
21870
|
}
|
|
21843
21871
|
};
|
|
21844
21872
|
KritzelTooltip.style = kritzelTooltipCss;
|
package/dist/cjs/loader.cjs.js
CHANGED
|
@@ -6,7 +6,7 @@ var appGlobals = require('./app-globals-V2Kpy_OQ.js');
|
|
|
6
6
|
const defineCustomElements = async (win, options) => {
|
|
7
7
|
if (typeof window === 'undefined') return undefined;
|
|
8
8
|
await appGlobals.globalScripts();
|
|
9
|
-
return index.bootstrapLazy([["kritzel-color_22.cjs",[[768,"kritzel-editor",{"scaleMax":[2,"scale-max"],"scaleMin":[2,"scale-min"],"controls":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"customSvgIcons":[16],"isControlsVisible":[4,"is-controls-visible"],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"syncConfig":[16],"isEngineReady":[32],"isControlsReady":[32],"isWorkspaceManagerReady":[32],"workspaces":[32],"activeWorkspace":[32],"isVirtualKeyboardOpen":[32],"undoState":[32],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"dblclick","onTouchStart"]],{"isEngineReady":["onIsEngineReady"],"isControlsReady":["onIsControlsReady"],"workspaces":["onWorkspacesChange"]}],[769,"kritzel-controls",{"controls":[16],"activeControl":[1040],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"undoState":[16],"firstConfig":[32],"isTooltipVisible":[32],"isTouchDevice":[32],"selectedSubOptions":[32],"openSubMenuControl":[32],"closeTooltip":[64]},[[4,"click","handleDocumentClick"],[8,"keydown","handleKeyDown"],[4,"activeToolChange","handleActiveToolChange"]]],[769,"kritzel-workspace-manager",{"activeWorkspace":[1040],"workspaces":[16],"childMenuAnchor":[32],"openChildMenuItem":[32],"newWorkspace":[32],"editingItemId":[32]},[[8,"wheel","handleWheel"]]],[769,"kritzel-engine",{"workspace":[16],"syncConfig":[16],"activeTool":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"cursorTarget":[16],"forceUpdate":[32],"registerTool":[64],"changeActiveTool":[64],"disable":[64],"enable":[64],"delete":[64],"copy":[64],"paste":[64],"bringForward":[64],"sendBackward":[64],"bringToFront":[64],"sendToBack":[64],"undo":[64],"redo":[64],"hideContextMenu":[64],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"getCopiedObjects":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[0,"longpress","handleLongPress"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[4,"dblclick","preventDoubleTapZoomOnTouchDevices"]],{"workspace":["onWorkspaceChange"],"scaleMax":["validateScaleMax"],"scaleMin":["validateScaleMin"],"cursorTarget":["onCursorTargetChange"]}],[769,"kritzel-control-text-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"]}],[769,"kritzel-control-brush-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"],"palette":[32]},null,{"tool":["handleToolChange"]}],[769,"kritzel-split-button",{"buttonIcon":[1,"button-icon"],"dropdownIcon":[1,"dropdown-icon"],"items":[16],"mainButtonDisabled":[4,"main-button-disabled"],"menuButtonDisabled":[4,"menu-button-disabled"],"isMenuOpen":[32],"isTouchDevice":[32],"anchorElement":[32],"menuScrollTop":[32],"open":[64],"focusMenu":[64]}],[769,"kritzel-context-menu",{"items":[16],"objects":[16],"processedItems":[32]},[[9,"pointerdown","handleOutsideClick"]],{"items":["onItemsChanged"]}],[769,"kritzel-utility-panel",{"undoState":[16]}],[769,"kritzel-cursor-trail",{"core":[16],"cursorTrailPoints":[32],"isLeftButtonDown":[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[769,"kritzel-tooltip",{"isVisible":[4,"is-visible"],"anchorElement":[16],"arrowSize":[2,"arrow-size"],"offsetY":[2,"offset-y"],"positionX":[32],"
|
|
9
|
+
return index.bootstrapLazy([["kritzel-color_22.cjs",[[768,"kritzel-editor",{"scaleMax":[2,"scale-max"],"scaleMin":[2,"scale-min"],"controls":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"customSvgIcons":[16],"isControlsVisible":[4,"is-controls-visible"],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"syncConfig":[16],"isEngineReady":[32],"isControlsReady":[32],"isWorkspaceManagerReady":[32],"workspaces":[32],"activeWorkspace":[32],"isVirtualKeyboardOpen":[32],"undoState":[32],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"dblclick","onTouchStart"]],{"isEngineReady":["onIsEngineReady"],"isControlsReady":["onIsControlsReady"],"workspaces":["onWorkspacesChange"]}],[769,"kritzel-controls",{"controls":[16],"activeControl":[1040],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"undoState":[16],"firstConfig":[32],"isTooltipVisible":[32],"isTouchDevice":[32],"selectedSubOptions":[32],"openSubMenuControl":[32],"closeTooltip":[64]},[[4,"click","handleDocumentClick"],[8,"keydown","handleKeyDown"],[4,"activeToolChange","handleActiveToolChange"]]],[769,"kritzel-workspace-manager",{"activeWorkspace":[1040],"workspaces":[16],"childMenuAnchor":[32],"openChildMenuItem":[32],"newWorkspace":[32],"editingItemId":[32]},[[8,"wheel","handleWheel"]]],[769,"kritzel-engine",{"workspace":[16],"syncConfig":[16],"activeTool":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"cursorTarget":[16],"forceUpdate":[32],"registerTool":[64],"changeActiveTool":[64],"disable":[64],"enable":[64],"delete":[64],"copy":[64],"paste":[64],"bringForward":[64],"sendBackward":[64],"bringToFront":[64],"sendToBack":[64],"undo":[64],"redo":[64],"hideContextMenu":[64],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"getCopiedObjects":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[0,"longpress","handleLongPress"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[4,"dblclick","preventDoubleTapZoomOnTouchDevices"]],{"workspace":["onWorkspaceChange"],"scaleMax":["validateScaleMax"],"scaleMin":["validateScaleMin"],"cursorTarget":["onCursorTargetChange"]}],[769,"kritzel-control-text-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"]}],[769,"kritzel-control-brush-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"],"palette":[32]},null,{"tool":["handleToolChange"]}],[769,"kritzel-split-button",{"buttonIcon":[1,"button-icon"],"dropdownIcon":[1,"dropdown-icon"],"items":[16],"mainButtonDisabled":[4,"main-button-disabled"],"menuButtonDisabled":[4,"menu-button-disabled"],"isMenuOpen":[32],"isTouchDevice":[32],"anchorElement":[32],"menuScrollTop":[32],"open":[64],"focusMenu":[64]}],[769,"kritzel-context-menu",{"items":[16],"objects":[16],"processedItems":[32]},[[9,"pointerdown","handleOutsideClick"]],{"items":["onItemsChanged"]}],[769,"kritzel-utility-panel",{"undoState":[16]}],[769,"kritzel-cursor-trail",{"core":[16],"cursorTrailPoints":[32],"isLeftButtonDown":[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[769,"kritzel-tooltip",{"isVisible":[4,"is-visible"],"anchorElement":[16],"arrowSize":[2,"arrow-size"],"offsetY":[2,"offset-y"],"showArrow":[4,"show-arrow"],"positionX":[32],"positionY":[32],"arrowOffset":[32],"focusContent":[64]},[[4,"click","handleOutsideClick"],[9,"resize","handleWindowResize"]]],[769,"kritzel-font-family",{"fontOptions":[16],"selectedFontFamily":[1025,"selected-font-family"]}],[769,"kritzel-font-size",{"sizes":[16],"selectedSize":[1026,"selected-size"],"fontFamily":[1,"font-family"]}],[769,"kritzel-stroke-size",{"sizes":[16],"selectedSize":[1026,"selected-size"]}],[769,"kritzel-color-palette",{"colors":[16],"selectedColor":[1025,"selected-color"],"isExpanded":[4,"is-expanded"],"isOpaque":[4,"is-opaque"]}],[769,"kritzel-font",{"fontFamily":[1,"font-family"],"size":[2],"color":[1]}],[769,"kritzel-menu",{"items":[16],"parent":[16],"selectedIndex":[32],"setScrollTop":[64],"setFocus":[64]}],[769,"kritzel-menu-item",{"item":[16],"parent":[16],"isDirty":[32]},null,{"item":["onItemChange"]}],[769,"kritzel-dropdown",{"options":[16],"value":[1],"width":[1],"selectStyles":[8,"select-styles"],"internalValue":[32],"hasSuffixContent":[32],"hasPrefixContent":[32]},null,{"options":["optionsChanged"],"value":["externalValueChanged"]}],[769,"kritzel-portal",{"anchor":[16],"offsetX":[2,"offset-x"],"offsetY":[2,"offset-y"],"autoFocus":[4,"auto-focus"]},[[8,"click","handleOutsideClick"],[8,"keydown","handleKeyDown"],[11,"resize","handleResize"],[11,"scroll","handleWindowScroll"]],{"anchor":["anchorChanged"]}],[769,"kritzel-color",{"value":[1],"size":[2]}],[769,"kritzel-icon",{"name":[1],"label":[1],"size":[2]}]]],["kritzel-brush-style.cjs",[[769,"kritzel-brush-style",{"type":[1],"brushOptions":[16]}]]]], options);
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
exports.setNonce = index.setNonce;
|
package/dist/cjs/stencil.cjs.js
CHANGED
|
@@ -19,7 +19,7 @@ var patchBrowser = () => {
|
|
|
19
19
|
|
|
20
20
|
patchBrowser().then(async (options) => {
|
|
21
21
|
await appGlobals.globalScripts();
|
|
22
|
-
return index.bootstrapLazy([["kritzel-color_22.cjs",[[768,"kritzel-editor",{"scaleMax":[2,"scale-max"],"scaleMin":[2,"scale-min"],"controls":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"customSvgIcons":[16],"isControlsVisible":[4,"is-controls-visible"],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"syncConfig":[16],"isEngineReady":[32],"isControlsReady":[32],"isWorkspaceManagerReady":[32],"workspaces":[32],"activeWorkspace":[32],"isVirtualKeyboardOpen":[32],"undoState":[32],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"dblclick","onTouchStart"]],{"isEngineReady":["onIsEngineReady"],"isControlsReady":["onIsControlsReady"],"workspaces":["onWorkspacesChange"]}],[769,"kritzel-controls",{"controls":[16],"activeControl":[1040],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"undoState":[16],"firstConfig":[32],"isTooltipVisible":[32],"isTouchDevice":[32],"selectedSubOptions":[32],"openSubMenuControl":[32],"closeTooltip":[64]},[[4,"click","handleDocumentClick"],[8,"keydown","handleKeyDown"],[4,"activeToolChange","handleActiveToolChange"]]],[769,"kritzel-workspace-manager",{"activeWorkspace":[1040],"workspaces":[16],"childMenuAnchor":[32],"openChildMenuItem":[32],"newWorkspace":[32],"editingItemId":[32]},[[8,"wheel","handleWheel"]]],[769,"kritzel-engine",{"workspace":[16],"syncConfig":[16],"activeTool":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"cursorTarget":[16],"forceUpdate":[32],"registerTool":[64],"changeActiveTool":[64],"disable":[64],"enable":[64],"delete":[64],"copy":[64],"paste":[64],"bringForward":[64],"sendBackward":[64],"bringToFront":[64],"sendToBack":[64],"undo":[64],"redo":[64],"hideContextMenu":[64],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"getCopiedObjects":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[0,"longpress","handleLongPress"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[4,"dblclick","preventDoubleTapZoomOnTouchDevices"]],{"workspace":["onWorkspaceChange"],"scaleMax":["validateScaleMax"],"scaleMin":["validateScaleMin"],"cursorTarget":["onCursorTargetChange"]}],[769,"kritzel-control-text-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"]}],[769,"kritzel-control-brush-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"],"palette":[32]},null,{"tool":["handleToolChange"]}],[769,"kritzel-split-button",{"buttonIcon":[1,"button-icon"],"dropdownIcon":[1,"dropdown-icon"],"items":[16],"mainButtonDisabled":[4,"main-button-disabled"],"menuButtonDisabled":[4,"menu-button-disabled"],"isMenuOpen":[32],"isTouchDevice":[32],"anchorElement":[32],"menuScrollTop":[32],"open":[64],"focusMenu":[64]}],[769,"kritzel-context-menu",{"items":[16],"objects":[16],"processedItems":[32]},[[9,"pointerdown","handleOutsideClick"]],{"items":["onItemsChanged"]}],[769,"kritzel-utility-panel",{"undoState":[16]}],[769,"kritzel-cursor-trail",{"core":[16],"cursorTrailPoints":[32],"isLeftButtonDown":[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[769,"kritzel-tooltip",{"isVisible":[4,"is-visible"],"anchorElement":[16],"arrowSize":[2,"arrow-size"],"offsetY":[2,"offset-y"],"positionX":[32],"
|
|
22
|
+
return index.bootstrapLazy([["kritzel-color_22.cjs",[[768,"kritzel-editor",{"scaleMax":[2,"scale-max"],"scaleMin":[2,"scale-min"],"controls":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"customSvgIcons":[16],"isControlsVisible":[4,"is-controls-visible"],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"syncConfig":[16],"isEngineReady":[32],"isControlsReady":[32],"isWorkspaceManagerReady":[32],"workspaces":[32],"activeWorkspace":[32],"isVirtualKeyboardOpen":[32],"undoState":[32],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"dblclick","onTouchStart"]],{"isEngineReady":["onIsEngineReady"],"isControlsReady":["onIsControlsReady"],"workspaces":["onWorkspacesChange"]}],[769,"kritzel-controls",{"controls":[16],"activeControl":[1040],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"undoState":[16],"firstConfig":[32],"isTooltipVisible":[32],"isTouchDevice":[32],"selectedSubOptions":[32],"openSubMenuControl":[32],"closeTooltip":[64]},[[4,"click","handleDocumentClick"],[8,"keydown","handleKeyDown"],[4,"activeToolChange","handleActiveToolChange"]]],[769,"kritzel-workspace-manager",{"activeWorkspace":[1040],"workspaces":[16],"childMenuAnchor":[32],"openChildMenuItem":[32],"newWorkspace":[32],"editingItemId":[32]},[[8,"wheel","handleWheel"]]],[769,"kritzel-engine",{"workspace":[16],"syncConfig":[16],"activeTool":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"cursorTarget":[16],"forceUpdate":[32],"registerTool":[64],"changeActiveTool":[64],"disable":[64],"enable":[64],"delete":[64],"copy":[64],"paste":[64],"bringForward":[64],"sendBackward":[64],"bringToFront":[64],"sendToBack":[64],"undo":[64],"redo":[64],"hideContextMenu":[64],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"getCopiedObjects":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[0,"longpress","handleLongPress"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[4,"dblclick","preventDoubleTapZoomOnTouchDevices"]],{"workspace":["onWorkspaceChange"],"scaleMax":["validateScaleMax"],"scaleMin":["validateScaleMin"],"cursorTarget":["onCursorTargetChange"]}],[769,"kritzel-control-text-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"]}],[769,"kritzel-control-brush-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"],"palette":[32]},null,{"tool":["handleToolChange"]}],[769,"kritzel-split-button",{"buttonIcon":[1,"button-icon"],"dropdownIcon":[1,"dropdown-icon"],"items":[16],"mainButtonDisabled":[4,"main-button-disabled"],"menuButtonDisabled":[4,"menu-button-disabled"],"isMenuOpen":[32],"isTouchDevice":[32],"anchorElement":[32],"menuScrollTop":[32],"open":[64],"focusMenu":[64]}],[769,"kritzel-context-menu",{"items":[16],"objects":[16],"processedItems":[32]},[[9,"pointerdown","handleOutsideClick"]],{"items":["onItemsChanged"]}],[769,"kritzel-utility-panel",{"undoState":[16]}],[769,"kritzel-cursor-trail",{"core":[16],"cursorTrailPoints":[32],"isLeftButtonDown":[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[769,"kritzel-tooltip",{"isVisible":[4,"is-visible"],"anchorElement":[16],"arrowSize":[2,"arrow-size"],"offsetY":[2,"offset-y"],"showArrow":[4,"show-arrow"],"positionX":[32],"positionY":[32],"arrowOffset":[32],"focusContent":[64]},[[4,"click","handleOutsideClick"],[9,"resize","handleWindowResize"]]],[769,"kritzel-font-family",{"fontOptions":[16],"selectedFontFamily":[1025,"selected-font-family"]}],[769,"kritzel-font-size",{"sizes":[16],"selectedSize":[1026,"selected-size"],"fontFamily":[1,"font-family"]}],[769,"kritzel-stroke-size",{"sizes":[16],"selectedSize":[1026,"selected-size"]}],[769,"kritzel-color-palette",{"colors":[16],"selectedColor":[1025,"selected-color"],"isExpanded":[4,"is-expanded"],"isOpaque":[4,"is-opaque"]}],[769,"kritzel-font",{"fontFamily":[1,"font-family"],"size":[2],"color":[1]}],[769,"kritzel-menu",{"items":[16],"parent":[16],"selectedIndex":[32],"setScrollTop":[64],"setFocus":[64]}],[769,"kritzel-menu-item",{"item":[16],"parent":[16],"isDirty":[32]},null,{"item":["onItemChange"]}],[769,"kritzel-dropdown",{"options":[16],"value":[1],"width":[1],"selectStyles":[8,"select-styles"],"internalValue":[32],"hasSuffixContent":[32],"hasPrefixContent":[32]},null,{"options":["optionsChanged"],"value":["externalValueChanged"]}],[769,"kritzel-portal",{"anchor":[16],"offsetX":[2,"offset-x"],"offsetY":[2,"offset-y"],"autoFocus":[4,"auto-focus"]},[[8,"click","handleOutsideClick"],[8,"keydown","handleKeyDown"],[11,"resize","handleResize"],[11,"scroll","handleWindowScroll"]],{"anchor":["anchorChanged"]}],[769,"kritzel-color",{"value":[1],"size":[2]}],[769,"kritzel-icon",{"name":[1],"label":[1],"size":[2]}]]],["kritzel-brush-style.cjs",[[769,"kritzel-brush-style",{"type":[1],"brushOptions":[16]}]]]], options);
|
|
23
23
|
});
|
|
24
24
|
|
|
25
25
|
exports.setNonce = index.setNonce;
|
|
@@ -6,9 +6,10 @@ export class KritzelBrushTool extends KritzelBaseTool {
|
|
|
6
6
|
color = '#000000';
|
|
7
7
|
size = 6;
|
|
8
8
|
palettes = {
|
|
9
|
-
pen: ['#000000', '#FFFFFF', '#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#FF00FF', '#00FFFF', '#808080', '#C0C0C0', '#800000', '#008000', '#000080', '#
|
|
9
|
+
pen: ['#000000', '#FFFFFF', '#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#FF00FF', '#00FFFF', '#808080', '#C0C0C0', '#800000', '#008000', '#000080', '#800080'],
|
|
10
10
|
highlighter: ['#ffff00', '#ffb347', '#b4ffb4'],
|
|
11
11
|
};
|
|
12
|
+
_currentPathId = null;
|
|
12
13
|
constructor(core) {
|
|
13
14
|
super(core);
|
|
14
15
|
}
|
|
@@ -30,6 +31,7 @@ export class KritzelBrushTool extends KritzelBaseTool {
|
|
|
30
31
|
strokeWidth: this.size,
|
|
31
32
|
});
|
|
32
33
|
path.isCompleted = false;
|
|
34
|
+
this._currentPathId = path.id;
|
|
33
35
|
this._core.store.state.objects.insert(path);
|
|
34
36
|
}
|
|
35
37
|
}
|
|
@@ -48,6 +50,7 @@ export class KritzelBrushTool extends KritzelBaseTool {
|
|
|
48
50
|
strokeWidth: this.size,
|
|
49
51
|
});
|
|
50
52
|
path.isCompleted = false;
|
|
53
|
+
this._currentPathId = path.id;
|
|
51
54
|
this._core.store.state.objects.insert(path);
|
|
52
55
|
}
|
|
53
56
|
}
|
|
@@ -57,8 +60,9 @@ export class KritzelBrushTool extends KritzelBaseTool {
|
|
|
57
60
|
event.preventDefault();
|
|
58
61
|
}
|
|
59
62
|
if (event.pointerType === 'mouse') {
|
|
60
|
-
if (this._core.store.state.isDrawing) {
|
|
61
|
-
const
|
|
63
|
+
if (this._core.store.state.isDrawing && this._currentPathId) {
|
|
64
|
+
const matchingObjects = this._core.store.state.objects.filter(o => o.id === this._currentPathId);
|
|
65
|
+
const currentPath = matchingObjects.length > 0 ? matchingObjects[0] : null;
|
|
62
66
|
if (currentPath) {
|
|
63
67
|
const x = event.clientX - this._core.store.offsetX;
|
|
64
68
|
const y = event.clientY - this._core.store.offsetY;
|
|
@@ -81,23 +85,26 @@ export class KritzelBrushTool extends KritzelBaseTool {
|
|
|
81
85
|
if (event.pointerType === 'touch') {
|
|
82
86
|
const activePointers = Array.from(this._core.store.state.pointers.values());
|
|
83
87
|
if (activePointers.length === 1) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
88
|
+
if (this._currentPathId) {
|
|
89
|
+
const matchingObjects = this._core.store.state.objects.filter(o => o.id === this._currentPathId);
|
|
90
|
+
const currentPath = matchingObjects.length > 0 ? matchingObjects[0] : null;
|
|
91
|
+
if (currentPath) {
|
|
92
|
+
const x = Math.round(activePointers[0].clientX - this._core.store.offsetX);
|
|
93
|
+
const y = Math.round(activePointers[0].clientY - this._core.store.offsetY);
|
|
94
|
+
const updatedPath = KritzelPath.create(this._core, {
|
|
95
|
+
points: [...currentPath.points, [x, y]],
|
|
96
|
+
translateX: -this._core.store.state.translateX,
|
|
97
|
+
translateY: -this._core.store.state.translateY,
|
|
98
|
+
scale: this._core.store.state.scale,
|
|
99
|
+
fill: this.color,
|
|
100
|
+
strokeWidth: this.size,
|
|
101
|
+
});
|
|
102
|
+
updatedPath.id = currentPath.id;
|
|
103
|
+
updatedPath.workspaceId = currentPath.workspaceId;
|
|
104
|
+
updatedPath.zIndex = currentPath.zIndex;
|
|
105
|
+
updatedPath.isCompleted = false;
|
|
106
|
+
this._core.store.state.objects.update(updatedPath);
|
|
107
|
+
}
|
|
101
108
|
}
|
|
102
109
|
}
|
|
103
110
|
}
|
|
@@ -109,22 +116,30 @@ export class KritzelBrushTool extends KritzelBaseTool {
|
|
|
109
116
|
if (event.pointerType === 'mouse') {
|
|
110
117
|
if (this._core.store.state.isDrawing) {
|
|
111
118
|
this._core.store.state.isDrawing = false;
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
currentPath
|
|
115
|
-
|
|
116
|
-
|
|
119
|
+
if (this._currentPathId) {
|
|
120
|
+
const matchingObjects = this._core.store.state.objects.filter(o => o.id === this._currentPathId);
|
|
121
|
+
const currentPath = matchingObjects.length > 0 ? matchingObjects[0] : null;
|
|
122
|
+
if (currentPath) {
|
|
123
|
+
currentPath.isCompleted = true;
|
|
124
|
+
this._core.store.state.objects.update(currentPath);
|
|
125
|
+
this._core.engine.emitObjectsChange();
|
|
126
|
+
}
|
|
127
|
+
this._currentPathId = null;
|
|
117
128
|
}
|
|
118
129
|
}
|
|
119
130
|
}
|
|
120
131
|
if (event.pointerType === 'touch') {
|
|
121
132
|
if (this._core.store.state.isDrawing) {
|
|
122
133
|
this._core.store.state.isDrawing = false;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
currentPath
|
|
126
|
-
|
|
127
|
-
|
|
134
|
+
if (this._currentPathId) {
|
|
135
|
+
const matchingObjects = this._core.store.state.objects.filter(o => o.id === this._currentPathId);
|
|
136
|
+
const currentPath = matchingObjects.length > 0 ? matchingObjects[0] : null;
|
|
137
|
+
if (currentPath) {
|
|
138
|
+
currentPath.isCompleted = true;
|
|
139
|
+
this._core.store.state.objects.update(currentPath);
|
|
140
|
+
this._core.engine.emitObjectsChange();
|
|
141
|
+
}
|
|
142
|
+
this._currentPathId = null;
|
|
128
143
|
}
|
|
129
144
|
}
|
|
130
145
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brush-tool.class.js","sourceRoot":"","sources":["../../../src/classes/tools/brush-tool.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { KritzelEventHelper } from '../../helpers/event.helper';\r\nimport { KritzelPath } from '../objects/path.class';\r\nimport { KritzelBaseTool } from './base-tool.class';\r\nimport { KritzelCore } from '../core/core.class';\r\n\r\nexport class KritzelBrushTool extends KritzelBaseTool {\r\n type: 'pen' | 'highlighter' = 'pen';\r\n\r\n color: string = '#000000';\r\n\r\n size: number = 6;\r\n\r\n palettes: {\r\n [brushType: string]: string[];\r\n } = {\r\n pen: ['#000000', '#FFFFFF', '#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#FF00FF', '#00FFFF', '#808080', '#C0C0C0', '#800000', '#008000', '#000080', '#808000', '#800080'],\r\n highlighter: ['#ffff00', '#ffb347', '#b4ffb4'],\r\n };\r\n\r\n constructor(core: KritzelCore) {\r\n super(core);\r\n }\r\n\r\n handlePointerDown(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n if (KritzelEventHelper.isLeftClick(event)) {\r\n this._core.store.state.isDrawing = true;\r\n const x = event.clientX - this._core.store.offsetX;\r\n const y = event.clientY - this._core.store.offsetY;\r\n\r\n const path = KritzelPath.create(this._core, {\r\n points: [[x, y]],\r\n translateX: -this._core.store.state.translateX,\r\n translateY: -this._core.store.state.translateY,\r\n scale: this._core.store.state.scale,\r\n fill: this.color,\r\n strokeWidth: this.size,\r\n });\r\n path.isCompleted = false;\r\n\r\n this._core.store.state.objects.insert(path);\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._core.store.state.pointers.values());\r\n\r\n if (activePointers.length === 1) {\r\n const x = Math.round(activePointers[0].clientX - this._core.store.offsetX);\r\n const y = Math.round(activePointers[0].clientY - this._core.store.offsetY);\r\n\r\n this._core.store.state.isDrawing = true;\r\n\r\n const path = KritzelPath.create(this._core, {\r\n points: [[x, y]],\r\n translateX: -this._core.store.state.translateX,\r\n translateY: -this._core.store.state.translateY,\r\n scale: this._core.store.state.scale,\r\n fill: this.color,\r\n strokeWidth: this.size,\r\n });\r\n path.isCompleted = false;\r\n\r\n this._core.store.state.objects.insert(path);\r\n }\r\n }\r\n }\r\n\r\n handlePointerMove(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n if (this._core.store.state.isDrawing) {\r\n const currentPath = this._core.store.currentPath;\r\n if (currentPath) {\r\n const x = event.clientX - this._core.store.offsetX;\r\n const y = event.clientY - this._core.store.offsetY;\r\n\r\n const updatedPath = KritzelPath.create(this._core, {\r\n points: [...currentPath.points, [x, y]],\r\n translateX: -this._core.store.state.translateX,\r\n translateY: -this._core.store.state.translateY,\r\n scale: this._core.store.state.scale,\r\n fill: this.color,\r\n strokeWidth: this.size,\r\n });\r\n updatedPath.id = currentPath.id;\r\n updatedPath.workspaceId = currentPath.workspaceId;\r\n updatedPath.zIndex = currentPath.zIndex;\r\n updatedPath.isCompleted = false;\r\n\r\n this._core.store.state.objects.update(updatedPath);\r\n }\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._core.store.state.pointers.values());\r\n\r\n if (activePointers.length === 1) {\r\n const currentPath = this._core.store.currentPath;\r\n if (currentPath) {\r\n const x = Math.round(activePointers[0].clientX - this._core.store.offsetX);\r\n const y = Math.round(activePointers[0].clientY - this._core.store.offsetY);\r\n\r\n const updatedPath = KritzelPath.create(this._core, {\r\n points: [...currentPath.points, [x, y]],\r\n translateX: -this._core.store.state.translateX,\r\n translateY: -this._core.store.state.translateY,\r\n scale: this._core.store.state.scale,\r\n fill: this.color,\r\n strokeWidth: this.size,\r\n });\r\n updatedPath.id = currentPath.id;\r\n updatedPath.workspaceId = currentPath.workspaceId;\r\n updatedPath.zIndex = currentPath.zIndex;\r\n updatedPath.isCompleted = false;\r\n\r\n this._core.store.state.objects.update(updatedPath);\r\n }\r\n }\r\n }\r\n }\r\n\r\n handlePointerUp(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n if (this._core.store.state.isDrawing) {\r\n this._core.store.state.isDrawing = false;\r\n\r\n const currentPath = this._core.store.currentPath;\r\n if (currentPath) {\r\n currentPath.isCompleted = true;\r\n this._core.store.state.objects.update(currentPath);\r\n this._core.engine.emitObjectsChange();\r\n }\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n if (this._core.store.state.isDrawing) {\r\n this._core.store.state.isDrawing = false;\r\n\r\n const currentPath = this._core.store.currentPath;\r\n if (currentPath) {\r\n currentPath.isCompleted = true;\r\n this._core.store.state.objects.update(currentPath);\r\n this._core.engine.emitObjectsChange();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"brush-tool.class.js","sourceRoot":"","sources":["../../../src/classes/tools/brush-tool.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { KritzelEventHelper } from '../../helpers/event.helper';\r\nimport { KritzelPath } from '../objects/path.class';\r\nimport { KritzelBaseTool } from './base-tool.class';\r\nimport { KritzelCore } from '../core/core.class';\r\n\r\nexport class KritzelBrushTool extends KritzelBaseTool {\r\n type: 'pen' | 'highlighter' = 'pen';\r\n\r\n color: string = '#000000';\r\n\r\n size: number = 6;\r\n\r\n palettes: {\r\n [brushType: string]: string[];\r\n } = {\r\n pen: ['#000000', '#FFFFFF', '#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#FF00FF', '#00FFFF', '#808080', '#C0C0C0', '#800000', '#008000', '#000080', '#800080'],\r\n highlighter: ['#ffff00', '#ffb347', '#b4ffb4'],\r\n };\r\n\r\n private _currentPathId: string | null = null;\r\n\r\n constructor(core: KritzelCore) {\r\n super(core);\r\n }\r\n\r\n handlePointerDown(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n if (KritzelEventHelper.isLeftClick(event)) {\r\n this._core.store.state.isDrawing = true;\r\n const x = event.clientX - this._core.store.offsetX;\r\n const y = event.clientY - this._core.store.offsetY;\r\n\r\n const path = KritzelPath.create(this._core, {\r\n points: [[x, y]],\r\n translateX: -this._core.store.state.translateX,\r\n translateY: -this._core.store.state.translateY,\r\n scale: this._core.store.state.scale,\r\n fill: this.color,\r\n strokeWidth: this.size,\r\n });\r\n path.isCompleted = false;\r\n\r\n this._currentPathId = path.id;\r\n this._core.store.state.objects.insert(path);\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._core.store.state.pointers.values());\r\n\r\n if (activePointers.length === 1) {\r\n const x = Math.round(activePointers[0].clientX - this._core.store.offsetX);\r\n const y = Math.round(activePointers[0].clientY - this._core.store.offsetY);\r\n\r\n this._core.store.state.isDrawing = true;\r\n\r\n const path = KritzelPath.create(this._core, {\r\n points: [[x, y]],\r\n translateX: -this._core.store.state.translateX,\r\n translateY: -this._core.store.state.translateY,\r\n scale: this._core.store.state.scale,\r\n fill: this.color,\r\n strokeWidth: this.size,\r\n });\r\n path.isCompleted = false;\r\n\r\n this._currentPathId = path.id;\r\n this._core.store.state.objects.insert(path);\r\n }\r\n }\r\n }\r\n\r\n handlePointerMove(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n if (this._core.store.state.isDrawing && this._currentPathId) {\r\n const matchingObjects = this._core.store.state.objects.filter(o => o.id === this._currentPathId);\r\n const currentPath = matchingObjects.length > 0 ? (matchingObjects[0] as KritzelPath) : null;\r\n\r\n if (currentPath) {\r\n const x = event.clientX - this._core.store.offsetX;\r\n const y = event.clientY - this._core.store.offsetY;\r\n\r\n const updatedPath = KritzelPath.create(this._core, {\r\n points: [...currentPath.points, [x, y]],\r\n translateX: -this._core.store.state.translateX,\r\n translateY: -this._core.store.state.translateY,\r\n scale: this._core.store.state.scale,\r\n fill: this.color,\r\n strokeWidth: this.size,\r\n });\r\n updatedPath.id = currentPath.id;\r\n updatedPath.workspaceId = currentPath.workspaceId;\r\n updatedPath.zIndex = currentPath.zIndex;\r\n updatedPath.isCompleted = false;\r\n\r\n this._core.store.state.objects.update(updatedPath);\r\n }\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._core.store.state.pointers.values());\r\n\r\n if (activePointers.length === 1) {\r\n if (this._currentPathId) {\r\n const matchingObjects = this._core.store.state.objects.filter(o => o.id === this._currentPathId);\r\n const currentPath = matchingObjects.length > 0 ? (matchingObjects[0] as KritzelPath) : null;\r\n\r\n if (currentPath) {\r\n const x = Math.round(activePointers[0].clientX - this._core.store.offsetX);\r\n const y = Math.round(activePointers[0].clientY - this._core.store.offsetY);\r\n\r\n const updatedPath = KritzelPath.create(this._core, {\r\n points: [...currentPath.points, [x, y]],\r\n translateX: -this._core.store.state.translateX,\r\n translateY: -this._core.store.state.translateY,\r\n scale: this._core.store.state.scale,\r\n fill: this.color,\r\n strokeWidth: this.size,\r\n });\r\n updatedPath.id = currentPath.id;\r\n updatedPath.workspaceId = currentPath.workspaceId;\r\n updatedPath.zIndex = currentPath.zIndex;\r\n updatedPath.isCompleted = false;\r\n\r\n this._core.store.state.objects.update(updatedPath);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n handlePointerUp(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n if (this._core.store.state.isDrawing) {\r\n this._core.store.state.isDrawing = false;\r\n\r\n if (this._currentPathId) {\r\n const matchingObjects = this._core.store.state.objects.filter(o => o.id === this._currentPathId);\r\n const currentPath = matchingObjects.length > 0 ? (matchingObjects[0] as KritzelPath) : null;\r\n\r\n if (currentPath) {\r\n currentPath.isCompleted = true;\r\n this._core.store.state.objects.update(currentPath);\r\n this._core.engine.emitObjectsChange();\r\n }\r\n this._currentPathId = null;\r\n }\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n if (this._core.store.state.isDrawing) {\r\n this._core.store.state.isDrawing = false;\r\n\r\n if (this._currentPathId) {\r\n const matchingObjects = this._core.store.state.objects.filter(o => o.id === this._currentPathId);\r\n const currentPath = matchingObjects.length > 0 ? (matchingObjects[0] as KritzelPath) : null;\r\n\r\n if (currentPath) {\r\n currentPath.isCompleted = true;\r\n this._core.store.state.objects.update(currentPath);\r\n this._core.engine.emitObjectsChange();\r\n }\r\n this._currentPathId = null;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -134,10 +134,33 @@ export class KritzelPortal {
|
|
|
134
134
|
const refRect = this.anchor.getBoundingClientRect();
|
|
135
135
|
const portalRect = this.portal.getBoundingClientRect();
|
|
136
136
|
const offset = this.offsetY ?? this.defaultOffset;
|
|
137
|
+
const padding = 8; // Minimum padding from viewport edges
|
|
137
138
|
let top = refRect.bottom + offset;
|
|
138
|
-
|
|
139
|
+
const spaceBelow = window.innerHeight - refRect.bottom - offset - padding;
|
|
140
|
+
const spaceAbove = refRect.top - offset - padding;
|
|
141
|
+
// Reset max-height CSS custom property
|
|
142
|
+
this.host.style.removeProperty('--kritzel-portal-max-height');
|
|
143
|
+
if (portalRect.height <= spaceBelow) {
|
|
144
|
+
// Fits below the anchor
|
|
145
|
+
top = refRect.bottom + offset;
|
|
146
|
+
}
|
|
147
|
+
else if (portalRect.height <= spaceAbove) {
|
|
148
|
+
// Fits above the anchor
|
|
139
149
|
top = refRect.top - portalRect.height - offset;
|
|
140
150
|
}
|
|
151
|
+
else {
|
|
152
|
+
// Doesn't fit above or below - constrain the height
|
|
153
|
+
if (spaceBelow >= spaceAbove) {
|
|
154
|
+
// More space below, keep it below with constrained height
|
|
155
|
+
top = refRect.bottom + offset;
|
|
156
|
+
this.host.style.setProperty('--kritzel-portal-max-height', `${spaceBelow}px`);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
// More space above, position above with constrained height
|
|
160
|
+
top = padding;
|
|
161
|
+
this.host.style.setProperty('--kritzel-portal-max-height', `${spaceAbove}px`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
141
164
|
return Math.round(top + window.scrollY);
|
|
142
165
|
}
|
|
143
166
|
openPortal() {
|
|
@@ -166,7 +189,7 @@ export class KritzelPortal {
|
|
|
166
189
|
this.portal.style.left = `${left}px`;
|
|
167
190
|
}
|
|
168
191
|
render() {
|
|
169
|
-
return (h(Host, { key: '
|
|
192
|
+
return (h(Host, { key: 'aa7399f8a2e744eaa89e881bc9e710bd8a0c6c53', style: { display: this.anchor ? 'block' : 'none' } }, h("slot", { key: 'df4d8446cf770dfd98476d19c6b18511e2531574' })));
|
|
170
193
|
}
|
|
171
194
|
static get is() { return "kritzel-portal"; }
|
|
172
195
|
static get encapsulation() { return "shadow"; }
|