kritzel-stencil 0.1.31 → 0.1.32

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 (75) hide show
  1. package/dist/cjs/{default-line-tool.config-qD8Chdg7.js → default-line-tool.config-5Q3g35Fz.js} +43 -82
  2. package/dist/cjs/index.cjs.js +1 -1
  3. package/dist/cjs/kritzel-back-to-content_32.cjs.entry.js +108 -33
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/stencil.cjs.js +1 -1
  6. package/dist/collection/classes/core/core.class.js +20 -0
  7. package/dist/collection/classes/handlers/key.handler.js +41 -25
  8. package/dist/collection/classes/registries/tool.registry.js +3 -0
  9. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +8 -2
  10. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +33 -3
  11. package/dist/collection/components/ui/kritzel-settings/kritzel-settings.css +52 -2
  12. package/dist/collection/components/ui/kritzel-settings/kritzel-settings.js +65 -1
  13. package/dist/collection/constants/version.js +1 -1
  14. package/dist/collection/helpers/devices.helper.js +3 -0
  15. package/dist/collection/helpers/keyboard.helper.js +12 -69
  16. package/dist/collection/index.js +1 -0
  17. package/dist/collection/themes/dark-theme.js +6 -0
  18. package/dist/collection/themes/light-theme.js +6 -0
  19. package/dist/components/index.js +1 -1
  20. package/dist/components/kritzel-color-palette.js +1 -1
  21. package/dist/components/kritzel-color.js +1 -1
  22. package/dist/components/kritzel-controls.js +1 -1
  23. package/dist/components/kritzel-editor.js +1 -1
  24. package/dist/components/kritzel-engine.js +1 -1
  25. package/dist/components/kritzel-menu-item.js +1 -1
  26. package/dist/components/kritzel-menu.js +1 -1
  27. package/dist/components/kritzel-more-menu.js +1 -1
  28. package/dist/components/kritzel-settings.js +1 -1
  29. package/dist/components/kritzel-split-button.js +1 -1
  30. package/dist/components/kritzel-stroke-size.js +1 -1
  31. package/dist/components/kritzel-tool-config.js +1 -1
  32. package/dist/components/kritzel-workspace-manager.js +1 -1
  33. package/dist/components/{p-Cu2JOs99.js → p-B0xiZtYN.js} +1 -1
  34. package/dist/components/p-BL-MZveo.js +1 -0
  35. package/dist/components/{p-B-tzBj-f.js → p-CVbVK0c2.js} +1 -1
  36. package/dist/components/{p-BiibSoAl.js → p-CqV81ALP.js} +1 -1
  37. package/dist/components/p-CyDHIiFq.js +9 -0
  38. package/dist/components/{p-D84uGsE3.js → p-D1CGvdSM.js} +1 -1
  39. package/dist/components/p-DTT5sDiV.js +1 -0
  40. package/dist/components/{p-TQCB-ocH.js → p-DWz9fx6U.js} +1 -1
  41. package/dist/components/{p-D3ynGLzV.js → p-Dc_Lv9Kh.js} +1 -1
  42. package/dist/components/p-DelH9pto.js +1 -0
  43. package/dist/components/{p-D6cey6Hr.js → p-DxMtzFGW.js} +1 -1
  44. package/dist/components/{p-CuWxY3KC.js → p-OMAsJAR1.js} +1 -1
  45. package/dist/components/{p-l10It7Nm.js → p-jGOpkGDl.js} +1 -1
  46. package/dist/components/{p-Cg6bE3bx.js → p-quO2aXHn.js} +1 -1
  47. package/dist/esm/{default-line-tool.config-CjlaN1S5.js → default-line-tool.config-D3S8voEp.js} +43 -82
  48. package/dist/esm/index.js +2 -2
  49. package/dist/esm/kritzel-back-to-content_32.entry.js +108 -33
  50. package/dist/esm/loader.js +1 -1
  51. package/dist/esm/stencil.js +1 -1
  52. package/dist/stencil/index.esm.js +1 -1
  53. package/dist/stencil/p-D3S8voEp.js +1 -0
  54. package/dist/stencil/p-d95eefff.entry.js +9 -0
  55. package/dist/stencil/stencil.esm.js +1 -1
  56. package/dist/types/classes/core/core.class.d.ts +1 -0
  57. package/dist/types/classes/handlers/key.handler.d.ts +3 -1
  58. package/dist/types/classes/registries/tool.registry.d.ts +1 -0
  59. package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +3 -0
  60. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +2 -0
  61. package/dist/types/components/ui/kritzel-settings/kritzel-settings.d.ts +6 -0
  62. package/dist/types/components.d.ts +13 -0
  63. package/dist/types/constants/version.d.ts +1 -1
  64. package/dist/types/helpers/devices.helper.d.ts +1 -0
  65. package/dist/types/helpers/keyboard.helper.d.ts +0 -1
  66. package/dist/types/index.d.ts +1 -0
  67. package/dist/types/interfaces/shortcut.interface.d.ts +2 -0
  68. package/dist/types/interfaces/theme.interface.d.ts +6 -0
  69. package/package.json +1 -1
  70. package/dist/components/p-C5-i16ck.js +0 -1
  71. package/dist/components/p-CihUAfk9.js +0 -9
  72. package/dist/components/p-CnoVf56N.js +0 -1
  73. package/dist/components/p-opmUuRlE.js +0 -1
  74. package/dist/stencil/p-9bce6f4f.entry.js +0 -9
  75. package/dist/stencil/p-CjlaN1S5.js +0 -1
@@ -16,6 +16,9 @@ class KritzelToolRegistry {
16
16
  }
17
17
  return toolInstance;
18
18
  }
19
+ static getToolByIndex(index) {
20
+ return Object.values(this.registry)[index] ?? null;
21
+ }
19
22
  }
20
23
 
21
24
  class ObjectHelper {
@@ -450,6 +453,9 @@ class KritzelDevicesHelper {
450
453
  return 'Other';
451
454
  }
452
455
  }
456
+ static isMobile() {
457
+ return this.isIOS() || this.isAndroid();
458
+ }
453
459
  static isFirefox() {
454
460
  return /firefox/i.test(navigator.userAgent);
455
461
  }
@@ -484,82 +490,25 @@ class KritzelKeyboardHelper {
484
490
  meta.setAttribute('content', newContent);
485
491
  }
486
492
  }
487
- static isTextInputFocused() {
488
- const activeElement = document.activeElement;
489
- if (!activeElement)
490
- return false;
491
- // Check for standard text input elements
492
- if (activeElement instanceof HTMLInputElement) {
493
- const textTypes = ['text', 'password', 'email', 'number', 'search', 'tel', 'url'];
494
- return textTypes.includes(activeElement.type);
495
- }
496
- if (activeElement instanceof HTMLTextAreaElement) {
497
- return true;
498
- }
499
- // Check for contenteditable elements
500
- if (activeElement instanceof HTMLElement && activeElement.isContentEditable) {
501
- return true;
502
- }
503
- return false;
504
- }
505
493
  static onKeyboardVisibleChanged(callback) {
506
- const os = KritzelDevicesHelper.detectOS();
507
- if (os !== 'iOS' && os !== 'Android') {
508
- return () => { };
509
- }
510
- // Use VirtualKeyboard API if available (modern browsers)
511
- if ('virtualKeyboard' in navigator) {
512
- const vk = navigator.virtualKeyboard;
513
- const onGeometryChange = () => {
514
- const isOpen = vk.boundingRect.height > 0;
515
- callback(isOpen);
516
- };
517
- vk.addEventListener('geometrychange', onGeometryChange);
518
- return () => vk.removeEventListener('geometrychange', onGeometryChange);
519
- }
520
- // Fallback: combine focus detection with viewport changes
521
494
  if ('visualViewport' in window) {
522
495
  const VIEWPORT_VS_CLIENT_HEIGHT_RATIO = 0.75;
523
- let initialHeight = window.visualViewport.height;
524
- const checkKeyboardState = () => {
525
- const viewportRatio = (window.visualViewport.height * window.visualViewport.scale) / initialHeight;
526
- const viewportShrunk = viewportRatio < VIEWPORT_VS_CLIENT_HEIGHT_RATIO;
527
- const isOpen = viewportShrunk && this.isTextInputFocused();
496
+ const onResize = (event) => {
497
+ const target = event.target;
498
+ const isMobileDevice = KritzelDevicesHelper.isMobile();
499
+ const isViewportReduced = (target.height * target.scale) / window.screen.height < VIEWPORT_VS_CLIENT_HEIGHT_RATIO;
500
+ const isOpen = isMobileDevice && isViewportReduced;
528
501
  callback(isOpen);
529
502
  };
530
- const onResize = () => {
531
- checkKeyboardState();
532
- };
533
- const onFocusIn = () => {
534
- // Update initial height when focus changes to capture pre-keyboard state
535
- if (!this.isTextInputFocused()) {
536
- initialHeight = window.visualViewport.height;
537
- }
538
- // Small delay to allow viewport to adjust
539
- setTimeout(checkKeyboardState, 100);
540
- };
541
- const onFocusOut = () => {
542
- // Keyboard closes when focus leaves text inputs
543
- setTimeout(() => {
544
- if (!this.isTextInputFocused()) {
545
- callback(false);
546
- // Reset initial height after keyboard closes
547
- setTimeout(() => {
548
- initialHeight = window.visualViewport.height;
549
- }, 300);
550
- }
551
- }, 100);
552
- };
553
503
  window.visualViewport.addEventListener('resize', onResize);
554
- document.addEventListener('focusin', onFocusIn);
555
- document.addEventListener('focusout', onFocusOut);
556
- return () => {
557
- window.visualViewport.removeEventListener('resize', onResize);
558
- document.removeEventListener('focusin', onFocusIn);
559
- document.removeEventListener('focusout', onFocusOut);
560
- };
504
+ return () => window.visualViewport.removeEventListener('resize', onResize);
505
+ }
506
+ else {
507
+ // Fallback for older browsers does not provide a reliable event-based mechanism.
508
+ console.warn('Listening for keyboard visibility changes is not reliably supported in this browser.');
509
+ // Return a no-op cleanup function.
510
+ return () => { };
561
511
  }
562
- return () => { };
563
512
  }
564
513
  }
565
514
 
@@ -11966,7 +11915,17 @@ class DOMObserver {
11966
11915
  }
11967
11916
  }
11968
11917
  }
11969
- if (gecko && added.length) {
11918
+ if (added.some(n => n.nodeName == "BR") && (view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46)) {
11919
+ // Browsers sometimes insert a bogus break node if you
11920
+ // backspace out the last bit of text before an inline-flex node (#1552)
11921
+ for (let node of added)
11922
+ if (node.nodeName == "BR" && node.parentNode) {
11923
+ let after = node.nextSibling;
11924
+ if (after && after.nodeType == 1 && after.contentEditable == "false")
11925
+ node.parentNode.removeChild(node);
11926
+ }
11927
+ }
11928
+ else if (gecko && added.length) {
11970
11929
  let brs = added.filter(n => n.nodeName == "BR");
11971
11930
  if (brs.length == 2) {
11972
11931
  let [a, b] = brs;
@@ -11984,17 +11943,6 @@ class DOMObserver {
11984
11943
  }
11985
11944
  }
11986
11945
  }
11987
- else if ((chrome || safari) && added.some(n => n.nodeName == "BR") &&
11988
- (view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46)) {
11989
- // Chrome/Safari sometimes insert a bogus break node if you
11990
- // backspace out the last bit of text before an inline-flex node (#1552)
11991
- for (let node of added)
11992
- if (node.nodeName == "BR" && node.parentNode) {
11993
- let after = node.nextSibling;
11994
- if (after && after.nodeType == 1 && after.contentEditable == "false")
11995
- node.parentNode.removeChild(node);
11996
- }
11997
- }
11998
11946
  let readSel = null;
11999
11947
  // If it looks like the browser has reset the selection to the
12000
11948
  // start of the document after focus, restore the selection from
@@ -14318,6 +14266,12 @@ const lightTheme = {
14318
14266
  contentTextColor: '#333333',
14319
14267
  descriptionColor: '#666666',
14320
14268
  labelColor: '#333333',
14269
+ shortcutsCategoryColor: '#666666',
14270
+ shortcutItemBg: '#f8f8f8',
14271
+ shortcutLabelColor: '#333333',
14272
+ shortcutKeyBg: '#ffffff',
14273
+ shortcutKeyBorder: '#e0e0e0',
14274
+ shortcutKeyColor: '#555555',
14321
14275
  },
14322
14276
  shapeFill: {
14323
14277
  hoverBackgroundColor: '#ebebeb',
@@ -14517,6 +14471,12 @@ const darkTheme = {
14517
14471
  contentTextColor: '#e0e0e0',
14518
14472
  descriptionColor: '#999999',
14519
14473
  labelColor: '#e0e0e0',
14474
+ shortcutsCategoryColor: '#999999',
14475
+ shortcutItemBg: '#3a3a3a',
14476
+ shortcutLabelColor: '#e0e0e0',
14477
+ shortcutKeyBg: '#2a2a2a',
14478
+ shortcutKeyBorder: '#4a4a4a',
14479
+ shortcutKeyColor: '#e0e0e0',
14520
14480
  },
14521
14481
  shapeFill: {
14522
14482
  hoverBackgroundColor: '#3a3a3a',
@@ -15108,7 +15068,8 @@ function requireCjs () {
15108
15068
  if (hasRequiredCjs) return cjs;
15109
15069
  hasRequiredCjs = 1;
15110
15070
  (function (exports) {
15111
- var pe=Object.defineProperty;var ge=e=>pe(e,"__esModule",{value:true});var de=(e,t)=>{ge(e);for(var s in t)pe(e,s,{get:t[s],enumerable:true});};de(exports,{default:()=>ve,getStroke:()=>ne,getStrokeOutlinePoints:()=>te,getStrokePoints:()=>re});function $(e,t,s,x=h=>h){return e*x(.5-t*(.5-s))}function ce(e){return [-e[0],-e[1]]}function l(e,t){return [e[0]+t[0],e[1]+t[1]]}function a(e,t){return [e[0]-t[0],e[1]-t[1]]}function b(e,t){return [e[0]*t,e[1]*t]}function xe(e,t){return [e[0]/t,e[1]/t]}function R(e){return [e[1],-e[0]]}function B(e,t){return e[0]*t[0]+e[1]*t[1]}function me(e,t){return e[0]===t[0]&&e[1]===t[1]}function Se(e){return Math.hypot(e[0],e[1])}function Pe(e){return e[0]*e[0]+e[1]*e[1]}function A(e,t){return Pe(a(e,t))}function G(e){return xe(e,Se(e))}function ae(e,t){return Math.hypot(e[1]-t[1],e[0]-t[0])}function L(e,t,s){let x=Math.sin(s),h=Math.cos(s),y=e[0]-t[0],n=e[1]-t[1],f=y*h-n*x,d=y*x+n*h;return [f+t[0],d+t[1]]}function K(e,t,s){return l(e,b(a(t,e),s))}function ee(e,t,s){return l(e,b(t,s))}var{min:C,PI:ke}=Math,le=.275,V=ke+1e-4;function te(e,t={}){let{size:s=16,smoothing:x=.5,thinning:h=.5,simulatePressure:y=true,easing:n=r=>r,start:f={},end:d={},last:D=false}=t,{cap:S=true,easing:j=r=>r*(2-r)}=f,{cap:q=true,easing:c=r=>--r*r*r+1}=d;if(e.length===0||s<=0)return [];let p=e[e.length-1].runningLength,g=f.taper===false?0:f.taper===true?Math.max(s,p):f.taper,T=d.taper===false?0:d.taper===true?Math.max(s,p):d.taper,oe=Math.pow(s*x,2),_=[],M=[],H=e.slice(0,10).reduce((r,i)=>{let o=i.pressure;if(y){let u=C(1,i.distance/s),W=C(1,1-u);o=C(1,r+(W-r)*(u*le));}return (r+o)/2},e[0].pressure),m=$(s,h,e[e.length-1].pressure,n),U,X=e[0].vector,z=e[0].point,F=z,O=z,E=F,J=false;for(let r=0;r<e.length;r++){let{pressure:i}=e[r],{point:o,vector:u,distance:W,runningLength:I}=e[r];if(r<e.length-1&&p-I<3)continue;if(h){if(y){let v=C(1,W/s),Z=C(1,1-v);i=C(1,H+(Z-H)*(v*le));}m=$(s,h,i,n);}else m=s/2;U===void 0&&(U=m);let fe=I<g?j(I/g):1,be=p-I<T?c((p-I)/T):1;m=Math.max(.01,m*Math.min(fe,be));let se=(r<e.length-1?e[r+1]:e[r]).vector,Y=r<e.length-1?B(u,se):1,he=B(u,X)<0&&!J,ue=Y!==null&&Y<0;if(he||ue){let v=b(R(X),m);for(let Z=1/13,w=0;w<=1;w+=Z)O=L(a(o,v),o,V*w),_.push(O),E=L(l(o,v),o,V*-w),M.push(E);z=O,F=E,ue&&(J=true);continue}if(J=false,r===e.length-1){let v=b(R(u),m);_.push(a(o,v)),M.push(l(o,v));continue}let ie=b(R(K(se,u,Y)),m);O=a(o,ie),(r<=1||A(z,O)>oe)&&(_.push(O),z=O),E=l(o,ie),(r<=1||A(F,E)>oe)&&(M.push(E),F=E),H=i,X=u;}let P=e[0].point.slice(0,2),k=e.length>1?e[e.length-1].point.slice(0,2):l(e[0].point,[1,1]),Q=[],N=[];if(e.length===1){if(!(g||T)||D){let r=ee(P,G(R(a(P,k))),-(U||m)),i=[];for(let o=1/13,u=o;u<=1;u+=o)i.push(L(r,P,V*2*u));return i}}else {if(!(g||T&&e.length===1))if(S)for(let i=1/13,o=i;o<=1;o+=i){let u=L(M[0],P,V*o);Q.push(u);}else {let i=a(_[0],M[0]),o=b(i,.5),u=b(i,.51);Q.push(a(P,o),a(P,u),l(P,u),l(P,o));}let r=R(ce(e[e.length-1].vector));if(T||g&&e.length===1)N.push(k);else if(q){let i=ee(k,r,m);for(let o=1/29,u=o;u<1;u+=o)N.push(L(i,k,V*3*u));}else N.push(l(k,b(r,m)),l(k,b(r,m*.99)),a(k,b(r,m*.99)),a(k,b(r,m)));}return _.concat(N,M.reverse(),Q)}function re(e,t={}){var q;let{streamline:s=.5,size:x=16,last:h=false}=t;if(e.length===0)return [];let y=.15+(1-s)*.85,n=Array.isArray(e[0])?e:e.map(({x:c,y:p,pressure:g=.5})=>[c,p,g]);if(n.length===2){let c=n[1];n=n.slice(0,-1);for(let p=1;p<5;p++)n.push(K(n[0],c,p/4));}n.length===1&&(n=[...n,[...l(n[0],[1,1]),...n[0].slice(2)]]);let f=[{point:[n[0][0],n[0][1]],pressure:n[0][2]>=0?n[0][2]:.25,vector:[1,1],distance:0,runningLength:0}],d=false,D=0,S=f[0],j=n.length-1;for(let c=1;c<n.length;c++){let p=h&&c===j?n[c].slice(0,2):K(S.point,n[c],y);if(me(S.point,p))continue;let g=ae(p,S.point);if(D+=g,c<j&&!d){if(D<x)continue;d=true;}S={point:p,pressure:n[c][2]>=0?n[c][2]:.5,vector:G(a(S.point,p)),distance:g,runningLength:D},f.push(S);}return f[0].vector=((q=f[1])==null?void 0:q.vector)||[0,0],f}function ne(e,t={}){return te(re(e,t),t)}var ve=ne;
15071
+ Object.defineProperties(exports,{__esModule:{value:true},[Symbol.toStringTag]:{value:`Module`}});const{PI:e}=Math,t=e+1e-4,n=.5,r=[1,1];function i(e,t,n,r=e=>e){return e*r(.5-t*(.5-n))}const{min:a}=Math;function o(e,t,n){let r=a(1,t/n);return a(1,e+(a(1,1-r)-e)*(r*.275))}function s(e){return [-e[0],-e[1]]}function c(e,t){return [e[0]+t[0],e[1]+t[1]]}function l(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e}function u(e,t){return [e[0]-t[0],e[1]-t[1]]}function d(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e}function f(e,t){return [e[0]*t,e[1]*t]}function p(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e}function m(e,t){return [e[0]/t,e[1]/t]}function h(e){return [e[1],-e[0]]}function g(e,t){let n=t[0];return e[0]=t[1],e[1]=-n,e}function ee(e,t){return e[0]*t[0]+e[1]*t[1]}function _(e,t){return e[0]===t[0]&&e[1]===t[1]}function v(e){return Math.hypot(e[0],e[1])}function y(e,t){let n=e[0]-t[0],r=e[1]-t[1];return n*n+r*r}function b(e){return m(e,v(e))}function x(e,t){return Math.hypot(e[1]-t[1],e[0]-t[0])}function S(e,t,n){let r=Math.sin(n),i=Math.cos(n),a=e[0]-t[0],o=e[1]-t[1],s=a*i-o*r,c=a*r+o*i;return [s+t[0],c+t[1]]}function C(e,t,n,r){let i=Math.sin(r),a=Math.cos(r),o=t[0]-n[0],s=t[1]-n[1],c=o*a-s*i,l=o*i+s*a;return e[0]=c+n[0],e[1]=l+n[1],e}function w(e,t,n){return c(e,f(u(t,e),n))}function te(e,t,n,r){let i=n[0]-t[0],a=n[1]-t[1];return e[0]=t[0]+i*r,e[1]=t[1]+a*r,e}function T(e,t,n){return c(e,f(t,n))}const E=[0,0],D=[0,0],O=[0,0];function k(e,n){let r=T(e,b(h(u(e,c(e,[1,1])))),-n),i=[],a=1/13;for(let n=a;n<=1;n+=a)i.push(S(r,e,t*2*n));return i}function A(e,n,r){let i=[],a=1/r;for(let r=a;r<=1;r+=a)i.push(S(n,e,t*r));return i}function j(e,t,n){let r=u(t,n),i=f(r,.5),a=f(r,.51);return [u(e,i),u(e,a),c(e,a),c(e,i)]}function M(e,n,r,i){let a=[],o=T(e,n,r),s=1/i;for(let n=s;n<1;n+=s)a.push(S(o,e,t*3*n));return a}function ne(e,t,n){return [c(e,f(t,n)),c(e,f(t,n*.99)),u(e,f(t,n*.99)),u(e,f(t,n))]}function N(e,t,n){return e===false||e===void 0?0:e===true?Math.max(t,n):e}function re(e,t,n){return e.slice(0,10).reduce((e,r)=>{let i=r.pressure;return t&&(i=o(e,r.distance,n)),(e+i)/2},e[0].pressure)}function P(e,n={}){let{size:r=16,smoothing:a=.5,thinning:f=.5,simulatePressure:m=true,easing:_=e=>e,start:v={},end:b={},last:x=false}=n,{cap:S=true,easing:w=e=>e*(2-e)}=v,{cap:T=true,easing:P=e=>--e*e*e+1}=b;if(e.length===0||r<=0)return [];let F=e[e.length-1].runningLength,I=N(v.taper,r,F),L=N(b.taper,r,F),R=(r*a)**2,z=[],B=[],V=re(e,m,r),H=i(r,f,e[e.length-1].pressure,_),U,W=e[0].vector,G=e[0].point,K=G,q=G,J=K,Y=false;for(let n=0;n<e.length;n++){let{pressure:a}=e[n],{point:s,vector:h,distance:v,runningLength:b}=e[n],x=n===e.length-1;if(!x&&F-b<3)continue;f?(m&&(a=o(V,v,r)),H=i(r,f,a,_)):H=r/2,U===void 0&&(U=H);let S=b<I?w(b/I):1,T=F-b<L?P((F-b)/L):1;H=Math.max(.01,H*Math.min(S,T));let k=(x?e[n]:e[n+1]).vector,A=x?1:ee(h,k),j=ee(h,W)<0&&!Y,M=A!==null&&A<0;if(j||M){g(E,W),p(E,E,H);for(let e=0;e<=1;e+=.07692307692307693)d(D,s,E),C(D,D,s,t*e),q=[D[0],D[1]],z.push(q),l(O,s,E),C(O,O,s,t*-e),J=[O[0],O[1]],B.push(J);G=q,K=J,M&&(Y=true);continue}if(Y=false,x){g(E,h),p(E,E,H),z.push(u(s,E)),B.push(c(s,E));continue}te(E,k,h,A),g(E,E),p(E,E,H),d(D,s,E),q=[D[0],D[1]],(n<=1||y(G,q)>R)&&(z.push(q),G=q),l(O,s,E),J=[O[0],O[1]],(n<=1||y(K,J)>R)&&(B.push(J),K=J),V=a,W=h;}let X=[e[0].point[0],e[0].point[1]],Z=e.length>1?[e[e.length-1].point[0],e[e.length-1].point[1]]:c(e[0].point,[1,1]),Q=[],$=[];if(e.length===1){if(!(I||L)||x)return k(X,U||H)}else {I||L&&e.length===1||(S?Q.push(...A(X,B[0],13)):Q.push(...j(X,z[0],B[0])));let t=h(s(e[e.length-1].vector));L||I&&e.length===1?$.push(Z):T?$.push(...M(Z,t,H,29)):$.push(...ne(Z,t,H));}return z.concat($,B.reverse(),Q)}const F=[0,0];function I(e){return e!=null&&e>=0}function L(e,t={}){let{streamline:i=.5,size:a=16,last:o=false}=t;if(e.length===0)return [];let s=.15+(1-i)*.85,l=Array.isArray(e[0])?e:e.map(({x:e,y:t,pressure:r=n})=>[e,t,r]);if(l.length===2){let e=l[1];l=l.slice(0,-1);for(let t=1;t<5;t++)l.push(w(l[0],e,t/4));}l.length===1&&(l=[...l,[...c(l[0],r),...l[0].slice(2)]]);let u=[{point:[l[0][0],l[0][1]],pressure:I(l[0][2])?l[0][2]:.25,vector:[...r],distance:0,runningLength:0}],f=false,p=0,m=u[0],h=l.length-1;for(let e=1;e<l.length;e++){let t=o&&e===h?[l[e][0],l[e][1]]:w(m.point,l[e],s);if(_(m.point,t))continue;let r=x(t,m.point);if(p+=r,e<h&&!f){if(p<a)continue;f=true;}d(F,m.point,t),m={point:t,pressure:I(l[e][2])?l[e][2]:n,vector:b(F),distance:r,runningLength:p},u.push(m);}return u[0].vector=u[1]?.vector||[0,0],u}function R(e,t={}){return P(L(e,t),t)}var z=R;exports.default=z,exports.getStroke=R,exports.getStrokeOutlinePoints=P,exports.getStrokePoints=L;
15072
+
15112
15073
  } (cjs));
15113
15074
  return cjs;
15114
15075
  }
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var defaultLineTool_config = require('./default-line-tool.config-qD8Chdg7.js');
3
+ var defaultLineTool_config = require('./default-line-tool.config-5Q3g35Fz.js');
4
4
 
5
5
  /**
6
6
  * BroadcastChannel sync provider for cross-tab synchronization
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index-NMqsANCI.js');
4
- var defaultLineTool_config = require('./default-line-tool.config-qD8Chdg7.js');
4
+ var defaultLineTool_config = require('./default-line-tool.config-5Q3g35Fz.js');
5
5
 
6
6
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
7
7
 
@@ -1525,6 +1525,7 @@ const KritzelEditor = class {
1525
1525
  undoState = null;
1526
1526
  isBackToContentButtonVisible = false;
1527
1527
  currentTheme = 'light';
1528
+ shortcuts = [];
1528
1529
  onIsEngineReady(newValue) {
1529
1530
  if (newValue && this.isControlsReady) {
1530
1531
  this.checkIsReady();
@@ -1647,6 +1648,10 @@ const KritzelEditor = class {
1647
1648
  this.isEngineReady = true;
1648
1649
  this.activeWorkspace = event.detail.activeWorkspace;
1649
1650
  this.workspaces = event.detail.workspaces;
1651
+ this.loadShortcuts();
1652
+ }
1653
+ async loadShortcuts() {
1654
+ this.shortcuts = await this.engineRef.getDisplayableShortcuts();
1650
1655
  }
1651
1656
  handleWorkspacesChange(event) {
1652
1657
  this.workspaces = event.detail;
@@ -1720,7 +1725,7 @@ const KritzelEditor = class {
1720
1725
  }
1721
1726
  }
1722
1727
  render() {
1723
- return (index.h(index.Host, { key: '504b454589f58230a4b600c92c1b3d25dbf60d03' }, index.h("div", { key: '3aa0402736696e08a98cf2d432fb8c8a3c7e1733', class: "top-left-buttons" }, index.h("kritzel-workspace-manager", { key: 'de39b646dad1038691b915d7e108366f30402d32', workspaces: this.workspaces, activeWorkspace: this.activeWorkspace, onWorkspaceChange: event => (this.activeWorkspace = event.detail), onIsWorkspaceManagerReady: () => (this.isWorkspaceManagerReady = true) }), index.h("kritzel-back-to-content", { key: '0481fc6b9da1b1b99f8f743cbe297cbc9a466fcb', visible: this.isBackToContentButtonVisible, onBackToContent: () => this.backToContent() })), index.h("kritzel-engine", { key: '32479175979f27df2bea0869f72c31e51a6a4ace', ref: el => (this.engineRef = el), workspace: this.activeWorkspace, syncConfig: this.syncConfig, scaleMax: this.scaleMax, lockDrawingScale: this.lockDrawingScale, scaleMin: this.scaleMin, theme: this.currentTheme, globalContextMenuItems: this.globalContextMenuItems, objectContextMenuItems: this.objectContextMenuItems, onIsEngineReady: event => this.onEngineReady(event), onWorkspacesChange: event => this.handleWorkspacesChange(event), onObjectsChange: event => this.handleObjectsChange(event), onUndoStateChange: event => this.handleUndoStateChange(event), onObjectsInViewportChange: event => this.handleObjectsInViewportChange(event) }), index.h("kritzel-controls", { key: 'b385ec06dc2fc8a7322c2a2dcdbfeb1d6b55ba3f', class: { 'keyboard-open': this.isVirtualKeyboardOpen }, style: { display: this.isControlsVisible ? 'flex' : 'none' }, ref: el => (this.controlsRef = el), controls: this.controls, isUtilityPanelVisible: this.isUtilityPanelVisible, undoState: this.undoState, theme: this.currentTheme, onIsControlsReady: () => (this.isControlsReady = true) }), index.h("div", { key: 'd946d1a4bbec0ee40ca06d3ebde286b0ee6aedd8', class: "top-right-buttons" }, index.h("kritzel-settings", { key: '8dd98b1d9e69a94c2a6fd3d3aa44e37ff14ac195', ref: el => (this.settingsRef = el), onSettingsChange: event => this.handleSettingsChange(event) }), index.h("kritzel-export", { key: '6e9bac15a07625fc4222aebe8f46ea06e92fd444', ref: el => (this.exportRef = el), onExportPng: () => this.engineRef.exportViewportAsPng(), onExportSvg: () => this.engineRef.exportViewportAsSvg() }), index.h("kritzel-more-menu", { key: '3daeece622c5c6a65790159c438ed11649442666', onItemSelect: event => this.handleMoreMenuItemSelect(event) }))));
1728
+ return (index.h(index.Host, { key: 'f87b56926c144769625e50e857c7fc5ff79edd9a' }, index.h("div", { key: '6dce1a87c9b9850d9b2162c4db53a7b4c6f3d6c5', class: "top-left-buttons" }, index.h("kritzel-workspace-manager", { key: 'b4b9efac6bc94865dea4849306d194912da5c870', workspaces: this.workspaces, activeWorkspace: this.activeWorkspace, onWorkspaceChange: event => (this.activeWorkspace = event.detail), onIsWorkspaceManagerReady: () => (this.isWorkspaceManagerReady = true) }), index.h("kritzel-back-to-content", { key: 'bf6722296c592882b8c725bd2e76bafff9bf6c64', visible: this.isBackToContentButtonVisible, onBackToContent: () => this.backToContent() })), index.h("kritzel-engine", { key: '46f7b88e9d1326d1cc55a496a2f708d5fb0eafcf', ref: el => (this.engineRef = el), workspace: this.activeWorkspace, syncConfig: this.syncConfig, scaleMax: this.scaleMax, lockDrawingScale: this.lockDrawingScale, scaleMin: this.scaleMin, theme: this.currentTheme, globalContextMenuItems: this.globalContextMenuItems, objectContextMenuItems: this.objectContextMenuItems, onIsEngineReady: event => this.onEngineReady(event), onWorkspacesChange: event => this.handleWorkspacesChange(event), onObjectsChange: event => this.handleObjectsChange(event), onUndoStateChange: event => this.handleUndoStateChange(event), onObjectsInViewportChange: event => this.handleObjectsInViewportChange(event) }), index.h("kritzel-controls", { key: '997c15692422e2377a2f3d5d1bf1da9bac755e6f', class: { 'keyboard-open': this.isVirtualKeyboardOpen }, style: { display: this.isControlsVisible ? 'flex' : 'none' }, ref: el => (this.controlsRef = el), controls: this.controls, isUtilityPanelVisible: this.isUtilityPanelVisible, undoState: this.undoState, theme: this.currentTheme, onIsControlsReady: () => (this.isControlsReady = true) }), index.h("div", { key: '6b5a4f3b33f69e139ff079df41a663ea3b0fdadb', class: "top-right-buttons" }, index.h("kritzel-settings", { key: '3587ddc9210fc18761d0c7e077ece576986b3353', ref: el => (this.settingsRef = el), shortcuts: this.shortcuts, onSettingsChange: event => this.handleSettingsChange(event) }), index.h("kritzel-export", { key: '7687565227cdaef31c5ea59fb1a7f52ea315367e', ref: el => (this.exportRef = el), onExportPng: () => this.engineRef.exportViewportAsPng(), onExportSvg: () => this.engineRef.exportViewportAsSvg() }), index.h("kritzel-more-menu", { key: 'e205b6d0cf8a584f4aa74acee17847d1aebe9c43', onItemSelect: event => this.handleMoreMenuItemSelect(event) }))));
1724
1729
  }
1725
1730
  static get watchers() { return {
1726
1731
  "isEngineReady": [{
@@ -19304,48 +19309,55 @@ class KritzelViewport {
19304
19309
  class KritzelKeyHandler extends defaultLineTool_config.KritzelBaseHandler {
19305
19310
  shortcuts = [
19306
19311
  // General
19307
- { key: 'Escape', condition: c => !!c.store.selectionGroup, action: c => c.clearSelection() },
19308
- { key: 'Delete', condition: c => !!c.store.selectionGroup, action: c => c.delete() },
19312
+ { key: 'Escape', label: 'Clear Selection', category: 'General', condition: c => !!c.store.selectionGroup, action: c => c.clearSelection() },
19313
+ { key: 'Delete', label: 'Delete Selected', category: 'General', condition: c => !!c.store.selectionGroup, action: c => c.delete() },
19314
+ { key: 'a', ctrl: true, label: 'Select All in Viewport', category: 'General', action: c => c.selectAllObjectsInViewport() },
19315
+ { key: 'A', ctrl: true, shift: true, label: 'Select All Objects', category: 'General', action: c => c.selectAllObjects() },
19309
19316
  // Undo/Redo
19310
- { key: 'z', ctrl: true, action: c => c.undo() },
19311
- { key: 'y', ctrl: true, action: c => c.redo() },
19312
- // Tool selection
19313
- { key: 's', ctrl: true, action: () => this.switchTool('selection') },
19314
- { key: 'b', ctrl: true, action: () => this.switchTool('brush') },
19315
- { key: 'e', ctrl: true, action: () => this.switchTool('eraser') },
19316
- { key: 'i', ctrl: true, action: () => this.switchTool('image') },
19317
- { key: 'x', ctrl: true, action: () => this.switchTool('text') },
19317
+ { key: 'z', ctrl: true, label: 'Undo', category: 'Undo/Redo', action: c => c.undo() },
19318
+ { key: 'y', ctrl: true, label: 'Redo', category: 'Undo/Redo', action: c => c.redo() },
19319
+ // Tool selection (Ctrl+1-9)
19320
+ { key: '1', ctrl: true, label: 'Tool 1', category: 'Tool Selection', action: () => this.switchToolByIndex(0) },
19321
+ { key: '2', ctrl: true, label: 'Tool 2', category: 'Tool Selection', action: () => this.switchToolByIndex(1) },
19322
+ { key: '3', ctrl: true, label: 'Tool 3', category: 'Tool Selection', action: () => this.switchToolByIndex(2) },
19323
+ { key: '4', ctrl: true, label: 'Tool 4', category: 'Tool Selection', action: () => this.switchToolByIndex(3) },
19324
+ { key: '5', ctrl: true, label: 'Tool 5', category: 'Tool Selection', action: () => this.switchToolByIndex(4) },
19325
+ { key: '6', ctrl: true, label: 'Tool 6', category: 'Tool Selection', action: () => this.switchToolByIndex(5) },
19326
+ { key: '7', ctrl: true, label: 'Tool 7', category: 'Tool Selection', action: () => this.switchToolByIndex(6) },
19327
+ { key: '8', ctrl: true, label: 'Tool 8', category: 'Tool Selection', action: () => this.switchToolByIndex(7) },
19328
+ { key: '9', ctrl: true, label: 'Tool 9', category: 'Tool Selection', action: () => this.switchToolByIndex(8) },
19318
19329
  // Clipboard
19319
19330
  {
19320
19331
  key: 'c',
19321
19332
  ctrl: true,
19333
+ label: 'Copy',
19334
+ category: 'Clipboard',
19322
19335
  condition: c => !!c.store.selectionGroup,
19323
19336
  action: c => {
19324
19337
  c.copy();
19325
19338
  c.rerender();
19326
19339
  },
19327
19340
  },
19328
- { key: 'v', ctrl: true, condition: c => !!c.store.state.copiedObjects && !c.store.activeText, action: c => c.paste() },
19329
- // Text editing
19330
- // { key: 'a', ctrl: true, condition: c => !!c.store.activeText, action: c => c.store.activeText.selectAll() },
19331
- // { key: 'v', ctrl: true, condition: c => !!c.store.activeText, action: c => c.store.activeText.insertFromClipboard() },
19341
+ { key: 'v', ctrl: true, label: 'Paste', category: 'Clipboard', condition: c => !!c.store.state.copiedObjects && !c.store.activeText, action: c => c.paste() },
19332
19342
  // Object layering
19333
- { key: '+', ctrl: true, condition: c => !!c.store.selectionGroup, action: c => c.bringForward() },
19334
- { key: '-', ctrl: true, condition: c => !!c.store.selectionGroup, action: c => c.sendBackward() },
19335
- { key: '*', shift: true, condition: c => !!c.store.selectionGroup, action: c => c.bringToFront() },
19336
- { key: '_', shift: true, condition: c => !!c.store.selectionGroup, action: c => c.sendToBack() },
19343
+ { key: '+', ctrl: true, label: 'Bring Forward', category: 'Object Layering', condition: c => !!c.store.selectionGroup, action: c => c.bringForward() },
19344
+ { key: '-', ctrl: true, label: 'Send Backward', category: 'Object Layering', condition: c => !!c.store.selectionGroup, action: c => c.sendBackward() },
19345
+ { key: '*', shift: true, label: 'Bring to Front', category: 'Object Layering', condition: c => !!c.store.selectionGroup, action: c => c.bringToFront() },
19346
+ { key: '_', shift: true, label: 'Send to Back', category: 'Object Layering', condition: c => !!c.store.selectionGroup, action: c => c.sendToBack() },
19337
19347
  // Grouping
19338
- { key: 'g', ctrl: true, condition: c => !!c.store.selectionGroup && c.store.selectionGroup.objects.length >= 2, action: c => c.group() },
19339
- { key: 'G', ctrl: true, shift: true, condition: c => !!c.store.selectionGroup, action: c => c.ungroup() },
19348
+ { key: 'g', ctrl: true, label: 'Group', category: 'Grouping', condition: c => !!c.store.selectionGroup && c.store.selectionGroup.objects.length >= 2, action: c => c.group() },
19349
+ { key: 'G', ctrl: true, shift: true, label: 'Ungroup', category: 'Grouping', condition: c => !!c.store.selectionGroup, action: c => c.ungroup() },
19340
19350
  ];
19341
19351
  constructor(core) {
19342
19352
  super(core);
19343
19353
  }
19344
- switchTool(tool) {
19345
- const toolInstance = defaultLineTool_config.KritzelToolRegistry.getTool(tool);
19346
- this._core.store.setState('activeTool', toolInstance);
19347
- this._core.deselectAllObjects();
19348
- toolInstance.onActivate();
19354
+ switchToolByIndex(index) {
19355
+ const toolInstance = defaultLineTool_config.KritzelToolRegistry.getToolByIndex(index);
19356
+ if (toolInstance) {
19357
+ this._core.store.setState('activeTool', toolInstance);
19358
+ this._core.deselectAllObjects();
19359
+ toolInstance.onActivate();
19360
+ }
19349
19361
  }
19350
19362
  handleKeyDown(event) {
19351
19363
  this._core.store.state.isCtrlKeyPressed = event.ctrlKey;
@@ -19358,6 +19370,15 @@ class KritzelKeyHandler extends defaultLineTool_config.KritzelBaseHandler {
19358
19370
  handleKeyUp(event) {
19359
19371
  this._core.store.state.isCtrlKeyPressed = event.ctrlKey;
19360
19372
  }
19373
+ getDisplayableShortcuts() {
19374
+ return this.shortcuts.map(({ key, ctrl, shift, label, category }) => ({
19375
+ key,
19376
+ ctrl,
19377
+ shift,
19378
+ label,
19379
+ category,
19380
+ }));
19381
+ }
19361
19382
  }
19362
19383
 
19363
19384
  class KritzelContextMenuHandler extends defaultLineTool_config.KritzelBaseHandler {
@@ -21000,6 +21021,26 @@ class KritzelCore {
21000
21021
  this.addSelectionGroup(selectionGroup);
21001
21022
  this.rerender();
21002
21023
  }
21024
+ selectAllObjects() {
21025
+ const allObjects = this._store.state.objects
21026
+ .allObjects()
21027
+ .filter(o => !(o instanceof defaultLineTool_config.KritzelSelectionGroup) && !(o instanceof defaultLineTool_config.KritzelSelectionBox) && !(o instanceof KritzelContextMenu));
21028
+ if (allObjects.length > 0) {
21029
+ const selectionGroup = defaultLineTool_config.KritzelSelectionGroup.create(this);
21030
+ allObjects.forEach(obj => {
21031
+ obj.isSelected = false;
21032
+ selectionGroup.addOrRemove(obj);
21033
+ });
21034
+ selectionGroup.isSelected = true;
21035
+ this._store.state.isSelecting = false;
21036
+ if (allObjects.length === 1) {
21037
+ selectionGroup.rotation = selectionGroup.objects[0].rotation;
21038
+ }
21039
+ this.addSelectionGroup(selectionGroup);
21040
+ this._store.setState('activeTool', defaultLineTool_config.KritzelToolRegistry.getTool('selection'));
21041
+ this.rerender();
21042
+ }
21043
+ }
21003
21044
  selectAllObjectsInViewport() {
21004
21045
  const viewportBounds = {
21005
21046
  x: -this._store.state.translateX / this._store.state.scale,
@@ -22330,6 +22371,9 @@ const KritzelEngine = class {
22330
22371
  const selectionGroup = this.core.store.selectionGroup;
22331
22372
  return selectionGroup ? selectionGroup.objects : [];
22332
22373
  }
22374
+ async getDisplayableShortcuts() {
22375
+ return this.keyHandler.getDisplayableShortcuts();
22376
+ }
22333
22377
  async selectObjects(objects) {
22334
22378
  this.core.store.state.activeTool?.onDeactivate();
22335
22379
  this.core.store.setState('activeTool', defaultLineTool_config.KritzelToolRegistry.getTool('selection'));
@@ -22569,7 +22613,7 @@ const KritzelEngine = class {
22569
22613
  this.objectsInViewportChange.emit(visibleObjects);
22570
22614
  this.core.store.state.hasViewportChanged = false;
22571
22615
  }
22572
- return (index.h(index.Host, { key: '6230883071998d1b1dd950992fed33fc55322245' }, this.core.store.state.debugInfo.showViewportInfo && (index.h("div", { key: '6295b00ea6ab37bcf26df9c07fc9b07ff4e42cda', class: "debug-panel" }, index.h("div", { key: '3b9218af5f6309c885ca94cec5920c6e1ad0f2bb' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), index.h("div", { key: '56f3991885e898bf531d991524e558d70c69ea66' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), index.h("div", { key: '256a6b6dda9885b45f92be165da13f11ae323729' }, "TranslateX: ", this.core.store.state?.translateX), index.h("div", { key: 'dc9b46c5c002fc7af6a64c956bc484a5c7d76049' }, "TranslateY: ", this.core.store.state?.translateY), index.h("div", { key: 'b2b9186d9a97080925eba42162736fd2f780cac4' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), index.h("div", { key: 'ac5c114a24db5ebf5cd94d15717f03dd86dd0cf5' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), index.h("div", { key: '541c809ffc4de0c5141c6abcd3763751769db862' }, "PointerCount: ", this.core.store.state.pointers.size), index.h("div", { key: 'd238fca6d731ab9135a2ccd5ba646ec8de7bf09e' }, "Scale: ", this.core.store.state?.scale), index.h("div", { key: '8c4ac049b6fea3f80d31558b1254a02b71e456c4' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), index.h("div", { key: '4a04ad9d092d856f303d0f16c28c2fe9481b9c14' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), index.h("div", { key: '7b2eba0900ad5ff321140502988532152a861d42' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), index.h("div", { key: 'a1b5b5464029fca77a24b4474001b91b4136780d' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), index.h("div", { key: 'd9c774fbdbd7ed3f6187e81d89f5ec0809af4703' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), index.h("div", { key: 'ee161084f143f27961eb6ffe0e8175d4b90a1e3c' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), index.h("div", { key: '987385019af226559079386ac7f9e82d313825d3' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), index.h("div", { key: '3382f6a0948a9b07fb81a03fba02dc6a128c6dc9' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), index.h("div", { key: 'aef4f326cfeaad6442ea5c413fd2cd342f6a8084' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), index.h("div", { key: '0f844c2c6eaf928d64728c23fffa49719ee62746' }, "IsRotationHandleHovered: ", this.core.store.state.isRotationHandleHovered ? 'true' : 'false'), index.h("div", { key: '96d734289e526f8385010e79b70c39729c993d23' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), index.h("div", { key: '529f5e8eb841949271ae08a79ea2ea6266f293ae' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), index.h("div", { key: '75016a8b6cb51682f1e04ec815e50bc8b31313d7' }, "IsPointerDown: ", this.core.store.isPointerDown ? 'true' : 'false'), index.h("div", { key: '58c0732e3fe3549e79143414018334ce3002e019' }, "PointerX: ", this.core.store.state?.pointerX), index.h("div", { key: 'ce83b4e39412a8758e216ecd731ea1ee63e630fd' }, "PointerY: ", this.core.store.state?.pointerY), index.h("div", { key: '347714bd7f2d07a6f7c45d0fedbc88fb7699a896' }, "SelectedObjects: ", this.core.store.selectionGroup?.objects.length || 0), index.h("div", { key: 'f6b2828d8b83d703781b758fde09618206667cfc' }, "ViewportCenter: (", viewportCenterX.toFixed(2), ", ", viewportCenterY.toFixed(2), ")"))), index.h("div", { key: 'dfc8bc9debacef5af307881439507c4202d1fc80', id: "origin", class: "origin", style: {
22616
+ return (index.h(index.Host, { key: '8905994a0a6ba727338b5d998e86a8602c15c716' }, this.core.store.state.debugInfo.showViewportInfo && (index.h("div", { key: '09b3edf6557bba042bd6e27a702569eaa7d06b1d', class: "debug-panel" }, index.h("div", { key: '4bee1244cee2af276f0a58cc12e7edac7719dffd' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), index.h("div", { key: '839ae7b5b9d0aa85a516f72db4722a5026173346' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), index.h("div", { key: 'd0a17b9de7f37e149de165e6d324fd16455ac492' }, "TranslateX: ", this.core.store.state?.translateX), index.h("div", { key: 'dc4dba3065b2292b1497350bea91a5aa4e85ecbe' }, "TranslateY: ", this.core.store.state?.translateY), index.h("div", { key: '6b2f168471e9e6010530838a163409a55d589ee5' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), index.h("div", { key: '9a13f87843ccc982bae1216aa6792e2d106eb40b' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), index.h("div", { key: 'afde9f208d1ca410c0263230b5fb46ff9d60b5eb' }, "PointerCount: ", this.core.store.state.pointers.size), index.h("div", { key: '205f6323256ae98c9d9b76815b7007c4215e6085' }, "Scale: ", this.core.store.state?.scale), index.h("div", { key: 'f5a6ba3bc2ffa1cde68503a9025ca26f36c69298' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), index.h("div", { key: 'ae68e0da86b428a67e1d02b96f63b8df50eb6006' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), index.h("div", { key: 'f774c277b5c2ee7eca92148a5eef3f721f308583' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), index.h("div", { key: '347ca7230c94e6416a3ad63dc13bedd6784ac5de' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), index.h("div", { key: 'df4c531c565e870c066ab39f83424ed7e5daaca8' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), index.h("div", { key: '0e03236b68659e9fe76b43dd7dac1875103c5096' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), index.h("div", { key: '98fd0e0e14d296f823542dd0e663b4ebd4457320' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), index.h("div", { key: '42e011126f11b243521c0d5182322db153d7cfc7' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), index.h("div", { key: '83282eeb30f2b4634703b5395570e623c33d70f1' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), index.h("div", { key: '70eadff325f0339bd07ed1abc3d914267edd6627' }, "IsRotationHandleHovered: ", this.core.store.state.isRotationHandleHovered ? 'true' : 'false'), index.h("div", { key: '9d1fbd6f79329fe529e235bf631306853e8a4073' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), index.h("div", { key: '0671f42bae6a696b4d0f2a217ea52cc9d0e7bd53' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), index.h("div", { key: '3faf342b274483bf06f43b428a8d529a9fbbc137' }, "IsPointerDown: ", this.core.store.isPointerDown ? 'true' : 'false'), index.h("div", { key: '836e427407bc807488e1a4491ef726d1fe4d471e' }, "PointerX: ", this.core.store.state?.pointerX), index.h("div", { key: '81d2d4c1653e9e646ddd3dde296aab7592a4fbc7' }, "PointerY: ", this.core.store.state?.pointerY), index.h("div", { key: 'e71d2a2e7789c1497c628bc32d3f9e41c11fd3d3' }, "SelectedObjects: ", this.core.store.selectionGroup?.objects.length || 0), index.h("div", { key: 'e93bbc53c7588d248b8c228b5dd016e9110cc469' }, "ViewportCenter: (", viewportCenterX.toFixed(2), ", ", viewportCenterY.toFixed(2), ")"))), index.h("div", { key: 'a6f71ff4e08557579888f2cec96eea10516760a5', id: "origin", class: "origin", style: {
22573
22617
  transform: `matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`,
22574
22618
  } }, visibleObjects?.map(object => {
22575
22619
  return (index.h("div", { key: object.id, id: object.id, class: "object", style: {
@@ -22897,7 +22941,7 @@ const KritzelEngine = class {
22897
22941
  stroke: 'var(--kritzel-snap-indicator-stroke, #007bff)',
22898
22942
  strokeWidth: data.indicatorStrokeWidth,
22899
22943
  } }))));
22900
- })()), this.core.store.state.isContextMenuVisible && (index.h("kritzel-context-menu", { key: 'eb2ddd8d7b631b95c64ad0bbd963809c1c7ec9e1', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.selectionGroup?.objects || [], style: {
22944
+ })()), this.core.store.state.isContextMenuVisible && (index.h("kritzel-context-menu", { key: 'a4c1709b4089f8bb5826b21b536917bb21f168da', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.selectionGroup?.objects || [], style: {
22901
22945
  position: 'fixed',
22902
22946
  left: `${this.core.store.state.contextMenuX}px`,
22903
22947
  top: `${this.core.store.state.contextMenuY}px`,
@@ -22908,7 +22952,7 @@ const KritzelEngine = class {
22908
22952
  y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,
22909
22953
  }, this.core.store.selectionGroup?.objects);
22910
22954
  this.hideContextMenu();
22911
- }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof defaultLineTool_config.KritzelEraserTool && !this.core.store.state.isScaling && index.h("kritzel-cursor-trail", { key: '544b1546995794b21465d1ed63d044dc5757b2ac', core: this.core })));
22955
+ }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof defaultLineTool_config.KritzelEraserTool && !this.core.store.state.isScaling && index.h("kritzel-cursor-trail", { key: '2e025697da7b96c809ad232825df7939f227e512', core: this.core })));
22912
22956
  }
22913
22957
  static get watchers() { return {
22914
22958
  "workspace": [{
@@ -23923,9 +23967,9 @@ const KritzelPortal = class {
23923
23967
  * This file is auto-generated by the version bump scripts.
23924
23968
  * Do not modify manually.
23925
23969
  */
23926
- const KRITZEL_VERSION = '0.1.31';
23970
+ const KRITZEL_VERSION = '0.1.32';
23927
23971
 
23928
- const kritzelSettingsCss = () => `:host{display:contents}kritzel-dialog{--kritzel-dialog-body-padding:0;--kritzel-dialog-width-large:800px;--kritzel-dialog-height-large:500px}.footer-button{padding:8px 16px;border-radius:6px;cursor:pointer;font-size:14px}.cancel-button{border:1px solid #ebebeb;background:#fff;color:inherit}.cancel-button:hover{background:#f5f5f5}.settings-content{padding:0}.settings-content h3{margin:0 0 16px 0;font-size:18px;font-weight:600;color:var(--kritzel-settings-content-heading-color, #333333)}.settings-content p{margin:0;font-size:14px;color:var(--kritzel-settings-content-text-color, #666666);line-height:1.5}.settings-group{display:flex;flex-direction:column;gap:24px}.settings-item{display:flex;flex-direction:column;gap:8px}.settings-row{display:flex;align-items:center;justify-content:space-between;gap:16px}.settings-label{font-size:14px;font-weight:500;color:var(--kritzel-settings-label-color, #333333);margin:0}.settings-description{font-size:12px;color:var(--kritzel-settings-description-color, #888888);margin:0;line-height:1.4}`;
23972
+ 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)}`;
23929
23973
 
23930
23974
  const SETTINGS_STORAGE_KEY = 'kritzel-settings';
23931
23975
  const DEFAULT_SCALE_MIN = 0.0001;
@@ -23933,6 +23977,7 @@ const DEFAULT_SCALE_MAX = 1000;
23933
23977
  const DEFAULT_LOCK_DRAWING_SCALE = true;
23934
23978
  const SETTINGS_CATEGORIES = [
23935
23979
  { id: 'general', label: 'General', icon: 'settings' },
23980
+ { id: 'shortcuts', label: 'Keyboard Shortcuts', icon: 'command' },
23936
23981
  { id: 'about', label: 'About', icon: 'info' },
23937
23982
  ];
23938
23983
  const KritzelSettings = class {
@@ -23941,6 +23986,8 @@ const KritzelSettings = class {
23941
23986
  this.settingsChange = index.createEvent(this, "settingsChange");
23942
23987
  }
23943
23988
  get host() { return index.getElement(this); }
23989
+ /** Keyboard shortcuts to display in the settings dialog */
23990
+ shortcuts = [];
23944
23991
  isDialogOpen = false;
23945
23992
  selectedCategoryId = SETTINGS_CATEGORIES[0].id;
23946
23993
  scaleMin = DEFAULT_SCALE_MIN;
@@ -24010,10 +24057,38 @@ const KritzelSettings = class {
24010
24057
  handleCategorySelect = (event) => {
24011
24058
  this.selectedCategoryId = event.detail.item.id;
24012
24059
  };
24060
+ formatKeyCombo(shortcut) {
24061
+ const parts = [];
24062
+ if (shortcut.ctrl)
24063
+ parts.push('Ctrl');
24064
+ if (shortcut.shift)
24065
+ parts.push('Shift');
24066
+ parts.push(this.formatKey(shortcut.key));
24067
+ return parts.join('+');
24068
+ }
24069
+ formatKey(key) {
24070
+ const keyMap = {
24071
+ 'Escape': 'Esc',
24072
+ 'Delete': 'Del',
24073
+ ' ': 'Space',
24074
+ };
24075
+ return keyMap[key] ?? key.toUpperCase();
24076
+ }
24077
+ groupShortcutsByCategory() {
24078
+ const grouped = new Map();
24079
+ for (const shortcut of this.shortcuts) {
24080
+ const existing = grouped.get(shortcut.category) || [];
24081
+ existing.push(shortcut);
24082
+ grouped.set(shortcut.category, existing);
24083
+ }
24084
+ return grouped;
24085
+ }
24013
24086
  renderCategoryContent() {
24014
24087
  switch (this.selectedCategoryId) {
24015
24088
  case 'general':
24016
24089
  return (index.h("div", { class: "settings-content" }, index.h("h3", null, "General Settings"), index.h("div", { class: "settings-group" }, index.h("div", { class: "settings-item" }, index.h("label", { class: "settings-label" }, "Dark Mode"), index.h("p", { class: "settings-description" }, "Toggle between light and dark color themes for the editor interface."), index.h("kritzel-slide-toggle", { checked: this.currentTheme === 'dark', label: "Dark Mode", onCheckedChange: this.handleThemeChange })), index.h("div", { class: "settings-item" }, index.h("label", { class: "settings-label" }, "Lock Drawing Scale"), index.h("p", { class: "settings-description" }, "When enabled, drawn objects maintain a fixed visual size regardless of the current zoom level."), index.h("kritzel-slide-toggle", { checked: this.lockDrawingScale, label: "Lock Drawing Scale", onCheckedChange: this.handleLockDrawingScaleChange })), index.h("div", { class: "settings-item" }, index.h("label", { class: "settings-label" }, "Minimum Zoom Level"), index.h("p", { class: "settings-description" }, "Sets the minimum zoom level. Lower values allow zooming out further to see more of the canvas."), index.h("kritzel-numeric-input", { value: this.scaleMin, min: 0.0001, max: 1, step: 0.0001, onValueChange: this.handleScaleMinChange })), index.h("div", { class: "settings-item" }, index.h("label", { class: "settings-label" }, "Maximum Zoom Level"), index.h("p", { class: "settings-description" }, "Sets the maximum zoom level. Higher values allow zooming in closer for detailed work."), index.h("kritzel-numeric-input", { value: this.scaleMax, min: 1, max: 1000, step: 1, onValueChange: this.handleScaleMaxChange })))));
24090
+ case 'shortcuts':
24091
+ return (index.h("div", { class: "settings-content" }, index.h("h3", null, "Keyboard Shortcuts"), index.h("div", { class: "shortcuts-list" }, Array.from(this.groupShortcutsByCategory()).map(([category, shortcuts]) => (index.h("div", { class: "shortcuts-category", key: category }, index.h("h4", { class: "shortcuts-category-title" }, category), index.h("div", { class: "shortcuts-group" }, shortcuts.map(shortcut => (index.h("div", { class: "shortcut-item", key: shortcut.key + shortcut.label }, index.h("span", { class: "shortcut-label" }, shortcut.label), index.h("kbd", { class: "shortcut-key" }, this.formatKeyCombo(shortcut))))))))))));
24017
24092
  case 'about':
24018
24093
  return (index.h("div", { class: "settings-content" }, index.h("h3", null, "About"), index.h("p", null, "Kritzel - A drawing application"), index.h("p", { class: "version-info" }, "Version ", KRITZEL_VERSION)));
24019
24094
  default:
@@ -24021,7 +24096,7 @@ const KritzelSettings = class {
24021
24096
  }
24022
24097
  }
24023
24098
  render() {
24024
- return (index.h(index.Host, { key: '6e43b90b2c3031811856bda112df13d2e2bf5904' }, index.h("kritzel-dialog", { key: 'd84df729050fbf12033441cd8373cbea3068958a', isOpen: this.isDialogOpen, dialogTitle: "Settings", size: "large", onDialogClose: this.closeDialog }, index.h("kritzel-master-detail", { key: '6c9ff2fab8a1d071b0f22bc04576780ed80ecc30', items: SETTINGS_CATEGORIES, selectedItemId: this.selectedCategoryId, onItemSelect: this.handleCategorySelect }, this.renderCategoryContent()))));
24099
+ return (index.h(index.Host, { key: '1c6e3f26b35cdbbd9586c60ae784257c3368de92' }, index.h("kritzel-dialog", { key: '92e06c02af5152e7f1e64179e31a41fca651381c', isOpen: this.isDialogOpen, dialogTitle: "Settings", size: "large", onDialogClose: this.closeDialog }, index.h("kritzel-master-detail", { key: '069ec7c1b31e7f10b8d34502b811f0602f9f1600', items: SETTINGS_CATEGORIES, selectedItemId: this.selectedCategoryId, onItemSelect: this.handleCategorySelect }, this.renderCategoryContent()))));
24025
24100
  }
24026
24101
  };
24027
24102
  KritzelSettings.style = kritzelSettingsCss();
@@ -6,7 +6,7 @@ var appGlobals = require('./app-globals-V2Kpy_OQ.js');
6
6
  const defineCustomElements = async (win, options) => {
7
7
  if (typeof window === 'undefined') return undefined;
8
8
  await appGlobals.globalScripts();
9
- return index.bootstrapLazy([["kritzel-back-to-content_32.cjs",[[512,"kritzel-editor",{"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"lockDrawingScale":[1028,"lock-drawing-scale"],"controls":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"customSvgIcons":[16],"isControlsVisible":[4,"is-controls-visible"],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"syncConfig":[16],"isEngineReady":[32],"isControlsReady":[32],"isWorkspaceManagerReady":[32],"workspaces":[32],"activeWorkspace":[32],"isVirtualKeyboardOpen":[32],"undoState":[32],"isBackToContentButtonVisible":[32],"currentTheme":[32],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"backToContent":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"dblclick","onTouchStart"]],{"isEngineReady":[{"onIsEngineReady":0}],"isControlsReady":[{"onIsControlsReady":0}],"workspaces":[{"onWorkspacesChange":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],"closeTooltip":[64]},[[8,"keydown","handleKeyDown"],[4,"activeToolChange","handleActiveToolChange"],[4,"objectsSelectionChange","handleSelectionChange"]],{"theme":[{"onThemeChange":0}]}],[513,"kritzel-settings",{"isDialogOpen":[32],"selectedCategoryId":[32],"scaleMin":[32],"scaleMax":[32],"lockDrawingScale":[32],"currentTheme":[32],"open":[64]}],[513,"kritzel-workspace-manager",{"activeWorkspace":[1040],"workspaces":[16],"childMenuAnchor":[32],"openChildMenuItem":[32],"newWorkspace":[32],"editingItemId":[32]},[[8,"wheel","handleWheel"]]],[513,"kritzel-more-menu",{"items":[16],"icon":[1],"iconSize":[2,"icon-size"],"offsetY":[2,"offset-y"],"menuAnchor":[32]}],[513,"kritzel-engine",{"workspace":[16],"syncConfig":[16],"activeTool":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"cursorTarget":[16],"lockDrawingScale":[4,"lock-drawing-scale"],"theme":[1],"forceUpdate":[32],"triggerSelectionChange":[64],"registerTool":[64],"changeActiveTool":[64],"disable":[64],"enable":[64],"delete":[64],"copy":[64],"paste":[64],"bringForward":[64],"sendBackward":[64],"bringToFront":[64],"sendToBack":[64],"group":[64],"ungroup":[64],"undo":[64],"redo":[64],"hideContextMenu":[64],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"backToContent":[64],"getCopiedObjects":[64],"getScreenshot":[64],"exportViewportAsPng":[64],"exportViewportAsSvg":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[1,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[1,"longpress","handleLongPress"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[4,"dblclick","preventDoubleTapZoomOnTouchDevices"]],{"workspace":[{"onWorkspaceChange":0}],"scaleMax":[{"validateScaleMax":0}],"scaleMin":[{"validateScaleMin":0}],"cursorTarget":[{"onCursorTargetChange":0}],"lockDrawingScale":[{"onLockDrawingScaleChange":0}],"theme":[{"onThemeChange":0}]}],[513,"kritzel-export",{"isDialogOpen":[32],"previewUrl":[32],"isLoading":[32],"open":[64]}],[513,"kritzel-back-to-content",{"visible":[4],"text":[1]}],[513,"kritzel-tool-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"],"theme":[1],"config":[32],"palette":[32],"currentOpacity":[32],"updateTrigger":[32]},[[4,"objectsSelectionChange","handleSelectionChange"]],{"tool":[{"handleToolChange":0}],"theme":[{"onThemeChange":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-context-menu",{"items":[16],"objects":[16],"processedItems":[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-utility-panel",{"undoState":[16]}],[513,"kritzel-cursor-trail",{"core":[16],"cursorTrailPoints":[32],"isLeftButtonDown":[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[513,"kritzel-numeric-input",{"value":[1026],"min":[2],"max":[2],"step":[2],"label":[1],"inputValue":[32]},null,{"value":[{"onValueChange":0}]}],[513,"kritzel-slide-toggle",{"checked":[1028],"disabled":[4],"label":[1]}],[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"],[7,"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"]}],[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"],"isAnimating":[32],"open":[64],"close":[64],"focusFirstElement":[64]},[[8,"keydown","handleKeyDown"]],{"isOpen":[{"handleIsOpenChange":0}]}],[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-font",{"fontFamily":[1,"font-family"],"size":[2],"color":[1]}],[513,"kritzel-color",{"value":[1],"theme":[1],"size":[2]}],[769,"kritzel-dropdown",{"options":[16],"value":[1],"width":[1],"selectStyles":[16],"internalValue":[32],"hasSuffixContent":[32],"hasPrefixContent":[32],"isOpen":[32],"focusedIndex":[32],"openDirection":[32]},[[4,"click","handleDocumentClick"],[4,"keydown","handleDocumentKeydown"]],{"options":[{"optionsChanged":0}],"value":[{"externalValueChanged":0}]}],[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-portal",{"anchor":[16],"offsetX":[2,"offset-x"],"offsetY":[2,"offset-y"],"autoFocus":[4,"auto-focus"]},[[8,"click","handleOutsideClick"],[8,"keydown","handleKeyDown"],[11,"resize","handleResize"],[11,"scroll","handleWindowScroll"]],{"anchor":[{"anchorChanged":0}]}],[513,"kritzel-icon",{"name":[1],"label":[1],"size":[2]}]]],["kritzel-brush-style.cjs",[[513,"kritzel-brush-style",{"type":[1],"brushOptions":[16]}]]]], options);
9
+ return index.bootstrapLazy([["kritzel-back-to-content_32.cjs",[[512,"kritzel-editor",{"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"lockDrawingScale":[1028,"lock-drawing-scale"],"controls":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"customSvgIcons":[16],"isControlsVisible":[4,"is-controls-visible"],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"syncConfig":[16],"isEngineReady":[32],"isControlsReady":[32],"isWorkspaceManagerReady":[32],"workspaces":[32],"activeWorkspace":[32],"isVirtualKeyboardOpen":[32],"undoState":[32],"isBackToContentButtonVisible":[32],"currentTheme":[32],"shortcuts":[32],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"backToContent":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[0,"dblclick","onTouchStart"]],{"isEngineReady":[{"onIsEngineReady":0}],"isControlsReady":[{"onIsControlsReady":0}],"workspaces":[{"onWorkspacesChange":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],"closeTooltip":[64]},[[8,"keydown","handleKeyDown"],[4,"activeToolChange","handleActiveToolChange"],[4,"objectsSelectionChange","handleSelectionChange"]],{"theme":[{"onThemeChange":0}]}],[513,"kritzel-settings",{"shortcuts":[16],"isDialogOpen":[32],"selectedCategoryId":[32],"scaleMin":[32],"scaleMax":[32],"lockDrawingScale":[32],"currentTheme":[32],"open":[64]}],[513,"kritzel-workspace-manager",{"activeWorkspace":[1040],"workspaces":[16],"childMenuAnchor":[32],"openChildMenuItem":[32],"newWorkspace":[32],"editingItemId":[32]},[[8,"wheel","handleWheel"]]],[513,"kritzel-more-menu",{"items":[16],"icon":[1],"iconSize":[2,"icon-size"],"offsetY":[2,"offset-y"],"menuAnchor":[32]}],[513,"kritzel-engine",{"workspace":[16],"syncConfig":[16],"activeTool":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"cursorTarget":[16],"lockDrawingScale":[4,"lock-drawing-scale"],"theme":[1],"forceUpdate":[32],"triggerSelectionChange":[64],"registerTool":[64],"changeActiveTool":[64],"disable":[64],"enable":[64],"delete":[64],"copy":[64],"paste":[64],"bringForward":[64],"sendBackward":[64],"bringToFront":[64],"sendToBack":[64],"group":[64],"ungroup":[64],"undo":[64],"redo":[64],"hideContextMenu":[64],"getObjectById":[64],"addObject":[64],"updateObject":[64],"removeObject":[64],"getSelectedObjects":[64],"getDisplayableShortcuts":[64],"selectObjects":[64],"selectAllObjectsInViewport":[64],"clearSelection":[64],"centerObjectInViewport":[64],"backToContent":[64],"getCopiedObjects":[64],"getScreenshot":[64],"exportViewportAsPng":[64],"exportViewportAsSvg":[64],"createWorkspace":[64],"updateWorkspace":[64],"deleteWorkspace":[64],"getWorkspaces":[64],"getActiveWorkspace":[64]},[[1,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[1,"longpress","handleLongPress"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[4,"dblclick","preventDoubleTapZoomOnTouchDevices"]],{"workspace":[{"onWorkspaceChange":0}],"scaleMax":[{"validateScaleMax":0}],"scaleMin":[{"validateScaleMin":0}],"cursorTarget":[{"onCursorTargetChange":0}],"lockDrawingScale":[{"onLockDrawingScaleChange":0}],"theme":[{"onThemeChange":0}]}],[513,"kritzel-export",{"isDialogOpen":[32],"previewUrl":[32],"isLoading":[32],"open":[64]}],[513,"kritzel-back-to-content",{"visible":[4],"text":[1]}],[513,"kritzel-tool-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"],"theme":[1],"config":[32],"palette":[32],"currentOpacity":[32],"updateTrigger":[32]},[[4,"objectsSelectionChange","handleSelectionChange"]],{"tool":[{"handleToolChange":0}],"theme":[{"onThemeChange":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-context-menu",{"items":[16],"objects":[16],"processedItems":[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-utility-panel",{"undoState":[16]}],[513,"kritzel-cursor-trail",{"core":[16],"cursorTrailPoints":[32],"isLeftButtonDown":[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[513,"kritzel-numeric-input",{"value":[1026],"min":[2],"max":[2],"step":[2],"label":[1],"inputValue":[32]},null,{"value":[{"onValueChange":0}]}],[513,"kritzel-slide-toggle",{"checked":[1028],"disabled":[4],"label":[1]}],[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"],[7,"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"]}],[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"],"isAnimating":[32],"open":[64],"close":[64],"focusFirstElement":[64]},[[8,"keydown","handleKeyDown"]],{"isOpen":[{"handleIsOpenChange":0}]}],[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-font",{"fontFamily":[1,"font-family"],"size":[2],"color":[1]}],[513,"kritzel-color",{"value":[1],"theme":[1],"size":[2]}],[769,"kritzel-dropdown",{"options":[16],"value":[1],"width":[1],"selectStyles":[16],"internalValue":[32],"hasSuffixContent":[32],"hasPrefixContent":[32],"isOpen":[32],"focusedIndex":[32],"openDirection":[32]},[[4,"click","handleDocumentClick"],[4,"keydown","handleDocumentKeydown"]],{"options":[{"optionsChanged":0}],"value":[{"externalValueChanged":0}]}],[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-portal",{"anchor":[16],"offsetX":[2,"offset-x"],"offsetY":[2,"offset-y"],"autoFocus":[4,"auto-focus"]},[[8,"click","handleOutsideClick"],[8,"keydown","handleKeyDown"],[11,"resize","handleResize"],[11,"scroll","handleWindowScroll"]],{"anchor":[{"anchorChanged":0}]}],[513,"kritzel-icon",{"name":[1],"label":[1],"size":[2]}]]],["kritzel-brush-style.cjs",[[513,"kritzel-brush-style",{"type":[1],"brushOptions":[16]}]]]], options);
10
10
  };
11
11
 
12
12
  exports.setNonce = index.setNonce;