kritzel-stencil 0.1.50 → 0.1.52
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/kritzel-active-users_38.cjs.entry.js +35 -24
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +34 -23
- package/dist/collection/constants/version.js +1 -1
- package/dist/components/index.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/{p-CUg65XbS.js → p--X34FIIn.js} +2 -2
- package/dist/components/{p-B-eU-Csy.js → p-DfcTNrtM.js} +1 -1
- package/dist/esm/kritzel-active-users_38.entry.js +35 -24
- package/dist/stencil/{p-e3420273.entry.js → p-88324745.entry.js} +1 -1
- package/dist/stencil/stencil.esm.js +1 -1
- package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +1 -0
- package/dist/types/constants/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -24715,6 +24715,9 @@ const KritzelEngine = class {
|
|
|
24715
24715
|
/** Configuration for real-time synchronization providers (e.g., IndexedDB, WebSocket). */
|
|
24716
24716
|
syncConfig;
|
|
24717
24717
|
async onSyncConfigChange(newValue) {
|
|
24718
|
+
this._syncConfigRevision++;
|
|
24719
|
+
// Keep core config in sync immediately so late prop updates are not lost.
|
|
24720
|
+
this.core.setSyncConfig(newValue);
|
|
24718
24721
|
// If syncConfig arrives after componentDidLoad, initialize Yjs now
|
|
24719
24722
|
if (newValue && !this._isYjsInitialized) {
|
|
24720
24723
|
await this.initializeSyncAndWorkspace();
|
|
@@ -24939,10 +24942,7 @@ const KritzelEngine = class {
|
|
|
24939
24942
|
const isInsideDialog = path.some((el) => {
|
|
24940
24943
|
if (!(el instanceof HTMLElement))
|
|
24941
24944
|
return false;
|
|
24942
|
-
return
|
|
24943
|
-
el.tagName === 'KRITZEL-DIALOG' ||
|
|
24944
|
-
el.getAttribute?.('role') === 'dialog' ||
|
|
24945
|
-
el.getAttribute?.('role') === 'alertdialog');
|
|
24945
|
+
return el.tagName === 'DIALOG' || el.tagName === 'KRITZEL-DIALOG' || el.getAttribute?.('role') === 'dialog' || el.getAttribute?.('role') === 'alertdialog';
|
|
24946
24946
|
});
|
|
24947
24947
|
if (isInsideDialog) {
|
|
24948
24948
|
return false;
|
|
@@ -25775,6 +25775,7 @@ const KritzelEngine = class {
|
|
|
25775
25775
|
_workspaceInitializationPromise = null;
|
|
25776
25776
|
_workspaceInitializationTargetKey = null;
|
|
25777
25777
|
_syncInitPromise = null;
|
|
25778
|
+
_syncConfigRevision = 0;
|
|
25778
25779
|
get isSelecting() {
|
|
25779
25780
|
return this.core.store.state.activeTool instanceof alignment_enum.KritzelSelectionTool && this.core.store.state.isSelecting;
|
|
25780
25781
|
}
|
|
@@ -25821,21 +25822,23 @@ const KritzelEngine = class {
|
|
|
25821
25822
|
this.core.store.state.viewportBoundaryBottom = this.viewportBoundaryBottom;
|
|
25822
25823
|
}
|
|
25823
25824
|
async componentDidLoad() {
|
|
25824
|
-
|
|
25825
|
-
|
|
25826
|
-
|
|
25827
|
-
|
|
25828
|
-
|
|
25829
|
-
|
|
25830
|
-
|
|
25831
|
-
|
|
25832
|
-
|
|
25833
|
-
|
|
25834
|
-
|
|
25835
|
-
|
|
25836
|
-
this.core.store.state.isReady
|
|
25837
|
-
|
|
25838
|
-
|
|
25825
|
+
setTimeout(async () => {
|
|
25826
|
+
this.contextMenuHandler = new KritzelContextMenuHandler(this.core, this.globalContextMenuItems, this.objectContextMenuItems);
|
|
25827
|
+
this.keyHandler = new KritzelKeyHandler(this.core);
|
|
25828
|
+
this.viewport = new KritzelViewport(this.core, this.host);
|
|
25829
|
+
// Initialize cursor manager with target element and shadow root
|
|
25830
|
+
this.core.cursorManager.setTargetElement(this.cursorTarget || document.body);
|
|
25831
|
+
this.core.cursorManager.setShadowRoot(this.host.shadowRoot);
|
|
25832
|
+
// Initialize theme manager with kritzel-editor as target element
|
|
25833
|
+
const editorElement = this.host.closest('kritzel-editor');
|
|
25834
|
+
this.core.themeManager.setTargetElement(editorElement || this.host);
|
|
25835
|
+
// Initialize sync config and Yjs
|
|
25836
|
+
await this.initializeSyncAndWorkspace();
|
|
25837
|
+
if (this.core.store.state.isReady === false) {
|
|
25838
|
+
this.core.store.state.isReady = true;
|
|
25839
|
+
this.isEngineReady.emit(this.core.store.state);
|
|
25840
|
+
}
|
|
25841
|
+
}, 50);
|
|
25839
25842
|
}
|
|
25840
25843
|
async initializeSyncAndWorkspace() {
|
|
25841
25844
|
// Deduplicate concurrent calls (e.g. @Watch firing during componentWillLoad
|
|
@@ -25852,13 +25855,21 @@ const KritzelEngine = class {
|
|
|
25852
25855
|
}
|
|
25853
25856
|
}
|
|
25854
25857
|
async doInitializeSyncAndWorkspace() {
|
|
25855
|
-
//
|
|
25856
|
-
|
|
25857
|
-
|
|
25858
|
-
|
|
25858
|
+
// Capture sync config revision to detect prop updates that happen while
|
|
25859
|
+
// initialization is in-flight.
|
|
25860
|
+
const syncConfigRevisionAtStart = this._syncConfigRevision;
|
|
25861
|
+
// Always apply the latest sync config (including undefined).
|
|
25862
|
+
this.core.setSyncConfig(this.syncConfig);
|
|
25859
25863
|
// Initialize Yjs document and persistence layer (only once)
|
|
25860
25864
|
if (!this._isYjsInitialized) {
|
|
25861
25865
|
await this.core.initializeYjs();
|
|
25866
|
+
// If syncConfig changed while initializeYjs was running, replay Yjs
|
|
25867
|
+
// initialization once with the latest configuration.
|
|
25868
|
+
if (syncConfigRevisionAtStart !== this._syncConfigRevision) {
|
|
25869
|
+
this.core.appStateMap.destroy();
|
|
25870
|
+
this.core.setSyncConfig(this.syncConfig);
|
|
25871
|
+
await this.core.initializeYjs();
|
|
25872
|
+
}
|
|
25862
25873
|
this._isYjsInitialized = true;
|
|
25863
25874
|
}
|
|
25864
25875
|
if (this.activeWorkspaceId) {
|
|
@@ -27570,7 +27581,7 @@ const KritzelPortal = class {
|
|
|
27570
27581
|
* This file is auto-generated by the version bump scripts.
|
|
27571
27582
|
* Do not modify manually.
|
|
27572
27583
|
*/
|
|
27573
|
-
const KRITZEL_VERSION = '0.1.
|
|
27584
|
+
const KRITZEL_VERSION = '0.1.52';
|
|
27574
27585
|
|
|
27575
27586
|
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:600;color:var(--kritzel-settings-label-color, #333333);margin:0 0 4px 0}.settings-description{font-size:12px;color:var(--kritzel-settings-description-color, #888888);margin:0;line-height:1.4}.shortcuts-list{display:flex;flex-direction:column;gap:24px}.shortcuts-category{display:flex;flex-direction:column;gap:8px}.shortcuts-category-title{font-size:14px;font-weight:600;color:var(--kritzel-settings-label-color, #333333);margin:0 0 4px 0}.shortcuts-group{display:flex;flex-direction:column;gap:4px}.shortcut-item{display:flex;justify-content:space-between;align-items:center;padding:6px 8px;border-radius:4px;background:var(--kritzel-settings-shortcut-item-bg, rgba(0, 0, 0, 0.02))}.shortcut-label{font-size:14px;color:var(--kritzel-settings-content-text-color, #666666)}.shortcut-key{font-family:monospace;font-size:12px;padding:2px 8px;border-radius:4px;background:var(--kritzel-settings-shortcut-key-bg, #f0f0f0);color:var(--kritzel-settings-shortcut-key-color, #333333);border:1px solid var(--kritzel-settings-shortcut-key-border, #ddd)}`;
|
|
27576
27587
|
|
|
@@ -52,6 +52,9 @@ export class KritzelEngine {
|
|
|
52
52
|
/** Configuration for real-time synchronization providers (e.g., IndexedDB, WebSocket). */
|
|
53
53
|
syncConfig;
|
|
54
54
|
async onSyncConfigChange(newValue) {
|
|
55
|
+
this._syncConfigRevision++;
|
|
56
|
+
// Keep core config in sync immediately so late prop updates are not lost.
|
|
57
|
+
this.core.setSyncConfig(newValue);
|
|
55
58
|
// If syncConfig arrives after componentDidLoad, initialize Yjs now
|
|
56
59
|
if (newValue && !this._isYjsInitialized) {
|
|
57
60
|
await this.initializeSyncAndWorkspace();
|
|
@@ -276,10 +279,7 @@ export class KritzelEngine {
|
|
|
276
279
|
const isInsideDialog = path.some((el) => {
|
|
277
280
|
if (!(el instanceof HTMLElement))
|
|
278
281
|
return false;
|
|
279
|
-
return
|
|
280
|
-
el.tagName === 'KRITZEL-DIALOG' ||
|
|
281
|
-
el.getAttribute?.('role') === 'dialog' ||
|
|
282
|
-
el.getAttribute?.('role') === 'alertdialog');
|
|
282
|
+
return el.tagName === 'DIALOG' || el.tagName === 'KRITZEL-DIALOG' || el.getAttribute?.('role') === 'dialog' || el.getAttribute?.('role') === 'alertdialog';
|
|
283
283
|
});
|
|
284
284
|
if (isInsideDialog) {
|
|
285
285
|
return false;
|
|
@@ -1112,6 +1112,7 @@ export class KritzelEngine {
|
|
|
1112
1112
|
_workspaceInitializationPromise = null;
|
|
1113
1113
|
_workspaceInitializationTargetKey = null;
|
|
1114
1114
|
_syncInitPromise = null;
|
|
1115
|
+
_syncConfigRevision = 0;
|
|
1115
1116
|
get isSelecting() {
|
|
1116
1117
|
return this.core.store.state.activeTool instanceof KritzelSelectionTool && this.core.store.state.isSelecting;
|
|
1117
1118
|
}
|
|
@@ -1144,21 +1145,23 @@ export class KritzelEngine {
|
|
|
1144
1145
|
this.core.store.state.viewportBoundaryBottom = this.viewportBoundaryBottom;
|
|
1145
1146
|
}
|
|
1146
1147
|
async componentDidLoad() {
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
this.core.store.state.isReady
|
|
1160
|
-
|
|
1161
|
-
|
|
1148
|
+
setTimeout(async () => {
|
|
1149
|
+
this.contextMenuHandler = new KritzelContextMenuHandler(this.core, this.globalContextMenuItems, this.objectContextMenuItems);
|
|
1150
|
+
this.keyHandler = new KritzelKeyHandler(this.core);
|
|
1151
|
+
this.viewport = new KritzelViewport(this.core, this.host);
|
|
1152
|
+
// Initialize cursor manager with target element and shadow root
|
|
1153
|
+
this.core.cursorManager.setTargetElement(this.cursorTarget || document.body);
|
|
1154
|
+
this.core.cursorManager.setShadowRoot(this.host.shadowRoot);
|
|
1155
|
+
// Initialize theme manager with kritzel-editor as target element
|
|
1156
|
+
const editorElement = this.host.closest('kritzel-editor');
|
|
1157
|
+
this.core.themeManager.setTargetElement(editorElement || this.host);
|
|
1158
|
+
// Initialize sync config and Yjs
|
|
1159
|
+
await this.initializeSyncAndWorkspace();
|
|
1160
|
+
if (this.core.store.state.isReady === false) {
|
|
1161
|
+
this.core.store.state.isReady = true;
|
|
1162
|
+
this.isEngineReady.emit(this.core.store.state);
|
|
1163
|
+
}
|
|
1164
|
+
}, 50);
|
|
1162
1165
|
}
|
|
1163
1166
|
async initializeSyncAndWorkspace() {
|
|
1164
1167
|
// Deduplicate concurrent calls (e.g. @Watch firing during componentWillLoad
|
|
@@ -1175,13 +1178,21 @@ export class KritzelEngine {
|
|
|
1175
1178
|
}
|
|
1176
1179
|
}
|
|
1177
1180
|
async doInitializeSyncAndWorkspace() {
|
|
1178
|
-
//
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1181
|
+
// Capture sync config revision to detect prop updates that happen while
|
|
1182
|
+
// initialization is in-flight.
|
|
1183
|
+
const syncConfigRevisionAtStart = this._syncConfigRevision;
|
|
1184
|
+
// Always apply the latest sync config (including undefined).
|
|
1185
|
+
this.core.setSyncConfig(this.syncConfig);
|
|
1182
1186
|
// Initialize Yjs document and persistence layer (only once)
|
|
1183
1187
|
if (!this._isYjsInitialized) {
|
|
1184
1188
|
await this.core.initializeYjs();
|
|
1189
|
+
// If syncConfig changed while initializeYjs was running, replay Yjs
|
|
1190
|
+
// initialization once with the latest configuration.
|
|
1191
|
+
if (syncConfigRevisionAtStart !== this._syncConfigRevision) {
|
|
1192
|
+
this.core.appStateMap.destroy();
|
|
1193
|
+
this.core.setSyncConfig(this.syncConfig);
|
|
1194
|
+
await this.core.initializeYjs();
|
|
1195
|
+
}
|
|
1185
1196
|
this._isYjsInitialized = true;
|
|
1186
1197
|
}
|
|
1187
1198
|
if (this.activeWorkspaceId) {
|
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-pebXO4LU.js";export{f as KritzelBrushTool,d as KritzelGroup,b as KritzelImage,c as KritzelLine,g as KritzelLineTool,a as KritzelPath,j as KritzelSelectionTool,e as KritzelShape,i as KritzelShapeTool,K as KritzelText,h as KritzelTextTool,S as ShapeType}from"./p-CQiJ2YUG.js";export{I as IndexedDBSyncProvider,d as KritzelAlignment,c as KritzelAnchorManager,b as KritzelCursorHelper,K as KritzelEraserTool,a as KritzelImageTool}from"./p-CUg65XbS.js";import*as t from"yjs";import{WebsocketProvider as n}from"y-websocket";export{K as KritzelWorkspace,W as WORKSPACE_EXPORT_VERSION}from"./p-AcQNA3C8.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-bWUahQFj.js";export{KritzelActiveUsers,defineCustomElement as defineCustomElementKritzelActiveUsers}from"./kritzel-active-users.js";export{KritzelAvatar,defineCustomElement as defineCustomElementKritzelAvatar}from"./kritzel-avatar.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{KritzelCurrentUser,defineCustomElement as defineCustomElementKritzelCurrentUser}from"./kritzel-current-user.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{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 o=Math.floor,u=127,m=Number.MAX_SAFE_INTEGER;let p=class{constructor(){this.cpos=0,this.cbuf=new Uint8Array(100),this.bufs=[]}};const y=()=>new p,w=t=>{const e=new Uint8Array((t=>{let e=t.cpos;for(let s=0;s<t.bufs.length;s++)e+=t.bufs[s].length;return e})(t));let s=0;for(let i=0;i<t.bufs.length;i++){const n=t.bufs[i];e.set(n,s),s+=n.length}return e.set(new Uint8Array(t.cbuf.buffer,0,t.cpos),s),e},C=(t,e)=>{const s=t.cbuf.length;t.cpos===s&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(2*s),t.cpos=0),t.cbuf[t.cpos++]=e},z=(t,e)=>{for(;e>u;)C(t,128|u&e),e=o(e/128);C(t,u&e)},E=(t,e)=>{z(t,e.byteLength),((t,e)=>{const s=t.cbuf.length,i=t.cpos,n=((t,e)=>t<e?t:e)(s-i,e.length),r=e.length-n;t.cbuf.set(e.subarray(0,n),i),t.cpos+=n,r>0&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(((t,e)=>t>e?t:e)(2*s,r)),t.cbuf.set(e.subarray(n)),t.cpos=r)})(t,e)},v=t=>Error(t),k=v("Unexpected end of array"),x=v("Integer out of Range");let A=class{constructor(t){this.arr=t,this.pos=0}};const T=t=>((t,e)=>{const s=new Uint8Array(t.arr.buffer,t.pos+t.arr.byteOffset,e);return t.pos+=e,s})(t,U(t)),U=t=>{let e=0,s=1;const i=t.arr.length;for(;t.pos<i;){const i=t.arr[t.pos++];if(e+=(i&u)*s,s*=128,i<128)return e;if(e>m)throw x}throw k};class M{doc;channel;_synced=!1;constructor(t,e,s){this.doc=e,this.channel=new BroadcastChannel(t),this.channel.onmessage=t=>{this.handleMessage(t.data)},this.doc.on("update",this.handleDocUpdate),this.broadcastSync(),setTimeout((()=>{this._synced=!0}),100),s?.quiet||console.info("BroadcastChannel Provider initialized: "+t)}handleDocUpdate=(t,e)=>{if(e!==this){const e=y();z(e,0),E(e,t),this.channel.postMessage(w(e))}};handleMessage(e){const s=(t=>new A(t))(new Uint8Array(e));switch(U(s)){case 0:const e=T(s);t.applyUpdate(this.doc,e,this);break;case 1:this.broadcastSync();break;case 2:const i=T(s),n=t.encodeStateAsUpdate(this.doc,i);if(n.length>0){const t=y();z(t,0),E(t,n),this.channel.postMessage(w(t))}}}broadcastSync(){const e=y();z(e,2),E(e,t.encodeStateVector(this.doc)),this.channel.postMessage(w(e))}async connect(){if(!this._synced)return new Promise((t=>{const e=()=>{this._synced?t():setTimeout(e,50)};e()}))}disconnect(){}destroy(){this.doc.off("update",this.handleDocUpdate),this.channel.close()}}class P{provider;isConnected=!1;_quiet=!1;constructor(t,e,s){const i=s?.url||"ws://localhost:1234",r=s?.roomName||t;this.provider=new n(i,r,e,{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}/${r}`)}static with(t){return{create:(e,s,i)=>{const n=i?{...t,...i}:t;return new P(e,s,n)}}}setupEventListeners(){this.provider.on("status",(({status:t})=>{"connected"===t?(this.isConnected=!0,this._quiet||console.info("WebSocket connected")):"disconnected"===t&&(this.isConnected=!1,this._quiet||console.info("WebSocket disconnected"))})),this.provider.on("sync",(t=>{t&&!this._quiet&&console.info("WebSocket synced")}))}async connect(){if(!this.isConnected)return new Promise(((t,e)=>{const s=setTimeout((()=>{e(Error("WebSocket connection timeout"))}),1e4),i=({status:e})=>{"connected"===e&&(clearTimeout(s),this.provider.off("status",i),this.isConnected=!0,t())};this.provider.on("status",i),this.provider.wsconnected&&(clearTimeout(s),this.provider.off("status",i),this.isConnected=!0,t())}))}disconnect(){this.provider&&this.provider.disconnect(),this.isConnected=!1}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1}}const O=Math.floor,N=127,F=Number.MAX_SAFE_INTEGER,H="undefined"!=typeof TextEncoder?new TextEncoder:null,L=H?t=>H.encode(t):t=>{const e=unescape(encodeURIComponent(t)),s=e.length,i=new Uint8Array(s);for(let t=0;t<s;t++)i[t]=e.codePointAt(t);return i};let R="undefined"==typeof TextDecoder?null:new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});R&&1===R.decode(new Uint8Array).length&&(R=null);const B=(t,e)=>{const s=t.cbuf.length;t.cpos===s&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(2*s),t.cpos=0),t.cbuf[t.cpos++]=e},_=(t,e)=>{for(;e>N;)B(t,128|N&e),e=O(e/128);B(t,N&e)},$=new Uint8Array(3e4),V=$.length/3,q=H&&H.encodeInto?(t,e)=>{if(e.length<V){const s=H.encodeInto(e,$).written||0;_(t,s);for(let e=0;e<s;e++)B(t,$[e])}else G(t,L(e))}:(t,e)=>{const s=unescape(encodeURIComponent(e)),i=s.length;_(t,i);for(let e=0;e<i;e++)B(t,s.codePointAt(e))},G=(t,e)=>{_(t,e.byteLength),((t,e)=>{const s=t.cbuf.length,i=t.cpos,n=((t,e)=>t<e?t:e)(s-i,e.length),r=e.length-n;t.cbuf.set(e.subarray(0,n),i),t.cpos+=n,r>0&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(((t,e)=>t>e?t:e)(2*s,r)),t.cbuf.set(e.subarray(n)),t.cpos=r)})(t,e)},J=t=>Error(t),Q=J("Unexpected end of array"),X=J("Integer out of Range"),Y=t=>t.arr[t.pos++],Z=t=>{let e=0,s=1;const i=t.arr.length;for(;t.pos<i;){const i=t.arr[t.pos++];if(e+=(i&N)*s,s*=128,i<128)return e;if(e>F)throw X}throw Q},tt=R?t=>R.decode((t=>((t,e)=>{const s=new Uint8Array(t.arr.buffer,t.pos+t.arr.byteOffset,e);return t.pos+=e,s})(t,Z(t)))(t)):t=>{let e=Z(t);if(0===e)return"";{let s=String.fromCodePoint(Y(t));if(--e<100)for(;e--;)s+=String.fromCodePoint(Y(t));else for(;e>0;){const i=e<1e4?e:1e4,n=t.arr.subarray(t.pos,t.pos+i);t.pos+=i,s+=String.fromCodePoint.apply(null,n),e-=i}return decodeURIComponent(escape(s))}};var et;!function(t){t[t.Token=0]="Token",t[t.PermissionDenied=1]="PermissionDenied",t[t.Authenticated=2]="Authenticated"}(et||(et={}));const st=t=>Array.from(t.entries()).map((([t,e])=>({clientId:t,...e})));var it;async function nt(t){return new Promise((e=>setTimeout(e,t)))}function rt(t,e){let s=e.delay;if(0===s)return 0;if(e.factor&&(s*=Math.pow(e.factor,t.attemptNum-1),0!==e.maxDelay&&(s=Math.min(s,e.maxDelay))),e.jitter){const t=Math.ceil(e.minDelay),i=Math.floor(s);s=Math.floor(Math.random()*(i-t+1))+t}return Math.round(s)}!function(t){t[t.Connecting=0]="Connecting",t[t.Open=1]="Open",t[t.Closing=2]="Closing",t[t.Closed=3]="Closed"}(it||(it={}));const ot=Math.floor,ht=128,at=127,lt=Number.MAX_SAFE_INTEGER,ct=()=>new Set,ut=Array.from,dt="undefined"!=typeof TextEncoder?new TextEncoder:null,mt=dt?t=>dt.encode(t):t=>{const e=unescape(encodeURIComponent(t)),s=e.length,i=new Uint8Array(s);for(let t=0;t<s;t++)i[t]=e.codePointAt(t);return i};let ft="undefined"==typeof TextDecoder?null:new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});ft&&1===ft.decode(new Uint8Array).length&&(ft=null);class pt{constructor(){this.cpos=0,this.cbuf=new Uint8Array(100),this.bufs=[]}}const yt=()=>new pt,gt=t=>{let e=t.cpos;for(let s=0;s<t.bufs.length;s++)e+=t.bufs[s].length;return e},wt=t=>{const e=new Uint8Array(gt(t));let s=0;for(let i=0;i<t.bufs.length;i++){const n=t.bufs[i];e.set(n,s),s+=n.length}return e.set(new Uint8Array(t.cbuf.buffer,0,t.cpos),s),e},Ct=(t,e)=>{const s=t.cbuf.length;t.cpos===s&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(2*s),t.cpos=0),t.cbuf[t.cpos++]=e},zt=(t,e)=>{for(;e>at;)Ct(t,ht|at&e),e=ot(e/128);Ct(t,at&e)},Et=new Uint8Array(3e4),vt=Et.length/3,kt=dt&&dt.encodeInto?(t,e)=>{if(e.length<vt){const s=dt.encodeInto(e,Et).written||0;zt(t,s);for(let e=0;e<s;e++)Ct(t,Et[e])}else Kt(t,mt(e))}:(t,e)=>{const s=unescape(encodeURIComponent(e)),i=s.length;zt(t,i);for(let e=0;e<i;e++)Ct(t,s.codePointAt(e))},Kt=(t,e)=>{zt(t,e.byteLength),((t,e)=>{const s=t.cbuf.length,i=t.cpos,n=((t,e)=>t<e?t:e)(s-i,e.length),r=e.length-n;t.cbuf.set(e.subarray(0,n),i),t.cpos+=n,r>0&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(((t,e)=>t>e?t:e)(2*s,r)),t.cbuf.set(e.subarray(n)),t.cpos=r)})(t,e)},St=t=>Error(t),xt=St("Unexpected end of array"),At=St("Integer out of Range");class bt{constructor(t){this.arr=t,this.pos=0}}const Tt=t=>new bt(t),Ut=t=>((t,e)=>{const s=new Uint8Array(t.arr.buffer,t.pos+t.arr.byteOffset,e);return t.pos+=e,s})(t,Mt(t)),jt=t=>t.arr[t.pos++],Mt=t=>{let e=0,s=1;const i=t.arr.length;for(;t.pos<i;){const i=t.arr[t.pos++];if(e+=(i&at)*s,s*=128,i<ht)return e;if(e>lt)throw At}throw xt},Dt=ft?t=>ft.decode(Ut(t)):t=>{let e=Mt(t);if(0===e)return"";{let s=String.fromCodePoint(jt(t));if(--e<100)for(;e--;)s+=String.fromCodePoint(jt(t));else for(;e>0;){const i=e<1e4?e:1e4,n=t.arr.subarray(t.pos,t.pos+i);t.pos+=i,s+=String.fromCodePoint.apply(null,n),e-=i}return decodeURIComponent(escape(s))}},Pt=Date.now,It=()=>new Map;class Ot{constructor(){this._observers=It()}on(t,e){((t,e,s)=>{let i=t.get(e);return void 0===i&&t.set(e,i=s()),i})(this._observers,t,ct).add(e)}once(t,e){const s=(...i)=>{this.off(t,s),e(...i)};this.on(t,s)}off(t,e){const s=this._observers.get(t);void 0!==s&&(s.delete(e),0===s.size&&this._observers.delete(t))}emit(t,e){return ut((this._observers.get(t)||It()).values()).forEach((t=>t(...e)))}destroy(){this._observers=It()}}const Nt=Object.keys,Ft=t=>Nt(t).length,Wt=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Ht=(t,e)=>{if(null==t||null==e)return((t,e)=>t===e)(t,e);if(t.constructor!==e.constructor)return!1;if(t===e)return!0;switch(t.constructor){case ArrayBuffer:t=new Uint8Array(t),e=new Uint8Array(e);case Uint8Array:if(t.byteLength!==e.byteLength)return!1;for(let s=0;s<t.length;s++)if(t[s]!==e[s])return!1;break;case Set:if(t.size!==e.size)return!1;for(const s of t)if(!e.has(s))return!1;break;case Map:if(t.size!==e.size)return!1;for(const s of t.keys())if(!e.has(s)||!Ht(t.get(s),e.get(s)))return!1;break;case Object:if(Ft(t)!==Ft(e))return!1;for(const s in t)if(!Wt(t,s)||!Ht(t[s],e[s]))return!1;break;case Array:if(t.length!==e.length)return!1;for(let s=0;s<t.length;s++)if(!Ht(t[s],e[s]))return!1;break;default:return!1}return!0};class Lt extends Ot{constructor(t){super(),this.doc=t,this.clientID=t.clientID,this.states=new Map,this.meta=new Map,this._checkInterval=setInterval((()=>{const t=Pt();null!==this.getLocalState()&&15e3<=t-this.meta.get(this.clientID).lastUpdated&&this.setLocalState(this.getLocalState());const e=[];this.meta.forEach(((s,i)=>{i!==this.clientID&&3e4<=t-s.lastUpdated&&this.states.has(i)&&e.push(i)})),e.length>0&&Rt(this,e,"timeout")}),ot(3e3)),t.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(t){const e=this.clientID,s=this.meta.get(e),i=void 0===s?0:s.clock+1,n=this.states.get(e);null===t?this.states.delete(e):this.states.set(e,t),this.meta.set(e,{clock:i,lastUpdated:Pt()});const r=[],o=[],h=[],a=[];null===t?a.push(e):null==n?null!=t&&r.push(e):(o.push(e),Ht(n,t)||h.push(e)),(r.length>0||h.length>0||a.length>0)&&this.emit("change",[{added:r,updated:h,removed:a},"local"]),this.emit("update",[{added:r,updated:o,removed:a},"local"])}setLocalStateField(t,e){const s=this.getLocalState();null!==s&&this.setLocalState({...s,[t]:e})}getStates(){return this.states}}const Rt=(t,e,s)=>{const i=[];for(let s=0;s<e.length;s++){const n=e[s];if(t.states.has(n)){if(t.states.delete(n),n===t.clientID){const e=t.meta.get(n);t.meta.set(n,{clock:e.clock+1,lastUpdated:Pt()})}i.push(n)}}i.length>0&&(t.emit("change",[{added:[],updated:[],removed:i},s]),t.emit("update",[{added:[],updated:[],removed:i},s]))},Bt=(t,e,s=t.states)=>{const i=e.length,n=yt();zt(n,i);for(let r=0;r<i;r++){const i=e[r],o=s.get(i)||null,h=t.meta.get(i).clock;zt(n,i),zt(n,h),kt(n,JSON.stringify(o))}return wt(n)};class _t{constructor(){this.callbacks={}}on(t,e){return this.callbacks[t]||(this.callbacks[t]=[]),this.callbacks[t].push(e),this}emit(t,...e){const s=this.callbacks[t];return s&&s.forEach((t=>t.apply(this,e))),this}off(t,e){const s=this.callbacks[t];return s&&(e?this.callbacks[t]=s.filter((t=>t!==e)):delete this.callbacks[t]),this}removeAllListeners(){this.callbacks={}}}class $t{constructor(t){this.data=t,this.encoder=yt(),this.decoder=Tt(new Uint8Array(this.data))}peekVarString(){return(t=>{const e=t.pos,s=Dt(t);return t.pos=e,s})(this.decoder)}readVarUint(){return Mt(this.decoder)}readVarString(){return Dt(this.decoder)}readVarUint8Array(){return Ut(this.decoder)}writeVarUint(t){return zt(this.encoder,t)}writeVarString(t){return kt(this.encoder,t)}writeVarUint8Array(t){return Kt(this.encoder,t)}length(){return gt(this.encoder)}}var Vt,qt;!function(t){t[t.Sync=0]="Sync",t[t.Awareness=1]="Awareness",t[t.Auth=2]="Auth",t[t.QueryAwareness=3]="QueryAwareness",t[t.Stateless=5]="Stateless",t[t.CLOSE=7]="CLOSE",t[t.SyncStatus=8]="SyncStatus"}(Vt||(Vt={})),function(t){t.Connecting="connecting",t.Connected="connected",t.Disconnected="disconnected"}(qt||(qt={}));class Gt{constructor(){this.encoder=yt()}get(t){return t.encoder}toUint8Array(){return wt(this.encoder)}}class Jt extends Gt{constructor(){super(...arguments),this.type=Vt.CLOSE,this.description="Ask the server to close the connection"}get(t){return kt(this.encoder,t.documentName),zt(this.encoder,this.type),this.encoder}}class Qt extends _t{constructor(t){super(),this.messageQueue=[],this.configuration={url:"",autoConnect:!0,preserveTrailingSlash:!1,document:void 0,WebSocketPolyfill:void 0,messageReconnectTimeout:3e4,delay:1e3,initialDelay:0,factor:2,maxAttempts:0,minDelay:1e3,maxDelay:3e4,jitter:!0,timeout:0,onOpen:()=>null,onConnect:()=>null,onMessage:()=>null,onOutgoingMessage:()=>null,onStatus:()=>null,onDisconnect:()=>null,onClose:()=>null,onDestroy:()=>null,onAwarenessUpdate:()=>null,onAwarenessChange:()=>null,handleTimeout:null,providerMap:new Map},this.webSocket=null,this.webSocketHandlers={},this.shouldConnect=!0,this.status=qt.Disconnected,this.lastMessageReceived=0,this.identifier=0,this.intervals={connectionChecker:null},this.connectionAttempt=null,this.receivedOnOpenPayload=void 0,this.closeTries=0,this.setConfiguration(t),this.configuration.WebSocketPolyfill=t.WebSocketPolyfill?t.WebSocketPolyfill:WebSocket,this.on("open",this.configuration.onOpen),this.on("open",this.onOpen.bind(this)),this.on("connect",this.configuration.onConnect),this.on("message",this.configuration.onMessage),this.on("outgoingMessage",this.configuration.onOutgoingMessage),this.on("status",this.configuration.onStatus),this.on("disconnect",this.configuration.onDisconnect),this.on("close",this.configuration.onClose),this.on("destroy",this.configuration.onDestroy),this.on("awarenessUpdate",this.configuration.onAwarenessUpdate),this.on("awarenessChange",this.configuration.onAwarenessChange),this.on("close",this.onClose.bind(this)),this.on("message",this.onMessage.bind(this)),this.intervals.connectionChecker=setInterval(this.checkConnection.bind(this),this.configuration.messageReconnectTimeout/10),this.shouldConnect&&this.connect()}async onOpen(t){this.status=qt.Connected,this.emit("status",{status:qt.Connected}),this.cancelWebsocketRetry=void 0,this.receivedOnOpenPayload=t}attach(t){this.configuration.providerMap.set(t.configuration.name,t),this.status===qt.Disconnected&&this.shouldConnect&&this.connect(),this.receivedOnOpenPayload&&this.status===qt.Connected&&t.onOpen(this.receivedOnOpenPayload)}detach(t){this.configuration.providerMap.has(t.configuration.name)&&(t.send(Jt,{documentName:t.configuration.name}),this.configuration.providerMap.delete(t.configuration.name))}setConfiguration(t={}){this.configuration={...this.configuration,...t},this.configuration.autoConnect||(this.shouldConnect=!1)}async connect(){if(this.status===qt.Connected)return;this.cancelWebsocketRetry&&(this.cancelWebsocketRetry(),this.cancelWebsocketRetry=void 0),this.receivedOnOpenPayload=void 0,this.shouldConnect=!0;const{retryPromise:t,cancelFunc:e}=(()=>{let t=!1;return{retryPromise:async function(t,e){const s=function(t){return t||(t={}),{delay:void 0===t.delay?200:t.delay,initialDelay:void 0===t.initialDelay?0:t.initialDelay,minDelay:void 0===t.minDelay?0:t.minDelay,maxDelay:void 0===t.maxDelay?0:t.maxDelay,factor:void 0===t.factor?0:t.factor,maxAttempts:void 0===t.maxAttempts?3:t.maxAttempts,timeout:void 0===t.timeout?0:t.timeout,jitter:!0===t.jitter,initialJitter:!0===t.initialJitter,handleError:void 0===t.handleError?null:t.handleError,handleTimeout:void 0===t.handleTimeout?null:t.handleTimeout,beforeAttempt:void 0===t.beforeAttempt?null:t.beforeAttempt,calculateDelay:void 0===t.calculateDelay?null:t.calculateDelay}}(e);for(const t of["delay","initialDelay","minDelay","maxDelay","maxAttempts","timeout"]){const e=s[t];if(!Number.isInteger(e)||e<0)throw Error(`Value for ${t} must be an integer greater than or equal to 0`)}if(s.factor.constructor!==Number||s.factor<0)throw Error("Value for factor must be a number greater than or equal to 0");if(s.delay<s.minDelay)throw Error(`delay cannot be less than minDelay (delay: ${s.delay}, minDelay: ${s.minDelay}`);const i={attemptNum:0,attemptsRemaining:s.maxAttempts?s.maxAttempts:-1,aborted:!1,abort(){i.aborted=!0}},n=s.calculateDelay||rt,r=s.calculateDelay?s.calculateDelay(i,s):s.initialDelay;if(r&&await nt(r),i.attemptNum<1&&s.initialJitter){const t=n(i,s);t&&await nt(t)}return async function e(){if(s.beforeAttempt&&s.beforeAttempt(i,s),i.aborted){const t=Error("Attempt aborted");throw t.code="ATTEMPT_ABORTED",t}const r=async t=>{if(s.handleError&&await s.handleError(t,i,s),i.aborted||0===i.attemptsRemaining)throw t;i.attemptNum++;const r=n(i,s);return r&&await nt(r),e()};return i.attemptsRemaining>0&&i.attemptsRemaining--,s.timeout?new Promise(((e,n)=>{const o=setTimeout((()=>{if(s.handleTimeout)try{e(s.handleTimeout(i,s))}catch(t){n(t)}else{const t=Error(`Retry timeout (attemptNum: ${i.attemptNum}, timeout: ${s.timeout})`);t.code="ATTEMPT_TIMEOUT",n(t)}}),s.timeout);t(i,s).then((t=>{clearTimeout(o),e(t)})).catch((t=>{clearTimeout(o),r(t).then(e).catch(n)}))})):t(i,s).catch(r)}()}(this.createWebSocketConnection.bind(this),{delay:this.configuration.delay,initialDelay:this.configuration.initialDelay,factor:this.configuration.factor,maxAttempts:this.configuration.maxAttempts,minDelay:this.configuration.minDelay,maxDelay:this.configuration.maxDelay,jitter:this.configuration.jitter,timeout:this.configuration.timeout,handleTimeout:this.configuration.handleTimeout,beforeAttempt:e=>{this.shouldConnect&&!t||e.abort()}}).catch((t=>{if(t&&"ATTEMPT_ABORTED"!==t.code)throw t})),cancelFunc:()=>{t=!0}}})();return this.cancelWebsocketRetry=e,t}attachWebSocketListeners(t,e){const{identifier:s}=t;this.webSocketHandlers[s]={message:t=>this.emit("message",t),close:t=>this.emit("close",{event:t}),open:t=>this.emit("open",t),error:t=>{e(t)}};const i=this.webSocketHandlers[t.identifier];Object.keys(i).forEach((e=>{t.addEventListener(e,i[e])}))}cleanupWebSocket(){if(!this.webSocket)return;const{identifier:t}=this.webSocket,e=this.webSocketHandlers[t];Object.keys(e).forEach((s=>{var i;null===(i=this.webSocket)||void 0===i||i.removeEventListener(s,e[s]),delete this.webSocketHandlers[t]})),this.webSocket.close(),this.webSocket=null}createWebSocketConnection(){return new Promise(((t,e)=>{this.webSocket&&(this.messageQueue=[],this.cleanupWebSocket()),this.lastMessageReceived=0,this.identifier+=1;const s=new this.configuration.WebSocketPolyfill(this.url);s.binaryType="arraybuffer",s.identifier=this.identifier,this.attachWebSocketListeners(s,e),this.webSocket=s,this.status=qt.Connecting,this.emit("status",{status:qt.Connecting}),this.connectionAttempt={resolve:t,reject:e}}))}onMessage(t){var e;this.resolveConnectionAttempt(),this.lastMessageReceived=Pt();const s=new $t(t.data).peekVarString();null===(e=this.configuration.providerMap.get(s))||void 0===e||e.onMessage(t)}resolveConnectionAttempt(){this.connectionAttempt&&(this.connectionAttempt.resolve(),this.connectionAttempt=null,this.status=qt.Connected,this.emit("status",{status:qt.Connected}),this.emit("connect"),this.messageQueue.forEach((t=>this.send(t))),this.messageQueue=[])}stopConnectionAttempt(){this.connectionAttempt=null}rejectConnectionAttempt(){var t;null===(t=this.connectionAttempt)||void 0===t||t.reject(),this.connectionAttempt=null}checkConnection(){var t;this.status===qt.Connected&&this.lastMessageReceived&&(this.configuration.messageReconnectTimeout>=Pt()-this.lastMessageReceived||(this.closeTries+=1,this.closeTries>2?(this.onClose({event:{code:4408,reason:"forced"}}),this.closeTries=0):(null===(t=this.webSocket)||void 0===t||t.close(),this.messageQueue=[])))}get serverUrl(){if(this.configuration.preserveTrailingSlash)return this.configuration.url;let t=this.configuration.url;for(;"/"===t[t.length-1];)t=t.slice(0,t.length-1);return t}get url(){return this.serverUrl}disconnect(){if(this.shouldConnect=!1,null!==this.webSocket)try{this.webSocket.close(),this.messageQueue=[]}catch(t){console.error(t)}}send(t){var e;(null===(e=this.webSocket)||void 0===e?void 0:e.readyState)===it.Open?this.webSocket.send(t):this.messageQueue.push(t)}onClose({event:t}){this.closeTries=0,this.cleanupWebSocket(),this.connectionAttempt&&this.rejectConnectionAttempt(),this.status=qt.Disconnected,this.emit("status",{status:qt.Disconnected}),this.emit("disconnect",{event:t}),!this.cancelWebsocketRetry&&this.shouldConnect&&setTimeout((()=>{this.connect()}),this.configuration.delay)}destroy(){this.emit("destroy"),clearInterval(this.intervals.connectionChecker),this.stopConnectionAttempt(),this.disconnect(),this.removeAllListeners(),this.cleanupWebSocket()}}const Xt=(e,s,i)=>{try{t.applyUpdate(s,Ut(e),i)}catch(t){console.error("Caught error while handling a Yjs update",t)}},Yt=Xt;class Zt{constructor(t){this.message=t}apply(t,e){const{message:s}=this,i=s.readVarUint(),n=s.length();switch(i){case Vt.Sync:this.applySyncMessage(t,e);break;case Vt.Awareness:this.applyAwarenessMessage(t);break;case Vt.Auth:this.applyAuthMessage(t);break;case Vt.QueryAwareness:this.applyQueryAwarenessMessage(t);break;case Vt.Stateless:t.receiveStateless(Dt(s.decoder));break;case Vt.SyncStatus:this.applySyncStatusMessage(t,1===(t=>{let e=t.arr[t.pos++],s=63&e,i=64;const n=(64&e)>0?-1:1;if(!(e&ht))return n*s;const r=t.arr.length;for(;t.pos<r;){if(e=t.arr[t.pos++],s+=(e&at)*i,i*=128,e<ht)return n*s;if(s>lt)throw At}throw xt})(s.decoder));break;case Vt.CLOSE:const n={code:1e3,reason:Dt(s.decoder),target:t.configuration.websocketProvider.webSocket,type:"close"};t.onClose(),t.configuration.onClose({event:n}),t.forwardClose({event:n});break;default:throw Error("Can’t apply message of unknown type: "+i)}s.length()>n+1&&t.send(Gt,{encoder:s.encoder})}applySyncMessage(e,s){const{message:i}=this;i.writeVarUint(Vt.Sync);const n=((e,s,i,n)=>{const r=Mt(e);switch(r){case 0:((e,s,i)=>{((e,s,i)=>{zt(e,1),Kt(e,t.encodeStateAsUpdate(s,i))})(s,i,Ut(e))})(e,s,i);break;case 1:Xt(e,i,n);break;case 2:Yt(e,i,n);break;default:throw Error("Unknown message type")}return r})(i.decoder,i.encoder,e.document,e);s&&1===n&&(e.synced=!0)}applySyncStatusMessage(t,e){e&&t.decrementUnsyncedChanges()}applyAwarenessMessage(t){if(!t.awareness)return;const{message:e}=this;((t,e,s)=>{const i=Tt(e),n=Pt(),r=[],o=[],h=[],a=[],l=Mt(i);for(let e=0;e<l;e++){const e=Mt(i);let s=Mt(i);const l=JSON.parse(Dt(i)),c=t.meta.get(e),u=t.states.get(e),d=void 0===c?0:c.clock;(d<s||d===s&&null===l&&t.states.has(e))&&(null===l?e===t.clientID&&null!=t.getLocalState()?s++:t.states.delete(e):t.states.set(e,l),t.meta.set(e,{clock:s,lastUpdated:n}),void 0===c&&null!==l?r.push(e):void 0!==c&&null===l?a.push(e):null!==l&&(Ht(l,u)||h.push(e),o.push(e)))}(r.length>0||h.length>0||a.length>0)&&t.emit("change",[{added:r,updated:h,removed:a},s]),(r.length>0||o.length>0||a.length>0)&&t.emit("update",[{added:r,updated:o,removed:a},s])})(t.awareness,e.readVarUint8Array(),t)}applyAuthMessage(t){const{message:e}=this;((t,e,s,i)=>{switch(Z(t)){case et.Token:e();break;case et.PermissionDenied:s(tt(t));break;case et.Authenticated:i(tt(t))}})(e.decoder,t.sendToken.bind(t),t.permissionDeniedHandler.bind(t),t.authenticatedHandler.bind(t))}applyQueryAwarenessMessage(t){if(!t.awareness)return;const{message:e}=this;e.writeVarUint(Vt.Awareness),e.writeVarUint8Array(Bt(t.awareness,Array.from(t.awareness.getStates().keys())))}}class te{constructor(t,e={}){this.message=new t,this.encoder=this.message.get(e)}create(){return wt(this.encoder)}send(t){null==t||t.send(this.create())}}class ee extends Gt{constructor(){super(...arguments),this.type=Vt.Auth,this.description="Authentication"}get(t){if(void 0===t.token)throw Error("The authentication message requires `token` as an argument.");return kt(this.encoder,t.documentName),zt(this.encoder,this.type),((t,e)=>{_(t,et.Token),q(t,e)})(this.encoder,t.token),this.encoder}}class se extends Gt{constructor(){super(...arguments),this.type=Vt.Awareness,this.description="Awareness states update"}get(t){if(void 0===t.awareness)throw Error("The awareness message requires awareness as an argument");if(void 0===t.clients)throw Error("The awareness message requires clients as an argument");let e;return kt(this.encoder,t.documentName),zt(this.encoder,this.type),e=void 0===t.states?Bt(t.awareness,t.clients):Bt(t.awareness,t.clients,t.states),Kt(this.encoder,e),this.encoder}}class ie extends Gt{constructor(){super(...arguments),this.type=Vt.Stateless,this.description="A stateless message"}get(t){var e;return kt(this.encoder,t.documentName),zt(this.encoder,this.type),kt(this.encoder,null!==(e=t.payload)&&void 0!==e?e:""),this.encoder}}class ne extends Gt{constructor(){super(...arguments),this.type=Vt.Sync,this.description="First sync step"}get(e){if(void 0===e.document)throw Error("The sync step one message requires document as an argument");return kt(this.encoder,e.documentName),zt(this.encoder,this.type),((e,s)=>{zt(e,0);const i=t.encodeStateVector(s);Kt(e,i)})(this.encoder,e.document),this.encoder}}class re extends Gt{constructor(){super(...arguments),this.type=Vt.Sync,this.description="A document update"}get(t){return kt(this.encoder,t.documentName),zt(this.encoder,this.type),((t,e)=>{zt(t,2),Kt(t,e)})(this.encoder,t.update),this.encoder}}class oe extends Error{constructor(){super(...arguments),this.code=1001}}class he extends _t{constructor(e){var s,i,n;super(),this.configuration={name:"",document:void 0,awareness:void 0,token:null,forceSyncInterval:!1,onAuthenticated:()=>null,onAuthenticationFailed:()=>null,onOpen:()=>null,onConnect:()=>null,onMessage:()=>null,onOutgoingMessage:()=>null,onSynced:()=>null,onStatus:()=>null,onDisconnect:()=>null,onClose:()=>null,onDestroy:()=>null,onAwarenessUpdate:()=>null,onAwarenessChange:()=>null,onStateless:()=>null,onUnsyncedChanges:()=>null},this.isSynced=!1,this.unsyncedChanges=0,this.isAuthenticated=!1,this.authorizedScope=void 0,this.manageSocket=!1,this._isAttached=!1,this.intervals={forceSync:null},this.boundDocumentUpdateHandler=this.documentUpdateHandler.bind(this),this.boundAwarenessUpdateHandler=this.awarenessUpdateHandler.bind(this),this.boundPageHide=this.pageHide.bind(this),this.boundOnOpen=this.onOpen.bind(this),this.boundOnClose=this.onClose.bind(this),this.forwardConnect=()=>this.emit("connect"),this.forwardStatus=t=>this.emit("status",t),this.forwardClose=t=>this.emit("close",t),this.forwardDisconnect=t=>this.emit("disconnect",t),this.forwardDestroy=()=>this.emit("destroy"),this.setConfiguration(e),this.configuration.document=e.document?e.document:new t.Doc,this.configuration.awareness=void 0!==e.awareness?e.awareness:new Lt(this.document),this.on("open",this.configuration.onOpen),this.on("message",this.configuration.onMessage),this.on("outgoingMessage",this.configuration.onOutgoingMessage),this.on("synced",this.configuration.onSynced),this.on("destroy",this.configuration.onDestroy),this.on("awarenessUpdate",this.configuration.onAwarenessUpdate),this.on("awarenessChange",this.configuration.onAwarenessChange),this.on("stateless",this.configuration.onStateless),this.on("unsyncedChanges",this.configuration.onUnsyncedChanges),this.on("authenticated",this.configuration.onAuthenticated),this.on("authenticationFailed",this.configuration.onAuthenticationFailed),null===(s=this.awareness)||void 0===s||s.on("update",(()=>{this.emit("awarenessUpdate",{states:st(this.awareness.getStates())})})),null===(i=this.awareness)||void 0===i||i.on("change",(()=>{this.emit("awarenessChange",{states:st(this.awareness.getStates())})})),this.document.on("update",this.boundDocumentUpdateHandler),null===(n=this.awareness)||void 0===n||n.on("update",this.boundAwarenessUpdateHandler),this.registerEventListeners(),this.configuration.forceSyncInterval&&"number"==typeof this.configuration.forceSyncInterval&&(this.intervals.forceSync=setInterval(this.forceSync.bind(this),this.configuration.forceSyncInterval)),this.manageSocket&&this.attach()}setConfiguration(t={}){t.websocketProvider||(this.manageSocket=!0,this.configuration.websocketProvider=new Qt(t)),this.configuration={...this.configuration,...t}}get document(){return this.configuration.document}get isAttached(){return this._isAttached}get awareness(){return this.configuration.awareness}get hasUnsyncedChanges(){return this.unsyncedChanges>0}resetUnsyncedChanges(){this.unsyncedChanges=1,this.emit("unsyncedChanges",{number:this.unsyncedChanges})}incrementUnsyncedChanges(){this.unsyncedChanges+=1,this.emit("unsyncedChanges",{number:this.unsyncedChanges})}decrementUnsyncedChanges(){this.unsyncedChanges>0&&(this.unsyncedChanges-=1),0===this.unsyncedChanges&&(this.synced=!0),this.emit("unsyncedChanges",{number:this.unsyncedChanges})}forceSync(){this.resetUnsyncedChanges(),this.send(ne,{document:this.document,documentName:this.configuration.name})}pageHide(){this.awareness&&Rt(this.awareness,[this.document.clientID],"page hide")}registerEventListeners(){"undefined"!=typeof window&&"addEventListener"in window&&window.addEventListener("pagehide",this.boundPageHide)}sendStateless(t){this.send(ie,{documentName:this.configuration.name,payload:t})}async sendToken(){let t;try{t=await this.getToken()}catch(t){return void this.permissionDeniedHandler("Failed to get token during sendToken(): "+t)}this.send(ee,{token:null!=t?t:"",documentName:this.configuration.name})}documentUpdateHandler(t,e){e!==this&&(this.incrementUnsyncedChanges(),this.send(re,{update:t,documentName:this.configuration.name}))}awarenessUpdateHandler({added:t,updated:e,removed:s},i){const n=t.concat(e).concat(s);this.send(se,{awareness:this.awareness,clients:n,documentName:this.configuration.name})}get synced(){return this.isSynced}set synced(t){this.isSynced!==t&&(this.isSynced=t,t&&this.emit("synced",{state:t}))}receiveStateless(t){this.emit("stateless",{payload:t})}async connect(){if(this.manageSocket)return this.configuration.websocketProvider.connect();console.warn("HocuspocusProvider::connect() is deprecated and does not do anything. Please connect/disconnect on the websocketProvider, or attach/deattach providers.")}disconnect(){if(this.manageSocket)return this.configuration.websocketProvider.disconnect();console.warn("HocuspocusProvider::disconnect() is deprecated and does not do anything. Please connect/disconnect on the websocketProvider, or attach/deattach providers.")}async onOpen(t){this.isAuthenticated=!1,this.emit("open",{event:t}),await this.sendToken(),this.startSync()}async getToken(){return"function"==typeof this.configuration.token?await this.configuration.token():this.configuration.token}startSync(){this.resetUnsyncedChanges(),this.send(ne,{document:this.document,documentName:this.configuration.name}),this.awareness&&null!==this.awareness.getLocalState()&&this.send(se,{awareness:this.awareness,clients:[this.document.clientID],documentName:this.configuration.name})}send(t,e){if(!this._isAttached)return;const s=new te(t,e);this.emit("outgoingMessage",{message:s.message}),s.send(this.configuration.websocketProvider)}onMessage(t){const e=new $t(t.data),s=e.readVarString();e.writeVarString(s),this.emit("message",{event:t,message:new $t(t.data)}),new Zt(e).apply(this,!0)}onClose(){this.isAuthenticated=!1,this.synced=!1,this.awareness&&Rt(this.awareness,Array.from(this.awareness.getStates().keys()).filter((t=>t!==this.document.clientID)),this)}destroy(){this.emit("destroy"),this.intervals.forceSync&&clearInterval(this.intervals.forceSync),this.awareness&&(Rt(this.awareness,[this.document.clientID],"provider destroy"),this.awareness.off("update",this.boundAwarenessUpdateHandler),this.awareness.destroy()),this.document.off("update",this.boundDocumentUpdateHandler),this.removeAllListeners(),this.detach(),this.manageSocket&&this.configuration.websocketProvider.destroy(),"undefined"!=typeof window&&"removeEventListener"in window&&window.removeEventListener("pagehide",this.boundPageHide)}detach(){this.configuration.websocketProvider.off("connect",this.configuration.onConnect),this.configuration.websocketProvider.off("connect",this.forwardConnect),this.configuration.websocketProvider.off("status",this.forwardStatus),this.configuration.websocketProvider.off("status",this.configuration.onStatus),this.configuration.websocketProvider.off("open",this.boundOnOpen),this.configuration.websocketProvider.off("close",this.boundOnClose),this.configuration.websocketProvider.off("close",this.configuration.onClose),this.configuration.websocketProvider.off("close",this.forwardClose),this.configuration.websocketProvider.off("disconnect",this.configuration.onDisconnect),this.configuration.websocketProvider.off("disconnect",this.forwardDisconnect),this.configuration.websocketProvider.off("destroy",this.configuration.onDestroy),this.configuration.websocketProvider.off("destroy",this.forwardDestroy),this.configuration.websocketProvider.detach(this),this._isAttached=!1}attach(){this._isAttached||(this.configuration.websocketProvider.on("connect",this.configuration.onConnect),this.configuration.websocketProvider.on("connect",this.forwardConnect),this.configuration.websocketProvider.on("status",this.configuration.onStatus),this.configuration.websocketProvider.on("status",this.forwardStatus),this.configuration.websocketProvider.on("open",this.boundOnOpen),this.configuration.websocketProvider.on("close",this.boundOnClose),this.configuration.websocketProvider.on("close",this.configuration.onClose),this.configuration.websocketProvider.on("close",this.forwardClose),this.configuration.websocketProvider.on("disconnect",this.configuration.onDisconnect),this.configuration.websocketProvider.on("disconnect",this.forwardDisconnect),this.configuration.websocketProvider.on("destroy",this.configuration.onDestroy),this.configuration.websocketProvider.on("destroy",this.forwardDestroy),this.configuration.websocketProvider.attach(this),this._isAttached=!0)}permissionDeniedHandler(t){this.emit("authenticationFailed",{reason:t}),this.isAuthenticated=!1}authenticatedHandler(t){this.isAuthenticated=!0,this.authorizedScope=t,this.emit("authenticated",{scope:t})}setAwarenessField(t,e){if(!this.awareness)throw new oe(`Cannot set awareness field "${t}" to ${JSON.stringify(e)}. You have disabled Awareness for this provider by explicitly passing awareness: null in the provider configuration.`);this.awareness.setLocalStateField(t,e)}}class ae{provider;isConnected=!1;isSynced=!1;usesSharedSocket=!1;static sharedWebSocketProvider=null;constructor(t,e,s){const i=s?.name||t,n=s?.url||"ws://localhost:1234",r=s?.websocketProvider||ae.sharedWebSocketProvider;if(r){this.usesSharedSocket=!0;const t={websocketProvider:r,name:i,document:e,token:s?.token||null,onConnect:()=>{this.isConnected||(this.isConnected=!0,s?.quiet||console.info("Hocuspocus connected: "+i),s?.onConnect&&s.onConnect())},onDisconnect:()=>{(this.isConnected||this.isSynced)&&(this.isConnected=!1,this.isSynced=!1,s?.quiet||console.info("Hocuspocus disconnected: "+i),s?.onDisconnect&&s.onDisconnect())},onSynced:()=>{this.isSynced||(this.isSynced=!0,s?.quiet||console.info("Hocuspocus synced: "+i),s?.onSynced&&s.onSynced())}};void 0!==s?.forceSyncInterval&&(t.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(t.onAuthenticationFailed=s.onAuthenticationFailed),s?.onStatus&&(t.onStatus=s.onStatus),this.provider=new he(t),this.provider.attach(),s?.quiet||console.info("Hocuspocus Provider initialized (multiplexed): "+i)}else{this.usesSharedSocket=!1;const t={url:n,name:i,document:e,token:s?.token||null,onConnect:()=>{this.isConnected||(this.isConnected=!0,s?.quiet||console.info("Hocuspocus connected: "+i),s?.onConnect&&s.onConnect())},onDisconnect:()=>{(this.isConnected||this.isSynced)&&(this.isConnected=!1,this.isSynced=!1,s?.quiet||console.info("Hocuspocus disconnected: "+i),s?.onDisconnect&&s.onDisconnect())},onSynced:()=>{this.isSynced||(this.isSynced=!0,s?.quiet||console.info("Hocuspocus synced: "+i),s?.onSynced&&s.onSynced())}};void 0!==s?.forceSyncInterval&&(t.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(t.onAuthenticationFailed=s.onAuthenticationFailed),s?.onStatus&&(t.onStatus=s.onStatus),s?.WebSocketPolyfill&&(t.WebSocketPolyfill=s.WebSocketPolyfill),this.provider=new he(t),s?.quiet||console.info(`Hocuspocus Provider initialized: ${n}/${i}`)}}static createSharedWebSocket(t){if(ae.sharedWebSocketProvider)return console.warn("Shared WebSocket already exists. Returning existing instance."),ae.sharedWebSocketProvider;const e={url:t.url};return t.WebSocketPolyfill&&(e.WebSocketPolyfill=t.WebSocketPolyfill),t.onConnect&&(e.onConnect=t.onConnect),t.onDisconnect&&(e.onDisconnect=t.onDisconnect),t.onStatus&&(e.onStatus=t.onStatus),ae.sharedWebSocketProvider=new Qt(e),console.info("Shared Hocuspocus WebSocket created: "+t.url),ae.sharedWebSocketProvider}static destroySharedWebSocket(){ae.sharedWebSocketProvider&&(ae.sharedWebSocketProvider.destroy(),ae.sharedWebSocketProvider=null,console.info("Shared Hocuspocus WebSocket destroyed"))}static getSharedWebSocket(){return ae.sharedWebSocketProvider}static with(t){return{create:(e,s,i)=>{const n=i?{...t,...i}:t;return new ae(e,s,n)}}}async connect(){if(!this.isSynced)return new Promise(((t,e)=>{const s=setTimeout((()=>{e(Error("Hocuspocus connection timeout"))}),1e4),i=()=>{clearTimeout(s),this.provider.off("synced",i),t()};if(this.provider.on("synced",i),this.provider.isSynced)return clearTimeout(s),this.provider.off("synced",i),void t();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{M as BroadcastSyncProvider,ae as HocuspocusSyncProvider,P as WebSocketSyncProvider}
|
|
1
|
+
export{g as getAssetPath,r as render,s as setAssetPath,a as setNonce,b as setPlatformOptions}from"./p-pebXO4LU.js";export{f as KritzelBrushTool,d as KritzelGroup,b as KritzelImage,c as KritzelLine,g as KritzelLineTool,a as KritzelPath,j as KritzelSelectionTool,e as KritzelShape,i as KritzelShapeTool,K as KritzelText,h as KritzelTextTool,S as ShapeType}from"./p-CQiJ2YUG.js";export{I as IndexedDBSyncProvider,d as KritzelAlignment,c as KritzelAnchorManager,b as KritzelCursorHelper,K as KritzelEraserTool,a as KritzelImageTool}from"./p--X34FIIn.js";import*as t from"yjs";import{WebsocketProvider as n}from"y-websocket";export{K as KritzelWorkspace,W as WORKSPACE_EXPORT_VERSION}from"./p-AcQNA3C8.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-bWUahQFj.js";export{KritzelActiveUsers,defineCustomElement as defineCustomElementKritzelActiveUsers}from"./kritzel-active-users.js";export{KritzelAvatar,defineCustomElement as defineCustomElementKritzelAvatar}from"./kritzel-avatar.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{KritzelCurrentUser,defineCustomElement as defineCustomElementKritzelCurrentUser}from"./kritzel-current-user.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{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 o=Math.floor,u=127,m=Number.MAX_SAFE_INTEGER;let p=class{constructor(){this.cpos=0,this.cbuf=new Uint8Array(100),this.bufs=[]}};const y=()=>new p,w=t=>{const e=new Uint8Array((t=>{let e=t.cpos;for(let s=0;s<t.bufs.length;s++)e+=t.bufs[s].length;return e})(t));let s=0;for(let i=0;i<t.bufs.length;i++){const n=t.bufs[i];e.set(n,s),s+=n.length}return e.set(new Uint8Array(t.cbuf.buffer,0,t.cpos),s),e},C=(t,e)=>{const s=t.cbuf.length;t.cpos===s&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(2*s),t.cpos=0),t.cbuf[t.cpos++]=e},z=(t,e)=>{for(;e>u;)C(t,128|u&e),e=o(e/128);C(t,u&e)},E=(t,e)=>{z(t,e.byteLength),((t,e)=>{const s=t.cbuf.length,i=t.cpos,n=((t,e)=>t<e?t:e)(s-i,e.length),r=e.length-n;t.cbuf.set(e.subarray(0,n),i),t.cpos+=n,r>0&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(((t,e)=>t>e?t:e)(2*s,r)),t.cbuf.set(e.subarray(n)),t.cpos=r)})(t,e)},v=t=>Error(t),k=v("Unexpected end of array"),x=v("Integer out of Range");let A=class{constructor(t){this.arr=t,this.pos=0}};const T=t=>((t,e)=>{const s=new Uint8Array(t.arr.buffer,t.pos+t.arr.byteOffset,e);return t.pos+=e,s})(t,U(t)),U=t=>{let e=0,s=1;const i=t.arr.length;for(;t.pos<i;){const i=t.arr[t.pos++];if(e+=(i&u)*s,s*=128,i<128)return e;if(e>m)throw x}throw k};class M{doc;channel;_synced=!1;constructor(t,e,s){this.doc=e,this.channel=new BroadcastChannel(t),this.channel.onmessage=t=>{this.handleMessage(t.data)},this.doc.on("update",this.handleDocUpdate),this.broadcastSync(),setTimeout((()=>{this._synced=!0}),100),s?.quiet||console.info("BroadcastChannel Provider initialized: "+t)}handleDocUpdate=(t,e)=>{if(e!==this){const e=y();z(e,0),E(e,t),this.channel.postMessage(w(e))}};handleMessage(e){const s=(t=>new A(t))(new Uint8Array(e));switch(U(s)){case 0:const e=T(s);t.applyUpdate(this.doc,e,this);break;case 1:this.broadcastSync();break;case 2:const i=T(s),n=t.encodeStateAsUpdate(this.doc,i);if(n.length>0){const t=y();z(t,0),E(t,n),this.channel.postMessage(w(t))}}}broadcastSync(){const e=y();z(e,2),E(e,t.encodeStateVector(this.doc)),this.channel.postMessage(w(e))}async connect(){if(!this._synced)return new Promise((t=>{const e=()=>{this._synced?t():setTimeout(e,50)};e()}))}disconnect(){}destroy(){this.doc.off("update",this.handleDocUpdate),this.channel.close()}}class P{provider;isConnected=!1;_quiet=!1;constructor(t,e,s){const i=s?.url||"ws://localhost:1234",r=s?.roomName||t;this.provider=new n(i,r,e,{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}/${r}`)}static with(t){return{create:(e,s,i)=>{const n=i?{...t,...i}:t;return new P(e,s,n)}}}setupEventListeners(){this.provider.on("status",(({status:t})=>{"connected"===t?(this.isConnected=!0,this._quiet||console.info("WebSocket connected")):"disconnected"===t&&(this.isConnected=!1,this._quiet||console.info("WebSocket disconnected"))})),this.provider.on("sync",(t=>{t&&!this._quiet&&console.info("WebSocket synced")}))}async connect(){if(!this.isConnected)return new Promise(((t,e)=>{const s=setTimeout((()=>{e(Error("WebSocket connection timeout"))}),1e4),i=({status:e})=>{"connected"===e&&(clearTimeout(s),this.provider.off("status",i),this.isConnected=!0,t())};this.provider.on("status",i),this.provider.wsconnected&&(clearTimeout(s),this.provider.off("status",i),this.isConnected=!0,t())}))}disconnect(){this.provider&&this.provider.disconnect(),this.isConnected=!1}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1}}const O=Math.floor,F=127,N=Number.MAX_SAFE_INTEGER,H="undefined"!=typeof TextEncoder?new TextEncoder:null,L=H?t=>H.encode(t):t=>{const e=unescape(encodeURIComponent(t)),s=e.length,i=new Uint8Array(s);for(let t=0;t<s;t++)i[t]=e.codePointAt(t);return i};let R="undefined"==typeof TextDecoder?null:new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});R&&1===R.decode(new Uint8Array).length&&(R=null);const B=(t,e)=>{const s=t.cbuf.length;t.cpos===s&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(2*s),t.cpos=0),t.cbuf[t.cpos++]=e},_=(t,e)=>{for(;e>F;)B(t,128|F&e),e=O(e/128);B(t,F&e)},$=new Uint8Array(3e4),V=$.length/3,q=H&&H.encodeInto?(t,e)=>{if(e.length<V){const s=H.encodeInto(e,$).written||0;_(t,s);for(let e=0;e<s;e++)B(t,$[e])}else G(t,L(e))}:(t,e)=>{const s=unescape(encodeURIComponent(e)),i=s.length;_(t,i);for(let e=0;e<i;e++)B(t,s.codePointAt(e))},G=(t,e)=>{_(t,e.byteLength),((t,e)=>{const s=t.cbuf.length,i=t.cpos,n=((t,e)=>t<e?t:e)(s-i,e.length),r=e.length-n;t.cbuf.set(e.subarray(0,n),i),t.cpos+=n,r>0&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(((t,e)=>t>e?t:e)(2*s,r)),t.cbuf.set(e.subarray(n)),t.cpos=r)})(t,e)},J=t=>Error(t),Q=J("Unexpected end of array"),X=J("Integer out of Range"),Y=t=>t.arr[t.pos++],Z=t=>{let e=0,s=1;const i=t.arr.length;for(;t.pos<i;){const i=t.arr[t.pos++];if(e+=(i&F)*s,s*=128,i<128)return e;if(e>N)throw X}throw Q},tt=R?t=>R.decode((t=>((t,e)=>{const s=new Uint8Array(t.arr.buffer,t.pos+t.arr.byteOffset,e);return t.pos+=e,s})(t,Z(t)))(t)):t=>{let e=Z(t);if(0===e)return"";{let s=String.fromCodePoint(Y(t));if(--e<100)for(;e--;)s+=String.fromCodePoint(Y(t));else for(;e>0;){const i=e<1e4?e:1e4,n=t.arr.subarray(t.pos,t.pos+i);t.pos+=i,s+=String.fromCodePoint.apply(null,n),e-=i}return decodeURIComponent(escape(s))}};var et;!function(t){t[t.Token=0]="Token",t[t.PermissionDenied=1]="PermissionDenied",t[t.Authenticated=2]="Authenticated"}(et||(et={}));const st=t=>Array.from(t.entries()).map((([t,e])=>({clientId:t,...e})));var it;async function nt(t){return new Promise((e=>setTimeout(e,t)))}function rt(t,e){let s=e.delay;if(0===s)return 0;if(e.factor&&(s*=Math.pow(e.factor,t.attemptNum-1),0!==e.maxDelay&&(s=Math.min(s,e.maxDelay))),e.jitter){const t=Math.ceil(e.minDelay),i=Math.floor(s);s=Math.floor(Math.random()*(i-t+1))+t}return Math.round(s)}!function(t){t[t.Connecting=0]="Connecting",t[t.Open=1]="Open",t[t.Closing=2]="Closing",t[t.Closed=3]="Closed"}(it||(it={}));const ot=Math.floor,ht=128,at=127,lt=Number.MAX_SAFE_INTEGER,ct=()=>new Set,ut=Array.from,dt="undefined"!=typeof TextEncoder?new TextEncoder:null,mt=dt?t=>dt.encode(t):t=>{const e=unescape(encodeURIComponent(t)),s=e.length,i=new Uint8Array(s);for(let t=0;t<s;t++)i[t]=e.codePointAt(t);return i};let ft="undefined"==typeof TextDecoder?null:new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});ft&&1===ft.decode(new Uint8Array).length&&(ft=null);class pt{constructor(){this.cpos=0,this.cbuf=new Uint8Array(100),this.bufs=[]}}const yt=()=>new pt,gt=t=>{let e=t.cpos;for(let s=0;s<t.bufs.length;s++)e+=t.bufs[s].length;return e},wt=t=>{const e=new Uint8Array(gt(t));let s=0;for(let i=0;i<t.bufs.length;i++){const n=t.bufs[i];e.set(n,s),s+=n.length}return e.set(new Uint8Array(t.cbuf.buffer,0,t.cpos),s),e},Ct=(t,e)=>{const s=t.cbuf.length;t.cpos===s&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(2*s),t.cpos=0),t.cbuf[t.cpos++]=e},zt=(t,e)=>{for(;e>at;)Ct(t,ht|at&e),e=ot(e/128);Ct(t,at&e)},Et=new Uint8Array(3e4),vt=Et.length/3,kt=dt&&dt.encodeInto?(t,e)=>{if(e.length<vt){const s=dt.encodeInto(e,Et).written||0;zt(t,s);for(let e=0;e<s;e++)Ct(t,Et[e])}else Kt(t,mt(e))}:(t,e)=>{const s=unescape(encodeURIComponent(e)),i=s.length;zt(t,i);for(let e=0;e<i;e++)Ct(t,s.codePointAt(e))},Kt=(t,e)=>{zt(t,e.byteLength),((t,e)=>{const s=t.cbuf.length,i=t.cpos,n=((t,e)=>t<e?t:e)(s-i,e.length),r=e.length-n;t.cbuf.set(e.subarray(0,n),i),t.cpos+=n,r>0&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(((t,e)=>t>e?t:e)(2*s,r)),t.cbuf.set(e.subarray(n)),t.cpos=r)})(t,e)},St=t=>Error(t),xt=St("Unexpected end of array"),At=St("Integer out of Range");class bt{constructor(t){this.arr=t,this.pos=0}}const Tt=t=>new bt(t),Ut=t=>((t,e)=>{const s=new Uint8Array(t.arr.buffer,t.pos+t.arr.byteOffset,e);return t.pos+=e,s})(t,Mt(t)),jt=t=>t.arr[t.pos++],Mt=t=>{let e=0,s=1;const i=t.arr.length;for(;t.pos<i;){const i=t.arr[t.pos++];if(e+=(i&at)*s,s*=128,i<ht)return e;if(e>lt)throw At}throw xt},Dt=ft?t=>ft.decode(Ut(t)):t=>{let e=Mt(t);if(0===e)return"";{let s=String.fromCodePoint(jt(t));if(--e<100)for(;e--;)s+=String.fromCodePoint(jt(t));else for(;e>0;){const i=e<1e4?e:1e4,n=t.arr.subarray(t.pos,t.pos+i);t.pos+=i,s+=String.fromCodePoint.apply(null,n),e-=i}return decodeURIComponent(escape(s))}},Pt=Date.now,It=()=>new Map;class Ot{constructor(){this._observers=It()}on(t,e){((t,e,s)=>{let i=t.get(e);return void 0===i&&t.set(e,i=s()),i})(this._observers,t,ct).add(e)}once(t,e){const s=(...i)=>{this.off(t,s),e(...i)};this.on(t,s)}off(t,e){const s=this._observers.get(t);void 0!==s&&(s.delete(e),0===s.size&&this._observers.delete(t))}emit(t,e){return ut((this._observers.get(t)||It()).values()).forEach((t=>t(...e)))}destroy(){this._observers=It()}}const Ft=Object.keys,Nt=t=>Ft(t).length,Wt=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Ht=(t,e)=>{if(null==t||null==e)return((t,e)=>t===e)(t,e);if(t.constructor!==e.constructor)return!1;if(t===e)return!0;switch(t.constructor){case ArrayBuffer:t=new Uint8Array(t),e=new Uint8Array(e);case Uint8Array:if(t.byteLength!==e.byteLength)return!1;for(let s=0;s<t.length;s++)if(t[s]!==e[s])return!1;break;case Set:if(t.size!==e.size)return!1;for(const s of t)if(!e.has(s))return!1;break;case Map:if(t.size!==e.size)return!1;for(const s of t.keys())if(!e.has(s)||!Ht(t.get(s),e.get(s)))return!1;break;case Object:if(Nt(t)!==Nt(e))return!1;for(const s in t)if(!Wt(t,s)||!Ht(t[s],e[s]))return!1;break;case Array:if(t.length!==e.length)return!1;for(let s=0;s<t.length;s++)if(!Ht(t[s],e[s]))return!1;break;default:return!1}return!0};class Lt extends Ot{constructor(t){super(),this.doc=t,this.clientID=t.clientID,this.states=new Map,this.meta=new Map,this._checkInterval=setInterval((()=>{const t=Pt();null!==this.getLocalState()&&15e3<=t-this.meta.get(this.clientID).lastUpdated&&this.setLocalState(this.getLocalState());const e=[];this.meta.forEach(((s,i)=>{i!==this.clientID&&3e4<=t-s.lastUpdated&&this.states.has(i)&&e.push(i)})),e.length>0&&Rt(this,e,"timeout")}),ot(3e3)),t.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(t){const e=this.clientID,s=this.meta.get(e),i=void 0===s?0:s.clock+1,n=this.states.get(e);null===t?this.states.delete(e):this.states.set(e,t),this.meta.set(e,{clock:i,lastUpdated:Pt()});const r=[],o=[],h=[],a=[];null===t?a.push(e):null==n?null!=t&&r.push(e):(o.push(e),Ht(n,t)||h.push(e)),(r.length>0||h.length>0||a.length>0)&&this.emit("change",[{added:r,updated:h,removed:a},"local"]),this.emit("update",[{added:r,updated:o,removed:a},"local"])}setLocalStateField(t,e){const s=this.getLocalState();null!==s&&this.setLocalState({...s,[t]:e})}getStates(){return this.states}}const Rt=(t,e,s)=>{const i=[];for(let s=0;s<e.length;s++){const n=e[s];if(t.states.has(n)){if(t.states.delete(n),n===t.clientID){const e=t.meta.get(n);t.meta.set(n,{clock:e.clock+1,lastUpdated:Pt()})}i.push(n)}}i.length>0&&(t.emit("change",[{added:[],updated:[],removed:i},s]),t.emit("update",[{added:[],updated:[],removed:i},s]))},Bt=(t,e,s=t.states)=>{const i=e.length,n=yt();zt(n,i);for(let r=0;r<i;r++){const i=e[r],o=s.get(i)||null,h=t.meta.get(i).clock;zt(n,i),zt(n,h),kt(n,JSON.stringify(o))}return wt(n)};class _t{constructor(){this.callbacks={}}on(t,e){return this.callbacks[t]||(this.callbacks[t]=[]),this.callbacks[t].push(e),this}emit(t,...e){const s=this.callbacks[t];return s&&s.forEach((t=>t.apply(this,e))),this}off(t,e){const s=this.callbacks[t];return s&&(e?this.callbacks[t]=s.filter((t=>t!==e)):delete this.callbacks[t]),this}removeAllListeners(){this.callbacks={}}}class $t{constructor(t){this.data=t,this.encoder=yt(),this.decoder=Tt(new Uint8Array(this.data))}peekVarString(){return(t=>{const e=t.pos,s=Dt(t);return t.pos=e,s})(this.decoder)}readVarUint(){return Mt(this.decoder)}readVarString(){return Dt(this.decoder)}readVarUint8Array(){return Ut(this.decoder)}writeVarUint(t){return zt(this.encoder,t)}writeVarString(t){return kt(this.encoder,t)}writeVarUint8Array(t){return Kt(this.encoder,t)}length(){return gt(this.encoder)}}var Vt,qt;!function(t){t[t.Sync=0]="Sync",t[t.Awareness=1]="Awareness",t[t.Auth=2]="Auth",t[t.QueryAwareness=3]="QueryAwareness",t[t.Stateless=5]="Stateless",t[t.CLOSE=7]="CLOSE",t[t.SyncStatus=8]="SyncStatus"}(Vt||(Vt={})),function(t){t.Connecting="connecting",t.Connected="connected",t.Disconnected="disconnected"}(qt||(qt={}));class Gt{constructor(){this.encoder=yt()}get(t){return t.encoder}toUint8Array(){return wt(this.encoder)}}class Jt extends Gt{constructor(){super(...arguments),this.type=Vt.CLOSE,this.description="Ask the server to close the connection"}get(t){return kt(this.encoder,t.documentName),zt(this.encoder,this.type),this.encoder}}class Qt extends _t{constructor(t){super(),this.messageQueue=[],this.configuration={url:"",autoConnect:!0,preserveTrailingSlash:!1,document:void 0,WebSocketPolyfill:void 0,messageReconnectTimeout:3e4,delay:1e3,initialDelay:0,factor:2,maxAttempts:0,minDelay:1e3,maxDelay:3e4,jitter:!0,timeout:0,onOpen:()=>null,onConnect:()=>null,onMessage:()=>null,onOutgoingMessage:()=>null,onStatus:()=>null,onDisconnect:()=>null,onClose:()=>null,onDestroy:()=>null,onAwarenessUpdate:()=>null,onAwarenessChange:()=>null,handleTimeout:null,providerMap:new Map},this.webSocket=null,this.webSocketHandlers={},this.shouldConnect=!0,this.status=qt.Disconnected,this.lastMessageReceived=0,this.identifier=0,this.intervals={connectionChecker:null},this.connectionAttempt=null,this.receivedOnOpenPayload=void 0,this.closeTries=0,this.setConfiguration(t),this.configuration.WebSocketPolyfill=t.WebSocketPolyfill?t.WebSocketPolyfill:WebSocket,this.on("open",this.configuration.onOpen),this.on("open",this.onOpen.bind(this)),this.on("connect",this.configuration.onConnect),this.on("message",this.configuration.onMessage),this.on("outgoingMessage",this.configuration.onOutgoingMessage),this.on("status",this.configuration.onStatus),this.on("disconnect",this.configuration.onDisconnect),this.on("close",this.configuration.onClose),this.on("destroy",this.configuration.onDestroy),this.on("awarenessUpdate",this.configuration.onAwarenessUpdate),this.on("awarenessChange",this.configuration.onAwarenessChange),this.on("close",this.onClose.bind(this)),this.on("message",this.onMessage.bind(this)),this.intervals.connectionChecker=setInterval(this.checkConnection.bind(this),this.configuration.messageReconnectTimeout/10),this.shouldConnect&&this.connect()}async onOpen(t){this.status=qt.Connected,this.emit("status",{status:qt.Connected}),this.cancelWebsocketRetry=void 0,this.receivedOnOpenPayload=t}attach(t){this.configuration.providerMap.set(t.configuration.name,t),this.status===qt.Disconnected&&this.shouldConnect&&this.connect(),this.receivedOnOpenPayload&&this.status===qt.Connected&&t.onOpen(this.receivedOnOpenPayload)}detach(t){this.configuration.providerMap.has(t.configuration.name)&&(t.send(Jt,{documentName:t.configuration.name}),this.configuration.providerMap.delete(t.configuration.name))}setConfiguration(t={}){this.configuration={...this.configuration,...t},this.configuration.autoConnect||(this.shouldConnect=!1)}async connect(){if(this.status===qt.Connected)return;this.cancelWebsocketRetry&&(this.cancelWebsocketRetry(),this.cancelWebsocketRetry=void 0),this.receivedOnOpenPayload=void 0,this.shouldConnect=!0;const{retryPromise:t,cancelFunc:e}=(()=>{let t=!1;return{retryPromise:async function(t,e){const s=function(t){return t||(t={}),{delay:void 0===t.delay?200:t.delay,initialDelay:void 0===t.initialDelay?0:t.initialDelay,minDelay:void 0===t.minDelay?0:t.minDelay,maxDelay:void 0===t.maxDelay?0:t.maxDelay,factor:void 0===t.factor?0:t.factor,maxAttempts:void 0===t.maxAttempts?3:t.maxAttempts,timeout:void 0===t.timeout?0:t.timeout,jitter:!0===t.jitter,initialJitter:!0===t.initialJitter,handleError:void 0===t.handleError?null:t.handleError,handleTimeout:void 0===t.handleTimeout?null:t.handleTimeout,beforeAttempt:void 0===t.beforeAttempt?null:t.beforeAttempt,calculateDelay:void 0===t.calculateDelay?null:t.calculateDelay}}(e);for(const t of["delay","initialDelay","minDelay","maxDelay","maxAttempts","timeout"]){const e=s[t];if(!Number.isInteger(e)||e<0)throw Error(`Value for ${t} must be an integer greater than or equal to 0`)}if(s.factor.constructor!==Number||s.factor<0)throw Error("Value for factor must be a number greater than or equal to 0");if(s.delay<s.minDelay)throw Error(`delay cannot be less than minDelay (delay: ${s.delay}, minDelay: ${s.minDelay}`);const i={attemptNum:0,attemptsRemaining:s.maxAttempts?s.maxAttempts:-1,aborted:!1,abort(){i.aborted=!0}},n=s.calculateDelay||rt,r=s.calculateDelay?s.calculateDelay(i,s):s.initialDelay;if(r&&await nt(r),i.attemptNum<1&&s.initialJitter){const t=n(i,s);t&&await nt(t)}return async function e(){if(s.beforeAttempt&&s.beforeAttempt(i,s),i.aborted){const t=Error("Attempt aborted");throw t.code="ATTEMPT_ABORTED",t}const r=async t=>{if(s.handleError&&await s.handleError(t,i,s),i.aborted||0===i.attemptsRemaining)throw t;i.attemptNum++;const r=n(i,s);return r&&await nt(r),e()};return i.attemptsRemaining>0&&i.attemptsRemaining--,s.timeout?new Promise(((e,n)=>{const o=setTimeout((()=>{if(s.handleTimeout)try{e(s.handleTimeout(i,s))}catch(t){n(t)}else{const t=Error(`Retry timeout (attemptNum: ${i.attemptNum}, timeout: ${s.timeout})`);t.code="ATTEMPT_TIMEOUT",n(t)}}),s.timeout);t(i,s).then((t=>{clearTimeout(o),e(t)})).catch((t=>{clearTimeout(o),r(t).then(e).catch(n)}))})):t(i,s).catch(r)}()}(this.createWebSocketConnection.bind(this),{delay:this.configuration.delay,initialDelay:this.configuration.initialDelay,factor:this.configuration.factor,maxAttempts:this.configuration.maxAttempts,minDelay:this.configuration.minDelay,maxDelay:this.configuration.maxDelay,jitter:this.configuration.jitter,timeout:this.configuration.timeout,handleTimeout:this.configuration.handleTimeout,beforeAttempt:e=>{this.shouldConnect&&!t||e.abort()}}).catch((t=>{if(t&&"ATTEMPT_ABORTED"!==t.code)throw t})),cancelFunc:()=>{t=!0}}})();return this.cancelWebsocketRetry=e,t}attachWebSocketListeners(t,e){const{identifier:s}=t;this.webSocketHandlers[s]={message:t=>this.emit("message",t),close:t=>this.emit("close",{event:t}),open:t=>this.emit("open",t),error:t=>{e(t)}};const i=this.webSocketHandlers[t.identifier];Object.keys(i).forEach((e=>{t.addEventListener(e,i[e])}))}cleanupWebSocket(){if(!this.webSocket)return;const{identifier:t}=this.webSocket,e=this.webSocketHandlers[t];Object.keys(e).forEach((s=>{var i;null===(i=this.webSocket)||void 0===i||i.removeEventListener(s,e[s]),delete this.webSocketHandlers[t]})),this.webSocket.close(),this.webSocket=null}createWebSocketConnection(){return new Promise(((t,e)=>{this.webSocket&&(this.messageQueue=[],this.cleanupWebSocket()),this.lastMessageReceived=0,this.identifier+=1;const s=new this.configuration.WebSocketPolyfill(this.url);s.binaryType="arraybuffer",s.identifier=this.identifier,this.attachWebSocketListeners(s,e),this.webSocket=s,this.status=qt.Connecting,this.emit("status",{status:qt.Connecting}),this.connectionAttempt={resolve:t,reject:e}}))}onMessage(t){var e;this.resolveConnectionAttempt(),this.lastMessageReceived=Pt();const s=new $t(t.data).peekVarString();null===(e=this.configuration.providerMap.get(s))||void 0===e||e.onMessage(t)}resolveConnectionAttempt(){this.connectionAttempt&&(this.connectionAttempt.resolve(),this.connectionAttempt=null,this.status=qt.Connected,this.emit("status",{status:qt.Connected}),this.emit("connect"),this.messageQueue.forEach((t=>this.send(t))),this.messageQueue=[])}stopConnectionAttempt(){this.connectionAttempt=null}rejectConnectionAttempt(){var t;null===(t=this.connectionAttempt)||void 0===t||t.reject(),this.connectionAttempt=null}checkConnection(){var t;this.status===qt.Connected&&this.lastMessageReceived&&(this.configuration.messageReconnectTimeout>=Pt()-this.lastMessageReceived||(this.closeTries+=1,this.closeTries>2?(this.onClose({event:{code:4408,reason:"forced"}}),this.closeTries=0):(null===(t=this.webSocket)||void 0===t||t.close(),this.messageQueue=[])))}get serverUrl(){if(this.configuration.preserveTrailingSlash)return this.configuration.url;let t=this.configuration.url;for(;"/"===t[t.length-1];)t=t.slice(0,t.length-1);return t}get url(){return this.serverUrl}disconnect(){if(this.shouldConnect=!1,null!==this.webSocket)try{this.webSocket.close(),this.messageQueue=[]}catch(t){console.error(t)}}send(t){var e;(null===(e=this.webSocket)||void 0===e?void 0:e.readyState)===it.Open?this.webSocket.send(t):this.messageQueue.push(t)}onClose({event:t}){this.closeTries=0,this.cleanupWebSocket(),this.connectionAttempt&&this.rejectConnectionAttempt(),this.status=qt.Disconnected,this.emit("status",{status:qt.Disconnected}),this.emit("disconnect",{event:t}),!this.cancelWebsocketRetry&&this.shouldConnect&&setTimeout((()=>{this.connect()}),this.configuration.delay)}destroy(){this.emit("destroy"),clearInterval(this.intervals.connectionChecker),this.stopConnectionAttempt(),this.disconnect(),this.removeAllListeners(),this.cleanupWebSocket()}}const Xt=(e,s,i)=>{try{t.applyUpdate(s,Ut(e),i)}catch(t){console.error("Caught error while handling a Yjs update",t)}},Yt=Xt;class Zt{constructor(t){this.message=t}apply(t,e){const{message:s}=this,i=s.readVarUint(),n=s.length();switch(i){case Vt.Sync:this.applySyncMessage(t,e);break;case Vt.Awareness:this.applyAwarenessMessage(t);break;case Vt.Auth:this.applyAuthMessage(t);break;case Vt.QueryAwareness:this.applyQueryAwarenessMessage(t);break;case Vt.Stateless:t.receiveStateless(Dt(s.decoder));break;case Vt.SyncStatus:this.applySyncStatusMessage(t,1===(t=>{let e=t.arr[t.pos++],s=63&e,i=64;const n=(64&e)>0?-1:1;if(!(e&ht))return n*s;const r=t.arr.length;for(;t.pos<r;){if(e=t.arr[t.pos++],s+=(e&at)*i,i*=128,e<ht)return n*s;if(s>lt)throw At}throw xt})(s.decoder));break;case Vt.CLOSE:const n={code:1e3,reason:Dt(s.decoder),target:t.configuration.websocketProvider.webSocket,type:"close"};t.onClose(),t.configuration.onClose({event:n}),t.forwardClose({event:n});break;default:throw Error("Can’t apply message of unknown type: "+i)}s.length()>n+1&&t.send(Gt,{encoder:s.encoder})}applySyncMessage(e,s){const{message:i}=this;i.writeVarUint(Vt.Sync);const n=((e,s,i,n)=>{const r=Mt(e);switch(r){case 0:((e,s,i)=>{((e,s,i)=>{zt(e,1),Kt(e,t.encodeStateAsUpdate(s,i))})(s,i,Ut(e))})(e,s,i);break;case 1:Xt(e,i,n);break;case 2:Yt(e,i,n);break;default:throw Error("Unknown message type")}return r})(i.decoder,i.encoder,e.document,e);s&&1===n&&(e.synced=!0)}applySyncStatusMessage(t,e){e&&t.decrementUnsyncedChanges()}applyAwarenessMessage(t){if(!t.awareness)return;const{message:e}=this;((t,e,s)=>{const i=Tt(e),n=Pt(),r=[],o=[],h=[],a=[],l=Mt(i);for(let e=0;e<l;e++){const e=Mt(i);let s=Mt(i);const l=JSON.parse(Dt(i)),c=t.meta.get(e),u=t.states.get(e),d=void 0===c?0:c.clock;(d<s||d===s&&null===l&&t.states.has(e))&&(null===l?e===t.clientID&&null!=t.getLocalState()?s++:t.states.delete(e):t.states.set(e,l),t.meta.set(e,{clock:s,lastUpdated:n}),void 0===c&&null!==l?r.push(e):void 0!==c&&null===l?a.push(e):null!==l&&(Ht(l,u)||h.push(e),o.push(e)))}(r.length>0||h.length>0||a.length>0)&&t.emit("change",[{added:r,updated:h,removed:a},s]),(r.length>0||o.length>0||a.length>0)&&t.emit("update",[{added:r,updated:o,removed:a},s])})(t.awareness,e.readVarUint8Array(),t)}applyAuthMessage(t){const{message:e}=this;((t,e,s,i)=>{switch(Z(t)){case et.Token:e();break;case et.PermissionDenied:s(tt(t));break;case et.Authenticated:i(tt(t))}})(e.decoder,t.sendToken.bind(t),t.permissionDeniedHandler.bind(t),t.authenticatedHandler.bind(t))}applyQueryAwarenessMessage(t){if(!t.awareness)return;const{message:e}=this;e.writeVarUint(Vt.Awareness),e.writeVarUint8Array(Bt(t.awareness,Array.from(t.awareness.getStates().keys())))}}class te{constructor(t,e={}){this.message=new t,this.encoder=this.message.get(e)}create(){return wt(this.encoder)}send(t){null==t||t.send(this.create())}}class ee extends Gt{constructor(){super(...arguments),this.type=Vt.Auth,this.description="Authentication"}get(t){if(void 0===t.token)throw Error("The authentication message requires `token` as an argument.");return kt(this.encoder,t.documentName),zt(this.encoder,this.type),((t,e)=>{_(t,et.Token),q(t,e)})(this.encoder,t.token),this.encoder}}class se extends Gt{constructor(){super(...arguments),this.type=Vt.Awareness,this.description="Awareness states update"}get(t){if(void 0===t.awareness)throw Error("The awareness message requires awareness as an argument");if(void 0===t.clients)throw Error("The awareness message requires clients as an argument");let e;return kt(this.encoder,t.documentName),zt(this.encoder,this.type),e=void 0===t.states?Bt(t.awareness,t.clients):Bt(t.awareness,t.clients,t.states),Kt(this.encoder,e),this.encoder}}class ie extends Gt{constructor(){super(...arguments),this.type=Vt.Stateless,this.description="A stateless message"}get(t){var e;return kt(this.encoder,t.documentName),zt(this.encoder,this.type),kt(this.encoder,null!==(e=t.payload)&&void 0!==e?e:""),this.encoder}}class ne extends Gt{constructor(){super(...arguments),this.type=Vt.Sync,this.description="First sync step"}get(e){if(void 0===e.document)throw Error("The sync step one message requires document as an argument");return kt(this.encoder,e.documentName),zt(this.encoder,this.type),((e,s)=>{zt(e,0);const i=t.encodeStateVector(s);Kt(e,i)})(this.encoder,e.document),this.encoder}}class re extends Gt{constructor(){super(...arguments),this.type=Vt.Sync,this.description="A document update"}get(t){return kt(this.encoder,t.documentName),zt(this.encoder,this.type),((t,e)=>{zt(t,2),Kt(t,e)})(this.encoder,t.update),this.encoder}}class oe extends Error{constructor(){super(...arguments),this.code=1001}}class he extends _t{constructor(e){var s,i,n;super(),this.configuration={name:"",document:void 0,awareness:void 0,token:null,forceSyncInterval:!1,onAuthenticated:()=>null,onAuthenticationFailed:()=>null,onOpen:()=>null,onConnect:()=>null,onMessage:()=>null,onOutgoingMessage:()=>null,onSynced:()=>null,onStatus:()=>null,onDisconnect:()=>null,onClose:()=>null,onDestroy:()=>null,onAwarenessUpdate:()=>null,onAwarenessChange:()=>null,onStateless:()=>null,onUnsyncedChanges:()=>null},this.isSynced=!1,this.unsyncedChanges=0,this.isAuthenticated=!1,this.authorizedScope=void 0,this.manageSocket=!1,this._isAttached=!1,this.intervals={forceSync:null},this.boundDocumentUpdateHandler=this.documentUpdateHandler.bind(this),this.boundAwarenessUpdateHandler=this.awarenessUpdateHandler.bind(this),this.boundPageHide=this.pageHide.bind(this),this.boundOnOpen=this.onOpen.bind(this),this.boundOnClose=this.onClose.bind(this),this.forwardConnect=()=>this.emit("connect"),this.forwardStatus=t=>this.emit("status",t),this.forwardClose=t=>this.emit("close",t),this.forwardDisconnect=t=>this.emit("disconnect",t),this.forwardDestroy=()=>this.emit("destroy"),this.setConfiguration(e),this.configuration.document=e.document?e.document:new t.Doc,this.configuration.awareness=void 0!==e.awareness?e.awareness:new Lt(this.document),this.on("open",this.configuration.onOpen),this.on("message",this.configuration.onMessage),this.on("outgoingMessage",this.configuration.onOutgoingMessage),this.on("synced",this.configuration.onSynced),this.on("destroy",this.configuration.onDestroy),this.on("awarenessUpdate",this.configuration.onAwarenessUpdate),this.on("awarenessChange",this.configuration.onAwarenessChange),this.on("stateless",this.configuration.onStateless),this.on("unsyncedChanges",this.configuration.onUnsyncedChanges),this.on("authenticated",this.configuration.onAuthenticated),this.on("authenticationFailed",this.configuration.onAuthenticationFailed),null===(s=this.awareness)||void 0===s||s.on("update",(()=>{this.emit("awarenessUpdate",{states:st(this.awareness.getStates())})})),null===(i=this.awareness)||void 0===i||i.on("change",(()=>{this.emit("awarenessChange",{states:st(this.awareness.getStates())})})),this.document.on("update",this.boundDocumentUpdateHandler),null===(n=this.awareness)||void 0===n||n.on("update",this.boundAwarenessUpdateHandler),this.registerEventListeners(),this.configuration.forceSyncInterval&&"number"==typeof this.configuration.forceSyncInterval&&(this.intervals.forceSync=setInterval(this.forceSync.bind(this),this.configuration.forceSyncInterval)),this.manageSocket&&this.attach()}setConfiguration(t={}){t.websocketProvider||(this.manageSocket=!0,this.configuration.websocketProvider=new Qt(t)),this.configuration={...this.configuration,...t}}get document(){return this.configuration.document}get isAttached(){return this._isAttached}get awareness(){return this.configuration.awareness}get hasUnsyncedChanges(){return this.unsyncedChanges>0}resetUnsyncedChanges(){this.unsyncedChanges=1,this.emit("unsyncedChanges",{number:this.unsyncedChanges})}incrementUnsyncedChanges(){this.unsyncedChanges+=1,this.emit("unsyncedChanges",{number:this.unsyncedChanges})}decrementUnsyncedChanges(){this.unsyncedChanges>0&&(this.unsyncedChanges-=1),0===this.unsyncedChanges&&(this.synced=!0),this.emit("unsyncedChanges",{number:this.unsyncedChanges})}forceSync(){this.resetUnsyncedChanges(),this.send(ne,{document:this.document,documentName:this.configuration.name})}pageHide(){this.awareness&&Rt(this.awareness,[this.document.clientID],"page hide")}registerEventListeners(){"undefined"!=typeof window&&"addEventListener"in window&&window.addEventListener("pagehide",this.boundPageHide)}sendStateless(t){this.send(ie,{documentName:this.configuration.name,payload:t})}async sendToken(){let t;try{t=await this.getToken()}catch(t){return void this.permissionDeniedHandler("Failed to get token during sendToken(): "+t)}this.send(ee,{token:null!=t?t:"",documentName:this.configuration.name})}documentUpdateHandler(t,e){e!==this&&(this.incrementUnsyncedChanges(),this.send(re,{update:t,documentName:this.configuration.name}))}awarenessUpdateHandler({added:t,updated:e,removed:s},i){const n=t.concat(e).concat(s);this.send(se,{awareness:this.awareness,clients:n,documentName:this.configuration.name})}get synced(){return this.isSynced}set synced(t){this.isSynced!==t&&(this.isSynced=t,t&&this.emit("synced",{state:t}))}receiveStateless(t){this.emit("stateless",{payload:t})}async connect(){if(this.manageSocket)return this.configuration.websocketProvider.connect();console.warn("HocuspocusProvider::connect() is deprecated and does not do anything. Please connect/disconnect on the websocketProvider, or attach/deattach providers.")}disconnect(){if(this.manageSocket)return this.configuration.websocketProvider.disconnect();console.warn("HocuspocusProvider::disconnect() is deprecated and does not do anything. Please connect/disconnect on the websocketProvider, or attach/deattach providers.")}async onOpen(t){this.isAuthenticated=!1,this.emit("open",{event:t}),await this.sendToken(),this.startSync()}async getToken(){return"function"==typeof this.configuration.token?await this.configuration.token():this.configuration.token}startSync(){this.resetUnsyncedChanges(),this.send(ne,{document:this.document,documentName:this.configuration.name}),this.awareness&&null!==this.awareness.getLocalState()&&this.send(se,{awareness:this.awareness,clients:[this.document.clientID],documentName:this.configuration.name})}send(t,e){if(!this._isAttached)return;const s=new te(t,e);this.emit("outgoingMessage",{message:s.message}),s.send(this.configuration.websocketProvider)}onMessage(t){const e=new $t(t.data),s=e.readVarString();e.writeVarString(s),this.emit("message",{event:t,message:new $t(t.data)}),new Zt(e).apply(this,!0)}onClose(){this.isAuthenticated=!1,this.synced=!1,this.awareness&&Rt(this.awareness,Array.from(this.awareness.getStates().keys()).filter((t=>t!==this.document.clientID)),this)}destroy(){this.emit("destroy"),this.intervals.forceSync&&clearInterval(this.intervals.forceSync),this.awareness&&(Rt(this.awareness,[this.document.clientID],"provider destroy"),this.awareness.off("update",this.boundAwarenessUpdateHandler),this.awareness.destroy()),this.document.off("update",this.boundDocumentUpdateHandler),this.removeAllListeners(),this.detach(),this.manageSocket&&this.configuration.websocketProvider.destroy(),"undefined"!=typeof window&&"removeEventListener"in window&&window.removeEventListener("pagehide",this.boundPageHide)}detach(){this.configuration.websocketProvider.off("connect",this.configuration.onConnect),this.configuration.websocketProvider.off("connect",this.forwardConnect),this.configuration.websocketProvider.off("status",this.forwardStatus),this.configuration.websocketProvider.off("status",this.configuration.onStatus),this.configuration.websocketProvider.off("open",this.boundOnOpen),this.configuration.websocketProvider.off("close",this.boundOnClose),this.configuration.websocketProvider.off("close",this.configuration.onClose),this.configuration.websocketProvider.off("close",this.forwardClose),this.configuration.websocketProvider.off("disconnect",this.configuration.onDisconnect),this.configuration.websocketProvider.off("disconnect",this.forwardDisconnect),this.configuration.websocketProvider.off("destroy",this.configuration.onDestroy),this.configuration.websocketProvider.off("destroy",this.forwardDestroy),this.configuration.websocketProvider.detach(this),this._isAttached=!1}attach(){this._isAttached||(this.configuration.websocketProvider.on("connect",this.configuration.onConnect),this.configuration.websocketProvider.on("connect",this.forwardConnect),this.configuration.websocketProvider.on("status",this.configuration.onStatus),this.configuration.websocketProvider.on("status",this.forwardStatus),this.configuration.websocketProvider.on("open",this.boundOnOpen),this.configuration.websocketProvider.on("close",this.boundOnClose),this.configuration.websocketProvider.on("close",this.configuration.onClose),this.configuration.websocketProvider.on("close",this.forwardClose),this.configuration.websocketProvider.on("disconnect",this.configuration.onDisconnect),this.configuration.websocketProvider.on("disconnect",this.forwardDisconnect),this.configuration.websocketProvider.on("destroy",this.configuration.onDestroy),this.configuration.websocketProvider.on("destroy",this.forwardDestroy),this.configuration.websocketProvider.attach(this),this._isAttached=!0)}permissionDeniedHandler(t){this.emit("authenticationFailed",{reason:t}),this.isAuthenticated=!1}authenticatedHandler(t){this.isAuthenticated=!0,this.authorizedScope=t,this.emit("authenticated",{scope:t})}setAwarenessField(t,e){if(!this.awareness)throw new oe(`Cannot set awareness field "${t}" to ${JSON.stringify(e)}. You have disabled Awareness for this provider by explicitly passing awareness: null in the provider configuration.`);this.awareness.setLocalStateField(t,e)}}class ae{provider;isConnected=!1;isSynced=!1;usesSharedSocket=!1;static sharedWebSocketProvider=null;constructor(t,e,s){const i=s?.name||t,n=s?.url||"ws://localhost:1234",r=s?.websocketProvider||ae.sharedWebSocketProvider;if(r){this.usesSharedSocket=!0;const t={websocketProvider:r,name:i,document:e,token:s?.token||null,onConnect:()=>{this.isConnected||(this.isConnected=!0,s?.quiet||console.info("Hocuspocus connected: "+i),s?.onConnect&&s.onConnect())},onDisconnect:()=>{(this.isConnected||this.isSynced)&&(this.isConnected=!1,this.isSynced=!1,s?.quiet||console.info("Hocuspocus disconnected: "+i),s?.onDisconnect&&s.onDisconnect())},onSynced:()=>{this.isSynced||(this.isSynced=!0,s?.quiet||console.info("Hocuspocus synced: "+i),s?.onSynced&&s.onSynced())}};void 0!==s?.forceSyncInterval&&(t.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(t.onAuthenticationFailed=s.onAuthenticationFailed),s?.onStatus&&(t.onStatus=s.onStatus),this.provider=new he(t),this.provider.attach(),s?.quiet||console.info("Hocuspocus Provider initialized (multiplexed): "+i)}else{this.usesSharedSocket=!1;const t={url:n,name:i,document:e,token:s?.token||null,onConnect:()=>{this.isConnected||(this.isConnected=!0,s?.quiet||console.info("Hocuspocus connected: "+i),s?.onConnect&&s.onConnect())},onDisconnect:()=>{(this.isConnected||this.isSynced)&&(this.isConnected=!1,this.isSynced=!1,s?.quiet||console.info("Hocuspocus disconnected: "+i),s?.onDisconnect&&s.onDisconnect())},onSynced:()=>{this.isSynced||(this.isSynced=!0,s?.quiet||console.info("Hocuspocus synced: "+i),s?.onSynced&&s.onSynced())}};void 0!==s?.forceSyncInterval&&(t.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(t.onAuthenticationFailed=s.onAuthenticationFailed),s?.onStatus&&(t.onStatus=s.onStatus),s?.WebSocketPolyfill&&(t.WebSocketPolyfill=s.WebSocketPolyfill),this.provider=new he(t),s?.quiet||console.info(`Hocuspocus Provider initialized: ${n}/${i}`)}}static createSharedWebSocket(t){if(ae.sharedWebSocketProvider)return console.warn("Shared WebSocket already exists. Returning existing instance."),ae.sharedWebSocketProvider;const e={url:t.url};return t.WebSocketPolyfill&&(e.WebSocketPolyfill=t.WebSocketPolyfill),t.onConnect&&(e.onConnect=t.onConnect),t.onDisconnect&&(e.onDisconnect=t.onDisconnect),t.onStatus&&(e.onStatus=t.onStatus),ae.sharedWebSocketProvider=new Qt(e),console.info("Shared Hocuspocus WebSocket created: "+t.url),ae.sharedWebSocketProvider}static destroySharedWebSocket(){ae.sharedWebSocketProvider&&(ae.sharedWebSocketProvider.destroy(),ae.sharedWebSocketProvider=null,console.info("Shared Hocuspocus WebSocket destroyed"))}static getSharedWebSocket(){return ae.sharedWebSocketProvider}static with(t){return{create:(e,s,i)=>{const n=i?{...t,...i}:t;return new ae(e,s,n)}}}async connect(){if(!this.isSynced)return new Promise(((t,e)=>{const s=setTimeout((()=>{e(Error("Hocuspocus connection timeout"))}),1e4),i=()=>{clearTimeout(s),this.provider.off("synced",i),t()};if(this.provider.on("synced",i),this.provider.isSynced)return clearTimeout(s),this.provider.off("synced",i),void t();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{M as BroadcastSyncProvider,ae as HocuspocusSyncProvider,P as WebSocketSyncProvider}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{p as t,H as e,c as s,h as o,d as i,t as r}from"./p-pebXO4LU.js";import{K as a,d as n}from"./p-BGQqz2Ds.js";import{S as l,j as c,f as h,g as p,i as d,h as u,k as m,l as k,m as b}from"./p-CQiJ2YUG.js";import{A as g,e as y,K as f,a as z,d as w,f as C}from"./p-CUg65XbS.js";import{D as j}from"./p-bWUahQFj.js";import{K as v}from"./p-jGOpkGDl.js";import{d as E}from"./p-CnQ7a1e-.js";import{d as x}from"./p-DVWXvsaq.js";import{d as S}from"./p-CT7393wO.js";import{d as O}from"./p-CL-FyXke.js";import{d as I}from"./p-DZze1aAU.js";import{d as W}from"./p-DbaQI0Ji.js";import{d as T}from"./p-C1oYQPkf.js";import{d as A}from"./p-COc0ML8P.js";import{d as R}from"./p-CV8cEq9m.js";import{d as B}from"./p-Dt-J69xt.js";import{d as V}from"./p-CnVzLD5e.js";import{d as D}from"./p-BP5LGarp.js";import{d as M}from"./p-Q8l2tydf.js";import{d as L}from"./p-VAkeZOZL.js";import{d as U}from"./p-smzbRw4q.js";import{d as F}from"./p-B5xYzHxm.js";import{d as P}from"./p-CFhp1W9F.js";import{d as G}from"./p-D6nmycST.js";import{d as J,a as K}from"./p-C3qb7mcP.js";import{d as q}from"./p-CDm49CBI.js";import{d as Q}from"./p--IzLAmAC.js";import{d as Y}from"./p-Bk1Ispbf.js";import{d as X}from"./p-XzgaXbc0.js";import{d as Z}from"./p-CZxHfZG_.js";import{d as N}from"./p-B-eU-Csy.js";import{d as H}from"./p-JdNoaqqb.js";import{d as _}from"./p-BYoeAny6.js";import{d as $}from"./p-CkLu89z5.js";import{d as tt}from"./p-EAOKZYjL.js";import{d as et}from"./p-Dptu13B1.js";import{d as st}from"./p-DQqLRcKD.js";import{d as ot}from"./p-CWTGmIwr.js";import{d as it}from"./p-D76tTGW4.js";import{d as rt}from"./p-CJe-9vrE.js";const at={type:"pen",color:j[0],size:16,palettes:{pen:[...j]}},nt={color:j[0],size:8,fontFamily:"Arial",palette:[...j]},lt={color:j[0],size:4,palette:[...j],arrows:{end:{enabled:!0,style:"triangle"}}},ct={shapeType:l.Rectangle,fillColor:{light:"transparent",dark:"transparent"},strokeColor:j[0],strokeWidth:4,fontColor:j[0],fontSize:16,fontFamily:"Arial",palette:[...j]},ht=t(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.isReady=s(this,"isReady"),this.activeWorkspaceChange=s(this,"activeWorkspaceChange"),this.objectsChange=s(this,"objectsChange"),this.objectsAdded=s(this,"objectsAdded"),this.objectsRemoved=s(this,"objectsRemoved"),this.objectsUpdated=s(this,"objectsUpdated"),this.undoStateChange=s(this,"undoStateChange"),this.themeChange=s(this,"themeChange"),this.viewportChange=s(this,"viewportChange"),this.logout=s(this,"logout"),this.linkShareChange=s(this,"linkShareChange")}get host(){return this}scaleMax=g;scaleMin=y;lockDrawingScale=!0;viewportBoundaryLeft=-1/0;viewportBoundaryRight=1/0;viewportBoundaryTop=-1/0;viewportBoundaryBottom=1/0;wheelEnabled=!0;user;activeUsers;controls=[{name:"selection",type:"tool",isDefault:!0,tool:c,icon:"cursor"},{name:"brush",type:"tool",tool:h,icon:"pen",config:at},{name:"eraser",type:"tool",tool:f,icon:"eraser"},{name:"line",type:"tool",tool:p,icon:"arrow",config:lt},{name:"shape",type:"tool",tool:d,icon:"shape-rectangle",config:ct,subOptions:[{id:"rectangle",icon:"shape-rectangle",label:"Rectangle",value:l.Rectangle,toolProperty:"shapeType"},{id:"ellipse",icon:"shape-ellipse",label:"Ellipse",value:l.Ellipse,toolProperty:"shapeType"},{id:"triangle",icon:"shape-triangle",label:"Triangle",value:l.Triangle,toolProperty:"shapeType"}]},{name:"text",type:"tool",tool:u,icon:"type",config:nt},{name:"image",type:"tool",tool:z,icon:"image"},{name:"config",type:"config"}];globalContextMenuItems=[{label:"Paste",icon:"paste",disabled:async()=>0===(await this.engineRef.getCopiedObjects()).length,action:t=>this.engineRef.paste(t.x,t.y)},{label:"Select All",icon:"select-all",disabled:async()=>0===(await this.engineRef.getObjectsInViewport()).length,action:()=>this.selectAllObjectsInViewport()}];objectContextMenuItems=[{label:"Copy",icon:"copy",group:"clipboard",action:()=>this.engineRef.copy()},{label:"Paste",icon:"paste",group:"clipboard",disabled:async()=>0===(await this.engineRef.getCopiedObjects()).length,action:t=>this.engineRef.paste(t.x,t.y)},{label:"Order",icon:"ordering",group:"other",children:[{label:"Bring to Front",icon:"bring-to-front",action:()=>this.engineRef.bringToFront()},{label:"Send to Back",icon:"send-to-back",action:()=>this.engineRef.sendToBack()},{label:"Move Up",icon:"arrow-up-from-dot",action:()=>this.engineRef.bringForward()},{label:"Move Down",icon:"arrow-down-from-dot",action:()=>this.engineRef.sendBackward()}]},{label:"Align",icon:"align",group:"other",disabled:async()=>(await this.engineRef.getSelectedObjects()).length<2,children:[{label:"Align Left",icon:"align-start-vertical",action:()=>this.engineRef.alignObjects(w.StartHorizontal)},{label:"Align Center Horizontally",icon:"align-center-horizontal",action:()=>this.engineRef.alignObjects(w.CenterHorizontal)},{label:"Align Right",icon:"align-end-vertical",action:()=>this.engineRef.alignObjects(w.EndHorizontal)},{label:"Align Top",icon:"align-start-horizontal",action:()=>this.engineRef.alignObjects(w.StartVertical)},{label:"Align Center Vertically",icon:"align-center-vertical",action:()=>this.engineRef.alignObjects(w.CenterVertical)},{label:"Align Bottom",icon:"align-end-horizontal",action:()=>this.engineRef.alignObjects(w.EndVertical)}]},{label:"Group",icon:"group",group:"other",children:[{label:"Group",icon:"group",disabled:async()=>(await this.engineRef.getSelectedObjects()).length<2,action:()=>this.engineRef.group()},{label:"Ungroup",icon:"ungroup",disabled:async()=>!(await this.engineRef.getSelectedObjects()).some((t=>"KritzelGroup"===t.__class__)),action:()=>this.engineRef.ungroup()}]},{label:"Export",icon:"download",group:"export",children:[{label:"Export as SVG",icon:"download",action:()=>this.engineRef.exportSelectedObjectsAsSvg()},{label:"Export as PNG",icon:"download",action:()=>this.engineRef.exportSelectedObjectsAsPng()}]},{label:"Delete",icon:"delete",group:"edit",action:()=>this.engineRef.delete()}];customSvgIcons={};isControlsVisible=!0;isUtilityPanelVisible=!0;syncConfig;editorId;activeWorkspaceId;isReady;activeWorkspaceChange;objectsChange;objectsAdded;objectsRemoved;objectsUpdated;undoStateChange;themeChange;viewportChange;logout;linkShareChange;isEngineReady=!1;isControlsReady=!1;isWorkspaceManagerReady=!1;workspaces=[];activeWorkspace;isVirtualKeyboardOpen=!1;undoState=null;isBackToContentButtonVisible=!1;currentTheme="light";shortcuts=[];currentLinkShare=null;onIsEngineReady(t){t&&this.isControlsReady&&this.checkIsReady()}onIsControlsReady(t){t&&this.isEngineReady&&this.checkIsReady()}onWorkspacesChange(t){if(this.activeWorkspace){const e=t.find((t=>t.id===this.activeWorkspace.id));e&&e!==this.activeWorkspace&&(this.activeWorkspace=e)}if(this.activeWorkspaceId){const e=t.find((t=>t.id===this.activeWorkspaceId));e&&e!==this.activeWorkspace&&(this.activeWorkspace=e)}}onActiveWorkspaceChange(){this.updateCurrentLinkShare()}onActiveWorkspaceIdChange(t){if(!t)return;if(0===this.workspaces.length)return;const e=this.workspaces.find((e=>e.id===t));e?e!==this.activeWorkspace&&(this.activeWorkspace=e):console.warn("[KritzelEditor] No workspace found with ID: "+t)}onCurrentThemeChange(){setTimeout((()=>this.setOsSpecificCssVariables()),0)}onTouchStart(t){t.cancelable&&t.preventDefault()}async getObjectById(t){return this.engineRef.getObjectById(t)}async addObject(t){return this.engineRef.addObject(t)}async updateObject(t,e){return this.engineRef.updateObject(t,e)}async removeObject(t){return this.engineRef.removeObject(t)}async getSelectedObjects(){return this.engineRef.getSelectedObjects()}async selectObjects(t){return this.engineRef.selectObjects(t)}async selectAllObjectsInViewport(){return this.engineRef.selectAllObjectsInViewport()}async clearSelection(){this.engineRef.clearSelection()}async centerObjectInViewport(t){return this.engineRef.centerObjectInViewport(t)}async backToContent(){return this.engineRef.backToContent()}async centerAllObjects(t=!0){return this.engineRef.centerAllObjects(t)}async setViewport(t,e,s){return this.engineRef.setViewport(t,e,s)}async panTo(t,e){return this.engineRef.panTo(t,e)}async zoomTo(t,e,s){return this.engineRef.zoomTo(t,e,s)}async getViewport(){return this.engineRef.getViewport()}async screenToWorld(t,e){return this.engineRef.screenToWorld(t,e)}async worldToScreen(t,e){return this.engineRef.worldToScreen(t,e)}async createWorkspace(t){return this.engineRef.createWorkspace(t)}async updateWorkspace(t){return this.engineRef.updateWorkspace(t)}async deleteWorkspace(t){return this.engineRef.deleteWorkspace(t)}async getWorkspaces(){return this.engineRef.getWorkspaces()}async getActiveWorkspace(){return this.engineRef.getActiveWorkspace()}async loadSharedWorkspace(t){return this.engineRef.loadSharedWorkspace(t)}async registerTool(t,e,s){return this.engineRef.registerTool(t,e,s)}async changeActiveTool(t){return this.engineRef.changeActiveTool(t)}async disable(){return this.engineRef.disable()}async enable(){return this.engineRef.enable()}async copy(){return this.engineRef.copy()}async paste(t,e){return this.engineRef.paste(t,e)}async delete(){return this.engineRef.delete()}async bringForward(t){return this.engineRef.bringForward(t)}async sendBackward(t){return this.engineRef.sendBackward(t)}async bringToFront(t){return this.engineRef.bringToFront(t)}async sendToBack(t){return this.engineRef.sendToBack(t)}async alignObjects(t){return this.engineRef.alignObjects(t)}async group(){return this.engineRef.group()}async ungroup(){return this.engineRef.ungroup()}async undo(){return this.engineRef.undo()}async redo(){return this.engineRef.redo()}async getScreenshot(t="png"){return this.engineRef.getScreenshot(t)}async exportViewportAsPng(){return this.engineRef.exportViewportAsPng()}async exportViewportAsSvg(){return this.engineRef.exportViewportAsSvg()}async downloadAsJson(t){return this.engineRef.downloadAsJson(t)}async importFromFile(){return this.engineRef.importFromFile()}async loadObjectsFromJson(t){return this.engineRef.loadObjectsFromJson(t)}async getObjectsTotalCount(){return this.engineRef.getObjectsTotalCount()}async getAllObjects(){return this.engineRef.getAllObjects()}async findObjects(t){return this.engineRef.findObjects(t)}async getCopiedObjects(){return this.engineRef.getCopiedObjects()}async getObjectsInViewport(){return this.engineRef.getObjectsInViewport()}async hideContextMenu(){return this.engineRef.hideContextMenu()}async triggerSelectionChange(){return this.engineRef.triggerSelectionChange()}async getDisplayableShortcuts(){return this.engineRef.getDisplayableShortcuts()}engineRef;controlsRef;settingsRef;exportRef;splitButtonRef;shareDialogRef;componentWillLoad(){this.loadSettingsFromStorage()}componentDidLoad(){this.registerCustomSvgIcons(),this.listenForMobileKeyboard(),this.setOsSpecificCssVariables()}async checkIsReady(){await customElements.whenDefined("kritzel-editor"),await customElements.whenDefined("kritzel-workspace-manager"),await customElements.whenDefined("kritzel-controls"),await customElements.whenDefined("kritzel-engine"),this.isEngineReady&&this.isControlsReady&&this.isWorkspaceManagerReady&&this.isReady.emit(this.host)}async onEngineReady(t){this.isEngineReady=!0,this.activeWorkspace=t.detail.activeWorkspace,this.workspaces=t.detail.workspaces,this.currentLinkShare=await this.engineRef.getLinkShare(),this.loadShortcuts()}handleWorkspacesChange(t){this.workspaces=t.detail}handleActiveWorkspaceChange(t){t.stopPropagation(),this.activeWorkspace=t.detail,this.activeWorkspaceChange.emit(this.activeWorkspace)}handleObjectsChange(t){this.objectsChange.emit(t.detail)}handleObjectsAdded(t){this.objectsAdded.emit(t.detail)}handleObjectsRemoved(t){this.objectsRemoved.emit(t.detail)}handleObjectsUpdated(t){this.objectsUpdated.emit(t.detail)}handleUndoStateChange(t){this.undoStateChange.emit(t.detail),this.undoState=t.detail}async handleObjectsInViewportChange(t){const e=this.getContentObjects(t.detail).length>0,s=this.getContentObjects(await this.engineRef.getAllObjects()).length>0;this.isBackToContentButtonVisible=!e&&s}handleViewportChange(t){this.viewportChange.emit(t.detail)}handleSettingsChange(t){this.scaleMin=t.detail.scaleMin,this.scaleMax=t.detail.scaleMax,this.lockDrawingScale=t.detail.lockDrawingScale,this.currentTheme=t.detail.theme,this.viewportBoundaryLeft=t.detail.viewportBoundaryLeft??-1/0,this.viewportBoundaryRight=t.detail.viewportBoundaryRight??1/0,this.viewportBoundaryTop=t.detail.viewportBoundaryTop??-1/0,this.viewportBoundaryBottom=t.detail.viewportBoundaryBottom??1/0,this.themeChange.emit(t.detail.theme)}async handleMoreMenuItemSelect(t){const{item:e}=t.detail;if("share"===e.id&&this.shareDialogRef.open(),"settings"===e.id&&this.settingsRef.open(),"export"===e.id){const t=await this.engineRef.getScreenshot("png");this.exportRef.open(t)}"download"===e.id&&await this.engineRef.downloadAsJson(),"import"===e.id&&await this.engineRef.importFromFile()}handleToggleLinkShare=async t=>{const{enabled:e,permission:s}=t.detail;await this.engineRef.setLinkSharingEnabled(e,s),this.currentLinkShare=await this.engineRef.getLinkShare(),this.linkShareChange.emit({linkShare:this.currentLinkShare,workspaceId:this.activeWorkspace?.id})};handleSharePermissionChange=async t=>{await this.engineRef.setSharePermission(t.detail),this.currentLinkShare=await this.engineRef.getLinkShare(),this.linkShareChange.emit({linkShare:this.currentLinkShare,workspaceId:this.activeWorkspace?.id})};updateCurrentLinkShare(){const t=this.activeWorkspace?.linkShare??null,e=this.activeWorkspace?.id;this.currentLinkShare=t,this.linkShareChange.emit({linkShare:t,workspaceId:e})}handleCurrentUserItemSelect(t){const{item:e}=t.detail;"logout"===e.id&&this.logout.emit()}getSettingsStorageKey(){return this.editorId?"kritzel-settings-"+this.editorId:"kritzel-settings"}loadSettingsFromStorage(){const t=localStorage.getItem(this.getSettingsStorageKey());if(t)try{const e=JSON.parse(t);"number"==typeof e.scaleMin&&(this.scaleMin=e.scaleMin),"number"==typeof e.scaleMax&&(this.scaleMax=e.scaleMax),"boolean"==typeof e.lockDrawingScale&&(this.lockDrawingScale=e.lockDrawingScale),"light"!==e.theme&&"dark"!==e.theme||(this.currentTheme=e.theme),"number"==typeof e.viewportBoundaryLeft&&(this.viewportBoundaryLeft=e.viewportBoundaryLeft),"number"==typeof e.viewportBoundaryRight&&(this.viewportBoundaryRight=e.viewportBoundaryRight),"number"==typeof e.viewportBoundaryTop&&(this.viewportBoundaryTop=e.viewportBoundaryTop),"number"==typeof e.viewportBoundaryBottom&&(this.viewportBoundaryBottom=e.viewportBoundaryBottom)}catch{}}async loadShortcuts(){this.shortcuts=await this.engineRef.getDisplayableShortcuts()}getContentObjects(t){return t.filter((t=>!(t instanceof m||t instanceof k)))}registerCustomSvgIcons(){for(const[t,e]of Object.entries(this.customSvgIcons))a.register(t,e)}listenForMobileKeyboard(){b.onKeyboardVisibleChanged((t=>{this.isVirtualKeyboardOpen=t}))}setOsSpecificCssVariables(){switch(v.detectOS()){case"iOS":this.host.style.setProperty("--kritzel-editor-top-left-buttons-top","14px"),this.host.style.setProperty("--kritzel-editor-top-left-buttons-left","14px"),this.host.style.setProperty("--kritzel-editor-controls-bottom","14px"),this.host.style.setProperty("--kritzel-editor-controls-transition","cubic-bezier(0.25, 0.1, 0.25, 1.0)"),this.host.style.setProperty("--kritzel-editor-controls-transform","translateY(200%)"),this.host.style.setProperty("--kritzel-editor-controls-transition-duration","0.25s");break;case"Android":this.host.style.setProperty("--kritzel-editor-top-left-buttons-top","14px"),this.host.style.setProperty("--kritzel-editor-top-left-buttons-left","14px"),this.host.style.setProperty("--kritzel-editor-controls-bottom","24px"),this.host.style.setProperty("--kritzel-editor-controls-transition","cubic-bezier(0.25, 0.1, 0.25, 1.0)"),this.host.style.setProperty("--kritzel-editor-controls-transform","translateY(200%)"),this.host.style.setProperty("--kritzel-editor-controls-transition-duration","0.25s");break;default:this.host.style.setProperty("--kritzel-editor-top-left-buttons-top","14px"),this.host.style.setProperty("--kritzel-editor-top-left-buttons-left","14px"),this.host.style.setProperty("--kritzel-editor-controls-bottom","14px")}}render(){return o(i,{key:"90a91249e483f27f52c6677483793a00e78e7488"},o("div",{key:"be2392052be658194bc00c029abe883ce3fb4a79",class:"top-left-buttons"},o("kritzel-workspace-manager",{key:"3e0a4004dccbada37f1008c77ac143e453714db5",workspaces:this.workspaces,activeWorkspace:this.activeWorkspace,onWorkspaceChange:t=>this.activeWorkspace=t.detail,onIsWorkspaceManagerReady:()=>this.isWorkspaceManagerReady=!0}),o("kritzel-back-to-content",{key:"f6d11f6e0bc0a0be10bab2c5757fadd18d0a305c",visible:this.isBackToContentButtonVisible,onBackToContent:()=>this.backToContent()})),o("kritzel-engine",{key:"a5720d2e7d7a2e257f17fd0e68a53d33b4bef711",ref:t=>this.engineRef=t,workspace:this.activeWorkspace,activeWorkspaceId:this.activeWorkspaceId,editorId:this.editorId,syncConfig:this.syncConfig,scaleMax:this.scaleMax,lockDrawingScale:this.lockDrawingScale,scaleMin:this.scaleMin,viewportBoundaryLeft:this.viewportBoundaryLeft,viewportBoundaryRight:this.viewportBoundaryRight,viewportBoundaryTop:this.viewportBoundaryTop,viewportBoundaryBottom:this.viewportBoundaryBottom,wheelEnabled:this.wheelEnabled,theme:this.currentTheme,globalContextMenuItems:this.globalContextMenuItems,objectContextMenuItems:this.objectContextMenuItems,onIsEngineReady:t=>this.onEngineReady(t),onWorkspacesChange:t=>this.handleWorkspacesChange(t),onActiveWorkspaceChange:t=>this.handleActiveWorkspaceChange(t),onObjectsChange:t=>this.handleObjectsChange(t),onObjectsAdded:t=>this.handleObjectsAdded(t),onObjectsRemoved:t=>this.handleObjectsRemoved(t),onObjectsUpdated:t=>this.handleObjectsUpdated(t),onUndoStateChange:t=>this.handleUndoStateChange(t),onObjectsInViewportChange:t=>this.handleObjectsInViewportChange(t),onViewportChange:t=>this.handleViewportChange(t)}),o("kritzel-controls",{key:"1324b903ea3cc8296467465a9524b812e65dd627",class:{"keyboard-open":this.isVirtualKeyboardOpen},style:{display:this.isControlsVisible?"flex":"none"},ref:t=>this.controlsRef=t,controls:this.controls,isUtilityPanelVisible:this.isUtilityPanelVisible,undoState:this.undoState,theme:this.currentTheme,onIsControlsReady:()=>this.isControlsReady=!0}),o("div",{key:"7b535fd7cd96bf64f64011b7cc30f8bd471b3bb6",class:"top-right-buttons"},o("kritzel-settings",{key:"483995f3e3b81a381828d9dd0d2e25afb8a48966",ref:t=>this.settingsRef=t,shortcuts:this.shortcuts,editorId:this.editorId,onSettingsChange:t=>this.handleSettingsChange(t)}),o("kritzel-export",{key:"8697a908a01a0cf6143b3822c232afd047e389a5",ref:t=>this.exportRef=t,workspaceName:this.activeWorkspace?.name||"workspace",onExportPng:()=>this.engineRef.exportViewportAsPng(),onExportSvg:()=>this.engineRef.exportViewportAsSvg(),onExportJson:t=>this.engineRef.downloadAsJson(t.detail)}),o("kritzel-active-users",{key:"85a54896088999df529e70d524c775e92dcf5e6b",users:this.activeUsers}),o("kritzel-current-user",{key:"cbcd428a95c2ab260f5fe175e75bbf9018de5c21",user:this.user,onItemSelect:t=>this.handleCurrentUserItemSelect(t)}),o("kritzel-more-menu",{key:"972cc8721173cb2ed8ba448d9690e31e0a9321e1",onItemSelect:t=>this.handleMoreMenuItemSelect(t)}),o("kritzel-share-dialog",{key:"3c5e325ca58af4f5c09e25bf8e059471f5e178d1",ref:t=>this.shareDialogRef=t,linkShare:this.currentLinkShare,workspaceId:this.activeWorkspace?.id,onToggleLinkShare:this.handleToggleLinkShare,onPermissionChange:this.handleSharePermissionChange})))}static get watchers(){return{isEngineReady:[{onIsEngineReady:0}],isControlsReady:[{onIsControlsReady:0}],workspaces:[{onWorkspacesChange:0}],activeWorkspace:[{onActiveWorkspaceChange:0}],activeWorkspaceId:[{onActiveWorkspaceIdChange:0}],currentTheme:[{onCurrentThemeChange:0}]}}static get style(){return"kritzel-editor{display:flex;margin:0;position:relative;overflow:hidden;width:100%;height:100%;align-items:center;justify-content:center;touch-action:manipulation;user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}kritzel-workspace-manager{}kritzel-controls{position:absolute;bottom:var(--kritzel-editor-controls-bottom, 14px);transition:transform var(--kritzel-editor-controls-transition-duration, 0.1s) var(--kritzel-editor-controls-transition, ease-in-out)}kritzel-controls.keyboard-open{transform:var(--kritzel-editor-controls-transform, translateY(300%))}.top-left-buttons{position:absolute;top:var(--kritzel-editor-top-left-buttons-top, 14px);left:var(--kritzel-editor-top-left-buttons-left, 14px);display:flex;align-items:flex-start;gap:8px}.top-right-buttons{position:absolute;top:var(--kritzel-editor-top-right-buttons-top, 14px);right:var(--kritzel-editor-top-right-buttons-right, 14px);display:flex;align-items:center;gap:8px}.top-right-button{display:flex;align-items:center;justify-content:center;width:50px;height:50px;padding:0;border:var(--kritzel-split-button-border, 1px solid #ebebeb);border-radius:var(--kritzel-split-button-border-radius, 12px);background-color:var(--kritzel-split-button-background-color, #ffffff);cursor:var(--kritzel-global-pointer-cursor, pointer);box-shadow:var(--kritzel-split-button-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));transition:background-color 150ms ease;-webkit-tap-highlight-color:transparent}.top-right-button:hover{background-color:#f5f5f5}.top-right-button:active{background-color:#ebebeb}"}},[512,"kritzel-editor",{scaleMax:[1026,"scale-max"],scaleMin:[1026,"scale-min"],lockDrawingScale:[1028,"lock-drawing-scale"],viewportBoundaryLeft:[1026,"viewport-boundary-left"],viewportBoundaryRight:[1026,"viewport-boundary-right"],viewportBoundaryTop:[1026,"viewport-boundary-top"],viewportBoundaryBottom:[1026,"viewport-boundary-bottom"],wheelEnabled:[1028,"wheel-enabled"],user:[16],activeUsers:[16],controls:[16],globalContextMenuItems:[16],objectContextMenuItems:[16],customSvgIcons:[16],isControlsVisible:[4,"is-controls-visible"],isUtilityPanelVisible:[4,"is-utility-panel-visible"],syncConfig:[16],editorId:[1,"editor-id"],activeWorkspaceId:[1,"active-workspace-id"],isEngineReady:[32],isControlsReady:[32],isWorkspaceManagerReady:[32],workspaces:[32],activeWorkspace:[32],isVirtualKeyboardOpen:[32],undoState:[32],isBackToContentButtonVisible:[32],currentTheme:[32],shortcuts:[32],currentLinkShare:[32],getObjectById:[64],addObject:[64],updateObject:[64],removeObject:[64],getSelectedObjects:[64],selectObjects:[64],selectAllObjectsInViewport:[64],clearSelection:[64],centerObjectInViewport:[64],backToContent:[64],centerAllObjects:[64],setViewport:[64],panTo:[64],zoomTo:[64],getViewport:[64],screenToWorld:[64],worldToScreen:[64],createWorkspace:[64],updateWorkspace:[64],deleteWorkspace:[64],getWorkspaces:[64],getActiveWorkspace:[64],loadSharedWorkspace:[64],registerTool:[64],changeActiveTool:[64],disable:[64],enable:[64],copy:[64],paste:[64],delete:[64],bringForward:[64],sendBackward:[64],bringToFront:[64],sendToBack:[64],alignObjects:[64],group:[64],ungroup:[64],undo:[64],redo:[64],getScreenshot:[64],exportViewportAsPng:[64],exportViewportAsSvg:[64],downloadAsJson:[64],importFromFile:[64],loadObjectsFromJson:[64],getObjectsTotalCount:[64],getAllObjects:[64],findObjects:[64],getCopiedObjects:[64],getObjectsInViewport:[64],hideContextMenu:[64],triggerSelectionChange:[64],getDisplayableShortcuts:[64]},[[0,"dblclick","onTouchStart"]],{isEngineReady:[{onIsEngineReady:0}],isControlsReady:[{onIsControlsReady:0}],workspaces:[{onWorkspacesChange:0}],activeWorkspace:[{onActiveWorkspaceChange:0}],activeWorkspaceId:[{onActiveWorkspaceIdChange:0}],currentTheme:[{onCurrentThemeChange:0}]}]),pt=ht,dt=function(){"undefined"!=typeof customElements&&["kritzel-editor","kritzel-active-users","kritzel-avatar","kritzel-back-to-content","kritzel-color","kritzel-color-palette","kritzel-context-menu","kritzel-controls","kritzel-current-user","kritzel-cursor-trail","kritzel-dialog","kritzel-dropdown","kritzel-engine","kritzel-export","kritzel-font","kritzel-font-family","kritzel-font-size","kritzel-icon","kritzel-input","kritzel-line-endings","kritzel-master-detail","kritzel-menu","kritzel-menu-item","kritzel-more-menu","kritzel-numeric-input","kritzel-opacity-slider","kritzel-pill-tabs","kritzel-portal","kritzel-settings","kritzel-shape-fill","kritzel-share-dialog","kritzel-slide-toggle","kritzel-split-button","kritzel-stroke-size","kritzel-tool-config","kritzel-tooltip","kritzel-utility-panel","kritzel-workspace-manager"].forEach((t=>{switch(t){case"kritzel-editor":customElements.get(r(t))||customElements.define(r(t),ht);break;case"kritzel-active-users":customElements.get(r(t))||E();break;case"kritzel-avatar":customElements.get(r(t))||x();break;case"kritzel-back-to-content":customElements.get(r(t))||S();break;case"kritzel-color":customElements.get(r(t))||O();break;case"kritzel-color-palette":customElements.get(r(t))||I();break;case"kritzel-context-menu":customElements.get(r(t))||W();break;case"kritzel-controls":customElements.get(r(t))||T();break;case"kritzel-current-user":customElements.get(r(t))||A();break;case"kritzel-cursor-trail":customElements.get(r(t))||R();break;case"kritzel-dialog":customElements.get(r(t))||B();break;case"kritzel-dropdown":customElements.get(r(t))||V();break;case"kritzel-engine":customElements.get(r(t))||C();break;case"kritzel-export":customElements.get(r(t))||D();break;case"kritzel-font":customElements.get(r(t))||M();break;case"kritzel-font-family":customElements.get(r(t))||L();break;case"kritzel-font-size":customElements.get(r(t))||U();break;case"kritzel-icon":customElements.get(r(t))||n();break;case"kritzel-input":customElements.get(r(t))||F();break;case"kritzel-line-endings":customElements.get(r(t))||P();break;case"kritzel-master-detail":customElements.get(r(t))||G();break;case"kritzel-menu":customElements.get(r(t))||K();break;case"kritzel-menu-item":customElements.get(r(t))||J();break;case"kritzel-more-menu":customElements.get(r(t))||q();break;case"kritzel-numeric-input":customElements.get(r(t))||Q();break;case"kritzel-opacity-slider":customElements.get(r(t))||Y();break;case"kritzel-pill-tabs":customElements.get(r(t))||X();break;case"kritzel-portal":customElements.get(r(t))||Z();break;case"kritzel-settings":customElements.get(r(t))||N();break;case"kritzel-shape-fill":customElements.get(r(t))||H();break;case"kritzel-share-dialog":customElements.get(r(t))||_();break;case"kritzel-slide-toggle":customElements.get(r(t))||$();break;case"kritzel-split-button":customElements.get(r(t))||tt();break;case"kritzel-stroke-size":customElements.get(r(t))||et();break;case"kritzel-tool-config":customElements.get(r(t))||st();break;case"kritzel-tooltip":customElements.get(r(t))||ot();break;case"kritzel-utility-panel":customElements.get(r(t))||it();break;case"kritzel-workspace-manager":customElements.get(r(t))||rt()}}))};export{at as D,pt as KritzelEditor,nt as a,lt as b,dt as defineCustomElement}
|
|
1
|
+
import{p as t,H as e,c as s,h as o,d as i,t as r}from"./p-pebXO4LU.js";import{K as a,d as n}from"./p-BGQqz2Ds.js";import{S as l,j as c,f as h,g as p,i as d,h as u,k as m,l as k,m as b}from"./p-CQiJ2YUG.js";import{A as g,e as y,K as f,a as z,d as w,f as C}from"./p--X34FIIn.js";import{D as j}from"./p-bWUahQFj.js";import{K as v}from"./p-jGOpkGDl.js";import{d as E}from"./p-CnQ7a1e-.js";import{d as x}from"./p-DVWXvsaq.js";import{d as S}from"./p-CT7393wO.js";import{d as I}from"./p-CL-FyXke.js";import{d as O}from"./p-DZze1aAU.js";import{d as W}from"./p-DbaQI0Ji.js";import{d as T}from"./p-C1oYQPkf.js";import{d as A}from"./p-COc0ML8P.js";import{d as R}from"./p-CV8cEq9m.js";import{d as B}from"./p-Dt-J69xt.js";import{d as V}from"./p-CnVzLD5e.js";import{d as D}from"./p-BP5LGarp.js";import{d as M}from"./p-Q8l2tydf.js";import{d as L}from"./p-VAkeZOZL.js";import{d as F}from"./p-smzbRw4q.js";import{d as P}from"./p-B5xYzHxm.js";import{d as U}from"./p-CFhp1W9F.js";import{d as G}from"./p-D6nmycST.js";import{d as J,a as K}from"./p-C3qb7mcP.js";import{d as q}from"./p-CDm49CBI.js";import{d as Q}from"./p--IzLAmAC.js";import{d as Y}from"./p-Bk1Ispbf.js";import{d as N}from"./p-XzgaXbc0.js";import{d as X}from"./p-CZxHfZG_.js";import{d as Z}from"./p-DfcTNrtM.js";import{d as H}from"./p-JdNoaqqb.js";import{d as _}from"./p-BYoeAny6.js";import{d as $}from"./p-CkLu89z5.js";import{d as tt}from"./p-EAOKZYjL.js";import{d as et}from"./p-Dptu13B1.js";import{d as st}from"./p-DQqLRcKD.js";import{d as ot}from"./p-CWTGmIwr.js";import{d as it}from"./p-D76tTGW4.js";import{d as rt}from"./p-CJe-9vrE.js";const at={type:"pen",color:j[0],size:16,palettes:{pen:[...j]}},nt={color:j[0],size:8,fontFamily:"Arial",palette:[...j]},lt={color:j[0],size:4,palette:[...j],arrows:{end:{enabled:!0,style:"triangle"}}},ct={shapeType:l.Rectangle,fillColor:{light:"transparent",dark:"transparent"},strokeColor:j[0],strokeWidth:4,fontColor:j[0],fontSize:16,fontFamily:"Arial",palette:[...j]},ht=t(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.isReady=s(this,"isReady"),this.activeWorkspaceChange=s(this,"activeWorkspaceChange"),this.objectsChange=s(this,"objectsChange"),this.objectsAdded=s(this,"objectsAdded"),this.objectsRemoved=s(this,"objectsRemoved"),this.objectsUpdated=s(this,"objectsUpdated"),this.undoStateChange=s(this,"undoStateChange"),this.themeChange=s(this,"themeChange"),this.viewportChange=s(this,"viewportChange"),this.logout=s(this,"logout"),this.linkShareChange=s(this,"linkShareChange")}get host(){return this}scaleMax=g;scaleMin=y;lockDrawingScale=!0;viewportBoundaryLeft=-1/0;viewportBoundaryRight=1/0;viewportBoundaryTop=-1/0;viewportBoundaryBottom=1/0;wheelEnabled=!0;user;activeUsers;controls=[{name:"selection",type:"tool",isDefault:!0,tool:c,icon:"cursor"},{name:"brush",type:"tool",tool:h,icon:"pen",config:at},{name:"eraser",type:"tool",tool:f,icon:"eraser"},{name:"line",type:"tool",tool:p,icon:"arrow",config:lt},{name:"shape",type:"tool",tool:d,icon:"shape-rectangle",config:ct,subOptions:[{id:"rectangle",icon:"shape-rectangle",label:"Rectangle",value:l.Rectangle,toolProperty:"shapeType"},{id:"ellipse",icon:"shape-ellipse",label:"Ellipse",value:l.Ellipse,toolProperty:"shapeType"},{id:"triangle",icon:"shape-triangle",label:"Triangle",value:l.Triangle,toolProperty:"shapeType"}]},{name:"text",type:"tool",tool:u,icon:"type",config:nt},{name:"image",type:"tool",tool:z,icon:"image"},{name:"config",type:"config"}];globalContextMenuItems=[{label:"Paste",icon:"paste",disabled:async()=>0===(await this.engineRef.getCopiedObjects()).length,action:t=>this.engineRef.paste(t.x,t.y)},{label:"Select All",icon:"select-all",disabled:async()=>0===(await this.engineRef.getObjectsInViewport()).length,action:()=>this.selectAllObjectsInViewport()}];objectContextMenuItems=[{label:"Copy",icon:"copy",group:"clipboard",action:()=>this.engineRef.copy()},{label:"Paste",icon:"paste",group:"clipboard",disabled:async()=>0===(await this.engineRef.getCopiedObjects()).length,action:t=>this.engineRef.paste(t.x,t.y)},{label:"Order",icon:"ordering",group:"other",children:[{label:"Bring to Front",icon:"bring-to-front",action:()=>this.engineRef.bringToFront()},{label:"Send to Back",icon:"send-to-back",action:()=>this.engineRef.sendToBack()},{label:"Move Up",icon:"arrow-up-from-dot",action:()=>this.engineRef.bringForward()},{label:"Move Down",icon:"arrow-down-from-dot",action:()=>this.engineRef.sendBackward()}]},{label:"Align",icon:"align",group:"other",disabled:async()=>(await this.engineRef.getSelectedObjects()).length<2,children:[{label:"Align Left",icon:"align-start-vertical",action:()=>this.engineRef.alignObjects(w.StartHorizontal)},{label:"Align Center Horizontally",icon:"align-center-horizontal",action:()=>this.engineRef.alignObjects(w.CenterHorizontal)},{label:"Align Right",icon:"align-end-vertical",action:()=>this.engineRef.alignObjects(w.EndHorizontal)},{label:"Align Top",icon:"align-start-horizontal",action:()=>this.engineRef.alignObjects(w.StartVertical)},{label:"Align Center Vertically",icon:"align-center-vertical",action:()=>this.engineRef.alignObjects(w.CenterVertical)},{label:"Align Bottom",icon:"align-end-horizontal",action:()=>this.engineRef.alignObjects(w.EndVertical)}]},{label:"Group",icon:"group",group:"other",children:[{label:"Group",icon:"group",disabled:async()=>(await this.engineRef.getSelectedObjects()).length<2,action:()=>this.engineRef.group()},{label:"Ungroup",icon:"ungroup",disabled:async()=>!(await this.engineRef.getSelectedObjects()).some((t=>"KritzelGroup"===t.__class__)),action:()=>this.engineRef.ungroup()}]},{label:"Export",icon:"download",group:"export",children:[{label:"Export as SVG",icon:"download",action:()=>this.engineRef.exportSelectedObjectsAsSvg()},{label:"Export as PNG",icon:"download",action:()=>this.engineRef.exportSelectedObjectsAsPng()}]},{label:"Delete",icon:"delete",group:"edit",action:()=>this.engineRef.delete()}];customSvgIcons={};isControlsVisible=!0;isUtilityPanelVisible=!0;syncConfig;editorId;activeWorkspaceId;isReady;activeWorkspaceChange;objectsChange;objectsAdded;objectsRemoved;objectsUpdated;undoStateChange;themeChange;viewportChange;logout;linkShareChange;isEngineReady=!1;isControlsReady=!1;isWorkspaceManagerReady=!1;workspaces=[];activeWorkspace;isVirtualKeyboardOpen=!1;undoState=null;isBackToContentButtonVisible=!1;currentTheme="light";shortcuts=[];currentLinkShare=null;onIsEngineReady(t){t&&this.isControlsReady&&this.checkIsReady()}onIsControlsReady(t){t&&this.isEngineReady&&this.checkIsReady()}onWorkspacesChange(t){if(this.activeWorkspace){const e=t.find((t=>t.id===this.activeWorkspace.id));e&&e!==this.activeWorkspace&&(this.activeWorkspace=e)}if(this.activeWorkspaceId){const e=t.find((t=>t.id===this.activeWorkspaceId));e&&e!==this.activeWorkspace&&(this.activeWorkspace=e)}}onActiveWorkspaceChange(){this.updateCurrentLinkShare()}onActiveWorkspaceIdChange(t){if(!t)return;if(0===this.workspaces.length)return;const e=this.workspaces.find((e=>e.id===t));e?e!==this.activeWorkspace&&(this.activeWorkspace=e):console.warn("[KritzelEditor] No workspace found with ID: "+t)}onCurrentThemeChange(){setTimeout((()=>this.setOsSpecificCssVariables()),0)}onTouchStart(t){t.cancelable&&t.preventDefault()}async getObjectById(t){return this.engineRef.getObjectById(t)}async addObject(t){return this.engineRef.addObject(t)}async updateObject(t,e){return this.engineRef.updateObject(t,e)}async removeObject(t){return this.engineRef.removeObject(t)}async getSelectedObjects(){return this.engineRef.getSelectedObjects()}async selectObjects(t){return this.engineRef.selectObjects(t)}async selectAllObjectsInViewport(){return this.engineRef.selectAllObjectsInViewport()}async clearSelection(){this.engineRef.clearSelection()}async centerObjectInViewport(t){return this.engineRef.centerObjectInViewport(t)}async backToContent(){return this.engineRef.backToContent()}async centerAllObjects(t=!0){return this.engineRef.centerAllObjects(t)}async setViewport(t,e,s){return this.engineRef.setViewport(t,e,s)}async panTo(t,e){return this.engineRef.panTo(t,e)}async zoomTo(t,e,s){return this.engineRef.zoomTo(t,e,s)}async getViewport(){return this.engineRef.getViewport()}async screenToWorld(t,e){return this.engineRef.screenToWorld(t,e)}async worldToScreen(t,e){return this.engineRef.worldToScreen(t,e)}async createWorkspace(t){return this.engineRef.createWorkspace(t)}async updateWorkspace(t){return this.engineRef.updateWorkspace(t)}async deleteWorkspace(t){return this.engineRef.deleteWorkspace(t)}async getWorkspaces(){return this.engineRef.getWorkspaces()}async getActiveWorkspace(){return this.engineRef.getActiveWorkspace()}async loadSharedWorkspace(t){return this.engineRef.loadSharedWorkspace(t)}async registerTool(t,e,s){return this.engineRef.registerTool(t,e,s)}async changeActiveTool(t){return this.engineRef.changeActiveTool(t)}async disable(){return this.engineRef.disable()}async enable(){return this.engineRef.enable()}async copy(){return this.engineRef.copy()}async paste(t,e){return this.engineRef.paste(t,e)}async delete(){return this.engineRef.delete()}async bringForward(t){return this.engineRef.bringForward(t)}async sendBackward(t){return this.engineRef.sendBackward(t)}async bringToFront(t){return this.engineRef.bringToFront(t)}async sendToBack(t){return this.engineRef.sendToBack(t)}async alignObjects(t){return this.engineRef.alignObjects(t)}async group(){return this.engineRef.group()}async ungroup(){return this.engineRef.ungroup()}async undo(){return this.engineRef.undo()}async redo(){return this.engineRef.redo()}async getScreenshot(t="png"){return this.engineRef.getScreenshot(t)}async exportViewportAsPng(){return this.engineRef.exportViewportAsPng()}async exportViewportAsSvg(){return this.engineRef.exportViewportAsSvg()}async downloadAsJson(t){return this.engineRef.downloadAsJson(t)}async importFromFile(){return this.engineRef.importFromFile()}async loadObjectsFromJson(t){return this.engineRef.loadObjectsFromJson(t)}async getObjectsTotalCount(){return this.engineRef.getObjectsTotalCount()}async getAllObjects(){return this.engineRef.getAllObjects()}async findObjects(t){return this.engineRef.findObjects(t)}async getCopiedObjects(){return this.engineRef.getCopiedObjects()}async getObjectsInViewport(){return this.engineRef.getObjectsInViewport()}async hideContextMenu(){return this.engineRef.hideContextMenu()}async triggerSelectionChange(){return this.engineRef.triggerSelectionChange()}async getDisplayableShortcuts(){return this.engineRef.getDisplayableShortcuts()}engineRef;controlsRef;settingsRef;exportRef;splitButtonRef;shareDialogRef;componentWillLoad(){this.loadSettingsFromStorage()}componentDidLoad(){this.registerCustomSvgIcons(),this.listenForMobileKeyboard(),this.setOsSpecificCssVariables()}async checkIsReady(){await customElements.whenDefined("kritzel-editor"),await customElements.whenDefined("kritzel-workspace-manager"),await customElements.whenDefined("kritzel-controls"),await customElements.whenDefined("kritzel-engine"),this.isEngineReady&&this.isControlsReady&&this.isWorkspaceManagerReady&&this.isReady.emit(this.host)}async onEngineReady(t){this.isEngineReady=!0,this.activeWorkspace=t.detail.activeWorkspace,this.workspaces=t.detail.workspaces,this.currentLinkShare=await this.engineRef.getLinkShare(),this.loadShortcuts()}handleWorkspacesChange(t){this.workspaces=t.detail}handleActiveWorkspaceChange(t){t.stopPropagation(),this.activeWorkspace=t.detail,this.activeWorkspaceChange.emit(this.activeWorkspace)}handleObjectsChange(t){this.objectsChange.emit(t.detail)}handleObjectsAdded(t){this.objectsAdded.emit(t.detail)}handleObjectsRemoved(t){this.objectsRemoved.emit(t.detail)}handleObjectsUpdated(t){this.objectsUpdated.emit(t.detail)}handleUndoStateChange(t){this.undoStateChange.emit(t.detail),this.undoState=t.detail}async handleObjectsInViewportChange(t){const e=this.getContentObjects(t.detail).length>0,s=this.getContentObjects(await this.engineRef.getAllObjects()).length>0;this.isBackToContentButtonVisible=!e&&s}handleViewportChange(t){this.viewportChange.emit(t.detail)}handleSettingsChange(t){this.scaleMin=t.detail.scaleMin,this.scaleMax=t.detail.scaleMax,this.lockDrawingScale=t.detail.lockDrawingScale,this.currentTheme=t.detail.theme,this.viewportBoundaryLeft=t.detail.viewportBoundaryLeft??-1/0,this.viewportBoundaryRight=t.detail.viewportBoundaryRight??1/0,this.viewportBoundaryTop=t.detail.viewportBoundaryTop??-1/0,this.viewportBoundaryBottom=t.detail.viewportBoundaryBottom??1/0,this.themeChange.emit(t.detail.theme)}async handleMoreMenuItemSelect(t){const{item:e}=t.detail;if("share"===e.id&&this.shareDialogRef.open(),"settings"===e.id&&this.settingsRef.open(),"export"===e.id){const t=await this.engineRef.getScreenshot("png");this.exportRef.open(t)}"download"===e.id&&await this.engineRef.downloadAsJson(),"import"===e.id&&await this.engineRef.importFromFile()}handleToggleLinkShare=async t=>{const{enabled:e,permission:s}=t.detail;await this.engineRef.setLinkSharingEnabled(e,s),this.currentLinkShare=await this.engineRef.getLinkShare(),this.linkShareChange.emit({linkShare:this.currentLinkShare,workspaceId:this.activeWorkspace?.id})};handleSharePermissionChange=async t=>{await this.engineRef.setSharePermission(t.detail),this.currentLinkShare=await this.engineRef.getLinkShare(),this.linkShareChange.emit({linkShare:this.currentLinkShare,workspaceId:this.activeWorkspace?.id})};updateCurrentLinkShare(){const t=this.activeWorkspace?.linkShare??null,e=this.activeWorkspace?.id;this.currentLinkShare=t,this.linkShareChange.emit({linkShare:t,workspaceId:e})}handleCurrentUserItemSelect(t){const{item:e}=t.detail;"logout"===e.id&&this.logout.emit()}getSettingsStorageKey(){return this.editorId?"kritzel-settings-"+this.editorId:"kritzel-settings"}loadSettingsFromStorage(){const t=localStorage.getItem(this.getSettingsStorageKey());if(t)try{const e=JSON.parse(t);"number"==typeof e.scaleMin&&(this.scaleMin=e.scaleMin),"number"==typeof e.scaleMax&&(this.scaleMax=e.scaleMax),"boolean"==typeof e.lockDrawingScale&&(this.lockDrawingScale=e.lockDrawingScale),"light"!==e.theme&&"dark"!==e.theme||(this.currentTheme=e.theme),"number"==typeof e.viewportBoundaryLeft&&(this.viewportBoundaryLeft=e.viewportBoundaryLeft),"number"==typeof e.viewportBoundaryRight&&(this.viewportBoundaryRight=e.viewportBoundaryRight),"number"==typeof e.viewportBoundaryTop&&(this.viewportBoundaryTop=e.viewportBoundaryTop),"number"==typeof e.viewportBoundaryBottom&&(this.viewportBoundaryBottom=e.viewportBoundaryBottom)}catch{}}async loadShortcuts(){this.shortcuts=await this.engineRef.getDisplayableShortcuts()}getContentObjects(t){return t.filter((t=>!(t instanceof m||t instanceof k)))}registerCustomSvgIcons(){for(const[t,e]of Object.entries(this.customSvgIcons))a.register(t,e)}listenForMobileKeyboard(){b.onKeyboardVisibleChanged((t=>{this.isVirtualKeyboardOpen=t}))}setOsSpecificCssVariables(){switch(v.detectOS()){case"iOS":this.host.style.setProperty("--kritzel-editor-top-left-buttons-top","14px"),this.host.style.setProperty("--kritzel-editor-top-left-buttons-left","14px"),this.host.style.setProperty("--kritzel-editor-controls-bottom","14px"),this.host.style.setProperty("--kritzel-editor-controls-transition","cubic-bezier(0.25, 0.1, 0.25, 1.0)"),this.host.style.setProperty("--kritzel-editor-controls-transform","translateY(200%)"),this.host.style.setProperty("--kritzel-editor-controls-transition-duration","0.25s");break;case"Android":this.host.style.setProperty("--kritzel-editor-top-left-buttons-top","14px"),this.host.style.setProperty("--kritzel-editor-top-left-buttons-left","14px"),this.host.style.setProperty("--kritzel-editor-controls-bottom","24px"),this.host.style.setProperty("--kritzel-editor-controls-transition","cubic-bezier(0.25, 0.1, 0.25, 1.0)"),this.host.style.setProperty("--kritzel-editor-controls-transform","translateY(200%)"),this.host.style.setProperty("--kritzel-editor-controls-transition-duration","0.25s");break;default:this.host.style.setProperty("--kritzel-editor-top-left-buttons-top","14px"),this.host.style.setProperty("--kritzel-editor-top-left-buttons-left","14px"),this.host.style.setProperty("--kritzel-editor-controls-bottom","14px")}}render(){return o(i,{key:"90a91249e483f27f52c6677483793a00e78e7488"},o("div",{key:"be2392052be658194bc00c029abe883ce3fb4a79",class:"top-left-buttons"},o("kritzel-workspace-manager",{key:"3e0a4004dccbada37f1008c77ac143e453714db5",workspaces:this.workspaces,activeWorkspace:this.activeWorkspace,onWorkspaceChange:t=>this.activeWorkspace=t.detail,onIsWorkspaceManagerReady:()=>this.isWorkspaceManagerReady=!0}),o("kritzel-back-to-content",{key:"f6d11f6e0bc0a0be10bab2c5757fadd18d0a305c",visible:this.isBackToContentButtonVisible,onBackToContent:()=>this.backToContent()})),o("kritzel-engine",{key:"a5720d2e7d7a2e257f17fd0e68a53d33b4bef711",ref:t=>this.engineRef=t,workspace:this.activeWorkspace,activeWorkspaceId:this.activeWorkspaceId,editorId:this.editorId,syncConfig:this.syncConfig,scaleMax:this.scaleMax,lockDrawingScale:this.lockDrawingScale,scaleMin:this.scaleMin,viewportBoundaryLeft:this.viewportBoundaryLeft,viewportBoundaryRight:this.viewportBoundaryRight,viewportBoundaryTop:this.viewportBoundaryTop,viewportBoundaryBottom:this.viewportBoundaryBottom,wheelEnabled:this.wheelEnabled,theme:this.currentTheme,globalContextMenuItems:this.globalContextMenuItems,objectContextMenuItems:this.objectContextMenuItems,onIsEngineReady:t=>this.onEngineReady(t),onWorkspacesChange:t=>this.handleWorkspacesChange(t),onActiveWorkspaceChange:t=>this.handleActiveWorkspaceChange(t),onObjectsChange:t=>this.handleObjectsChange(t),onObjectsAdded:t=>this.handleObjectsAdded(t),onObjectsRemoved:t=>this.handleObjectsRemoved(t),onObjectsUpdated:t=>this.handleObjectsUpdated(t),onUndoStateChange:t=>this.handleUndoStateChange(t),onObjectsInViewportChange:t=>this.handleObjectsInViewportChange(t),onViewportChange:t=>this.handleViewportChange(t)}),o("kritzel-controls",{key:"1324b903ea3cc8296467465a9524b812e65dd627",class:{"keyboard-open":this.isVirtualKeyboardOpen},style:{display:this.isControlsVisible?"flex":"none"},ref:t=>this.controlsRef=t,controls:this.controls,isUtilityPanelVisible:this.isUtilityPanelVisible,undoState:this.undoState,theme:this.currentTheme,onIsControlsReady:()=>this.isControlsReady=!0}),o("div",{key:"7b535fd7cd96bf64f64011b7cc30f8bd471b3bb6",class:"top-right-buttons"},o("kritzel-settings",{key:"483995f3e3b81a381828d9dd0d2e25afb8a48966",ref:t=>this.settingsRef=t,shortcuts:this.shortcuts,editorId:this.editorId,onSettingsChange:t=>this.handleSettingsChange(t)}),o("kritzel-export",{key:"8697a908a01a0cf6143b3822c232afd047e389a5",ref:t=>this.exportRef=t,workspaceName:this.activeWorkspace?.name||"workspace",onExportPng:()=>this.engineRef.exportViewportAsPng(),onExportSvg:()=>this.engineRef.exportViewportAsSvg(),onExportJson:t=>this.engineRef.downloadAsJson(t.detail)}),o("kritzel-active-users",{key:"85a54896088999df529e70d524c775e92dcf5e6b",users:this.activeUsers}),o("kritzel-current-user",{key:"cbcd428a95c2ab260f5fe175e75bbf9018de5c21",user:this.user,onItemSelect:t=>this.handleCurrentUserItemSelect(t)}),o("kritzel-more-menu",{key:"972cc8721173cb2ed8ba448d9690e31e0a9321e1",onItemSelect:t=>this.handleMoreMenuItemSelect(t)}),o("kritzel-share-dialog",{key:"3c5e325ca58af4f5c09e25bf8e059471f5e178d1",ref:t=>this.shareDialogRef=t,linkShare:this.currentLinkShare,workspaceId:this.activeWorkspace?.id,onToggleLinkShare:this.handleToggleLinkShare,onPermissionChange:this.handleSharePermissionChange})))}static get watchers(){return{isEngineReady:[{onIsEngineReady:0}],isControlsReady:[{onIsControlsReady:0}],workspaces:[{onWorkspacesChange:0}],activeWorkspace:[{onActiveWorkspaceChange:0}],activeWorkspaceId:[{onActiveWorkspaceIdChange:0}],currentTheme:[{onCurrentThemeChange:0}]}}static get style(){return"kritzel-editor{display:flex;margin:0;position:relative;overflow:hidden;width:100%;height:100%;align-items:center;justify-content:center;touch-action:manipulation;user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}kritzel-workspace-manager{}kritzel-controls{position:absolute;bottom:var(--kritzel-editor-controls-bottom, 14px);transition:transform var(--kritzel-editor-controls-transition-duration, 0.1s) var(--kritzel-editor-controls-transition, ease-in-out)}kritzel-controls.keyboard-open{transform:var(--kritzel-editor-controls-transform, translateY(300%))}.top-left-buttons{position:absolute;top:var(--kritzel-editor-top-left-buttons-top, 14px);left:var(--kritzel-editor-top-left-buttons-left, 14px);display:flex;align-items:flex-start;gap:8px}.top-right-buttons{position:absolute;top:var(--kritzel-editor-top-right-buttons-top, 14px);right:var(--kritzel-editor-top-right-buttons-right, 14px);display:flex;align-items:center;gap:8px}.top-right-button{display:flex;align-items:center;justify-content:center;width:50px;height:50px;padding:0;border:var(--kritzel-split-button-border, 1px solid #ebebeb);border-radius:var(--kritzel-split-button-border-radius, 12px);background-color:var(--kritzel-split-button-background-color, #ffffff);cursor:var(--kritzel-global-pointer-cursor, pointer);box-shadow:var(--kritzel-split-button-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));transition:background-color 150ms ease;-webkit-tap-highlight-color:transparent}.top-right-button:hover{background-color:#f5f5f5}.top-right-button:active{background-color:#ebebeb}"}},[512,"kritzel-editor",{scaleMax:[1026,"scale-max"],scaleMin:[1026,"scale-min"],lockDrawingScale:[1028,"lock-drawing-scale"],viewportBoundaryLeft:[1026,"viewport-boundary-left"],viewportBoundaryRight:[1026,"viewport-boundary-right"],viewportBoundaryTop:[1026,"viewport-boundary-top"],viewportBoundaryBottom:[1026,"viewport-boundary-bottom"],wheelEnabled:[1028,"wheel-enabled"],user:[16],activeUsers:[16],controls:[16],globalContextMenuItems:[16],objectContextMenuItems:[16],customSvgIcons:[16],isControlsVisible:[4,"is-controls-visible"],isUtilityPanelVisible:[4,"is-utility-panel-visible"],syncConfig:[16],editorId:[1,"editor-id"],activeWorkspaceId:[1,"active-workspace-id"],isEngineReady:[32],isControlsReady:[32],isWorkspaceManagerReady:[32],workspaces:[32],activeWorkspace:[32],isVirtualKeyboardOpen:[32],undoState:[32],isBackToContentButtonVisible:[32],currentTheme:[32],shortcuts:[32],currentLinkShare:[32],getObjectById:[64],addObject:[64],updateObject:[64],removeObject:[64],getSelectedObjects:[64],selectObjects:[64],selectAllObjectsInViewport:[64],clearSelection:[64],centerObjectInViewport:[64],backToContent:[64],centerAllObjects:[64],setViewport:[64],panTo:[64],zoomTo:[64],getViewport:[64],screenToWorld:[64],worldToScreen:[64],createWorkspace:[64],updateWorkspace:[64],deleteWorkspace:[64],getWorkspaces:[64],getActiveWorkspace:[64],loadSharedWorkspace:[64],registerTool:[64],changeActiveTool:[64],disable:[64],enable:[64],copy:[64],paste:[64],delete:[64],bringForward:[64],sendBackward:[64],bringToFront:[64],sendToBack:[64],alignObjects:[64],group:[64],ungroup:[64],undo:[64],redo:[64],getScreenshot:[64],exportViewportAsPng:[64],exportViewportAsSvg:[64],downloadAsJson:[64],importFromFile:[64],loadObjectsFromJson:[64],getObjectsTotalCount:[64],getAllObjects:[64],findObjects:[64],getCopiedObjects:[64],getObjectsInViewport:[64],hideContextMenu:[64],triggerSelectionChange:[64],getDisplayableShortcuts:[64]},[[0,"dblclick","onTouchStart"]],{isEngineReady:[{onIsEngineReady:0}],isControlsReady:[{onIsControlsReady:0}],workspaces:[{onWorkspacesChange:0}],activeWorkspace:[{onActiveWorkspaceChange:0}],activeWorkspaceId:[{onActiveWorkspaceIdChange:0}],currentTheme:[{onCurrentThemeChange:0}]}]),pt=ht,dt=function(){"undefined"!=typeof customElements&&["kritzel-editor","kritzel-active-users","kritzel-avatar","kritzel-back-to-content","kritzel-color","kritzel-color-palette","kritzel-context-menu","kritzel-controls","kritzel-current-user","kritzel-cursor-trail","kritzel-dialog","kritzel-dropdown","kritzel-engine","kritzel-export","kritzel-font","kritzel-font-family","kritzel-font-size","kritzel-icon","kritzel-input","kritzel-line-endings","kritzel-master-detail","kritzel-menu","kritzel-menu-item","kritzel-more-menu","kritzel-numeric-input","kritzel-opacity-slider","kritzel-pill-tabs","kritzel-portal","kritzel-settings","kritzel-shape-fill","kritzel-share-dialog","kritzel-slide-toggle","kritzel-split-button","kritzel-stroke-size","kritzel-tool-config","kritzel-tooltip","kritzel-utility-panel","kritzel-workspace-manager"].forEach((t=>{switch(t){case"kritzel-editor":customElements.get(r(t))||customElements.define(r(t),ht);break;case"kritzel-active-users":customElements.get(r(t))||E();break;case"kritzel-avatar":customElements.get(r(t))||x();break;case"kritzel-back-to-content":customElements.get(r(t))||S();break;case"kritzel-color":customElements.get(r(t))||I();break;case"kritzel-color-palette":customElements.get(r(t))||O();break;case"kritzel-context-menu":customElements.get(r(t))||W();break;case"kritzel-controls":customElements.get(r(t))||T();break;case"kritzel-current-user":customElements.get(r(t))||A();break;case"kritzel-cursor-trail":customElements.get(r(t))||R();break;case"kritzel-dialog":customElements.get(r(t))||B();break;case"kritzel-dropdown":customElements.get(r(t))||V();break;case"kritzel-engine":customElements.get(r(t))||C();break;case"kritzel-export":customElements.get(r(t))||D();break;case"kritzel-font":customElements.get(r(t))||M();break;case"kritzel-font-family":customElements.get(r(t))||L();break;case"kritzel-font-size":customElements.get(r(t))||F();break;case"kritzel-icon":customElements.get(r(t))||n();break;case"kritzel-input":customElements.get(r(t))||P();break;case"kritzel-line-endings":customElements.get(r(t))||U();break;case"kritzel-master-detail":customElements.get(r(t))||G();break;case"kritzel-menu":customElements.get(r(t))||K();break;case"kritzel-menu-item":customElements.get(r(t))||J();break;case"kritzel-more-menu":customElements.get(r(t))||q();break;case"kritzel-numeric-input":customElements.get(r(t))||Q();break;case"kritzel-opacity-slider":customElements.get(r(t))||Y();break;case"kritzel-pill-tabs":customElements.get(r(t))||N();break;case"kritzel-portal":customElements.get(r(t))||X();break;case"kritzel-settings":customElements.get(r(t))||Z();break;case"kritzel-shape-fill":customElements.get(r(t))||H();break;case"kritzel-share-dialog":customElements.get(r(t))||_();break;case"kritzel-slide-toggle":customElements.get(r(t))||$();break;case"kritzel-split-button":customElements.get(r(t))||tt();break;case"kritzel-stroke-size":customElements.get(r(t))||et();break;case"kritzel-tool-config":customElements.get(r(t))||st();break;case"kritzel-tooltip":customElements.get(r(t))||ot();break;case"kritzel-utility-panel":customElements.get(r(t))||it();break;case"kritzel-workspace-manager":customElements.get(r(t))||rt()}}))};export{at as D,pt as KritzelEditor,nt as a,lt as b,dt as defineCustomElement}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as o,f as s}from"./p
|
|
1
|
+
import{g as o,f as s}from"./p--X34FIIn.js";const p=o,r=s;export{p as KritzelEngine,r as defineCustomElement}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{K as
|
|
1
|
+
import{K as o,d as r}from"./p-DfcTNrtM.js";const s=o,t=r;export{s as KritzelSettings,t as defineCustomElement}
|