kritzel-stencil 0.3.13 → 0.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/kritzel-active-users_42.cjs.entry.js +151 -25
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{schema.constants-CMFOYyBj.js → schema.constants-DJQTjcy7.js} +62 -0
- package/dist/cjs/stencil.cjs.js +1 -1
- package/dist/collection/classes/core/viewport.class.js +81 -0
- package/dist/collection/classes/objects/image.class.js +62 -0
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +86 -18
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +164 -17
- package/dist/collection/constants/version.js +1 -1
- package/dist/components/index.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-settings.js +1 -1
- package/dist/components/kritzel-tool-config.js +1 -1
- package/dist/components/p-BTEV1WwT.js +1 -0
- package/dist/components/p-CLLbE_z8.js +9 -0
- package/dist/components/{p-B9hLySCl.js → p-CUPYGT8c.js} +1 -1
- package/dist/components/{p-ijIqLY9g.js → p-DkaiWg1V.js} +1 -1
- package/dist/components/{p-CVzH1Oil.js → p-J9_SwObO.js} +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/kritzel-active-users_42.entry.js +151 -25
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{schema.constants-NrtFvKER.js → schema.constants-DiCnmIYK.js} +62 -0
- package/dist/esm/stencil.js +1 -1
- package/dist/stencil/index.esm.js +1 -1
- package/dist/stencil/{p-NrtFvKER.js → p-DiCnmIYK.js} +1 -1
- package/dist/stencil/p-ea76b21f.entry.js +9 -0
- package/dist/stencil/stencil.esm.js +1 -1
- package/dist/types/classes/core/viewport.class.d.ts +30 -0
- package/dist/types/classes/objects/image.class.d.ts +15 -0
- package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +11 -3
- package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +33 -5
- package/dist/types/components.d.ts +28 -6
- package/dist/types/constants/version.d.ts +1 -1
- package/package.json +1 -1
- package/dist/components/p-C-aFOO5p.js +0 -1
- package/dist/components/p-DplAQ6jk.js +0 -9
- package/dist/stencil/p-9adee165.entry.js +0 -9
|
@@ -581,6 +581,9 @@ export class KritzelEngine {
|
|
|
581
581
|
object.scale = object.scale ?? this.core.store.state.scale;
|
|
582
582
|
object.zIndex = this.core.store.currentZIndex;
|
|
583
583
|
object.workspaceId = this.core.store.state.activeWorkspace.id;
|
|
584
|
+
if (KritzelClassHelper.isInstanceOf(object, 'KritzelImage')) {
|
|
585
|
+
await object.prepareForInsert();
|
|
586
|
+
}
|
|
584
587
|
// Handle KritzelText: recreate the editor now that _core is available
|
|
585
588
|
// The editor's dispatchTransaction callback needs _core for persisting changes
|
|
586
589
|
if (KritzelClassHelper.isInstanceOf(object, 'KritzelText')) {
|
|
@@ -665,6 +668,12 @@ export class KritzelEngine {
|
|
|
665
668
|
if (objects.length === 0) {
|
|
666
669
|
return [];
|
|
667
670
|
}
|
|
671
|
+
for (const object of objects) {
|
|
672
|
+
object._core = this.core;
|
|
673
|
+
if (KritzelClassHelper.isInstanceOf(object, 'KritzelImage')) {
|
|
674
|
+
await object.prepareForInsert();
|
|
675
|
+
}
|
|
676
|
+
}
|
|
668
677
|
this.core.store.objects.transaction(() => {
|
|
669
678
|
for (const object of objects) {
|
|
670
679
|
object.id = object.generateId();
|
|
@@ -891,6 +900,22 @@ export class KritzelEngine {
|
|
|
891
900
|
async zoomTo(scale, worldX, worldY) {
|
|
892
901
|
this.viewport.zoomTo(scale, worldX, worldY);
|
|
893
902
|
}
|
|
903
|
+
/**
|
|
904
|
+
* Zooms in by a fixed step, centered on the current viewport center, with a smooth animation.
|
|
905
|
+
* @param factor - Multiplicative zoom-in step.
|
|
906
|
+
* @param duration - Animation duration in milliseconds.
|
|
907
|
+
*/
|
|
908
|
+
async zoomIn(factor, duration) {
|
|
909
|
+
this.viewport.zoomIn(factor, duration);
|
|
910
|
+
}
|
|
911
|
+
/**
|
|
912
|
+
* Zooms out by a fixed step, centered on the current viewport center, with a smooth animation.
|
|
913
|
+
* @param factor - Multiplicative zoom-out step.
|
|
914
|
+
* @param duration - Animation duration in milliseconds.
|
|
915
|
+
*/
|
|
916
|
+
async zoomOut(factor, duration) {
|
|
917
|
+
this.viewport.zoomOut(factor, duration);
|
|
918
|
+
}
|
|
894
919
|
/**
|
|
895
920
|
* Returns the current viewport state including position, scale, and dimensions.
|
|
896
921
|
* @returns The current viewport state.
|
|
@@ -927,11 +952,14 @@ export class KritzelEngine {
|
|
|
927
952
|
/**
|
|
928
953
|
* Captures a screenshot of the current viewport as a data URL.
|
|
929
954
|
* @param format - The image format: `'png'` (default) or `'svg'`.
|
|
955
|
+
* @param options - Optional screenshot settings.
|
|
956
|
+
* @param options.includeBackground - Whether to include the canvas background in the export. Defaults to `true`. Set to `false` for a transparent background.
|
|
930
957
|
* @returns A data URL string of the captured image.
|
|
931
958
|
*/
|
|
932
|
-
async getScreenshot(format = 'png') {
|
|
959
|
+
async getScreenshot(format = 'png', options) {
|
|
933
960
|
if (!this.host)
|
|
934
961
|
return null;
|
|
962
|
+
const includeBackground = options?.includeBackground ?? true;
|
|
935
963
|
// Save critical state before screenshot to restore after
|
|
936
964
|
const savedState = {
|
|
937
965
|
objects: this.core.store.objects,
|
|
@@ -943,7 +971,7 @@ export class KritzelEngine {
|
|
|
943
971
|
translateY: this.core.store.state.translateY,
|
|
944
972
|
scale: this.core.store.state.scale,
|
|
945
973
|
};
|
|
946
|
-
const
|
|
974
|
+
const screenshotOptions = {
|
|
947
975
|
filter: (node) => {
|
|
948
976
|
// Exclude the context menu, debug panel, and awareness cursors from the screenshot
|
|
949
977
|
if (node.tagName === 'KRITZEL-CONTEXT-MENU') {
|
|
@@ -958,13 +986,16 @@ export class KritzelEngine {
|
|
|
958
986
|
return true;
|
|
959
987
|
},
|
|
960
988
|
};
|
|
989
|
+
if (!includeBackground) {
|
|
990
|
+
screenshotOptions.backgroundColor = 'transparent';
|
|
991
|
+
}
|
|
961
992
|
let result;
|
|
962
993
|
try {
|
|
963
994
|
if (format === 'svg') {
|
|
964
|
-
result = await toSvg(this.host,
|
|
995
|
+
result = await toSvg(this.host, screenshotOptions);
|
|
965
996
|
}
|
|
966
997
|
else {
|
|
967
|
-
result = await toPng(this.host,
|
|
998
|
+
result = await toPng(this.host, screenshotOptions);
|
|
968
999
|
}
|
|
969
1000
|
}
|
|
970
1001
|
finally {
|
|
@@ -981,14 +1012,18 @@ export class KritzelEngine {
|
|
|
981
1012
|
}
|
|
982
1013
|
return result;
|
|
983
1014
|
}
|
|
984
|
-
/**
|
|
985
|
-
|
|
1015
|
+
/**
|
|
1016
|
+
* Exports the current viewport as a PNG file and triggers a browser download.
|
|
1017
|
+
* @param options - Optional export settings.
|
|
1018
|
+
* @param options.includeBackground - Whether to include the canvas background. Defaults to `true`.
|
|
1019
|
+
*/
|
|
1020
|
+
async exportViewportAsPng(options) {
|
|
986
1021
|
try {
|
|
987
1022
|
const activeWorkspaceName = this.core.store.state?.activeWorkspace?.name || 'workspace';
|
|
988
1023
|
// timestamp format: YYYY-MM-DDTHH-mm-ss-sssZ, clearing colons/dots for safe filename
|
|
989
1024
|
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
990
1025
|
const filename = `${activeWorkspaceName}-${timestamp}.png`;
|
|
991
|
-
const dataUrl = await this.getScreenshot('png');
|
|
1026
|
+
const dataUrl = await this.getScreenshot('png', options);
|
|
992
1027
|
if (!dataUrl) {
|
|
993
1028
|
console.error('Failed to export viewport as PNG: screenshot could not be generated');
|
|
994
1029
|
return;
|
|
@@ -1002,14 +1037,18 @@ export class KritzelEngine {
|
|
|
1002
1037
|
console.error('Failed to export viewport as PNG:', error);
|
|
1003
1038
|
}
|
|
1004
1039
|
}
|
|
1005
|
-
/**
|
|
1006
|
-
|
|
1040
|
+
/**
|
|
1041
|
+
* Exports the current viewport as an SVG file and triggers a browser download.
|
|
1042
|
+
* @param options - Optional export settings.
|
|
1043
|
+
* @param options.includeBackground - Whether to include the canvas background. Defaults to `true`.
|
|
1044
|
+
*/
|
|
1045
|
+
async exportViewportAsSvg(options) {
|
|
1007
1046
|
try {
|
|
1008
1047
|
const activeWorkspaceName = this.core.store.state?.activeWorkspace?.name || 'workspace';
|
|
1009
1048
|
// timestamp format: YYYY-MM-DDTHH-mm-ss-sssZ, clearing colons/dots for safe filename
|
|
1010
1049
|
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
1011
1050
|
const filename = `${activeWorkspaceName}-${timestamp}.svg`;
|
|
1012
|
-
const dataUrl = await this.getScreenshot('svg');
|
|
1051
|
+
const dataUrl = await this.getScreenshot('svg', options);
|
|
1013
1052
|
if (!dataUrl) {
|
|
1014
1053
|
console.error('Failed to export viewport as SVG: screenshot could not be generated');
|
|
1015
1054
|
return;
|
|
@@ -3741,6 +3780,12 @@ export class KritzelEngine {
|
|
|
3741
3780
|
"id": "src/classes/objects/base-object.class.ts::KritzelBaseObject",
|
|
3742
3781
|
"referenceLocation": "KritzelBaseObject"
|
|
3743
3782
|
},
|
|
3783
|
+
"KritzelImage": {
|
|
3784
|
+
"location": "import",
|
|
3785
|
+
"path": "../../../classes/objects/image.class",
|
|
3786
|
+
"id": "src/classes/objects/image.class.ts::KritzelImage",
|
|
3787
|
+
"referenceLocation": "KritzelImage"
|
|
3788
|
+
},
|
|
3744
3789
|
"KritzelText": {
|
|
3745
3790
|
"location": "import",
|
|
3746
3791
|
"path": "../../../classes/objects/text.class",
|
|
@@ -3796,6 +3841,12 @@ export class KritzelEngine {
|
|
|
3796
3841
|
"id": "src/classes/objects/base-object.class.ts::KritzelBaseObject",
|
|
3797
3842
|
"referenceLocation": "KritzelBaseObject"
|
|
3798
3843
|
},
|
|
3844
|
+
"KritzelImage": {
|
|
3845
|
+
"location": "import",
|
|
3846
|
+
"path": "../../../classes/objects/image.class",
|
|
3847
|
+
"id": "src/classes/objects/image.class.ts::KritzelImage",
|
|
3848
|
+
"referenceLocation": "KritzelImage"
|
|
3849
|
+
},
|
|
3799
3850
|
"KritzelText": {
|
|
3800
3851
|
"location": "import",
|
|
3801
3852
|
"path": "../../../classes/objects/text.class",
|
|
@@ -4329,6 +4380,68 @@ export class KritzelEngine {
|
|
|
4329
4380
|
}]
|
|
4330
4381
|
}
|
|
4331
4382
|
},
|
|
4383
|
+
"zoomIn": {
|
|
4384
|
+
"complexType": {
|
|
4385
|
+
"signature": "(factor: number, duration: number) => Promise<void>",
|
|
4386
|
+
"parameters": [{
|
|
4387
|
+
"name": "factor",
|
|
4388
|
+
"type": "number",
|
|
4389
|
+
"docs": "- Multiplicative zoom-in step."
|
|
4390
|
+
}, {
|
|
4391
|
+
"name": "duration",
|
|
4392
|
+
"type": "number",
|
|
4393
|
+
"docs": "- Animation duration in milliseconds."
|
|
4394
|
+
}],
|
|
4395
|
+
"references": {
|
|
4396
|
+
"Promise": {
|
|
4397
|
+
"location": "global",
|
|
4398
|
+
"id": "global::Promise"
|
|
4399
|
+
}
|
|
4400
|
+
},
|
|
4401
|
+
"return": "Promise<void>"
|
|
4402
|
+
},
|
|
4403
|
+
"docs": {
|
|
4404
|
+
"text": "Zooms in by a fixed step, centered on the current viewport center, with a smooth animation.",
|
|
4405
|
+
"tags": [{
|
|
4406
|
+
"name": "param",
|
|
4407
|
+
"text": "factor - Multiplicative zoom-in step."
|
|
4408
|
+
}, {
|
|
4409
|
+
"name": "param",
|
|
4410
|
+
"text": "duration - Animation duration in milliseconds."
|
|
4411
|
+
}]
|
|
4412
|
+
}
|
|
4413
|
+
},
|
|
4414
|
+
"zoomOut": {
|
|
4415
|
+
"complexType": {
|
|
4416
|
+
"signature": "(factor: number, duration: number) => Promise<void>",
|
|
4417
|
+
"parameters": [{
|
|
4418
|
+
"name": "factor",
|
|
4419
|
+
"type": "number",
|
|
4420
|
+
"docs": "- Multiplicative zoom-out step."
|
|
4421
|
+
}, {
|
|
4422
|
+
"name": "duration",
|
|
4423
|
+
"type": "number",
|
|
4424
|
+
"docs": "- Animation duration in milliseconds."
|
|
4425
|
+
}],
|
|
4426
|
+
"references": {
|
|
4427
|
+
"Promise": {
|
|
4428
|
+
"location": "global",
|
|
4429
|
+
"id": "global::Promise"
|
|
4430
|
+
}
|
|
4431
|
+
},
|
|
4432
|
+
"return": "Promise<void>"
|
|
4433
|
+
},
|
|
4434
|
+
"docs": {
|
|
4435
|
+
"text": "Zooms out by a fixed step, centered on the current viewport center, with a smooth animation.",
|
|
4436
|
+
"tags": [{
|
|
4437
|
+
"name": "param",
|
|
4438
|
+
"text": "factor - Multiplicative zoom-out step."
|
|
4439
|
+
}, {
|
|
4440
|
+
"name": "param",
|
|
4441
|
+
"text": "duration - Animation duration in milliseconds."
|
|
4442
|
+
}]
|
|
4443
|
+
}
|
|
4444
|
+
},
|
|
4332
4445
|
"getViewport": {
|
|
4333
4446
|
"complexType": {
|
|
4334
4447
|
"signature": "() => Promise<KritzelViewportState>",
|
|
@@ -4487,17 +4600,25 @@ export class KritzelEngine {
|
|
|
4487
4600
|
},
|
|
4488
4601
|
"getScreenshot": {
|
|
4489
4602
|
"complexType": {
|
|
4490
|
-
"signature": "(format?: \"png\" | \"svg\") => Promise<string | null>",
|
|
4603
|
+
"signature": "(format?: \"png\" | \"svg\", options?: { includeBackground?: boolean; }) => Promise<string | null>",
|
|
4491
4604
|
"parameters": [{
|
|
4492
4605
|
"name": "format",
|
|
4493
4606
|
"type": "\"svg\" | \"png\"",
|
|
4494
4607
|
"docs": "- The image format: `'png'` (default) or `'svg'`."
|
|
4608
|
+
}, {
|
|
4609
|
+
"name": "options",
|
|
4610
|
+
"type": "{ includeBackground?: boolean; }",
|
|
4611
|
+
"docs": "- Optional screenshot settings."
|
|
4495
4612
|
}],
|
|
4496
4613
|
"references": {
|
|
4497
4614
|
"Promise": {
|
|
4498
4615
|
"location": "global",
|
|
4499
4616
|
"id": "global::Promise"
|
|
4500
4617
|
},
|
|
4618
|
+
"Record": {
|
|
4619
|
+
"location": "global",
|
|
4620
|
+
"id": "global::Record"
|
|
4621
|
+
},
|
|
4501
4622
|
"HTMLElement": {
|
|
4502
4623
|
"location": "global",
|
|
4503
4624
|
"id": "global::HTMLElement"
|
|
@@ -4510,6 +4631,12 @@ export class KritzelEngine {
|
|
|
4510
4631
|
"tags": [{
|
|
4511
4632
|
"name": "param",
|
|
4512
4633
|
"text": "format - The image format: `'png'` (default) or `'svg'`."
|
|
4634
|
+
}, {
|
|
4635
|
+
"name": "param",
|
|
4636
|
+
"text": "options - Optional screenshot settings."
|
|
4637
|
+
}, {
|
|
4638
|
+
"name": "param",
|
|
4639
|
+
"text": "options.includeBackground - Whether to include the canvas background in the export. Defaults to `true`. Set to `false` for a transparent background."
|
|
4513
4640
|
}, {
|
|
4514
4641
|
"name": "returns",
|
|
4515
4642
|
"text": "A data URL string of the captured image."
|
|
@@ -4518,8 +4645,12 @@ export class KritzelEngine {
|
|
|
4518
4645
|
},
|
|
4519
4646
|
"exportViewportAsPng": {
|
|
4520
4647
|
"complexType": {
|
|
4521
|
-
"signature": "() => Promise<void>",
|
|
4522
|
-
"parameters": [
|
|
4648
|
+
"signature": "(options?: { includeBackground?: boolean; }) => Promise<void>",
|
|
4649
|
+
"parameters": [{
|
|
4650
|
+
"name": "options",
|
|
4651
|
+
"type": "{ includeBackground?: boolean; }",
|
|
4652
|
+
"docs": "- Optional export settings."
|
|
4653
|
+
}],
|
|
4523
4654
|
"references": {
|
|
4524
4655
|
"Promise": {
|
|
4525
4656
|
"location": "global",
|
|
@@ -4530,13 +4661,23 @@ export class KritzelEngine {
|
|
|
4530
4661
|
},
|
|
4531
4662
|
"docs": {
|
|
4532
4663
|
"text": "Exports the current viewport as a PNG file and triggers a browser download.",
|
|
4533
|
-
"tags": [
|
|
4664
|
+
"tags": [{
|
|
4665
|
+
"name": "param",
|
|
4666
|
+
"text": "options - Optional export settings."
|
|
4667
|
+
}, {
|
|
4668
|
+
"name": "param",
|
|
4669
|
+
"text": "options.includeBackground - Whether to include the canvas background. Defaults to `true`."
|
|
4670
|
+
}]
|
|
4534
4671
|
}
|
|
4535
4672
|
},
|
|
4536
4673
|
"exportViewportAsSvg": {
|
|
4537
4674
|
"complexType": {
|
|
4538
|
-
"signature": "() => Promise<void>",
|
|
4539
|
-
"parameters": [
|
|
4675
|
+
"signature": "(options?: { includeBackground?: boolean; }) => Promise<void>",
|
|
4676
|
+
"parameters": [{
|
|
4677
|
+
"name": "options",
|
|
4678
|
+
"type": "{ includeBackground?: boolean; }",
|
|
4679
|
+
"docs": "- Optional export settings."
|
|
4680
|
+
}],
|
|
4540
4681
|
"references": {
|
|
4541
4682
|
"Promise": {
|
|
4542
4683
|
"location": "global",
|
|
@@ -4547,7 +4688,13 @@ export class KritzelEngine {
|
|
|
4547
4688
|
},
|
|
4548
4689
|
"docs": {
|
|
4549
4690
|
"text": "Exports the current viewport as an SVG file and triggers a browser download.",
|
|
4550
|
-
"tags": [
|
|
4691
|
+
"tags": [{
|
|
4692
|
+
"name": "param",
|
|
4693
|
+
"text": "options - Optional export settings."
|
|
4694
|
+
}, {
|
|
4695
|
+
"name": "param",
|
|
4696
|
+
"text": "options.includeBackground - Whether to include the canvas background. Defaults to `true`."
|
|
4697
|
+
}]
|
|
4551
4698
|
}
|
|
4552
4699
|
},
|
|
4553
4700
|
"getSelectedObjectsAsSvgString": {
|
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-B43upypT.js";export{K as KritzelBaseObject,b as KritzelLine,a as KritzelPath}from"./p-CFgkUYoO.js";export{A as AssetNotFoundError,I as IndexedDBAssetProvider,f as KritzelAssetResolver,b as KritzelGroup,a as KritzelImage,e as KritzelSelectionTool,c as KritzelShape,K as KritzelText,d as KritzelTextTool,S as ShapeType}from"./p-B9hLySCl.js";export{A as APP_STATE_MIGRATIONS,g as KritzelAlignment,f as KritzelAnchorManager,K as KritzelBrushTool,e as KritzelCursorHelper,b as KritzelEraserTool,c as KritzelImageTool,a as KritzelLineTool,d as KritzelShapeTool,W as WORKSPACE_MIGRATIONS,r as runMigrations}from"./p-DplAQ6jk.js";import*as t from"yjs";import{IndexeddbPersistence as i}from"y-indexeddb";import{WebsocketProvider as n}from"y-websocket";import{H as o,a as m}from"./kritzel-editor.js";export{d as DEFAULT_ASSET_STORAGE_CONFIG,D as DEFAULT_BRUSH_CONFIG,c as DEFAULT_LINE_TOOL_CONFIG,b as DEFAULT_TEXT_CONFIG,KritzelEditor,defineCustomElement as defineCustomElementKritzelEditor}from"./kritzel-editor.js";export{K as KritzelWorkspace,W as WORKSPACE_EXPORT_VERSION}from"./p-DhMlShij.js";export{K as KritzelThemeManager,d as darkTheme,l as lightTheme}from"./p-2xYAGd0I.js";export{C as CURRENT_APP_STATE_SCHEMA_VERSION,a as CURRENT_WORKSPACE_SCHEMA_VERSION}from"./p-CW-VyJgK.js";export{KritzelActiveUsers,defineCustomElement as defineCustomElementKritzelActiveUsers}from"./kritzel-active-users.js";export{KritzelAvatar,defineCustomElement as defineCustomElementKritzelAvatar}from"./kritzel-avatar.js";export{KritzelAwarenessCursors,defineCustomElement as defineCustomElementKritzelAwarenessCursors}from"./kritzel-awareness-cursors.js";export{KritzelBackToContent,defineCustomElement as defineCustomElementKritzelBackToContent}from"./kritzel-back-to-content.js";export{KritzelBrushStyle,defineCustomElement as defineCustomElementKritzelBrushStyle}from"./kritzel-brush-style.js";export{KritzelButton,defineCustomElement as defineCustomElementKritzelButton}from"./kritzel-button.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{KritzelCurrentUser,defineCustomElement as defineCustomElementKritzelCurrentUser}from"./kritzel-current-user.js";export{KritzelCurrentUserDialog,defineCustomElement as defineCustomElementKritzelCurrentUserDialog}from"./kritzel-current-user-dialog.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{KritzelInput,defineCustomElement as defineCustomElementKritzelInput}from"./kritzel-input.js";export{KritzelLineEndings,defineCustomElement as defineCustomElementKritzelLineEndings}from"./kritzel-line-endings.js";export{KritzelLoginDialog,defineCustomElement as defineCustomElementKritzelLoginDialog}from"./kritzel-login-dialog.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{KritzelPillTabs,defineCustomElement as defineCustomElementKritzelPillTabs}from"./kritzel-pill-tabs.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{KritzelShareDialog,defineCustomElement as defineCustomElementKritzelShareDialog}from"./kritzel-share-dialog.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";const u=Math.floor,h=127,p=Number.MAX_SAFE_INTEGER;class z{constructor(){this.cpos=0,this.cbuf=new Uint8Array(100),this.bufs=[]}}const E=()=>new z,y=e=>{const t=new Uint8Array((e=>{let t=e.cpos;for(let s=0;s<e.bufs.length;s++)t+=e.bufs[s].length;return t})(e));let s=0;for(let i=0;i<e.bufs.length;i++){const n=e.bufs[i];t.set(n,s),s+=n.length}return t.set(new Uint8Array(e.cbuf.buffer,0,e.cpos),s),t},w=(e,t)=>{const s=e.cbuf.length;e.cpos===s&&(e.bufs.push(e.cbuf),e.cbuf=new Uint8Array(2*s),e.cpos=0),e.cbuf[e.cpos++]=t},k=(e,t)=>{for(;t>h;)w(e,128|h&t),t=u(t/128);w(e,h&t)},x=(e,t)=>{k(e,t.byteLength),((e,t)=>{const s=e.cbuf.length,i=e.cpos,n=((e,t)=>e<t?e:t)(s-i,t.length),o=t.length-n;e.cbuf.set(t.subarray(0,n),i),e.cpos+=n,o>0&&(e.bufs.push(e.cbuf),e.cbuf=new Uint8Array(((e,t)=>e>t?e:t)(2*s,o)),e.cbuf.set(t.subarray(n)),e.cpos=o)})(e,t)},T=e=>Error(e),j=T("Unexpected end of array"),P=T("Integer out of Range");class v{constructor(e){this.arr=e,this.pos=0}}const U=e=>((e,t)=>{const s=new Uint8Array(e.arr.buffer,e.pos+e.arr.byteOffset,t);return e.pos+=t,s})(e,M(e)),M=e=>{let t=0,s=1;const i=e.arr.length;for(;e.pos<i;){const i=e.arr[e.pos++];if(t+=(i&h)*s,s*=128,i<128)return t;if(t>p)throw P}throw j};class F{type="local";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),s?.quiet||console.info("BroadcastChannel Provider initialized: "+e)}handleDocUpdate=(e,t)=>{if(t!==this){const t=E();k(t,0),x(t,e),this.channel.postMessage(y(t))}};handleMessage(e){const s=(e=>new v(e))(new Uint8Array(e));switch(M(s)){case 0:const e=U(s);t.applyUpdate(this.doc,e,this);break;case 1:this.broadcastSync();break;case 2:const i=U(s),n=t.encodeStateAsUpdate(this.doc,i);if(n.length>0){const e=E();k(e,0),x(e,n),this.channel.postMessage(y(e))}}}broadcastSync(){const e=E();k(e,2),x(e,t.encodeStateVector(this.doc)),this.channel.postMessage(y(e))}async connect(){if(!this._synced)return new Promise((e=>{const t=()=>{this._synced?e():setTimeout(t,50)};t()}))}disconnect(){}async reconnect(){return this.disconnect(),this.connect()}destroy(){this.doc.off("update",this.handleDocUpdate),this.channel.close()}}const _=new Map;class O{type="local";doc;cacheKey;isConnected=!1;constructor(e,t,s){this.doc=t,this.cacheKey=s?.name??e}handleUpdate=(e,s)=>{s!==this&&_.set(this.cacheKey,t.encodeStateAsUpdate(this.doc))};async connect(){if(this.isConnected)return;const e=_.get(this.cacheKey);e&&t.applyUpdate(this.doc,e,this),this.doc.on("update",this.handleUpdate),this.isConnected=!0}disconnect(){this.isConnected=!1}async reconnect(){return this.disconnect(),this.connect()}destroy(){this.doc.off("update",this.handleUpdate),this.isConnected=!1}static clear(e){void 0!==e?_.delete(e):_.clear()}}class ${type="local";provider;isConnected=!1;constructor(e,t,s){this.provider=new i(s?.name||e,t)}async connect(){if(!this.isConnected)return new Promise((e=>{this.provider.on("synced",(()=>{this.isConnected=!0,e()}))}))}disconnect(){this.isConnected=!1}async reconnect(){return this.disconnect(),this.connect()}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1}}class H{type="network";provider;isConnected=!1;_quiet=!1;get awareness(){return this.provider.awareness}constructor(e,t,s){const i=s?.url||"ws://localhost:1234",o=s?.roomName||e;this.provider=new n(i,o,t,{params:s?.params,protocols:s?.protocols,WebSocketPolyfill:s?.WebSocketPolyfill,awareness:s?.awareness,maxBackoffTime:s?.maxBackoffTime,disableBc:!0}),this._quiet=s?.quiet??!1,this.setupEventListeners(),this._quiet||console.info(`WebSocket Provider initialized: ${i}/${o}`)}static with(e){return{create:(t,s,i)=>{const n=i?{...e,...i}:e;return new H(t,s,n)}}}setupEventListeners(){this.provider.on("status",(({status:e})=>{"connected"===e?(this.isConnected=!0,this._quiet||console.info("WebSocket connected")):"disconnected"===e&&(this.isConnected=!1,this._quiet||console.info("WebSocket disconnected"))})),this.provider.on("sync",(e=>{e&&!this._quiet&&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}async reconnect(){return this.disconnect(),this.connect()}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1}}class R{type="network";provider;isConnected=!1;isSynced=!1;usesSharedSocket=!1;isDestroyed=!1;connectTimeout=null;pendingConnectReject=null;connectionTimeoutMs;_connectionStatus="disconnected";visibilityHandler=null;onlineHandler=null;get awareness(){return this.provider.awareness}get connectionStatus(){return this._connectionStatus}static sharedWebSocketProvider=null;constructor(e,t,s){const i=s?.name||e,n=s?.url||"ws://localhost:1234";this.connectionTimeoutMs=s?.connectionTimeout??1e4;const r=s?.websocketProvider||R.sharedWebSocketProvider,l={};void 0!==s?.delay&&(l.delay=s.delay),void 0!==s?.factor&&(l.factor=s.factor),void 0!==s?.maxAttempts&&(l.maxAttempts=s.maxAttempts),void 0!==s?.minDelay&&(l.minDelay=s.minDelay),void 0!==s?.maxDelay&&(l.maxDelay=s.maxDelay);const a=()=>{this.isDestroyed||(this.isConnected=!0,this._connectionStatus="connected",s?.quiet||console.info("Hocuspocus connected: "+i),s?.onConnect&&s.onConnect())},c=()=>{this.isDestroyed||(this.isConnected=!1,this.isSynced=!1,this._connectionStatus="disconnected",s?.quiet||console.info("Hocuspocus disconnected: "+i),s?.onDisconnect&&s.onDisconnect())},d=()=>{this.isDestroyed||(this.isSynced=!0,this._connectionStatus="synced",s?.quiet||console.info("Hocuspocus synced: "+i),s?.onSynced&&s.onSynced())},m=e=>{this.isDestroyed||("connecting"===e.status&&(this._connectionStatus="connecting"),s?.onStatus&&s.onStatus(e))};if(r){this.usesSharedSocket=!0;const e={websocketProvider:r,name:i,document:t,token:s?.token||null,onStatus:m,onConnect:a,onDisconnect:c,onSynced:d,...l};void 0!==s?.forceSyncInterval&&(e.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(e.onAuthenticationFailed=s.onAuthenticationFailed),this.provider=new o(e),this.provider.attach(),s?.quiet||console.info("Hocuspocus Provider initialized (multiplexed): "+i)}else{this.usesSharedSocket=!1;const e={url:n,name:i,document:t,token:s?.token||null,autoConnect:!1,onStatus:m,onConnect:a,onDisconnect:c,onSynced:d,...l};void 0!==s?.forceSyncInterval&&(e.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(e.onAuthenticationFailed=s.onAuthenticationFailed),s?.WebSocketPolyfill&&(e.WebSocketPolyfill=s.WebSocketPolyfill),this.provider=new o(e),s?.quiet||console.info(`Hocuspocus Provider initialized: ${n}/${i}`)}this.setupBrowserEventListeners()}setupBrowserEventListeners(){"undefined"!=typeof document&&(this.visibilityHandler=()=>{"visible"!==document.visibilityState||this.isConnected||this.isDestroyed||this.provider.connect()},document.addEventListener("visibilitychange",this.visibilityHandler)),"undefined"!=typeof window&&(this.onlineHandler=()=>{this.isConnected||this.isDestroyed||this.provider.connect()},window.addEventListener("online",this.onlineHandler))}removeBrowserEventListeners(){this.visibilityHandler&&"undefined"!=typeof document&&(document.removeEventListener("visibilitychange",this.visibilityHandler),this.visibilityHandler=null),this.onlineHandler&&"undefined"!=typeof window&&(window.removeEventListener("online",this.onlineHandler),this.onlineHandler=null)}static createSharedWebSocket(e){if(R.sharedWebSocketProvider)return console.warn("Shared WebSocket already exists. Returning existing instance."),R.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),R.sharedWebSocketProvider=new m(t),console.info("Shared Hocuspocus WebSocket created: "+e.url),R.sharedWebSocketProvider}static destroySharedWebSocket(){R.sharedWebSocketProvider&&(R.sharedWebSocketProvider.destroy(),R.sharedWebSocketProvider=null,console.info("Shared Hocuspocus WebSocket destroyed"))}static getSharedWebSocket(){return R.sharedWebSocketProvider}static with(e){return{create:(t,s,i)=>{const n=i?{...e,...i}:e;return new R(t,s,n)}}}async connect(){if(!this.isSynced&&!this.isDestroyed)return this._connectionStatus="connecting",new Promise(((e,t)=>{this.pendingConnectReject=t,this.connectTimeout=setTimeout((()=>{this.pendingConnectReject=null,this.connectTimeout=null,t(Error("Hocuspocus connection timeout"))}),this.connectionTimeoutMs);const s=()=>{this.connectTimeout&&(clearTimeout(this.connectTimeout),this.connectTimeout=null),this.pendingConnectReject=null,this.provider.off("synced",s),this.isDestroyed||e()};if(this.provider.on("synced",s),this.provider.isSynced)return this.connectTimeout&&(clearTimeout(this.connectTimeout),this.connectTimeout=null),this.pendingConnectReject=null,this.provider.off("synced",s),void e();this.isConnected||this.usesSharedSocket||this.provider.connect()}))}async reconnect(){return this.disconnect(),this.connect()}disconnect(){this.connectTimeout&&(clearTimeout(this.connectTimeout),this.connectTimeout=null),this.pendingConnectReject&&(this.pendingConnectReject=null),this.provider&&(this.usesSharedSocket?this.provider.detach():this.provider.disconnect()),this.isConnected=!1,this.isSynced=!1,this._connectionStatus="disconnected"}destroy(){this.isDestroyed=!0,this.connectTimeout&&(clearTimeout(this.connectTimeout),this.connectTimeout=null),this.pendingConnectReject&&(this.pendingConnectReject=null),this.removeBrowserEventListeners(),this.provider&&this.provider.destroy(),this.isConnected=!1,this.isSynced=!1,this._connectionStatus="disconnected"}}class B{type="remote";name="HttpAssetProvider";_options;constructor(e){this._options=e}static with(e){return{create:()=>new B(e)}}async init(){this._options.quiet||console.info("HttpAssetProvider initialized")}destroy(){}canResolve(e){return!0}async put(e,t){const s=t.id??this.generateUuid(),i={...t,id:s},n=await(this._options.headers?.())??{},o=await this._options.uploadUrl(i),r=this._options.upload??this.defaultUpload;return{id:(await r(o,e,i,n)).id??s,kind:t.kind??"file",mimeType:t.mimeType,size:e.size,createdAt:Date.now(),width:t.width,height:t.height,durationMs:t.durationMs,originalFilename:t.originalFilename}}async resolve(e){return this._options.resolveUrl(e)}async fetch(e){const t=await this._options.resolveUrl(e),s=await(this._options.headers?.())??{},i=await fetch(t,{headers:s});if(!i.ok)throw Error(`[HttpAssetProvider] Failed to fetch asset ${e}: ${i.status} ${i.statusText}`);return i.blob()}async delete(e){if(!this._options.deleteUrl)return;const t=await this._options.deleteUrl(e),s=await(this._options.headers?.())??{},i=await fetch(t,{method:"DELETE",headers:s});if(!i.ok)throw Error(`[HttpAssetProvider] Failed to delete asset ${e}: ${i.status} ${i.statusText}`);this._options.quiet||console.info("HttpAssetProvider: deleted asset "+e)}defaultUpload=async(e,t,s,i)=>{const n=new FormData;n.append("metadata",JSON.stringify(s)),n.append("file",t,s.originalFilename||`${s.id}.${this.extensionFromMime(s.mimeType)}`);const o=await fetch(e,{method:"POST",headers:i,body:n});if(!o.ok)throw Error(`[HttpAssetProvider] Upload failed: ${o.status} ${o.statusText}`);return(o.headers.get("content-type")||"").includes("application/json")?await o.json():{}};extensionFromMime(e){const t=e.indexOf("/");return t>=0?e.slice(t+1):"bin"}generateUuid(){if("undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID)return crypto.randomUUID();const e=crypto.getRandomValues(new Uint8Array(16));e[6]=15&e[6]|64,e[8]=63&e[8]|128;const t=Array.from(e,(e=>e.toString(16).padStart(2,"0"))).join("");return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}}class N{type="remote";name="PresignedAssetProvider";_options;constructor(e){this._options=e}static with(e){return{create:()=>new N(e)}}async init(){this._options.quiet||console.info("PresignedAssetProvider initialized")}destroy(){}canResolve(e){return!0}async put(e,t){const s=await this._options.getUploadDescriptor(t),i=s.method??"PUT",n={...s.headers??{}};let o;if(n["Content-Type"]||n["content-type"]||(n["Content-Type"]=t.mimeType),"POST"===i&&s.fields){const t=new FormData;for(const[e,i]of Object.entries(s.fields))t.append(e,i);t.append("file",e),o=t,delete n["Content-Type"],delete n["content-type"]}else o=e;const r=await fetch(s.url,{method:i,headers:n,body:o});if(!r.ok)throw Error(`[PresignedAssetProvider] Upload failed: ${r.status} ${r.statusText}`);return{id:s.id,kind:t.kind??"file",mimeType:t.mimeType,size:e.size,createdAt:Date.now(),width:t.width,height:t.height,durationMs:t.durationMs,originalFilename:t.originalFilename}}async resolve(e){return this._options.getDownloadUrl(e)}async fetch(e){const t=await this._options.getDownloadUrl(e),s=await fetch(t);if(!s.ok)throw Error(`[PresignedAssetProvider] Failed to fetch asset ${e}: ${s.status} ${s.statusText}`);return s.blob()}async delete(e){this._options.deleteAsset&&(await this._options.deleteAsset(e),this._options.quiet||console.info("PresignedAssetProvider: deleted asset "+e))}}export{F as BroadcastSyncProvider,R as HocuspocusSyncProvider,B as HttpAssetProvider,O as InMemorySyncProvider,$ as IndexedDBSyncProvider,N as PresignedAssetProvider,H as WebSocketSyncProvider}
|
|
1
|
+
export{g as getAssetPath,r as render,s as setAssetPath,a as setNonce,b as setPlatformOptions}from"./p-B43upypT.js";export{K as KritzelBaseObject,b as KritzelLine,a as KritzelPath}from"./p-CFgkUYoO.js";export{A as AssetNotFoundError,I as IndexedDBAssetProvider,f as KritzelAssetResolver,b as KritzelGroup,a as KritzelImage,e as KritzelSelectionTool,c as KritzelShape,K as KritzelText,d as KritzelTextTool,S as ShapeType}from"./p-CUPYGT8c.js";export{A as APP_STATE_MIGRATIONS,g as KritzelAlignment,f as KritzelAnchorManager,K as KritzelBrushTool,e as KritzelCursorHelper,b as KritzelEraserTool,c as KritzelImageTool,a as KritzelLineTool,d as KritzelShapeTool,W as WORKSPACE_MIGRATIONS,r as runMigrations}from"./p-CLLbE_z8.js";import*as t from"yjs";import{IndexeddbPersistence as i}from"y-indexeddb";import{WebsocketProvider as n}from"y-websocket";import{H as o,a as m}from"./kritzel-editor.js";export{d as DEFAULT_ASSET_STORAGE_CONFIG,D as DEFAULT_BRUSH_CONFIG,c as DEFAULT_LINE_TOOL_CONFIG,b as DEFAULT_TEXT_CONFIG,KritzelEditor,defineCustomElement as defineCustomElementKritzelEditor}from"./kritzel-editor.js";export{K as KritzelWorkspace,W as WORKSPACE_EXPORT_VERSION}from"./p-DhMlShij.js";export{K as KritzelThemeManager,d as darkTheme,l as lightTheme}from"./p-2xYAGd0I.js";export{C as CURRENT_APP_STATE_SCHEMA_VERSION,a as CURRENT_WORKSPACE_SCHEMA_VERSION}from"./p-CW-VyJgK.js";export{KritzelActiveUsers,defineCustomElement as defineCustomElementKritzelActiveUsers}from"./kritzel-active-users.js";export{KritzelAvatar,defineCustomElement as defineCustomElementKritzelAvatar}from"./kritzel-avatar.js";export{KritzelAwarenessCursors,defineCustomElement as defineCustomElementKritzelAwarenessCursors}from"./kritzel-awareness-cursors.js";export{KritzelBackToContent,defineCustomElement as defineCustomElementKritzelBackToContent}from"./kritzel-back-to-content.js";export{KritzelBrushStyle,defineCustomElement as defineCustomElementKritzelBrushStyle}from"./kritzel-brush-style.js";export{KritzelButton,defineCustomElement as defineCustomElementKritzelButton}from"./kritzel-button.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{KritzelCurrentUser,defineCustomElement as defineCustomElementKritzelCurrentUser}from"./kritzel-current-user.js";export{KritzelCurrentUserDialog,defineCustomElement as defineCustomElementKritzelCurrentUserDialog}from"./kritzel-current-user-dialog.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{KritzelInput,defineCustomElement as defineCustomElementKritzelInput}from"./kritzel-input.js";export{KritzelLineEndings,defineCustomElement as defineCustomElementKritzelLineEndings}from"./kritzel-line-endings.js";export{KritzelLoginDialog,defineCustomElement as defineCustomElementKritzelLoginDialog}from"./kritzel-login-dialog.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{KritzelPillTabs,defineCustomElement as defineCustomElementKritzelPillTabs}from"./kritzel-pill-tabs.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{KritzelShareDialog,defineCustomElement as defineCustomElementKritzelShareDialog}from"./kritzel-share-dialog.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";const u=Math.floor,h=127,z=Number.MAX_SAFE_INTEGER;class p{constructor(){this.cpos=0,this.cbuf=new Uint8Array(100),this.bufs=[]}}const E=()=>new p,y=e=>{const t=new Uint8Array((e=>{let t=e.cpos;for(let s=0;s<e.bufs.length;s++)t+=e.bufs[s].length;return t})(e));let s=0;for(let i=0;i<e.bufs.length;i++){const n=e.bufs[i];t.set(n,s),s+=n.length}return t.set(new Uint8Array(e.cbuf.buffer,0,e.cpos),s),t},w=(e,t)=>{const s=e.cbuf.length;e.cpos===s&&(e.bufs.push(e.cbuf),e.cbuf=new Uint8Array(2*s),e.cpos=0),e.cbuf[e.cpos++]=t},k=(e,t)=>{for(;t>h;)w(e,128|h&t),t=u(t/128);w(e,h&t)},x=(e,t)=>{k(e,t.byteLength),((e,t)=>{const s=e.cbuf.length,i=e.cpos,n=((e,t)=>e<t?e:t)(s-i,t.length),o=t.length-n;e.cbuf.set(t.subarray(0,n),i),e.cpos+=n,o>0&&(e.bufs.push(e.cbuf),e.cbuf=new Uint8Array(((e,t)=>e>t?e:t)(2*s,o)),e.cbuf.set(t.subarray(n)),e.cpos=o)})(e,t)},T=e=>Error(e),j=T("Unexpected end of array"),P=T("Integer out of Range");class v{constructor(e){this.arr=e,this.pos=0}}const U=e=>((e,t)=>{const s=new Uint8Array(e.arr.buffer,e.pos+e.arr.byteOffset,t);return e.pos+=t,s})(e,M(e)),M=e=>{let t=0,s=1;const i=e.arr.length;for(;e.pos<i;){const i=e.arr[e.pos++];if(t+=(i&h)*s,s*=128,i<128)return t;if(t>z)throw P}throw j};class F{type="local";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),s?.quiet||console.info("BroadcastChannel Provider initialized: "+e)}handleDocUpdate=(e,t)=>{if(t!==this){const t=E();k(t,0),x(t,e),this.channel.postMessage(y(t))}};handleMessage(e){const s=(e=>new v(e))(new Uint8Array(e));switch(M(s)){case 0:const e=U(s);t.applyUpdate(this.doc,e,this);break;case 1:this.broadcastSync();break;case 2:const i=U(s),n=t.encodeStateAsUpdate(this.doc,i);if(n.length>0){const e=E();k(e,0),x(e,n),this.channel.postMessage(y(e))}}}broadcastSync(){const e=E();k(e,2),x(e,t.encodeStateVector(this.doc)),this.channel.postMessage(y(e))}async connect(){if(!this._synced)return new Promise((e=>{const t=()=>{this._synced?e():setTimeout(t,50)};t()}))}disconnect(){}async reconnect(){return this.disconnect(),this.connect()}destroy(){this.doc.off("update",this.handleDocUpdate),this.channel.close()}}const _=new Map;class O{type="local";doc;cacheKey;isConnected=!1;constructor(e,t,s){this.doc=t,this.cacheKey=s?.name??e}handleUpdate=(e,s)=>{s!==this&&_.set(this.cacheKey,t.encodeStateAsUpdate(this.doc))};async connect(){if(this.isConnected)return;const e=_.get(this.cacheKey);e&&t.applyUpdate(this.doc,e,this),this.doc.on("update",this.handleUpdate),this.isConnected=!0}disconnect(){this.isConnected=!1}async reconnect(){return this.disconnect(),this.connect()}destroy(){this.doc.off("update",this.handleUpdate),this.isConnected=!1}static clear(e){void 0!==e?_.delete(e):_.clear()}}class ${type="local";provider;isConnected=!1;constructor(e,t,s){this.provider=new i(s?.name||e,t)}async connect(){if(!this.isConnected)return new Promise((e=>{this.provider.on("synced",(()=>{this.isConnected=!0,e()}))}))}disconnect(){this.isConnected=!1}async reconnect(){return this.disconnect(),this.connect()}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1}}class H{type="network";provider;isConnected=!1;_quiet=!1;get awareness(){return this.provider.awareness}constructor(e,t,s){const i=s?.url||"ws://localhost:1234",o=s?.roomName||e;this.provider=new n(i,o,t,{params:s?.params,protocols:s?.protocols,WebSocketPolyfill:s?.WebSocketPolyfill,awareness:s?.awareness,maxBackoffTime:s?.maxBackoffTime,disableBc:!0}),this._quiet=s?.quiet??!1,this.setupEventListeners(),this._quiet||console.info(`WebSocket Provider initialized: ${i}/${o}`)}static with(e){return{create:(t,s,i)=>{const n=i?{...e,...i}:e;return new H(t,s,n)}}}setupEventListeners(){this.provider.on("status",(({status:e})=>{"connected"===e?(this.isConnected=!0,this._quiet||console.info("WebSocket connected")):"disconnected"===e&&(this.isConnected=!1,this._quiet||console.info("WebSocket disconnected"))})),this.provider.on("sync",(e=>{e&&!this._quiet&&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}async reconnect(){return this.disconnect(),this.connect()}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1}}class R{type="network";provider;isConnected=!1;isSynced=!1;usesSharedSocket=!1;isDestroyed=!1;connectTimeout=null;pendingConnectReject=null;connectionTimeoutMs;_connectionStatus="disconnected";visibilityHandler=null;onlineHandler=null;get awareness(){return this.provider.awareness}get connectionStatus(){return this._connectionStatus}static sharedWebSocketProvider=null;constructor(e,t,s){const i=s?.name||e,n=s?.url||"ws://localhost:1234";this.connectionTimeoutMs=s?.connectionTimeout??1e4;const r=s?.websocketProvider||R.sharedWebSocketProvider,l={};void 0!==s?.delay&&(l.delay=s.delay),void 0!==s?.factor&&(l.factor=s.factor),void 0!==s?.maxAttempts&&(l.maxAttempts=s.maxAttempts),void 0!==s?.minDelay&&(l.minDelay=s.minDelay),void 0!==s?.maxDelay&&(l.maxDelay=s.maxDelay);const a=()=>{this.isDestroyed||(this.isConnected=!0,this._connectionStatus="connected",s?.quiet||console.info("Hocuspocus connected: "+i),s?.onConnect&&s.onConnect())},c=()=>{this.isDestroyed||(this.isConnected=!1,this.isSynced=!1,this._connectionStatus="disconnected",s?.quiet||console.info("Hocuspocus disconnected: "+i),s?.onDisconnect&&s.onDisconnect())},d=()=>{this.isDestroyed||(this.isSynced=!0,this._connectionStatus="synced",s?.quiet||console.info("Hocuspocus synced: "+i),s?.onSynced&&s.onSynced())},m=e=>{this.isDestroyed||("connecting"===e.status&&(this._connectionStatus="connecting"),s?.onStatus&&s.onStatus(e))};if(r){this.usesSharedSocket=!0;const e={websocketProvider:r,name:i,document:t,token:s?.token||null,onStatus:m,onConnect:a,onDisconnect:c,onSynced:d,...l};void 0!==s?.forceSyncInterval&&(e.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(e.onAuthenticationFailed=s.onAuthenticationFailed),this.provider=new o(e),this.provider.attach(),s?.quiet||console.info("Hocuspocus Provider initialized (multiplexed): "+i)}else{this.usesSharedSocket=!1;const e={url:n,name:i,document:t,token:s?.token||null,autoConnect:!1,onStatus:m,onConnect:a,onDisconnect:c,onSynced:d,...l};void 0!==s?.forceSyncInterval&&(e.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(e.onAuthenticationFailed=s.onAuthenticationFailed),s?.WebSocketPolyfill&&(e.WebSocketPolyfill=s.WebSocketPolyfill),this.provider=new o(e),s?.quiet||console.info(`Hocuspocus Provider initialized: ${n}/${i}`)}this.setupBrowserEventListeners()}setupBrowserEventListeners(){"undefined"!=typeof document&&(this.visibilityHandler=()=>{"visible"!==document.visibilityState||this.isConnected||this.isDestroyed||this.provider.connect()},document.addEventListener("visibilitychange",this.visibilityHandler)),"undefined"!=typeof window&&(this.onlineHandler=()=>{this.isConnected||this.isDestroyed||this.provider.connect()},window.addEventListener("online",this.onlineHandler))}removeBrowserEventListeners(){this.visibilityHandler&&"undefined"!=typeof document&&(document.removeEventListener("visibilitychange",this.visibilityHandler),this.visibilityHandler=null),this.onlineHandler&&"undefined"!=typeof window&&(window.removeEventListener("online",this.onlineHandler),this.onlineHandler=null)}static createSharedWebSocket(e){if(R.sharedWebSocketProvider)return console.warn("Shared WebSocket already exists. Returning existing instance."),R.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),R.sharedWebSocketProvider=new m(t),console.info("Shared Hocuspocus WebSocket created: "+e.url),R.sharedWebSocketProvider}static destroySharedWebSocket(){R.sharedWebSocketProvider&&(R.sharedWebSocketProvider.destroy(),R.sharedWebSocketProvider=null,console.info("Shared Hocuspocus WebSocket destroyed"))}static getSharedWebSocket(){return R.sharedWebSocketProvider}static with(e){return{create:(t,s,i)=>{const n=i?{...e,...i}:e;return new R(t,s,n)}}}async connect(){if(!this.isSynced&&!this.isDestroyed)return this._connectionStatus="connecting",new Promise(((e,t)=>{this.pendingConnectReject=t,this.connectTimeout=setTimeout((()=>{this.pendingConnectReject=null,this.connectTimeout=null,t(Error("Hocuspocus connection timeout"))}),this.connectionTimeoutMs);const s=()=>{this.connectTimeout&&(clearTimeout(this.connectTimeout),this.connectTimeout=null),this.pendingConnectReject=null,this.provider.off("synced",s),this.isDestroyed||e()};if(this.provider.on("synced",s),this.provider.isSynced)return this.connectTimeout&&(clearTimeout(this.connectTimeout),this.connectTimeout=null),this.pendingConnectReject=null,this.provider.off("synced",s),void e();this.isConnected||this.usesSharedSocket||this.provider.connect()}))}async reconnect(){return this.disconnect(),this.connect()}disconnect(){this.connectTimeout&&(clearTimeout(this.connectTimeout),this.connectTimeout=null),this.pendingConnectReject&&(this.pendingConnectReject=null),this.provider&&(this.usesSharedSocket?this.provider.detach():this.provider.disconnect()),this.isConnected=!1,this.isSynced=!1,this._connectionStatus="disconnected"}destroy(){this.isDestroyed=!0,this.connectTimeout&&(clearTimeout(this.connectTimeout),this.connectTimeout=null),this.pendingConnectReject&&(this.pendingConnectReject=null),this.removeBrowserEventListeners(),this.provider&&this.provider.destroy(),this.isConnected=!1,this.isSynced=!1,this._connectionStatus="disconnected"}}class B{type="remote";name="HttpAssetProvider";_options;constructor(e){this._options=e}static with(e){return{create:()=>new B(e)}}async init(){this._options.quiet||console.info("HttpAssetProvider initialized")}destroy(){}canResolve(e){return!0}async put(e,t){const s=t.id??this.generateUuid(),i={...t,id:s},n=await(this._options.headers?.())??{},o=await this._options.uploadUrl(i),r=this._options.upload??this.defaultUpload;return{id:(await r(o,e,i,n)).id??s,kind:t.kind??"file",mimeType:t.mimeType,size:e.size,createdAt:Date.now(),width:t.width,height:t.height,durationMs:t.durationMs,originalFilename:t.originalFilename}}async resolve(e){return this._options.resolveUrl(e)}async fetch(e){const t=await this._options.resolveUrl(e),s=await(this._options.headers?.())??{},i=await fetch(t,{headers:s});if(!i.ok)throw Error(`[HttpAssetProvider] Failed to fetch asset ${e}: ${i.status} ${i.statusText}`);return i.blob()}async delete(e){if(!this._options.deleteUrl)return;const t=await this._options.deleteUrl(e),s=await(this._options.headers?.())??{},i=await fetch(t,{method:"DELETE",headers:s});if(!i.ok)throw Error(`[HttpAssetProvider] Failed to delete asset ${e}: ${i.status} ${i.statusText}`);this._options.quiet||console.info("HttpAssetProvider: deleted asset "+e)}defaultUpload=async(e,t,s,i)=>{const n=new FormData;n.append("metadata",JSON.stringify(s)),n.append("file",t,s.originalFilename||`${s.id}.${this.extensionFromMime(s.mimeType)}`);const o=await fetch(e,{method:"POST",headers:i,body:n});if(!o.ok)throw Error(`[HttpAssetProvider] Upload failed: ${o.status} ${o.statusText}`);return(o.headers.get("content-type")||"").includes("application/json")?await o.json():{}};extensionFromMime(e){const t=e.indexOf("/");return t>=0?e.slice(t+1):"bin"}generateUuid(){if("undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID)return crypto.randomUUID();const e=crypto.getRandomValues(new Uint8Array(16));e[6]=15&e[6]|64,e[8]=63&e[8]|128;const t=Array.from(e,(e=>e.toString(16).padStart(2,"0"))).join("");return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}}class L{type="remote";name="PresignedAssetProvider";_options;constructor(e){this._options=e}static with(e){return{create:()=>new L(e)}}async init(){this._options.quiet||console.info("PresignedAssetProvider initialized")}destroy(){}canResolve(e){return!0}async put(e,t){const s=await this._options.getUploadDescriptor(t),i=s.method??"PUT",n={...s.headers??{}};let o;if(n["Content-Type"]||n["content-type"]||(n["Content-Type"]=t.mimeType),"POST"===i&&s.fields){const t=new FormData;for(const[e,i]of Object.entries(s.fields))t.append(e,i);t.append("file",e),o=t,delete n["Content-Type"],delete n["content-type"]}else o=e;const r=await fetch(s.url,{method:i,headers:n,body:o});if(!r.ok)throw Error(`[PresignedAssetProvider] Upload failed: ${r.status} ${r.statusText}`);return{id:s.id,kind:t.kind??"file",mimeType:t.mimeType,size:e.size,createdAt:Date.now(),width:t.width,height:t.height,durationMs:t.durationMs,originalFilename:t.originalFilename}}async resolve(e){return this._options.getDownloadUrl(e)}async fetch(e){const t=await this._options.getDownloadUrl(e),s=await fetch(t);if(!s.ok)throw Error(`[PresignedAssetProvider] Failed to fetch asset ${e}: ${s.status} ${s.statusText}`);return s.blob()}async delete(e){this._options.deleteAsset&&(await this._options.deleteAsset(e),this._options.quiet||console.info("PresignedAssetProvider: deleted asset "+e))}}export{F as BroadcastSyncProvider,R as HocuspocusSyncProvider,B as HttpAssetProvider,O as InMemorySyncProvider,$ as IndexedDBSyncProvider,L as PresignedAssetProvider,H as WebSocketSyncProvider}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{K as o,d as s}from"./p-
|
|
1
|
+
import{K as o,d as s}from"./p-J9_SwObO.js";const p=o,r=s;export{p as KritzelControls,r as defineCustomElement}
|