kritzel-stencil 0.1.15 → 0.1.16
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-DuwiflC4.js → default-line-tool.config-BXYWjUSM.js} +44 -9
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/kritzel-back-to-content_32.cjs.entry.js +22 -11
- package/dist/collection/classes/core/core.class.js +3 -0
- package/dist/collection/classes/managers/cursor.manager.js +2 -2
- package/dist/collection/classes/objects/base-object.class.js +7 -0
- package/dist/collection/classes/objects/path.class.js +32 -0
- package/dist/collection/classes/registries/icon-registry.class.js +1 -1
- package/dist/collection/classes/tools/text-tool.class.js +4 -6
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +11 -5
- package/dist/collection/components/ui/kritzel-tool-config/kritzel-tool-config.js +4 -2
- package/dist/collection/constants/version.js +1 -1
- package/dist/collection/themes/dark-theme.js +0 -1
- package/dist/collection/themes/light-theme.js +0 -1
- package/dist/components/index.js +1 -1
- package/dist/components/kritzel-back-to-content.js +1 -1
- package/dist/components/kritzel-brush-style.js +1 -1
- package/dist/components/kritzel-color-palette.js +1 -1
- package/dist/components/kritzel-color.js +1 -1
- package/dist/components/kritzel-context-menu.js +1 -1
- package/dist/components/kritzel-controls.js +1 -1
- package/dist/components/kritzel-editor.js +1 -1
- package/dist/components/kritzel-engine.js +1 -1
- package/dist/components/kritzel-export.js +1 -1
- package/dist/components/kritzel-icon.js +1 -1
- package/dist/components/kritzel-master-detail.js +1 -1
- package/dist/components/kritzel-menu-item.js +1 -1
- package/dist/components/kritzel-menu.js +1 -1
- package/dist/components/kritzel-more-menu.js +1 -1
- package/dist/components/kritzel-settings.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-tool-config.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-hIj0tNZB.js → p-BGwkUUZk.js} +1 -1
- package/dist/components/p-BrAnZtQA.js +1 -0
- package/dist/components/{p-CYPjUjdI.js → p-Bzv0vavh.js} +1 -1
- package/dist/components/{p-BXNQ6L9k.js → p-C9HB5kJ3.js} +1 -1
- package/dist/components/{p-C5flBv2m.js → p-C__BfmIJ.js} +1 -1
- package/dist/components/p-Cpb-fnoO.js +1 -0
- package/dist/components/p-Cuf-GvO0.js +1 -0
- package/dist/components/{p-CIAs81AV.js → p-DKNtjoqf.js} +1 -1
- package/dist/components/{p-Dme4j-Ei.js → p-DgZY07rl.js} +1 -1
- package/dist/components/{p-BMYSfzzJ.js → p-DoE6WkDw.js} +1 -1
- package/dist/components/{p-et8QBqmj.js → p-GeVIjnFi.js} +1 -1
- package/dist/components/p-UNc_oph8.js +1 -0
- package/dist/components/{p-NBmc8spY.js → p-bE-Bpn0g.js} +2 -2
- package/dist/components/{p-B5R3r6_m.js → p-dQFQsn5l.js} +1 -1
- package/dist/components/{p-Cz1aTJ3F.js → p-dYHgrz6o.js} +1 -1
- package/dist/components/{p-ki9PrPGQ.js → p-hmtjxvkm.js} +1 -1
- package/dist/components/{p-BbfgUPVl.js → p-ltqCvPCv.js} +1 -1
- package/dist/components/{p-DRXq8ybi.js → p-y6zswJUQ.js} +1 -1
- package/dist/components/{p-CinNuTeF.js → p-yWjTje8m.js} +1 -1
- package/dist/esm/{default-line-tool.config-CuDRR6We.js → default-line-tool.config-BKFxgp0p.js} +44 -9
- package/dist/esm/index.js +2 -2
- package/dist/esm/kritzel-back-to-content_32.entry.js +22 -11
- package/dist/stencil/index.esm.js +1 -1
- package/dist/stencil/p-BKFxgp0p.js +1 -0
- package/dist/stencil/{p-781f1927.entry.js → p-afc040bc.entry.js} +2 -2
- package/dist/stencil/stencil.esm.js +1 -1
- package/dist/types/classes/objects/base-object.class.d.ts +5 -0
- package/dist/types/classes/objects/path.class.d.ts +6 -0
- package/dist/types/constants/version.d.ts +1 -1
- package/package.json +1 -1
- package/dist/components/p-BqZdHh6f.js +0 -1
- package/dist/components/p-D9GoermT.js +0 -1
- package/dist/components/p-DBmK9l5y.js +0 -1
- package/dist/components/p-DPPpa9So.js +0 -1
- package/dist/stencil/p-CuDRR6We.js +0 -1
package/dist/cjs/{default-line-tool.config-DuwiflC4.js → default-line-tool.config-BXYWjUSM.js}
RENAMED
|
@@ -397,6 +397,13 @@ class KritzelBaseObject {
|
|
|
397
397
|
edit(_event) {
|
|
398
398
|
// This method can be overridden by subclasses to handle edit actions.
|
|
399
399
|
}
|
|
400
|
+
/**
|
|
401
|
+
* Called after properties are updated via updateObject.
|
|
402
|
+
* Override in subclasses to perform custom logic when specific properties change.
|
|
403
|
+
*/
|
|
404
|
+
onAfterUpdate(_changedProperties) {
|
|
405
|
+
// Default implementation does nothing
|
|
406
|
+
}
|
|
400
407
|
hitTest(_x, _y) {
|
|
401
408
|
return true; // Default implementation, can be overridden by subclasses
|
|
402
409
|
}
|
|
@@ -14089,7 +14096,6 @@ const lightTheme = {
|
|
|
14089
14096
|
dividerColor: '#e0e0e0',
|
|
14090
14097
|
focusColor: '#007acc',
|
|
14091
14098
|
focusRingColor: 'rgba(0, 122, 255, 0.3)',
|
|
14092
|
-
pointerCursor: 'pointer',
|
|
14093
14099
|
hoverBackground: 'hsl(0, 0%, 0%, 4.3%)',
|
|
14094
14100
|
iconColor: 'currentColor',
|
|
14095
14101
|
scrollbarThumbColor: '#ebebeb',
|
|
@@ -14323,7 +14329,6 @@ const darkTheme = {
|
|
|
14323
14329
|
dividerColor: '#3a3a3a',
|
|
14324
14330
|
focusColor: '#4da3ff',
|
|
14325
14331
|
focusRingColor: 'rgba(0, 122, 255, 0.4)',
|
|
14326
|
-
pointerCursor: 'pointer',
|
|
14327
14332
|
hoverBackground: 'hsl(0, 0%, 100%, 8%)',
|
|
14328
14333
|
iconColor: 'currentColor',
|
|
14329
14334
|
scrollbarThumbColor: '#555555',
|
|
@@ -15101,6 +15106,12 @@ class KritzelPath extends KritzelBaseObject {
|
|
|
15101
15106
|
const scaleY = height / this.height;
|
|
15102
15107
|
this.width = width;
|
|
15103
15108
|
this.height = height;
|
|
15109
|
+
if (this.points.length === 1) {
|
|
15110
|
+
const p = this.points[0];
|
|
15111
|
+
const spreadX = Math.max(0, width - this.strokeWidth) / scaleX;
|
|
15112
|
+
const spreadY = Math.max(0, height - this.strokeWidth) / scaleY;
|
|
15113
|
+
this.points.push([p[0] + spreadX, p[1] + spreadY]);
|
|
15114
|
+
}
|
|
15104
15115
|
this.points = this.points.map(([x, y]) => [x * scaleX, y * scaleY]);
|
|
15105
15116
|
this.d = this.generateSvgPath();
|
|
15106
15117
|
this.width = Math.max(...this.points.map(p => p[0])) - Math.min(...this.points.map(p => p[0])) + this.strokeWidth;
|
|
@@ -15201,6 +15212,13 @@ class KritzelPath extends KritzelBaseObject {
|
|
|
15201
15212
|
this._adjustedPoints = null;
|
|
15202
15213
|
this._core.store.state.objects.update(this);
|
|
15203
15214
|
}
|
|
15215
|
+
onAfterUpdate(changedProperties) {
|
|
15216
|
+
if (changedProperties.includes('strokeWidth')) {
|
|
15217
|
+
this.d = this.generateSvgPath();
|
|
15218
|
+
this.updateBoundingBox();
|
|
15219
|
+
this._adjustedPoints = null;
|
|
15220
|
+
}
|
|
15221
|
+
}
|
|
15204
15222
|
computeAdjustedPoints() {
|
|
15205
15223
|
if (!this.points?.length) {
|
|
15206
15224
|
return [];
|
|
@@ -15268,6 +15286,25 @@ class KritzelPath extends KritzelBaseObject {
|
|
|
15268
15286
|
this.translateX = (this.x + this.translateX) / this.scale;
|
|
15269
15287
|
this.translateY = (this.y + this.translateY) / this.scale;
|
|
15270
15288
|
}
|
|
15289
|
+
/**
|
|
15290
|
+
* Updates width, height, x, y based on current points and strokeWidth.
|
|
15291
|
+
* Does NOT modify translateX/translateY (use updateDimensions for initial setup).
|
|
15292
|
+
*/
|
|
15293
|
+
updateBoundingBox() {
|
|
15294
|
+
const rotatedPoints = this.points.map(([x, y]) => {
|
|
15295
|
+
const rotatedX = x * Math.cos(this.rotation) - y * Math.sin(this.rotation);
|
|
15296
|
+
const rotatedY = x * Math.sin(this.rotation) + y * Math.cos(this.rotation);
|
|
15297
|
+
return [rotatedX, rotatedY];
|
|
15298
|
+
});
|
|
15299
|
+
const minX = Math.min(...rotatedPoints.map(p => p[0] - this.strokeWidth / 2));
|
|
15300
|
+
const minY = Math.min(...rotatedPoints.map(p => p[1] - this.strokeWidth / 2));
|
|
15301
|
+
const maxX = Math.max(...rotatedPoints.map(p => p[0] + this.strokeWidth / 2));
|
|
15302
|
+
const maxY = Math.max(...rotatedPoints.map(p => p[1] + this.strokeWidth / 2));
|
|
15303
|
+
this.width = maxX - minX + this.lineSlack;
|
|
15304
|
+
this.height = maxY - minY + this.lineSlack;
|
|
15305
|
+
this.x = minX;
|
|
15306
|
+
this.y = minY;
|
|
15307
|
+
}
|
|
15271
15308
|
generateSvgPath() {
|
|
15272
15309
|
const stroke = this.getStrokeFromPoints(this.points, this.strokeWidth);
|
|
15273
15310
|
return this.getSvgPathFromStroke(stroke);
|
|
@@ -17454,12 +17491,11 @@ class KritzelTextTool extends KritzelBaseTool {
|
|
|
17454
17491
|
const clientY = event.clientY - this._core.store.offsetY;
|
|
17455
17492
|
const viewportScale = this._core.store.state.scale;
|
|
17456
17493
|
const lockScale = this._core.store.state.lockDrawingScale;
|
|
17457
|
-
const divider = lockScale ? viewportScale : 1;
|
|
17458
17494
|
const text = KritzelText.create(this._core, this.fontSize, this.fontFamily, lockScale ? 1 : viewportScale);
|
|
17459
17495
|
text.fontColor = this.fontColor;
|
|
17460
17496
|
text.opacity = this.opacity;
|
|
17461
|
-
text.translateX = (clientX - this._core.store.state.translateX) /
|
|
17462
|
-
text.translateY = (clientY - this._core.store.state.translateY) /
|
|
17497
|
+
text.translateX = (clientX - this._core.store.state.translateX) / viewportScale;
|
|
17498
|
+
text.translateY = (clientY - this._core.store.state.translateY) / viewportScale;
|
|
17463
17499
|
text.zIndex = this._core.store.currentZIndex;
|
|
17464
17500
|
this._core.store.state.objects.insert(text);
|
|
17465
17501
|
this._core.rerender();
|
|
@@ -17492,12 +17528,11 @@ class KritzelTextTool extends KritzelBaseTool {
|
|
|
17492
17528
|
const clientY = Math.round(activePointers[0].clientY - this._core.store.offsetY);
|
|
17493
17529
|
const viewportScale = this._core.store.state.scale;
|
|
17494
17530
|
const lockScale = this._core.store.state.lockDrawingScale;
|
|
17495
|
-
const divider = lockScale ? viewportScale : 1;
|
|
17496
17531
|
const text = KritzelText.create(this._core, this.fontSize, this.fontFamily, lockScale ? 1 : viewportScale);
|
|
17497
17532
|
text.fontColor = this.fontColor;
|
|
17498
17533
|
text.opacity = this.opacity;
|
|
17499
|
-
text.translateX = (clientX - this._core.store.state.translateX) /
|
|
17500
|
-
text.translateY = (clientY - this._core.store.state.translateY) /
|
|
17534
|
+
text.translateX = (clientX - this._core.store.state.translateX) / viewportScale;
|
|
17535
|
+
text.translateY = (clientY - this._core.store.state.translateY) / viewportScale;
|
|
17501
17536
|
text.zIndex = this._core.store.currentZIndex;
|
|
17502
17537
|
this._core.store.state.objects.insert(text);
|
|
17503
17538
|
this._core.rerender();
|
|
@@ -17548,7 +17583,7 @@ KritzelIconRegistry.registerIcons({
|
|
|
17548
17583
|
'image': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect width="18" height="18" x="3" y="3" rx="2" ry="2"/><circle cx="9" cy="9" r="2"/><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"/></svg>',
|
|
17549
17584
|
'chevron-down': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m6 9 6 6 6-6"/></svg>',
|
|
17550
17585
|
'chevron-up': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m18 15-6-6-6 6"/></svg>',
|
|
17551
|
-
'chevron-left': '<svg
|
|
17586
|
+
'chevron-left': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-left-icon lucide-chevron-left"><path d="m15 18-6-6 6-6"/></svg>',
|
|
17552
17587
|
'chevron-right': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right-icon lucide-chevron-right"><path d="m9 18 6-6-6-6"/></svg>',
|
|
17553
17588
|
'chevrons-left': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-left-icon lucide-chevrons-left"><path d="m11 17-5-5 5-5"/><path d="m18 17-5-5 5-5"/></svg>',
|
|
17554
17589
|
'copy': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy-icon lucide-copy"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg>',
|
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var index = require('./index-i21-qqbc.js');
|
|
4
|
-
var defaultLineTool_config = require('./default-line-tool.config-
|
|
4
|
+
var defaultLineTool_config = require('./default-line-tool.config-BXYWjUSM.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
|
|
|
@@ -20209,12 +20209,12 @@ class KritzelCursorManager {
|
|
|
20209
20209
|
// Reset cursor on old target
|
|
20210
20210
|
if (this._targetElement) {
|
|
20211
20211
|
this._targetElement.style.cursor = '';
|
|
20212
|
-
this._targetElement.style.removeProperty('--kritzel-pointer-cursor');
|
|
20212
|
+
this._targetElement.style.removeProperty('--kritzel-global-pointer-cursor');
|
|
20213
20213
|
}
|
|
20214
20214
|
this._targetElement = element;
|
|
20215
20215
|
// Set the pointer cursor CSS variable for child components to use
|
|
20216
20216
|
if (this._targetElement) {
|
|
20217
|
-
this._targetElement.style.setProperty('--kritzel-pointer-cursor', defaultLineTool_config.KritzelCursorHelper.getPointerCursor());
|
|
20217
|
+
this._targetElement.style.setProperty('--kritzel-global-pointer-cursor', defaultLineTool_config.KritzelCursorHelper.getPointerCursor());
|
|
20218
20218
|
}
|
|
20219
20219
|
}
|
|
20220
20220
|
/**
|
|
@@ -20525,11 +20525,14 @@ class KritzelCore {
|
|
|
20525
20525
|
this._store.state.objects.remove(o => o.id === object.id);
|
|
20526
20526
|
}
|
|
20527
20527
|
updateObject(object, updatedProperties) {
|
|
20528
|
+
const changedKeys = [];
|
|
20528
20529
|
for (const key in updatedProperties) {
|
|
20529
20530
|
if (updatedProperties.hasOwnProperty(key)) {
|
|
20530
20531
|
object[key] = updatedProperties[key];
|
|
20532
|
+
changedKeys.push(key);
|
|
20531
20533
|
}
|
|
20532
20534
|
}
|
|
20535
|
+
object.onAfterUpdate(changedKeys);
|
|
20533
20536
|
this._store.state.objects.update(object);
|
|
20534
20537
|
}
|
|
20535
20538
|
addSelectionGroup(selectionGroup) {
|
|
@@ -22586,8 +22589,10 @@ const KritzelEngine = class {
|
|
|
22586
22589
|
strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,
|
|
22587
22590
|
strokeLinecap: 'round',
|
|
22588
22591
|
fill: 'none',
|
|
22589
|
-
} })), !this.isSelecting && (index.h("g", { class: "selection-line-handles", style: { pointerEvents: 'auto' } }, index.h("circle", { class: "selection-line-handle start", cx: object.startX - object.x, cy: object.startY - object.y, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
|
|
22592
|
+
} })), !this.isSelecting && (index.h("g", { class: "selection-line-handles", style: { pointerEvents: 'auto' } }, index.h("circle", { class: "selection-line-handle start", cx: object.startX - object.x, cy: object.startY - object.y, r: `${((baseHandleSize - 1) * object.scale) / this.core.store.state?.scale}`, style: {
|
|
22590
22593
|
fill: 'var(--kritzel-selection-handle-color, #000000)',
|
|
22594
|
+
stroke: 'var(--kritzel-selection-handle-stroke-color, #007AFF)',
|
|
22595
|
+
strokeWidth: `calc(2px * ${object.scale} / ${this.core.store.state?.scale})`,
|
|
22591
22596
|
paintOrder: 'fill',
|
|
22592
22597
|
} }), index.h("circle", { class: "selection-line-handle-overlay start", cx: object.startX - object.x, cy: object.startY - object.y, r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
|
|
22593
22598
|
fill: 'transparent',
|
|
@@ -22596,8 +22601,10 @@ const KritzelEngine = class {
|
|
|
22596
22601
|
? (object.startX + 2 * object.controlX + object.endX) / 4 - object.x
|
|
22597
22602
|
: (object.startX - object.x + object.endX - object.x) / 2, cy: object.controlY !== undefined
|
|
22598
22603
|
? (object.startY + 2 * object.controlY + object.endY) / 4 - object.y
|
|
22599
|
-
: (object.startY - object.y + object.endY - object.y) / 2, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
|
|
22604
|
+
: (object.startY - object.y + object.endY - object.y) / 2, r: `${((baseHandleSize - 1) * object.scale) / this.core.store.state?.scale}`, style: {
|
|
22600
22605
|
fill: 'var(--kritzel-selection-handle-color, #000000)',
|
|
22606
|
+
stroke: 'var(--kritzel-selection-handle-stroke-color, #007AFF)',
|
|
22607
|
+
strokeWidth: `calc(2px * ${object.scale} / ${this.core.store.state?.scale})`,
|
|
22601
22608
|
paintOrder: 'fill',
|
|
22602
22609
|
} }), index.h("circle", { class: "selection-line-handle-overlay center", cx: object.controlX !== undefined
|
|
22603
22610
|
? (object.startX + 2 * object.controlX + object.endX) / 4 - object.x
|
|
@@ -22606,8 +22613,10 @@ const KritzelEngine = class {
|
|
|
22606
22613
|
: (object.startY - object.y + object.endY - object.y) / 2, r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
|
|
22607
22614
|
fill: 'transparent',
|
|
22608
22615
|
paintOrder: 'fill',
|
|
22609
|
-
} }), index.h("circle", { class: "selection-line-handle end", cx: object.endX - object.x, cy: object.endY - object.y, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
|
|
22616
|
+
} }), index.h("circle", { class: "selection-line-handle end", cx: object.endX - object.x, cy: object.endY - object.y, r: `${((baseHandleSize - 1) * object.scale) / this.core.store.state?.scale}`, style: {
|
|
22610
22617
|
fill: 'var(--kritzel-selection-handle-color, #000000)',
|
|
22618
|
+
stroke: 'var(--kritzel-selection-handle-stroke-color, #007AFF)',
|
|
22619
|
+
strokeWidth: `calc(2px * ${object.scale} / ${this.core.store.state?.scale})`,
|
|
22611
22620
|
paintOrder: 'fill',
|
|
22612
22621
|
} }), index.h("circle", { class: "selection-line-handle-overlay end", cx: object.endX - object.x, cy: object.endY - object.y, r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
|
|
22613
22622
|
fill: 'transparent',
|
|
@@ -22686,7 +22695,7 @@ const KritzelEngine = class {
|
|
|
22686
22695
|
stroke: 'var(--kritzel-snap-indicator-stroke, #007bff)',
|
|
22687
22696
|
strokeWidth: data.indicatorStrokeWidth,
|
|
22688
22697
|
} }))));
|
|
22689
|
-
})()), this.core.store.state.isContextMenuVisible && (index.h("kritzel-context-menu", { key: '
|
|
22698
|
+
})()), this.core.store.state.isContextMenuVisible && (index.h("kritzel-context-menu", { key: 'a2860f9b1ccfa0183324939b7c11987e6aaaa168', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.selectionGroup?.objects || [], style: {
|
|
22690
22699
|
position: 'fixed',
|
|
22691
22700
|
left: `${this.core.store.state.contextMenuX}px`,
|
|
22692
22701
|
top: `${this.core.store.state.contextMenuY}px`,
|
|
@@ -22697,7 +22706,7 @@ const KritzelEngine = class {
|
|
|
22697
22706
|
y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,
|
|
22698
22707
|
}, this.core.store.selectionGroup?.objects);
|
|
22699
22708
|
this.hideContextMenu();
|
|
22700
|
-
}, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof defaultLineTool_config.KritzelEraserTool && !this.core.store.state.isScaling && index.h("kritzel-cursor-trail", { key: '
|
|
22709
|
+
}, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof defaultLineTool_config.KritzelEraserTool && !this.core.store.state.isScaling && index.h("kritzel-cursor-trail", { key: '20dc66627a01cb9840807b3fe9d96be8599a48f8', core: this.core })));
|
|
22701
22710
|
}
|
|
22702
22711
|
static get watchers() { return {
|
|
22703
22712
|
"workspace": [{
|
|
@@ -23708,7 +23717,7 @@ const KritzelPortal = class {
|
|
|
23708
23717
|
* This file is auto-generated by the version bump scripts.
|
|
23709
23718
|
* Do not modify manually.
|
|
23710
23719
|
*/
|
|
23711
|
-
const KRITZEL_VERSION = '0.1.
|
|
23720
|
+
const KRITZEL_VERSION = '0.1.16';
|
|
23712
23721
|
|
|
23713
23722
|
const kritzelSettingsCss = () => `:host{display:contents}kritzel-dialog{--kritzel-dialog-body-padding:0;--kritzel-dialog-width-large:800px;--kritzel-dialog-height-large:500px}.footer-button{padding:8px 16px;border-radius:6px;cursor:pointer;font-size:14px}.cancel-button{border:1px solid #ebebeb;background:#fff;color:inherit}.cancel-button:hover{background:#f5f5f5}.settings-content{padding:0}.settings-content h3{margin:0 0 16px 0;font-size:18px;font-weight:600;color:var(--kritzel-settings-content-heading-color, #333333)}.settings-content p{margin:0;font-size:14px;color:var(--kritzel-settings-content-text-color, #666666);line-height:1.5}.settings-group{display:flex;flex-direction:column;gap:24px}.settings-item{display:flex;flex-direction:column;gap:8px}.settings-row{display:flex;align-items:center;justify-content:space-between;gap:16px}.settings-label{font-size:14px;font-weight:500;color:var(--kritzel-settings-label-color, #333333);margin:0}.settings-description{font-size:12px;color:var(--kritzel-settings-description-color, #888888);margin:0;line-height:1.4}`;
|
|
23714
23723
|
|
|
@@ -24123,7 +24132,7 @@ const KritzelToolConfig = class {
|
|
|
24123
24132
|
handlePropertyChange = (propertyName, value) => {
|
|
24124
24133
|
// Special handling for shape fill
|
|
24125
24134
|
if ((this.config.type === 'shape' || this.config.type === 'selection') && propertyName === 'fillColor') {
|
|
24126
|
-
const newFillColor = value === 'filled' ? this.tool[this.config.colorProperty] : 'transparent';
|
|
24135
|
+
const newFillColor = value === 'filled' ? this.tool[this.config.colorProperty] : { light: 'transparent', dark: 'transparent' };
|
|
24127
24136
|
this.tool.fillColor = newFillColor;
|
|
24128
24137
|
// When switching to fill mode, also update stroke color to match
|
|
24129
24138
|
if (value === 'filled') {
|
|
@@ -24142,7 +24151,9 @@ const KritzelToolConfig = class {
|
|
|
24142
24151
|
};
|
|
24143
24152
|
getShapeFillValue() {
|
|
24144
24153
|
const fillColor = this.tool.fillColor;
|
|
24145
|
-
|
|
24154
|
+
const isTransparent = typeof fillColor === 'string' ? fillColor === 'transparent' :
|
|
24155
|
+
(fillColor.light === 'transparent' && fillColor.dark === 'transparent');
|
|
24156
|
+
return isTransparent ? 'transparent' : 'filled';
|
|
24146
24157
|
}
|
|
24147
24158
|
renderControl(control) {
|
|
24148
24159
|
const value = this.tool[control.propertyName];
|
|
@@ -232,11 +232,14 @@ export class KritzelCore {
|
|
|
232
232
|
this._store.state.objects.remove(o => o.id === object.id);
|
|
233
233
|
}
|
|
234
234
|
updateObject(object, updatedProperties) {
|
|
235
|
+
const changedKeys = [];
|
|
235
236
|
for (const key in updatedProperties) {
|
|
236
237
|
if (updatedProperties.hasOwnProperty(key)) {
|
|
237
238
|
object[key] = updatedProperties[key];
|
|
239
|
+
changedKeys.push(key);
|
|
238
240
|
}
|
|
239
241
|
}
|
|
242
|
+
object.onAfterUpdate(changedKeys);
|
|
240
243
|
this._store.state.objects.update(object);
|
|
241
244
|
}
|
|
242
245
|
addSelectionGroup(selectionGroup) {
|
|
@@ -18,12 +18,12 @@ export class KritzelCursorManager {
|
|
|
18
18
|
// Reset cursor on old target
|
|
19
19
|
if (this._targetElement) {
|
|
20
20
|
this._targetElement.style.cursor = '';
|
|
21
|
-
this._targetElement.style.removeProperty('--kritzel-pointer-cursor');
|
|
21
|
+
this._targetElement.style.removeProperty('--kritzel-global-pointer-cursor');
|
|
22
22
|
}
|
|
23
23
|
this._targetElement = element;
|
|
24
24
|
// Set the pointer cursor CSS variable for child components to use
|
|
25
25
|
if (this._targetElement) {
|
|
26
|
-
this._targetElement.style.setProperty('--kritzel-pointer-cursor', KritzelCursorHelper.getPointerCursor());
|
|
26
|
+
this._targetElement.style.setProperty('--kritzel-global-pointer-cursor', KritzelCursorHelper.getPointerCursor());
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
@@ -218,6 +218,13 @@ export class KritzelBaseObject {
|
|
|
218
218
|
edit(_event) {
|
|
219
219
|
// This method can be overridden by subclasses to handle edit actions.
|
|
220
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* Called after properties are updated via updateObject.
|
|
223
|
+
* Override in subclasses to perform custom logic when specific properties change.
|
|
224
|
+
*/
|
|
225
|
+
onAfterUpdate(_changedProperties) {
|
|
226
|
+
// Default implementation does nothing
|
|
227
|
+
}
|
|
221
228
|
hitTest(_x, _y) {
|
|
222
229
|
return true; // Default implementation, can be overridden by subclasses
|
|
223
230
|
}
|
|
@@ -61,6 +61,12 @@ export class KritzelPath extends KritzelBaseObject {
|
|
|
61
61
|
const scaleY = height / this.height;
|
|
62
62
|
this.width = width;
|
|
63
63
|
this.height = height;
|
|
64
|
+
if (this.points.length === 1) {
|
|
65
|
+
const p = this.points[0];
|
|
66
|
+
const spreadX = Math.max(0, width - this.strokeWidth) / scaleX;
|
|
67
|
+
const spreadY = Math.max(0, height - this.strokeWidth) / scaleY;
|
|
68
|
+
this.points.push([p[0] + spreadX, p[1] + spreadY]);
|
|
69
|
+
}
|
|
64
70
|
this.points = this.points.map(([x, y]) => [x * scaleX, y * scaleY]);
|
|
65
71
|
this.d = this.generateSvgPath();
|
|
66
72
|
this.width = Math.max(...this.points.map(p => p[0])) - Math.min(...this.points.map(p => p[0])) + this.strokeWidth;
|
|
@@ -161,6 +167,13 @@ export class KritzelPath extends KritzelBaseObject {
|
|
|
161
167
|
this._adjustedPoints = null;
|
|
162
168
|
this._core.store.state.objects.update(this);
|
|
163
169
|
}
|
|
170
|
+
onAfterUpdate(changedProperties) {
|
|
171
|
+
if (changedProperties.includes('strokeWidth')) {
|
|
172
|
+
this.d = this.generateSvgPath();
|
|
173
|
+
this.updateBoundingBox();
|
|
174
|
+
this._adjustedPoints = null;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
164
177
|
computeAdjustedPoints() {
|
|
165
178
|
if (!this.points?.length) {
|
|
166
179
|
return [];
|
|
@@ -228,6 +241,25 @@ export class KritzelPath extends KritzelBaseObject {
|
|
|
228
241
|
this.translateX = (this.x + this.translateX) / this.scale;
|
|
229
242
|
this.translateY = (this.y + this.translateY) / this.scale;
|
|
230
243
|
}
|
|
244
|
+
/**
|
|
245
|
+
* Updates width, height, x, y based on current points and strokeWidth.
|
|
246
|
+
* Does NOT modify translateX/translateY (use updateDimensions for initial setup).
|
|
247
|
+
*/
|
|
248
|
+
updateBoundingBox() {
|
|
249
|
+
const rotatedPoints = this.points.map(([x, y]) => {
|
|
250
|
+
const rotatedX = x * Math.cos(this.rotation) - y * Math.sin(this.rotation);
|
|
251
|
+
const rotatedY = x * Math.sin(this.rotation) + y * Math.cos(this.rotation);
|
|
252
|
+
return [rotatedX, rotatedY];
|
|
253
|
+
});
|
|
254
|
+
const minX = Math.min(...rotatedPoints.map(p => p[0] - this.strokeWidth / 2));
|
|
255
|
+
const minY = Math.min(...rotatedPoints.map(p => p[1] - this.strokeWidth / 2));
|
|
256
|
+
const maxX = Math.max(...rotatedPoints.map(p => p[0] + this.strokeWidth / 2));
|
|
257
|
+
const maxY = Math.max(...rotatedPoints.map(p => p[1] + this.strokeWidth / 2));
|
|
258
|
+
this.width = maxX - minX + this.lineSlack;
|
|
259
|
+
this.height = maxY - minY + this.lineSlack;
|
|
260
|
+
this.x = minX;
|
|
261
|
+
this.y = minY;
|
|
262
|
+
}
|
|
231
263
|
generateSvgPath() {
|
|
232
264
|
const stroke = this.getStrokeFromPoints(this.points, this.strokeWidth);
|
|
233
265
|
return this.getSvgPathFromStroke(stroke);
|
|
@@ -34,7 +34,7 @@ KritzelIconRegistry.registerIcons({
|
|
|
34
34
|
'image': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect width="18" height="18" x="3" y="3" rx="2" ry="2"/><circle cx="9" cy="9" r="2"/><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"/></svg>',
|
|
35
35
|
'chevron-down': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m6 9 6 6 6-6"/></svg>',
|
|
36
36
|
'chevron-up': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m18 15-6-6-6 6"/></svg>',
|
|
37
|
-
'chevron-left': '<svg
|
|
37
|
+
'chevron-left': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-left-icon lucide-chevron-left"><path d="m15 18-6-6 6-6"/></svg>',
|
|
38
38
|
'chevron-right': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right-icon lucide-chevron-right"><path d="m9 18 6-6-6-6"/></svg>',
|
|
39
39
|
'chevrons-left': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-left-icon lucide-chevrons-left"><path d="m11 17-5-5 5-5"/><path d="m18 17-5-5 5-5"/></svg>',
|
|
40
40
|
'copy': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy-icon lucide-copy"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg>',
|
|
@@ -42,12 +42,11 @@ export class KritzelTextTool extends KritzelBaseTool {
|
|
|
42
42
|
const clientY = event.clientY - this._core.store.offsetY;
|
|
43
43
|
const viewportScale = this._core.store.state.scale;
|
|
44
44
|
const lockScale = this._core.store.state.lockDrawingScale;
|
|
45
|
-
const divider = lockScale ? viewportScale : 1;
|
|
46
45
|
const text = KritzelText.create(this._core, this.fontSize, this.fontFamily, lockScale ? 1 : viewportScale);
|
|
47
46
|
text.fontColor = this.fontColor;
|
|
48
47
|
text.opacity = this.opacity;
|
|
49
|
-
text.translateX = (clientX - this._core.store.state.translateX) /
|
|
50
|
-
text.translateY = (clientY - this._core.store.state.translateY) /
|
|
48
|
+
text.translateX = (clientX - this._core.store.state.translateX) / viewportScale;
|
|
49
|
+
text.translateY = (clientY - this._core.store.state.translateY) / viewportScale;
|
|
51
50
|
text.zIndex = this._core.store.currentZIndex;
|
|
52
51
|
this._core.store.state.objects.insert(text);
|
|
53
52
|
this._core.rerender();
|
|
@@ -80,12 +79,11 @@ export class KritzelTextTool extends KritzelBaseTool {
|
|
|
80
79
|
const clientY = Math.round(activePointers[0].clientY - this._core.store.offsetY);
|
|
81
80
|
const viewportScale = this._core.store.state.scale;
|
|
82
81
|
const lockScale = this._core.store.state.lockDrawingScale;
|
|
83
|
-
const divider = lockScale ? viewportScale : 1;
|
|
84
82
|
const text = KritzelText.create(this._core, this.fontSize, this.fontFamily, lockScale ? 1 : viewportScale);
|
|
85
83
|
text.fontColor = this.fontColor;
|
|
86
84
|
text.opacity = this.opacity;
|
|
87
|
-
text.translateX = (clientX - this._core.store.state.translateX) /
|
|
88
|
-
text.translateY = (clientY - this._core.store.state.translateY) /
|
|
85
|
+
text.translateX = (clientX - this._core.store.state.translateX) / viewportScale;
|
|
86
|
+
text.translateY = (clientY - this._core.store.state.translateY) / viewportScale;
|
|
89
87
|
text.zIndex = this._core.store.currentZIndex;
|
|
90
88
|
this._core.store.state.objects.insert(text);
|
|
91
89
|
this._core.rerender();
|
|
@@ -677,8 +677,10 @@ export class KritzelEngine {
|
|
|
677
677
|
strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.core.store.state?.scale})`,
|
|
678
678
|
strokeLinecap: 'round',
|
|
679
679
|
fill: 'none',
|
|
680
|
-
} })), !this.isSelecting && (h("g", { class: "selection-line-handles", style: { pointerEvents: 'auto' } }, h("circle", { class: "selection-line-handle start", cx: object.startX - object.x, cy: object.startY - object.y, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
|
|
680
|
+
} })), !this.isSelecting && (h("g", { class: "selection-line-handles", style: { pointerEvents: 'auto' } }, h("circle", { class: "selection-line-handle start", cx: object.startX - object.x, cy: object.startY - object.y, r: `${((baseHandleSize - 1) * object.scale) / this.core.store.state?.scale}`, style: {
|
|
681
681
|
fill: 'var(--kritzel-selection-handle-color, #000000)',
|
|
682
|
+
stroke: 'var(--kritzel-selection-handle-stroke-color, #007AFF)',
|
|
683
|
+
strokeWidth: `calc(2px * ${object.scale} / ${this.core.store.state?.scale})`,
|
|
682
684
|
paintOrder: 'fill',
|
|
683
685
|
} }), h("circle", { class: "selection-line-handle-overlay start", cx: object.startX - object.x, cy: object.startY - object.y, r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
|
|
684
686
|
fill: 'transparent',
|
|
@@ -687,8 +689,10 @@ export class KritzelEngine {
|
|
|
687
689
|
? (object.startX + 2 * object.controlX + object.endX) / 4 - object.x
|
|
688
690
|
: (object.startX - object.x + object.endX - object.x) / 2, cy: object.controlY !== undefined
|
|
689
691
|
? (object.startY + 2 * object.controlY + object.endY) / 4 - object.y
|
|
690
|
-
: (object.startY - object.y + object.endY - object.y) / 2, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
|
|
692
|
+
: (object.startY - object.y + object.endY - object.y) / 2, r: `${((baseHandleSize - 1) * object.scale) / this.core.store.state?.scale}`, style: {
|
|
691
693
|
fill: 'var(--kritzel-selection-handle-color, #000000)',
|
|
694
|
+
stroke: 'var(--kritzel-selection-handle-stroke-color, #007AFF)',
|
|
695
|
+
strokeWidth: `calc(2px * ${object.scale} / ${this.core.store.state?.scale})`,
|
|
692
696
|
paintOrder: 'fill',
|
|
693
697
|
} }), h("circle", { class: "selection-line-handle-overlay center", cx: object.controlX !== undefined
|
|
694
698
|
? (object.startX + 2 * object.controlX + object.endX) / 4 - object.x
|
|
@@ -697,8 +701,10 @@ export class KritzelEngine {
|
|
|
697
701
|
: (object.startY - object.y + object.endY - object.y) / 2, r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
|
|
698
702
|
fill: 'transparent',
|
|
699
703
|
paintOrder: 'fill',
|
|
700
|
-
} }), h("circle", { class: "selection-line-handle end", cx: object.endX - object.x, cy: object.endY - object.y, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
|
|
704
|
+
} }), h("circle", { class: "selection-line-handle end", cx: object.endX - object.x, cy: object.endY - object.y, r: `${((baseHandleSize - 1) * object.scale) / this.core.store.state?.scale}`, style: {
|
|
701
705
|
fill: 'var(--kritzel-selection-handle-color, #000000)',
|
|
706
|
+
stroke: 'var(--kritzel-selection-handle-stroke-color, #007AFF)',
|
|
707
|
+
strokeWidth: `calc(2px * ${object.scale} / ${this.core.store.state?.scale})`,
|
|
702
708
|
paintOrder: 'fill',
|
|
703
709
|
} }), h("circle", { class: "selection-line-handle-overlay end", cx: object.endX - object.x, cy: object.endY - object.y, r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
|
|
704
710
|
fill: 'transparent',
|
|
@@ -777,7 +783,7 @@ export class KritzelEngine {
|
|
|
777
783
|
stroke: 'var(--kritzel-snap-indicator-stroke, #007bff)',
|
|
778
784
|
strokeWidth: data.indicatorStrokeWidth,
|
|
779
785
|
} }))));
|
|
780
|
-
})()), this.core.store.state.isContextMenuVisible && (h("kritzel-context-menu", { key: '
|
|
786
|
+
})()), this.core.store.state.isContextMenuVisible && (h("kritzel-context-menu", { key: 'a2860f9b1ccfa0183324939b7c11987e6aaaa168', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.selectionGroup?.objects || [], style: {
|
|
781
787
|
position: 'fixed',
|
|
782
788
|
left: `${this.core.store.state.contextMenuX}px`,
|
|
783
789
|
top: `${this.core.store.state.contextMenuY}px`,
|
|
@@ -788,7 +794,7 @@ export class KritzelEngine {
|
|
|
788
794
|
y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,
|
|
789
795
|
}, this.core.store.selectionGroup?.objects);
|
|
790
796
|
this.hideContextMenu();
|
|
791
|
-
}, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && h("kritzel-cursor-trail", { key: '
|
|
797
|
+
}, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && h("kritzel-cursor-trail", { key: '20dc66627a01cb9840807b3fe9d96be8599a48f8', core: this.core })));
|
|
792
798
|
}
|
|
793
799
|
static get is() { return "kritzel-engine"; }
|
|
794
800
|
static get encapsulation() { return "shadow"; }
|
|
@@ -120,7 +120,7 @@ export class KritzelToolConfig {
|
|
|
120
120
|
handlePropertyChange = (propertyName, value) => {
|
|
121
121
|
// Special handling for shape fill
|
|
122
122
|
if ((this.config.type === 'shape' || this.config.type === 'selection') && propertyName === 'fillColor') {
|
|
123
|
-
const newFillColor = value === 'filled' ? this.tool[this.config.colorProperty] : 'transparent';
|
|
123
|
+
const newFillColor = value === 'filled' ? this.tool[this.config.colorProperty] : { light: 'transparent', dark: 'transparent' };
|
|
124
124
|
this.tool.fillColor = newFillColor;
|
|
125
125
|
// When switching to fill mode, also update stroke color to match
|
|
126
126
|
if (value === 'filled') {
|
|
@@ -139,7 +139,9 @@ export class KritzelToolConfig {
|
|
|
139
139
|
};
|
|
140
140
|
getShapeFillValue() {
|
|
141
141
|
const fillColor = this.tool.fillColor;
|
|
142
|
-
|
|
142
|
+
const isTransparent = typeof fillColor === 'string' ? fillColor === 'transparent' :
|
|
143
|
+
(fillColor.light === 'transparent' && fillColor.dark === 'transparent');
|
|
144
|
+
return isTransparent ? 'transparent' : 'filled';
|
|
143
145
|
}
|
|
144
146
|
renderControl(control) {
|
|
145
147
|
const value = this.tool[control.propertyName];
|
package/dist/components/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{g as getAssetPath,r as render,s as setAssetPath,a as setNonce,b as setPlatformOptions}from"./p-Cj-I2_Og.js";export{e as KritzelBrushTool,d as KritzelGroup,b as KritzelImage,c as KritzelLine,f as KritzelLineTool,a as KritzelPath,h as KritzelSelectionTool,K as KritzelText,g as KritzelTextTool}from"./p-BqZdHh6f.js";import{w as t,a as i,t as o,r as n,b as m,e as u,c as p,d as z,f as C,g as k,s as x,h as y,i as S,v as j,j as T,o as w,k as v,l as B,m as M,O as P,n as W,p as U,q as H,u as A,x as L,y as O,z as N,A as _,B as $,C as R,H as Y,D as q}from"./p-NBmc8spY.js";export{I as IndexedDBSyncProvider,J as KritzelAnchorManager,G as KritzelAppStateMap,F as KritzelCursorHelper,K as KritzelEraserTool,E as KritzelImageTool}from"./p-NBmc8spY.js";export{K as KritzelWorkspace}from"./p-n789Y3S-.js";export{D as DEFAULT_BRUSH_CONFIG,b as DEFAULT_LINE_TOOL_CONFIG,a as DEFAULT_TEXT_CONFIG,KritzelEditor,defineCustomElement as defineCustomElementKritzelEditor}from"./kritzel-editor.js";export{K as KritzelThemeManager,d as darkTheme,l as lightTheme}from"./p-D9GoermT.js";export{KritzelBackToContent,defineCustomElement as defineCustomElementKritzelBackToContent}from"./kritzel-back-to-content.js";export{KritzelBrushStyle,defineCustomElement as defineCustomElementKritzelBrushStyle}from"./kritzel-brush-style.js";export{KritzelColor,defineCustomElement as defineCustomElementKritzelColor}from"./kritzel-color.js";export{KritzelColorPalette,defineCustomElement as defineCustomElementKritzelColorPalette}from"./kritzel-color-palette.js";export{KritzelContextMenu,defineCustomElement as defineCustomElementKritzelContextMenu}from"./kritzel-context-menu.js";export{KritzelControls,defineCustomElement as defineCustomElementKritzelControls}from"./kritzel-controls.js";export{KritzelCursorTrail,defineCustomElement as defineCustomElementKritzelCursorTrail}from"./kritzel-cursor-trail.js";export{KritzelDialog,defineCustomElement as defineCustomElementKritzelDialog}from"./kritzel-dialog.js";export{KritzelDropdown,defineCustomElement as defineCustomElementKritzelDropdown}from"./kritzel-dropdown.js";export{KritzelEngine,defineCustomElement as defineCustomElementKritzelEngine}from"./kritzel-engine.js";export{KritzelExport,defineCustomElement as defineCustomElementKritzelExport}from"./kritzel-export.js";export{KritzelFont,defineCustomElement as defineCustomElementKritzelFont}from"./kritzel-font.js";export{KritzelFontFamily,defineCustomElement as defineCustomElementKritzelFontFamily}from"./kritzel-font-family.js";export{KritzelFontSize,defineCustomElement as defineCustomElementKritzelFontSize}from"./kritzel-font-size.js";export{KritzelIcon,defineCustomElement as defineCustomElementKritzelIcon}from"./kritzel-icon.js";export{KritzelLineEndings,defineCustomElement as defineCustomElementKritzelLineEndings}from"./kritzel-line-endings.js";export{KritzelMasterDetail,defineCustomElement as defineCustomElementKritzelMasterDetail}from"./kritzel-master-detail.js";export{KritzelMenu,defineCustomElement as defineCustomElementKritzelMenu}from"./kritzel-menu.js";export{KritzelMenuItem,defineCustomElement as defineCustomElementKritzelMenuItem}from"./kritzel-menu-item.js";export{KritzelMoreMenu,defineCustomElement as defineCustomElementKritzelMoreMenu}from"./kritzel-more-menu.js";export{KritzelNumericInput,defineCustomElement as defineCustomElementKritzelNumericInput}from"./kritzel-numeric-input.js";export{KritzelOpacitySlider,defineCustomElement as defineCustomElementKritzelOpacitySlider}from"./kritzel-opacity-slider.js";export{KritzelPortal,defineCustomElement as defineCustomElementKritzelPortal}from"./kritzel-portal.js";export{KritzelSettings,defineCustomElement as defineCustomElementKritzelSettings}from"./kritzel-settings.js";export{KritzelShapeFill,defineCustomElement as defineCustomElementKritzelShapeFill}from"./kritzel-shape-fill.js";export{KritzelSlideToggle,defineCustomElement as defineCustomElementKritzelSlideToggle}from"./kritzel-slide-toggle.js";export{KritzelSplitButton,defineCustomElement as defineCustomElementKritzelSplitButton}from"./kritzel-split-button.js";export{KritzelStrokeSize,defineCustomElement as defineCustomElementKritzelStrokeSize}from"./kritzel-stroke-size.js";export{KritzelToolConfig,defineCustomElement as defineCustomElementKritzelToolConfig}from"./kritzel-tool-config.js";export{KritzelTooltip,defineCustomElement as defineCustomElementKritzelTooltip}from"./kritzel-tooltip.js";export{KritzelUtilityPanel,defineCustomElement as defineCustomElementKritzelUtilityPanel}from"./kritzel-utility-panel.js";export{KritzelWorkspaceManager,defineCustomElement as defineCustomElementKritzelWorkspaceManager}from"./kritzel-workspace-manager.js";class X{doc;channel;_synced=!1;constructor(e,t,s){this.doc=t,this.channel=new BroadcastChannel(e),this.channel.onmessage=e=>{this.handleMessage(e.data)},this.doc.on("update",this.handleDocUpdate),this.broadcastSync(),setTimeout((()=>{this._synced=!0}),100),console.info("BroadcastChannel Provider initialized: "+e)}handleDocUpdate=(e,s)=>{if(s!==this){const s=C();t(s,0),i(s,e),this.channel.postMessage(o(s))}};handleMessage(e){const s=k(new Uint8Array(e));switch(n(s)){case 0:const e=m(s);p(this.doc,e,this);break;case 1:this.broadcastSync();break;case 2:const n=m(s),r=u(this.doc,n);if(r.length>0){const e=C();t(e,0),i(e,r),this.channel.postMessage(o(e))}}}broadcastSync(){const e=C();t(e,2),i(e,z(this.doc)),this.channel.postMessage(o(e))}async connect(){if(!this._synced)return new Promise((e=>{const t=()=>{this._synced?e():setTimeout(t,50)};t()}))}disconnect(){}destroy(){this.doc.off("update",this.handleDocUpdate),this.channel.close()}}const Z=new Map,Q="undefined"==typeof BroadcastChannel?class{constructor(e){this.room=e,this.onmessage=null,this._onChange=t=>t.key===e&&null!==this.onmessage&&this.onmessage({data:S(t.newValue||"")}),w(this._onChange)}postMessage(e){j.setItem(this.room,T(v(e)))}close(){B(this._onChange)}}:BroadcastChannel,V=e=>x(Z,e,(()=>{const t=y(),s=new Q(e);return s.onmessage=e=>t.forEach((t=>t(e.data,"broadcastchannel"))),{bc:s,subs:t}})),ee=(e,t,s=null)=>{const i=V(e);i.bc.postMessage(t),i.subs.forEach((e=>e(t,s)))},te=(e,s)=>{t(e,0);const o=z(s);i(e,o)},se=(e,s,o)=>{t(e,1),i(e,u(s,o))},ie=(e,t,s,i)=>{try{p(t,m(e),s)}catch(e){null!=i&&i(e),console.error("Caught error while handling a Yjs update",e)}},oe=ie;class ne extends P{constructor(e){super(),this.doc=e,this.clientID=e.clientID,this.states=new Map,this.meta=new Map,this._checkInterval=setInterval((()=>{const e=U();null!==this.getLocalState()&&15e3<=e-this.meta.get(this.clientID).lastUpdated&&this.setLocalState(this.getLocalState());const t=[];this.meta.forEach(((s,i)=>{i!==this.clientID&&3e4<=e-s.lastUpdated&&this.states.has(i)&&t.push(i)})),t.length>0&&re(this,t,"timeout")}),W(3e3)),e.on("destroy",(()=>{this.destroy()})),this.setLocalState({})}destroy(){this.emit("destroy",[this]),this.setLocalState(null),super.destroy(),clearInterval(this._checkInterval)}getLocalState(){return this.states.get(this.clientID)||null}setLocalState(e){const t=this.clientID,s=this.meta.get(t),i=void 0===s?0:s.clock+1,o=this.states.get(t);null===e?this.states.delete(t):this.states.set(t,e),this.meta.set(t,{clock:i,lastUpdated:U()});const n=[],r=[],l=[],a=[];null===e?a.push(t):null==o?null!=e&&n.push(t):(r.push(t),H(o,e)||l.push(t)),(n.length>0||l.length>0||a.length>0)&&this.emit("change",[{added:n,updated:l,removed:a},"local"]),this.emit("update",[{added:n,updated:r,removed:a},"local"])}setLocalStateField(e,t){const s=this.getLocalState();null!==s&&this.setLocalState({...s,[e]:t})}getStates(){return this.states}}const re=(e,t,s)=>{const i=[];for(let s=0;s<t.length;s++){const o=t[s];if(e.states.has(o)){if(e.states.delete(o),o===e.clientID){const t=e.meta.get(o);e.meta.set(o,{clock:t.clock+1,lastUpdated:U()})}i.push(o)}}i.length>0&&(e.emit("change",[{added:[],updated:[],removed:i},s]),e.emit("update",[{added:[],updated:[],removed:i},s]))},le=(e,s,i=e.states)=>{const n=s.length,r=C();t(r,n);for(let o=0;o<n;o++){const n=s[o],l=i.get(n)||null,a=e.meta.get(n).clock;t(r,n),t(r,a),A(r,JSON.stringify(l))}return o(r)},ae=[];ae[0]=(e,s,i,o)=>{t(e,0);const r=((e,t,s,i,o)=>{const r=n(e);switch(r){case 0:((e,t,s)=>{se(t,s,m(e))})(e,t,s);break;case 1:ie(e,s,i,o);break;case 2:oe(e,s,i,o);break;default:throw Error("Unknown message type")}return r})(s,e,i.doc,i);o&&1===r&&!i.synced&&(i.synced=!0)},ae[3]=(e,s,o)=>{t(e,1),i(e,le(o.awareness,Array.from(o.awareness.getStates().keys())))},ae[1]=(e,t,s)=>{((e,t,s)=>{const i=k(t),o=U(),r=[],l=[],a=[],c=[],d=n(i);for(let t=0;t<d;t++){const t=n(i);let s=n(i);const d=JSON.parse(M(i)),h=e.meta.get(t),m=e.states.get(t),u=void 0===h?0:h.clock;(u<s||u===s&&null===d&&e.states.has(t))&&(null===d?t===e.clientID&&null!=e.getLocalState()?s++:e.states.delete(t):e.states.set(t,d),e.meta.set(t,{clock:s,lastUpdated:o}),void 0===h&&null!==d?r.push(t):void 0!==h&&null===d?c.push(t):null!==d&&(H(d,m)||a.push(t),l.push(t)))}(r.length>0||a.length>0||c.length>0)&&e.emit("change",[{added:r,updated:a,removed:c},s]),(r.length>0||l.length>0||c.length>0)&&e.emit("update",[{added:r,updated:l,removed:c},s])})(s.awareness,m(t),s)},ae[2]=(e,t,s)=>{((e,t,s)=>{0===n(e)&&s(0,M(e))})(t,0,((e,t)=>ce(s,t)))};const ce=(e,t)=>console.warn(`Permission denied to access ${e.url}.\n${t}`),de=(e,t,s)=>{const i=k(t),o=C(),r=n(i),l=e.messageHandlers[r];return l?l(o,i,e,s,r):console.error("Unable to compute message"),o},he=(e,t,s)=>{t===e.ws&&(e.emit("connection-close",[s,e]),e.ws=null,t.close(),e.wsconnecting=!1,e.wsconnected?(e.wsconnected=!1,e.synced=!1,re(e.awareness,Array.from(e.awareness.getStates().keys()).filter((t=>t!==e.doc.clientID)),e),e.emit("status",[{status:"disconnected"}])):e.wsUnsuccessfulReconnects++,setTimeout(me,$(100*R(2,e.wsUnsuccessfulReconnects),e.maxBackoffTime),e))},me=e=>{if(e.shouldConnect&&null===e.ws){const s=new e._WS(e.url,e.protocols);s.binaryType="arraybuffer",e.ws=s,e.wsconnecting=!0,e.wsconnected=!1,e.synced=!1,s.onmessage=t=>{e.wsLastMessageReceived=U();const i=de(e,new Uint8Array(t.data),!0);N(i)>1&&s.send(o(i))},s.onerror=t=>{e.emit("connection-error",[t,e])},s.onclose=t=>{he(e,s,t)},s.onopen=()=>{e.wsLastMessageReceived=U(),e.wsconnecting=!1,e.wsconnected=!0,e.wsUnsuccessfulReconnects=0,e.emit("status",[{status:"connected"}]);const n=C();if(t(n,0),te(n,e.doc),s.send(o(n)),null!==e.awareness.getLocalState()){const n=C();t(n,1),i(n,le(e.awareness,[e.doc.clientID])),s.send(o(n))}},e.emit("status",[{status:"connecting"}])}},ue=(e,t)=>{const s=e.ws;e.wsconnected&&s&&s.readyState===s.OPEN&&s.send(t),e.bcconnected&&ee(e.bcChannel,t,e)};class fe extends O{constructor(e,s,n,{connect:r=!0,awareness:l=new ne(n),params:a={},protocols:c=[],WebSocketPolyfill:d=WebSocket,resyncInterval:h=-1,maxBackoffTime:m=2500,disableBc:u=!1}={}){for(super();"/"===e[e.length-1];)e=e.slice(0,e.length-1);this.serverUrl=e,this.bcChannel=e+"/"+s,this.maxBackoffTime=m,this.params=a,this.protocols=c,this.roomname=s,this.doc=n,this._WS=d,this.awareness=l,this.wsconnected=!1,this.wsconnecting=!1,this.bcconnected=!1,this.disableBc=u,this.wsUnsuccessfulReconnects=0,this.messageHandlers=ae.slice(),this._synced=!1,this.ws=null,this.wsLastMessageReceived=0,this.shouldConnect=r,this._resyncInterval=0,h>0&&(this._resyncInterval=setInterval((()=>{if(this.ws&&this.ws.readyState===WebSocket.OPEN){const e=C();t(e,0),te(e,n),this.ws.send(o(e))}}),h)),this._bcSubscriber=(e,t)=>{if(t!==this){const t=de(this,new Uint8Array(e),!1);N(t)>1&&ee(this.bcChannel,o(t),this)}},this._updateHandler=(e,s)=>{if(s!==this){const s=C();t(s,0),((e,s)=>{t(e,2),i(e,s)})(s,e),ue(this,o(s))}},this.doc.on("update",this._updateHandler),this._awarenessUpdateHandler=({added:e,updated:s,removed:n})=>{const r=e.concat(s).concat(n),a=C();t(a,1),i(a,le(l,r)),ue(this,o(a))},this._exitHandler=()=>{re(this.awareness,[n.clientID],"app closed")},_&&"undefined"!=typeof process&&process.on("exit",this._exitHandler),l.on("update",this._awarenessUpdateHandler),this._checkInterval=setInterval((()=>{this.wsconnected&&3e4<U()-this.wsLastMessageReceived&&he(this,this.ws,null)}),3e3),r&&this.connect()}get url(){const e=(()=>L(this.params,((e,t)=>`${encodeURIComponent(t)}=${encodeURIComponent(e)}`)).join("&"))();return this.serverUrl+"/"+this.roomname+(0===e.length?"":"?"+e)}get synced(){return this._synced}set synced(e){this._synced!==e&&(this._synced=e,this.emit("synced",[e]),this.emit("sync",[e]))}destroy(){0!==this._resyncInterval&&clearInterval(this._resyncInterval),clearInterval(this._checkInterval),this.disconnect(),_&&"undefined"!=typeof process&&process.off("exit",this._exitHandler),this.awareness.off("update",this._awarenessUpdateHandler),this.doc.off("update",this._updateHandler),super.destroy()}connectBc(){if(this.disableBc)return;this.bcconnected||(((e,t)=>{V(this.bcChannel).subs.add(t)})(0,this._bcSubscriber),this.bcconnected=!0);const e=C();t(e,0),te(e,this.doc),ee(this.bcChannel,o(e),this);const s=C();t(s,0),se(s,this.doc),ee(this.bcChannel,o(s),this);const n=C();t(n,3),ee(this.bcChannel,o(n),this);const r=C();t(r,1),i(r,le(this.awareness,[this.doc.clientID])),ee(this.bcChannel,o(r),this)}disconnectBc(){const e=C();t(e,1),i(e,le(this.awareness,[this.doc.clientID],new Map)),ue(this,o(e)),this.bcconnected&&(((e,t)=>{const s=V(e);s.subs.delete(t)&&0===s.subs.size&&(s.bc.close(),Z.delete(e))})(this.bcChannel,this._bcSubscriber),this.bcconnected=!1)}disconnect(){this.shouldConnect=!1,this.disconnectBc(),null!==this.ws&&he(this,this.ws,null)}connect(){this.shouldConnect=!0,this.wsconnected||null!==this.ws||(me(this),this.connectBc())}}class pe{provider;isConnected=!1;constructor(e,t,s){const i=s?.url||"ws://localhost:1234",o=s?.roomName||e;this.provider=new fe(i,o,t,{params:s?.params,protocols:s?.protocols,WebSocketPolyfill:s?.WebSocketPolyfill,awareness:s?.awareness,maxBackoffTime:s?.maxBackoffTime,disableBc:!0}),this.setupEventListeners(),console.info(`WebSocket Provider initialized: ${i}/${o}`)}static with(e){return{create:(t,s)=>new pe(t,s,e)}}setupEventListeners(){this.provider.on("status",(({status:e})=>{"connected"===e?(this.isConnected=!0,console.info("WebSocket connected")):"disconnected"===e&&(this.isConnected=!1,console.info("WebSocket disconnected"))})),this.provider.on("sync",(e=>{e&&console.info("WebSocket synced")}))}async connect(){if(!this.isConnected)return new Promise(((e,t)=>{const s=setTimeout((()=>{t(Error("WebSocket connection timeout"))}),1e4),i=({status:t})=>{"connected"===t&&(clearTimeout(s),this.provider.off("status",i),this.isConnected=!0,e())};this.provider.on("status",i),this.provider.wsconnected&&(clearTimeout(s),this.provider.off("status",i),this.isConnected=!0,e())}))}disconnect(){this.provider&&this.provider.disconnect(),this.isConnected=!1}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1}}class ze{provider;isConnected=!1;isSynced=!1;usesSharedSocket=!1;static sharedWebSocketProvider=null;constructor(e,t,s){const i=s?.name||e,o=s?.url||"ws://localhost:1234",n=s?.websocketProvider||ze.sharedWebSocketProvider;if(n){this.usesSharedSocket=!0;const e={websocketProvider:n,name:i,document:t,token:s?.token||null,onConnect:()=>{this.isConnected=!0,s?.quiet||console.info("Hocuspocus connected: "+i),s?.onConnect&&s.onConnect()},onDisconnect:()=>{this.isConnected=!1,this.isSynced=!1,s?.quiet||console.info("Hocuspocus disconnected: "+i),s?.onDisconnect&&s.onDisconnect()},onSynced:()=>{this.isSynced=!0,s?.quiet||console.info("Hocuspocus synced: "+i),s?.onSynced&&s.onSynced()}};void 0!==s?.forceSyncInterval&&(e.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(e.onAuthenticationFailed=s.onAuthenticationFailed),s?.onStatus&&(e.onStatus=s.onStatus),this.provider=new Y(e),this.provider.attach(),s?.quiet||console.info("Hocuspocus Provider initialized (multiplexed): "+i)}else{this.usesSharedSocket=!1;const e={url:o,name:i,document:t,token:s?.token||null,onConnect:()=>{this.isConnected=!0,s?.quiet||console.info("Hocuspocus connected: "+i),s?.onConnect&&s.onConnect()},onDisconnect:()=>{this.isConnected=!1,this.isSynced=!1,s?.quiet||console.info("Hocuspocus disconnected: "+i),s?.onDisconnect&&s.onDisconnect()},onSynced:()=>{this.isSynced=!0,s?.quiet||console.info("Hocuspocus synced: "+i),s?.onSynced&&s.onSynced()}};void 0!==s?.forceSyncInterval&&(e.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(e.onAuthenticationFailed=s.onAuthenticationFailed),s?.onStatus&&(e.onStatus=s.onStatus),s?.WebSocketPolyfill&&(e.WebSocketPolyfill=s.WebSocketPolyfill),this.provider=new Y(e),s?.quiet||console.info(`Hocuspocus Provider initialized: ${o}/${i}`)}}static createSharedWebSocket(e){if(ze.sharedWebSocketProvider)return console.warn("Shared WebSocket already exists. Returning existing instance."),ze.sharedWebSocketProvider;const t={url:e.url};return e.WebSocketPolyfill&&(t.WebSocketPolyfill=e.WebSocketPolyfill),e.onConnect&&(t.onConnect=e.onConnect),e.onDisconnect&&(t.onDisconnect=e.onDisconnect),e.onStatus&&(t.onStatus=e.onStatus),ze.sharedWebSocketProvider=new q(t),console.info("Shared Hocuspocus WebSocket created: "+e.url),ze.sharedWebSocketProvider}static destroySharedWebSocket(){ze.sharedWebSocketProvider&&(ze.sharedWebSocketProvider.destroy(),ze.sharedWebSocketProvider=null,console.info("Shared Hocuspocus WebSocket destroyed"))}static getSharedWebSocket(){return ze.sharedWebSocketProvider}static with(e){return{create:(t,s)=>new ze(t,s,e)}}async connect(){if(!this.isSynced)return new Promise(((e,t)=>{const s=setTimeout((()=>{t(Error("Hocuspocus connection timeout"))}),1e4),i=()=>{clearTimeout(s),this.provider.off("synced",i),e()};if(this.provider.on("synced",i),this.provider.isSynced)return clearTimeout(s),this.provider.off("synced",i),void e();this.isConnected||this.usesSharedSocket||this.provider.connect()}))}disconnect(){this.provider&&(this.usesSharedSocket?this.provider.detach():this.provider.disconnect()),this.isConnected=!1,this.isSynced=!1}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1,this.isSynced=!1}}export{X as BroadcastSyncProvider,ze as HocuspocusSyncProvider,pe as WebSocketSyncProvider}
|
|
1
|
+
export{g as getAssetPath,r as render,s as setAssetPath,a as setNonce,b as setPlatformOptions}from"./p-Cj-I2_Og.js";export{e as KritzelBrushTool,d as KritzelGroup,b as KritzelImage,c as KritzelLine,f as KritzelLineTool,a as KritzelPath,h as KritzelSelectionTool,K as KritzelText,g as KritzelTextTool}from"./p-Cuf-GvO0.js";import{w as t,a as i,t as o,r as n,b as u,e as m,c as p,d as z,f as C,g as k,s as x,h as y,i as S,v as j,j as T,o as w,k as v,l as M,m as P,O as B,n as W,p as U,q as H,u as A,x as L,y as O,z as N,A as _,B as $,C as R,H as Y,D as q}from"./p-bE-Bpn0g.js";export{I as IndexedDBSyncProvider,J as KritzelAnchorManager,G as KritzelAppStateMap,F as KritzelCursorHelper,K as KritzelEraserTool,E as KritzelImageTool}from"./p-bE-Bpn0g.js";export{K as KritzelWorkspace}from"./p-n789Y3S-.js";export{D as DEFAULT_BRUSH_CONFIG,b as DEFAULT_LINE_TOOL_CONFIG,a as DEFAULT_TEXT_CONFIG,KritzelEditor,defineCustomElement as defineCustomElementKritzelEditor}from"./kritzel-editor.js";export{K as KritzelThemeManager,d as darkTheme,l as lightTheme}from"./p-UNc_oph8.js";export{KritzelBackToContent,defineCustomElement as defineCustomElementKritzelBackToContent}from"./kritzel-back-to-content.js";export{KritzelBrushStyle,defineCustomElement as defineCustomElementKritzelBrushStyle}from"./kritzel-brush-style.js";export{KritzelColor,defineCustomElement as defineCustomElementKritzelColor}from"./kritzel-color.js";export{KritzelColorPalette,defineCustomElement as defineCustomElementKritzelColorPalette}from"./kritzel-color-palette.js";export{KritzelContextMenu,defineCustomElement as defineCustomElementKritzelContextMenu}from"./kritzel-context-menu.js";export{KritzelControls,defineCustomElement as defineCustomElementKritzelControls}from"./kritzel-controls.js";export{KritzelCursorTrail,defineCustomElement as defineCustomElementKritzelCursorTrail}from"./kritzel-cursor-trail.js";export{KritzelDialog,defineCustomElement as defineCustomElementKritzelDialog}from"./kritzel-dialog.js";export{KritzelDropdown,defineCustomElement as defineCustomElementKritzelDropdown}from"./kritzel-dropdown.js";export{KritzelEngine,defineCustomElement as defineCustomElementKritzelEngine}from"./kritzel-engine.js";export{KritzelExport,defineCustomElement as defineCustomElementKritzelExport}from"./kritzel-export.js";export{KritzelFont,defineCustomElement as defineCustomElementKritzelFont}from"./kritzel-font.js";export{KritzelFontFamily,defineCustomElement as defineCustomElementKritzelFontFamily}from"./kritzel-font-family.js";export{KritzelFontSize,defineCustomElement as defineCustomElementKritzelFontSize}from"./kritzel-font-size.js";export{KritzelIcon,defineCustomElement as defineCustomElementKritzelIcon}from"./kritzel-icon.js";export{KritzelLineEndings,defineCustomElement as defineCustomElementKritzelLineEndings}from"./kritzel-line-endings.js";export{KritzelMasterDetail,defineCustomElement as defineCustomElementKritzelMasterDetail}from"./kritzel-master-detail.js";export{KritzelMenu,defineCustomElement as defineCustomElementKritzelMenu}from"./kritzel-menu.js";export{KritzelMenuItem,defineCustomElement as defineCustomElementKritzelMenuItem}from"./kritzel-menu-item.js";export{KritzelMoreMenu,defineCustomElement as defineCustomElementKritzelMoreMenu}from"./kritzel-more-menu.js";export{KritzelNumericInput,defineCustomElement as defineCustomElementKritzelNumericInput}from"./kritzel-numeric-input.js";export{KritzelOpacitySlider,defineCustomElement as defineCustomElementKritzelOpacitySlider}from"./kritzel-opacity-slider.js";export{KritzelPortal,defineCustomElement as defineCustomElementKritzelPortal}from"./kritzel-portal.js";export{KritzelSettings,defineCustomElement as defineCustomElementKritzelSettings}from"./kritzel-settings.js";export{KritzelShapeFill,defineCustomElement as defineCustomElementKritzelShapeFill}from"./kritzel-shape-fill.js";export{KritzelSlideToggle,defineCustomElement as defineCustomElementKritzelSlideToggle}from"./kritzel-slide-toggle.js";export{KritzelSplitButton,defineCustomElement as defineCustomElementKritzelSplitButton}from"./kritzel-split-button.js";export{KritzelStrokeSize,defineCustomElement as defineCustomElementKritzelStrokeSize}from"./kritzel-stroke-size.js";export{KritzelToolConfig,defineCustomElement as defineCustomElementKritzelToolConfig}from"./kritzel-tool-config.js";export{KritzelTooltip,defineCustomElement as defineCustomElementKritzelTooltip}from"./kritzel-tooltip.js";export{KritzelUtilityPanel,defineCustomElement as defineCustomElementKritzelUtilityPanel}from"./kritzel-utility-panel.js";export{KritzelWorkspaceManager,defineCustomElement as defineCustomElementKritzelWorkspaceManager}from"./kritzel-workspace-manager.js";class X{doc;channel;_synced=!1;constructor(e,t,s){this.doc=t,this.channel=new BroadcastChannel(e),this.channel.onmessage=e=>{this.handleMessage(e.data)},this.doc.on("update",this.handleDocUpdate),this.broadcastSync(),setTimeout((()=>{this._synced=!0}),100),console.info("BroadcastChannel Provider initialized: "+e)}handleDocUpdate=(e,s)=>{if(s!==this){const s=C();t(s,0),i(s,e),this.channel.postMessage(o(s))}};handleMessage(e){const s=k(new Uint8Array(e));switch(n(s)){case 0:const e=u(s);p(this.doc,e,this);break;case 1:this.broadcastSync();break;case 2:const n=u(s),r=m(this.doc,n);if(r.length>0){const e=C();t(e,0),i(e,r),this.channel.postMessage(o(e))}}}broadcastSync(){const e=C();t(e,2),i(e,z(this.doc)),this.channel.postMessage(o(e))}async connect(){if(!this._synced)return new Promise((e=>{const t=()=>{this._synced?e():setTimeout(t,50)};t()}))}disconnect(){}destroy(){this.doc.off("update",this.handleDocUpdate),this.channel.close()}}const Q=new Map,V="undefined"==typeof BroadcastChannel?class{constructor(e){this.room=e,this.onmessage=null,this._onChange=t=>t.key===e&&null!==this.onmessage&&this.onmessage({data:S(t.newValue||"")}),w(this._onChange)}postMessage(e){j.setItem(this.room,T(v(e)))}close(){M(this._onChange)}}:BroadcastChannel,Z=e=>x(Q,e,(()=>{const t=y(),s=new V(e);return s.onmessage=e=>t.forEach((t=>t(e.data,"broadcastchannel"))),{bc:s,subs:t}})),ee=(e,t,s=null)=>{const i=Z(e);i.bc.postMessage(t),i.subs.forEach((e=>e(t,s)))},te=(e,s)=>{t(e,0);const o=z(s);i(e,o)},se=(e,s,o)=>{t(e,1),i(e,m(s,o))},ie=(e,t,s,i)=>{try{p(t,u(e),s)}catch(e){null!=i&&i(e),console.error("Caught error while handling a Yjs update",e)}},oe=ie;class ne extends B{constructor(e){super(),this.doc=e,this.clientID=e.clientID,this.states=new Map,this.meta=new Map,this._checkInterval=setInterval((()=>{const e=U();null!==this.getLocalState()&&15e3<=e-this.meta.get(this.clientID).lastUpdated&&this.setLocalState(this.getLocalState());const t=[];this.meta.forEach(((s,i)=>{i!==this.clientID&&3e4<=e-s.lastUpdated&&this.states.has(i)&&t.push(i)})),t.length>0&&re(this,t,"timeout")}),W(3e3)),e.on("destroy",(()=>{this.destroy()})),this.setLocalState({})}destroy(){this.emit("destroy",[this]),this.setLocalState(null),super.destroy(),clearInterval(this._checkInterval)}getLocalState(){return this.states.get(this.clientID)||null}setLocalState(e){const t=this.clientID,s=this.meta.get(t),i=void 0===s?0:s.clock+1,o=this.states.get(t);null===e?this.states.delete(t):this.states.set(t,e),this.meta.set(t,{clock:i,lastUpdated:U()});const n=[],r=[],l=[],a=[];null===e?a.push(t):null==o?null!=e&&n.push(t):(r.push(t),H(o,e)||l.push(t)),(n.length>0||l.length>0||a.length>0)&&this.emit("change",[{added:n,updated:l,removed:a},"local"]),this.emit("update",[{added:n,updated:r,removed:a},"local"])}setLocalStateField(e,t){const s=this.getLocalState();null!==s&&this.setLocalState({...s,[e]:t})}getStates(){return this.states}}const re=(e,t,s)=>{const i=[];for(let s=0;s<t.length;s++){const o=t[s];if(e.states.has(o)){if(e.states.delete(o),o===e.clientID){const t=e.meta.get(o);e.meta.set(o,{clock:t.clock+1,lastUpdated:U()})}i.push(o)}}i.length>0&&(e.emit("change",[{added:[],updated:[],removed:i},s]),e.emit("update",[{added:[],updated:[],removed:i},s]))},le=(e,s,i=e.states)=>{const n=s.length,r=C();t(r,n);for(let o=0;o<n;o++){const n=s[o],l=i.get(n)||null,a=e.meta.get(n).clock;t(r,n),t(r,a),A(r,JSON.stringify(l))}return o(r)},ae=[];ae[0]=(e,s,i,o)=>{t(e,0);const r=((e,t,s,i,o)=>{const r=n(e);switch(r){case 0:((e,t,s)=>{se(t,s,u(e))})(e,t,s);break;case 1:ie(e,s,i,o);break;case 2:oe(e,s,i,o);break;default:throw Error("Unknown message type")}return r})(s,e,i.doc,i);o&&1===r&&!i.synced&&(i.synced=!0)},ae[3]=(e,s,o)=>{t(e,1),i(e,le(o.awareness,Array.from(o.awareness.getStates().keys())))},ae[1]=(e,t,s)=>{((e,t,s)=>{const i=k(t),o=U(),r=[],l=[],a=[],c=[],h=n(i);for(let t=0;t<h;t++){const t=n(i);let s=n(i);const h=JSON.parse(P(i)),d=e.meta.get(t),u=e.states.get(t),m=void 0===d?0:d.clock;(m<s||m===s&&null===h&&e.states.has(t))&&(null===h?t===e.clientID&&null!=e.getLocalState()?s++:e.states.delete(t):e.states.set(t,h),e.meta.set(t,{clock:s,lastUpdated:o}),void 0===d&&null!==h?r.push(t):void 0!==d&&null===h?c.push(t):null!==h&&(H(h,u)||a.push(t),l.push(t)))}(r.length>0||a.length>0||c.length>0)&&e.emit("change",[{added:r,updated:a,removed:c},s]),(r.length>0||l.length>0||c.length>0)&&e.emit("update",[{added:r,updated:l,removed:c},s])})(s.awareness,u(t),s)},ae[2]=(e,t,s)=>{((e,t,s)=>{0===n(e)&&s(0,P(e))})(t,0,((e,t)=>ce(s,t)))};const ce=(e,t)=>console.warn(`Permission denied to access ${e.url}.\n${t}`),he=(e,t,s)=>{const i=k(t),o=C(),r=n(i),l=e.messageHandlers[r];return l?l(o,i,e,s,r):console.error("Unable to compute message"),o},de=(e,t,s)=>{t===e.ws&&(e.emit("connection-close",[s,e]),e.ws=null,t.close(),e.wsconnecting=!1,e.wsconnected?(e.wsconnected=!1,e.synced=!1,re(e.awareness,Array.from(e.awareness.getStates().keys()).filter((t=>t!==e.doc.clientID)),e),e.emit("status",[{status:"disconnected"}])):e.wsUnsuccessfulReconnects++,setTimeout(ue,$(100*R(2,e.wsUnsuccessfulReconnects),e.maxBackoffTime),e))},ue=e=>{if(e.shouldConnect&&null===e.ws){const s=new e._WS(e.url,e.protocols);s.binaryType="arraybuffer",e.ws=s,e.wsconnecting=!0,e.wsconnected=!1,e.synced=!1,s.onmessage=t=>{e.wsLastMessageReceived=U();const i=he(e,new Uint8Array(t.data),!0);N(i)>1&&s.send(o(i))},s.onerror=t=>{e.emit("connection-error",[t,e])},s.onclose=t=>{de(e,s,t)},s.onopen=()=>{e.wsLastMessageReceived=U(),e.wsconnecting=!1,e.wsconnected=!0,e.wsUnsuccessfulReconnects=0,e.emit("status",[{status:"connected"}]);const n=C();if(t(n,0),te(n,e.doc),s.send(o(n)),null!==e.awareness.getLocalState()){const n=C();t(n,1),i(n,le(e.awareness,[e.doc.clientID])),s.send(o(n))}},e.emit("status",[{status:"connecting"}])}},me=(e,t)=>{const s=e.ws;e.wsconnected&&s&&s.readyState===s.OPEN&&s.send(t),e.bcconnected&&ee(e.bcChannel,t,e)};class fe extends O{constructor(e,s,n,{connect:r=!0,awareness:l=new ne(n),params:a={},protocols:c=[],WebSocketPolyfill:h=WebSocket,resyncInterval:d=-1,maxBackoffTime:u=2500,disableBc:m=!1}={}){for(super();"/"===e[e.length-1];)e=e.slice(0,e.length-1);this.serverUrl=e,this.bcChannel=e+"/"+s,this.maxBackoffTime=u,this.params=a,this.protocols=c,this.roomname=s,this.doc=n,this._WS=h,this.awareness=l,this.wsconnected=!1,this.wsconnecting=!1,this.bcconnected=!1,this.disableBc=m,this.wsUnsuccessfulReconnects=0,this.messageHandlers=ae.slice(),this._synced=!1,this.ws=null,this.wsLastMessageReceived=0,this.shouldConnect=r,this._resyncInterval=0,d>0&&(this._resyncInterval=setInterval((()=>{if(this.ws&&this.ws.readyState===WebSocket.OPEN){const e=C();t(e,0),te(e,n),this.ws.send(o(e))}}),d)),this._bcSubscriber=(e,t)=>{if(t!==this){const t=he(this,new Uint8Array(e),!1);N(t)>1&&ee(this.bcChannel,o(t),this)}},this._updateHandler=(e,s)=>{if(s!==this){const s=C();t(s,0),((e,s)=>{t(e,2),i(e,s)})(s,e),me(this,o(s))}},this.doc.on("update",this._updateHandler),this._awarenessUpdateHandler=({added:e,updated:s,removed:n})=>{const r=e.concat(s).concat(n),a=C();t(a,1),i(a,le(l,r)),me(this,o(a))},this._exitHandler=()=>{re(this.awareness,[n.clientID],"app closed")},_&&"undefined"!=typeof process&&process.on("exit",this._exitHandler),l.on("update",this._awarenessUpdateHandler),this._checkInterval=setInterval((()=>{this.wsconnected&&3e4<U()-this.wsLastMessageReceived&&de(this,this.ws,null)}),3e3),r&&this.connect()}get url(){const e=(()=>L(this.params,((e,t)=>`${encodeURIComponent(t)}=${encodeURIComponent(e)}`)).join("&"))();return this.serverUrl+"/"+this.roomname+(0===e.length?"":"?"+e)}get synced(){return this._synced}set synced(e){this._synced!==e&&(this._synced=e,this.emit("synced",[e]),this.emit("sync",[e]))}destroy(){0!==this._resyncInterval&&clearInterval(this._resyncInterval),clearInterval(this._checkInterval),this.disconnect(),_&&"undefined"!=typeof process&&process.off("exit",this._exitHandler),this.awareness.off("update",this._awarenessUpdateHandler),this.doc.off("update",this._updateHandler),super.destroy()}connectBc(){if(this.disableBc)return;this.bcconnected||(((e,t)=>{Z(this.bcChannel).subs.add(t)})(0,this._bcSubscriber),this.bcconnected=!0);const e=C();t(e,0),te(e,this.doc),ee(this.bcChannel,o(e),this);const s=C();t(s,0),se(s,this.doc),ee(this.bcChannel,o(s),this);const n=C();t(n,3),ee(this.bcChannel,o(n),this);const r=C();t(r,1),i(r,le(this.awareness,[this.doc.clientID])),ee(this.bcChannel,o(r),this)}disconnectBc(){const e=C();t(e,1),i(e,le(this.awareness,[this.doc.clientID],new Map)),me(this,o(e)),this.bcconnected&&(((e,t)=>{const s=Z(e);s.subs.delete(t)&&0===s.subs.size&&(s.bc.close(),Q.delete(e))})(this.bcChannel,this._bcSubscriber),this.bcconnected=!1)}disconnect(){this.shouldConnect=!1,this.disconnectBc(),null!==this.ws&&de(this,this.ws,null)}connect(){this.shouldConnect=!0,this.wsconnected||null!==this.ws||(ue(this),this.connectBc())}}class pe{provider;isConnected=!1;constructor(e,t,s){const i=s?.url||"ws://localhost:1234",o=s?.roomName||e;this.provider=new fe(i,o,t,{params:s?.params,protocols:s?.protocols,WebSocketPolyfill:s?.WebSocketPolyfill,awareness:s?.awareness,maxBackoffTime:s?.maxBackoffTime,disableBc:!0}),this.setupEventListeners(),console.info(`WebSocket Provider initialized: ${i}/${o}`)}static with(e){return{create:(t,s)=>new pe(t,s,e)}}setupEventListeners(){this.provider.on("status",(({status:e})=>{"connected"===e?(this.isConnected=!0,console.info("WebSocket connected")):"disconnected"===e&&(this.isConnected=!1,console.info("WebSocket disconnected"))})),this.provider.on("sync",(e=>{e&&console.info("WebSocket synced")}))}async connect(){if(!this.isConnected)return new Promise(((e,t)=>{const s=setTimeout((()=>{t(Error("WebSocket connection timeout"))}),1e4),i=({status:t})=>{"connected"===t&&(clearTimeout(s),this.provider.off("status",i),this.isConnected=!0,e())};this.provider.on("status",i),this.provider.wsconnected&&(clearTimeout(s),this.provider.off("status",i),this.isConnected=!0,e())}))}disconnect(){this.provider&&this.provider.disconnect(),this.isConnected=!1}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1}}class ze{provider;isConnected=!1;isSynced=!1;usesSharedSocket=!1;static sharedWebSocketProvider=null;constructor(e,t,s){const i=s?.name||e,o=s?.url||"ws://localhost:1234",n=s?.websocketProvider||ze.sharedWebSocketProvider;if(n){this.usesSharedSocket=!0;const e={websocketProvider:n,name:i,document:t,token:s?.token||null,onConnect:()=>{this.isConnected=!0,s?.quiet||console.info("Hocuspocus connected: "+i),s?.onConnect&&s.onConnect()},onDisconnect:()=>{this.isConnected=!1,this.isSynced=!1,s?.quiet||console.info("Hocuspocus disconnected: "+i),s?.onDisconnect&&s.onDisconnect()},onSynced:()=>{this.isSynced=!0,s?.quiet||console.info("Hocuspocus synced: "+i),s?.onSynced&&s.onSynced()}};void 0!==s?.forceSyncInterval&&(e.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(e.onAuthenticationFailed=s.onAuthenticationFailed),s?.onStatus&&(e.onStatus=s.onStatus),this.provider=new Y(e),this.provider.attach(),s?.quiet||console.info("Hocuspocus Provider initialized (multiplexed): "+i)}else{this.usesSharedSocket=!1;const e={url:o,name:i,document:t,token:s?.token||null,onConnect:()=>{this.isConnected=!0,s?.quiet||console.info("Hocuspocus connected: "+i),s?.onConnect&&s.onConnect()},onDisconnect:()=>{this.isConnected=!1,this.isSynced=!1,s?.quiet||console.info("Hocuspocus disconnected: "+i),s?.onDisconnect&&s.onDisconnect()},onSynced:()=>{this.isSynced=!0,s?.quiet||console.info("Hocuspocus synced: "+i),s?.onSynced&&s.onSynced()}};void 0!==s?.forceSyncInterval&&(e.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(e.onAuthenticationFailed=s.onAuthenticationFailed),s?.onStatus&&(e.onStatus=s.onStatus),s?.WebSocketPolyfill&&(e.WebSocketPolyfill=s.WebSocketPolyfill),this.provider=new Y(e),s?.quiet||console.info(`Hocuspocus Provider initialized: ${o}/${i}`)}}static createSharedWebSocket(e){if(ze.sharedWebSocketProvider)return console.warn("Shared WebSocket already exists. Returning existing instance."),ze.sharedWebSocketProvider;const t={url:e.url};return e.WebSocketPolyfill&&(t.WebSocketPolyfill=e.WebSocketPolyfill),e.onConnect&&(t.onConnect=e.onConnect),e.onDisconnect&&(t.onDisconnect=e.onDisconnect),e.onStatus&&(t.onStatus=e.onStatus),ze.sharedWebSocketProvider=new q(t),console.info("Shared Hocuspocus WebSocket created: "+e.url),ze.sharedWebSocketProvider}static destroySharedWebSocket(){ze.sharedWebSocketProvider&&(ze.sharedWebSocketProvider.destroy(),ze.sharedWebSocketProvider=null,console.info("Shared Hocuspocus WebSocket destroyed"))}static getSharedWebSocket(){return ze.sharedWebSocketProvider}static with(e){return{create:(t,s)=>new ze(t,s,e)}}async connect(){if(!this.isSynced)return new Promise(((e,t)=>{const s=setTimeout((()=>{t(Error("Hocuspocus connection timeout"))}),1e4),i=()=>{clearTimeout(s),this.provider.off("synced",i),e()};if(this.provider.on("synced",i),this.provider.isSynced)return clearTimeout(s),this.provider.off("synced",i),void e();this.isConnected||this.usesSharedSocket||this.provider.connect()}))}disconnect(){this.provider&&(this.usesSharedSocket?this.provider.detach():this.provider.disconnect()),this.isConnected=!1,this.isSynced=!1}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1,this.isSynced=!1}}export{X as BroadcastSyncProvider,ze as HocuspocusSyncProvider,pe as WebSocketSyncProvider}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{K as o,d as s}from"./p-
|
|
1
|
+
import{K as o,d as s}from"./p-yWjTje8m.js";const j=o,m=s;export{j as KritzelBackToContent,m as defineCustomElement}
|