kritzel-stencil 0.3.7 → 0.3.8

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.
Files changed (63) hide show
  1. package/dist/cjs/index.cjs.js +39 -39
  2. package/dist/cjs/kritzel-active-users_42.cjs.entry.js +274 -223
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/{workspace.migrations-BlC8KRoQ.js → schema.constants-rCfWpcBV.js} +43 -28
  5. package/dist/cjs/stencil.cjs.js +1 -1
  6. package/dist/collection/classes/tools/brush-tool.class.js +3 -0
  7. package/dist/collection/classes/tools/line-tool.class.js +3 -0
  8. package/dist/collection/classes/tools/selection-tool.class.js +2 -0
  9. package/dist/collection/classes/tools/shape-tool.class.js +3 -0
  10. package/dist/collection/classes/tools/text-tool.class.js +3 -0
  11. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +30 -6
  12. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +59 -10
  13. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.css +1 -1
  14. package/dist/collection/components/ui/kritzel-tool-config/kritzel-tool-config.js +17 -2
  15. package/dist/collection/configs/default-brush-tool.config.js +4 -0
  16. package/dist/collection/configs/default-line-tool.config.js +2 -0
  17. package/dist/collection/configs/default-shape-tool.config.js +2 -0
  18. package/dist/collection/configs/default-text-tool.config.js +2 -0
  19. package/dist/collection/constants/stroke-size.constants.js +2 -0
  20. package/dist/collection/constants/version.js +1 -1
  21. package/dist/collection/helpers/tool-config.helper.js +4 -0
  22. package/dist/collection/index.js +1 -1
  23. package/dist/components/index.js +1 -1
  24. package/dist/components/kritzel-controls.js +1 -1
  25. package/dist/components/kritzel-editor.js +1 -1
  26. package/dist/components/kritzel-engine.js +1 -1
  27. package/dist/components/kritzel-settings.js +1 -1
  28. package/dist/components/kritzel-stroke-size.js +1 -1
  29. package/dist/components/kritzel-tool-config.js +1 -1
  30. package/dist/components/{p-D0ctIEh_.js → p-B8wX0-3H.js} +1 -1
  31. package/dist/components/p-CJjwjpMH.js +1 -0
  32. package/dist/components/{p-Ctd1w9-z.js → p-DdlK75Kx.js} +1 -1
  33. package/dist/components/p-DwHZN643.js +1 -0
  34. package/dist/components/p-W0nK9EQJ.js +9 -0
  35. package/dist/components/{p-DF8X_22i.js → p-ihbmwmHg.js} +1 -1
  36. package/dist/esm/index.js +2 -2
  37. package/dist/esm/kritzel-active-users_42.entry.js +68 -17
  38. package/dist/esm/loader.js +1 -1
  39. package/dist/esm/{workspace.migrations-BLXBI--a.js → schema.constants-cuIrI5X8.js} +43 -29
  40. package/dist/esm/stencil.js +1 -1
  41. package/dist/stencil/index.esm.js +1 -1
  42. package/dist/stencil/p-9ce67a14.entry.js +9 -0
  43. package/dist/stencil/p-cuIrI5X8.js +1 -0
  44. package/dist/stencil/stencil.esm.js +1 -1
  45. package/dist/types/classes/tools/brush-tool.class.d.ts +2 -0
  46. package/dist/types/classes/tools/line-tool.class.d.ts +2 -0
  47. package/dist/types/classes/tools/shape-tool.class.d.ts +2 -0
  48. package/dist/types/classes/tools/text-tool.class.d.ts +2 -0
  49. package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +1 -0
  50. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +6 -0
  51. package/dist/types/components/ui/kritzel-tool-config/kritzel-tool-config.d.ts +2 -0
  52. package/dist/types/components.d.ts +6 -0
  53. package/dist/types/constants/stroke-size.constants.d.ts +2 -0
  54. package/dist/types/constants/version.d.ts +1 -1
  55. package/dist/types/index.d.ts +1 -1
  56. package/dist/types/interfaces/tool-config.interface.d.ts +1 -0
  57. package/dist/types/interfaces/toolbar-control.interface.d.ts +6 -0
  58. package/package.json +1 -1
  59. package/dist/components/p-8b9zAWnS.js +0 -1
  60. package/dist/components/p-CoJdbj3f.js +0 -1
  61. package/dist/components/p-P0p4WBpa.js +0 -9
  62. package/dist/stencil/p-3058e485.entry.js +0 -9
  63. package/dist/stencil/p-BLXBI--a.js +0 -1
@@ -1 +1 @@
1
- import{p as e,H as s,c as t,h as r,d as i,t as o}from"./p-BWj1eE2b.js";import{d as l}from"./p-CqAkznU_.js";const a=e(class extends s{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.sizeChange=t(this,"sizeChange")}sizes=[4,6,8,12,16,24];selectedSize=null;sizeChange;handleSizeClick(e){this.selectedSize=e,this.sizeChange.emit(e)}render(){return r(i,{key:"f964d37a6cbfa48898ac066859165df1492535a9"},r("div",{key:"fed8ec5ddbe07d64beb151b22211fecdc0a278d1",class:"size-grid"},this.sizes.map((e=>r("div",{tabIndex:0,class:{"size-container":!0,selected:this.selectedSize===e},onClick:()=>this.handleSizeClick(e)},r("kritzel-color",{value:"var(--kritzel-global-text-primary)",size:e}))))))}static get style(){return":host{display:flex;align-items:flex-start;gap:0;padding:0;width:100%;box-sizing:border-box}.size-grid{width:100%;display:grid;grid-template-columns:repeat(6, 32px);gap:8px;justify-items:center}.size-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box}.size-container:hover{background-color:var(--kritzel-stroke-size-hover-background-color, #ebebeb)}.size-container.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-stroke-size-selected-background-color, #ebebeb)}"}},[513,"kritzel-stroke-size",{sizes:[16],selectedSize:[1026,"selected-size"]}]);function c(){"undefined"!=typeof customElements&&["kritzel-stroke-size","kritzel-color"].forEach((e=>{switch(e){case"kritzel-stroke-size":customElements.get(o(e))||customElements.define(o(e),a);break;case"kritzel-color":customElements.get(o(e))||l()}}))}export{a as K,c as d}
1
+ import{p as e,H as s,c as t,h as r,d as i,t as o}from"./p-BWj1eE2b.js";import{d as l}from"./p-CqAkznU_.js";const a=e(class extends s{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.sizeChange=t(this,"sizeChange")}sizes=[4,6,8,12,16,24];selectedSize=null;sizeChange;handleSizeClick(e){this.selectedSize=e,this.sizeChange.emit(e)}render(){return r(i,{key:"f964d37a6cbfa48898ac066859165df1492535a9"},r("div",{key:"fed8ec5ddbe07d64beb151b22211fecdc0a278d1",class:"size-grid"},this.sizes.map((e=>r("div",{tabIndex:0,class:{"size-container":!0,selected:this.selectedSize===e},onClick:()=>this.handleSizeClick(e)},r("kritzel-color",{value:"var(--kritzel-global-text-primary)",size:e}))))))}static get style(){return":host{display:flex;align-items:flex-start;gap:0;padding:0;width:100%;box-sizing:border-box}.size-grid{width:100%;display:grid;grid-template-columns:repeat(auto-fill, 32px);gap:8px;justify-items:center}.size-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box}.size-container:hover{background-color:var(--kritzel-stroke-size-hover-background-color, #ebebeb)}.size-container.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-stroke-size-selected-background-color, #ebebeb)}"}},[513,"kritzel-stroke-size",{sizes:[16],selectedSize:[1026,"selected-size"]}]);function c(){"undefined"!=typeof customElements&&["kritzel-stroke-size","kritzel-color"].forEach((e=>{switch(e){case"kritzel-stroke-size":customElements.get(o(e))||customElements.define(o(e),a);break;case"kritzel-color":customElements.get(o(e))||l()}}))}export{a as K,c as d}
package/dist/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { H as HocuspocusProvider, a as HocuspocusProviderWebsocket } from './workspace.migrations-BLXBI--a.js';
2
- export { E as APP_STATE_MIGRATIONS, A as AssetNotFoundError, C as CURRENT_APP_STATE_SCHEMA_VERSION, z as CURRENT_WORKSPACE_SCHEMA_VERSION, v as DEFAULT_ASSET_STORAGE_CONFIG, D as DEFAULT_BRUSH_CONFIG, u as DEFAULT_LINE_TOOL_CONFIG, t as DEFAULT_TEXT_CONFIG, p as IndexedDBAssetProvider, I as IndexedDBSyncProvider, y as KritzelAlignment, r as KritzelAnchorManager, o as KritzelAssetResolver, g as KritzelBrushTool, m as KritzelCursorHelper, i as KritzelEraserTool, e as KritzelGroup, c as KritzelImage, j as KritzelImageTool, d as KritzelLine, h as KritzelLineTool, b as KritzelPath, n as KritzelSelectionTool, f as KritzelShape, l as KritzelShapeTool, K as KritzelText, k as KritzelTextTool, s as KritzelThemeManager, q as KritzelWorkspace, S as ShapeType, W as WORKSPACE_EXPORT_VERSION, F as WORKSPACE_MIGRATIONS, x as darkTheme, w as lightTheme, B as runMigrations } from './workspace.migrations-BLXBI--a.js';
1
+ import { H as HocuspocusProvider, a as HocuspocusProviderWebsocket } from './schema.constants-cuIrI5X8.js';
2
+ export { B as APP_STATE_MIGRATIONS, A as AssetNotFoundError, E as CURRENT_APP_STATE_SCHEMA_VERSION, F as CURRENT_WORKSPACE_SCHEMA_VERSION, v as DEFAULT_ASSET_STORAGE_CONFIG, D as DEFAULT_BRUSH_CONFIG, u as DEFAULT_LINE_TOOL_CONFIG, t as DEFAULT_TEXT_CONFIG, p as IndexedDBAssetProvider, I as IndexedDBSyncProvider, y as KritzelAlignment, r as KritzelAnchorManager, o as KritzelAssetResolver, g as KritzelBrushTool, m as KritzelCursorHelper, i as KritzelEraserTool, e as KritzelGroup, c as KritzelImage, j as KritzelImageTool, d as KritzelLine, h as KritzelLineTool, b as KritzelPath, n as KritzelSelectionTool, f as KritzelShape, l as KritzelShapeTool, K as KritzelText, k as KritzelTextTool, s as KritzelThemeManager, q as KritzelWorkspace, S as ShapeType, W as WORKSPACE_EXPORT_VERSION, C as WORKSPACE_MIGRATIONS, x as darkTheme, w as lightTheme, z as runMigrations } from './schema.constants-cuIrI5X8.js';
3
3
  import * as Y from 'yjs';
4
4
  import { WebsocketProvider } from 'y-websocket';
5
5
  import 'y-indexeddb';
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, h, H as Host, c as createEvent, g as getElement } from './index-D9HaikfQ.js';
2
- import { b as KritzelPath, d as KritzelLine, G as KritzelColorHelper, n as KritzelSelectionTool, g as KritzelBrushTool, h as KritzelLineTool, l as KritzelShapeTool, k as KritzelTextTool, J as KritzelDevicesHelper, L as KritzelMouseButton, M as DEFAULT_COLOR_PALETTE, S as ShapeType, I as IndexedDBSyncProvider, D as DEFAULT_BRUSH_CONFIG, i as KritzelEraserTool, u as DEFAULT_LINE_TOOL_CONFIG, t as DEFAULT_TEXT_CONFIG, j as KritzelImageTool, y as KritzelAlignment, v as DEFAULT_ASSET_STORAGE_CONFIG, N as KritzelSelectionGroup, O as KritzelSelectionBox, P as KritzelIconRegistry, Q as KritzelKeyboardHelper, R as KritzelBaseHandler, T as KritzelBaseObject, q as KritzelWorkspace, e as KritzelGroup, c as KritzelImage, f as KritzelShape, K as KritzelText, B as runMigrations, z as CURRENT_WORKSPACE_SCHEMA_VERSION, F as WORKSPACE_MIGRATIONS, C as CURRENT_APP_STATE_SCHEMA_VERSION, E as APP_STATE_MIGRATIONS, U as ObjectHelper, m as KritzelCursorHelper, r as KritzelAnchorManager, s as KritzelThemeManager, o as KritzelAssetResolver, V as KritzelClassHelper, X as KritzelEventHelper, W as WORKSPACE_EXPORT_VERSION } from './workspace.migrations-BLXBI--a.js';
2
+ import { b as KritzelPath, d as KritzelLine, G as KritzelColorHelper, n as KritzelSelectionTool, g as KritzelBrushTool, h as KritzelLineTool, l as KritzelShapeTool, k as KritzelTextTool, J as KritzelDevicesHelper, L as KritzelMouseButton, M as DEFAULT_STROKE_SIZES, N as DEFAULT_COLOR_PALETTE, S as ShapeType, I as IndexedDBSyncProvider, D as DEFAULT_BRUSH_CONFIG, i as KritzelEraserTool, u as DEFAULT_LINE_TOOL_CONFIG, t as DEFAULT_TEXT_CONFIG, j as KritzelImageTool, y as KritzelAlignment, v as DEFAULT_ASSET_STORAGE_CONFIG, O as KritzelSelectionGroup, P as KritzelSelectionBox, Q as KritzelIconRegistry, R as KritzelKeyboardHelper, T as KritzelBaseHandler, U as KritzelBaseObject, q as KritzelWorkspace, e as KritzelGroup, c as KritzelImage, f as KritzelShape, K as KritzelText, z as runMigrations, F as CURRENT_WORKSPACE_SCHEMA_VERSION, C as WORKSPACE_MIGRATIONS, E as CURRENT_APP_STATE_SCHEMA_VERSION, B as APP_STATE_MIGRATIONS, V as ObjectHelper, m as KritzelCursorHelper, r as KritzelAnchorManager, s as KritzelThemeManager, o as KritzelAssetResolver, X as KritzelClassHelper, Y as KritzelEventHelper, W as WORKSPACE_EXPORT_VERSION } from './schema.constants-cuIrI5X8.js';
3
3
  import * as Y from 'yjs';
4
4
  import 'y-indexeddb';
5
5
  import 'y-websocket';
@@ -822,6 +822,7 @@ class KritzelToolConfigHelper {
822
822
  sizeProperty: 'size',
823
823
  opacityProperty: 'opacity',
824
824
  paletteSource: 'palette',
825
+ sizesSource: 'sizes',
825
826
  controls: [
826
827
  { type: 'stroke-size', propertyName: 'size' },
827
828
  ],
@@ -834,6 +835,7 @@ class KritzelToolConfigHelper {
834
835
  sizeProperty: 'size',
835
836
  opacityProperty: 'opacity',
836
837
  paletteSource: 'palette',
838
+ sizesSource: 'sizes',
837
839
  controls: [
838
840
  { type: 'stroke-size', propertyName: 'size' },
839
841
  { type: 'line-endings', propertyName: 'arrows', additionalProps: {} },
@@ -847,6 +849,7 @@ class KritzelToolConfigHelper {
847
849
  sizeProperty: 'strokeWidth',
848
850
  opacityProperty: 'opacity',
849
851
  paletteSource: 'palette',
852
+ sizesSource: 'sizes',
850
853
  controls: [
851
854
  { type: 'stroke-size', propertyName: 'strokeWidth' },
852
855
  { type: 'shape-fill', propertyName: 'fillColor', additionalProps: {} },
@@ -860,6 +863,7 @@ class KritzelToolConfigHelper {
860
863
  sizeProperty: 'fontSize',
861
864
  opacityProperty: 'opacity',
862
865
  paletteSource: 'palette',
866
+ sizesSource: 'sizes',
863
867
  controls: [
864
868
  { type: 'font-size', propertyName: 'fontSize', additionalProps: {} },
865
869
  { type: 'font-family', propertyName: 'fontFamily' },
@@ -2094,6 +2098,7 @@ const DEFAULT_SHAPE_CONFIG = {
2094
2098
  fontSize: 16,
2095
2099
  fontFamily: 'Arial',
2096
2100
  palette: [...DEFAULT_COLOR_PALETTE],
2101
+ sizes: [...DEFAULT_STROKE_SIZES],
2097
2102
  };
2098
2103
 
2099
2104
  const ABSOLUTE_SCALE_MAX = 1000;
@@ -2473,6 +2478,9 @@ const KritzelEditor = class {
2473
2478
  async changeActiveTool(tool) {
2474
2479
  return this.engineRef.changeActiveTool(tool);
2475
2480
  }
2481
+ async changeActiveToolByName(toolName) {
2482
+ return this.engineRef.changeActiveToolByName(toolName);
2483
+ }
2476
2484
  async disable() {
2477
2485
  return this.engineRef.disable();
2478
2486
  }
@@ -2848,27 +2856,27 @@ const KritzelEditor = class {
2848
2856
  const isLoggedIn = this.isLoggedIn;
2849
2857
  const shouldShowCurrentUser = isLoggedIn;
2850
2858
  const shouldShowLoginButton = !!this.loginConfig && !isLoggedIn;
2851
- return (h(Host, { key: 'e259a79d0fb8e39be29f338c78b3b686c82790ff' }, h("div", { key: '2aa5768df3fe0442ff4b032c1f3defa3e2414d4b', class: "top-left-buttons" }, h("kritzel-workspace-manager", { key: '6bade436347fba887007843ed3ad71f85ea4acb0', visible: this.isWorkspaceManagerVisible, workspaces: this.workspaces, activeWorkspace: this.activeWorkspace, onWorkspaceChange: event => (this.activeWorkspace = event.detail), onIsWorkspaceManagerReady: () => (this.isWorkspaceManagerReady = true) }), h("kritzel-back-to-content", { key: 'cdbf4c27695a5daefe9548a642a9dcd0aff7a77b', visible: this.isBackToContentButtonVisible, onBackToContent: () => this.backToContent() })), h("kritzel-engine", { key: 'e0ac833bd839c04d90c8788663ea0afd6aa35c39', ref: el => {
2859
+ return (h(Host, { key: '2856db9fa6a0926df078d5d6eedb19d2b4de98a5' }, h("div", { key: '7ffad0fd28904b740af43e20addfef701bbcead9', class: "top-left-buttons" }, h("kritzel-workspace-manager", { key: '0639e3d0f1a91935d42c10d5dfa793fd595cc234', visible: this.isWorkspaceManagerVisible, workspaces: this.workspaces, activeWorkspace: this.activeWorkspace, onWorkspaceChange: event => (this.activeWorkspace = event.detail), onIsWorkspaceManagerReady: () => (this.isWorkspaceManagerReady = true) }), h("kritzel-back-to-content", { key: '0039bc16615c26ab239ceeac418a7d47ff2ad40a', visible: this.isBackToContentButtonVisible, onBackToContent: () => this.backToContent() })), h("kritzel-engine", { key: '4815e1c4dfc6a04e68894b795c02dd678fec108d', ref: el => {
2852
2860
  if (el) {
2853
2861
  this.engineRef = el;
2854
2862
  }
2855
- }, workspace: this.activeWorkspace, activeWorkspaceId: this.activeWorkspaceId, editorId: this.editorId, syncConfig: this.syncConfig, assetStorageConfig: this.assetStorageConfig, user: this.user, scaleMax: this.scaleMax, lockDrawingScale: this.lockDrawingScale, scaleMin: this.scaleMin, cursorTarget: this.cursorTarget, isLoading: this.isLoading, viewportBoundaryLeft: this.viewportBoundaryLeft, viewportBoundaryRight: this.viewportBoundaryRight, viewportBoundaryTop: this.viewportBoundaryTop, viewportBoundaryBottom: this.viewportBoundaryBottom, wheelEnabled: this.wheelEnabled, theme: this.currentTheme, debugInfo: this.debugInfo, globalContextMenuItems: this.globalContextMenuItems, objectContextMenuItems: this.objectContextMenuItems, onIsEngineReady: event => this.onEngineReady(event), onWorkspacesChange: event => this.handleWorkspacesChange(event), onActiveWorkspaceChange: event => this.handleActiveWorkspaceChange(event), onObjectsChange: event => this.handleObjectsChange(event), onObjectsAdded: event => this.handleObjectsAdded(event), onObjectsRemoved: event => this.handleObjectsRemoved(event), onObjectsUpdated: event => this.handleObjectsUpdated(event), onUndoStateChange: event => this.handleUndoStateChange(event), onObjectsInViewportChange: event => this.handleObjectsInViewportChange(event), onViewportChange: event => this.handleViewportChange(event), onAwarenessChange: event => this.handleAwarenessChange(event) }), h("kritzel-controls", { key: '396ed985b464306a845a4ef4f54782ccc42bd344', class: { 'keyboard-open': this.isVirtualKeyboardOpen }, style: { display: this.isControlsVisible ? 'flex' : 'none' }, ref: el => {
2863
+ }, workspace: this.activeWorkspace, activeWorkspaceId: this.activeWorkspaceId, editorId: this.editorId, syncConfig: this.syncConfig, assetStorageConfig: this.assetStorageConfig, user: this.user, scaleMax: this.scaleMax, lockDrawingScale: this.lockDrawingScale, scaleMin: this.scaleMin, cursorTarget: this.cursorTarget, isLoading: this.isLoading, viewportBoundaryLeft: this.viewportBoundaryLeft, viewportBoundaryRight: this.viewportBoundaryRight, viewportBoundaryTop: this.viewportBoundaryTop, viewportBoundaryBottom: this.viewportBoundaryBottom, wheelEnabled: this.wheelEnabled, theme: this.currentTheme, debugInfo: this.debugInfo, globalContextMenuItems: this.globalContextMenuItems, objectContextMenuItems: this.objectContextMenuItems, onIsEngineReady: event => this.onEngineReady(event), onWorkspacesChange: event => this.handleWorkspacesChange(event), onActiveWorkspaceChange: event => this.handleActiveWorkspaceChange(event), onObjectsChange: event => this.handleObjectsChange(event), onObjectsAdded: event => this.handleObjectsAdded(event), onObjectsRemoved: event => this.handleObjectsRemoved(event), onObjectsUpdated: event => this.handleObjectsUpdated(event), onUndoStateChange: event => this.handleUndoStateChange(event), onObjectsInViewportChange: event => this.handleObjectsInViewportChange(event), onViewportChange: event => this.handleViewportChange(event), onAwarenessChange: event => this.handleAwarenessChange(event) }), h("kritzel-controls", { key: 'fc44c417ee17a98f2b5d8eecffac6a86e43fda2a', class: { 'keyboard-open': this.isVirtualKeyboardOpen }, style: { display: this.isControlsVisible ? 'flex' : 'none' }, ref: el => {
2856
2864
  if (el) {
2857
2865
  this.controlsRef = el;
2858
2866
  }
2859
- }, controls: this.controls, isUtilityPanelVisible: this.isUtilityPanelVisible, undoState: this.undoState ?? undefined, theme: this.currentTheme, onIsControlsReady: () => (this.isControlsReady = true) }), h("div", { key: '67fdbff9c0259c02bd02bc1342856bc4bdac6d9f', class: "top-right-buttons" }, h("kritzel-settings", { key: '08e1bbfc902e8fe24395babef675654d84bc2dfc', ref: el => {
2867
+ }, controls: this.controls, isUtilityPanelVisible: this.isUtilityPanelVisible, undoState: this.undoState ?? undefined, theme: this.currentTheme, onIsControlsReady: () => (this.isControlsReady = true) }), h("div", { key: 'f333d2b31d456d4e35dbd41c93492329939a7c4d', class: "top-right-buttons" }, h("kritzel-settings", { key: '7900c9b1c3fd35e07e0d2a2aa0b797f455f52e1d', ref: el => {
2860
2868
  if (el) {
2861
2869
  this.settingsRef = el;
2862
2870
  }
2863
- }, shortcuts: this.shortcuts, settings: this.currentSettingsConfig, onSettingsChange: event => this.handleSettingsChange(event) }), h("kritzel-export", { key: 'e3250aaecf428bf763aefea11167b72587cee52d', ref: el => {
2871
+ }, shortcuts: this.shortcuts, settings: this.currentSettingsConfig, onSettingsChange: event => this.handleSettingsChange(event) }), h("kritzel-export", { key: 'c6ad8ae5255c9d90d854b7a26e81b65cfdc6236d', ref: el => {
2864
2872
  if (el) {
2865
2873
  this.exportRef = el;
2866
2874
  }
2867
- }, workspaceName: this.activeWorkspace?.name || 'workspace', onExportPng: () => this.engineRef.exportViewportAsPng(), onExportSvg: () => this.engineRef.exportViewportAsSvg(), onExportJson: event => this.engineRef.downloadAsJson(event.detail) }), h("kritzel-active-users", { key: '6ba93cfeb8eb28d6e7a7c0d8f6813300bd14bd2b', users: this.activeUsers }), shouldShowCurrentUser && h("kritzel-current-user", { key: '4efef69fc7c1b443f6e12fdcda5ed8d26dbebcd3', user: this.user }), shouldShowLoginButton && h("kritzel-button", { key: '54208a3e130fe41f7429516d52f166b08de7e24c', onButtonClick: () => this.loginDialogRef?.open() }, "Sign in"), h("kritzel-more-menu", { key: 'b5a6f5e0e5465655d109ee9047cba97200f94639', items: this.moreMenuItems, visible: this.isMoreMenuVisible }), h("kritzel-share-dialog", { key: 'ee32c5f54395db794ab77ecd0f2e9657db6765c0', ref: el => {
2875
+ }, workspaceName: this.activeWorkspace?.name || 'workspace', onExportPng: () => this.engineRef.exportViewportAsPng(), onExportSvg: () => this.engineRef.exportViewportAsSvg(), onExportJson: event => this.engineRef.downloadAsJson(event.detail) }), h("kritzel-active-users", { key: '3d6d3c460e5954b4d477c6bcc9992e503f781a81', users: this.activeUsers }), shouldShowCurrentUser && h("kritzel-current-user", { key: '33a72ce69276082ca7cc2815a93ad14de8dcf5a0', user: this.user }), shouldShowLoginButton && h("kritzel-button", { key: '809dedeacbf89674e42ab3e5850e67aadfe1111c', onButtonClick: () => this.loginDialogRef?.open() }, "Sign in"), h("kritzel-more-menu", { key: '7521045a24e32e6aa69a5a8c41a4edea5d657d93', items: this.moreMenuItems, visible: this.isMoreMenuVisible }), h("kritzel-share-dialog", { key: 'a4e778dee23b3dba94109c141e3628f22b740355', ref: el => {
2868
2876
  if (el) {
2869
2877
  this.shareDialogRef = el;
2870
2878
  }
2871
- }, isPublic: this.currentIsPublic, workspaceId: this.activeWorkspace?.id, onToggleIsPublic: this.handleToggleIsPublic }), this.loginConfig && (h("kritzel-login-dialog", { key: 'b24a52c160d828218d949ac1d8b9edd9b3c00535', ref: el => {
2879
+ }, isPublic: this.currentIsPublic, workspaceId: this.activeWorkspace?.id, onToggleIsPublic: this.handleToggleIsPublic }), this.loginConfig && (h("kritzel-login-dialog", { key: '3394d489bdbc92c572208c8f65601bf91568f0c4', ref: el => {
2872
2880
  if (el) {
2873
2881
  this.loginDialogRef = el;
2874
2882
  }
@@ -26589,17 +26597,13 @@ const KritzelEngine = class {
26589
26597
  if (this.core.toolRegistry.hasTool(toolName)) {
26590
26598
  const existingTool = this.core.toolRegistry.getTool(toolName);
26591
26599
  if (toolConfig) {
26592
- Object.entries(toolConfig).forEach(([key, value]) => {
26593
- existingTool[key] = value;
26594
- });
26600
+ this.applyToolConfig(existingTool, toolConfig);
26595
26601
  }
26596
26602
  return existingTool;
26597
26603
  }
26598
26604
  const registeredTool = this.core.toolRegistry.registerTool(toolName, toolClass);
26599
26605
  if (toolConfig) {
26600
- Object.entries(toolConfig).forEach(([key, value]) => {
26601
- registeredTool[key] = value;
26602
- });
26606
+ this.applyToolConfig(registeredTool, toolConfig);
26603
26607
  }
26604
26608
  return Promise.resolve(registeredTool);
26605
26609
  }
@@ -26616,6 +26620,18 @@ const KritzelEngine = class {
26616
26620
  this.core.deselectAllObjects();
26617
26621
  tool?.onActivate();
26618
26622
  }
26623
+ /**
26624
+ * Switches the active drawing tool by its registered name.
26625
+ * @param toolName - The name the tool was registered with (e.g., 'brush', 'eraser').
26626
+ */
26627
+ async changeActiveToolByName(toolName) {
26628
+ const tool = this.core.toolRegistry.getTool(toolName);
26629
+ if (!tool) {
26630
+ console.warn(`[KritzelEngine] No tool registered with name: ${toolName}`);
26631
+ return;
26632
+ }
26633
+ await this.changeActiveTool(tool);
26634
+ }
26619
26635
  /** Disables all user interaction with the engine (pointer, keyboard, etc.). */
26620
26636
  async disable() {
26621
26637
  this.core.store.state.isEnabled = false;
@@ -27516,6 +27532,27 @@ const KritzelEngine = class {
27516
27532
  syncLoadingState() {
27517
27533
  this.core.store.state.isLoading = this._isWorkspaceLoading || this.isLoading;
27518
27534
  }
27535
+ applyToolConfig(tool, toolConfig) {
27536
+ Object.entries(toolConfig).forEach(([key, value]) => {
27537
+ tool[key] = value;
27538
+ });
27539
+ // Resolve palettes map into the flat palette array the UI reads
27540
+ if ('palettes' in toolConfig && 'type' in toolConfig) {
27541
+ const brushConfig = toolConfig;
27542
+ const resolvedPalette = brushConfig.palettes[brushConfig.type];
27543
+ if (resolvedPalette) {
27544
+ tool['palette'] = resolvedPalette;
27545
+ }
27546
+ }
27547
+ // Resolve sizes map into the flat sizes array the UI reads (brush tool uses a map keyed by type)
27548
+ if ('sizes' in toolConfig && toolConfig.sizes != null && 'type' in toolConfig) {
27549
+ const brushConfig = toolConfig;
27550
+ const resolvedSizes = brushConfig.sizes?.[brushConfig.type];
27551
+ if (resolvedSizes) {
27552
+ tool['sizes'] = resolvedSizes;
27553
+ }
27554
+ }
27555
+ }
27519
27556
  get isSelecting() {
27520
27557
  return this.core.store.state.activeTool instanceof KritzelSelectionTool && this.core.store.state.isSelecting;
27521
27558
  }
@@ -29552,7 +29589,7 @@ const KritzelPortal = class {
29552
29589
  * This file is auto-generated by the version bump scripts.
29553
29590
  * Do not modify manually.
29554
29591
  */
29555
- const KRITZEL_VERSION = '0.3.7';
29592
+ const KRITZEL_VERSION = '0.3.8';
29556
29593
 
29557
29594
  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)}`;
29558
29595
 
@@ -30016,7 +30053,7 @@ const KritzelSplitButton = class {
30016
30053
  };
30017
30054
  KritzelSplitButton.style = kritzelSplitButtonCss();
30018
30055
 
30019
- const kritzelStrokeSizeCss = () => `:host{display:flex;align-items:flex-start;gap:0;padding:0;width:100%;box-sizing:border-box}.size-grid{width:100%;display:grid;grid-template-columns:repeat(6, 32px);gap:8px;justify-items:center}.size-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box}.size-container:hover{background-color:var(--kritzel-stroke-size-hover-background-color, #ebebeb)}.size-container.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-stroke-size-selected-background-color, #ebebeb)}`;
30056
+ const kritzelStrokeSizeCss = () => `:host{display:flex;align-items:flex-start;gap:0;padding:0;width:100%;box-sizing:border-box}.size-grid{width:100%;display:grid;grid-template-columns:repeat(auto-fill, 32px);gap:8px;justify-items:center}.size-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box}.size-container:hover{background-color:var(--kritzel-stroke-size-hover-background-color, #ebebeb)}.size-container.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-stroke-size-selected-background-color, #ebebeb)}`;
30020
30057
 
30021
30058
  const KritzelStrokeSize = class {
30022
30059
  constructor(hostRef) {
@@ -30071,6 +30108,7 @@ const KritzelToolConfig = class {
30071
30108
  this.config = newConfig;
30072
30109
  if (this.config) {
30073
30110
  this.updatePalette();
30111
+ this.updateSizes();
30074
30112
  this.currentOpacity = newTool[this.config.opacityProperty] ?? 1;
30075
30113
  // Emit the values since they might have been updated from the old tool
30076
30114
  this.emitDisplayValues();
@@ -30095,6 +30133,7 @@ const KritzelToolConfig = class {
30095
30133
  displayValuesChange;
30096
30134
  config;
30097
30135
  palette = [];
30136
+ sizes = [];
30098
30137
  currentOpacity = 1;
30099
30138
  updateTrigger = 0;
30100
30139
  handleSelectionChange() {
@@ -30102,6 +30141,7 @@ const KritzelToolConfig = class {
30102
30141
  this.config = KritzelToolConfigHelper.getToolConfig(this.tool);
30103
30142
  if (this.config) {
30104
30143
  this.updatePalette();
30144
+ this.updateSizes();
30105
30145
  this.currentOpacity = this.tool[this.config.opacityProperty] ?? 1;
30106
30146
  this.emitDisplayValues();
30107
30147
  }
@@ -30116,6 +30156,7 @@ const KritzelToolConfig = class {
30116
30156
  this.config = KritzelToolConfigHelper.getToolConfig(this.tool);
30117
30157
  if (this.config) {
30118
30158
  this.updatePalette();
30159
+ this.updateSizes();
30119
30160
  this.currentOpacity = this.tool[this.config.opacityProperty] ?? 1;
30120
30161
  this.emitDisplayValues();
30121
30162
  }
@@ -30148,6 +30189,16 @@ const KritzelToolConfig = class {
30148
30189
  this.palette = this.tool.palette || [];
30149
30190
  }
30150
30191
  }
30192
+ updateSizes() {
30193
+ if (!this.config)
30194
+ return;
30195
+ if (this.config.sizesSource === 'none') {
30196
+ this.sizes = [];
30197
+ }
30198
+ else {
30199
+ this.sizes = this.tool.sizes || [];
30200
+ }
30201
+ }
30151
30202
  handleToggleExpand = () => {
30152
30203
  this.isExpanded = !this.isExpanded;
30153
30204
  };
@@ -30208,9 +30259,9 @@ const KritzelToolConfig = class {
30208
30259
  const value = this.tool[control.propertyName];
30209
30260
  switch (control.type) {
30210
30261
  case 'stroke-size':
30211
- return (h("kritzel-stroke-size", { key: control.type, selectedSize: value, onSizeChange: this.handleSizeChange }));
30262
+ return (h("kritzel-stroke-size", { key: control.type, sizes: this.sizes.length > 0 ? this.sizes : undefined, selectedSize: value, onSizeChange: this.handleSizeChange }));
30212
30263
  case 'font-size':
30213
- return (h("kritzel-font-size", { key: control.type, selectedSize: value, fontFamily: this.tool.fontFamily, onSizeChange: this.handleSizeChange }));
30264
+ return (h("kritzel-font-size", { key: control.type, sizes: this.sizes.length > 0 ? this.sizes : undefined, selectedSize: value, fontFamily: this.tool.fontFamily, onSizeChange: this.handleSizeChange }));
30214
30265
  case 'line-endings':
30215
30266
  return (h("kritzel-line-endings", { key: control.type, value: value, onValueChange: (event) => this.handlePropertyChange(control.propertyName, event.detail) }));
30216
30267
  case 'shape-fill':
@@ -5,7 +5,7 @@ import { g as globalScripts } from './app-globals-DQuL1Twl.js';
5
5
  const defineCustomElements = async (win, options) => {
6
6
  if (typeof window === 'undefined') return undefined;
7
7
  await globalScripts();
8
- return bootstrapLazy(JSON.parse("[[\"kritzel-active-users_42\",[[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\"],\"debugInfo\":[1040],\"user\":[16],\"activeUsers\":[16],\"controls\":[16],\"globalContextMenuItems\":[16],\"objectContextMenuItems\":[16],\"customSvgIcons\":[16],\"isControlsVisible\":[4,\"is-controls-visible\"],\"isUtilityPanelVisible\":[4,\"is-utility-panel-visible\"],\"isWorkspaceManagerVisible\":[4,\"is-workspace-manager-visible\"],\"isMoreMenuVisible\":[4,\"is-more-menu-visible\"],\"syncConfig\":[16],\"assetStorageConfig\":[16],\"cursorTarget\":[16],\"loginConfig\":[16],\"isLoading\":[4,\"is-loading\"],\"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],\"currentIsPublic\":[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],\"reinitSync\":[64],\"registerTool\":[64],\"changeActiveTool\":[64],\"disable\":[64],\"enable\":[64],\"copy\":[64],\"cut\":[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],\"openLoginDialog\":[64],\"setLoginLoading\":[64]},[[0,\"dblclick\",\"onTouchStart\"]],{\"isEngineReady\":[{\"onIsEngineReady\":0}],\"isControlsReady\":[{\"onIsControlsReady\":0}],\"workspaces\":[{\"onWorkspacesChange\":0}],\"activeWorkspace\":[{\"onActiveWorkspaceChange\":0}],\"activeWorkspaceId\":[{\"onActiveWorkspaceIdChange\":0}],\"currentTheme\":[{\"onCurrentThemeChange\":0}]}],[513,\"kritzel-controls\",{\"controls\":[16],\"activeControl\":[1040],\"isUtilityPanelVisible\":[4,\"is-utility-panel-visible\"],\"undoState\":[16],\"theme\":[1],\"firstConfig\":[32],\"isTouchDevice\":[32],\"selectedSubOptions\":[32],\"canScrollLeft\":[32],\"canScrollRight\":[32],\"needsScrolling\":[32],\"displayValues\":[32],\"internalControls\":[32],\"closeTooltip\":[64]},[[8,\"keydown\",\"handleKeyDown\"]],{\"controls\":[{\"onControlsChange\":0}],\"theme\":[{\"onThemeChange\":0}]}],[513,\"kritzel-export\",{\"workspaceName\":[1,\"workspace-name\"],\"isDialogOpen\":[32],\"previewUrl\":[32],\"isLoading\":[32],\"activeTab\":[32],\"exportFilename\":[32],\"viewportExportFormat\":[32],\"open\":[64]}],[513,\"kritzel-settings\",{\"shortcuts\":[16],\"settings\":[16],\"isDialogOpen\":[32],\"selectedCategoryId\":[32],\"scaleMin\":[32],\"scaleMax\":[32],\"lockDrawingScale\":[32],\"currentTheme\":[32],\"viewportBoundaryLeft\":[32],\"viewportBoundaryRight\":[32],\"viewportBoundaryTop\":[32],\"viewportBoundaryBottom\":[32],\"debugInfo\":[32],\"open\":[64]},null,{\"settings\":[{\"onSettingsPropChange\":0}]}],[513,\"kritzel-workspace-manager\",{\"visible\":[4],\"activeWorkspace\":[1040],\"workspaces\":[16],\"childMenuAnchor\":[32],\"openChildMenuItem\":[32],\"newWorkspace\":[32],\"editingItemId\":[32]},[[8,\"wheel\",\"handleWheel\"]]],[513,\"kritzel-engine\",{\"workspace\":[16],\"editorId\":[1,\"editor-id\"],\"activeWorkspaceId\":[1,\"active-workspace-id\"],\"syncConfig\":[16],\"assetStorageConfig\":[16],\"user\":[16],\"globalContextMenuItems\":[16],\"objectContextMenuItems\":[16],\"scaleMax\":[1026,\"scale-max\"],\"scaleMin\":[1026,\"scale-min\"],\"cursorTarget\":[16],\"lockDrawingScale\":[4,\"lock-drawing-scale\"],\"theme\":[1],\"viewportBoundaryLeft\":[2,\"viewport-boundary-left\"],\"viewportBoundaryRight\":[2,\"viewport-boundary-right\"],\"viewportBoundaryTop\":[2,\"viewport-boundary-top\"],\"viewportBoundaryBottom\":[2,\"viewport-boundary-bottom\"],\"debugInfo\":[16],\"wheelEnabled\":[4,\"wheel-enabled\"],\"isLoading\":[4,\"is-loading\"],\"forceUpdate\":[32],\"triggerSelectionChange\":[64],\"registerTool\":[64],\"changeActiveTool\":[64],\"disable\":[64],\"enable\":[64],\"delete\":[64],\"copy\":[64],\"cut\":[64],\"paste\":[64],\"bringForward\":[64],\"sendBackward\":[64],\"bringToFront\":[64],\"sendToBack\":[64],\"alignObjects\":[64],\"group\":[64],\"ungroup\":[64],\"undo\":[64],\"redo\":[64],\"hideContextMenu\":[64],\"getObjectById\":[64],\"getAllObjects\":[64],\"findObjects\":[64],\"getObjectsTotalCount\":[64],\"addObject\":[64],\"updateObject\":[64],\"removeObject\":[64],\"getSelectedObjects\":[64],\"getDisplayableShortcuts\":[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],\"getCopiedObjects\":[64],\"getObjectsInViewport\":[64],\"getScreenshot\":[64],\"exportViewportAsPng\":[64],\"exportViewportAsSvg\":[64],\"getSelectedObjectsAsSvgString\":[64],\"exportSelectedObjectsAsSvg\":[64],\"getSelectedObjectsAsPngDataUrl\":[64],\"exportSelectedObjectsAsPng\":[64],\"exportAsJson\":[64],\"importFromJson\":[64],\"loadObjectsFromJson\":[64],\"downloadAsJson\":[64],\"importFromFile\":[64],\"createWorkspace\":[64],\"updateWorkspace\":[64],\"deleteWorkspace\":[64],\"getWorkspaces\":[64],\"getActiveWorkspace\":[64],\"getIsPublic\":[64],\"loadSharedWorkspace\":[64],\"reinitSync\":[64],\"saveSettings\":[64],\"loadSettings\":[64]},[[1,\"wheel\",\"handleWheel\"],[0,\"pointerdown\",\"handlePointerDown\"],[0,\"pointermove\",\"handlePointerMove\"],[0,\"pointerup\",\"handlePointerUp\"],[0,\"pointercancel\",\"handlePointerCancel\"],[1,\"pointerleave\",\"handlePointerLeave\"],[1,\"longpress\",\"handleLongPress\"],[0,\"contextmenu\",\"handleContextMenu\"],[9,\"resize\",\"handleResize\"],[8,\"keydown\",\"handleKeyDown\"],[8,\"keyup\",\"handleKeyUp\"],[4,\"dblclick\",\"preventDoubleTapZoomOnTouchDevices\"]],{\"workspace\":[{\"onWorkspaceChange\":0}],\"activeWorkspaceId\":[{\"onActiveWorkspaceIdChange\":0}],\"syncConfig\":[{\"onSyncConfigChange\":0}],\"assetStorageConfig\":[{\"onAssetStorageConfigChange\":0}],\"user\":[{\"onUserChange\":0}],\"scaleMax\":[{\"validateScaleMax\":0}],\"scaleMin\":[{\"validateScaleMin\":0}],\"cursorTarget\":[{\"onCursorTargetChange\":0}],\"lockDrawingScale\":[{\"onLockDrawingScaleChange\":0}],\"theme\":[{\"onThemeChange\":0}],\"viewportBoundaryLeft\":[{\"onViewportBoundaryLeftChange\":0}],\"viewportBoundaryRight\":[{\"onViewportBoundaryRightChange\":0}],\"viewportBoundaryTop\":[{\"onViewportBoundaryTopChange\":0}],\"viewportBoundaryBottom\":[{\"onViewportBoundaryBottomChange\":0}],\"debugInfo\":[{\"onDebugInfoChange\":0}],\"isLoading\":[{\"onIsLoadingChange\":0}]}],[513,\"kritzel-more-menu\",{\"visible\":[4],\"items\":[16],\"icon\":[1],\"iconSize\":[2,\"icon-size\"],\"offsetY\":[2,\"offset-y\"],\"menuAnchor\":[32],\"isTouchDevice\":[32]}],[513,\"kritzel-current-user\",{\"user\":[16],\"avatarSize\":[2,\"avatar-size\"]}],[513,\"kritzel-share-dialog\",{\"isPublic\":[4,\"is-public\"],\"workspaceId\":[1,\"workspace-id\"],\"isDialogOpen\":[32],\"internalIsPublic\":[32],\"copySuccess\":[32],\"open\":[64],\"close\":[64]},null,{\"isPublic\":[{\"onIsPublicChange\":0}]}],[513,\"kritzel-login-dialog\",{\"providers\":[16],\"dialogTitle\":[1,\"dialog-title\"],\"subtitle\":[1],\"isDialogOpen\":[32],\"loadingProvider\":[32],\"open\":[64],\"close\":[64],\"setLoading\":[64]}],[513,\"kritzel-active-users\",{\"users\":[16],\"avatarSize\":[2,\"avatar-size\"],\"maxVisible\":[2,\"max-visible\"],\"overlap\":[2]}],[513,\"kritzel-back-to-content\",{\"visible\":[4],\"text\":[1]}],[769,\"kritzel-button\",{\"variant\":[1],\"disabled\":[4],\"type\":[1]}],[513,\"kritzel-tool-config\",{\"tool\":[1040],\"isExpanded\":[1028,\"is-expanded\"],\"theme\":[1],\"engine\":[16],\"config\":[32],\"palette\":[32],\"currentOpacity\":[32],\"updateTrigger\":[32]},null,{\"tool\":[{\"handleToolChange\":0}],\"theme\":[{\"onThemeChange\":0}],\"engine\":[{\"handleEngineChange\":0}]}],[513,\"kritzel-split-button\",{\"buttonIcon\":[1,\"button-icon\"],\"dropdownIcon\":[1,\"dropdown-icon\"],\"items\":[16],\"mainButtonDisabled\":[4,\"main-button-disabled\"],\"menuButtonDisabled\":[4,\"menu-button-disabled\"],\"isMenuOpen\":[32],\"isTouchDevice\":[32],\"anchorElement\":[32],\"menuScrollTop\":[32],\"open\":[64],\"focusMenu\":[64]}],[513,\"kritzel-current-user-dialog\",{\"user\":[16],\"isDialogOpen\":[32],\"open\":[64],\"close\":[64]}],[513,\"kritzel-context-menu\",{\"items\":[16],\"objects\":[16],\"processedItems\":[32],\"openSubmenuIndex\":[32],\"submenuPosition\":[32]},[[9,\"pointerdown\",\"handleOutsideClick\"]],{\"items\":[{\"onItemsChanged\":0}]}],[769,\"kritzel-master-detail\",{\"items\":[16],\"selectedItemId\":[1,\"selected-item-id\"],\"focusedIndex\":[32],\"showMobileDetail\":[32]},null,{\"selectedItemId\":[{\"watchSelectedItemId\":0}]}],[513,\"kritzel-pill-tabs\",{\"tabs\":[16],\"value\":[1025]}],[513,\"kritzel-utility-panel\",{\"undoState\":[16]}],[513,\"kritzel-awareness-cursors\",{\"core\":[16],\"showEdgeIndicators\":[4,\"show-edge-indicators\"],\"edgeIndicatorPadding\":[2,\"edge-indicator-padding\"],\"remoteCursors\":[32],\"objectVersion\":[32]}],[513,\"kritzel-cursor-trail\",{\"core\":[16],\"cursorTrailPoints\":[32],\"isLeftButtonDown\":[32]},[[9,\"pointerdown\",\"handleMouseDown\"],[9,\"pointermove\",\"handlePointerMove\"],[9,\"pointerup\",\"handlePointerUp\"]]],[513,\"kritzel-input\",{\"value\":[1025],\"label\":[1],\"placeholder\":[1],\"suffix\":[1],\"type\":[1],\"disabled\":[4],\"inputValue\":[32]},null,{\"value\":[{\"onValueChange\":0}]}],[513,\"kritzel-numeric-input\",{\"value\":[1026],\"min\":[2],\"max\":[2],\"step\":[2],\"label\":[1],\"placeholder\":[1],\"inputValue\":[32]},null,{\"value\":[{\"onValueChange\":0}]}],[769,\"kritzel-tooltip\",{\"isVisible\":[1028,\"is-visible\"],\"anchorElement\":[16],\"triggerElement\":[16],\"offsetY\":[2,\"offset-y\"],\"positionX\":[32],\"positionY\":[32],\"open\":[64],\"close\":[64],\"toggle\":[64],\"focusContent\":[64]},[[4,\"click\",\"handleOutsideClick\"],[6,\"pointerdown\",\"handleOutsidePointerDown\"],[4,\"kritzelTooltipCloseAll\",\"handleCloseAll\"],[9,\"resize\",\"handleWindowResize\"]],{\"triggerElement\":[{\"handleTriggerElementChange\":0}],\"isVisible\":[{\"handleVisibilityChange\":0}]}],[513,\"kritzel-color-palette\",{\"colors\":[16],\"selectedColor\":[1040],\"isExpanded\":[4,\"is-expanded\"],\"isOpaque\":[4,\"is-opaque\"],\"opacity\":[2],\"theme\":[1]}],[513,\"kritzel-font-family\",{\"fontOptions\":[16],\"selectedFontFamily\":[1025,\"selected-font-family\"]}],[513,\"kritzel-font-size\",{\"sizes\":[16],\"selectedSize\":[1026,\"selected-size\"],\"fontFamily\":[1,\"font-family\"]}],[513,\"kritzel-stroke-size\",{\"sizes\":[16],\"selectedSize\":[1026,\"selected-size\"]}],[513,\"kritzel-line-endings\",{\"styles\":[16],\"value\":[1040]}],[513,\"kritzel-opacity-slider\",{\"value\":[1026],\"min\":[2],\"max\":[2],\"step\":[2],\"previewColor\":[1,\"preview-color\"]}],[513,\"kritzel-shape-fill\",{\"value\":[1025]}],[513,\"kritzel-slide-toggle\",{\"checked\":[1028],\"disabled\":[4],\"label\":[1]}],[513,\"kritzel-avatar\",{\"user\":[16],\"name\":[1],\"size\":[2],\"color\":[1],\"imageError\":[32]},null,{\"user\":[{\"userChanged\":0}],\"profileImageUrl\":[{\"profileImageUrlChanged\":0}]}],[513,\"kritzel-font\",{\"fontFamily\":[1,\"font-family\"],\"size\":[2],\"color\":[1]}],[513,\"kritzel-color\",{\"value\":[1],\"theme\":[1],\"size\":[2]}],[513,\"kritzel-menu\",{\"items\":[16],\"parent\":[16],\"selectedIndex\":[32],\"setScrollTop\":[64],\"setFocus\":[64]}],[513,\"kritzel-menu-item\",{\"item\":[16],\"parent\":[16],\"isDirty\":[32]},null,{\"item\":[{\"onItemChange\":0}]}],[769,\"kritzel-dropdown\",{\"options\":[16],\"value\":[1],\"width\":[1],\"selectStyles\":[16],\"forceOpenDirection\":[1,\"force-open-direction\"],\"internalValue\":[32],\"hasSuffixContent\":[32],\"hasPrefixContent\":[32],\"isOpen\":[32],\"focusedIndex\":[32],\"openDirection\":[32]},[[4,\"click\",\"handleDocumentClick\"],[4,\"keydown\",\"handleDocumentKeydown\"]],{\"options\":[{\"optionsChanged\":0}],\"value\":[{\"externalValueChanged\":0}]}],[769,\"kritzel-portal\",{\"anchor\":[16],\"offsetX\":[2,\"offset-x\"],\"offsetY\":[2,\"offset-y\"],\"autoFocus\":[4,\"auto-focus\"]},[[8,\"kritzel-dismiss-menus\",\"handleDismissMenus\"],[8,\"click\",\"handleOutsideClick\"],[6,\"pointerdown\",\"handleOutsidePointerDown\"],[8,\"keydown\",\"handleKeyDown\"],[11,\"resize\",\"handleResize\"],[11,\"scroll\",\"handleWindowScroll\"]],{\"anchor\":[{\"anchorChanged\":0}]}],[769,\"kritzel-dialog\",{\"isOpen\":[516,\"is-open\"],\"dialogTitle\":[1,\"dialog-title\"],\"closable\":[4],\"closeOnBackdrop\":[4,\"close-on-backdrop\"],\"closeOnEscape\":[4,\"close-on-escape\"],\"autoFocus\":[4,\"auto-focus\"],\"trapFocus\":[4,\"trap-focus\"],\"size\":[1],\"fullscreenOnMobile\":[4,\"fullscreen-on-mobile\"],\"contained\":[516],\"isAnimating\":[32],\"mobileLockedHeight\":[32],\"containerRect\":[32],\"containerBorderRadius\":[32],\"open\":[64],\"close\":[64],\"focusFirstElement\":[64]},[[8,\"keydown\",\"handleKeyDown\"],[9,\"resize\",\"handleWindowResize\"],[8,\"orientationchange\",\"handleOrientationChange\"]],{\"isOpen\":[{\"handleIsOpenChange\":0}]}],[513,\"kritzel-icon\",{\"name\":[1],\"label\":[1],\"size\":[2]}]]],[\"kritzel-brush-style\",[[513,\"kritzel-brush-style\",{\"type\":[1],\"brushOptions\":[16]}]]]]"), options);
8
+ return bootstrapLazy(JSON.parse("[[\"kritzel-active-users_42\",[[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\"],\"debugInfo\":[1040],\"user\":[16],\"activeUsers\":[16],\"controls\":[16],\"globalContextMenuItems\":[16],\"objectContextMenuItems\":[16],\"customSvgIcons\":[16],\"isControlsVisible\":[4,\"is-controls-visible\"],\"isUtilityPanelVisible\":[4,\"is-utility-panel-visible\"],\"isWorkspaceManagerVisible\":[4,\"is-workspace-manager-visible\"],\"isMoreMenuVisible\":[4,\"is-more-menu-visible\"],\"syncConfig\":[16],\"assetStorageConfig\":[16],\"cursorTarget\":[16],\"loginConfig\":[16],\"isLoading\":[4,\"is-loading\"],\"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],\"currentIsPublic\":[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],\"reinitSync\":[64],\"registerTool\":[64],\"changeActiveTool\":[64],\"changeActiveToolByName\":[64],\"disable\":[64],\"enable\":[64],\"copy\":[64],\"cut\":[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],\"openLoginDialog\":[64],\"setLoginLoading\":[64]},[[0,\"dblclick\",\"onTouchStart\"]],{\"isEngineReady\":[{\"onIsEngineReady\":0}],\"isControlsReady\":[{\"onIsControlsReady\":0}],\"workspaces\":[{\"onWorkspacesChange\":0}],\"activeWorkspace\":[{\"onActiveWorkspaceChange\":0}],\"activeWorkspaceId\":[{\"onActiveWorkspaceIdChange\":0}],\"currentTheme\":[{\"onCurrentThemeChange\":0}]}],[513,\"kritzel-controls\",{\"controls\":[16],\"activeControl\":[1040],\"isUtilityPanelVisible\":[4,\"is-utility-panel-visible\"],\"undoState\":[16],\"theme\":[1],\"firstConfig\":[32],\"isTouchDevice\":[32],\"selectedSubOptions\":[32],\"canScrollLeft\":[32],\"canScrollRight\":[32],\"needsScrolling\":[32],\"displayValues\":[32],\"internalControls\":[32],\"closeTooltip\":[64]},[[8,\"keydown\",\"handleKeyDown\"]],{\"controls\":[{\"onControlsChange\":0}],\"theme\":[{\"onThemeChange\":0}]}],[513,\"kritzel-export\",{\"workspaceName\":[1,\"workspace-name\"],\"isDialogOpen\":[32],\"previewUrl\":[32],\"isLoading\":[32],\"activeTab\":[32],\"exportFilename\":[32],\"viewportExportFormat\":[32],\"open\":[64]}],[513,\"kritzel-settings\",{\"shortcuts\":[16],\"settings\":[16],\"isDialogOpen\":[32],\"selectedCategoryId\":[32],\"scaleMin\":[32],\"scaleMax\":[32],\"lockDrawingScale\":[32],\"currentTheme\":[32],\"viewportBoundaryLeft\":[32],\"viewportBoundaryRight\":[32],\"viewportBoundaryTop\":[32],\"viewportBoundaryBottom\":[32],\"debugInfo\":[32],\"open\":[64]},null,{\"settings\":[{\"onSettingsPropChange\":0}]}],[513,\"kritzel-workspace-manager\",{\"visible\":[4],\"activeWorkspace\":[1040],\"workspaces\":[16],\"childMenuAnchor\":[32],\"openChildMenuItem\":[32],\"newWorkspace\":[32],\"editingItemId\":[32]},[[8,\"wheel\",\"handleWheel\"]]],[513,\"kritzel-engine\",{\"workspace\":[16],\"editorId\":[1,\"editor-id\"],\"activeWorkspaceId\":[1,\"active-workspace-id\"],\"syncConfig\":[16],\"assetStorageConfig\":[16],\"user\":[16],\"globalContextMenuItems\":[16],\"objectContextMenuItems\":[16],\"scaleMax\":[1026,\"scale-max\"],\"scaleMin\":[1026,\"scale-min\"],\"cursorTarget\":[16],\"lockDrawingScale\":[4,\"lock-drawing-scale\"],\"theme\":[1],\"viewportBoundaryLeft\":[2,\"viewport-boundary-left\"],\"viewportBoundaryRight\":[2,\"viewport-boundary-right\"],\"viewportBoundaryTop\":[2,\"viewport-boundary-top\"],\"viewportBoundaryBottom\":[2,\"viewport-boundary-bottom\"],\"debugInfo\":[16],\"wheelEnabled\":[4,\"wheel-enabled\"],\"isLoading\":[4,\"is-loading\"],\"forceUpdate\":[32],\"triggerSelectionChange\":[64],\"registerTool\":[64],\"changeActiveTool\":[64],\"changeActiveToolByName\":[64],\"disable\":[64],\"enable\":[64],\"delete\":[64],\"copy\":[64],\"cut\":[64],\"paste\":[64],\"bringForward\":[64],\"sendBackward\":[64],\"bringToFront\":[64],\"sendToBack\":[64],\"alignObjects\":[64],\"group\":[64],\"ungroup\":[64],\"undo\":[64],\"redo\":[64],\"hideContextMenu\":[64],\"getObjectById\":[64],\"getAllObjects\":[64],\"findObjects\":[64],\"getObjectsTotalCount\":[64],\"addObject\":[64],\"updateObject\":[64],\"removeObject\":[64],\"getSelectedObjects\":[64],\"getDisplayableShortcuts\":[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],\"getCopiedObjects\":[64],\"getObjectsInViewport\":[64],\"getScreenshot\":[64],\"exportViewportAsPng\":[64],\"exportViewportAsSvg\":[64],\"getSelectedObjectsAsSvgString\":[64],\"exportSelectedObjectsAsSvg\":[64],\"getSelectedObjectsAsPngDataUrl\":[64],\"exportSelectedObjectsAsPng\":[64],\"exportAsJson\":[64],\"importFromJson\":[64],\"loadObjectsFromJson\":[64],\"downloadAsJson\":[64],\"importFromFile\":[64],\"createWorkspace\":[64],\"updateWorkspace\":[64],\"deleteWorkspace\":[64],\"getWorkspaces\":[64],\"getActiveWorkspace\":[64],\"getIsPublic\":[64],\"loadSharedWorkspace\":[64],\"reinitSync\":[64],\"saveSettings\":[64],\"loadSettings\":[64]},[[1,\"wheel\",\"handleWheel\"],[0,\"pointerdown\",\"handlePointerDown\"],[0,\"pointermove\",\"handlePointerMove\"],[0,\"pointerup\",\"handlePointerUp\"],[0,\"pointercancel\",\"handlePointerCancel\"],[1,\"pointerleave\",\"handlePointerLeave\"],[1,\"longpress\",\"handleLongPress\"],[0,\"contextmenu\",\"handleContextMenu\"],[9,\"resize\",\"handleResize\"],[8,\"keydown\",\"handleKeyDown\"],[8,\"keyup\",\"handleKeyUp\"],[4,\"dblclick\",\"preventDoubleTapZoomOnTouchDevices\"]],{\"workspace\":[{\"onWorkspaceChange\":0}],\"activeWorkspaceId\":[{\"onActiveWorkspaceIdChange\":0}],\"syncConfig\":[{\"onSyncConfigChange\":0}],\"assetStorageConfig\":[{\"onAssetStorageConfigChange\":0}],\"user\":[{\"onUserChange\":0}],\"scaleMax\":[{\"validateScaleMax\":0}],\"scaleMin\":[{\"validateScaleMin\":0}],\"cursorTarget\":[{\"onCursorTargetChange\":0}],\"lockDrawingScale\":[{\"onLockDrawingScaleChange\":0}],\"theme\":[{\"onThemeChange\":0}],\"viewportBoundaryLeft\":[{\"onViewportBoundaryLeftChange\":0}],\"viewportBoundaryRight\":[{\"onViewportBoundaryRightChange\":0}],\"viewportBoundaryTop\":[{\"onViewportBoundaryTopChange\":0}],\"viewportBoundaryBottom\":[{\"onViewportBoundaryBottomChange\":0}],\"debugInfo\":[{\"onDebugInfoChange\":0}],\"isLoading\":[{\"onIsLoadingChange\":0}]}],[513,\"kritzel-more-menu\",{\"visible\":[4],\"items\":[16],\"icon\":[1],\"iconSize\":[2,\"icon-size\"],\"offsetY\":[2,\"offset-y\"],\"menuAnchor\":[32],\"isTouchDevice\":[32]}],[513,\"kritzel-current-user\",{\"user\":[16],\"avatarSize\":[2,\"avatar-size\"]}],[513,\"kritzel-share-dialog\",{\"isPublic\":[4,\"is-public\"],\"workspaceId\":[1,\"workspace-id\"],\"isDialogOpen\":[32],\"internalIsPublic\":[32],\"copySuccess\":[32],\"open\":[64],\"close\":[64]},null,{\"isPublic\":[{\"onIsPublicChange\":0}]}],[513,\"kritzel-login-dialog\",{\"providers\":[16],\"dialogTitle\":[1,\"dialog-title\"],\"subtitle\":[1],\"isDialogOpen\":[32],\"loadingProvider\":[32],\"open\":[64],\"close\":[64],\"setLoading\":[64]}],[513,\"kritzel-active-users\",{\"users\":[16],\"avatarSize\":[2,\"avatar-size\"],\"maxVisible\":[2,\"max-visible\"],\"overlap\":[2]}],[513,\"kritzel-back-to-content\",{\"visible\":[4],\"text\":[1]}],[769,\"kritzel-button\",{\"variant\":[1],\"disabled\":[4],\"type\":[1]}],[513,\"kritzel-tool-config\",{\"tool\":[1040],\"isExpanded\":[1028,\"is-expanded\"],\"theme\":[1],\"engine\":[16],\"config\":[32],\"palette\":[32],\"sizes\":[32],\"currentOpacity\":[32],\"updateTrigger\":[32]},null,{\"tool\":[{\"handleToolChange\":0}],\"theme\":[{\"onThemeChange\":0}],\"engine\":[{\"handleEngineChange\":0}]}],[513,\"kritzel-split-button\",{\"buttonIcon\":[1,\"button-icon\"],\"dropdownIcon\":[1,\"dropdown-icon\"],\"items\":[16],\"mainButtonDisabled\":[4,\"main-button-disabled\"],\"menuButtonDisabled\":[4,\"menu-button-disabled\"],\"isMenuOpen\":[32],\"isTouchDevice\":[32],\"anchorElement\":[32],\"menuScrollTop\":[32],\"open\":[64],\"focusMenu\":[64]}],[513,\"kritzel-current-user-dialog\",{\"user\":[16],\"isDialogOpen\":[32],\"open\":[64],\"close\":[64]}],[513,\"kritzel-context-menu\",{\"items\":[16],\"objects\":[16],\"processedItems\":[32],\"openSubmenuIndex\":[32],\"submenuPosition\":[32]},[[9,\"pointerdown\",\"handleOutsideClick\"]],{\"items\":[{\"onItemsChanged\":0}]}],[769,\"kritzel-master-detail\",{\"items\":[16],\"selectedItemId\":[1,\"selected-item-id\"],\"focusedIndex\":[32],\"showMobileDetail\":[32]},null,{\"selectedItemId\":[{\"watchSelectedItemId\":0}]}],[513,\"kritzel-pill-tabs\",{\"tabs\":[16],\"value\":[1025]}],[513,\"kritzel-utility-panel\",{\"undoState\":[16]}],[513,\"kritzel-awareness-cursors\",{\"core\":[16],\"showEdgeIndicators\":[4,\"show-edge-indicators\"],\"edgeIndicatorPadding\":[2,\"edge-indicator-padding\"],\"remoteCursors\":[32],\"objectVersion\":[32]}],[513,\"kritzel-cursor-trail\",{\"core\":[16],\"cursorTrailPoints\":[32],\"isLeftButtonDown\":[32]},[[9,\"pointerdown\",\"handleMouseDown\"],[9,\"pointermove\",\"handlePointerMove\"],[9,\"pointerup\",\"handlePointerUp\"]]],[513,\"kritzel-input\",{\"value\":[1025],\"label\":[1],\"placeholder\":[1],\"suffix\":[1],\"type\":[1],\"disabled\":[4],\"inputValue\":[32]},null,{\"value\":[{\"onValueChange\":0}]}],[513,\"kritzel-numeric-input\",{\"value\":[1026],\"min\":[2],\"max\":[2],\"step\":[2],\"label\":[1],\"placeholder\":[1],\"inputValue\":[32]},null,{\"value\":[{\"onValueChange\":0}]}],[769,\"kritzel-tooltip\",{\"isVisible\":[1028,\"is-visible\"],\"anchorElement\":[16],\"triggerElement\":[16],\"offsetY\":[2,\"offset-y\"],\"positionX\":[32],\"positionY\":[32],\"open\":[64],\"close\":[64],\"toggle\":[64],\"focusContent\":[64]},[[4,\"click\",\"handleOutsideClick\"],[6,\"pointerdown\",\"handleOutsidePointerDown\"],[4,\"kritzelTooltipCloseAll\",\"handleCloseAll\"],[9,\"resize\",\"handleWindowResize\"]],{\"triggerElement\":[{\"handleTriggerElementChange\":0}],\"isVisible\":[{\"handleVisibilityChange\":0}]}],[513,\"kritzel-color-palette\",{\"colors\":[16],\"selectedColor\":[1040],\"isExpanded\":[4,\"is-expanded\"],\"isOpaque\":[4,\"is-opaque\"],\"opacity\":[2],\"theme\":[1]}],[513,\"kritzel-font-family\",{\"fontOptions\":[16],\"selectedFontFamily\":[1025,\"selected-font-family\"]}],[513,\"kritzel-font-size\",{\"sizes\":[16],\"selectedSize\":[1026,\"selected-size\"],\"fontFamily\":[1,\"font-family\"]}],[513,\"kritzel-stroke-size\",{\"sizes\":[16],\"selectedSize\":[1026,\"selected-size\"]}],[513,\"kritzel-line-endings\",{\"styles\":[16],\"value\":[1040]}],[513,\"kritzel-opacity-slider\",{\"value\":[1026],\"min\":[2],\"max\":[2],\"step\":[2],\"previewColor\":[1,\"preview-color\"]}],[513,\"kritzel-shape-fill\",{\"value\":[1025]}],[513,\"kritzel-slide-toggle\",{\"checked\":[1028],\"disabled\":[4],\"label\":[1]}],[513,\"kritzel-avatar\",{\"user\":[16],\"name\":[1],\"size\":[2],\"color\":[1],\"imageError\":[32]},null,{\"user\":[{\"userChanged\":0}],\"profileImageUrl\":[{\"profileImageUrlChanged\":0}]}],[513,\"kritzel-font\",{\"fontFamily\":[1,\"font-family\"],\"size\":[2],\"color\":[1]}],[513,\"kritzel-color\",{\"value\":[1],\"theme\":[1],\"size\":[2]}],[513,\"kritzel-menu\",{\"items\":[16],\"parent\":[16],\"selectedIndex\":[32],\"setScrollTop\":[64],\"setFocus\":[64]}],[513,\"kritzel-menu-item\",{\"item\":[16],\"parent\":[16],\"isDirty\":[32]},null,{\"item\":[{\"onItemChange\":0}]}],[769,\"kritzel-dropdown\",{\"options\":[16],\"value\":[1],\"width\":[1],\"selectStyles\":[16],\"forceOpenDirection\":[1,\"force-open-direction\"],\"internalValue\":[32],\"hasSuffixContent\":[32],\"hasPrefixContent\":[32],\"isOpen\":[32],\"focusedIndex\":[32],\"openDirection\":[32]},[[4,\"click\",\"handleDocumentClick\"],[4,\"keydown\",\"handleDocumentKeydown\"]],{\"options\":[{\"optionsChanged\":0}],\"value\":[{\"externalValueChanged\":0}]}],[769,\"kritzel-portal\",{\"anchor\":[16],\"offsetX\":[2,\"offset-x\"],\"offsetY\":[2,\"offset-y\"],\"autoFocus\":[4,\"auto-focus\"]},[[8,\"kritzel-dismiss-menus\",\"handleDismissMenus\"],[8,\"click\",\"handleOutsideClick\"],[6,\"pointerdown\",\"handleOutsidePointerDown\"],[8,\"keydown\",\"handleKeyDown\"],[11,\"resize\",\"handleResize\"],[11,\"scroll\",\"handleWindowScroll\"]],{\"anchor\":[{\"anchorChanged\":0}]}],[769,\"kritzel-dialog\",{\"isOpen\":[516,\"is-open\"],\"dialogTitle\":[1,\"dialog-title\"],\"closable\":[4],\"closeOnBackdrop\":[4,\"close-on-backdrop\"],\"closeOnEscape\":[4,\"close-on-escape\"],\"autoFocus\":[4,\"auto-focus\"],\"trapFocus\":[4,\"trap-focus\"],\"size\":[1],\"fullscreenOnMobile\":[4,\"fullscreen-on-mobile\"],\"contained\":[516],\"isAnimating\":[32],\"mobileLockedHeight\":[32],\"containerRect\":[32],\"containerBorderRadius\":[32],\"open\":[64],\"close\":[64],\"focusFirstElement\":[64]},[[8,\"keydown\",\"handleKeyDown\"],[9,\"resize\",\"handleWindowResize\"],[8,\"orientationchange\",\"handleOrientationChange\"]],{\"isOpen\":[{\"handleIsOpenChange\":0}]}],[513,\"kritzel-icon\",{\"name\":[1],\"label\":[1],\"size\":[2]}]]],[\"kritzel-brush-style\",[[513,\"kritzel-brush-style\",{\"type\":[1],\"brushOptions\":[16]}]]]]"), options);
9
9
  };
10
10
 
11
11
  export { defineCustomElements };
@@ -1140,7 +1140,7 @@ class Fragment {
1140
1140
  return Fragment.empty;
1141
1141
  if (!Array.isArray(value))
1142
1142
  throw new RangeError("Invalid input for Fragment.fromJSON");
1143
- return new Fragment(value.map(schema.nodeFromJSON));
1143
+ return Fragment.fromArray(value.map(schema.nodeFromJSON));
1144
1144
  }
1145
1145
  /**
1146
1146
  Build a fragment from an array of nodes. Ensures that adjacent
@@ -1374,17 +1374,6 @@ given an invalid replacement.
1374
1374
  */
1375
1375
  class ReplaceError extends Error {
1376
1376
  }
1377
- /*
1378
- ReplaceError = function(this: any, message: string) {
1379
- let err = Error.call(this, message)
1380
- ;(err as any).__proto__ = ReplaceError.prototype
1381
- return err
1382
- } as any
1383
-
1384
- ReplaceError.prototype = Object.create(Error.prototype)
1385
- ReplaceError.prototype.constructor = ReplaceError
1386
- ReplaceError.prototype.name = "ReplaceError"
1387
- */
1388
1377
  /**
1389
1378
  A slice represents a piece cut out of a larger document. It
1390
1379
  stores not only a fragment, but also the depth up to which nodes on
@@ -1430,7 +1419,7 @@ class Slice {
1430
1419
  @internal
1431
1420
  */
1432
1421
  insertAt(pos, fragment) {
1433
- let content = insertInto(this.content, pos + this.openStart, fragment);
1422
+ let content = insertInto(this.content, pos + this.openStart, fragment, this.openStart + 1, this.openEnd + 1);
1434
1423
  return content && new Slice(content, this.openStart, this.openEnd);
1435
1424
  }
1436
1425
  /**
@@ -1504,14 +1493,14 @@ function removeRange(content, from, to) {
1504
1493
  throw new RangeError("Removing non-flat range");
1505
1494
  return content.replaceChild(index, child.copy(removeRange(child.content, from - offset - 1, to - offset - 1)));
1506
1495
  }
1507
- function insertInto(content, dist, insert, parent) {
1496
+ function insertInto(content, dist, insert, openStart, openEnd, parent) {
1508
1497
  let { index, offset } = content.findIndex(dist), child = content.maybeChild(index);
1509
1498
  if (offset == dist || child.isText) {
1510
- if (parent && !parent.canReplace(index, index, insert))
1499
+ if (parent && openStart <= 0 && openEnd <= 0 && !parent.canReplace(index, index, insert))
1511
1500
  return null;
1512
1501
  return content.cut(0, dist).append(insert).append(content.cut(dist));
1513
1502
  }
1514
- let inner = insertInto(child.content, dist - offset - 1, insert, child);
1503
+ let inner = insertInto(child.content, dist - offset - 1, insert, index == 0 ? openStart - 1 : 0, index == content.childCount - 1 ? openEnd - 1 : 0, child);
1515
1504
  return inner && content.replaceChild(index, child.copy(inner));
1516
1505
  }
1517
1506
  function replace($from, $to, slice) {
@@ -2041,10 +2030,11 @@ class Node {
2041
2030
  */
2042
2031
  forEach(f) { this.content.forEach(f); }
2043
2032
  /**
2044
- Invoke a callback for all descendant nodes recursively between
2033
+ Invoke a callback for all descendant nodes recursively overlapping
2045
2034
  the given two positions that are relative to start of this
2046
- node's content. The callback is invoked with the node, its
2047
- position relative to the original node (method receiver),
2035
+ node's content. This includes all ancestors of the nodes
2036
+ containing the two positions. The callback is invoked with the
2037
+ node, its position relative to the original node (method receiver),
2048
2038
  its parent node, and its child index. When the callback returns
2049
2039
  false for a given node, that node's children will not be
2050
2040
  recursed over. The last parameter can be used to specify a
@@ -4132,6 +4122,8 @@ class DOMSerializer {
4132
4122
  @internal
4133
4123
  */
4134
4124
  serializeNodeInner(node, options) {
4125
+ if (node.isText)
4126
+ return doc$1(options).createTextNode(node.text);
4135
4127
  let { dom, contentDOM } = renderSpec(doc$1(options), this.nodes[node.type.name](node), null, node.attrs);
4136
4128
  if (contentDOM) {
4137
4129
  if (node.isLeaf)
@@ -4166,6 +4158,9 @@ class DOMSerializer {
4166
4158
  return toDOM && renderSpec(doc$1(options), toDOM(mark, inline), null, mark.attrs);
4167
4159
  }
4168
4160
  static renderSpec(doc, structure, xmlNS = null, blockArraysIn) {
4161
+ // Kludge for backwards-compatibility with accidental original behavious
4162
+ if (typeof structure == "string")
4163
+ return { dom: doc.createTextNode(structure) };
4169
4164
  return renderSpec(doc, structure, xmlNS, blockArraysIn);
4170
4165
  }
4171
4166
  /**
@@ -4237,11 +4232,9 @@ function suspiciousAttributesInner(attrs) {
4237
4232
  return result;
4238
4233
  }
4239
4234
  function renderSpec(doc, structure, xmlNS, blockArraysIn) {
4240
- if (typeof structure == "string")
4241
- return { dom: doc.createTextNode(structure) };
4242
- if (structure.nodeType != null)
4235
+ if (structure.nodeType == 1)
4243
4236
  return { dom: structure };
4244
- if (structure.dom && structure.dom.nodeType != null)
4237
+ if (structure.dom && structure.dom.nodeType == 1)
4245
4238
  return structure;
4246
4239
  let tagName = structure[0], suspicious;
4247
4240
  if (typeof tagName != "string")
@@ -4277,6 +4270,9 @@ function renderSpec(doc, structure, xmlNS, blockArraysIn) {
4277
4270
  throw new RangeError("Content hole must be the only child of its parent node");
4278
4271
  return { dom, contentDOM: dom };
4279
4272
  }
4273
+ else if (typeof child == "string") {
4274
+ dom.appendChild(doc.createTextNode(child));
4275
+ }
4280
4276
  else {
4281
4277
  let { dom: inner, contentDOM: innerContent } = renderSpec(doc, child, xmlNS, blockArraysIn);
4282
4278
  dom.appendChild(inner);
@@ -19444,6 +19440,9 @@ class KritzelBaseTool {
19444
19440
  }
19445
19441
  }
19446
19442
 
19443
+ const DEFAULT_STROKE_SIZES = [4, 6, 8, 12, 16, 24];
19444
+ const DEFAULT_FONT_SIZES = [8, 10, 12, 16, 20, 24];
19445
+
19447
19446
  /**
19448
19447
  * Brush tool for free-hand drawing on the canvas.
19449
19448
  * Creates smooth paths by tracking pointer movement and rendering stroke paths.
@@ -19458,6 +19457,8 @@ class KritzelBrushTool extends KritzelBaseTool {
19458
19457
  opacity = 1;
19459
19458
  /** Available color palette for the brush tool */
19460
19459
  palette = [...DEFAULT_COLOR_PALETTE];
19460
+ /** Available stroke size presets for the brush tool */
19461
+ sizes = [...DEFAULT_STROKE_SIZES];
19461
19462
  /**
19462
19463
  * Minimum distance in screen pixels between two consecutive stored points.
19463
19464
  * Pointer-move samples closer than this to the previously stored point are
@@ -20316,6 +20317,8 @@ class KritzelLineTool extends KritzelBaseTool {
20316
20317
  opacity = 1;
20317
20318
  /** Available color palette for the line tool */
20318
20319
  palette = [...DEFAULT_COLOR_PALETTE];
20320
+ /** Available stroke size presets for the line tool */
20321
+ sizes = [...DEFAULT_STROKE_SIZES];
20319
20322
  /** Arrow head configuration for lines created with this tool */
20320
20323
  arrows;
20321
20324
  /** X coordinate of the line's starting point */
@@ -20922,6 +20925,8 @@ class KritzelTextTool extends KritzelBaseTool {
20922
20925
  }
20923
20926
  /** Available color palette for the text tool */
20924
20927
  palette = [...DEFAULT_COLOR_PALETTE];
20928
+ /** Available font size presets for the text tool */
20929
+ sizes = [...DEFAULT_FONT_SIZES];
20925
20930
  /**
20926
20931
  * Creates a new instance of KritzelTextTool.
20927
20932
  * @param core - The KritzelCore instance that provides access to application state and functionality
@@ -21066,6 +21071,8 @@ class KritzelShapeTool extends KritzelBaseTool {
21066
21071
  fontColor = DEFAULT_COLOR_PALETTE[0];
21067
21072
  /** Available color palette for the shape tool */
21068
21073
  palette = [...DEFAULT_COLOR_PALETTE];
21074
+ /** Available stroke size presets for the shape tool */
21075
+ sizes = [...DEFAULT_STROKE_SIZES];
21069
21076
  /** X coordinate where the shape drawing started */
21070
21077
  startX = 0;
21071
21078
  /** Y coordinate where the shape drawing started */
@@ -23538,6 +23545,7 @@ class KritzelSelectionTool extends KritzelBaseTool {
23538
23545
  sizeProperty: 'size',
23539
23546
  opacityProperty: 'opacity',
23540
23547
  paletteSource: 'none',
23548
+ sizesSource: 'none',
23541
23549
  controls: [],
23542
23550
  };
23543
23551
  }
@@ -23566,6 +23574,7 @@ class KritzelSelectionTool extends KritzelBaseTool {
23566
23574
  sizeProperty: 'size',
23567
23575
  opacityProperty: 'opacity',
23568
23576
  paletteSource: 'palette',
23577
+ sizesSource: 'none',
23569
23578
  controls,
23570
23579
  };
23571
23580
  }
@@ -28182,6 +28191,9 @@ const DEFAULT_BRUSH_CONFIG = {
28182
28191
  palettes: {
28183
28192
  pen: [...DEFAULT_COLOR_PALETTE],
28184
28193
  },
28194
+ sizes: {
28195
+ pen: [...DEFAULT_STROKE_SIZES],
28196
+ },
28185
28197
  };
28186
28198
 
28187
28199
  const DEFAULT_TEXT_CONFIG = {
@@ -28189,12 +28201,14 @@ const DEFAULT_TEXT_CONFIG = {
28189
28201
  size: 8,
28190
28202
  fontFamily: 'Arial',
28191
28203
  palette: [...DEFAULT_COLOR_PALETTE],
28204
+ sizes: [...DEFAULT_FONT_SIZES],
28192
28205
  };
28193
28206
 
28194
28207
  const DEFAULT_LINE_TOOL_CONFIG = {
28195
28208
  color: DEFAULT_COLOR_PALETTE[0],
28196
28209
  size: 4,
28197
28210
  palette: [...DEFAULT_COLOR_PALETTE],
28211
+ sizes: [...DEFAULT_STROKE_SIZES],
28198
28212
  arrows: {
28199
28213
  end: { enabled: true, style: 'triangle' },
28200
28214
  },
@@ -28220,11 +28234,6 @@ var KritzelAlignment;
28220
28234
  KritzelAlignment["EndVertical"] = "end-vertical";
28221
28235
  })(KritzelAlignment || (KritzelAlignment = {}));
28222
28236
 
28223
- /** Current schema version for the app-state Y.Doc (workspace list & settings). */
28224
- const CURRENT_APP_STATE_SCHEMA_VERSION = 2;
28225
- /** Current schema version for workspace Y.Docs (drawable objects). */
28226
- const CURRENT_WORKSPACE_SCHEMA_VERSION = 2;
28227
-
28228
28237
  /**
28229
28238
  * Runs pending schema migrations on a Y.Doc.
28230
28239
  *
@@ -28339,4 +28348,9 @@ const WORKSPACE_MIGRATIONS = [
28339
28348
  },
28340
28349
  ];
28341
28350
 
28342
- export { AssetNotFoundError as A, runMigrations as B, CURRENT_APP_STATE_SCHEMA_VERSION as C, DEFAULT_BRUSH_CONFIG as D, APP_STATE_MIGRATIONS as E, WORKSPACE_MIGRATIONS as F, KritzelColorHelper as G, HocuspocusProvider as H, IndexedDBSyncProvider as I, KritzelDevicesHelper as J, KritzelText as K, KritzelMouseButton as L, DEFAULT_COLOR_PALETTE as M, KritzelSelectionGroup as N, KritzelSelectionBox as O, KritzelIconRegistry as P, KritzelKeyboardHelper as Q, KritzelBaseHandler as R, ShapeType as S, KritzelBaseObject as T, ObjectHelper as U, KritzelClassHelper as V, WORKSPACE_EXPORT_VERSION as W, KritzelEventHelper as X, HocuspocusProviderWebsocket as a, KritzelPath as b, KritzelImage as c, KritzelLine as d, KritzelGroup as e, KritzelShape as f, KritzelBrushTool as g, KritzelLineTool as h, KritzelEraserTool as i, KritzelImageTool as j, KritzelTextTool as k, KritzelShapeTool as l, KritzelCursorHelper as m, KritzelSelectionTool as n, KritzelAssetResolver as o, IndexedDBAssetProvider as p, KritzelWorkspace as q, KritzelAnchorManager as r, KritzelThemeManager as s, DEFAULT_TEXT_CONFIG as t, DEFAULT_LINE_TOOL_CONFIG as u, DEFAULT_ASSET_STORAGE_CONFIG as v, lightTheme as w, darkTheme as x, KritzelAlignment as y, CURRENT_WORKSPACE_SCHEMA_VERSION as z };
28351
+ /** Current schema version for the app-state Y.Doc (workspace list & settings). */
28352
+ const CURRENT_APP_STATE_SCHEMA_VERSION = 2;
28353
+ /** Current schema version for workspace Y.Docs (drawable objects). */
28354
+ const CURRENT_WORKSPACE_SCHEMA_VERSION = 2;
28355
+
28356
+ export { AssetNotFoundError as A, APP_STATE_MIGRATIONS as B, WORKSPACE_MIGRATIONS as C, DEFAULT_BRUSH_CONFIG as D, CURRENT_APP_STATE_SCHEMA_VERSION as E, CURRENT_WORKSPACE_SCHEMA_VERSION as F, KritzelColorHelper as G, HocuspocusProvider as H, IndexedDBSyncProvider as I, KritzelDevicesHelper as J, KritzelText as K, KritzelMouseButton as L, DEFAULT_STROKE_SIZES as M, DEFAULT_COLOR_PALETTE as N, KritzelSelectionGroup as O, KritzelSelectionBox as P, KritzelIconRegistry as Q, KritzelKeyboardHelper as R, ShapeType as S, KritzelBaseHandler as T, KritzelBaseObject as U, ObjectHelper as V, WORKSPACE_EXPORT_VERSION as W, KritzelClassHelper as X, KritzelEventHelper as Y, HocuspocusProviderWebsocket as a, KritzelPath as b, KritzelImage as c, KritzelLine as d, KritzelGroup as e, KritzelShape as f, KritzelBrushTool as g, KritzelLineTool as h, KritzelEraserTool as i, KritzelImageTool as j, KritzelTextTool as k, KritzelShapeTool as l, KritzelCursorHelper as m, KritzelSelectionTool as n, KritzelAssetResolver as o, IndexedDBAssetProvider as p, KritzelWorkspace as q, KritzelAnchorManager as r, KritzelThemeManager as s, DEFAULT_TEXT_CONFIG as t, DEFAULT_LINE_TOOL_CONFIG as u, DEFAULT_ASSET_STORAGE_CONFIG as v, lightTheme as w, darkTheme as x, KritzelAlignment as y, runMigrations as z };