kritzel-stencil 0.3.16 → 0.3.18

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 (227) hide show
  1. package/LICENSE.md +50 -0
  2. package/dist/cjs/index-Xav9JFHg.js +2 -2
  3. package/dist/cjs/index.cjs.js +7 -1
  4. package/dist/cjs/{kritzel-active-users_42.cjs.entry.js → kritzel-active-users_44.cjs.entry.js} +710 -145
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/{schema.constants-DJQTjcy7.js → schema.constants-DrHO_CYF.js} +1169 -171
  7. package/dist/cjs/stencil.cjs.js +1 -1
  8. package/dist/collection/classes/core/core.class.js +24 -0
  9. package/dist/collection/classes/handlers/context-menu.handler.js +24 -2
  10. package/dist/collection/classes/managers/license.manager.js +285 -0
  11. package/dist/collection/classes/managers/localization.manager.js +189 -0
  12. package/dist/collection/classes/objects/custom-element.class.js +2 -0
  13. package/dist/collection/classes/objects/group.class.js +7 -2
  14. package/dist/collection/classes/objects/image.class.js +10 -7
  15. package/dist/collection/classes/objects/line.class.js +3 -0
  16. package/dist/collection/classes/objects/path.class.js +13 -12
  17. package/dist/collection/classes/objects/selection-group.class.js +7 -2
  18. package/dist/collection/classes/objects/shape.class.js +3 -0
  19. package/dist/collection/classes/objects/text.class.js +4 -1
  20. package/dist/collection/classes/registries/icon-registry.class.js +1 -0
  21. package/dist/collection/classes/tools/brush-tool.class.js +1 -1
  22. package/dist/collection/collection-manifest.json +3 -1
  23. package/dist/collection/components/core/kritzel-editor/kritzel-editor.css +16 -0
  24. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +462 -60
  25. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +446 -16
  26. package/dist/collection/components/core/kritzel-watermark/kritzel-watermark.css +29 -0
  27. package/dist/collection/components/core/kritzel-watermark/kritzel-watermark.js +83 -0
  28. package/dist/collection/components/shared/kritzel-avatar/kritzel-avatar.js +3 -3
  29. package/dist/collection/components/shared/kritzel-button/kritzel-button.js +2 -2
  30. package/dist/collection/components/shared/kritzel-color/kritzel-color.js +2 -2
  31. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +1 -1
  32. package/dist/collection/components/shared/kritzel-font/kritzel-font.js +1 -1
  33. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +2 -1
  34. package/dist/collection/components/shared/kritzel-input/kritzel-input.js +1 -1
  35. package/dist/collection/components/shared/kritzel-master-detail/kritzel-master-detail.js +3 -3
  36. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +1 -1
  37. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +2 -2
  38. package/dist/collection/components/shared/kritzel-numeric-input/kritzel-numeric-input.js +1 -1
  39. package/dist/collection/components/shared/kritzel-opacity-slider/kritzel-opacity-slider.js +1 -1
  40. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +1 -1
  41. package/dist/collection/components/shared/kritzel-slide-toggle/kritzel-slide-toggle.js +1 -1
  42. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +1 -1
  43. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +2 -1
  44. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +2 -2
  45. package/dist/collection/components/ui/kritzel-back-to-content/kritzel-back-to-content.js +1 -1
  46. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +41 -6
  47. package/dist/collection/components/ui/kritzel-current-user/kritzel-current-user.js +36 -1
  48. package/dist/collection/components/ui/kritzel-current-user-dialog/kritzel-current-user-dialog.js +36 -1
  49. package/dist/collection/components/ui/kritzel-export/kritzel-export.js +44 -7
  50. package/dist/collection/components/ui/kritzel-login-dialog/kritzel-login-dialog.js +1 -1
  51. package/dist/collection/components/ui/kritzel-more-menu/kritzel-more-menu.js +36 -1
  52. package/dist/collection/components/ui/kritzel-settings/kritzel-settings.js +108 -14
  53. package/dist/collection/components/ui/kritzel-share-dialog/kritzel-share-dialog.js +38 -3
  54. package/dist/collection/components/ui/kritzel-tool-config/kritzel-tool-config.js +38 -3
  55. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +36 -1
  56. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js +38 -3
  57. package/dist/collection/components/ui/kritzel-zoom-panel/kritzel-zoom-panel.css +72 -0
  58. package/dist/collection/components/ui/kritzel-zoom-panel/kritzel-zoom-panel.js +173 -0
  59. package/dist/collection/constants/engine.constants.js +2 -0
  60. package/dist/collection/constants/license.constants.js +25 -0
  61. package/dist/collection/constants/version.js +1 -1
  62. package/dist/collection/helpers/localization.helper.js +25 -0
  63. package/dist/collection/helpers/math.helper.js +3 -0
  64. package/dist/collection/helpers/svg-export.helper.js +223 -26
  65. package/dist/collection/index.js +13 -0
  66. package/dist/collection/interfaces/localization.interface.js +1 -0
  67. package/dist/collection/locales/de-locale.js +119 -0
  68. package/dist/collection/locales/en-locale.js +120 -0
  69. package/dist/collection/locales/fr-locale.js +119 -0
  70. package/dist/collection/themes/dark-theme.js +18 -0
  71. package/dist/collection/themes/light-theme.js +18 -0
  72. package/dist/components/index.d.ts +4 -0
  73. package/dist/components/index.js +1 -1
  74. package/dist/components/kritzel-active-users.js +1 -1
  75. package/dist/components/kritzel-avatar.js +1 -1
  76. package/dist/components/kritzel-awareness-cursors.js +1 -1
  77. package/dist/components/kritzel-back-to-content.js +1 -1
  78. package/dist/components/kritzel-brush-style.js +1 -1
  79. package/dist/components/kritzel-button.js +1 -1
  80. package/dist/components/kritzel-color-palette.js +1 -1
  81. package/dist/components/kritzel-color.js +1 -1
  82. package/dist/components/kritzel-context-menu.js +1 -1
  83. package/dist/components/kritzel-controls.js +1 -1
  84. package/dist/components/kritzel-current-user-dialog.js +1 -1
  85. package/dist/components/kritzel-current-user.js +1 -1
  86. package/dist/components/kritzel-editor.js +1 -1
  87. package/dist/components/kritzel-engine.js +1 -1
  88. package/dist/components/kritzel-export.js +1 -1
  89. package/dist/components/kritzel-font-size.js +1 -1
  90. package/dist/components/kritzel-font.js +1 -1
  91. package/dist/components/kritzel-icon.js +1 -1
  92. package/dist/components/kritzel-input.js +1 -1
  93. package/dist/components/kritzel-login-dialog.js +1 -1
  94. package/dist/components/kritzel-master-detail.js +1 -1
  95. package/dist/components/kritzel-menu-item.js +1 -1
  96. package/dist/components/kritzel-menu.js +1 -1
  97. package/dist/components/kritzel-more-menu.js +1 -1
  98. package/dist/components/kritzel-numeric-input.js +1 -1
  99. package/dist/components/kritzel-opacity-slider.js +1 -1
  100. package/dist/components/kritzel-pill-tabs.js +1 -1
  101. package/dist/components/kritzel-portal.js +1 -1
  102. package/dist/components/kritzel-settings.js +1 -1
  103. package/dist/components/kritzel-share-dialog.js +1 -1
  104. package/dist/components/kritzel-slide-toggle.js +1 -1
  105. package/dist/components/kritzel-split-button.js +1 -1
  106. package/dist/components/kritzel-stroke-size.js +1 -1
  107. package/dist/components/kritzel-tool-config.js +1 -1
  108. package/dist/components/kritzel-tooltip.js +1 -1
  109. package/dist/components/kritzel-utility-panel.js +1 -1
  110. package/dist/components/kritzel-watermark.d.ts +11 -0
  111. package/dist/components/kritzel-watermark.js +1 -0
  112. package/dist/components/kritzel-workspace-manager.js +1 -1
  113. package/dist/components/kritzel-zoom-panel.d.ts +11 -0
  114. package/dist/components/kritzel-zoom-panel.js +1 -0
  115. package/dist/components/{p-B5xxfwKF.js → p-3HxnBrCM.js} +1 -1
  116. package/dist/components/p-6RjeGuvH.js +1 -0
  117. package/dist/components/p-7NsK0uHu.js +1 -0
  118. package/dist/components/{p-dcAernE1.js → p-BCNyR5Sw.js} +1 -1
  119. package/dist/components/{p-C2SX-XRr.js → p-BG6hOSrm.js} +1 -1
  120. package/dist/components/p-BKJSh8qQ.js +1 -0
  121. package/dist/components/{p-SptaSMno.js → p-BKvHg9cv.js} +1 -1
  122. package/dist/components/p-Bc55X65h.js +1 -0
  123. package/dist/components/p-BpnIvNvq.js +1 -0
  124. package/dist/components/p-BvRrA4hN.js +1 -0
  125. package/dist/components/{p-B2w8X7vn.js → p-BxpKq94F.js} +1 -1
  126. package/dist/components/{p-BFoK4W--.js → p-Bzv9Px8v.js} +1 -1
  127. package/dist/components/{p-COLHjboZ.js → p-C9HGoDHE.js} +1 -1
  128. package/dist/components/p-CEnEDaix.js +1 -0
  129. package/dist/components/p-CIcLzcfA.js +1 -0
  130. package/dist/components/p-CPtDfadX.js +1 -0
  131. package/dist/components/p-C_fKgKHu.js +9 -0
  132. package/dist/components/p-CdR76C4L.js +1 -0
  133. package/dist/components/p-Cu9KYyoq.js +1 -0
  134. package/dist/components/p-CyqRcqsO.js +1 -0
  135. package/dist/components/{p-UoPj5QjH.js → p-DDkmsPpV.js} +1 -1
  136. package/dist/components/{p-D-sRVAbQ.js → p-DI4vQRE3.js} +1 -1
  137. package/dist/components/{p-CJOhfMU5.js → p-DNdXJp8F.js} +1 -1
  138. package/dist/components/p-DX5K8xnh.js +1 -0
  139. package/dist/components/{p-DEy7zJCe.js → p-DZdgXCAx.js} +1 -1
  140. package/dist/components/p-DdH1cKED.js +1 -0
  141. package/dist/components/p-DgmtCdnL.js +1 -0
  142. package/dist/components/{p-BzYU3-MJ.js → p-DmWSRsjK.js} +1 -1
  143. package/dist/components/{p-Bj2laX89.js → p-Dz-Ti24X.js} +1 -1
  144. package/dist/components/{p-BiG1dxPS.js → p-F5_X4dZG.js} +1 -1
  145. package/dist/components/{p-x6doYeiI.js → p-IpoC5EEY.js} +1 -1
  146. package/dist/components/p-Jn6TNdfe.js +1 -0
  147. package/dist/components/{p-BfNHpqQ8.js → p-NuLP1xHe.js} +1 -1
  148. package/dist/components/{p-skWUIStn.js → p-SDZNC8GF.js} +1 -1
  149. package/dist/components/{p-BYmp9Ovv.js → p-U4oawa1x.js} +1 -1
  150. package/dist/components/{p-DM11KXUT.js → p-f8aW1ye7.js} +1 -1
  151. package/dist/components/p-mz3pUWW4.js +1 -0
  152. package/dist/components/p-v7dxxrL5.js +1 -0
  153. package/dist/components/p-vAeiXe6c.js +1 -0
  154. package/dist/esm/index-Dhio9uis.js +2 -2
  155. package/dist/esm/index.js +2 -2
  156. package/dist/esm/{kritzel-active-users_42.entry.js → kritzel-active-users_44.entry.js} +709 -146
  157. package/dist/esm/loader.js +1 -1
  158. package/dist/esm/{schema.constants-DiCnmIYK.js → schema.constants-DchTXG3V.js} +1163 -172
  159. package/dist/esm/stencil.js +1 -1
  160. package/dist/stencil/index.esm.js +1 -1
  161. package/dist/stencil/p-86348986.entry.js +9 -0
  162. package/dist/stencil/p-DchTXG3V.js +1 -0
  163. package/dist/stencil/stencil.esm.js +1 -1
  164. package/dist/types/classes/core/core.class.d.ts +16 -0
  165. package/dist/types/classes/handlers/context-menu.handler.d.ts +13 -0
  166. package/dist/types/classes/managers/license.manager.d.ts +141 -0
  167. package/dist/types/classes/managers/localization.manager.d.ts +121 -0
  168. package/dist/types/classes/objects/custom-element.class.d.ts +2 -0
  169. package/dist/types/classes/objects/group.class.d.ts +6 -1
  170. package/dist/types/classes/objects/image.class.d.ts +1 -1
  171. package/dist/types/classes/objects/path.class.d.ts +3 -2
  172. package/dist/types/classes/objects/selection-group.class.d.ts +6 -1
  173. package/dist/types/classes/objects/shape.class.d.ts +2 -0
  174. package/dist/types/classes/objects/text.class.d.ts +2 -1
  175. package/dist/types/classes/tools/brush-tool.class.d.ts +1 -1
  176. package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +53 -1
  177. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +55 -3
  178. package/dist/types/components/core/kritzel-watermark/kritzel-watermark.d.ts +20 -0
  179. package/dist/types/components/ui/kritzel-controls/kritzel-controls.d.ts +3 -0
  180. package/dist/types/components/ui/kritzel-current-user/kritzel-current-user.d.ts +3 -0
  181. package/dist/types/components/ui/kritzel-current-user-dialog/kritzel-current-user-dialog.d.ts +3 -0
  182. package/dist/types/components/ui/kritzel-export/kritzel-export.d.ts +4 -1
  183. package/dist/types/components/ui/kritzel-more-menu/kritzel-more-menu.d.ts +3 -0
  184. package/dist/types/components/ui/kritzel-settings/kritzel-settings.d.ts +16 -0
  185. package/dist/types/components/ui/kritzel-share-dialog/kritzel-share-dialog.d.ts +3 -0
  186. package/dist/types/components/ui/kritzel-tool-config/kritzel-tool-config.d.ts +3 -0
  187. package/dist/types/components/ui/kritzel-utility-panel/kritzel-utility-panel.d.ts +3 -0
  188. package/dist/types/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.d.ts +3 -0
  189. package/dist/types/components/ui/kritzel-zoom-panel/kritzel-zoom-panel.d.ts +20 -0
  190. package/dist/types/components.d.ts +445 -26
  191. package/dist/types/constants/engine.constants.d.ts +2 -0
  192. package/dist/types/constants/license.constants.d.ts +25 -0
  193. package/dist/types/constants/version.d.ts +1 -1
  194. package/dist/types/helpers/localization.helper.d.ts +18 -0
  195. package/dist/types/helpers/math.helper.d.ts +1 -0
  196. package/dist/types/helpers/svg-export.helper.d.ts +81 -7
  197. package/dist/types/index.d.ts +13 -0
  198. package/dist/types/interfaces/context-menu-item.interface.d.ts +7 -1
  199. package/dist/types/interfaces/line-options.interface.d.ts +2 -0
  200. package/dist/types/interfaces/localization.interface.d.ts +143 -0
  201. package/dist/types/interfaces/path-options.interface.d.ts +2 -0
  202. package/dist/types/interfaces/settings.interface.d.ts +3 -0
  203. package/dist/types/interfaces/theme.interface.d.ts +27 -2
  204. package/dist/types/locales/de-locale.d.ts +5 -0
  205. package/dist/types/locales/en-locale.d.ts +6 -0
  206. package/dist/types/locales/fr-locale.d.ts +5 -0
  207. package/package.json +4 -7
  208. package/dist/components/p-2xYAGd0I.js +0 -1
  209. package/dist/components/p-B2Os1ya_.js +0 -1
  210. package/dist/components/p-BTEV1WwT.js +0 -1
  211. package/dist/components/p-BbactVA0.js +0 -1
  212. package/dist/components/p-BqwqGFQY.js +0 -1
  213. package/dist/components/p-C0TN5IAi.js +0 -1
  214. package/dist/components/p-CFgkUYoO.js +0 -1
  215. package/dist/components/p-COgo9OWy.js +0 -1
  216. package/dist/components/p-CUPYGT8c.js +0 -1
  217. package/dist/components/p-CcyIAi9S.js +0 -1
  218. package/dist/components/p-Cj78L1Kk.js +0 -1
  219. package/dist/components/p-CkAVEdDw.js +0 -9
  220. package/dist/components/p-CmuNn1Tc.js +0 -1
  221. package/dist/components/p-DDYoDSrm.js +0 -1
  222. package/dist/components/p-DbB730vO.js +0 -1
  223. package/dist/components/p-DlwYHzSj.js +0 -1
  224. package/dist/components/p-FK7b3BGt.js +0 -1
  225. package/dist/components/p-J9_SwObO.js +0 -1
  226. package/dist/stencil/p-67775031.entry.js +0 -9
  227. package/dist/stencil/p-DiCnmIYK.js +0 -1
@@ -0,0 +1 @@
1
+ import{p as e,H as t,c as i,h as r,d as o,t as a}from"./p-B43upypT.js";import{d as s}from"./p-CHrSFOSI.js";import{d as l}from"./p-Df3BwVGy.js";import{d as n}from"./p-CdR76C4L.js";import{d as p}from"./p-DNdXJp8F.js";import{d as c}from"./p-BG6hOSrm.js";const d=e(class extends t{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.exportPng=i(this,"exportPng"),this.exportSvg=i(this,"exportSvg"),this.exportJson=i(this,"exportJson")}workspaceName="workspace";terms={};isDialogOpen=!1;previewUrl;isLoading=!1;activeTab="viewport";exportFilename="";viewportExportFormat="png";exportPng;exportSvg;exportJson;get tabs(){return[{id:"viewport",label:this.terms["export.tabs.viewport"]??"Export Viewport"},{id:"workspace",label:this.terms["export.tabs.workspace"]??"Export Workspace"}]}viewportFormatOptions=[{value:"png",label:"PNG"},{value:"svg",label:"SVG"}];async open(e){this.previewUrl=e,this.activeTab="viewport",this.viewportExportFormat="png",this.exportFilename=this.generateDefaultFilename(),this.isDialogOpen=!0}generateDefaultFilename(){const e=(new Date).toISOString().replace(/[:.]/g,"-").slice(0,-5);return`${this.workspaceName}-${e}`}handleFilenameChange=e=>{this.exportFilename=e.detail};closeDialog=()=>{this.isDialogOpen=!1};handleTabChange=e=>{this.activeTab=e.detail};handleViewportFormatChange=e=>{this.viewportExportFormat=e.detail};handleExport=()=>{"viewport"===this.activeTab?"png"===this.viewportExportFormat?this.exportPng.emit():this.exportSvg.emit():this.exportJson.emit(this.exportFilename||this.generateDefaultFilename()),this.closeDialog()};renderViewportExport(){return r("div",{class:"export-tab-content"},this.previewUrl&&r("div",{class:"preview-container"},r("img",{src:this.previewUrl,alt:"Viewport Preview"})),r("kritzel-input",{label:this.terms["export.filename.label"]??"Filename",value:this.exportFilename,placeholder:this.terms["export.filename.placeholder"]??"Enter filename",suffix:`.${this.viewportExportFormat}`,onValueChange:this.handleFilenameChange}),r("div",{class:"format-selection"},r("label",null,this.terms["export.format.label"]??"Format"),r("kritzel-dropdown",{options:this.viewportFormatOptions,value:this.viewportExportFormat,forceOpenDirection:"up",onValueChanged:this.handleViewportFormatChange})))}renderWorkspaceExport(){return r("div",{class:"export-tab-content"},r("kritzel-input",{label:this.terms["export.filename.label"]??"Filename",value:this.exportFilename,placeholder:this.terms["export.filename.placeholder"]??"Enter filename",suffix:".json",onValueChange:this.handleFilenameChange}))}render(){return r(o,{key:"ff6ce7e5d3a0a7a024148529f86bf3ec7ffb0333"},r("kritzel-dialog",{key:"9051d262450af5fbe98959092f6bb0ac25ab43ce",isOpen:this.isDialogOpen,dialogTitle:this.terms["export.dialogTitle"]??"Export",closable:!0,contained:!0,onDialogClose:this.closeDialog},r("div",{key:"21f404a2101d5cf1d24aeeee663d8fb1854b9574",class:"export-content"},r("kritzel-pill-tabs",{key:"80db6cda288d1b7019387a2f1ade278475ad6e24",tabs:this.tabs,value:this.activeTab,onValueChange:this.handleTabChange}),"viewport"===this.activeTab&&this.renderViewportExport(),"workspace"===this.activeTab&&this.renderWorkspaceExport(),r("button",{key:"45809f91ddd63c74f5a4b3a2e266919f244c6109",class:"export-primary-button",onClick:this.handleExport},this.terms["export.exportButton"]??"Export"))))}static get style(){return":host{display:flex;flex-direction:column;min-height:0}.export-content{display:flex;flex-direction:column;gap:16px;padding:0;flex:1}.export-content kritzel-pill-tabs{align-self:center}.export-tab-content{display:flex;flex-direction:column;gap:16px;min-height:330px}.format-selection{display:flex;flex-direction:column;gap:6px}.format-selection label{font-size:14px;font-weight:500;color:var(--kritzel-global-text-primary, #333)}.export-primary-button{width:100%;padding:12px 24px;background-color:var(--kritzel-global-primary-color, #007AFF);color:var(--kritzel-global-primary-text-color, #fff);border:none;border-radius:var(--kritzel-button-border-radius, 8px);font-size:14px;font-weight:600;cursor:pointer;transition:background-color 0.2s ease;-webkit-tap-highlight-color:transparent}.export-primary-button:hover{background-color:var(--kritzel-global-primary-hover-color, #0066d6)}.export-primary-button:focus-visible{outline:revert;outline-offset:revert}.preview-container{width:100%;display:flex;justify-content:center;align-items:center;box-sizing:border-box;margin-bottom:8px}.preview-container img{max-width:100%;max-height:250px;object-fit:contain;box-shadow:0 4px 8px rgba(0, 0, 0, 0.15);border-radius:4px;border:1px solid var(--kritzel-global-border-color, #dbdbdb)}.export-content p{margin:0;color:var(--kritzel-global-text-secondary, #666)}@media (max-width: 576px){.export-tab-content{flex:1;min-height:0}}"}},[513,"kritzel-export",{workspaceName:[1,"workspace-name"],terms:[16],isDialogOpen:[32],previewUrl:[32],isLoading:[32],activeTab:[32],exportFilename:[32],viewportExportFormat:[32],open:[64]}]);function h(){"undefined"!=typeof customElements&&["kritzel-export","kritzel-dialog","kritzel-dropdown","kritzel-icon","kritzel-input","kritzel-pill-tabs"].forEach((e=>{switch(e){case"kritzel-export":customElements.get(a(e))||customElements.define(a(e),d);break;case"kritzel-dialog":customElements.get(a(e))||s();break;case"kritzel-dropdown":customElements.get(a(e))||l();break;case"kritzel-icon":customElements.get(a(e))||n();break;case"kritzel-input":customElements.get(a(e))||p();break;case"kritzel-pill-tabs":customElements.get(a(e))||c()}}))}export{d as K,h as d}
@@ -1 +1 @@
1
- import{p as e,H as t,c as i,h as n,d as s,t as o}from"./p-B43upypT.js";import{d as r}from"./p-DbB730vO.js";const a=e(class extends t{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.actionSelected=i(this,"actionSelected"),this.close=i(this,"close")}get host(){return this}items;onItemsChanged(){this.updateMenuItems()}objects;actionSelected;close;processedItems=[];openSubmenuPath="";submenuPositions={};submenuTimer=null;submenuRefs=new Map;menuItemWrapperRefs=new Map;handleOutsideClick(e){e.composedPath().includes(this.host)||this.close.emit()}componentWillLoad(){this.updateMenuItems()}componentDidLoad(){this.adjustPositionToViewport()}componentDidUpdate(){this.adjustPositionToViewport(),this.adjustSubmenuPositions(),this.pruneStaleRefs()}disconnectedCallback(){this.submenuTimer&&clearTimeout(this.submenuTimer)}adjustPositionToViewport(){const e=this.host.getBoundingClientRect(),t=window.innerWidth,i=window.innerHeight,n=parseFloat(this.host.style.left)||0,s=parseFloat(this.host.style.top)||0;let o=n,r=s;e.right>t-8&&(o=t-e.width-8),e.bottom>i-8&&(r=i-e.height-8),o<8&&(o=8),r<8&&(r=8),o===n&&r===s||(this.host.style.left=`${o}px`,this.host.style.top=`${r}px`)}adjustSubmenuPositions(){if(!this.openSubmenuPath)return;const e=window.innerHeight;for(const t of this.getOpenSubmenuPaths()){const i=this.submenuRefs.get(t),n=this.menuItemWrapperRefs.get(t);if(!i||!n)continue;const s=n.getBoundingClientRect(),o=s.top+i.offsetHeight;if(o>e-8){let t=o-(e-8);s.top-t<8&&(t=s.top-8),i.style.top=-t+"px"}else i.style.top="0px"}}getOpenSubmenuPaths(){if(!this.openSubmenuPath)return[];const e=this.openSubmenuPath.split("."),t=[];for(let i=1;i<=e.length;i++)t.push(e.slice(0,i).join("."));return t}isSubmenuOpen(e){return this.openSubmenuPath===e||this.openSubmenuPath.startsWith(e+".")}getParentPath(e){const t=e.lastIndexOf(".");return-1===t?"":e.substring(0,t)}getMenuDepth(e){return e?e.split(".").length:0}pruneStaleRefs(){const e=new Set(this.getOpenSubmenuPaths());for(const t of Array.from(this.submenuRefs.keys()))e.has(t)||this.submenuRefs.delete(t);for(const t of Array.from(this.menuItemWrapperRefs.keys())){const i=this.getParentPath(t);""===i||e.has(i)||this.menuItemWrapperRefs.delete(t)}}handleItemClick(e,t,i){t||i||e.action&&this.actionSelected.emit(e)}handleItemMouseEnter(e,t){this.submenuTimer&&(clearTimeout(this.submenuTimer),this.submenuTimer=null);const i=this.getParentPath(e);this.submenuTimer=t?setTimeout((()=>{const t=this.menuItemWrapperRefs.get(e);let i="right";if(t){const e=t.getBoundingClientRect(),n=window.innerWidth;i=e.right+160>n-8?"left":"right"}this.submenuPositions={...this.submenuPositions,[e]:i},this.openSubmenuPath=e}),150):setTimeout((()=>{this.openSubmenuPath=i}),150)}handleSubmenuMouseEnter(){this.submenuTimer&&(clearTimeout(this.submenuTimer),this.submenuTimer=null)}handleSubmenuMouseLeave(e){const t=this.getParentPath(e);this.submenuTimer=setTimeout((()=>{this.openSubmenuPath=t}),150)}async updateMenuItems(){this.processedItems=await this.processItems(this.items)}async processItems(e){const t=[];for(const i of e)if(await this.evaluateProperty(i.visible,!0)){const e=await this.evaluateProperty(i.disabled,!1);let n;i.children&&i.children.length>0&&(n=await this.processItems(i.children)),t.push({item:i,isDisabled:e,processedChildren:n})}return t}async evaluateProperty(e,t){return"boolean"==typeof e?e:"function"==typeof e?await Promise.resolve(e(null,this.objects)):t}renderItems(e,t){return e.map((({item:i,isDisabled:s,processedChildren:o},r)=>{const a=""===t?String(r):`${t}.${r}`,l=r>0?e[r-1].item:null,u=l&&l.group!==i.group,c=!!o&&o.length>0,m=c&&this.isSubmenuOpen(a);return[u&&n("div",{class:"menu-divider",key:`divider-${a}`}),n("div",{class:"menu-item-wrapper",key:`wrapper-${a}`,ref:e=>e&&this.menuItemWrapperRefs.set(a,e),onMouseEnter:()=>this.handleItemMouseEnter(a,c)},n("button",{key:`${i.label}-${a}`,class:{"menu-item":!0,disabled:s,"has-children":c,"submenu-open":m},onClick:()=>this.handleItemClick(i,s,c),disabled:s&&!c},i.icon&&n("kritzel-icon",{name:i.icon,size:16}),n("span",{class:"label"},i.label),c&&n("kritzel-icon",{name:"chevron-right",size:12,class:"submenu-arrow"})),c&&m&&this.renderSubmenu(o,a))]}))}renderSubmenu(e,t){const i="left"===this.submenuPositions[t]?"left":"right",s=this.getMenuDepth(t)+1;return n("div",{class:{"submenu-container":!0,"position-left":"left"===i},key:`submenu-${t}`,style:{zIndex:String(s)},ref:e=>e&&this.submenuRefs.set(t,e),onMouseEnter:()=>this.handleSubmenuMouseEnter(),onMouseLeave:()=>this.handleSubmenuMouseLeave(t)},this.renderItems(e,t))}render(){return this.processedItems&&0!==this.processedItems.length?n(s,null,n("div",{class:"menu-container"},this.renderItems(this.processedItems,""))):null}static get watchers(){return{items:[{onItemsChanged:0}]}}static get style(){return":host{display:block}.menu-container{position:relative;z-index:1;display:flex;flex-direction:column;gap:var(--kritzel-context-menu-item-spacing, 2px);background-color:var(--kritzel-context-menu-background-color, #ffffff);border-radius:var(--kritzel-context-menu-border-radius, 12px);box-shadow:var(--kritzel-context-menu-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12));border:var(--kritzel-context-menu-border, 1px solid #ebebeb);padding:var(--kritzel-context-menu-padding, 4px);min-width:var(--kritzel-context-menu-min-width, 140px)}.menu-item-wrapper{position:relative}.menu-item{display:flex;align-items:center;gap:var(--kritzel-context-menu-item-gap, 8px);background:none;border:none;text-align:left;padding:var(--kritzel-context-menu-item-padding, 8px);border-radius:var(--kritzel-context-menu-item-border-radius, 12px);cursor:var(--kritzel-global-pointer-cursor, pointer);font-size:var(--kritzel-context-menu-item-font-size, 14px);color:var(--kritzel-context-menu-item-color, #333333);white-space:nowrap;-webkit-tap-highlight-color:transparent;width:100%;min-width:0}.menu-item:not(.disabled):hover,.menu-item.submenu-open{background-color:var(--kritzel-context-menu-item-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.menu-item:not(.disabled):active{background-color:var(--kritzel-context-menu-item-active-background-color, hsl(0, 0%, 0%, 8.6%))}.menu-item.disabled{color:var(--kritzel-context-menu-item-disabled-color, #aaaaaa)}.menu-item.has-children.disabled{cursor:var(--kritzel-global-pointer-cursor, pointer);color:var(--kritzel-context-menu-item-color, #333333)}.menu-item kritzel-icon{opacity:0.8;flex-shrink:0}.menu-item.disabled kritzel-icon{opacity:0.4}.menu-item.has-children.disabled kritzel-icon{opacity:0.8}.label{flex-grow:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.submenu-arrow{margin-left:auto;opacity:0.5}.menu-divider{height:1px;background-color:var(--kritzel-context-menu-divider-color, rgba(0, 0, 0, 0.1));margin:var(--kritzel-context-menu-divider-margin, 4px 8px)}.submenu-container{position:absolute;top:0;left:100%;z-index:2;margin-left:4px;display:flex;flex-direction:column;gap:var(--kritzel-context-menu-item-spacing, 2px);background-color:var(--kritzel-context-menu-background-color, #ffffff);border-radius:var(--kritzel-context-menu-border-radius, 12px);box-shadow:var(--kritzel-context-menu-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12));border:var(--kritzel-context-menu-border, 1px solid #ebebeb);padding:var(--kritzel-context-menu-padding, 4px);min-width:120px}.submenu-container.position-left{left:auto;right:100%;margin-left:0;margin-right:4px}"}},[513,"kritzel-context-menu",{items:[16],objects:[16],processedItems:[32],openSubmenuPath:[32],submenuPositions:[32]},[[9,"pointerdown","handleOutsideClick"]],{items:[{onItemsChanged:0}]}]);function l(){"undefined"!=typeof customElements&&["kritzel-context-menu","kritzel-icon"].forEach((e=>{switch(e){case"kritzel-context-menu":customElements.get(o(e))||customElements.define(o(e),a);break;case"kritzel-icon":customElements.get(o(e))||r()}}))}export{a as K,l as d}
1
+ import{p as e,H as t,c as i,h as n,d as s,t as o}from"./p-B43upypT.js";import{d as r}from"./p-CdR76C4L.js";const a=e(class extends t{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.actionSelected=i(this,"actionSelected"),this.close=i(this,"close")}get host(){return this}items;onItemsChanged(){this.updateMenuItems()}objects;actionSelected;close;processedItems=[];openSubmenuPath="";submenuPositions={};submenuTimer=null;submenuRefs=new Map;menuItemWrapperRefs=new Map;handleOutsideClick(e){e.composedPath().includes(this.host)||this.close.emit()}componentWillLoad(){this.updateMenuItems()}componentDidLoad(){this.adjustPositionToViewport()}componentDidUpdate(){this.adjustPositionToViewport(),this.adjustSubmenuPositions(),this.pruneStaleRefs()}disconnectedCallback(){this.submenuTimer&&clearTimeout(this.submenuTimer)}adjustPositionToViewport(){const e=this.host.getBoundingClientRect(),t=window.innerWidth,i=window.innerHeight,n=parseFloat(this.host.style.left)||0,s=parseFloat(this.host.style.top)||0;let o=n,r=s;e.right>t-8&&(o=t-e.width-8),e.bottom>i-8&&(r=i-e.height-8),o<8&&(o=8),r<8&&(r=8),o===n&&r===s||(this.host.style.left=`${o}px`,this.host.style.top=`${r}px`)}adjustSubmenuPositions(){if(!this.openSubmenuPath)return;const e=window.innerHeight;for(const t of this.getOpenSubmenuPaths()){const i=this.submenuRefs.get(t),n=this.menuItemWrapperRefs.get(t);if(!i||!n)continue;const s=n.getBoundingClientRect(),o=s.top+i.offsetHeight;if(o>e-8){let t=o-(e-8);s.top-t<8&&(t=s.top-8),i.style.top=-t+"px"}else i.style.top="0px"}}getOpenSubmenuPaths(){if(!this.openSubmenuPath)return[];const e=this.openSubmenuPath.split("."),t=[];for(let i=1;i<=e.length;i++)t.push(e.slice(0,i).join("."));return t}isSubmenuOpen(e){return this.openSubmenuPath===e||this.openSubmenuPath.startsWith(e+".")}getParentPath(e){const t=e.lastIndexOf(".");return-1===t?"":e.substring(0,t)}getMenuDepth(e){return e?e.split(".").length:0}pruneStaleRefs(){const e=new Set(this.getOpenSubmenuPaths());for(const t of Array.from(this.submenuRefs.keys()))e.has(t)||this.submenuRefs.delete(t);for(const t of Array.from(this.menuItemWrapperRefs.keys())){const i=this.getParentPath(t);""===i||e.has(i)||this.menuItemWrapperRefs.delete(t)}}handleItemClick(e,t,i){t||i||e.action&&this.actionSelected.emit(e)}handleItemMouseEnter(e,t){this.submenuTimer&&(clearTimeout(this.submenuTimer),this.submenuTimer=null);const i=this.getParentPath(e);this.submenuTimer=t?setTimeout((()=>{const t=this.menuItemWrapperRefs.get(e);let i="right";if(t){const e=t.getBoundingClientRect(),n=window.innerWidth;i=e.right+160>n-8?"left":"right"}this.submenuPositions={...this.submenuPositions,[e]:i},this.openSubmenuPath=e}),150):setTimeout((()=>{this.openSubmenuPath=i}),150)}handleSubmenuMouseEnter(){this.submenuTimer&&(clearTimeout(this.submenuTimer),this.submenuTimer=null)}handleSubmenuMouseLeave(e){const t=this.getParentPath(e);this.submenuTimer=setTimeout((()=>{this.openSubmenuPath=t}),150)}async updateMenuItems(){this.processedItems=await this.processItems(this.items)}async processItems(e){const t=[];for(const i of e)if(await this.evaluateProperty(i.visible,!0)){const e=await this.evaluateProperty(i.disabled,!1);let n;i.children&&i.children.length>0&&(n=await this.processItems(i.children)),t.push({item:i,isDisabled:e,processedChildren:n})}return t}async evaluateProperty(e,t){return"boolean"==typeof e?e:"function"==typeof e?await Promise.resolve(e(null,this.objects)):t}renderItems(e,t){return e.map((({item:i,isDisabled:s,processedChildren:o},r)=>{const a=""===t?String(r):`${t}.${r}`,l=r>0?e[r-1].item:null,u=l&&l.group!==i.group,c=!!o&&o.length>0,d=c&&this.isSubmenuOpen(a);return[u&&n("div",{class:"menu-divider",key:`divider-${a}`}),n("div",{class:"menu-item-wrapper",key:`wrapper-${a}`,ref:e=>e&&this.menuItemWrapperRefs.set(a,e),onMouseEnter:()=>this.handleItemMouseEnter(a,c)},n("button",{key:`${i.label}-${a}`,class:{"menu-item":!0,disabled:s,"has-children":c,"submenu-open":d},onClick:()=>this.handleItemClick(i,s,c),disabled:s&&!c},i.icon&&n("kritzel-icon",{name:i.icon,size:16}),n("span",{class:"label"},i.label),c&&n("kritzel-icon",{name:"chevron-right",size:12,class:"submenu-arrow"})),c&&d&&this.renderSubmenu(o,a))]}))}renderSubmenu(e,t){const i="left"===this.submenuPositions[t]?"left":"right",s=this.getMenuDepth(t)+1;return n("div",{class:{"submenu-container":!0,"position-left":"left"===i},key:`submenu-${t}`,style:{zIndex:String(s)},ref:e=>e&&this.submenuRefs.set(t,e),onMouseEnter:()=>this.handleSubmenuMouseEnter(),onMouseLeave:()=>this.handleSubmenuMouseLeave(t)},this.renderItems(e,t))}render(){return this.processedItems&&0!==this.processedItems.length?n(s,null,n("div",{class:"menu-container"},this.renderItems(this.processedItems,""))):null}static get watchers(){return{items:[{onItemsChanged:0}]}}static get style(){return":host{display:block}.menu-container{position:relative;z-index:1;display:flex;flex-direction:column;gap:var(--kritzel-context-menu-item-spacing, 2px);background-color:var(--kritzel-context-menu-background-color, #ffffff);border-radius:var(--kritzel-context-menu-border-radius, 12px);box-shadow:var(--kritzel-context-menu-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12));border:var(--kritzel-context-menu-border, 1px solid #ebebeb);padding:var(--kritzel-context-menu-padding, 4px);min-width:var(--kritzel-context-menu-min-width, 140px)}.menu-item-wrapper{position:relative}.menu-item{display:flex;align-items:center;gap:var(--kritzel-context-menu-item-gap, 8px);background:none;border:none;text-align:left;padding:var(--kritzel-context-menu-item-padding, 8px);border-radius:var(--kritzel-context-menu-item-border-radius, 12px);cursor:var(--kritzel-global-pointer-cursor, pointer);font-size:var(--kritzel-context-menu-item-font-size, 14px);color:var(--kritzel-context-menu-item-color, #333333);white-space:nowrap;-webkit-tap-highlight-color:transparent;width:100%;min-width:0}.menu-item:not(.disabled):hover,.menu-item.submenu-open{background-color:var(--kritzel-context-menu-item-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.menu-item:not(.disabled):active{background-color:var(--kritzel-context-menu-item-active-background-color, hsl(0, 0%, 0%, 8.6%))}.menu-item.disabled{color:var(--kritzel-context-menu-item-disabled-color, #aaaaaa)}.menu-item.has-children.disabled{cursor:var(--kritzel-global-pointer-cursor, pointer);color:var(--kritzel-context-menu-item-color, #333333)}.menu-item kritzel-icon{opacity:0.8;flex-shrink:0}.menu-item.disabled kritzel-icon{opacity:0.4}.menu-item.has-children.disabled kritzel-icon{opacity:0.8}.label{flex-grow:1;min-width:0;overflow:hidden;text-overflow:ellipsis}.submenu-arrow{margin-left:auto;opacity:0.5}.menu-divider{height:1px;background-color:var(--kritzel-context-menu-divider-color, rgba(0, 0, 0, 0.1));margin:var(--kritzel-context-menu-divider-margin, 4px 8px)}.submenu-container{position:absolute;top:0;left:100%;z-index:2;margin-left:4px;display:flex;flex-direction:column;gap:var(--kritzel-context-menu-item-spacing, 2px);background-color:var(--kritzel-context-menu-background-color, #ffffff);border-radius:var(--kritzel-context-menu-border-radius, 12px);box-shadow:var(--kritzel-context-menu-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12));border:var(--kritzel-context-menu-border, 1px solid #ebebeb);padding:var(--kritzel-context-menu-padding, 4px);min-width:120px}.submenu-container.position-left{left:auto;right:100%;margin-left:0;margin-right:4px}"}},[513,"kritzel-context-menu",{items:[16],objects:[16],processedItems:[32],openSubmenuPath:[32],submenuPositions:[32]},[[9,"pointerdown","handleOutsideClick"]],{items:[{onItemsChanged:0}]}]);function l(){"undefined"!=typeof customElements&&["kritzel-context-menu","kritzel-icon"].forEach((e=>{switch(e){case"kritzel-context-menu":customElements.get(o(e))||customElements.define(o(e),a);break;case"kritzel-icon":customElements.get(o(e))||r()}}))}export{a as K,l as d}
@@ -1 +1 @@
1
- import{p as e,H as t,c as o,h as r,d as s,t as i}from"./p-B43upypT.js";import{a as l}from"./p-2xYAGd0I.js";import{d as c}from"./p-skWUIStn.js";const a=e(class extends t{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.colorChange=o(this,"colorChange")}colors=[];selectedColor=null;isExpanded=!1;isOpaque=!1;opacity=1;theme;colorChange;handleColorClick(e){this.selectedColor=e,this.colorChange.emit(e)}handleKeyDown(e,t){"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),this.handleColorClick(t))}calculateHeight(){const e=Math.ceil(this.colors.length/6);return 32*e+8*(e-1)+"px"}areColorsEqual(e,t){return!!e&&e.light===t.light&&e.dark===t.dark}render(){const e=this.isExpanded?this.colors:this.colors.slice(0,6),t=this.isExpanded?this.calculateHeight():"32px";return r(s,{key:"fc57d77d7c4cfd2aa2a02a70b8991858bb8cf61b"},r("div",{key:"4fd10783609882f453ce95f5114acf799f21ec52",class:{"color-grid":!0,expanded:this.isExpanded},style:{height:t}},e.map((e=>r("div",{tabIndex:0,class:{"color-container":!0,selected:this.areColorsEqual(this.selectedColor,e)},onClick:()=>this.handleColorClick(e),onKeyDown:t=>this.handleKeyDown(t,e)},r("kritzel-color",{value:l.applyOpacity(e,this.opacity,this.theme),theme:this.theme}))))))}static get style(){return":host{display:flex;align-items:flex-start;gap:8px;padding:0;width:100%;box-sizing:border-box}.color-grid{width:100%;display:grid;grid-template-columns:repeat(6, 32px);gap:8px;justify-items:center;overflow:hidden;height:40px;transition:height 0.1s ease-in-out}.color-grid.expanded{height:500px}.color-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}.color-container:hover{background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.color-container.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-color-palette-selected-background-color)}"}},[513,"kritzel-color-palette",{colors:[16],selectedColor:[1040],isExpanded:[4,"is-expanded"],isOpaque:[4,"is-opaque"],opacity:[2],theme:[1]}]);function n(){"undefined"!=typeof customElements&&["kritzel-color-palette","kritzel-color"].forEach((e=>{switch(e){case"kritzel-color-palette":customElements.get(i(e))||customElements.define(i(e),a);break;case"kritzel-color":customElements.get(i(e))||c()}}))}export{a as K,n as d}
1
+ import{p as e,H as t,c as o,h as r,d as s,t as i}from"./p-B43upypT.js";import{a as l}from"./p-Cu9KYyoq.js";import{d as a}from"./p-SDZNC8GF.js";const c=e(class extends t{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.colorChange=o(this,"colorChange")}colors=[];selectedColor=null;isExpanded=!1;isOpaque=!1;opacity=1;theme;colorChange;handleColorClick(e){this.selectedColor=e,this.colorChange.emit(e)}handleKeyDown(e,t){"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),this.handleColorClick(t))}calculateHeight(){const e=Math.ceil(this.colors.length/6);return 32*e+8*(e-1)+"px"}areColorsEqual(e,t){return!!e&&e.light===t.light&&e.dark===t.dark}render(){const e=this.isExpanded?this.colors:this.colors.slice(0,6),t=this.isExpanded?this.calculateHeight():"32px";return r(s,{key:"9910a765816f45d420ad27c8fc7b02811380783b"},r("div",{key:"91f3dae04338f55ab21831e4cac65f9d855c58c6",class:{"color-grid":!0,expanded:this.isExpanded},style:{height:t}},e.map((e=>r("div",{tabIndex:0,class:{"color-container":!0,selected:this.areColorsEqual(this.selectedColor,e)},onClick:()=>this.handleColorClick(e),onKeyDown:t=>this.handleKeyDown(t,e)},r("kritzel-color",{value:l.applyOpacity(e,this.opacity,this.theme),theme:this.theme}))))))}static get style(){return":host{display:flex;align-items:flex-start;gap:8px;padding:0;width:100%;box-sizing:border-box}.color-grid{width:100%;display:grid;grid-template-columns:repeat(6, 32px);gap:8px;justify-items:center;overflow:hidden;height:40px;transition:height 0.1s ease-in-out}.color-grid.expanded{height:500px}.color-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}.color-container:hover{background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.color-container.selected{border-color:var(--kritzel-selection-border-color, #007AFF);background-color:var(--kritzel-color-palette-selected-background-color)}"}},[513,"kritzel-color-palette",{colors:[16],selectedColor:[1040],isExpanded:[4,"is-expanded"],isOpaque:[4,"is-opaque"],opacity:[2],theme:[1]}]);function n(){"undefined"!=typeof customElements&&["kritzel-color-palette","kritzel-color"].forEach((e=>{switch(e){case"kritzel-color-palette":customElements.get(i(e))||customElements.define(i(e),c);break;case"kritzel-color":customElements.get(i(e))||a()}}))}export{c as K,n as d}
@@ -1 +1 @@
1
- import{p as t,H as e,c as i,h as n,d as o,t as s}from"./p-B43upypT.js";import{K as l}from"./p-jGOpkGDl.js";import{d as r}from"./p-DbB730vO.js";import{d as a,a as c}from"./p-SptaSMno.js";import{d as u}from"./p-BYmp9Ovv.js";const d=t(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.mainButtonClick=i(this,"mainButtonClick"),this.itemSelect=i(this,"itemSelect"),this.itemSave=i(this,"itemSave"),this.itemCancel=i(this,"itemCancel"),this.itemToggleChildMenu=i(this,"itemToggleChildMenu"),this.itemCloseChildMenu=i(this,"itemCloseChildMenu"),this.menuOpen=i(this,"menuOpen"),this.menuClose=i(this,"menuClose")}get host(){return this}buttonIcon="plus";dropdownIcon="chevron-down";items=[];mainButtonDisabled=!1;menuButtonDisabled=!1;mainButtonClick;itemSelect;itemSave;itemCancel;itemToggleChildMenu;itemCloseChildMenu;menuOpen;menuClose;isMenuOpen=!1;isTouchDevice=l.isTouchDevice();anchorElement;menuScrollTop=0;splitMenuButtonRef;menuRef;async open(){this.isMenuOpen||(window.dispatchEvent(new CustomEvent("kritzel-dismiss-menus")),this.isMenuOpen=!0,this.anchorElement=this.host,this.menuOpen.emit())}async focusMenu(){this.menuRef&&await this.menuRef.setFocus()}handleButtonClick=t=>{t.stopPropagation(),this.mainButtonClick.emit()};toggleMenu=t=>{t.stopPropagation(),this.isMenuOpen?this.closeMenu():this.openMenu(t)};openMenu=t=>{t.stopPropagation(),window.dispatchEvent(new CustomEvent("kritzel-dismiss-menus")),this.isMenuOpen=!0,this.anchorElement=this.host,this.menuOpen.emit(),requestAnimationFrame((()=>{this.menuRef?.setScrollTop(this.menuScrollTop)}))};closeMenu=()=>{this.isMenuOpen=!1,this.anchorElement=null,this.splitMenuButtonRef?.blur(),this.menuClose.emit()};handleItemSelect=t=>{this.itemSelect.emit(t.detail)};handleItemSave=t=>{this.itemSave.emit(t.detail)};handleItemCancel=t=>{this.itemCancel.emit(t.detail)};handleItemToggleChildMenu=t=>{this.itemToggleChildMenu.emit(t.detail)};handleItemCloseChildMenu=t=>{this.itemCloseChildMenu.emit(t.detail)};handleScroll=t=>{this.menuScrollTop=t.target.scrollTop};render(){return n(o,{key:"794fdb5cb4d110d93b6b2cb060fe34241f29db57",class:{mobile:this.isTouchDevice}},n("button",{key:"7202a40f05bf6fc256996a05db55bcfa3baba615",class:"split-main-button",tabIndex:0,onClick:this.handleButtonClick,disabled:this.mainButtonDisabled,"aria-label":"Main action"},this.buttonIcon&&n("kritzel-icon",{key:"3156c6c4e757d9ebbd3f5e3719ee1bf9bf81f71b",name:this.buttonIcon})),n("div",{key:"4c5a3a9791ecfd00d36fc0eb885c1d227200cfc7",class:"split-divider"}),n("button",{key:"fe0ee44d11ddb34f7719b986406905c47bc1f152",ref:t=>this.splitMenuButtonRef=t,class:"split-menu-button",tabIndex:0,onClick:this.toggleMenu,disabled:this.menuButtonDisabled,"aria-label":"Open menu"},n("kritzel-icon",{key:"b3d84e4599dc408ccc8afe17e487b501cbde89a4",name:this.dropdownIcon})),n("kritzel-portal",{key:"6800329ebe3c94a661e9ad852b6bf256defc291f",anchor:this.anchorElement,offsetY:4,onClose:this.closeMenu},n("kritzel-menu",{key:"0c98abe2327e0cc3182a55caf50c89316b526049",ref:t=>this.menuRef=t,items:this.items,onItemSelect:this.handleItemSelect,onItemSave:this.handleItemSave,onItemCancel:this.handleItemCancel,onItemToggleChildMenu:this.handleItemToggleChildMenu,onItemCloseChildMenu:this.handleItemCloseChildMenu,onClose:this.closeMenu,onScroll:this.handleScroll})))}static get style(){return":host{position:relative;display:flex;align-items:center;font-family:sans-serif;z-index:1;padding:var(--kritzel-split-button-padding, 4px);background-color:var(--kritzel-split-button-background-color, #ffffff);border-radius:var(--kritzel-split-button-border-radius, 12px);box-shadow:var(--kritzel-split-button-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-split-button-border, 1px solid #ebebeb);gap:var(--kritzel-split-button-gap, 4px)}:host(.mobile){--kritzel-split-button-hover-background-color:transparent}button{border:none;background-color:transparent;padding:0;margin:0;font-family:inherit;font-size:inherit;color:var(--kritzel-split-button-color, #000000);-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:var(--kritzel-global-pointer-cursor, pointer);text-align:center;display:flex;align-items:center;justify-content:center;pointer-events:all;-webkit-tap-highlight-color:transparent}.split-main-button,.split-menu-button{height:auto;display:flex;align-items:center;padding:var(--kritzel-split-button-padding, 8px);background-color:var(--kritzel-split-button-background-color, #ffffff);border-radius:var(--kritzel-split-button-border-radius, 12px);font-size:var(--kritzel-split-button-font-size, 14px)}.split-main-button:hover,.split-menu-button:hover{background-color:var(--kritzel-split-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.split-main-button:focus,.split-menu-button:focus{background-color:var(--kritzel-split-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.split-main-button{gap:var(--kritzel-split-button-gap, 4px)}.split-menu-button{border-left:none;justify-content:center}.split-divider{width:var(--kritzel-split-button-divider-width, 1px);height:24px;background-color:var(--kritzel-split-button-divider-background-color, hsl(0, 0%, 0%, 4.3%))}:disabled{pointer-events:none;opacity:0.5}"}},[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]}]);function b(){"undefined"!=typeof customElements&&["kritzel-split-button","kritzel-icon","kritzel-menu","kritzel-menu-item","kritzel-portal"].forEach((t=>{switch(t){case"kritzel-split-button":customElements.get(s(t))||customElements.define(s(t),d);break;case"kritzel-icon":customElements.get(s(t))||r();break;case"kritzel-menu":customElements.get(s(t))||c();break;case"kritzel-menu-item":customElements.get(s(t))||a();break;case"kritzel-portal":customElements.get(s(t))||u()}}))}export{d as K,b as d}
1
+ import{p as t,H as e,c as i,h as n,d as o,t as s}from"./p-B43upypT.js";import{K as l}from"./p-jGOpkGDl.js";import{d as a}from"./p-CdR76C4L.js";import{d as r,a as u}from"./p-BKvHg9cv.js";import{d as c}from"./p-U4oawa1x.js";const d=t(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.mainButtonClick=i(this,"mainButtonClick"),this.itemSelect=i(this,"itemSelect"),this.itemSave=i(this,"itemSave"),this.itemCancel=i(this,"itemCancel"),this.itemToggleChildMenu=i(this,"itemToggleChildMenu"),this.itemCloseChildMenu=i(this,"itemCloseChildMenu"),this.menuOpen=i(this,"menuOpen"),this.menuClose=i(this,"menuClose")}get host(){return this}buttonIcon="plus";dropdownIcon="chevron-down";items=[];mainButtonDisabled=!1;menuButtonDisabled=!1;mainButtonClick;itemSelect;itemSave;itemCancel;itemToggleChildMenu;itemCloseChildMenu;menuOpen;menuClose;isMenuOpen=!1;isTouchDevice=l.isTouchDevice();anchorElement;menuScrollTop=0;splitMenuButtonRef;menuRef;async open(){this.isMenuOpen||(window.dispatchEvent(new CustomEvent("kritzel-dismiss-menus")),this.isMenuOpen=!0,this.anchorElement=this.host,this.menuOpen.emit())}async focusMenu(){this.menuRef&&await this.menuRef.setFocus()}handleButtonClick=t=>{t.stopPropagation(),this.mainButtonClick.emit()};toggleMenu=t=>{t.stopPropagation(),this.isMenuOpen?this.closeMenu():this.openMenu(t)};openMenu=t=>{t.stopPropagation(),window.dispatchEvent(new CustomEvent("kritzel-dismiss-menus")),this.isMenuOpen=!0,this.anchorElement=this.host,this.menuOpen.emit(),requestAnimationFrame((()=>{this.menuRef?.setScrollTop(this.menuScrollTop)}))};closeMenu=()=>{this.isMenuOpen=!1,this.anchorElement=null,this.splitMenuButtonRef?.blur(),this.menuClose.emit()};handleItemSelect=t=>{this.itemSelect.emit(t.detail)};handleItemSave=t=>{this.itemSave.emit(t.detail)};handleItemCancel=t=>{this.itemCancel.emit(t.detail)};handleItemToggleChildMenu=t=>{this.itemToggleChildMenu.emit(t.detail)};handleItemCloseChildMenu=t=>{this.itemCloseChildMenu.emit(t.detail)};handleScroll=t=>{this.menuScrollTop=t.target.scrollTop};render(){return n(o,{key:"39516b2486a27534273b6bf4def6b11790aa0ed5",class:{mobile:this.isTouchDevice}},n("button",{key:"19c4a58deb3992857b0e42e4a035a15d0980da22",class:"split-main-button",tabIndex:0,onClick:this.handleButtonClick,disabled:this.mainButtonDisabled,"aria-label":"Main action"},this.buttonIcon&&n("kritzel-icon",{key:"4c8e7e09e60717b1653251468c2a25d41c4b1921",name:this.buttonIcon})),n("div",{key:"53617db6b630dfb5320e7309dcbc9f7288ff8974",class:"split-divider"}),n("button",{key:"5134f88ed43558ff0cb11b8ef29cf2b370aad4ee",ref:t=>this.splitMenuButtonRef=t,class:"split-menu-button",tabIndex:0,onClick:this.toggleMenu,disabled:this.menuButtonDisabled,"aria-label":"Open menu"},n("kritzel-icon",{key:"41f39a601ae91d4faaf54c1ca39c90e27e084d31",name:this.dropdownIcon})),n("kritzel-portal",{key:"dcfe82f72a53e9346b48d2ff6da236c1f1344f3f",anchor:this.anchorElement,offsetY:4,onClose:this.closeMenu},n("kritzel-menu",{key:"1208990bff47de642eafa6ca8cfaa76de46ca87c",ref:t=>this.menuRef=t,items:this.items,onItemSelect:this.handleItemSelect,onItemSave:this.handleItemSave,onItemCancel:this.handleItemCancel,onItemToggleChildMenu:this.handleItemToggleChildMenu,onItemCloseChildMenu:this.handleItemCloseChildMenu,onClose:this.closeMenu,onScroll:this.handleScroll})))}static get style(){return":host{position:relative;display:flex;align-items:center;font-family:sans-serif;z-index:1;padding:var(--kritzel-split-button-padding, 4px);background-color:var(--kritzel-split-button-background-color, #ffffff);border-radius:var(--kritzel-split-button-border-radius, 12px);box-shadow:var(--kritzel-split-button-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-split-button-border, 1px solid #ebebeb);gap:var(--kritzel-split-button-gap, 4px)}:host(.mobile){--kritzel-split-button-hover-background-color:transparent}button{border:none;background-color:transparent;padding:0;margin:0;font-family:inherit;font-size:inherit;color:var(--kritzel-split-button-color, #000000);-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:var(--kritzel-global-pointer-cursor, pointer);text-align:center;display:flex;align-items:center;justify-content:center;pointer-events:all;-webkit-tap-highlight-color:transparent}.split-main-button,.split-menu-button{height:auto;display:flex;align-items:center;padding:var(--kritzel-split-button-padding, 8px);background-color:var(--kritzel-split-button-background-color, #ffffff);border-radius:var(--kritzel-split-button-border-radius, 12px);font-size:var(--kritzel-split-button-font-size, 14px)}.split-main-button:hover,.split-menu-button:hover{background-color:var(--kritzel-split-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.split-main-button:focus,.split-menu-button:focus{background-color:var(--kritzel-split-button-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.split-main-button{gap:var(--kritzel-split-button-gap, 4px)}.split-menu-button{border-left:none;justify-content:center}.split-divider{width:var(--kritzel-split-button-divider-width, 1px);height:24px;background-color:var(--kritzel-split-button-divider-background-color, hsl(0, 0%, 0%, 4.3%))}:disabled{pointer-events:none;opacity:0.5}"}},[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]}]);function h(){"undefined"!=typeof customElements&&["kritzel-split-button","kritzel-icon","kritzel-menu","kritzel-menu-item","kritzel-portal"].forEach((t=>{switch(t){case"kritzel-split-button":customElements.get(s(t))||customElements.define(s(t),d);break;case"kritzel-icon":customElements.get(s(t))||a();break;case"kritzel-menu":customElements.get(s(t))||u();break;case"kritzel-menu-item":customElements.get(s(t))||r();break;case"kritzel-portal":customElements.get(s(t))||c()}}))}export{d as K,h as d}
@@ -0,0 +1 @@
1
+ import{O as t}from"./p-BAN5dnHX.js";import{a as i}from"./p-Cu9KYyoq.js";class s{static doPolygonsIntersect(t,i){const s=[t.bottomLeft,t.bottomRight,t.topRight,t.topLeft],h=[i.bottomLeft,i.bottomRight,i.topRight,i.topLeft];for(const t of s)if(this.isPointInPolygon(t,h))return!0;for(const t of h)if(this.isPointInPolygon(t,s))return!0;for(let t=0;t<s.length;t++){const i=s[t],n=s[(t+1)%s.length];for(let t=0;t<h.length;t++)if(this.intersectLines(i,n,h[t],h[(t+1)%h.length]))return!0}return!1}static isPointInPolygon(t,i){let s=!1;for(let h=0,n=i.length-1;h<i.length;n=h++){const e=i[h].x,r=i[h].y,o=i[n].y;r>t.y!=o>t.y&&t.x<(i[n].x-e)*(t.y-r)/(o-r)+e&&(s=!s)}return s}static intersectLines(t,i,s,h){const n=(i.x-t.x)*(h.y-s.y)-(i.y-t.y)*(h.x-s.x);if(0===n)return!1;const e=((s.x-t.x)*(h.y-s.y)-(s.y-t.y)*(h.x-s.x))/n,r=-((t.x-s.x)*(i.y-t.y)-(t.y-s.y)*(i.x-t.x))/n;return e>=0&&e<=1&&r>=0&&r<=1}static getLineIntersectionPoint(t,i,s,h){const n=(i.x-t.x)*(h.y-s.y)-(i.y-t.y)*(h.x-s.x);if(0===n)return null;const e=((s.x-t.x)*(h.y-s.y)-(s.y-t.y)*(h.x-s.x))/n,r=-((t.x-s.x)*(i.y-t.y)-(t.y-s.y)*(i.x-t.x))/n;return e>=0&&e<=1&&r>=0&&r<=1?{x:t.x+e*(i.x-t.x),y:t.y+e*(i.y-t.y)}:null}static getLinePolygonIntersection(t,i,s){const h=[s.topLeft,s.topRight,s.bottomRight,s.bottomLeft];let n=null,e=1/0;for(let s=0;s<h.length;s++){const r=this.getLineIntersectionPoint(t,i,h[s],h[(s+1)%h.length]);if(r){const i=Math.sqrt(Math.pow(r.x-t.x,2)+Math.pow(r.y-t.y,2));i<e&&(e=i,n=r)}}return n}static getEllipsePolygonApproximation(t,i,s,h,n=32,e=0){const r=[],o=Math.cos(e),a=Math.sin(e);for(let e=0;e<n;e++){const u=2*Math.PI*e/n,c=s*Math.cos(u),l=h*Math.sin(u);r.push({x:t+c*o-l*a,y:i+c*a+l*o})}return r}static getLinePointsArrayIntersection(t,i,s){let h=null,n=1/0;for(let e=0;e<s.length;e++){const r=this.getLineIntersectionPoint(t,i,s[e],s[(e+1)%s.length]);if(r){const i=Math.sqrt(Math.pow(r.x-t.x,2)+Math.pow(r.y-t.y,2));i<n&&(n=i,h=r)}}return h}static isPointInPolygonPoints(t,i){return this.isPointInPolygon(t,i)}}class h{__class__="KritzelBaseObject";_core;_elementRef;id;workspaceId;x;y;translateX;translateY;height;width;backgroundColor;borderColor;borderWidth=0;opacity=1;padding=0;scale;resizing=!1;rotation=0;markedForRemoval=!1;zIndex=0;userId;isVisible=!0;isSelected=!1;isHovered=!1;isMounted=!1;isEditable=!1;isInteractive=!1;isDebugInfoVisible=!1;get totalWidth(){return this.width+2*this.padding}get totalHeight(){return this.height+2*this.padding}set elementRef(t){this._elementRef=t}get elementRef(){return this._elementRef}get boundingBox(){return{x:this.translateX,y:this.translateY,z:this.scale,width:this.totalWidth/this.scale,height:this.totalHeight/this.scale}}get rotatedBoundingBox(){const t=this.rotatedPolygon,i=[t.topLeft.x,t.topRight.x,t.bottomRight.x,t.bottomLeft.x],s=[t.topLeft.y,t.topRight.y,t.bottomRight.y,t.bottomLeft.y],h=Math.min(...i),n=Math.max(...i),e=Math.min(...s),r=Math.max(...s);return{x:h,y:e,z:this.scale,width:n-h,height:r-e}}get rotatedPolygon(){const t=this.translateX+this.totalWidth/2/this.scale,i=this.translateY+this.totalHeight/2/this.scale,s=this.rotation,h=Math.cos(s),n=Math.sin(s),e=this.translateX,r=this.translateY,o=e+this.totalWidth/this.scale,a=r+this.totalHeight/this.scale,u=(s,e)=>({x:h*(s-t)-n*(e-i)+t,y:n*(s-t)+h*(e-i)+i});return{topLeft:u(e,r),topRight:u(o,r),bottomRight:u(o,a),bottomLeft:u(e,a)}}get minXRotated(){return Math.min(this.rotatedPolygon.topLeft.x,this.rotatedPolygon.topRight.x,this.rotatedPolygon.bottomRight.x,this.rotatedPolygon.bottomLeft.x)}get minYRotated(){return Math.min(this.rotatedPolygon.topLeft.y,this.rotatedPolygon.topRight.y,this.rotatedPolygon.bottomRight.y,this.rotatedPolygon.bottomLeft.y)}get maxXRotated(){return Math.max(this.rotatedPolygon.topLeft.x,this.rotatedPolygon.topRight.x,this.rotatedPolygon.bottomRight.x,this.rotatedPolygon.bottomLeft.x)}get maxYRotated(){return Math.max(this.rotatedPolygon.topLeft.y,this.rotatedPolygon.topRight.y,this.rotatedPolygon.bottomRight.y,this.rotatedPolygon.bottomLeft.y)}get transformationMatrix(){const t=1/this.scale;return`matrix(${t}, 0, 0, ${t}, ${this.translateX}, ${this.translateY})`}get rotationDegrees(){return this.rotation*(180/Math.PI)}get centerX(){return this.translateX+this.totalWidth/2/this.scale}get centerY(){return this.translateY+this.totalHeight/2/this.scale}constructor(){this.id=this.generateId()}static create(t){const i=new h;return i._core=t,i.zIndex=t.store.currentZIndex,i.workspaceId=t.store.state.activeWorkspace.id,i.userId=t.user?.id,i}mount(t){this.isMounted||(this.elementRef=t,this.isMounted=!0)}generateId(){return t.generateUUID()}isInViewport(){const t=this._core.store.state.scale;if(this.boundingBox.width*t*(this.boundingBox.height*t)<.5)return!1;const i=-this._core.store.state.translateX/this._core.store.state.scale,s=-this._core.store.state.translateY/this._core.store.state.scale;return this.rotatedBoundingBox.x<i+this._core.store.state.viewportWidth/this._core.store.state.scale&&this.rotatedBoundingBox.x+this.rotatedBoundingBox.width>i&&this.rotatedBoundingBox.y<s+this._core.store.state.viewportHeight/this._core.store.state.scale&&this.rotatedBoundingBox.y+this.rotatedBoundingBox.height>s}centerInViewport(){const{viewportWidth:t,viewportHeight:i,translateX:s,translateY:h,scale:n}=this._core.store.state,{x:e,y:r,width:o,height:a}=this.rotatedBoundingBox;this.updatePosition(this.translateX+((t/2-s)/n-(e+o/2)),this.translateY+((i/2-h)/n-(r+a/2)))}update(){this._core.store.objects.update(this)}move(t,i,s,h){const n=(i-h)/this._core.store.state.scale;this.translateX+=(t-s)/this._core.store.state.scale,this.translateY+=n,this._core.store.objects.update(this)}resize(t,i,s,h){s<=1||h<=1||(this.width=s,this.height=h,this.translateX=t,this.translateY=i,this._core.store.objects.update(this),this._core.anchorManager.updateAnchorsForObject(this.id))}rotate(t){this.rotation=t,this._core.store.objects.update(this)}clone(){const t=Object.create(Object.getPrototypeOf(this));return Object.assign(t,this),t.id=this.id,t}copy(){const t=Object.create(Object.getPrototypeOf(this));return Object.assign(t,this),t.id=this.generateId(),t.isMounted=!1,t}serialize(){const{_core:t,_elementRef:i,element:s,totalWidth:h,totalHeight:n,...e}=this,r=structuredClone(e);return s&&"object"==typeof s&&"nodeType"in s&&1===s.nodeType&&(r.element=s.cloneNode(!0)),r}deserialize(t){return Object.assign(this,t),this}adoptTransientStateFrom(t){}isClass(t){return this.__class__===t}edit(t){}onAfterUpdate(t){}hitTest(t,i){return!0}hitTestPolygon(t){return s.doPolygonsIntersect(this.rotatedPolygon,t)}updatePosition(t,i){this.translateX=t,this.translateY=i,this._core.store.objects.update(this)}}class n{static average(t,i){return(t+i)/2}static degreesToRadians(t){return t*(Math.PI/180)}}var e,r={},o=(e||(e=1,function(t){Object.defineProperties(t,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const{PI:i}=Math,s=i+1e-4,h=[1,1];function n(t,i,s,h=t=>t){return t*h(.5-i*(.5-s))}const{min:e}=Math;function r(t,i,s){let h=e(1,i/s);return e(1,t+(e(1,1-h)-t)*(.275*h))}function o(t,i){return[t[0]+i[0],t[1]+i[1]]}function a(t,i,s){return t[0]=i[0]+s[0],t[1]=i[1]+s[1],t}function u(t,i){return[t[0]-i[0],t[1]-i[1]]}function c(t,i,s){return t[0]=i[0]-s[0],t[1]=i[1]-s[1],t}function l(t,i){return[t[0]*i,t[1]*i]}function f(t,i,s){return t[0]=i[0]*s,t[1]=i[1]*s,t}function d(t){return[t[1],-t[0]]}function M(t,i){let s=i[0];return t[0]=i[1],t[1]=-s,t}function g(t,i){return t[0]*i[0]+t[1]*i[1]}function m(t,i){return t[0]===i[0]&&t[1]===i[1]}function p(t,i){let s=t[0]-i[0],h=t[1]-i[1];return s*s+h*h}function x(t){return function(t,i){return[t[0]/i,t[1]/i]}(t,function(t){return Math.hypot(t[0],t[1])}(t))}function y(t,i){return Math.hypot(t[1]-i[1],t[0]-i[0])}function v(t,i,s){let h=Math.sin(s),n=Math.cos(s),e=t[0]-i[0],r=t[1]-i[1];return[e*n-r*h+i[0],e*h+r*n+i[1]]}function P(t,i,s,h){let n=Math.sin(h),e=Math.cos(h),r=i[0]-s[0],o=i[1]-s[1],a=r*n+o*e;return t[0]=r*e-o*n+s[0],t[1]=a+s[1],t}function $(t,i,s){return o(t,l(u(i,t),s))}function b(t,i,s,h){let n=s[1]-i[1];return t[0]=i[0]+(s[0]-i[0])*h,t[1]=i[1]+n*h,t}function w(t,i,s){return o(t,l(i,s))}const L=[0,0],I=[0,0],X=[0,0];function Y(t,i){let h=w(t,x(d(u(t,o(t,[1,1])))),-i),n=[],e=1/13;for(let i=e;i<=1;i+=e)n.push(v(h,t,2*s*i));return n}function _(t,i,h){let n=[],e=1/h;for(let h=e;h<=1;h+=e)n.push(v(i,t,s*h));return n}function z(t,i,s){let h=u(i,s),n=l(h,.5),e=l(h,.51);return[u(t,n),u(t,e),o(t,e),o(t,n)]}function k(t,i,h,n){let e=[],r=w(t,i,h),o=1/n;for(let i=o;i<1;i+=o)e.push(v(r,t,3*s*i));return e}function A(t,i,s){return[o(t,l(i,s)),o(t,l(i,.99*s)),u(t,l(i,.99*s)),u(t,l(i,s))]}function j(t,i,s){return!1===t||void 0===t?0:!0===t?Math.max(i,s):t}function R(t,i={}){let{size:h=16,smoothing:e=.5,thinning:l=.5,simulatePressure:m=!0,easing:x=t=>t,start:y={},end:v={},last:$=!1}=i,{cap:w=!0,easing:R=t=>t*(2-t)}=y,{cap:B=!0,easing:T=t=>--t*t*t+1}=v;if(0===t.length||h<=0)return[];let S,C=t[t.length-1].runningLength,O=j(y.taper,h,C),D=j(v.taper,h,C),V=(h*e)**2,W=[],F=[],H=function(t,i,s){return t.slice(0,10).reduce(((t,h)=>{let n=h.pressure;return i&&(n=r(t,h.distance,s)),(t+n)/2}),t[0].pressure)}(t,m,h),K=n(h,l,t[t.length-1].pressure,x),E=t[0].vector,Q=t[0].point,U=Q,q=Q,N=U,Z=!1;for(let i=0;i<t.length;i++){let{pressure:e}=t[i],{point:d,vector:y,distance:v,runningLength:$}=t[i],w=i===t.length-1;if(!w&&C-$<3)continue;l?(m&&(e=r(H,v,h)),K=n(h,l,e,x)):K=h/2,void 0===S&&(S=K);let Y=$<O?R($/O):1,_=C-$<D?T((C-$)/D):1;K=Math.max(.01,K*Math.min(Y,_));let z=(w?t[i]:t[i+1]).vector,k=w?1:g(y,z),A=null!==k&&k<0;if(g(y,E)<0&&!Z||A){M(L,E),f(L,L,K);for(let t=0;t<=1;t+=.07692307692307693)c(I,d,L),P(I,I,d,s*t),q=[I[0],I[1]],W.push(q),a(X,d,L),P(X,X,d,s*-t),N=[X[0],X[1]],F.push(N);Q=q,U=N,A&&(Z=!0)}else Z=!1,w?(M(L,y),f(L,L,K),W.push(u(d,L)),F.push(o(d,L))):(b(L,z,y,k),M(L,L),f(L,L,K),c(I,d,L),q=[I[0],I[1]],(i<=1||p(Q,q)>V)&&(W.push(q),Q=q),a(X,d,L),N=[X[0],X[1]],(i<=1||p(U,N)>V)&&(F.push(N),U=N),H=e,E=y)}let G=[t[0].point[0],t[0].point[1]],J=t.length>1?[t[t.length-1].point[0],t[t.length-1].point[1]]:o(t[0].point,[1,1]),tt=[],it=[];if(1===t.length){if(!O&&!D||$)return Y(G,S||K)}else{O||D&&1===t.length||(w?tt.push(..._(G,F[0],13)):tt.push(...z(G,W[0],F[0])));let i=d(function(t){return[-t[0],-t[1]]}(t[t.length-1].vector));D||O&&1===t.length?it.push(J):B?it.push(...k(J,i,K,29)):it.push(...A(J,i,K))}return W.concat(it,F.reverse(),tt)}const B=[0,0];function T(t){return null!=t&&t>=0}function S(t,i={}){let{streamline:s=.5,size:n=16,last:e=!1}=i;if(0===t.length)return[];let r=.15+.85*(1-s),a=Array.isArray(t[0])?t:t.map((({x:t,y:i,pressure:s=.5})=>[t,i,s]));if(2===a.length){let t=a[1];a=a.slice(0,-1);for(let i=1;i<5;i++)a.push($(a[0],t,i/4))}1===a.length&&(a=[...a,[...o(a[0],h),...a[0].slice(2)]]);let u=[{point:[a[0][0],a[0][1]],pressure:T(a[0][2])?a[0][2]:.25,vector:[...h],distance:0,runningLength:0}],l=!1,f=0,d=u[0],M=a.length-1;for(let t=1;t<a.length;t++){let i=e&&t===M?[a[t][0],a[t][1]]:$(d.point,a[t],r);if(m(d.point,i))continue;let s=y(i,d.point);if(f+=s,t<M&&!l){if(f<n)continue;l=!0}c(B,d.point,i),d={point:i,pressure:T(a[t][2])?a[t][2]:.5,vector:x(B),distance:s,runningLength:f},u.push(d)}return u[0].vector=u[1]?.vector||[0,0],u}function C(t,i={}){return R(S(t,i),i)}t.default=C,t.getStroke=C,t.getStrokeOutlinePoints=R,t.getStrokePoints=S}(r)),r);class a extends h{__class__="KritzelPath";points;d;stroke={light:"none",dark:"none"};strokeWidth;lineSlack=.5;fill;x=0;y=0;height=0;width=0;scale=1;options;isVisible=!0;isDebugInfoVisible=!0;isCompleted=!1;_adjustedPoints=null;get viewBox(){return`${this.x} ${this.y} ${this.width} ${this.height}`}constructor(t){super(),this.options=t,this.points=t?.points??[],this.translateX=t?.translateX??0,this.translateY=t?.translateY??0,this.rotation=n.degreesToRadians(t?.rotation??0),this.scale=t?.scale??1,this.strokeWidth=t?.strokeWidth??8,this.fill=t?.fill??{light:"#000000",dark:"#ffffff"},this.d=this.generateSvgPath(),this.updateDimensions()}static create(t,i){const s=new a;return s._core=t,s.id=s.generateId(),s.workspaceId=t.store.state.activeWorkspace.id,s.userId=t.user?.id,s.options=i,s.points=i?.points??[],s.translateX=i?.translateX??0,s.translateY=i?.translateY??0,s.rotation=n.degreesToRadians(i?.rotation??0),s.scale=i?.scale??1,s.strokeWidth=i?.strokeWidth??8,s.fill=i?.fill??{light:"#000000",dark:"#ffffff"},s.opacity=i?.opacity??1,s.zIndex=t.store.currentZIndex,s.d=s.generateSvgPath(),s.updateDimensions(),s}copy(){const t=super.copy();return this.points&&(t.points=this.points.map((t=>[...t]))),t}resize(t,i,s,h){if(s<=1||h<=1)return;const n=s/this.width,e=h/this.height;if(this.width=s,this.height=h,1===this.points.length){const t=this.points[0],i=Math.max(0,s-this.strokeWidth)/n,r=Math.max(0,h-this.strokeWidth)/e;this.points.push([t[0]+i,t[1]+r])}this.points=this.points.map((([t,i])=>[t*n,i*e])),this.d=this.generateSvgPath(),this.width=Math.max(...this.points.map((t=>t[0])))-Math.min(...this.points.map((t=>t[0])))+this.strokeWidth,this.height=Math.max(...this.points.map((t=>t[1])))-Math.min(...this.points.map((t=>t[1])))+this.strokeWidth,this.x=Math.min(...this.points.map((t=>t[0])))-this.strokeWidth/2,this.y=Math.min(...this.points.map((t=>t[1])))-this.strokeWidth/2,null!==t&&(this.translateX=t),null!==i&&(this.translateY=i),this._adjustedPoints=null,this._core.store.objects.update(this)}rotate(t){this.rotation=t,this._adjustedPoints=null,this._core.store.objects.update(this)}move(t,i,s,h){const n=(i-h)/this._core.store.state.scale;this.translateX+=(t-s)/this._core.store.state.scale,this.translateY+=n,this._adjustedPoints=null,this._core.store.objects.update(this)}hitTest(t,i){const s=this.strokeWidth/this.scale/2;if(null===this._adjustedPoints&&(this._adjustedPoints=this.computeAdjustedPoints()),1===this._adjustedPoints.length){const h=this._adjustedPoints[0];return this.pointToLineSegmentDistance(t,i,h[0],h[1],h[0],h[1])<=s}for(let h=0;h<this._adjustedPoints.length-1;h++){const n=this._adjustedPoints[h],e=this._adjustedPoints[h+1];if(this.pointToLineSegmentDistance(t,i,n[0],n[1],e[0],e[1])<=s)return!0}return!1}hitTestPolygon(t){const i=this.strokeWidth/this.scale/2;null===this._adjustedPoints&&(this._adjustedPoints=this.computeAdjustedPoints());const h=[{x:t.bottomLeft.x,y:t.bottomLeft.y},{x:t.bottomRight.x,y:t.bottomRight.y},{x:t.topRight.x,y:t.topRight.y},{x:t.topLeft.x,y:t.topLeft.y}];for(const[t,i]of this._adjustedPoints)if(s.isPointInPolygon({x:t,y:i},h))return!0;for(const t of h)if(this.hitTest(t.x,t.y))return!0;for(let t=0;t<this._adjustedPoints.length-1;t++){const i={x:this._adjustedPoints[t][0],y:this._adjustedPoints[t][1]},n={x:this._adjustedPoints[t+1][0],y:this._adjustedPoints[t+1][1]};for(let t=0;t<h.length;t++)if(s.intersectLines(i,n,h[t],h[(t+1)%h.length]))return!0}for(let t=0;t<this._adjustedPoints.length-1;t++){const s=this._adjustedPoints[t],n=this._adjustedPoints[t+1];for(let t=0;t<h.length;t++){const e=h[t],r=h[(t+1)%h.length],o=this.pointToLineSegmentDistance(e.x,e.y,s[0],s[1],n[0],n[1]),a=this.pointToLineSegmentDistance(r.x,r.y,s[0],s[1],n[0],n[1]),u=this.pointToLineSegmentDistance(s[0],s[1],e.x,e.y,r.x,r.y),c=this.pointToLineSegmentDistance(n[0],n[1],e.x,e.y,r.x,r.y);if(Math.min(o,a,u,c)<=i)return!0}}return!1}updatePosition(t,i){this.translateX=t,this.translateY=i,this._adjustedPoints=null,this._core.store.objects.update(this)}onAfterUpdate(t){t.includes("strokeWidth")&&(this.d=this.generateSvgPath(),this.updateBoundingBox(),this._adjustedPoints=null)}computeAdjustedPoints(){if(!this.points?.length)return[];const t=this.rotation,i=Math.cos(t),s=Math.sin(t),h=this.points.map((t=>t[0])),n=this.points.map((t=>t[1])),e={x:(Math.min(...h)+Math.max(...h))/2,y:(Math.min(...n)+Math.max(...n))/2},{x:r,y:o}=e;return this.points.map((([t,h])=>{const n=t-r,e=h-o;return[r+n*i-e*s,o+n*s+e*i]})).map((([t,i])=>[Math.abs(t-this.x)/this.scale+this.translateX,Math.abs(i-this.y)/this.scale+this.translateY]))}pointToLineSegmentDistance(t,i,s,h,n,e){const r=n-s,o=e-h,a=r*r+o*o;let u,c,l=-1;0!==a&&(l=((t-s)*r+(i-h)*o)/a),l<0?(u=s,c=h):l>1?(u=n,c=e):(u=s+l*r,c=h+l*o);const f=t-u,d=i-c;return Math.sqrt(f*f+d*d)}updateDimensions(){const t=Math.min(...this.points.map((t=>t[0])))-this.strokeWidth/2,i=Math.min(...this.points.map((t=>t[1])))-this.strokeWidth/2,s=Math.max(...this.points.map((t=>t[0])))+this.strokeWidth/2,h=Math.max(...this.points.map((t=>t[1])))+this.strokeWidth/2;this.width=s-t+this.lineSlack,this.height=h-i+this.lineSlack,this.x=t,this.y=i,this.translateX=(this.x+this.translateX)/this.scale,this.translateY=(this.y+this.translateY)/this.scale}updateBoundingBox(){const t=Math.min(...this.points.map((t=>t[0])))-this.strokeWidth/2,i=Math.min(...this.points.map((t=>t[1])))-this.strokeWidth/2,s=Math.max(...this.points.map((t=>t[0])))+this.strokeWidth/2,h=Math.max(...this.points.map((t=>t[1])))+this.strokeWidth/2;this.width=s-t+this.lineSlack,this.height=h-i+this.lineSlack,this.x=t,this.y=i}generateSvgPath(){const t=this.getStrokeFromPoints(this.points,this.strokeWidth);return this.getSvgPathFromStroke(t)}getStrokeFromPoints(t,i){return o.getStroke(t,{size:i,thinning:.5,smoothing:.5,streamline:.5,easing:t=>t,simulatePressure:!0,last:!0,start:{cap:!0,taper:0,easing:t=>t},end:{cap:!0,taper:0,easing:t=>t}})}getSvgPathFromStroke(t,i=!0){const s=t.length;if(s<4)return"";let h=t[0],e=t[1];const r=t[2];let o=`M${h[0].toFixed(2)},${h[1].toFixed(2)} Q${e[0].toFixed(2)},${e[1].toFixed(2)} ${n.average(e[0],r[0]).toFixed(2)},${n.average(e[1],r[1]).toFixed(2)} T`;for(let i=2,r=s-1;i<r;i++)h=t[i],e=t[i+1],o+=`${n.average(h[0],e[0]).toFixed(2)},${n.average(h[1],e[1]).toFixed(2)} `;return i&&(o+="Z"),o}isLowRes(){if(!this._core)return!1;const t=this._core.store.state.scale;return this.boundingBox.width*t*(this.boundingBox.height*t)<500}getClipPoint(t){const i=this.centerX,s=this.centerY,h=this.strokeWidth/this.scale/2;if(null===this._adjustedPoints&&(this._adjustedPoints=this.computeAdjustedPoints()),this._adjustedPoints.length<1)return null;let n=!0;for(let e=1;e<=32;e++){const r=e/32,o=t.x+(i-t.x)*r,a=t.y+(s-t.y)*r;let u=1/0;if(1===this._adjustedPoints.length){const t=this._adjustedPoints[0],i=o-t[0],s=a-t[1];u=Math.sqrt(i*i+s*s)}else for(let t=0;t<this._adjustedPoints.length-1;t++){const i=this._adjustedPoints[t],s=this._adjustedPoints[t+1],h=this.pointToLineSegmentDistance(o,a,i[0],i[1],s[0],s[1]);h<u&&(u=h)}const c=u<=h;if(n&&c){let n=(e-1)/32,o=r;for(let e=0;e<8;e++){const e=(n+o)/2,r=t.x+(i-t.x)*e,a=t.y+(s-t.y)*e;let u=1/0;if(1===this._adjustedPoints.length){const t=this._adjustedPoints[0],i=r-t[0],s=a-t[1];u=Math.sqrt(i*i+s*s)}else for(let t=0;t<this._adjustedPoints.length-1;t++){const i=this._adjustedPoints[t],s=this._adjustedPoints[t+1],h=this.pointToLineSegmentDistance(r,a,i[0],i[1],s[0],s[1]);h<u&&(u=h)}u<=h?o=e:n=e}const a=(n+o)/2;return{x:t.x+(i-t.x)*a,y:t.y+(s-t.y)*a}}n=!c}return null}}class u extends h{__class__="KritzelLine";startX;startY;endX;endY;controlX;controlY;stroke;strokeWidth;scale=1;options;startAnchor;endAnchor;arrows;isVisible=!0;isDebugInfoVisible=!0;isCompleted=!1;_adjustedPoints=null;_clipInfo=null;get d(){return void 0!==this.controlX&&void 0!==this.controlY?`M ${this.startX} ${this.startY} Q ${this.controlX} ${this.controlY} ${this.endX} ${this.endY}`:`M ${this.startX} ${this.startY} L ${this.endX} ${this.endY}`}get viewBox(){return`${this.x} ${this.y} ${this.width} ${this.height}`}constructor(t){super(),this.options=t,this.startX=t?.startX??0,this.startY=t?.startY??0,this.endX=t?.endX??0,this.endY=t?.endY??0,this.controlX=t?.controlX,this.controlY=t?.controlY,this.translateX=t?.translateX??0,this.translateY=t?.translateY??0,this.rotation=n.degreesToRadians(t?.rotation??0),this.scale=t?.scale??1,this.strokeWidth=t?.strokeWidth??4,this.stroke=t?.stroke??{light:"#000000",dark:"#ffffff"},this.startAnchor=t?.startAnchor,this.endAnchor=t?.endAnchor,this.arrows=t?.arrows,this.updateDimensions()}static create(t,i){const s=new u;return s._core=t,s.id=s.generateId(),s.workspaceId=t.store.state.activeWorkspace.id,s.userId=t.user?.id,s.options=i,s.startX=i?.startX??0,s.startY=i?.startY??0,s.endX=i?.endX??0,s.endY=i?.endY??0,s.controlX=i?.controlX,s.controlY=i?.controlY,s.translateX=i?.translateX??0,s.translateY=i?.translateY??0,s.rotation=n.degreesToRadians(i?.rotation??0),s.scale=i?.scale??1,s.strokeWidth=i?.strokeWidth??4,s.stroke=i?.stroke??{light:"#000000",dark:"#ffffff"},s.opacity=i?.opacity??1,s.startAnchor=i?.startAnchor,s.endAnchor=i?.endAnchor,s.arrows=i?.arrows,s.zIndex=t.store.currentZIndex,s.updateDimensions(),s}resize(t,i,s,h){if(s<=1||h<=1)return;const n=s/this.width,e=h/this.height;this.startX=this.startX*n,this.startY=this.startY*e,this.endX=this.endX*n,this.endY=this.endY*e,void 0!==this.controlX&&void 0!==this.controlY&&(this.controlX=this.controlX*n,this.controlY=this.controlY*e);const{minX:r,minY:o,maxX:a,maxY:u}=this.calculateBoundingBox();this.width=a-r,this.height=u-o,this.x=r,this.y=o,this.translateX=t,this.translateY=i,this._adjustedPoints=null,this._clipInfo=null,this._core.store.objects.update(this),this._core.anchorManager.updateAnchorsForObject(this.id),this.startAnchor&&this._core.anchorManager.updateAnchorsForObject(this.startAnchor.objectId),this.endAnchor&&this._core.anchorManager.updateAnchorsForObject(this.endAnchor.objectId)}rotate(t){this.rotation=t,this._adjustedPoints=null,this._clipInfo=null,this._core.store.objects.update(this)}move(t,i,s,h){const n=(i-h)/this._core.store.state.scale;this.translateX+=(t-s)/this._core.store.state.scale,this.translateY+=n,this.startAnchor&&this._core.anchorManager.updateAnchorsForObject(this.startAnchor.objectId),this.endAnchor&&this._core.anchorManager.updateAnchorsForObject(this.endAnchor.objectId),this._adjustedPoints=null,this._clipInfo=null,this._core.store.objects.update(this)}hitTest(t,i){const s=Math.max(this.strokeWidth,20)/this.scale/2;if(null===this._adjustedPoints&&(this._adjustedPoints=this.computeAdjustedPoints()),void 0!==this.controlX&&void 0!==this.controlY){const h=this.getClipInfo();return this.pointToBezierDistance(t,i,h.start?.t??0,h.end?.t??1)<=s}const h=this.getClipInfo(),n=h.start?[h.start.x,h.start.y]:this._adjustedPoints[0],e=h.end?[h.end.x,h.end.y]:this._adjustedPoints[1];return this.pointToLineSegmentDistance(t,i,n[0],n[1],e[0],e[1])<=s}hitTestPolygon(t){const i=this.strokeWidth/this.scale/2;null===this._adjustedPoints&&(this._adjustedPoints=this.computeAdjustedPoints());const h=this.getClipInfo(),n=[{x:t.bottomLeft.x,y:t.bottomLeft.y},{x:t.bottomRight.x,y:t.bottomRight.y},{x:t.topRight.x,y:t.topRight.y},{x:t.topLeft.x,y:t.topLeft.y}],e=h.start?[h.start.x,h.start.y]:this._adjustedPoints[0],r=h.end?[h.end.x,h.end.y]:this._adjustedPoints[1],o=[e,r];for(const[t,i]of o)if(s.isPointInPolygon({x:t,y:i},n))return!0;for(const t of n)if(this.hitTest(t.x,t.y))return!0;if(void 0!==this.controlX&&void 0!==this.controlY){const t=this._adjustedPoints[0],e=this._adjustedPoints[1],r=this.computeAdjustedControlPoint(),o=h.start?.t??0,a=h.end?.t??1,u=20;for(let h=0;h<=u;h++){const c=o+h/u*(a-o),l=1-c,f=l*l*t[0]+2*l*c*r[0]+c*c*e[0],d=l*l*t[1]+2*l*c*r[1]+c*c*e[1];if(s.isPointInPolygon({x:f,y:d},n))return!0;for(let t=0;t<n.length;t++){const s=n[t],h=n[(t+1)%n.length];if(this.pointToLineSegmentDistance(f,d,s.x,s.y,h.x,h.y)<=i)return!0}}return!1}const a={x:e[0],y:e[1]},u={x:r[0],y:r[1]};for(let t=0;t<n.length;t++){const h=n[t],e=n[(t+1)%n.length];if(s.intersectLines(a,u,h,e))return!0;const r=this.pointToLineSegmentDistance(h.x,h.y,a.x,a.y,u.x,u.y),o=this.pointToLineSegmentDistance(e.x,e.y,a.x,a.y,u.x,u.y),c=this.pointToLineSegmentDistance(a.x,a.y,h.x,h.y,e.x,e.y),l=this.pointToLineSegmentDistance(u.x,u.y,h.x,h.y,e.x,e.y);if(Math.min(r,o,c,l)<=i)return!0}return!1}updatePosition(t,i){this.translateX=t,this.translateY=i,this._adjustedPoints=null,this._clipInfo=null,this._core.store.objects.update(this)}updateEndpoint(t,i,s){"start"===t?(this.startX=i,this.startY=s):(this.endX=i,this.endY=s);const h=this.width,n=this.height,{minX:e,minY:r,maxX:o,maxY:a}=this.calculateBoundingBox(),u=e-this.x,c=r-this.y,l=o-e,f=a-r,d=(l-h)/2,M=(f-n)/2;this.x=e,this.y=r,this.width=l,this.height=f;const g=Math.cos(this.rotation),m=Math.sin(this.rotation),p=u+d,x=c+M,y=p*m+x*g-M;this.translateX+=(p*g-x*m-d)/this.scale,this.translateY+=y/this.scale,this._adjustedPoints=null,this._clipInfo=null,this._core.store.objects.update(this)}updateControlPoint(t,i){this.controlX=t,this.controlY=i;const s=this.width,h=this.height,{minX:n,minY:e,maxX:r,maxY:o}=this.calculateBoundingBox(),a=n-this.x,u=e-this.y,c=r-n,l=o-e,f=(c-s)/2,d=(l-h)/2;this.x=n,this.y=e,this.width=c,this.height=l;const M=Math.cos(this.rotation),g=Math.sin(this.rotation),m=a+f,p=u+d,x=m*g+p*M-d;this.translateX+=(m*M-p*g-f)/this.scale,this.translateY+=x/this.scale,this._adjustedPoints=null,this._clipInfo=null,this._core.store.objects.update(this)}computeAdjustedPoints(){const t=[[this.startX,this.startY],[this.endX,this.endY]],i=this.rotation,s=Math.cos(i),h=Math.sin(i),n=t.map((t=>t[0])),e=t.map((t=>t[1])),r={x:(Math.min(...n)+Math.max(...n))/2,y:(Math.min(...e)+Math.max(...e))/2},{x:o,y:a}=r;return t.map((([t,i])=>{const n=t-o,e=i-a;return[o+n*s-e*h,a+n*h+e*s]})).map((([t,i])=>[(t-this.x)/this.scale+this.translateX,(i-this.y)/this.scale+this.translateY]))}pointToLineSegmentDistance(t,i,s,h,n,e){const r=n-s,o=e-h,a=r*r+o*o;let u,c,l=-1;0!==a&&(l=((t-s)*r+(i-h)*o)/a),l<0?(u=s,c=h):l>1?(u=n,c=e):(u=s+l*r,c=h+l*o);const f=t-u,d=i-c;return Math.sqrt(f*f+d*d)}pointToBezierDistance(t,i,s=0,h=1){null===this._adjustedPoints&&(this._adjustedPoints=this.computeAdjustedPoints());const n=this._adjustedPoints[0],e=this._adjustedPoints[1],r=this.computeAdjustedControlPoint();let o=1/0;for(let a=0;a<=20;a++){const u=s+a/20*(h-s),c=1-u,l=t-(c*c*n[0]+2*c*u*r[0]+u*u*e[0]),f=i-(c*c*n[1]+2*c*u*r[1]+u*u*e[1]),d=Math.sqrt(l*l+f*f);d<o&&(o=d)}return o}getClipInfo(){if(this._clipInfo)return this._clipInfo;const t=this.endAnchor,i={};if(this.startAnchor){const t=this._core.anchorManager.findAnchorTarget(this,"start");if(t){const s=this._core.anchorManager.computeAnchorClipInfo(this,"start",t);s&&(i.start={x:s.worldX,y:s.worldY,t:s.t})}}if(t){const t=this._core.anchorManager.findAnchorTarget(this,"end");if(t){const s=this._core.anchorManager.computeAnchorClipInfo(this,"end",t);s&&(i.end={x:s.worldX,y:s.worldY,t:s.t})}}return this._clipInfo=i,i}computeAdjustedControlPoint(){if(void 0===this.controlX||void 0===this.controlY)return[(this.startX+this.endX)/2,(this.startY+this.endY)/2];const t=this.rotation,i=Math.cos(t),s=Math.sin(t),h=[this.startX,this.endX],n=[this.startY,this.endY],e={x:(Math.min(...h)+Math.max(...h))/2,y:(Math.min(...n)+Math.max(...n))/2},{x:r,y:o}=e,a=this.controlX-r,u=this.controlY-o;return[(r+a*i-u*s-this.x)/this.scale+this.translateX,(o+a*s+u*i-this.y)/this.scale+this.translateY]}get rotatedPolygon(){const t=this.padding,{minX:i,minY:s,maxX:h,maxY:n}=u.calculateBoundingBox(this.startX,this.startY,this.endX,this.endY,this.controlX,this.controlY,this.strokeWidth),e=i-this.x+t,r=s-this.y+t,o=h-this.x+t,a=n-this.y+t,c={x:e,y:r},l={x:o,y:r},f={x:o,y:a},d={x:e,y:a},M=this.totalWidth/2,g=this.totalHeight/2,m=this.rotation,p=Math.cos(m),x=Math.sin(m),y=t=>({x:((t.x-M)*p-(t.y-g)*x+M)/this.scale+this.translateX,y:((t.x-M)*x+(t.y-g)*p+g)/this.scale+this.translateY});return{topLeft:y(c),topRight:y(l),bottomRight:y(f),bottomLeft:y(d)}}static calculateBoundingBox(t,i,s,h,n,e,r){let o=Math.min(t,s),a=Math.min(i,h),u=Math.max(t,s),c=Math.max(i,h);if(void 0!==n&&void 0!==e){const r=t-2*n+s;if(0!==r){const i=(t-n)/r;if(i>0&&i<1){const h=(1-i)*(1-i)*t+2*(1-i)*i*n+i*i*s;o=Math.min(o,h),u=Math.max(u,h)}}const l=i-2*e+h;if(0!==l){const t=(i-e)/l;if(t>0&&t<1){const s=(1-t)*(1-t)*i+2*(1-t)*t*e+t*t*h;a=Math.min(a,s),c=Math.max(c,s)}}}const l=r/2;return{minX:o-l,minY:a-l,maxX:u+l,maxY:c+l}}calculateBoundingBox(){return u.calculateBoundingBox(this.startX,this.startY,this.endX,this.endY,this.controlX,this.controlY,this.strokeWidth)}updateDimensions(){const{minX:t,minY:i,maxX:s,maxY:h}=this.calculateBoundingBox();this.width=s-t,this.height=h-i,this.x=t,this.y=i,this.translateX=(this.x+this.translateX)/this.scale,this.translateY=(this.y+this.translateY)/this.scale}get startMarkerId(){return`arrow-start-${this.id}`}get endMarkerId(){return`arrow-end-${this.id}`}getArrowSize(t){const i="start"===t?this.arrows?.start:this.arrows?.end;return i?.size??3*this.strokeWidth}getArrowFill(t){const s="start"===t?this.arrows?.start:this.arrows?.end;return i.resolveThemeColor(s?.fill??this.stroke)}getArrowPath(t="triangle"){switch(t){case"triangle":default:return"M 0 0 L 10 5 L 0 10 z";case"open":return"M 0 0 L 10 5 L 0 10";case"diamond":return"M 0 5 L 5 0 L 10 5 L 5 10 z";case"circle":return"M 5,0 A 5,5 0 1,1 5,10 A 5,5 0 1,1 5,0"}}get hasStartArrow(){return!0===this.arrows?.start?.enabled}get hasEndArrow(){return!0===this.arrows?.end?.enabled}}export{h as K,a,u as b,s as c,n as d}
@@ -0,0 +1 @@
1
+ import{p as e,H as t,h as r,d as s,t as a}from"./p-B43upypT.js";import{d as i}from"./p-NuLP1xHe.js";import{d as c}from"./p-Jn6TNdfe.js";import{d as l}from"./p-CHrSFOSI.js";const o=e(class extends t{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow()}get host(){return this}user;avatarSize=40;terms={};dialogRef;handleAvatarClick=e=>{e.stopPropagation(),this.dialogRef?.open()};render(){return r(s,{key:"7e45048e532db84347e2531de2df19f5537d62ca"},r("kritzel-avatar",{key:"5a67d1dbae041e16cdaeaf4bc678b6b00c56f442",user:this.user,size:this.avatarSize,onClick:this.handleAvatarClick}),r("kritzel-current-user-dialog",{key:"8e35219e282811b8bbafb058c02c8c0474574009",ref:e=>this.dialogRef=e,user:this.user,terms:this.terms}))}static get style(){return":host{display:inline-flex;align-items:center;justify-content:center;-webkit-tap-highlight-color:transparent}kritzel-avatar{cursor:var(--kritzel-global-pointer-cursor, pointer);border-radius:50%}"}},[513,"kritzel-current-user",{user:[16],avatarSize:[2,"avatar-size"],terms:[16]}]);function n(){"undefined"!=typeof customElements&&["kritzel-current-user","kritzel-avatar","kritzel-current-user-dialog","kritzel-dialog"].forEach((e=>{switch(e){case"kritzel-current-user":customElements.get(a(e))||customElements.define(a(e),o);break;case"kritzel-avatar":customElements.get(a(e))||i();break;case"kritzel-current-user-dialog":customElements.get(a(e))||c();break;case"kritzel-dialog":customElements.get(a(e))||l()}}))}export{o as K,n as d}
@@ -0,0 +1 @@
1
+ import{p as e,H as o,c as s,h as i,d as t,t as r}from"./p-B43upypT.js";import{d as a}from"./p-CHrSFOSI.js";import{d as c}from"./p-CdR76C4L.js";import{d as l}from"./p-IpoC5EEY.js";const n=e(class extends o{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.toggleIsPublic=s(this,"toggleIsPublic"),this.dialogClosed=s(this,"dialogClosed")}get host(){return this}isPublic=!1;workspaceId=void 0;terms={};onIsPublicChange(e){this.internalIsPublic=e}isDialogOpen=!1;internalIsPublic=!1;copySuccess=!1;toggleIsPublic;dialogClosed;async open(){this.internalIsPublic=this.isPublic,this.isDialogOpen=!0}async close(){this.isDialogOpen=!1}handleToggleChange=e=>{const o=e.detail;this.internalIsPublic=o,this.toggleIsPublic.emit(o)};getShareUrl(){if(!this.workspaceId)return"";const e=new URL(this.workspaceId,window.location.origin);return e.searchParams.set("share","true"),e.toString()}handleCopyUrl=async()=>{const e=this.getShareUrl();if(e)try{await navigator.clipboard.writeText(e),this.copySuccess=!0,setTimeout((()=>{this.copySuccess=!1}),2e3)}catch{const o=document.createElement("textarea");o.value=e,document.body.appendChild(o),o.select(),document.execCommand("copy"),document.body.removeChild(o),this.copySuccess=!0,setTimeout((()=>{this.copySuccess=!1}),2e3)}};closeDialog=()=>{this.isDialogOpen=!1,this.dialogClosed.emit()};render(){return i(t,{key:"b364f891659d54623b5472fe4cd5a9a85bc2fafa"},i("kritzel-dialog",{key:"7059a3ede84bc67f7661efc8c84eae9b0c401d43",dialogTitle:this.terms["share.dialogTitle"]??"Share Workspace",size:"small",isOpen:this.isDialogOpen,onDialogClose:this.closeDialog,contained:!0},i("div",{key:"1b0e7a9b5483a53f91e874075c0edb116b7474d6",class:"share-content"},i("div",{key:"1568dc99224f0f7e2a370c22327dc313515e7d0f",class:"share-section"},i("div",{key:"a0032f6c870a448e817b013a715aadca1c455bb3",class:"share-row"},i("div",{key:"3bd74cbebc122133354465163f9945dd207245b5",class:"share-label-group"},i("label",{key:"0919fc24e5637c908c53b6914983833b6600e846",class:"share-label"},this.terms["share.linkSharing.label"]??"Link sharing"),i("p",{key:"f87c9eae7112d284d7d917fae7c9c05fa6feb0ed",class:"share-description"},this.internalIsPublic?this.terms["share.linkSharing.enabledDescription"]??"Anyone with the link can access this workspace.":this.terms["share.linkSharing.disabledDescription"]??"Link sharing is disabled. Only you can access this workspace.")),i("kritzel-slide-toggle",{key:"81ccfb76255d40da954cfdcbc486bdbb7dc4bff4",checked:this.internalIsPublic,onCheckedChange:this.handleToggleChange,label:this.terms["share.linkSharing.toggleLabel"]??"Enable link sharing"}))),this.internalIsPublic&&i("div",{key:"c72da3550416ebfef5c24690591b212df70cb4db",class:"share-section"},i("div",{key:"c3dd4bce7d57e60d09989bff6dd1d828a613b425",class:"share-url-container"},i("input",{key:"67aab8a65f54ea67392a9874e949d6d1af519e0f",type:"text",class:"share-url-input",value:this.getShareUrl(),readOnly:!0,onClick:e=>e.target.select()}),i("button",{key:"c31d48fe67cdd12aa517e20bac54ac74c05abd04",class:{"copy-button":!0,"copy-success":this.copySuccess},onClick:this.handleCopyUrl,title:this.copySuccess?this.terms["share.copyLink.copied"]??"Copied!":this.terms["share.copyLink.title"]??"Copy link"},i("kritzel-icon",{key:"08ed01ed081e955e28eaed577438cd0008eaacf4",name:this.copySuccess?"check":"copy",size:18})))))))}static get watchers(){return{isPublic:[{onIsPublicChange:0}]}}static get style(){return":host{display:contents}kritzel-dialog{--kritzel-dialog-width-small:420px}.share-content{display:flex;flex-direction:column;gap:20px}.share-section{display:flex;flex-direction:column;gap:8px}.share-section-revoke{padding-top:12px;border-top:1px solid var(--kritzel-share-dialog-border-color, #e5e5e5)}.share-row{display:flex;align-items:center;justify-content:space-between;gap:16px}.share-label-group{display:flex;flex-direction:column;gap:8px;flex:1}.share-label{font-size:14px;font-weight:600;color:var(--kritzel-share-dialog-label-color, #333333);margin:0}.share-description{font-size:12px;color:var(--kritzel-share-dialog-description-color, #666666);margin:0;line-height:1.4}.share-url-container{display:flex;align-items:center;gap:8px;background:var(--kritzel-share-dialog-input-background, #f5f5f5);border:1px solid var(--kritzel-share-dialog-input-border-color, #e0e0e0);border-radius:6px;padding:4px 4px 4px 12px}.share-url-input{flex:1;border:none;background:transparent;font-size:13px;color:var(--kritzel-share-dialog-input-text-color, #333333);outline:none;min-width:0;padding:8px 0}.share-url-input:focus{outline:none}.share-url-input::selection{background:var(--kritzel-share-dialog-selection-color, #cce5ff)}.copy-button{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;border-radius:4px;background:var(--kritzel-share-dialog-copy-button-background, #ffffff);color:var(--kritzel-share-dialog-copy-button-color, #666666);cursor:pointer;transition:all 0.15s ease;flex-shrink:0}.copy-button:hover{background:var(--kritzel-share-dialog-copy-button-hover-background, #e8e8e8);color:var(--kritzel-share-dialog-copy-button-hover-color, #333333)}.copy-button.copy-success{background:var(--kritzel-share-dialog-copy-success-background, #d4edda);color:var(--kritzel-share-dialog-copy-success-color, #28a745)}.revoke-button{align-self:flex-start;padding:8px 16px;border:1px solid var(--kritzel-share-dialog-revoke-button-border-color, #dc3545);border-radius:6px;background:transparent;color:var(--kritzel-share-dialog-revoke-button-color, #dc3545);font-size:13px;font-weight:500;cursor:pointer;transition:all 0.15s ease}.revoke-button:hover{background:var(--kritzel-share-dialog-revoke-button-hover-background, #dc3545);color:var(--kritzel-share-dialog-revoke-button-hover-color, #ffffff)}kritzel-dropdown{--kritzel-dropdown-trigger-padding:8px 12px;--kritzel-dropdown-trigger-font-size:13px}"}},[513,"kritzel-share-dialog",{isPublic:[4,"is-public"],workspaceId:[1,"workspace-id"],terms:[16],isDialogOpen:[32],internalIsPublic:[32],copySuccess:[32],open:[64],close:[64]},void 0,{isPublic:[{onIsPublicChange:0}]}]);function d(){"undefined"!=typeof customElements&&["kritzel-share-dialog","kritzel-dialog","kritzel-icon","kritzel-slide-toggle"].forEach((e=>{switch(e){case"kritzel-share-dialog":customElements.get(r(e))||customElements.define(r(e),n);break;case"kritzel-dialog":customElements.get(r(e))||a();break;case"kritzel-icon":customElements.get(r(e))||c();break;case"kritzel-slide-toggle":customElements.get(r(e))||l()}}))}export{n as K,d}