@kritzel/editor 0.4.31

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 (298) hide show
  1. package/LICENSE.md +50 -0
  2. package/README.md +5 -0
  3. package/dist/cjs/app-globals-V2Kpy_OQ.js +5 -0
  4. package/dist/cjs/index-B92VHWr4.js +1834 -0
  5. package/dist/cjs/index.cjs.js +2 -0
  6. package/dist/cjs/kritzel-active-users_46.cjs.entry.js +75271 -0
  7. package/dist/cjs/kritzel-brush-style.cjs.entry.js +31 -0
  8. package/dist/cjs/kritzel-editor.cjs.js +25 -0
  9. package/dist/cjs/loader.cjs.js +13 -0
  10. package/dist/collection/collection-manifest.json +65 -0
  11. package/dist/collection/components/kritzel-active-users/kritzel-active-users.css +65 -0
  12. package/dist/collection/components/kritzel-active-users/kritzel-active-users.js +134 -0
  13. package/dist/collection/components/kritzel-avatar/kritzel-avatar.css +58 -0
  14. package/dist/collection/components/kritzel-avatar/kritzel-avatar.js +207 -0
  15. package/dist/collection/components/kritzel-back-to-content/kritzel-back-to-content.css +42 -0
  16. package/dist/collection/components/kritzel-back-to-content/kritzel-back-to-content.js +95 -0
  17. package/dist/collection/components/kritzel-brush-style/kritzel-brush-style.css +43 -0
  18. package/dist/collection/components/kritzel-brush-style/kritzel-brush-style.js +97 -0
  19. package/dist/collection/components/kritzel-button/kritzel-button.css +73 -0
  20. package/dist/collection/components/kritzel-button/kritzel-button.js +118 -0
  21. package/dist/collection/components/kritzel-color/kritzel-color.css +25 -0
  22. package/dist/collection/components/kritzel-color/kritzel-color.js +149 -0
  23. package/dist/collection/components/kritzel-color-palette/kritzel-color-palette.css +46 -0
  24. package/dist/collection/components/kritzel-color-palette/kritzel-color-palette.js +225 -0
  25. package/dist/collection/components/kritzel-context-menu/kritzel-context-menu.css +112 -0
  26. package/dist/collection/components/kritzel-context-menu/kritzel-context-menu.js +368 -0
  27. package/dist/collection/components/kritzel-current-user/kritzel-current-user.css +11 -0
  28. package/dist/collection/components/kritzel-current-user/kritzel-current-user.js +109 -0
  29. package/dist/collection/components/kritzel-current-user-dialog/kritzel-current-user-dialog.css +39 -0
  30. package/dist/collection/components/kritzel-current-user-dialog/kritzel-current-user-dialog.js +169 -0
  31. package/dist/collection/components/kritzel-dialog/kritzel-dialog.css +209 -0
  32. package/dist/collection/components/kritzel-dialog/kritzel-dialog.js +787 -0
  33. package/dist/collection/components/kritzel-dropdown/kritzel-dropdown.css +190 -0
  34. package/dist/collection/components/kritzel-dropdown/kritzel-dropdown.js +418 -0
  35. package/dist/collection/components/kritzel-editor/kritzel-editor.css +161 -0
  36. package/dist/collection/components/kritzel-editor/kritzel-editor.js +4678 -0
  37. package/dist/collection/components/kritzel-export/kritzel-export.css +89 -0
  38. package/dist/collection/components/kritzel-export/kritzel-export.js +246 -0
  39. package/dist/collection/components/kritzel-font/kritzel-font.css +10 -0
  40. package/dist/collection/components/kritzel-font/kritzel-font.js +89 -0
  41. package/dist/collection/components/kritzel-font-family/kritzel-font-family.css +48 -0
  42. package/dist/collection/components/kritzel-font-family/kritzel-font-family.js +122 -0
  43. package/dist/collection/components/kritzel-font-size/kritzel-font-size.css +30 -0
  44. package/dist/collection/components/kritzel-font-size/kritzel-font-size.js +117 -0
  45. package/dist/collection/components/kritzel-input/kritzel-input.css +69 -0
  46. package/dist/collection/components/kritzel-input/kritzel-input.js +198 -0
  47. package/dist/collection/components/kritzel-line-endings/kritzel-line-endings.css +60 -0
  48. package/dist/collection/components/kritzel-line-endings/kritzel-line-endings.js +165 -0
  49. package/dist/collection/components/kritzel-loading-overlay/kritzel-loading-overlay.css +54 -0
  50. package/dist/collection/components/kritzel-loading-overlay/kritzel-loading-overlay.js +70 -0
  51. package/dist/collection/components/kritzel-login-dialog/kritzel-login-dialog.css +98 -0
  52. package/dist/collection/components/kritzel-login-dialog/kritzel-login-dialog.js +239 -0
  53. package/dist/collection/components/kritzel-master-detail/kritzel-master-detail.css +190 -0
  54. package/dist/collection/components/kritzel-master-detail/kritzel-master-detail.js +201 -0
  55. package/dist/collection/components/kritzel-menu/kritzel-menu.css +34 -0
  56. package/dist/collection/components/kritzel-menu/kritzel-menu.js +297 -0
  57. package/dist/collection/components/kritzel-menu-item/kritzel-menu-item.css +167 -0
  58. package/dist/collection/components/kritzel-menu-item/kritzel-menu-item.js +298 -0
  59. package/dist/collection/components/kritzel-more-menu/kritzel-more-menu.css +58 -0
  60. package/dist/collection/components/kritzel-more-menu/kritzel-more-menu.js +381 -0
  61. package/dist/collection/components/kritzel-notification-card/kritzel-notification-card.css +101 -0
  62. package/dist/collection/components/kritzel-notification-card/kritzel-notification-card.js +173 -0
  63. package/dist/collection/components/kritzel-numeric-input/kritzel-numeric-input.css +102 -0
  64. package/dist/collection/components/kritzel-numeric-input/kritzel-numeric-input.js +255 -0
  65. package/dist/collection/components/kritzel-opacity-slider/kritzel-opacity-slider.css +85 -0
  66. package/dist/collection/components/kritzel-opacity-slider/kritzel-opacity-slider.js +164 -0
  67. package/dist/collection/components/kritzel-pill-tabs/kritzel-pill-tabs.css +68 -0
  68. package/dist/collection/components/kritzel-pill-tabs/kritzel-pill-tabs.js +135 -0
  69. package/dist/collection/components/kritzel-portal/kritzel-portal.js +432 -0
  70. package/dist/collection/components/kritzel-settings/kritzel-settings.css +137 -0
  71. package/dist/collection/components/kritzel-settings/kritzel-settings.js +448 -0
  72. package/dist/collection/components/kritzel-shape-fill/kritzel-shape-fill.css +47 -0
  73. package/dist/collection/components/kritzel-shape-fill/kritzel-shape-fill.js +93 -0
  74. package/dist/collection/components/kritzel-share-dialog/kritzel-share-dialog.css +150 -0
  75. package/dist/collection/components/kritzel-share-dialog/kritzel-share-dialog.js +308 -0
  76. package/dist/collection/components/kritzel-slide-toggle/kritzel-slide-toggle.css +48 -0
  77. package/dist/collection/components/kritzel-slide-toggle/kritzel-slide-toggle.js +119 -0
  78. package/dist/collection/components/kritzel-split-button/kritzel-split-button.css +78 -0
  79. package/dist/collection/components/kritzel-split-button/kritzel-split-button.js +433 -0
  80. package/dist/collection/components/kritzel-stroke-size/kritzel-stroke-size.css +37 -0
  81. package/dist/collection/components/kritzel-stroke-size/kritzel-stroke-size.js +89 -0
  82. package/dist/collection/components/kritzel-tool-config/kritzel-tool-config.css +38 -0
  83. package/dist/collection/components/kritzel-tool-config/kritzel-tool-config.js +467 -0
  84. package/dist/collection/components/kritzel-toolbar/kritzel-toolbar.css +348 -0
  85. package/dist/collection/components/kritzel-toolbar/kritzel-toolbar.js +588 -0
  86. package/dist/collection/components/kritzel-tooltip/kritzel-tooltip.css +18 -0
  87. package/dist/collection/components/kritzel-tooltip/kritzel-tooltip.js +388 -0
  88. package/dist/collection/components/kritzel-utility-panel/kritzel-utility-panel.css +46 -0
  89. package/dist/collection/components/kritzel-utility-panel/kritzel-utility-panel.js +146 -0
  90. package/dist/collection/components/kritzel-workspace-manager/kritzel-workspace-manager.css +16 -0
  91. package/dist/collection/components/kritzel-workspace-manager/kritzel-workspace-manager.js +365 -0
  92. package/dist/collection/components/kritzel-zoom-panel/kritzel-zoom-panel.css +72 -0
  93. package/dist/collection/components/kritzel-zoom-panel/kritzel-zoom-panel.js +173 -0
  94. package/dist/collection/index.js +1 -0
  95. package/dist/components/index.d.ts +121 -0
  96. package/dist/components/index.js +48 -0
  97. package/dist/components/kritzel-active-users.d.ts +11 -0
  98. package/dist/components/kritzel-active-users.js +6 -0
  99. package/dist/components/kritzel-avatar.d.ts +11 -0
  100. package/dist/components/kritzel-avatar.js +6 -0
  101. package/dist/components/kritzel-awareness-cursors.js +6 -0
  102. package/dist/components/kritzel-back-to-content.d.ts +11 -0
  103. package/dist/components/kritzel-back-to-content.js +6 -0
  104. package/dist/components/kritzel-brush-style.d.ts +11 -0
  105. package/dist/components/kritzel-brush-style.js +64 -0
  106. package/dist/components/kritzel-button.d.ts +11 -0
  107. package/dist/components/kritzel-button.js +6 -0
  108. package/dist/components/kritzel-color-palette.d.ts +11 -0
  109. package/dist/components/kritzel-color-palette.js +6 -0
  110. package/dist/components/kritzel-color.d.ts +11 -0
  111. package/dist/components/kritzel-color.js +6 -0
  112. package/dist/components/kritzel-context-menu.d.ts +11 -0
  113. package/dist/components/kritzel-context-menu.js +6 -0
  114. package/dist/components/kritzel-current-user-dialog.d.ts +11 -0
  115. package/dist/components/kritzel-current-user-dialog.js +6 -0
  116. package/dist/components/kritzel-current-user.d.ts +11 -0
  117. package/dist/components/kritzel-current-user.js +6 -0
  118. package/dist/components/kritzel-cursor-trail.js +6 -0
  119. package/dist/components/kritzel-dialog.d.ts +11 -0
  120. package/dist/components/kritzel-dialog.js +6 -0
  121. package/dist/components/kritzel-dropdown.d.ts +11 -0
  122. package/dist/components/kritzel-dropdown.js +6 -0
  123. package/dist/components/kritzel-editor.d.ts +11 -0
  124. package/dist/components/kritzel-editor.js +1792 -0
  125. package/dist/components/kritzel-engine.js +6 -0
  126. package/dist/components/kritzel-export.d.ts +11 -0
  127. package/dist/components/kritzel-export.js +6 -0
  128. package/dist/components/kritzel-font-family.d.ts +11 -0
  129. package/dist/components/kritzel-font-family.js +6 -0
  130. package/dist/components/kritzel-font-size.d.ts +11 -0
  131. package/dist/components/kritzel-font-size.js +6 -0
  132. package/dist/components/kritzel-font.d.ts +11 -0
  133. package/dist/components/kritzel-font.js +6 -0
  134. package/dist/components/kritzel-icon.js +6 -0
  135. package/dist/components/kritzel-input.d.ts +11 -0
  136. package/dist/components/kritzel-input.js +6 -0
  137. package/dist/components/kritzel-line-endings.d.ts +11 -0
  138. package/dist/components/kritzel-line-endings.js +6 -0
  139. package/dist/components/kritzel-loading-overlay.d.ts +11 -0
  140. package/dist/components/kritzel-loading-overlay.js +6 -0
  141. package/dist/components/kritzel-login-dialog.d.ts +11 -0
  142. package/dist/components/kritzel-login-dialog.js +6 -0
  143. package/dist/components/kritzel-master-detail.d.ts +11 -0
  144. package/dist/components/kritzel-master-detail.js +6 -0
  145. package/dist/components/kritzel-menu-item.d.ts +11 -0
  146. package/dist/components/kritzel-menu-item.js +6 -0
  147. package/dist/components/kritzel-menu.d.ts +11 -0
  148. package/dist/components/kritzel-menu.js +6 -0
  149. package/dist/components/kritzel-more-menu.d.ts +11 -0
  150. package/dist/components/kritzel-more-menu.js +6 -0
  151. package/dist/components/kritzel-notification-card.d.ts +11 -0
  152. package/dist/components/kritzel-notification-card.js +6 -0
  153. package/dist/components/kritzel-numeric-input.d.ts +11 -0
  154. package/dist/components/kritzel-numeric-input.js +6 -0
  155. package/dist/components/kritzel-opacity-slider.d.ts +11 -0
  156. package/dist/components/kritzel-opacity-slider.js +6 -0
  157. package/dist/components/kritzel-pill-tabs.d.ts +11 -0
  158. package/dist/components/kritzel-pill-tabs.js +6 -0
  159. package/dist/components/kritzel-portal.d.ts +11 -0
  160. package/dist/components/kritzel-portal.js +6 -0
  161. package/dist/components/kritzel-settings.d.ts +11 -0
  162. package/dist/components/kritzel-settings.js +6 -0
  163. package/dist/components/kritzel-shape-fill.d.ts +11 -0
  164. package/dist/components/kritzel-shape-fill.js +6 -0
  165. package/dist/components/kritzel-share-dialog.d.ts +11 -0
  166. package/dist/components/kritzel-share-dialog.js +6 -0
  167. package/dist/components/kritzel-slide-toggle.d.ts +11 -0
  168. package/dist/components/kritzel-slide-toggle.js +6 -0
  169. package/dist/components/kritzel-split-button.d.ts +11 -0
  170. package/dist/components/kritzel-split-button.js +6 -0
  171. package/dist/components/kritzel-stroke-size.d.ts +11 -0
  172. package/dist/components/kritzel-stroke-size.js +6 -0
  173. package/dist/components/kritzel-tool-config.d.ts +11 -0
  174. package/dist/components/kritzel-tool-config.js +6 -0
  175. package/dist/components/kritzel-toolbar.d.ts +11 -0
  176. package/dist/components/kritzel-toolbar.js +6 -0
  177. package/dist/components/kritzel-tooltip.d.ts +11 -0
  178. package/dist/components/kritzel-tooltip.js +6 -0
  179. package/dist/components/kritzel-utility-panel.d.ts +11 -0
  180. package/dist/components/kritzel-utility-panel.js +6 -0
  181. package/dist/components/kritzel-watermark.js +6 -0
  182. package/dist/components/kritzel-workspace-manager.d.ts +11 -0
  183. package/dist/components/kritzel-workspace-manager.js +6 -0
  184. package/dist/components/kritzel-zoom-panel.d.ts +11 -0
  185. package/dist/components/kritzel-zoom-panel.js +6 -0
  186. package/dist/components/p-4-qLegHb.js +142 -0
  187. package/dist/components/p-5qkOM1RJ.js +1557 -0
  188. package/dist/components/p-B3Tqoyl9.js +43 -0
  189. package/dist/components/p-B5xYV1o3.js +77 -0
  190. package/dist/components/p-B6UJztrf.js +290 -0
  191. package/dist/components/p-BDjRSoAc.js +43 -0
  192. package/dist/components/p-BFTU3MAI.js +7 -0
  193. package/dist/components/p-BGmTmdLe.js +167 -0
  194. package/dist/components/p-BN8VWPlq.js +164 -0
  195. package/dist/components/p-BZ_KnHdR.js +222 -0
  196. package/dist/components/p-B_gT0lCn.js +94 -0
  197. package/dist/components/p-BfMlwIcG.js +62 -0
  198. package/dist/components/p-BjFrt1q0.js +62 -0
  199. package/dist/components/p-Blq9a1ni.js +3267 -0
  200. package/dist/components/p-BrGJIoGK.js +52 -0
  201. package/dist/components/p-BvG3JO85.js +56 -0
  202. package/dist/components/p-CS3YZVYE.js +319 -0
  203. package/dist/components/p-CVxGF4bJ.js +150 -0
  204. package/dist/components/p-Ckqh1tqY.js +468 -0
  205. package/dist/components/p-ClfOtiNp.js +84 -0
  206. package/dist/components/p-CmjXRLdr.js +220 -0
  207. package/dist/components/p-CoNexfpB.js +106 -0
  208. package/dist/components/p-Cp4e4oTE.js +122 -0
  209. package/dist/components/p-CrIEmItB.js +85 -0
  210. package/dist/components/p-CvaxFYS0.js +304 -0
  211. package/dist/components/p-CwBxnzYu.js +57 -0
  212. package/dist/components/p-Cy_cLtOP.js +3456 -0
  213. package/dist/components/p-CzUeIini.js +381 -0
  214. package/dist/components/p-D0tPTPkR.js +99 -0
  215. package/dist/components/p-DJxgPPfs.js +194 -0
  216. package/dist/components/p-DOJCDPVD.js +55 -0
  217. package/dist/components/p-DVv8ChhE.js +91 -0
  218. package/dist/components/p-DXZBWJBt.js +70 -0
  219. package/dist/components/p-DXuf225S.js +53 -0
  220. package/dist/components/p-DZsSiMnA.js +63037 -0
  221. package/dist/components/p-DqOC_Yck.js +112 -0
  222. package/dist/components/p-Ds0uNtwQ.js +97 -0
  223. package/dist/components/p-DyRJFg4w.js +57 -0
  224. package/dist/components/p-GbCxpbQ6.js +88 -0
  225. package/dist/components/p-McY5wZ0h.js +135 -0
  226. package/dist/components/p-QEue33R5.js +70 -0
  227. package/dist/components/p-R1D8Sr0l.js +299 -0
  228. package/dist/components/p-SLnqczCS.js +49 -0
  229. package/dist/components/p-hQwVRh0t.js +147 -0
  230. package/dist/components/p-h_uh_Njf.js +63 -0
  231. package/dist/components/p-kOINnzaR.js +161 -0
  232. package/dist/components/p-peZjvnkK.js +486 -0
  233. package/dist/esm/app-globals-DQuL1Twl.js +3 -0
  234. package/dist/esm/index-OjbYJz-P.js +1807 -0
  235. package/dist/esm/index.js +1 -0
  236. package/dist/esm/kritzel-active-users_46.entry.js +75224 -0
  237. package/dist/esm/kritzel-brush-style.entry.js +29 -0
  238. package/dist/esm/kritzel-editor.js +21 -0
  239. package/dist/esm/loader.js +11 -0
  240. package/dist/index.cjs.js +1 -0
  241. package/dist/index.js +1 -0
  242. package/dist/kritzel-editor/index.esm.js +1 -0
  243. package/dist/kritzel-editor/kritzel-editor.esm.js +21 -0
  244. package/dist/kritzel-editor/p-501047d8.entry.js +29 -0
  245. package/dist/kritzel-editor/p-60319edb.entry.js +75224 -0
  246. package/dist/kritzel-editor/p-DQuL1Twl.js +3 -0
  247. package/dist/kritzel-editor/p-OjbYJz-P.js +1790 -0
  248. package/dist/types/components/kritzel-active-users/kritzel-active-users.d.ts +21 -0
  249. package/dist/types/components/kritzel-avatar/kritzel-avatar.d.ts +27 -0
  250. package/dist/types/components/kritzel-back-to-content/kritzel-back-to-content.d.ts +17 -0
  251. package/dist/types/components/kritzel-brush-style/kritzel-brush-style.d.ts +11 -0
  252. package/dist/types/components/kritzel-button/kritzel-button.d.ts +13 -0
  253. package/dist/types/components/kritzel-color/kritzel-color.d.ts +10 -0
  254. package/dist/types/components/kritzel-color-palette/kritzel-color-palette.d.ts +17 -0
  255. package/dist/types/components/kritzel-context-menu/kritzel-context-menu.d.ts +40 -0
  256. package/dist/types/components/kritzel-current-user/kritzel-current-user.d.ts +15 -0
  257. package/dist/types/components/kritzel-current-user-dialog/kritzel-current-user-dialog.d.ts +18 -0
  258. package/dist/types/components/kritzel-dialog/kritzel-dialog.d.ts +85 -0
  259. package/dist/types/components/kritzel-dropdown/kritzel-dropdown.d.ts +48 -0
  260. package/dist/types/components/kritzel-editor/kritzel-editor.d.ts +356 -0
  261. package/dist/types/components/kritzel-export/kritzel-export.d.ts +35 -0
  262. package/dist/types/components/kritzel-font/kritzel-font.d.ts +6 -0
  263. package/dist/types/components/kritzel-font-family/kritzel-font-family.d.ts +17 -0
  264. package/dist/types/components/kritzel-font-size/kritzel-font-size.d.ts +10 -0
  265. package/dist/types/components/kritzel-input/kritzel-input.d.ts +22 -0
  266. package/dist/types/components/kritzel-line-endings/kritzel-line-endings.d.ts +21 -0
  267. package/dist/types/components/kritzel-loading-overlay/kritzel-loading-overlay.d.ts +11 -0
  268. package/dist/types/components/kritzel-login-dialog/kritzel-login-dialog.d.ts +32 -0
  269. package/dist/types/components/kritzel-master-detail/kritzel-master-detail.d.ts +25 -0
  270. package/dist/types/components/kritzel-menu/kritzel-menu.d.ts +25 -0
  271. package/dist/types/components/kritzel-menu-item/kritzel-menu-item.d.ts +28 -0
  272. package/dist/types/components/kritzel-more-menu/kritzel-more-menu.d.ts +55 -0
  273. package/dist/types/components/kritzel-notification-card/kritzel-notification-card.d.ts +22 -0
  274. package/dist/types/components/kritzel-numeric-input/kritzel-numeric-input.d.ts +32 -0
  275. package/dist/types/components/kritzel-opacity-slider/kritzel-opacity-slider.d.ts +17 -0
  276. package/dist/types/components/kritzel-pill-tabs/kritzel-pill-tabs.d.ts +26 -0
  277. package/dist/types/components/kritzel-portal/kritzel-portal.d.ts +33 -0
  278. package/dist/types/components/kritzel-settings/kritzel-settings.d.ts +64 -0
  279. package/dist/types/components/kritzel-shape-fill/kritzel-shape-fill.d.ts +10 -0
  280. package/dist/types/components/kritzel-share-dialog/kritzel-share-dialog.d.ts +49 -0
  281. package/dist/types/components/kritzel-slide-toggle/kritzel-slide-toggle.d.ts +14 -0
  282. package/dist/types/components/kritzel-split-button/kritzel-split-button.d.ts +38 -0
  283. package/dist/types/components/kritzel-stroke-size/kritzel-stroke-size.d.ts +8 -0
  284. package/dist/types/components/kritzel-tool-config/kritzel-tool-config.d.ts +39 -0
  285. package/dist/types/components/kritzel-toolbar/kritzel-toolbar.d.ts +76 -0
  286. package/dist/types/components/kritzel-tooltip/kritzel-tooltip.d.ts +30 -0
  287. package/dist/types/components/kritzel-utility-panel/kritzel-utility-panel.d.ts +14 -0
  288. package/dist/types/components/kritzel-workspace-manager/kritzel-workspace-manager.d.ts +40 -0
  289. package/dist/types/components/kritzel-zoom-panel/kritzel-zoom-panel.d.ts +20 -0
  290. package/dist/types/components.d.ts +3166 -0
  291. package/dist/types/index.d.ts +8 -0
  292. package/dist/types/stencil-public-runtime.d.ts +1873 -0
  293. package/loader/cdn.js +1 -0
  294. package/loader/index.cjs.js +1 -0
  295. package/loader/index.d.ts +24 -0
  296. package/loader/index.es2017.js +1 -0
  297. package/loader/index.js +2 -0
  298. package/package.json +83 -0
@@ -0,0 +1,135 @@
1
+ import { Host, h } from "@stencil/core";
2
+ export class KritzelPillTabs {
3
+ /**
4
+ * Array of tab definitions to render
5
+ */
6
+ tabs = [];
7
+ /**
8
+ * Currently selected tab ID
9
+ */
10
+ value;
11
+ /**
12
+ * Emitted when the selected tab changes
13
+ */
14
+ valueChange;
15
+ handleTabClick(tabId) {
16
+ if (this.value !== tabId) {
17
+ this.value = tabId;
18
+ this.valueChange.emit(tabId);
19
+ }
20
+ }
21
+ handleKeyDown(event, index) {
22
+ const tabButtons = this.tabs;
23
+ let newIndex = index;
24
+ switch (event.key) {
25
+ case 'ArrowLeft':
26
+ event.preventDefault();
27
+ newIndex = index > 0 ? index - 1 : tabButtons.length - 1;
28
+ break;
29
+ case 'ArrowRight':
30
+ event.preventDefault();
31
+ newIndex = index < tabButtons.length - 1 ? index + 1 : 0;
32
+ break;
33
+ case 'Home':
34
+ event.preventDefault();
35
+ newIndex = 0;
36
+ break;
37
+ case 'End':
38
+ event.preventDefault();
39
+ newIndex = tabButtons.length - 1;
40
+ break;
41
+ default:
42
+ return;
43
+ }
44
+ const newTab = tabButtons[newIndex];
45
+ this.handleTabClick(newTab.id);
46
+ // Focus the new tab button
47
+ const container = event.currentTarget;
48
+ const parent = container.parentElement;
49
+ const buttons = parent?.querySelectorAll('button');
50
+ buttons?.[newIndex]?.focus();
51
+ }
52
+ render() {
53
+ return (h(Host, { key: '16fce447fb7db0539ba115ef19771ac78f30a302' }, h("div", { key: '95487da922621b18c1ec422eb0d464131dbc28d3', class: "pill-tabs-container", role: "tablist" }, this.tabs.map((tab, index) => (h("button", { key: tab.id, class: {
54
+ 'pill-tab': true,
55
+ 'selected': this.value === tab.id,
56
+ }, role: "tab", "aria-selected": this.value === tab.id ? 'true' : 'false', tabIndex: this.value === tab.id ? 0 : -1, onClick: () => this.handleTabClick(tab.id), onKeyDown: (e) => this.handleKeyDown(e, index) }, tab.icon && h("kritzel-icon", { name: tab.icon, size: 16 }), h("span", { class: "pill-tab-label" }, tab.label)))))));
57
+ }
58
+ static get is() { return "kritzel-pill-tabs"; }
59
+ static get encapsulation() { return "shadow"; }
60
+ static get originalStyleUrls() {
61
+ return {
62
+ "$": ["kritzel-pill-tabs.css"]
63
+ };
64
+ }
65
+ static get styleUrls() {
66
+ return {
67
+ "$": ["kritzel-pill-tabs.css"]
68
+ };
69
+ }
70
+ static get properties() {
71
+ return {
72
+ "tabs": {
73
+ "type": "unknown",
74
+ "mutable": false,
75
+ "complexType": {
76
+ "original": "KritzelPillTab[]",
77
+ "resolved": "KritzelPillTab[]",
78
+ "references": {
79
+ "KritzelPillTab": {
80
+ "location": "local",
81
+ "path": "C:/Projects/kritzel/libs/editor/core/src/components/kritzel-pill-tabs/kritzel-pill-tabs.tsx",
82
+ "id": "src/components/kritzel-pill-tabs/kritzel-pill-tabs.tsx::KritzelPillTab"
83
+ }
84
+ }
85
+ },
86
+ "required": false,
87
+ "optional": false,
88
+ "docs": {
89
+ "tags": [],
90
+ "text": "Array of tab definitions to render"
91
+ },
92
+ "getter": false,
93
+ "setter": false,
94
+ "defaultValue": "[]"
95
+ },
96
+ "value": {
97
+ "type": "string",
98
+ "mutable": true,
99
+ "complexType": {
100
+ "original": "string",
101
+ "resolved": "string",
102
+ "references": {}
103
+ },
104
+ "required": false,
105
+ "optional": false,
106
+ "docs": {
107
+ "tags": [],
108
+ "text": "Currently selected tab ID"
109
+ },
110
+ "getter": false,
111
+ "setter": false,
112
+ "reflect": false,
113
+ "attribute": "value"
114
+ }
115
+ };
116
+ }
117
+ static get events() {
118
+ return [{
119
+ "method": "valueChange",
120
+ "name": "valueChange",
121
+ "bubbles": true,
122
+ "cancelable": true,
123
+ "composed": true,
124
+ "docs": {
125
+ "tags": [],
126
+ "text": "Emitted when the selected tab changes"
127
+ },
128
+ "complexType": {
129
+ "original": "string",
130
+ "resolved": "string",
131
+ "references": {}
132
+ }
133
+ }];
134
+ }
135
+ }
@@ -0,0 +1,432 @@
1
+ import { Host, h } from "@stencil/core";
2
+ import { ObjectHelper } from "@kritzel/engine";
3
+ import { KritzelHTMLHelper } from "@kritzel/engine";
4
+ export class KritzelPortal {
5
+ host;
6
+ anchor;
7
+ anchorChanged(newValue) {
8
+ if (newValue) {
9
+ this.openPortal();
10
+ // Use requestAnimationFrame to wait for the browser to paint the portal content
11
+ // so that getBoundingClientRect returns accurate dimensions
12
+ requestAnimationFrame(() => {
13
+ this.calculatePosition();
14
+ if (this.autoFocus) {
15
+ this.focusFirstElement();
16
+ }
17
+ });
18
+ }
19
+ else {
20
+ this.closePortal();
21
+ }
22
+ }
23
+ offsetX;
24
+ offsetY;
25
+ autoFocus = true;
26
+ close;
27
+ handleDismissMenus() {
28
+ if (this.portal) {
29
+ this.close.emit();
30
+ this.closePortal();
31
+ }
32
+ }
33
+ handleOutsideClick(event) {
34
+ const isLastPortal = this.lastAddedPortal === this.portal;
35
+ if (!isLastPortal)
36
+ return;
37
+ const target = event.target;
38
+ if (!this.host.contains(target)) {
39
+ this.close.emit();
40
+ this.closePortal();
41
+ }
42
+ }
43
+ handleOutsidePointerDown(event) {
44
+ if (!this.portal)
45
+ return;
46
+ const isLastPortal = this.lastAddedPortal === this.portal;
47
+ if (!isLastPortal)
48
+ return;
49
+ const path = event.composedPath();
50
+ const isInsidePortal = path.some(el => el === this.host);
51
+ const isOnAnchor = this.anchor && path.some(el => el === this.anchor);
52
+ if (!isInsidePortal && !isOnAnchor) {
53
+ event.stopPropagation();
54
+ event.preventDefault();
55
+ this.close.emit();
56
+ this.closePortal();
57
+ }
58
+ }
59
+ handleKeyDown(event) {
60
+ const isLastPortal = this.lastAddedPortal === this.portal;
61
+ if (!isLastPortal)
62
+ return;
63
+ if (event.key === 'Escape') {
64
+ event.stopPropagation();
65
+ this.anchor.focus();
66
+ this.close.emit();
67
+ this.closePortal();
68
+ return;
69
+ }
70
+ if (event.key === 'Tab') {
71
+ this.trapFocus(event);
72
+ return;
73
+ }
74
+ if (event.key === 'Enter') {
75
+ const activeElement = this.getDeepActiveElement();
76
+ if (activeElement?.click) {
77
+ event.preventDefault();
78
+ activeElement.click();
79
+ }
80
+ }
81
+ }
82
+ handleResize() {
83
+ this.calculatePosition();
84
+ }
85
+ handleWindowScroll() {
86
+ const isInViewport = KritzelHTMLHelper.isElementInViewport(this.anchor);
87
+ if (!isInViewport) {
88
+ this.anchor?.blur();
89
+ this.closePortal();
90
+ return;
91
+ }
92
+ this.calculatePosition();
93
+ }
94
+ portal;
95
+ id = `portal-${ObjectHelper.generateUUID()}`;
96
+ defaultOffset = 0;
97
+ minLeft = 0;
98
+ themeObserver;
99
+ focusFirstElement() {
100
+ requestAnimationFrame(() => {
101
+ this.firstFocusableElement?.focus?.();
102
+ });
103
+ }
104
+ getDeepActiveElement() {
105
+ let activeEl = document.activeElement;
106
+ while (activeEl?.shadowRoot?.activeElement) {
107
+ activeEl = activeEl.shadowRoot.activeElement;
108
+ }
109
+ return activeEl;
110
+ }
111
+ trapFocus(event) {
112
+ const focusableElements = KritzelHTMLHelper.getFocusableElements(this.host);
113
+ if (focusableElements.length === 0)
114
+ return;
115
+ const firstFocusable = focusableElements[0];
116
+ const lastFocusable = focusableElements[focusableElements.length - 1];
117
+ const activeElement = this.getDeepActiveElement();
118
+ if (event.shiftKey) {
119
+ /* shift + tab */
120
+ if (activeElement === firstFocusable) {
121
+ lastFocusable.focus();
122
+ event.preventDefault();
123
+ }
124
+ }
125
+ else {
126
+ /* tab */
127
+ if (activeElement === lastFocusable) {
128
+ firstFocusable.focus();
129
+ event.preventDefault();
130
+ }
131
+ }
132
+ }
133
+ get firstFocusableElement() {
134
+ const slotEl = this.host.shadowRoot?.querySelector('slot');
135
+ const firstAssigned = slotEl?.assignedElements({ flatten: true })[0];
136
+ if (!firstAssigned)
137
+ return null;
138
+ const focusable = KritzelHTMLHelper.getFocusableElements(firstAssigned);
139
+ return focusable[0] ?? firstAssigned;
140
+ }
141
+ get lastAddedPortal() {
142
+ const portals = Array.from(document.querySelectorAll('[id^="portal-"]'));
143
+ return portals.length ? portals[portals.length - 1] : null;
144
+ }
145
+ calculateLeft() {
146
+ if (!this.anchor || !this.portal)
147
+ return 0;
148
+ const refRect = this.anchor.getBoundingClientRect();
149
+ const portalRect = this.portal.getBoundingClientRect();
150
+ const offset = this.offsetX ?? this.defaultOffset;
151
+ // Determine alignment based on anchor position
152
+ // If anchor center is past the viewport midpoint, align to end (right edge of anchor)
153
+ const anchorCenter = refRect.left + refRect.width / 2;
154
+ const viewportMidpoint = window.innerWidth / 2;
155
+ const shouldAlignEnd = anchorCenter > viewportMidpoint;
156
+ let left;
157
+ if (shouldAlignEnd) {
158
+ // Align portal's right edge to anchor's right edge
159
+ left = refRect.right - portalRect.width - offset;
160
+ }
161
+ else {
162
+ // Align portal's left edge to anchor's left edge
163
+ left = refRect.left + offset;
164
+ }
165
+ // Clamp to viewport bounds
166
+ const maxLeft = window.innerWidth - portalRect.width - this.minLeft;
167
+ if (left < this.minLeft)
168
+ left = this.minLeft;
169
+ if (left > maxLeft)
170
+ left = maxLeft;
171
+ return Math.round(left + window.scrollX);
172
+ }
173
+ calculateTop() {
174
+ if (!this.anchor || !this.portal)
175
+ return 0;
176
+ const refRect = this.anchor.getBoundingClientRect();
177
+ const portalRect = this.portal.getBoundingClientRect();
178
+ const offset = this.offsetY ?? this.defaultOffset;
179
+ const padding = 8; // Minimum padding from viewport edges
180
+ let top = refRect.bottom + offset;
181
+ const spaceBelow = window.innerHeight - refRect.bottom - offset - padding;
182
+ const spaceAbove = refRect.top - offset - padding;
183
+ // Reset max-height CSS custom property
184
+ this.host.style.removeProperty('--kritzel-portal-max-height');
185
+ if (portalRect.height <= spaceBelow) {
186
+ // Fits below the anchor
187
+ top = refRect.bottom + offset;
188
+ }
189
+ else if (portalRect.height <= spaceAbove) {
190
+ // Fits above the anchor
191
+ top = refRect.top - portalRect.height - offset;
192
+ }
193
+ else {
194
+ // Doesn't fit above or below - constrain the height
195
+ if (spaceBelow >= spaceAbove) {
196
+ // More space below, keep it below with constrained height
197
+ top = refRect.bottom + offset;
198
+ this.host.style.setProperty('--kritzel-portal-max-height', `${spaceBelow}px`);
199
+ }
200
+ else {
201
+ // More space above, position above with constrained height
202
+ top = padding;
203
+ this.host.style.setProperty('--kritzel-portal-max-height', `${spaceAbove}px`);
204
+ }
205
+ }
206
+ return Math.round(top + window.scrollY);
207
+ }
208
+ getThemeProvider() {
209
+ if (!this.anchor)
210
+ return null;
211
+ let current = this.anchor;
212
+ while (current) {
213
+ const provider = current.closest('kritzel-editor');
214
+ if (provider instanceof HTMLElement) {
215
+ return provider;
216
+ }
217
+ const portalProvider = current.closest('[id^="portal-"]');
218
+ if (portalProvider instanceof HTMLElement) {
219
+ return portalProvider;
220
+ }
221
+ const root = current.getRootNode();
222
+ if (root instanceof ShadowRoot) {
223
+ current = root.host;
224
+ }
225
+ else {
226
+ return null;
227
+ }
228
+ }
229
+ return null;
230
+ }
231
+ openPortal() {
232
+ this.portal = document.createElement('div');
233
+ this.portal.setAttribute('id', this.id);
234
+ this.portal.style.zIndex = '1';
235
+ this.portal.style.position = 'absolute';
236
+ this.portal.style.top = '0px';
237
+ this.portal.style.left = '0px';
238
+ this.portal.style.visibility = 'hidden';
239
+ const themeProvider = this.getThemeProvider();
240
+ if (themeProvider) {
241
+ const applyTheme = () => {
242
+ if (!this.portal)
243
+ return;
244
+ for (let i = 0; i < themeProvider.style.length; i++) {
245
+ const prop = themeProvider.style[i];
246
+ if (prop.startsWith('--kritzel-')) {
247
+ this.portal.style.setProperty(prop, themeProvider.style.getPropertyValue(prop));
248
+ }
249
+ }
250
+ };
251
+ applyTheme();
252
+ this.themeObserver = new MutationObserver(() => applyTheme());
253
+ this.themeObserver.observe(themeProvider, {
254
+ attributes: true,
255
+ attributeFilter: ['style'],
256
+ });
257
+ }
258
+ this.portal.appendChild(this.host);
259
+ document.body.append(this.portal);
260
+ }
261
+ closePortal() {
262
+ this.themeObserver?.disconnect();
263
+ this.themeObserver = null;
264
+ const portal = document.getElementById(this.id);
265
+ if (!portal)
266
+ return;
267
+ document.body.removeChild(portal);
268
+ this.host.remove();
269
+ }
270
+ calculatePosition() {
271
+ if (!this.anchor || !this.portal)
272
+ return;
273
+ const top = this.calculateTop();
274
+ const left = this.calculateLeft();
275
+ this.portal.style.top = `${top}px`;
276
+ this.portal.style.left = `${left}px`;
277
+ this.portal.style.visibility = 'visible';
278
+ }
279
+ render() {
280
+ return (h(Host, { key: 'c92b863d46e8a96b44d318288471ad11ae04d1f4', style: { display: this.anchor ? 'block' : 'none' } }, h("slot", { key: 'd207f238571b877145c0c445e9d184cb1c4a4e2b' })));
281
+ }
282
+ static get is() { return "kritzel-portal"; }
283
+ static get encapsulation() { return "shadow"; }
284
+ static get properties() {
285
+ return {
286
+ "anchor": {
287
+ "type": "unknown",
288
+ "mutable": false,
289
+ "complexType": {
290
+ "original": "HTMLElement",
291
+ "resolved": "HTMLElement",
292
+ "references": {
293
+ "HTMLElement": {
294
+ "location": "global",
295
+ "id": "global::HTMLElement"
296
+ }
297
+ }
298
+ },
299
+ "required": false,
300
+ "optional": false,
301
+ "docs": {
302
+ "tags": [],
303
+ "text": ""
304
+ },
305
+ "getter": false,
306
+ "setter": false
307
+ },
308
+ "offsetX": {
309
+ "type": "number",
310
+ "mutable": false,
311
+ "complexType": {
312
+ "original": "number",
313
+ "resolved": "number",
314
+ "references": {}
315
+ },
316
+ "required": false,
317
+ "optional": false,
318
+ "docs": {
319
+ "tags": [],
320
+ "text": ""
321
+ },
322
+ "getter": false,
323
+ "setter": false,
324
+ "reflect": false,
325
+ "attribute": "offset-x"
326
+ },
327
+ "offsetY": {
328
+ "type": "number",
329
+ "mutable": false,
330
+ "complexType": {
331
+ "original": "number",
332
+ "resolved": "number",
333
+ "references": {}
334
+ },
335
+ "required": false,
336
+ "optional": false,
337
+ "docs": {
338
+ "tags": [],
339
+ "text": ""
340
+ },
341
+ "getter": false,
342
+ "setter": false,
343
+ "reflect": false,
344
+ "attribute": "offset-y"
345
+ },
346
+ "autoFocus": {
347
+ "type": "boolean",
348
+ "mutable": false,
349
+ "complexType": {
350
+ "original": "boolean",
351
+ "resolved": "boolean",
352
+ "references": {}
353
+ },
354
+ "required": false,
355
+ "optional": false,
356
+ "docs": {
357
+ "tags": [],
358
+ "text": ""
359
+ },
360
+ "getter": false,
361
+ "setter": false,
362
+ "reflect": false,
363
+ "attribute": "auto-focus",
364
+ "defaultValue": "true"
365
+ }
366
+ };
367
+ }
368
+ static get events() {
369
+ return [{
370
+ "method": "close",
371
+ "name": "close",
372
+ "bubbles": true,
373
+ "cancelable": true,
374
+ "composed": true,
375
+ "docs": {
376
+ "tags": [],
377
+ "text": ""
378
+ },
379
+ "complexType": {
380
+ "original": "void",
381
+ "resolved": "void",
382
+ "references": {}
383
+ }
384
+ }];
385
+ }
386
+ static get elementRef() { return "host"; }
387
+ static get watchers() {
388
+ return [{
389
+ "propName": "anchor",
390
+ "methodName": "anchorChanged"
391
+ }];
392
+ }
393
+ static get listeners() {
394
+ return [{
395
+ "name": "kritzel-dismiss-menus",
396
+ "method": "handleDismissMenus",
397
+ "target": "window",
398
+ "capture": false,
399
+ "passive": false
400
+ }, {
401
+ "name": "click",
402
+ "method": "handleOutsideClick",
403
+ "target": "window",
404
+ "capture": false,
405
+ "passive": false
406
+ }, {
407
+ "name": "pointerdown",
408
+ "method": "handleOutsidePointerDown",
409
+ "target": "document",
410
+ "capture": true,
411
+ "passive": false
412
+ }, {
413
+ "name": "keydown",
414
+ "method": "handleKeyDown",
415
+ "target": "window",
416
+ "capture": false,
417
+ "passive": false
418
+ }, {
419
+ "name": "resize",
420
+ "method": "handleResize",
421
+ "target": "window",
422
+ "capture": true,
423
+ "passive": true
424
+ }, {
425
+ "name": "scroll",
426
+ "method": "handleWindowScroll",
427
+ "target": "window",
428
+ "capture": true,
429
+ "passive": true
430
+ }];
431
+ }
432
+ }
@@ -0,0 +1,137 @@
1
+ :host {
2
+ display: contents;
3
+ }
4
+
5
+ kritzel-dialog {
6
+ --kritzel-dialog-body-padding: 0;
7
+ --kritzel-dialog-width-large: 800px;
8
+ --kritzel-dialog-height-large: 500px;
9
+ }
10
+
11
+
12
+ .footer-button {
13
+ padding: 8px 16px;
14
+ border-radius: 6px;
15
+ cursor: pointer;
16
+ font-size: 14px;
17
+ }
18
+
19
+ .cancel-button {
20
+ border: 1px solid #ebebeb;
21
+ background: #fff;
22
+ color: inherit;
23
+ }
24
+
25
+ .cancel-button:hover {
26
+ background: #f5f5f5;
27
+ }
28
+
29
+ /* Settings Content */
30
+ .settings-tab-panel {
31
+ display: none;
32
+ }
33
+
34
+ .settings-tab-panel.is-active {
35
+ display: block;
36
+ }
37
+
38
+ .settings-content {
39
+ padding: 0;
40
+ }
41
+
42
+ .settings-content h3 {
43
+ margin: 0 0 16px 0;
44
+ font-size: 18px;
45
+ font-weight: 600;
46
+ color: var(--kritzel-settings-content-heading-color, #333333);
47
+ }
48
+
49
+ .settings-content p {
50
+ margin: 0;
51
+ font-size: 14px;
52
+ color: var(--kritzel-settings-content-text-color, #666666);
53
+ line-height: 1.5;
54
+ }
55
+
56
+ .settings-group {
57
+ display: flex;
58
+ flex-direction: column;
59
+ gap: 24px;
60
+ }
61
+
62
+ .settings-item {
63
+ display: flex;
64
+ flex-direction: column;
65
+ gap: 8px;
66
+ }
67
+
68
+ .settings-row {
69
+ display: flex;
70
+ align-items: center;
71
+ justify-content: space-between;
72
+ gap: 16px;
73
+ }
74
+
75
+ .settings-label {
76
+ font-size: 14px;
77
+ font-weight: 600;
78
+ color: var(--kritzel-settings-label-color, #333333);
79
+ margin: 0 0 4px 0;
80
+ }
81
+
82
+ .settings-description {
83
+ font-size: 12px;
84
+ color: var(--kritzel-settings-description-color, #888888);
85
+ margin: 0;
86
+ line-height: 1.4;
87
+ }
88
+
89
+ /* Shortcuts List */
90
+ .shortcuts-list {
91
+ display: flex;
92
+ flex-direction: column;
93
+ gap: 24px;
94
+ }
95
+
96
+ .shortcuts-category {
97
+ display: flex;
98
+ flex-direction: column;
99
+ gap: 8px;
100
+ }
101
+
102
+ .shortcuts-category-title {
103
+ font-size: 14px;
104
+ font-weight: 600;
105
+ color: var(--kritzel-settings-label-color, #333333);
106
+ margin: 0 0 4px 0;
107
+ }
108
+
109
+ .shortcuts-group {
110
+ display: flex;
111
+ flex-direction: column;
112
+ gap: 4px;
113
+ }
114
+
115
+ .shortcut-item {
116
+ display: flex;
117
+ justify-content: space-between;
118
+ align-items: center;
119
+ padding: 6px 8px;
120
+ border-radius: 4px;
121
+ background: var(--kritzel-settings-shortcut-item-bg, rgba(0, 0, 0, 0.02));
122
+ }
123
+
124
+ .shortcut-label {
125
+ font-size: 14px;
126
+ color: var(--kritzel-settings-content-text-color, #666666);
127
+ }
128
+
129
+ .shortcut-key {
130
+ font-family: monospace;
131
+ font-size: 12px;
132
+ padding: 2px 8px;
133
+ border-radius: 4px;
134
+ background: var(--kritzel-settings-shortcut-key-bg, #f0f0f0);
135
+ color: var(--kritzel-settings-shortcut-key-color, #333333);
136
+ border: 1px solid var(--kritzel-settings-shortcut-key-border, #ddd);
137
+ }