kritzel-stencil 0.4.23 → 0.4.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/LICENSE.md +49 -49
- package/dist/cjs/{index-Xav9JFHg.js → index-Dn19mGl-.js} +47 -11
- package/dist/cjs/index.cjs.js +2 -51
- package/dist/cjs/kritzel-active-users_47.cjs.entry.js +198 -238
- package/dist/cjs/kritzel-brush-style.cjs.entry.js +2 -2
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{schema.constants-CjN-B633.js → schema.constants-CY0WWJYd.js} +44 -20
- package/dist/cjs/stencil.cjs.js +2 -2
- package/dist/collection/classes/providers/sync/hocuspocus-sync-provider.class.js +0 -21
- package/dist/collection/classes/providers/sync/websocket-sync-provider.class.js +1 -29
- package/dist/collection/classes/structures/app-state-map.structure.js +1 -4
- package/dist/collection/classes/structures/object-map.structure.js +4 -66
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/core/kritzel-awareness-cursors/kritzel-awareness-cursors.css +115 -115
- package/dist/collection/components/core/kritzel-awareness-cursors/kritzel-awareness-cursors.js +1 -1
- package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.css +10 -10
- package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js +1 -1
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.css +160 -160
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +18 -51
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.css +80 -80
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +102 -72
- package/dist/collection/components/core/kritzel-watermark/kritzel-watermark.css +29 -29
- package/dist/collection/components/core/kritzel-watermark/kritzel-watermark.js +2 -2
- package/dist/collection/components/shared/kritzel-avatar/kritzel-avatar.css +58 -58
- package/dist/collection/components/shared/kritzel-avatar/kritzel-avatar.js +3 -3
- package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.css +42 -42
- package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.js +3 -3
- package/dist/collection/components/shared/kritzel-button/kritzel-button.css +73 -73
- package/dist/collection/components/shared/kritzel-button/kritzel-button.js +2 -2
- package/dist/collection/components/shared/kritzel-color/kritzel-color.css +24 -24
- package/dist/collection/components/shared/kritzel-color/kritzel-color.js +2 -2
- package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.css +46 -46
- package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +1 -1
- package/dist/collection/components/shared/kritzel-dialog/kritzel-dialog.css +209 -209
- package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.css +190 -190
- package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.js +2 -2
- package/dist/collection/components/shared/kritzel-font/kritzel-font.css +10 -10
- package/dist/collection/components/shared/kritzel-font/kritzel-font.js +1 -1
- package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.css +48 -48
- package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js +2 -2
- package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.css +30 -30
- package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +1 -1
- package/dist/collection/components/shared/kritzel-icon/kritzel-icon.css +18 -18
- package/dist/collection/components/shared/kritzel-input/kritzel-input.css +69 -69
- package/dist/collection/components/shared/kritzel-input/kritzel-input.js +1 -1
- package/dist/collection/components/shared/kritzel-line-endings/kritzel-line-endings.css +60 -60
- package/dist/collection/components/shared/kritzel-line-endings/kritzel-line-endings.js +3 -3
- package/dist/collection/components/shared/kritzel-master-detail/kritzel-master-detail.css +190 -190
- package/dist/collection/components/shared/kritzel-master-detail/kritzel-master-detail.js +3 -3
- package/dist/collection/components/shared/kritzel-menu/kritzel-menu.css +34 -34
- package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +1 -1
- package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.css +166 -166
- package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +2 -2
- package/dist/collection/components/shared/kritzel-numeric-input/kritzel-numeric-input.css +102 -102
- package/dist/collection/components/shared/kritzel-numeric-input/kritzel-numeric-input.js +1 -1
- package/dist/collection/components/shared/kritzel-opacity-slider/kritzel-opacity-slider.css +85 -85
- package/dist/collection/components/shared/kritzel-opacity-slider/kritzel-opacity-slider.js +1 -1
- package/dist/collection/components/shared/kritzel-pill-tabs/kritzel-pill-tabs.css +68 -68
- package/dist/collection/components/shared/kritzel-pill-tabs/kritzel-pill-tabs.js +2 -2
- package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +1 -1
- package/dist/collection/components/shared/kritzel-shape-fill/kritzel-shape-fill.css +47 -47
- package/dist/collection/components/shared/kritzel-shape-fill/kritzel-shape-fill.js +4 -4
- package/dist/collection/components/shared/kritzel-slide-toggle/kritzel-slide-toggle.css +48 -48
- package/dist/collection/components/shared/kritzel-slide-toggle/kritzel-slide-toggle.js +1 -1
- package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.css +78 -78
- package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +1 -1
- package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.css +37 -37
- package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +1 -1
- package/dist/collection/components/shared/kritzel-sync-indicator/kritzel-sync-indicator.css +50 -50
- package/dist/collection/components/shared/kritzel-sync-indicator/kritzel-sync-indicator.js +1 -1
- package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.css +18 -18
- package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +2 -2
- package/dist/collection/components/ui/kritzel-active-users/kritzel-active-users.css +65 -65
- package/dist/collection/components/ui/kritzel-back-to-content/kritzel-back-to-content.css +42 -42
- package/dist/collection/components/ui/kritzel-back-to-content/kritzel-back-to-content.js +1 -1
- package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.css +112 -112
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +331 -331
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +6 -6
- package/dist/collection/components/ui/kritzel-current-user/kritzel-current-user.css +11 -11
- package/dist/collection/components/ui/kritzel-current-user/kritzel-current-user.js +1 -1
- package/dist/collection/components/ui/kritzel-current-user-dialog/kritzel-current-user-dialog.css +39 -39
- package/dist/collection/components/ui/kritzel-current-user-dialog/kritzel-current-user-dialog.js +1 -1
- package/dist/collection/components/ui/kritzel-export/kritzel-export.css +89 -89
- package/dist/collection/components/ui/kritzel-export/kritzel-export.js +1 -1
- package/dist/collection/components/ui/kritzel-loading-overlay/kritzel-loading-overlay.css +50 -50
- package/dist/collection/components/ui/kritzel-loading-overlay/kritzel-loading-overlay.js +1 -1
- package/dist/collection/components/ui/kritzel-login-dialog/kritzel-login-dialog.css +98 -98
- package/dist/collection/components/ui/kritzel-login-dialog/kritzel-login-dialog.js +1 -1
- package/dist/collection/components/ui/kritzel-more-menu/kritzel-more-menu.css +58 -58
- package/dist/collection/components/ui/kritzel-more-menu/kritzel-more-menu.js +2 -2
- package/dist/collection/components/ui/kritzel-notification-card/kritzel-notification-card.css +101 -101
- package/dist/collection/components/ui/kritzel-settings/kritzel-settings.css +137 -137
- package/dist/collection/components/ui/kritzel-settings/kritzel-settings.js +1 -1
- package/dist/collection/components/ui/kritzel-share-dialog/kritzel-share-dialog.css +150 -150
- package/dist/collection/components/ui/kritzel-share-dialog/kritzel-share-dialog.js +2 -2
- package/dist/collection/components/ui/kritzel-tool-config/kritzel-tool-config.css +38 -38
- package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.css +45 -45
- package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +1 -1
- package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.css +16 -16
- package/dist/collection/components/ui/kritzel-zoom-panel/kritzel-zoom-panel.css +72 -72
- package/dist/collection/components/ui/kritzel-zoom-panel/kritzel-zoom-panel.js +1 -1
- package/dist/collection/constants/version.js +1 -1
- package/dist/collection/helpers/cursor.helper.js +6 -6
- package/dist/collection/helpers/svg-export.helper.js +41 -41
- package/dist/components/index.js +4 -53
- package/dist/components/kritzel-active-users.js +1 -1
- package/dist/components/kritzel-avatar.js +1 -1
- package/dist/components/kritzel-awareness-cursors.js +1 -1
- package/dist/components/kritzel-back-to-content.js +1 -1
- package/dist/components/kritzel-brush-style.js +4 -4
- package/dist/components/kritzel-button.js +1 -1
- package/dist/components/kritzel-color-palette.js +1 -1
- package/dist/components/kritzel-color.js +1 -1
- package/dist/components/kritzel-context-menu.js +1 -1
- package/dist/components/kritzel-controls.js +1 -1
- package/dist/components/kritzel-current-user-dialog.js +1 -1
- package/dist/components/kritzel-current-user.js +1 -1
- package/dist/components/kritzel-cursor-trail.js +1 -1
- package/dist/components/kritzel-dialog.js +1 -1
- package/dist/components/kritzel-dropdown.js +1 -1
- package/dist/components/kritzel-editor.js +56 -61
- package/dist/components/kritzel-engine.js +1 -1
- package/dist/components/kritzel-export.js +1 -1
- package/dist/components/kritzel-font-family.js +1 -1
- package/dist/components/kritzel-font-size.js +1 -1
- package/dist/components/kritzel-font.js +1 -1
- package/dist/components/kritzel-icon.js +1 -1
- package/dist/components/kritzel-input.js +1 -1
- package/dist/components/kritzel-line-endings.js +1 -1
- package/dist/components/kritzel-loading-overlay.js +1 -1
- package/dist/components/kritzel-login-dialog.js +1 -1
- package/dist/components/kritzel-master-detail.js +1 -1
- package/dist/components/kritzel-menu-item.js +1 -1
- package/dist/components/kritzel-menu.js +1 -1
- package/dist/components/kritzel-more-menu.js +1 -1
- package/dist/components/kritzel-notification-card.js +1 -1
- package/dist/components/kritzel-numeric-input.js +1 -1
- package/dist/components/kritzel-opacity-slider.js +1 -1
- package/dist/components/kritzel-pill-tabs.js +1 -1
- package/dist/components/kritzel-portal.js +1 -1
- package/dist/components/kritzel-settings.js +1 -1
- package/dist/components/kritzel-shape-fill.js +1 -1
- package/dist/components/kritzel-share-dialog.js +1 -1
- package/dist/components/kritzel-slide-toggle.js +1 -1
- package/dist/components/kritzel-split-button.js +1 -1
- package/dist/components/kritzel-stroke-size.js +1 -1
- package/dist/components/kritzel-sync-indicator.js +1 -1
- package/dist/components/kritzel-tool-config.js +1 -1
- package/dist/components/kritzel-tooltip.js +1 -1
- package/dist/components/kritzel-utility-panel.js +1 -1
- package/dist/components/kritzel-watermark.js +1 -1
- package/dist/components/kritzel-workspace-manager.js +1 -1
- package/dist/components/kritzel-zoom-panel.js +1 -1
- package/dist/components/{p-jIKskj3S.js → p-1Q4VnThv.js} +3 -3
- package/dist/components/{p-Cm33td2O.js → p-3tBE7SyG.js} +2 -2
- package/dist/components/{p-fL9rl200.js → p-BFYT03fw.js} +3 -3
- package/dist/components/{p-DtnMdWWB.js → p-BShrnlam.js} +2 -2
- package/dist/components/{p-BsLI_BWq.js → p-BXUx_C0N.js} +2 -2
- package/dist/components/{p-CzW58DHM.js → p-BZZ3KRPk.js} +3 -3
- package/dist/components/{p-D1rjfWgJ.js → p-BkXQL5Dl.js} +5 -5
- package/dist/components/{p-eZXIu4yK.js → p-BppcoKoo.js} +5 -5
- package/dist/components/{p-DDTMGbtA.js → p-BrA9NBEE.js} +21 -21
- package/dist/components/{p-Czhdc844.js → p-BrqSjRJN.js} +3 -3
- package/dist/components/{p-CAoN_STZ.js → p-Bxi-Bm49.js} +2 -2
- package/dist/components/{p-B43upypT.js → p-C9_yBEoX.js} +30 -10
- package/dist/components/{p-Df3BwVGy.js → p-CHoOe3FD.js} +3 -3
- package/dist/components/{p-2WiGyky4.js → p-CLAz6RJc.js} +3 -3
- package/dist/components/{p-B5SWPDuq.js → p-CSKToqUl.js} +4 -4
- package/dist/components/{p-CF8pLc07.js → p-CSWCmyzb.js} +5 -5
- package/dist/components/{p-HoO86l1o.js → p-CWAChRD5.js} +12 -12
- package/dist/components/{p-DwMqCX2P.js → p-Ch-KG9To.js} +3 -3
- package/dist/components/{p-CSuU8frA.js → p-Ck-87E2G.js} +1 -1
- package/dist/components/{p-BFYtCsZu.js → p-Covorf4C.js} +3 -3
- package/dist/components/{p-BoN700-O.js → p-Cx-L_28S.js} +3 -3
- package/dist/components/{p-vqEUQ-4Q.js → p-D0Trc3IQ.js} +5 -5
- package/dist/components/{p-BrNsOp2v.js → p-D2VcPEtL.js} +6 -6
- package/dist/components/{p-CSPYkLLH.js → p-D3BzgkIE.js} +2 -2
- package/dist/components/{p-bAacqNHq.js → p-D6JycG-I.js} +3 -3
- package/dist/components/{p-DB58Oa5V.js → p-DPsbNStn.js} +2 -2
- package/dist/components/{p-CwZ3KKFq.js → p-DT_WBwsw.js} +6 -6
- package/dist/components/{p-Cb-xlpsJ.js → p-DW1B118Q.js} +9 -9
- package/dist/components/{p-BPsKYMH6.js → p-DYPA7jpg.js} +2 -2
- package/dist/components/{p-DBqoPgev.js → p-DafP9PAA.js} +2 -2
- package/dist/components/{p-Dt7-I2Xz.js → p-DcUIO14-.js} +4 -4
- package/dist/components/{p-CXpv9Rxe.js → p-Di--2boB.js} +3 -3
- package/dist/components/{p-djJSnjAX.js → p-DjXQxw9R.js} +3 -3
- package/dist/components/{p-DVXTPI71.js → p-Dp1CD4gK.js} +2 -2
- package/dist/components/{p-EijwLEZx.js → p-DwEYMvIn.js} +175 -186
- package/dist/components/{p-DKGg-76-.js → p-Dznwo6oc.js} +2 -2
- package/dist/components/{p-BozrueXV.js → p-ME1sDz3f.js} +2 -2
- package/dist/components/{p-B-585egz.js → p-MhQxGUvY.js} +3 -3
- package/dist/components/{p-DX2nriaq.js → p-QSyeAy8R.js} +2 -2
- package/dist/components/{p-PjPPCHVL.js → p-Qdo3E8dr.js} +2 -2
- package/dist/components/{p-dsxHDlQ3.js → p-b0J2ktAm.js} +7 -7
- package/dist/components/{p-C98Eb3_R.js → p-dAXnRkjA.js} +5 -5
- package/dist/components/{p-GKmqCI8r.js → p-fSV6KVTC.js} +3 -3
- package/dist/components/{p-CaBbajU2.js → p-o3NYKrVL.js} +3 -3
- package/dist/components/{p-CrHvaLRV.js → p-vDCa_ZDm.js} +3 -3
- package/dist/components/{p-4SPnZZkH.js → p-zG-WUBGF.js} +4 -4
- package/dist/esm/{index-Dhio9uis.js → index-2va1Pk9z.js} +47 -11
- package/dist/esm/index.js +3 -52
- package/dist/esm/kritzel-active-users_47.entry.js +198 -238
- package/dist/esm/kritzel-brush-style.entry.js +2 -2
- package/dist/esm/loader.js +2 -2
- package/dist/esm/{schema.constants-DfvqHmxc.js → schema.constants-DBvUmuDH.js} +44 -20
- package/dist/esm/stencil.js +3 -3
- package/dist/stencil/index.esm.js +3 -52
- package/dist/stencil/{p-Dhio9uis.js → p-2va1Pk9z.js} +47 -11
- package/dist/stencil/{p-DfvqHmxc.js → p-DBvUmuDH.js} +44 -20
- package/dist/stencil/{p-9e38407e.entry.js → p-ce6d432e.entry.js} +198 -238
- package/dist/stencil/{p-fb32cd8f.entry.js → p-df06ca3a.entry.js} +2 -2
- package/dist/stencil/stencil.esm.js +4 -4
- package/dist/types/classes/providers/sync/hocuspocus-sync-provider.class.d.ts +0 -5
- package/dist/types/classes/providers/sync/websocket-sync-provider.class.d.ts +0 -6
- package/dist/types/classes/structures/object-map.structure.d.ts +2 -26
- package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +0 -3
- package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +11 -9
- package/dist/types/components.d.ts +1 -8
- package/dist/types/constants/version.d.ts +1 -1
- package/dist/types/interfaces/sync-provider.interface.d.ts +0 -13
- package/dist/types/stencil-public-runtime.d.ts +12 -0
- package/loader/index.d.ts +1 -1
- package/package.json +1 -1
- package/readme.md +10 -10
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as registerInstance, h, H as Host, c as createEvent, g as getElement } from './index-
|
|
2
|
-
import { c as KritzelPath, e as KritzelLine, U as KritzelColorHelper, V as KritzelDevicesHelper, X as KritzelMouseButton, Y as KritzelHTMLHelper, Z as DEFAULT_STROKE_SIZES, _ as DEFAULT_COLOR_PALETTE, S as ShapeType, q as KritzelSelectionTool, D as DEFAULT_BRUSH_CONFIG, j as KritzelBrushTool, l as KritzelEraserTool, C as DEFAULT_LINE_TOOL_CONFIG, k as KritzelLineTool, o as KritzelShapeTool, B as DEFAULT_TEXT_CONFIG, n as KritzelTextTool, m as KritzelImageTool, N as KritzelAlignment, z as hasRemoteSyncProvider, E as DEFAULT_ASSET_STORAGE_CONFIG, $ as ObjectHelper, a0 as resolveTextToolAvailableFonts, a1 as ThemeHelper, G as darkTheme, F as lightTheme, a2 as KritzelSelectionGroup, a3 as KritzelSelectionBox, a4 as KritzelIconRegistry, y as KritzelFontRegistry, a5 as KritzelKeyboardHelper, a6 as KritzelBaseHandler, s as KritzelWorkspace, f as KritzelGroup, h as KritzelCustomElement, d as KritzelImage, g as KritzelShape, b as KritzelText, O as runMigrations, T as CURRENT_WORKSPACE_SCHEMA_VERSION, Q as WORKSPACE_MIGRATIONS, a7 as KritzelClassHelper, R as CURRENT_APP_STATE_SCHEMA_VERSION, P as APP_STATE_MIGRATIONS, p as KritzelCursorHelper, a8 as KritzelImageFileHelper, a9 as imageCompression, t as KritzelAnchorManager, u as KritzelThemeManager, v as KritzelLocalizationManager, w as KritzelLicenseManager, r as KritzelAssetResolver, aa as KritzelEventHelper, W as WORKSPACE_EXPORT_VERSION, i as KritzelBaseTool } from './schema.constants-
|
|
1
|
+
import { r as registerInstance, h, H as Host, c as createEvent, g as getElement } from './index-2va1Pk9z.js';
|
|
2
|
+
import { c as KritzelPath, e as KritzelLine, U as KritzelColorHelper, V as KritzelDevicesHelper, X as KritzelMouseButton, Y as KritzelHTMLHelper, Z as DEFAULT_STROKE_SIZES, _ as DEFAULT_COLOR_PALETTE, S as ShapeType, q as KritzelSelectionTool, D as DEFAULT_BRUSH_CONFIG, j as KritzelBrushTool, l as KritzelEraserTool, C as DEFAULT_LINE_TOOL_CONFIG, k as KritzelLineTool, o as KritzelShapeTool, B as DEFAULT_TEXT_CONFIG, n as KritzelTextTool, m as KritzelImageTool, N as KritzelAlignment, z as hasRemoteSyncProvider, E as DEFAULT_ASSET_STORAGE_CONFIG, $ as ObjectHelper, a0 as resolveTextToolAvailableFonts, a1 as ThemeHelper, G as darkTheme, F as lightTheme, a2 as KritzelSelectionGroup, a3 as KritzelSelectionBox, a4 as KritzelIconRegistry, y as KritzelFontRegistry, a5 as KritzelKeyboardHelper, a6 as KritzelBaseHandler, s as KritzelWorkspace, f as KritzelGroup, h as KritzelCustomElement, d as KritzelImage, g as KritzelShape, b as KritzelText, O as runMigrations, T as CURRENT_WORKSPACE_SCHEMA_VERSION, Q as WORKSPACE_MIGRATIONS, a7 as KritzelClassHelper, R as CURRENT_APP_STATE_SCHEMA_VERSION, P as APP_STATE_MIGRATIONS, p as KritzelCursorHelper, a8 as KritzelImageFileHelper, a9 as imageCompression, t as KritzelAnchorManager, u as KritzelThemeManager, v as KritzelLocalizationManager, w as KritzelLicenseManager, r as KritzelAssetResolver, aa as KritzelEventHelper, W as WORKSPACE_EXPORT_VERSION, i as KritzelBaseTool } from './schema.constants-DBvUmuDH.js';
|
|
3
3
|
import * as Y from 'yjs';
|
|
4
4
|
import 'y-indexeddb';
|
|
5
5
|
import 'y-websocket';
|
|
@@ -136,16 +136,16 @@ const KritzelAvatar = class {
|
|
|
136
136
|
height: `${this.size}px`,
|
|
137
137
|
fontSize: `${Math.round(this.size * 0.4)}px`,
|
|
138
138
|
};
|
|
139
|
-
return (h(Host, { key: '
|
|
139
|
+
return (h(Host, { key: '020217baf0aa2736af33c5a003e89406322e5fdc', style: containerStyles, class: {
|
|
140
140
|
'has-image': !!showImage,
|
|
141
141
|
'has-initials': !!showInitials,
|
|
142
142
|
'has-default': !!showDefaultIcon,
|
|
143
|
-
}, role: "img", "aria-label": this.getDisplayName() || 'User avatar' }, showImage && (h("img", { key: '
|
|
143
|
+
}, role: "img", "aria-label": this.getDisplayName() || 'User avatar' }, showImage && (h("img", { key: '2f54dad2260ebf38cfe8c57e28899c98729e7e38', src: imageUrl, alt: "", class: "avatar-image", ref: (el) => {
|
|
144
144
|
if (el) {
|
|
145
145
|
el.referrerPolicy = 'no-referrer';
|
|
146
146
|
el.crossOrigin = 'anonymous';
|
|
147
147
|
}
|
|
148
|
-
}, onError: this.handleImageError })), showInitials && (h("span", { key: '
|
|
148
|
+
}, onError: this.handleImageError })), showInitials && (h("span", { key: 'a97435d30044a37f15ce72ed51439e9c682c0aa3', class: "avatar-initials", style: { backgroundColor: this.getBackgroundColor() } }, initials)), showDefaultIcon && (h("span", { key: '6d0893d3f15a2d68a93f3fcf1b0fbd36786be0eb', class: "avatar-default" }, h("svg", { key: '688a9a1f88e22f4f3c3085675618b5f5f460d8f7', viewBox: "0 0 24 24", fill: "currentColor" }, h("path", { key: 'd12c67677e162534b2ad92535acc6a836df179c7', d: "M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z" }))))));
|
|
149
149
|
}
|
|
150
150
|
static get watchers() { return {
|
|
151
151
|
"user": [{
|
|
@@ -158,7 +158,7 @@ const KritzelAvatar = class {
|
|
|
158
158
|
};
|
|
159
159
|
KritzelAvatar.style = kritzelAvatarCss();
|
|
160
160
|
|
|
161
|
-
const kritzelAwarenessCursorsCss = () => `:host{display:block;position:fixed;top:0;left:0;width:100vw;height:100vh;pointer-events:none;z-index:1}.awareness-cursor{position:absolute;top:0;left:0;transition:transform var(--kritzel-awareness-cursor-transition-duration, 100ms) ease-out,
|
|
161
|
+
const kritzelAwarenessCursorsCss = () => `:host{display:block;position:fixed;top:0;left:0;width:100vw;height:100vh;pointer-events:none;z-index:1}.awareness-cursor{position:absolute;top:0;left:0;transition:transform var(--kritzel-awareness-cursor-transition-duration, 100ms) ease-out, opacity 300ms ease;will-change:transform}.awareness-cursor.stale{opacity:0}.awareness-cursor.tracking-object{transition-duration:0ms}.cursor-arrow{filter:drop-shadow(0 1px 2px rgba(0, 0, 0, 0.3))}.cursor-label{position:absolute;left:16px;top:16px;white-space:nowrap;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;font-size:var(--kritzel-awareness-cursor-label-font-size, 12px);color:var(--kritzel-awareness-cursor-label-text-color, #ffffff);padding:2px 8px;border-radius:4px;line-height:1.4;font-weight:500;pointer-events:none;user-select:none}.edge-indicator{position:absolute;top:-12px;left:-12px;width:24px;height:24px;display:flex;align-items:center;justify-content:center;transition:transform var(--kritzel-awareness-cursor-transition-duration, 100ms) ease-out, opacity 300ms ease;will-change:transform;pointer-events:auto;user-select:none;cursor:pointer}.edge-indicator.stale{opacity:0}.edge-indicator.tracking-object{transition-duration:0ms}.edge-arrow{position:absolute;filter:drop-shadow(0 1px 3px rgba(0, 0, 0, 0.3));transition:opacity 300ms ease}.edge-arrow.stale{opacity:0}.edge-label{position:absolute;white-space:nowrap;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;font-size:var(--kritzel-awareness-cursor-label-font-size, 12px);color:var(--kritzel-awareness-cursor-label-text-color, #ffffff);padding:2px 8px;border-radius:4px;line-height:1.4;font-weight:500;pointer-events:none;opacity:0;transform-origin:center;transition:opacity 150ms ease}.edge-indicator:hover .edge-label{opacity:1}.remote-selection-box{position:absolute;top:0;left:0;border-width:2px;border-style:solid;pointer-events:none;will-change:transform, width, height;transition:transform var(--kritzel-awareness-cursor-transition-duration, 100ms) ease-out, width var(--kritzel-awareness-cursor-transition-duration, 100ms) ease-out, height var(--kritzel-awareness-cursor-transition-duration, 100ms) ease-out}`;
|
|
162
162
|
|
|
163
163
|
const STALE_THRESHOLD_MS = 10_000;
|
|
164
164
|
const REMOVE_THRESHOLD_MS = 30_000;
|
|
@@ -363,7 +363,7 @@ const KritzelAwarenessCursors = class {
|
|
|
363
363
|
}
|
|
364
364
|
render() {
|
|
365
365
|
const cursors = Array.from(this.remoteCursors.values());
|
|
366
|
-
return (h(Host, { key: '
|
|
366
|
+
return (h(Host, { key: 'b157f337127f7e5852acc0d6a246fa42e944a501' }, cursors.map(remoteCursor => {
|
|
367
367
|
if (!remoteCursor.cursor)
|
|
368
368
|
return null;
|
|
369
369
|
// When a remote user is actively drawing, derive cursor position from
|
|
@@ -470,7 +470,7 @@ const KritzelBackToContent = class {
|
|
|
470
470
|
this.backToContent.emit();
|
|
471
471
|
};
|
|
472
472
|
render() {
|
|
473
|
-
return (h(Host, { key: '
|
|
473
|
+
return (h(Host, { key: '612164b48226601d863cb2acdab1d567e9652188' }, h("button", { key: '159a4f4f01934c03c7898f2803bf87d5f0d95aba', class: { 'back-to-content-button': true, visible: this.visible }, onClick: this.handleClick, "aria-label": this.text }, h("kritzel-icon", { key: 'e7ec1308ab12ca233509a00fc76df17fce1f5700', name: "chevrons-left" }))));
|
|
474
474
|
}
|
|
475
475
|
};
|
|
476
476
|
KritzelBackToContent.style = kritzelBackToContentCss();
|
|
@@ -497,16 +497,16 @@ const KritzelButton = class {
|
|
|
497
497
|
this.buttonClick.emit();
|
|
498
498
|
};
|
|
499
499
|
render() {
|
|
500
|
-
return (h(Host, { key: '
|
|
500
|
+
return (h(Host, { key: 'ef407708a606dab1ac691b6c6f1c319ba5529e3b' }, h("button", { key: '5b26e220334c3ee20e0af433792496568067ca8c', type: this.type, class: {
|
|
501
501
|
'kritzel-button': true,
|
|
502
502
|
[this.variant]: true,
|
|
503
503
|
'disabled': this.disabled,
|
|
504
|
-
}, disabled: this.disabled, onClick: this.handleClick }, h("slot", { key: '
|
|
504
|
+
}, disabled: this.disabled, onClick: this.handleClick }, h("slot", { key: '5272679ba3b67e3d7c0ec1b2ef0b3829ef4204ba' }))));
|
|
505
505
|
}
|
|
506
506
|
};
|
|
507
507
|
KritzelButton.style = kritzelButtonCss();
|
|
508
508
|
|
|
509
|
-
const kritzelColorCss = () => `:host{display:flex}.checkerboard-bg{background:repeating-conic-gradient(
|
|
509
|
+
const kritzelColorCss = () => `:host{display:flex}.checkerboard-bg{background:repeating-conic-gradient( var(--kritzel-checkerboard-color-dark, #ccc) 0% 25%, var(--kritzel-checkerboard-color-light, #fff) 0% 50% ) 50% / 8px 8px;position:relative;overflow:hidden}.color-circle{width:24px;height:24px;border-radius:50%;box-sizing:border-box;display:block}.color-circle.white{border:1px solid var(--kritzel-color-palette-circle-border-color, #dddcdc)}`;
|
|
510
510
|
|
|
511
511
|
const KritzelColorComponent = class {
|
|
512
512
|
constructor(hostRef) {
|
|
@@ -549,13 +549,13 @@ const KritzelColorComponent = class {
|
|
|
549
549
|
render() {
|
|
550
550
|
const resolvedColor = this.resolveColor();
|
|
551
551
|
const isColorVeryLight = this.isLightColor(resolvedColor);
|
|
552
|
-
return (h(Host, { key: '
|
|
552
|
+
return (h(Host, { key: '30141c62ff9860237c22044f2c5101ed6516ff82' }, h("div", { key: '61818f71999a782871d4ec9ba00ef0c77e3c8b54', class: "checkerboard-bg", style: {
|
|
553
553
|
width: `${this.size}px`,
|
|
554
554
|
height: `${this.size}px`,
|
|
555
555
|
borderRadius: '50%',
|
|
556
556
|
display: 'inline-block',
|
|
557
557
|
position: 'relative',
|
|
558
|
-
} }, h("div", { key: '
|
|
558
|
+
} }, h("div", { key: 'a064cc28a354db78f6637c92f38e59ac4ebf1f95', class: {
|
|
559
559
|
'color-circle': true,
|
|
560
560
|
'white': isColorVeryLight,
|
|
561
561
|
}, style: {
|
|
@@ -611,7 +611,7 @@ const KritzelColorPalette = class {
|
|
|
611
611
|
render() {
|
|
612
612
|
const displayedColors = this.isExpanded ? this.colors : this.colors.slice(0, 6);
|
|
613
613
|
const expandedHeight = this.isExpanded ? this.calculateHeight() : '32px';
|
|
614
|
-
return (h(Host, { key: '
|
|
614
|
+
return (h(Host, { key: '0fd02d97504f68ffbbac2fb2b6af702f0de71038' }, h("div", { key: '5f546350d0c2d528165987a177b8bd9d0015ccba', class: {
|
|
615
615
|
'color-grid': true,
|
|
616
616
|
'expanded': this.isExpanded,
|
|
617
617
|
}, style: {
|
|
@@ -1180,13 +1180,13 @@ const KritzelControls = class {
|
|
|
1180
1180
|
// Separate tool controls from config control
|
|
1181
1181
|
const toolControls = this.internalControls.filter(c => c.type === 'tool' || c.type === 'separator');
|
|
1182
1182
|
const configControl = this.internalControls.find(c => c.type === 'config' && c.name === this.firstConfig?.name);
|
|
1183
|
-
return (h(Host, { key: '
|
|
1183
|
+
return (h(Host, { key: '0c61b173d0a92351de148c9c98b25031f231e1ab', style: { display: this.visible ? '' : 'none' }, class: {
|
|
1184
1184
|
mobile: this.isTouchDevice,
|
|
1185
|
-
} }, this.isUtilityPanelVisible && (h("kritzel-utility-panel", { key: '
|
|
1185
|
+
} }, this.isUtilityPanelVisible && (h("kritzel-utility-panel", { key: 'a696e0af5f126456e610a6353377cb5a68b4fcb4', style: {
|
|
1186
1186
|
position: 'absolute',
|
|
1187
1187
|
bottom: '56px',
|
|
1188
1188
|
left: '12px',
|
|
1189
|
-
}, undoState: this.undoState, terms: this.terms, onUndo: () => this.kritzelEngine?.undo(), onRedo: () => this.kritzelEngine?.redo(), onDelete: () => this.kritzelEngine?.delete() })), h("div", { key: '
|
|
1189
|
+
}, undoState: this.undoState, terms: this.terms, onUndo: () => this.kritzelEngine?.undo(), onRedo: () => this.kritzelEngine?.redo(), onDelete: () => this.kritzelEngine?.delete() })), h("div", { key: 'ffe96a9b2b73d3e08c7d149fd64b9b209eaf47d3', class: "kritzel-controls" }, h("div", { key: 'a351b3a4a801a4480d2476a6ca34bbbd628525ac', class: { 'scroll-indicator-left': true, 'visible': this.canScrollLeft } }), h("div", { key: '9447a0d4728d4d476113a2bcb94f53a5652f7dd1', class: "kritzel-tools-scroll", ref: el => (this.toolsScrollRef = el), onScroll: this.handleToolsScroll }, toolControls.map(control => {
|
|
1190
1190
|
// Check if this control has sub-options (split-button)
|
|
1191
1191
|
if (control.subOptions?.length) {
|
|
1192
1192
|
const selectedSubOption = this.getSelectedSubOption(control);
|
|
@@ -1216,10 +1216,10 @@ const KritzelControls = class {
|
|
|
1216
1216
|
'kritzel-control': true,
|
|
1217
1217
|
'selected': this.activeControl?.name === control?.name,
|
|
1218
1218
|
}, key: control.name, "data-testid": `tool-${control.name}`, onClick: _event => this.handleControlClick?.(control), "aria-label": control.name.charAt(0).toUpperCase() + control.name.slice(1) }, h("kritzel-icon", { name: control.icon })));
|
|
1219
|
-
})), h("div", { key: '
|
|
1219
|
+
})), h("div", { key: '31a1d141b1381c9aa0b7f07c1ae7d1606d1a8fc6', class: { 'scroll-indicator-right': true, 'visible': this.canScrollRight && !(configControl && this.activeControl && hasConfigUI) } }), configControl && this.activeControl && (h("div", { class: {
|
|
1220
1220
|
'kritzel-config-container': true,
|
|
1221
1221
|
'visible': hasConfigUI,
|
|
1222
|
-
}, key: configControl.name }, h("div", { key: '
|
|
1222
|
+
}, key: configControl.name }, h("div", { key: 'ed4b6440e5b99b68a29269476de7efa15ecec38f', class: { 'config-gradient-left': true, 'visible': this.needsScrolling } }), h("kritzel-tooltip", { key: 'cac5417d5e1a8c4ec19fbcf38affb30ac67b521e', anchorElement: this.host.shadowRoot?.querySelector('.kritzel-config-container'), triggerElement: this.configTriggerRef }, h("kritzel-tool-config", { key: 'ffba221a22ab50b4c44c0247ef9e86e4b67e5bde', tool: this.activeControl.tool, theme: this.theme, engine: this.kritzelEngine, terms: this.terms, onToolChange: event => this.handleToolChange?.(event), onDisplayValuesChange: this.handleDisplayValuesChange, style: { width: '100%', height: '100%' } })), h("div", { key: '1f5b90e286d5aa8fcf10aa3987c6c6cd75360d49', tabIndex: hasConfigUI ? 0 : -1, class: "kritzel-config", "data-testid": "tool-config", ref: el => {
|
|
1223
1223
|
if (el)
|
|
1224
1224
|
this.configTriggerRef = el;
|
|
1225
1225
|
}, onKeyDown: event => {
|
|
@@ -1228,7 +1228,7 @@ const KritzelControls = class {
|
|
|
1228
1228
|
}
|
|
1229
1229
|
}, style: {
|
|
1230
1230
|
cursor: 'pointer',
|
|
1231
|
-
} }, this.displayValues && (h("div", { key: '
|
|
1231
|
+
} }, this.displayValues && (h("div", { key: '3857f9f2bc30ddac57d108a8021061edc5decb07', class: "color-container" }, h("kritzel-color", { key: '304eda20d9036bf567db7a4f146f1b07a8ca4c34', value: this.displayValues.color, theme: this.theme, size: 18, style: {
|
|
1232
1232
|
borderRadius: '50%',
|
|
1233
1233
|
border: 'none',
|
|
1234
1234
|
} })))))))));
|
|
@@ -1262,7 +1262,7 @@ const KritzelCurrentUser = class {
|
|
|
1262
1262
|
/** Resolved localized strings keyed by term key, supplied by the editor. */
|
|
1263
1263
|
terms = {};
|
|
1264
1264
|
render() {
|
|
1265
|
-
return (h(Host, { key: '
|
|
1265
|
+
return (h(Host, { key: '05ff7ea13b5a4850ae49672dfab15280b97e50a1' }, h("kritzel-avatar", { key: '4c33f853508509337033afd7015d7367c5c81d49', user: this.user, size: this.avatarSize })));
|
|
1266
1266
|
}
|
|
1267
1267
|
};
|
|
1268
1268
|
KritzelCurrentUser.style = kritzelCurrentUserCss();
|
|
@@ -1303,7 +1303,7 @@ const KritzelCurrentUserDialog = class {
|
|
|
1303
1303
|
}
|
|
1304
1304
|
render() {
|
|
1305
1305
|
const displayName = this.getDisplayName();
|
|
1306
|
-
return (h(Host, { key: '
|
|
1306
|
+
return (h(Host, { key: 'bb0e0c4181b562bcf6f930508d0799dd24dceb70' }, h("kritzel-dialog", { key: '94b668b6d4c773b30bae2dfad437a0043048dbf3', dialogTitle: this.terms['currentUser.dialogTitle'] ?? 'Account', isOpen: this.isDialogOpen, onDialogClose: this.closeDialog, size: "small", contained: true }, h("div", { key: '7023664c08e42668e44d5e1f57fa0d020b65d452', class: "user-info" }, h("kritzel-avatar", { key: '461af0f69cb606ad37f779fc5971296f82e2ff34', user: this.user, size: 80 }), displayName && h("div", { key: '60c6e416942465a9afb872ed12cfec4788c580c9', class: "user-name" }, displayName), this.user?.email && h("div", { key: '74a78e08f1aae64ee7e6ba84ca0eeb2efa1650bc', class: "user-email" }, this.user.email), h("kritzel-button", { key: '2b0bc8ded74baeee7a59b958e1529cd1b8862cd1', class: "logout-button", variant: "primary", onButtonClick: this.handleLogout }, this.terms['menu.logout'] ?? 'Logout')))));
|
|
1307
1307
|
}
|
|
1308
1308
|
};
|
|
1309
1309
|
KritzelCurrentUserDialog.style = kritzelCurrentUserDialogCss();
|
|
@@ -1376,7 +1376,7 @@ const KritzelCursorTrail = class {
|
|
|
1376
1376
|
}
|
|
1377
1377
|
}
|
|
1378
1378
|
render() {
|
|
1379
|
-
return (h(Host, { key: '
|
|
1379
|
+
return (h(Host, { key: 'cf2cf1c689bdc8ea393a7ea8f32698cfcdb0e375' }, this.cursorTrailPoints.length > 1 && (h("svg", { key: 'df38c45537217982f7fb9513b954f3b0fa27acea', class: "cursor-trail-svg", xmlns: "http://www.w3.org/2000/svg", style: {
|
|
1380
1380
|
position: 'absolute',
|
|
1381
1381
|
left: '0',
|
|
1382
1382
|
top: '0',
|
|
@@ -1399,7 +1399,7 @@ const KritzelCursorTrail = class {
|
|
|
1399
1399
|
};
|
|
1400
1400
|
KritzelCursorTrail.style = kritzelCursorTrailCss();
|
|
1401
1401
|
|
|
1402
|
-
const kritzelDialogCss = () => `:host{display:contents}.dialog-content{text-align:start;line-height:normal}.backdrop{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10002;display:flex;align-items:center;justify-content:center;background-color:var(--kritzel-dialog-backdrop-color, rgba(0, 0, 0, 0.5));opacity:1;transition:opacity 150ms ease-out}.backdrop.is-animating{opacity:0}.dialog-content{position:relative;display:flex;flex-direction:column;background-color:var(--kritzel-dialog-background-color, #ffffff);border-radius:var(--kritzel-dialog-border-radius, 12px);box-shadow:var(--kritzel-dialog-box-shadow, 0 4px 20px rgba(0, 0, 0, 0.15));border:var(--kritzel-dialog-border, 1px solid #ebebeb);max-height:var(--kritzel-dialog-max-height, 90vh);max-width:var(--kritzel-dialog-max-width, 90vw);overflow:hidden;transform:scale(1);opacity:1;transition:transform 200ms ease-out,
|
|
1402
|
+
const kritzelDialogCss = () => `:host{display:contents}.dialog-content{text-align:start;line-height:normal}.backdrop{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10002;display:flex;align-items:center;justify-content:center;background-color:var(--kritzel-dialog-backdrop-color, rgba(0, 0, 0, 0.5));opacity:1;transition:opacity 150ms ease-out}.backdrop.is-animating{opacity:0}.dialog-content{position:relative;display:flex;flex-direction:column;background-color:var(--kritzel-dialog-background-color, #ffffff);border-radius:var(--kritzel-dialog-border-radius, 12px);box-shadow:var(--kritzel-dialog-box-shadow, 0 4px 20px rgba(0, 0, 0, 0.15));border:var(--kritzel-dialog-border, 1px solid #ebebeb);max-height:var(--kritzel-dialog-max-height, 90vh);max-width:var(--kritzel-dialog-max-width, 90vw);overflow:hidden;transform:scale(1);opacity:1;transition:transform 200ms ease-out, opacity 200ms ease-out;font-family:var(--kritzel-dialog-font-family, sans-serif)}.dialog-content.is-animating{transform:scale(0.95);opacity:0}.dialog-content.size-small{width:var(--kritzel-dialog-width-small, 320px);height:var(--kritzel-dialog-height-small, auto)}.dialog-content.size-medium{width:var(--kritzel-dialog-width-medium, 480px);height:var(--kritzel-dialog-height-medium, auto)}.dialog-content.size-large{width:var(--kritzel-dialog-width-large, 640px);height:var(--kritzel-dialog-height-large, auto)}.dialog-content.size-fullscreen{width:100vw;height:100vh;height:100dvh;max-width:100vw;max-height:100vh;max-height:100dvh;border-radius:0}.backdrop.contained-fullscreen{background-color:transparent}.dialog-content.contained-fullscreen{border-radius:0}.dialog-content.contained-fullscreen .dialog-body{display:flex;flex-direction:column}.dialog-content.contained-fullscreen .dialog-body ::slotted(*){flex:1;min-height:0}@media (max-width: 576px), (max-height: 576px) and (orientation: landscape){.backdrop:has(.fullscreen-on-mobile){background-color:transparent}.dialog-content.fullscreen-on-mobile{width:100vw;height:100vh;height:100dvh;max-width:100vw;max-height:100vh;max-height:100dvh;border-radius:0}.dialog-content.fullscreen-on-mobile .dialog-body{display:flex;flex-direction:column}.dialog-content.fullscreen-on-mobile .dialog-body ::slotted(*){flex:1;min-height:0}}.dialog-header{display:flex;align-items:center;justify-content:space-between;padding:var(--kritzel-dialog-header-padding, 16px 20px);border-bottom:var(--kritzel-dialog-header-border, 1px solid #ebebeb);gap:12px}.dialog-title{margin:0;font-size:var(--kritzel-dialog-title-font-size, 18px);font-weight:var(--kritzel-dialog-title-font-weight, 600);color:var(--kritzel-dialog-title-color, #1a1a1a);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.close-button{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:var(--kritzel-dialog-close-button-border-radius, 6px);background-color:var(--kritzel-dialog-close-button-background, transparent);color:var(--kritzel-dialog-close-button-color, #666666);cursor:var(--kritzel-global-pointer-cursor, pointer);transition:background-color 150ms ease, color 150ms ease;flex-shrink:0;-webkit-tap-highlight-color:transparent}.close-button:hover{background-color:var(--kritzel-dialog-close-button-hover-background, #f5f5f5);color:var(--kritzel-dialog-close-button-hover-color, #1a1a1a)}.close-button:active{background-color:var(--kritzel-dialog-close-button-active-background, #ebebeb)}.close-button:focus-visible{outline:revert;outline-offset:revert}.dialog-body{padding:var(--kritzel-dialog-body-padding, 20px);overflow-y:auto;flex:1;min-height:0;scrollbar-color:var(--kritzel-global-scrollbar-thumb-color, #ebebeb) transparent;scrollbar-width:thin}.dialog-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--kritzel-dialog-footer-gap, 8px);padding:var(--kritzel-dialog-footer-padding, 16px 20px);border-top:var(--kritzel-dialog-footer-border, 1px solid #ebebeb)}::slotted([slot='header']){flex:1}::slotted([slot='footer']){display:contents}`;
|
|
1403
1403
|
|
|
1404
1404
|
const KritzelDialog = class {
|
|
1405
1405
|
constructor(hostRef) {
|
|
@@ -1842,7 +1842,7 @@ const KritzelDialog = class {
|
|
|
1842
1842
|
};
|
|
1843
1843
|
KritzelDialog.style = kritzelDialogCss();
|
|
1844
1844
|
|
|
1845
|
-
const kritzelDropdownCss = () => `:host{display:inline-flex;vertical-align:middle;width:100%;position:relative}.dropdown-wrapper{display:flex;align-items:center;border:1px solid var(--kritzel-dropdown-border-color, #ebebeb);border-radius:var(--kritzel-dropdown-border-radius, 6px);overflow:visible;height:38px;width:100%;position:relative}.dropdown-wrapper:hover:not(:focus-within){border-color:var(--kritzel-dropdown-hover-border-color, #cccccc)}.dropdown-container{flex:1;height:100%;min-width:0}.dropdown-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 8px;height:100%;width:100%;box-sizing:border-box;border-radius:var(--kritzel-dropdown-border-radius, 6px);border:none;background-color:var(--kritzel-dropdown-background, #ffffff);cursor:var(--kritzel-global-pointer-cursor, pointer);outline:none;font-size:inherit;font-family:inherit;color:var(--kritzel-dropdown-text-color, #333333);-webkit-tap-highlight-color:transparent;text-align:left}.dropdown-trigger:focus-visible{outline:revert}.dropdown-trigger.has-suffix-border{border-right:1px solid var(--kritzel-global-border-color, #ebebeb);border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-trigger.has-prefix-border{border-left:1px solid var(--kritzel-global-border-color, #ebebeb);border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-trigger-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.dropdown-trigger-arrow{display:flex;align-items:center;justify-content:center;width:16px;height:16px;flex-shrink:0;transition:transform 0.2s ease}.dropdown-trigger-arrow svg{width:100%;height:100%}.dropdown-trigger.is-open .dropdown-trigger-arrow{transform:rotate(180deg)}.dropdown-trigger.is-open.open-up .dropdown-trigger-arrow{transform:rotate(0deg)}.dropdown-menu{position:absolute;left:0;right:0;margin:0;padding:4px 0;list-style:none;background-color:var(--kritzel-dropdown-background, #ffffff);border:1px solid var(--kritzel-global-border-color, #ebebeb);border-radius:var(--kritzel-dropdown-menu-border-radius, var(--kritzel-dropdown-border-radius, 6px));box-shadow:var(--kritzel-controls-box-shadow, 0 4px 12px rgba(0, 0, 0, 0.15));z-index:1000;max-height:240px;overflow-y:auto;opacity:0;visibility:hidden;transition:opacity 0.15s ease,
|
|
1845
|
+
const kritzelDropdownCss = () => `:host{display:inline-flex;vertical-align:middle;width:100%;position:relative}.dropdown-wrapper{display:flex;align-items:center;border:1px solid var(--kritzel-dropdown-border-color, #ebebeb);border-radius:var(--kritzel-dropdown-border-radius, 6px);overflow:visible;height:38px;width:100%;position:relative}.dropdown-wrapper:hover:not(:focus-within){border-color:var(--kritzel-dropdown-hover-border-color, #cccccc)}.dropdown-container{flex:1;height:100%;min-width:0}.dropdown-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 8px;height:100%;width:100%;box-sizing:border-box;border-radius:var(--kritzel-dropdown-border-radius, 6px);border:none;background-color:var(--kritzel-dropdown-background, #ffffff);cursor:var(--kritzel-global-pointer-cursor, pointer);outline:none;font-size:inherit;font-family:inherit;color:var(--kritzel-dropdown-text-color, #333333);-webkit-tap-highlight-color:transparent;text-align:left}.dropdown-trigger:focus-visible{outline:revert}.dropdown-trigger.has-suffix-border{border-right:1px solid var(--kritzel-global-border-color, #ebebeb);border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-trigger.has-prefix-border{border-left:1px solid var(--kritzel-global-border-color, #ebebeb);border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-trigger-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.dropdown-trigger-arrow{display:flex;align-items:center;justify-content:center;width:16px;height:16px;flex-shrink:0;transition:transform 0.2s ease}.dropdown-trigger-arrow svg{width:100%;height:100%}.dropdown-trigger.is-open .dropdown-trigger-arrow{transform:rotate(180deg)}.dropdown-trigger.is-open.open-up .dropdown-trigger-arrow{transform:rotate(0deg)}.dropdown-menu{position:absolute;left:0;right:0;margin:0;padding:4px 0;list-style:none;background-color:var(--kritzel-dropdown-background, #ffffff);border:1px solid var(--kritzel-global-border-color, #ebebeb);border-radius:var(--kritzel-dropdown-menu-border-radius, var(--kritzel-dropdown-border-radius, 6px));box-shadow:var(--kritzel-controls-box-shadow, 0 4px 12px rgba(0, 0, 0, 0.15));z-index:1000;max-height:240px;overflow-y:auto;opacity:0;visibility:hidden;transition:opacity 0.15s ease, transform 0.15s ease, visibility 0.15s;outline:none}.dropdown-menu.open-down{top:calc(100% + 4px);bottom:auto;transform:translateY(-8px)}.dropdown-menu.open-up{bottom:calc(100% + 4px);top:auto;transform:translateY(8px)}.dropdown-menu.is-open{opacity:1;visibility:inherit;transform:translateY(0)}.dropdown-menu.open-up{box-shadow:var(--kritzel-controls-box-shadow, 0 -4px 12px rgba(0, 0, 0, 0.15))}.dropdown-option{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px;cursor:var(--kritzel-global-pointer-cursor, pointer);color:var(--kritzel-dropdown-text-color, #333333);transition:background-color 0.1s ease;-webkit-tap-highlight-color:transparent}.dropdown-option.is-focused{background-color:var(--kritzel-dropdown-hover-background-color, #f0f0f0)}.dropdown-option.is-selected{font-weight:600;background-color:var(--kritzel-dropdown-selected-background-color, #007bff1a)}.dropdown-option-check{display:flex;align-items:center;justify-content:center;width:16px;height:16px;flex-shrink:0;color:var(--kritzel-dropdown-accent-color, #007bff)}.dropdown-option-check svg{width:100%;height:100%}.dropdown-menu{scrollbar-color:var(--kritzel-global-scrollbar-thumb-color, #ebebeb) transparent;scrollbar-width:thin}::slotted(*){height:100%;box-sizing:border-box}`;
|
|
1846
1846
|
|
|
1847
1847
|
const KritzelDropdown = class {
|
|
1848
1848
|
constructor(hostRef) {
|
|
@@ -2080,7 +2080,7 @@ const KritzelDropdown = class {
|
|
|
2080
2080
|
'open-up': this.openDirection === 'up',
|
|
2081
2081
|
'open-down': this.openDirection === 'down',
|
|
2082
2082
|
};
|
|
2083
|
-
return (h(Host, { key: '
|
|
2083
|
+
return (h(Host, { key: '66ec6cbffa9fd25a7bad62d6e3477c0fe7726861' }, h("div", { key: '6dc1f20070dde95ab54f44d158659e99bd81b834', class: "dropdown-wrapper", ref: el => (this.wrapperElement = el) }, h("slot", { key: 'd9655fc7f5e6a0d74b4a1904a12cc0bf478ccf4e', name: "prefix", ref: el => (this.prefixSlotElement = el), onSlotchange: this.evaluatePrefixContent }), h("div", { key: '325af053df9588e99b493c422a1f369f0af2243a', class: "dropdown-container", style: { width: this.width } }, h("button", { key: '626d54cd8e01221b1cd61e61b9d53b534e7603db', type: "button", class: triggerClasses, style: { ...this.selectStyles, ...this.getSelectedStyle() }, onClick: this.toggleMenu, onKeyDown: this.handleTriggerKeyDown, "aria-haspopup": "listbox", "aria-expanded": this.isOpen ? 'true' : 'false', ref: el => (this.triggerElement = el) }, h("span", { key: 'bbc3ec7297ee98c1903cfd547ca20daf3a5f1311', class: "dropdown-trigger-label" }, this.getSelectedLabel()), h("span", { key: '591b71aec72d2e6eaa96e8eb4c91b1f34eb2177a', class: "dropdown-trigger-arrow", "aria-hidden": "true" }, h("svg", { key: '317034d40ceab9ca72090f6a58fc0fa5b92f2db0', xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, h("polyline", { key: '98867959ff1d7fd5515a3fe400bdc2378013dcb9', points: "6 9 12 15 18 9" }))))), h("slot", { key: 'f9d2f73f7b233a30f57ba4a9209e1a32a8ee5e70', name: "suffix", ref: el => (this.suffixSlotElement = el), onSlotchange: this.evaluateSuffixContent }), h("ul", { key: 'f15048910c0d24855fb1e940d2adc994dee83d06', class: menuClasses, role: "listbox", tabindex: "-1", onKeyDown: this.handleMenuKeyDown, ref: el => (this.menuElement = el) }, this.options.map((option, index) => {
|
|
2084
2084
|
const isSelected = option.value === this.internalValue;
|
|
2085
2085
|
const isFocused = index === this.focusedIndex;
|
|
2086
2086
|
const optionClasses = {
|
|
@@ -2127,7 +2127,7 @@ const DEFAULT_SYNC_CONFIG = {
|
|
|
2127
2127
|
providers: [],
|
|
2128
2128
|
};
|
|
2129
2129
|
|
|
2130
|
-
const kritzelEditorCss = () => `kritzel-editor{display:flex;margin:0;position:relative;container-type:inline-size;overflow:hidden;width:100%;height:100%;align-items:center;justify-content:center;touch-action:manipulation;user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:start;line-height:normal}.editor-content{position:absolute;inset:0}.editor-content>kritzel-engine{position:absolute;inset:0;z-index:0}kritzel-controls{position:absolute;z-index:1;left:0;right:0;margin-inline:auto;width:max-content;max-width:calc(100% - 16px);bottom:var(--kritzel-editor-controls-bottom, 14px);transition:transform var(--kritzel-editor-controls-transition-duration, 0.1s) var(--kritzel-editor-controls-transition, ease-in-out)}kritzel-controls.keyboard-open{transform:var(--kritzel-editor-controls-transform, translateY(300%))}.top-left-buttons{position:absolute;z-index:1;top:var(--kritzel-editor-top-left-buttons-top, 14px);left:var(--kritzel-editor-top-left-buttons-left, 14px);display:flex;align-items:flex-start;gap:8px}.top-center-notification-layer{position:absolute;top:var(--kritzel-editor-top-center-notification-top, 14px);left:0;right:0;z-index:var(--kritzel-editor-top-center-notification-z-index, 10001);display:flex;justify-content:center;pointer-events:none}.top-center-notification-container{width:min(90vw, 420px);pointer-events:auto;animation:kritzel-notification-slide-in var(--kritzel-editor-notification-animation-duration, 220ms)
|
|
2130
|
+
const kritzelEditorCss = () => `kritzel-editor{display:flex;margin:0;position:relative;container-type:inline-size;overflow:hidden;width:100%;height:100%;align-items:center;justify-content:center;touch-action:manipulation;user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:start;line-height:normal}.editor-content{position:absolute;inset:0}.editor-content>kritzel-engine{position:absolute;inset:0;z-index:0}kritzel-controls{position:absolute;z-index:1;left:0;right:0;margin-inline:auto;width:max-content;max-width:calc(100% - 16px);bottom:var(--kritzel-editor-controls-bottom, 14px);transition:transform var(--kritzel-editor-controls-transition-duration, 0.1s) var(--kritzel-editor-controls-transition, ease-in-out)}kritzel-controls.keyboard-open{transform:var(--kritzel-editor-controls-transform, translateY(300%))}.top-left-buttons{position:absolute;z-index:1;top:var(--kritzel-editor-top-left-buttons-top, 14px);left:var(--kritzel-editor-top-left-buttons-left, 14px);display:flex;align-items:flex-start;gap:8px}.top-center-notification-layer{position:absolute;top:var(--kritzel-editor-top-center-notification-top, 14px);left:0;right:0;z-index:var(--kritzel-editor-top-center-notification-z-index, 10001);display:flex;justify-content:center;pointer-events:none}.top-center-notification-container{width:min(90vw, 420px);pointer-events:auto;animation:kritzel-notification-slide-in var(--kritzel-editor-notification-animation-duration, 220ms) var(--kritzel-editor-notification-animation-easing, cubic-bezier(0.22, 1, 0.36, 1))}.top-center-notification-container.is-dismissing{animation:kritzel-notification-fade-out var(--kritzel-editor-notification-dismiss-animation-duration, 180ms) var(--kritzel-editor-notification-dismiss-animation-easing, ease-in) forwards}@keyframes kritzel-notification-slide-in{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes kritzel-notification-fade-out{from{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-6px)}}@media (prefers-reduced-motion: reduce){.top-center-notification-container{animation:none}}.top-right-buttons{position:absolute;z-index:1;top:var(--kritzel-editor-top-right-buttons-top, 14px);right:var(--kritzel-editor-top-right-buttons-right, 14px);display:flex;align-items:center;gap:8px}.bottom-left-buttons{position:absolute;z-index:1;left:var(--kritzel-editor-top-left-buttons-left, 14px);bottom:var(--kritzel-editor-controls-bottom, 14px);display:flex;align-items:flex-end}@container (max-width: 767px){.bottom-left-buttons{display:none}}.top-right-button{display:flex;align-items:center;justify-content:center;width:50px;height:50px;padding:0;border:var(--kritzel-split-button-border, 1px solid #ebebeb);border-radius:var(--kritzel-split-button-border-radius, 12px);background-color:var(--kritzel-split-button-background-color, #ffffff);cursor:var(--kritzel-global-pointer-cursor, pointer);box-shadow:var(--kritzel-split-button-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));transition:background-color 150ms ease;-webkit-tap-highlight-color:transparent}.top-right-button:hover{background-color:#f5f5f5}.top-right-button:active{background-color:#ebebeb}`;
|
|
2131
2131
|
|
|
2132
2132
|
const KritzelEditor = class {
|
|
2133
2133
|
constructor(hostRef) {
|
|
@@ -2146,8 +2146,6 @@ const KritzelEditor = class {
|
|
|
2146
2146
|
this.login = createEvent(this, "login");
|
|
2147
2147
|
this.isPublicChange = createEvent(this, "isPublicChange");
|
|
2148
2148
|
this.awarenessChange = createEvent(this, "awarenessChange");
|
|
2149
|
-
this.syncingChange = createEvent(this, "syncingChange");
|
|
2150
|
-
this.loadingChange = createEvent(this, "loadingChange");
|
|
2151
2149
|
}
|
|
2152
2150
|
get host() { return getElement(this); }
|
|
2153
2151
|
scaleMax = ABSOLUTE_SCALE_MAX;
|
|
@@ -2387,9 +2385,6 @@ const KritzelEditor = class {
|
|
|
2387
2385
|
login;
|
|
2388
2386
|
isPublicChange;
|
|
2389
2387
|
awarenessChange;
|
|
2390
|
-
/** Emitted while remote changes are being applied to the active workspace. Stays silent when the remote holds nothing new. */
|
|
2391
|
-
syncingChange;
|
|
2392
|
-
loadingChange;
|
|
2393
2388
|
isEngineReady = false;
|
|
2394
2389
|
isControlsReady = false;
|
|
2395
2390
|
isWorkspaceManagerReady = false;
|
|
@@ -3208,40 +3203,40 @@ const KritzelEditor = class {
|
|
|
3208
3203
|
const isLoggedIn = this.isLoggedIn;
|
|
3209
3204
|
const shouldShowCurrentUser = isLoggedIn;
|
|
3210
3205
|
const shouldShowLoginButton = this.isReady && !!this.loginConfig && !isLoggedIn;
|
|
3211
|
-
return (h(Host, { key: '
|
|
3206
|
+
return (h(Host, { key: 'b7b9b3cd6a81c4a7b8aa9730259377c8448336ba' }, h("div", { key: '7714490de58839fffb5a20d355a942dbb4d62409', class: "editor-content", style: {
|
|
3212
3207
|
opacity: this.isEditorVisible ? '1' : '0',
|
|
3213
3208
|
visibility: this.isEditorVisible ? 'visible' : 'hidden',
|
|
3214
3209
|
transition: 'opacity 0.2s ease-in-out, visibility 0.2s ease-in-out',
|
|
3215
|
-
} }, h("div", { key: '
|
|
3210
|
+
} }, h("div", { key: '0e9c1c786beacd19e8ef5a6e519e47efe7bf35f6', class: "top-left-buttons" }, h("kritzel-workspace-manager", { key: 'cd85c3bf1f6b281057d7538cb5d192b8826bc9ee', visible: this.isWorkspaceManagerVisible, workspaces: this.workspaces, activeWorkspace: this.activeWorkspace, terms: this.resolvedTerms, onWorkspaceChange: event => (this.activeWorkspace = event.detail), onIsWorkspaceManagerReady: () => (this.isWorkspaceManagerReady = true) }), h("kritzel-back-to-content", { key: 'ea0065152125ca3318da9e6fc4c372ae4b71e053', visible: this.isBackToContentButtonVisible, text: this.resolvedTerms['backToContent.label'] ?? 'Back to content', onBackToContent: () => this.backToContent() })), this.activeNotification && (h("div", { key: 'efde12cf6ed5fe19b651862ef7a123edacfc1e30', class: "top-center-notification-layer", role: "presentation" }, h("div", { key: '3bffe023e9119868ad18a52690272adb073ee3b0', class: { 'top-center-notification-container': true, 'is-dismissing': this.isNotificationDismissing }, role: "presentation" }, h("kritzel-notification-card", { key: 'fcf62343eb401093ae6bfa1298f76d25d48eb0e4', notification: this.activeNotification, locale: this.locale, onDismiss: this.dismissNotification, onHoverChange: event => this.handleNotificationHoverChange(event) })))), this.contextMenuState && this.contextMenuState.items.length > 0 && (h("kritzel-context-menu", { key: '9de9892adaaf4c123d4636393ccfa13a48730b17', class: "context-menu", items: this.contextMenuState.items, objects: this.contextMenuState.objects, style: {
|
|
3216
3211
|
position: 'absolute',
|
|
3217
3212
|
left: `${this.contextMenuState.position.x}px`,
|
|
3218
3213
|
top: `${this.contextMenuState.position.y}px`,
|
|
3219
3214
|
zIndex: '10002',
|
|
3220
|
-
}, onActionSelected: event => this.handleContextMenuActionSelected(event), onClose: () => this.hideContextMenu() })), h("kritzel-sync-indicator", { key: '
|
|
3215
|
+
}, onActionSelected: event => this.handleContextMenuActionSelected(event), onClose: () => this.hideContextMenu() })), h("kritzel-sync-indicator", { key: 'b0369b8006e4df5b7b395487de085faf11a59ed7', visible: this.isSyncing, text: "Syncing..." }), h("kritzel-loading-overlay", { key: '4509e6fca3da8a8b1a5ac1e82581cfa136ab9913', visible: this.isLoadingOverlayVisible, text: this.resolvedTerms['editor.loading'] ?? 'Loading...' }), h("kritzel-engine", { key: 'ec14d7f4f12dcf08c036a60b3ccc15a9fc558bd7', ref: el => {
|
|
3221
3216
|
if (el) {
|
|
3222
3217
|
this.engineRef = el;
|
|
3223
3218
|
}
|
|
3224
|
-
}, workspace: this.activeWorkspace, activeWorkspaceId: this.activeWorkspaceId, editorId: this.editorId, syncConfig: this.syncConfig, assetStorageConfig: this.assetStorageConfig, user: this.user, scaleMax: this.scaleMax, lockDrawingScale: this.lockDrawingScale, isObjectDistanceFadingActive: this.isObjectDistanceFadingActive, scaleMin: this.scaleMin, cursorTarget: this.cursorTarget, isLoading: this.isLoading, viewportBoundaryLeft: this.viewportBoundaryLeft, viewportBoundaryRight: this.viewportBoundaryRight, viewportBoundaryTop: this.viewportBoundaryTop, viewportBoundaryBottom: this.viewportBoundaryBottom, isPanningEnabled: this.isPanningEnabled, isZoomingEnabled: this.isZoomingEnabled, theme: this.theme, themes: this.themes, licenseKey: this.licenseKey, locale: this.locale, locales: this.locales, fallbackLocale: this.fallbackLocale, debugInfo: this.debugInfo, globalContextMenuItems: this.globalContextMenuItems, objectContextMenuItems: this.objectContextMenuItems, onIsEngineReady: event => this.onEngineReady(event), onWorkspacesChange: event => this.handleWorkspacesChange(event), onActiveWorkspaceChange: event => this.handleActiveWorkspaceChange(event), onObjectsChange: event => this.handleObjectsChange(event), onObjectsAdded: event => this.handleObjectsAdded(event), onObjectsRemoved: event => this.handleObjectsRemoved(event), onObjectsUpdated: event => this.handleObjectsUpdated(event), onUndoStateChange: event => this.handleUndoStateChange(event), onObjectsInViewportChange: event => this.handleObjectsInViewportChange(event), onViewportChange: event => this.handleViewportChange(event), onAwarenessChange: event => this.handleAwarenessChange(event), onNotificationsChange: event => this.handleNotificationsChange(event), onContextMenuStateChange: event => this.handleContextMenuStateChange(event), onSyncingChange: event => (this.isSyncing = event.detail), onLoadingChange: event => (this.isLoadingOverlayVisible = event.detail) }), h("kritzel-controls", { key: '
|
|
3219
|
+
}, workspace: this.activeWorkspace, activeWorkspaceId: this.activeWorkspaceId, editorId: this.editorId, syncConfig: this.syncConfig, assetStorageConfig: this.assetStorageConfig, user: this.user, scaleMax: this.scaleMax, lockDrawingScale: this.lockDrawingScale, isObjectDistanceFadingActive: this.isObjectDistanceFadingActive, scaleMin: this.scaleMin, cursorTarget: this.cursorTarget, isLoading: this.isLoading, viewportBoundaryLeft: this.viewportBoundaryLeft, viewportBoundaryRight: this.viewportBoundaryRight, viewportBoundaryTop: this.viewportBoundaryTop, viewportBoundaryBottom: this.viewportBoundaryBottom, isPanningEnabled: this.isPanningEnabled, isZoomingEnabled: this.isZoomingEnabled, theme: this.theme, themes: this.themes, licenseKey: this.licenseKey, locale: this.locale, locales: this.locales, fallbackLocale: this.fallbackLocale, debugInfo: this.debugInfo, globalContextMenuItems: this.globalContextMenuItems, objectContextMenuItems: this.objectContextMenuItems, onIsEngineReady: event => this.onEngineReady(event), onWorkspacesChange: event => this.handleWorkspacesChange(event), onActiveWorkspaceChange: event => this.handleActiveWorkspaceChange(event), onObjectsChange: event => this.handleObjectsChange(event), onObjectsAdded: event => this.handleObjectsAdded(event), onObjectsRemoved: event => this.handleObjectsRemoved(event), onObjectsUpdated: event => this.handleObjectsUpdated(event), onUndoStateChange: event => this.handleUndoStateChange(event), onObjectsInViewportChange: event => this.handleObjectsInViewportChange(event), onViewportChange: event => this.handleViewportChange(event), onAwarenessChange: event => this.handleAwarenessChange(event), onNotificationsChange: event => this.handleNotificationsChange(event), onContextMenuStateChange: event => this.handleContextMenuStateChange(event), onSyncingChange: event => (this.isSyncing = event.detail), onLoadingChange: event => (this.isLoadingOverlayVisible = event.detail) }), h("kritzel-controls", { key: '59413042ba6aff8e972d51e4a04a44893b3a4b97', visible: this.isControlsVisible, class: { 'keyboard-open': this.isVirtualKeyboardOpen }, ref: el => {
|
|
3225
3220
|
if (el) {
|
|
3226
3221
|
this.controlsRef = el;
|
|
3227
3222
|
}
|
|
3228
|
-
}, controls: this.normalizedControls, isUtilityPanelVisible: this.isUtilityPanelVisible, undoState: this.undoState ?? undefined, theme: this.theme, terms: this.resolvedTerms, onIsControlsReady: () => (this.isControlsReady = true) }), h("div", { key: '
|
|
3223
|
+
}, controls: this.normalizedControls, isUtilityPanelVisible: this.isUtilityPanelVisible, undoState: this.undoState ?? undefined, theme: this.theme, terms: this.resolvedTerms, onIsControlsReady: () => (this.isControlsReady = true) }), h("div", { key: '4cde7726bc85e97c20687f43673689c6e1825dbd', class: "bottom-left-buttons" }, h("kritzel-zoom-panel", { key: '8b7bd923d0086548325f8c38d0a1c16bb0335ed0', visible: this.isZoomPanelVisible, disabled: !this.isZoomingEnabled, zoomPercent: this.currentZoomPercent, terms: this.resolvedTerms, onZoomIn: () => this.zoomIn(), onZoomOut: () => this.zoomOut() })), h("div", { key: 'c445b1efd03ed38e1b75361cd95cdef90f789825', class: "top-right-buttons" }, h("kritzel-settings", { key: 'c7b555a2a35833c362271006089a2632bd5db4f8', ref: el => {
|
|
3229
3224
|
if (el) {
|
|
3230
3225
|
this.settingsRef = el;
|
|
3231
3226
|
}
|
|
3232
|
-
}, shortcuts: this.shortcuts, availableThemes: this.themes && this.themes.length > 0 ? this.themes.map(t => t.name) : ['light', 'dark'], availableLocales: this.availableLocaleOptions, settings: this.currentSettingsConfig, terms: this.resolvedTerms, onSettingsChange: event => this.handleSettingsChange(event) }), h("kritzel-export", { key: '
|
|
3227
|
+
}, shortcuts: this.shortcuts, availableThemes: this.themes && this.themes.length > 0 ? this.themes.map(t => t.name) : ['light', 'dark'], availableLocales: this.availableLocaleOptions, settings: this.currentSettingsConfig, terms: this.resolvedTerms, onSettingsChange: event => this.handleSettingsChange(event) }), h("kritzel-export", { key: '9789c32789c70d817ca894fceee74610c494eede', ref: el => {
|
|
3233
3228
|
if (el) {
|
|
3234
3229
|
this.exportRef = el;
|
|
3235
3230
|
}
|
|
3236
|
-
}, workspaceName: this.activeWorkspace?.name || 'workspace', terms: this.resolvedTerms, onExportPng: () => this.engineRef.exportViewportAsPng(), onExportSvg: () => this.engineRef.exportViewportAsSvg(), onExportJson: event => this.engineRef.downloadAsJson(event.detail) }), h("kritzel-active-users", { key: '
|
|
3231
|
+
}, workspaceName: this.activeWorkspace?.name || 'workspace', terms: this.resolvedTerms, onExportPng: () => this.engineRef.exportViewportAsPng(), onExportSvg: () => this.engineRef.exportViewportAsSvg(), onExportJson: event => this.engineRef.downloadAsJson(event.detail) }), h("kritzel-active-users", { key: '010d5137a3204b5f90ecbfb10c06e4823c0acec3', users: this.activeUsers }), shouldShowCurrentUser && h("kritzel-current-user", { key: '65b04f1d7912cf03baabe5bed8e37db8aaf4fe17', user: this.user, terms: this.resolvedTerms, onClick: () => this.currentUserDialogRef?.open() }), shouldShowCurrentUser && (h("kritzel-current-user-dialog", { key: 'ffceb4a511e1f51a193d8a3ee9c331d4aa5c270b', ref: el => {
|
|
3237
3232
|
if (el) {
|
|
3238
3233
|
this.currentUserDialogRef = el;
|
|
3239
3234
|
}
|
|
3240
|
-
}, user: this.user, terms: this.resolvedTerms, onLogoutRequest: this.handleCurrentUserLogout })), shouldShowLoginButton && h("kritzel-button", { key: '
|
|
3235
|
+
}, user: this.user, terms: this.resolvedTerms, onLogoutRequest: this.handleCurrentUserLogout })), shouldShowLoginButton && h("kritzel-button", { key: '789427d5e7af880420830f69ec292d5a78831fde', onButtonClick: () => this.loginDialogRef?.open() }, this.resolvedTerms['login.dialogTitle'] ?? 'Sign in'), h("kritzel-more-menu", { key: '053f004ac79f7fa7413238dcd4276f75cb47ce74', items: this.resolvedMoreMenuItems, visible: this.isMoreMenuVisible, terms: this.resolvedTerms }), h("kritzel-share-dialog", { key: '60f608263145323645f3b292243b63243676680b', ref: el => {
|
|
3241
3236
|
if (el) {
|
|
3242
3237
|
this.shareDialogRef = el;
|
|
3243
3238
|
}
|
|
3244
|
-
}, isPublic: this.currentIsPublic, workspaceId: this.activeWorkspace?.id, terms: this.resolvedTerms, onToggleIsPublic: this.handleToggleIsPublic }), this.loginConfig && (h("kritzel-login-dialog", { key: '
|
|
3239
|
+
}, isPublic: this.currentIsPublic, workspaceId: this.activeWorkspace?.id, terms: this.resolvedTerms, onToggleIsPublic: this.handleToggleIsPublic }), this.loginConfig && (h("kritzel-login-dialog", { key: '94e8ccb8da10cc8bfe6bb3debe21af40a47aeea7', ref: el => {
|
|
3245
3240
|
if (el) {
|
|
3246
3241
|
this.loginDialogRef = el;
|
|
3247
3242
|
}
|
|
@@ -22284,10 +22279,6 @@ class KritzelObjectMap {
|
|
|
22284
22279
|
_awarenessChangeHandler = null;
|
|
22285
22280
|
_awarenessChangeCallbacks = [];
|
|
22286
22281
|
_objectsChangeCallbacks = [];
|
|
22287
|
-
_remoteChangesCallbacks = [];
|
|
22288
|
-
_docUpdateHandler = null;
|
|
22289
|
-
_remoteOrigins = new Set();
|
|
22290
|
-
_appliedRemoteChanges = false;
|
|
22291
22282
|
_lastAwarenessEmitTime = 0;
|
|
22292
22283
|
_awarenessEmitTimeout = null;
|
|
22293
22284
|
AWARENESS_THROTTLE_INTERVAL = 100; // milliseconds
|
|
@@ -22311,44 +22302,12 @@ class KritzelObjectMap {
|
|
|
22311
22302
|
return this._isReady;
|
|
22312
22303
|
}
|
|
22313
22304
|
/**
|
|
22314
|
-
* Promise that settles when network providers finish connecting
|
|
22315
|
-
*
|
|
22305
|
+
* Promise that settles when network providers finish connecting.
|
|
22306
|
+
* Resolves immediately if no network providers. Awaited by the loading overlay.
|
|
22316
22307
|
*/
|
|
22317
22308
|
whenNetworkSynced() {
|
|
22318
22309
|
return this._networkSyncPromise ?? Promise.resolve();
|
|
22319
22310
|
}
|
|
22320
|
-
/**
|
|
22321
|
-
* Whether any configured provider synchronizes over the network.
|
|
22322
|
-
*/
|
|
22323
|
-
get hasNetworkSyncProvider() {
|
|
22324
|
-
return this._providers.some(provider => provider.type === 'network');
|
|
22325
|
-
}
|
|
22326
|
-
/**
|
|
22327
|
-
* Whether remote-originated changes can be told apart from local writes.
|
|
22328
|
-
* Requires every network provider to expose its Yjs update origin.
|
|
22329
|
-
*/
|
|
22330
|
-
get supportsRemoteChangeDetection() {
|
|
22331
|
-
const networkProviders = this._providers.filter(provider => provider.type === 'network');
|
|
22332
|
-
return networkProviders.length > 0 && networkProviders.every(provider => provider.updateOrigin !== undefined);
|
|
22333
|
-
}
|
|
22334
|
-
/**
|
|
22335
|
-
* Whether at least one update originating from a network provider has been
|
|
22336
|
-
* applied to this document. Stays `false` when the remote held no data the
|
|
22337
|
-
* local document was missing, because Yjs suppresses empty updates.
|
|
22338
|
-
*/
|
|
22339
|
-
get hasAppliedRemoteChanges() {
|
|
22340
|
-
return this._appliedRemoteChanges;
|
|
22341
|
-
}
|
|
22342
|
-
/**
|
|
22343
|
-
* Registers a callback invoked whenever a network provider applies changes to this document.
|
|
22344
|
-
* @returns A function that unregisters the callback.
|
|
22345
|
-
*/
|
|
22346
|
-
onRemoteChangesApplied(callback) {
|
|
22347
|
-
this._remoteChangesCallbacks.push(callback);
|
|
22348
|
-
return () => {
|
|
22349
|
-
this._remoteChangesCallbacks = this._remoteChangesCallbacks.filter(registered => registered !== callback);
|
|
22350
|
-
};
|
|
22351
|
-
}
|
|
22352
22311
|
/**
|
|
22353
22312
|
* Returns the Yjs Awareness instance, if a network provider is available.
|
|
22354
22313
|
*/
|
|
@@ -22591,22 +22550,6 @@ class KritzelObjectMap {
|
|
|
22591
22550
|
const providerList = this._providers.map(p => `${p.constructor.name} (${p.type})`).join(', ');
|
|
22592
22551
|
console.info(`[Kritzel] Workspace sync providers initialized for ${docName}: ${providerList || 'none'}`);
|
|
22593
22552
|
}
|
|
22594
|
-
// Registered before any provider connects so no remote update can be missed.
|
|
22595
|
-
for (const provider of this._providers) {
|
|
22596
|
-
if (provider.type === 'network' && provider.updateOrigin !== undefined) {
|
|
22597
|
-
this._remoteOrigins.add(provider.updateOrigin);
|
|
22598
|
-
}
|
|
22599
|
-
}
|
|
22600
|
-
this._docUpdateHandler = (_update, origin) => {
|
|
22601
|
-
if (!this._remoteOrigins.has(origin)) {
|
|
22602
|
-
return;
|
|
22603
|
-
}
|
|
22604
|
-
this._appliedRemoteChanges = true;
|
|
22605
|
-
for (const callback of [...this._remoteChangesCallbacks]) {
|
|
22606
|
-
callback();
|
|
22607
|
-
}
|
|
22608
|
-
};
|
|
22609
|
-
this._ydoc.on('update', this._docUpdateHandler);
|
|
22610
22553
|
// captureTimeout is effectively infinite — undo-step boundaries are
|
|
22611
22554
|
// marked explicitly via markUndoBoundary() in insert/remove/reset and
|
|
22612
22555
|
// at stroke/gesture boundaries in the tools. This prevents a single
|
|
@@ -22660,15 +22603,12 @@ class KritzelObjectMap {
|
|
|
22660
22603
|
if (showSyncProviderInfo && networkProviders.length > 0) {
|
|
22661
22604
|
console.info(`[Kritzel] Workspace network providers connecting in background: ${networkProviders.length}`);
|
|
22662
22605
|
}
|
|
22663
|
-
const networkConnectPromises = networkProviders.map(provider => provider
|
|
22664
|
-
.connect()
|
|
22665
|
-
.then(() => provider.whenSynced?.())
|
|
22666
|
-
.catch(err => {
|
|
22606
|
+
const networkConnectPromises = networkProviders.map(provider => provider.connect().catch(err => {
|
|
22667
22607
|
if (showSyncProviderInfo) {
|
|
22668
22608
|
console.error(`[Kritzel] Network sync provider "${provider.constructor.name}" failed to connect:`, err);
|
|
22669
22609
|
}
|
|
22670
22610
|
}));
|
|
22671
|
-
//
|
|
22611
|
+
// Network sync awaited by loading overlay to show remote workspace hydration
|
|
22672
22612
|
this._networkSyncPromise = networkConnectPromises.length > 0 ? Promise.allSettled(networkConnectPromises).then(() => undefined) : null;
|
|
22673
22613
|
this._isReady = true;
|
|
22674
22614
|
// Find the first provider that exposes awareness (network providers)
|
|
@@ -23326,13 +23266,6 @@ class KritzelObjectMap {
|
|
|
23326
23266
|
this._objectsMap.unobserve(this._objectsObserver);
|
|
23327
23267
|
this._objectsObserver = null;
|
|
23328
23268
|
}
|
|
23329
|
-
if (this._ydoc && this._docUpdateHandler) {
|
|
23330
|
-
this._ydoc.off('update', this._docUpdateHandler);
|
|
23331
|
-
}
|
|
23332
|
-
this._docUpdateHandler = null;
|
|
23333
|
-
this._remoteOrigins.clear();
|
|
23334
|
-
this._remoteChangesCallbacks = [];
|
|
23335
|
-
this._appliedRemoteChanges = false;
|
|
23336
23269
|
// Remove undo manager event listeners
|
|
23337
23270
|
if (this._undoManager) {
|
|
23338
23271
|
if (this._stackItemAddedHandler) {
|
|
@@ -23828,10 +23761,7 @@ class KritzelAppStateMap {
|
|
|
23828
23761
|
if (showSyncProviderInfo && networkProviders.length > 0) {
|
|
23829
23762
|
console.info(`[Kritzel] App-state network providers connecting in background: ${networkProviders.length}`);
|
|
23830
23763
|
}
|
|
23831
|
-
const networkConnectPromises = networkProviders.map(provider => provider
|
|
23832
|
-
.connect()
|
|
23833
|
-
.then(() => provider.whenSynced?.())
|
|
23834
|
-
.catch(err => {
|
|
23764
|
+
const networkConnectPromises = networkProviders.map(provider => provider.connect().catch(err => {
|
|
23835
23765
|
if (showSyncProviderInfo) {
|
|
23836
23766
|
console.error(`[Kritzel] Network sync provider "${provider.constructor.name}" failed to connect:`, err);
|
|
23837
23767
|
}
|
|
@@ -27115,8 +27045,8 @@ class KritzelSvgExportHelper {
|
|
|
27115
27045
|
.join('\n ');
|
|
27116
27046
|
const xmlDecl = includeXmlDeclaration ? '<?xml version="1.0" encoding="UTF-8"?>\n' : '';
|
|
27117
27047
|
const defsContent = defs.length > 0 ? `\n <defs>\n ${defs.join('\n ')}\n </defs>` : '';
|
|
27118
|
-
return `${xmlDecl}<svg xmlns="http://www.w3.org/2000/svg" viewBox="${viewBoxX} ${viewBoxY} ${viewBoxWidth} ${viewBoxHeight}" width="${viewBoxWidth}" height="${viewBoxHeight}">${defsContent}
|
|
27119
|
-
${elements}
|
|
27048
|
+
return `${xmlDecl}<svg xmlns="http://www.w3.org/2000/svg" viewBox="${viewBoxX} ${viewBoxY} ${viewBoxWidth} ${viewBoxHeight}" width="${viewBoxWidth}" height="${viewBoxHeight}">${defsContent}
|
|
27049
|
+
${elements}
|
|
27120
27050
|
</svg>`;
|
|
27121
27051
|
}
|
|
27122
27052
|
/**
|
|
@@ -27268,8 +27198,8 @@ class KritzelSvgExportHelper {
|
|
|
27268
27198
|
const orient = end === 'start' ? 'auto-start-reverse' : 'auto';
|
|
27269
27199
|
const refX = 0;
|
|
27270
27200
|
const refY = size / 2;
|
|
27271
|
-
return `<marker id="${markerId}" markerWidth="${size}" markerHeight="${size}" refX="${refX}" refY="${refY}" orient="${orient}" markerUnits="userSpaceOnUse">
|
|
27272
|
-
<path d="${path}" fill="${fill}" transform="scale(${size / 10})"/>
|
|
27201
|
+
return `<marker id="${markerId}" markerWidth="${size}" markerHeight="${size}" refX="${refX}" refY="${refY}" orient="${orient}" markerUnits="userSpaceOnUse">
|
|
27202
|
+
<path d="${path}" fill="${fill}" transform="scale(${size / 10})"/>
|
|
27273
27203
|
</marker>`;
|
|
27274
27204
|
}
|
|
27275
27205
|
/**
|
|
@@ -27316,10 +27246,10 @@ class KritzelSvgExportHelper {
|
|
|
27316
27246
|
const opacity = path.opacity !== 1 ? ` opacity="${path.opacity}"` : '';
|
|
27317
27247
|
const scale = this.getObjectScale(path);
|
|
27318
27248
|
// Path needs to be wrapped in a g with translation since path.d uses local coordinates
|
|
27319
|
-
return `<g transform="${transform}"${opacity}>
|
|
27320
|
-
<svg viewBox="${path.viewBox}" width="${path.totalWidth / scale}" height="${path.totalHeight / scale}" overflow="visible">
|
|
27321
|
-
<path d="${path.d}" fill="${fill || 'none'}" stroke="${stroke || 'none'}"${path.strokeWidth ? ` stroke-width="${path.strokeWidth}"` : ''}/>
|
|
27322
|
-
</svg>
|
|
27249
|
+
return `<g transform="${transform}"${opacity}>
|
|
27250
|
+
<svg viewBox="${path.viewBox}" width="${path.totalWidth / scale}" height="${path.totalHeight / scale}" overflow="visible">
|
|
27251
|
+
<path d="${path.d}" fill="${fill || 'none'}" stroke="${stroke || 'none'}"${path.strokeWidth ? ` stroke-width="${path.strokeWidth}"` : ''}/>
|
|
27252
|
+
</svg>
|
|
27323
27253
|
</g>`;
|
|
27324
27254
|
}
|
|
27325
27255
|
/**
|
|
@@ -27335,10 +27265,10 @@ class KritzelSvgExportHelper {
|
|
|
27335
27265
|
const scale = this.getObjectScale(line);
|
|
27336
27266
|
const markerStart = line.hasStartArrow ? ` marker-start="url(#${line.startMarkerId})"` : '';
|
|
27337
27267
|
const markerEnd = line.hasEndArrow ? ` marker-end="url(#${line.endMarkerId})"` : '';
|
|
27338
|
-
return `<g transform="${transform}"${opacity}>
|
|
27339
|
-
<svg viewBox="${line.viewBox}" width="${line.totalWidth / scale}" height="${line.totalHeight / scale}" overflow="visible">
|
|
27340
|
-
<path d="${line.d}" fill="none" stroke="${stroke}" stroke-width="${line.strokeWidth}" stroke-linecap="round"${markerStart}${markerEnd}/>
|
|
27341
|
-
</svg>
|
|
27268
|
+
return `<g transform="${transform}"${opacity}>
|
|
27269
|
+
<svg viewBox="${line.viewBox}" width="${line.totalWidth / scale}" height="${line.totalHeight / scale}" overflow="visible">
|
|
27270
|
+
<path d="${line.d}" fill="none" stroke="${stroke}" stroke-width="${line.strokeWidth}" stroke-linecap="round"${markerStart}${markerEnd}/>
|
|
27271
|
+
</svg>
|
|
27342
27272
|
</g>`;
|
|
27343
27273
|
}
|
|
27344
27274
|
/**
|
|
@@ -27362,18 +27292,18 @@ class KritzelSvgExportHelper {
|
|
|
27362
27292
|
const textHtml = this.prosemirrorToHtml(shape.content, shape, theme);
|
|
27363
27293
|
if (textHtml) {
|
|
27364
27294
|
const fontColor = KritzelColorHelper.resolveThemeColor(shape.fontColor, theme);
|
|
27365
|
-
textContent = `
|
|
27366
|
-
<foreignObject x="${shape.x}" y="${shape.y}" width="${shape.width}" height="${shape.height}">
|
|
27367
|
-
<div xmlns="http://www.w3.org/1999/xhtml" style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; text-align: center; font-family: ${shape.fontFamily}; font-size: ${shape.fontSize}px; color: ${fontColor}; overflow: hidden;">
|
|
27368
|
-
${textHtml}
|
|
27369
|
-
</div>
|
|
27295
|
+
textContent = `
|
|
27296
|
+
<foreignObject x="${shape.x}" y="${shape.y}" width="${shape.width}" height="${shape.height}">
|
|
27297
|
+
<div xmlns="http://www.w3.org/1999/xhtml" style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; text-align: center; font-family: ${shape.fontFamily}; font-size: ${shape.fontSize}px; color: ${fontColor}; overflow: hidden;">
|
|
27298
|
+
${textHtml}
|
|
27299
|
+
</div>
|
|
27370
27300
|
</foreignObject>`;
|
|
27371
27301
|
}
|
|
27372
27302
|
}
|
|
27373
|
-
return `<g transform="${transform}"${opacity}>
|
|
27374
|
-
<svg viewBox="${shape.viewBox}" width="${shape.totalWidth / scale}" height="${shape.totalHeight / scale}" overflow="visible" preserveAspectRatio="none">
|
|
27375
|
-
<path d="${pathD}" fill="${fill || 'transparent'}" stroke="${stroke}" stroke-width="${shape.strokeWidth}"/>${textContent}
|
|
27376
|
-
</svg>
|
|
27303
|
+
return `<g transform="${transform}"${opacity}>
|
|
27304
|
+
<svg viewBox="${shape.viewBox}" width="${shape.totalWidth / scale}" height="${shape.totalHeight / scale}" overflow="visible" preserveAspectRatio="none">
|
|
27305
|
+
<path d="${pathD}" fill="${fill || 'transparent'}" stroke="${stroke}" stroke-width="${shape.strokeWidth}"/>${textContent}
|
|
27306
|
+
</svg>
|
|
27377
27307
|
</g>`;
|
|
27378
27308
|
}
|
|
27379
27309
|
/**
|
|
@@ -27404,10 +27334,10 @@ class KritzelSvgExportHelper {
|
|
|
27404
27334
|
// adjusted font-size already accounts for it – keeping both would double-scale
|
|
27405
27335
|
// the content and overflow the foreignObject.
|
|
27406
27336
|
const svgFontSizePx = (text.fontSize * (4 / 3) * (text.scaleFactor || 1) / scale).toFixed(4);
|
|
27407
|
-
return `<g transform="${transform}"${opacity}>
|
|
27408
|
-
<foreignObject x="0" y="0" width="${width}" height="${height}" overflow="visible">
|
|
27409
|
-
<div xmlns="http://www.w3.org/1999/xhtml" style="font-family: ${text.fontFamily}; font-size: ${svgFontSizePx}px; color: ${fontColor}; background-color: ${bgColor || 'transparent'}; white-space: pre-wrap; word-wrap: break-word; width: 100%; margin: 0; padding: 0; box-sizing: border-box;">${htmlContent.trim()}</div>
|
|
27410
|
-
</foreignObject>
|
|
27337
|
+
return `<g transform="${transform}"${opacity}>
|
|
27338
|
+
<foreignObject x="0" y="0" width="${width}" height="${height}" overflow="visible">
|
|
27339
|
+
<div xmlns="http://www.w3.org/1999/xhtml" style="font-family: ${text.fontFamily}; font-size: ${svgFontSizePx}px; color: ${fontColor}; background-color: ${bgColor || 'transparent'}; white-space: pre-wrap; word-wrap: break-word; width: 100%; margin: 0; padding: 0; box-sizing: border-box;">${htmlContent.trim()}</div>
|
|
27340
|
+
</foreignObject>
|
|
27411
27341
|
</g>`;
|
|
27412
27342
|
}
|
|
27413
27343
|
/**
|
|
@@ -27441,9 +27371,9 @@ class KritzelSvgExportHelper {
|
|
|
27441
27371
|
return `<tspan x="0" y="${y}" xml:space="preserve">${this.escapeHtml(line)}</tspan>`;
|
|
27442
27372
|
})
|
|
27443
27373
|
.join('');
|
|
27444
|
-
return `<g transform="${transform}"${opacity}>
|
|
27445
|
-
${bgRect}
|
|
27446
|
-
<text font-family="${this.escapeHtml(text.fontFamily)}" font-size="${resolvedFontSizePx}" fill="${fontColor}">${tspans}</text>
|
|
27374
|
+
return `<g transform="${transform}"${opacity}>
|
|
27375
|
+
${bgRect}
|
|
27376
|
+
<text font-family="${this.escapeHtml(text.fontFamily)}" font-size="${resolvedFontSizePx}" fill="${fontColor}">${tspans}</text>
|
|
27447
27377
|
</g>`;
|
|
27448
27378
|
}
|
|
27449
27379
|
/**
|
|
@@ -27471,8 +27401,8 @@ class KritzelSvgExportHelper {
|
|
|
27471
27401
|
const width = image.totalWidth / scale;
|
|
27472
27402
|
const height = image.totalHeight / scale;
|
|
27473
27403
|
const href = imageDataUrls?.get(image.id) || image.resolvedSrc || image.src || '';
|
|
27474
|
-
return `<g transform="${transform}"${opacity}>
|
|
27475
|
-
<image href="${href}" x="0" y="0" width="${width}" height="${height}" preserveAspectRatio="xMidYMid meet"/>
|
|
27404
|
+
return `<g transform="${transform}"${opacity}>
|
|
27405
|
+
<image href="${href}" x="0" y="0" width="${width}" height="${height}" preserveAspectRatio="xMidYMid meet"/>
|
|
27476
27406
|
</g>`;
|
|
27477
27407
|
}
|
|
27478
27408
|
/**
|
|
@@ -27492,19 +27422,19 @@ class KritzelSvgExportHelper {
|
|
|
27492
27422
|
if (rasterSafeForCanvas) {
|
|
27493
27423
|
// PNG export: render placeholder rect (foreignObject doesn't rasterize to PNG well)
|
|
27494
27424
|
console.warn('[KritzelCustomElement SVG Export] Custom elements do not serialize well to PNG. Use SVG export or screenshot instead.');
|
|
27495
|
-
return `<g transform="${transform}"${opacity}>
|
|
27496
|
-
<rect x="0" y="0" width="${width}" height="${height}" fill="#f0f0f0" stroke="#999" stroke-width="1" />
|
|
27497
|
-
<text x="${width / 2}" y="${height / 2}" text-anchor="middle" dominant-baseline="middle" font-size="12" fill="#999">[Custom Element]</text>
|
|
27425
|
+
return `<g transform="${transform}"${opacity}>
|
|
27426
|
+
<rect x="0" y="0" width="${width}" height="${height}" fill="#f0f0f0" stroke="#999" stroke-width="1" />
|
|
27427
|
+
<text x="${width / 2}" y="${height / 2}" text-anchor="middle" dominant-baseline="middle" font-size="12" fill="#999">[Custom Element]</text>
|
|
27498
27428
|
</g>`;
|
|
27499
27429
|
}
|
|
27500
27430
|
// SVG export: use foreignObject to embed HTML
|
|
27501
27431
|
const html = obj.element?.outerHTML || '<div style="border:1px dashed #ccc">Empty</div>';
|
|
27502
|
-
return `<g transform="${transform}"${opacity}>
|
|
27503
|
-
<foreignObject x="0" y="0" width="${width}" height="${height}">
|
|
27504
|
-
<div xmlns="http://www.w3.org/1999/xhtml" style="width:100%;height:100%;overflow:hidden;">
|
|
27505
|
-
${html}
|
|
27506
|
-
</div>
|
|
27507
|
-
</foreignObject>
|
|
27432
|
+
return `<g transform="${transform}"${opacity}>
|
|
27433
|
+
<foreignObject x="0" y="0" width="${width}" height="${height}">
|
|
27434
|
+
<div xmlns="http://www.w3.org/1999/xhtml" style="width:100%;height:100%;overflow:hidden;">
|
|
27435
|
+
${html}
|
|
27436
|
+
</div>
|
|
27437
|
+
</foreignObject>
|
|
27508
27438
|
</g>`;
|
|
27509
27439
|
}
|
|
27510
27440
|
/**
|
|
@@ -27524,8 +27454,8 @@ class KritzelSvgExportHelper {
|
|
|
27524
27454
|
return '';
|
|
27525
27455
|
}
|
|
27526
27456
|
const opacity = group.opacity !== 1 ? ` opacity="${group.opacity}"` : '';
|
|
27527
|
-
return `<g${opacity}>
|
|
27528
|
-
${children}
|
|
27457
|
+
return `<g${opacity}>
|
|
27458
|
+
${children}
|
|
27529
27459
|
</g>`;
|
|
27530
27460
|
}
|
|
27531
27461
|
/**
|
|
@@ -27935,7 +27865,7 @@ const KritzelEngine = class {
|
|
|
27935
27865
|
contextMenuStateChange;
|
|
27936
27866
|
/** Emitted when the combined loading state (external `isLoading` prop or internal workspace loading) changes. */
|
|
27937
27867
|
loadingChange;
|
|
27938
|
-
/** Emitted
|
|
27868
|
+
/** Emitted when remote workspace synchronization is in progress. */
|
|
27939
27869
|
syncingChange;
|
|
27940
27870
|
forceUpdate = 0;
|
|
27941
27871
|
isSyncing = false;
|
|
@@ -29516,13 +29446,18 @@ const KritzelEngine = class {
|
|
|
29516
29446
|
_syncConfigRevision = 0;
|
|
29517
29447
|
_assetStorageConfigRevision = 0;
|
|
29518
29448
|
_isWorkspaceLoading = false;
|
|
29449
|
+
_syncingRequestId = 0;
|
|
29450
|
+
_syncingShowTimeout = null;
|
|
29451
|
+
_syncingHideTimeout = null;
|
|
29452
|
+
_syncingVisibleSince = null;
|
|
29453
|
+
_syncingShowDelayMs = 300;
|
|
29454
|
+
_syncingMinimumVisibleMs = 500;
|
|
29519
29455
|
_hasLoggedUnlicensedWelcomeBanner = false;
|
|
29520
29456
|
_previousVisibleCustomElements = new Set();
|
|
29521
29457
|
_revealedImageKeys = new Set();
|
|
29522
29458
|
_sceneBootstrapOpacity = 1;
|
|
29523
29459
|
_sceneBootstrapTransitionEnabled = false;
|
|
29524
29460
|
_sceneBootstrapTransitionTimer = null;
|
|
29525
|
-
_remoteChangesUnsubscribe = null;
|
|
29526
29461
|
_defaultUndoState = {
|
|
29527
29462
|
canUndo: false,
|
|
29528
29463
|
canRedo: false,
|
|
@@ -29539,16 +29474,65 @@ const KritzelEngine = class {
|
|
|
29539
29474
|
this.core.store.state.isLoading = this._isWorkspaceLoading || this.isLoading;
|
|
29540
29475
|
this.loadingChange.emit(this.core.store.state.isLoading);
|
|
29541
29476
|
}
|
|
29542
|
-
|
|
29543
|
-
|
|
29477
|
+
beginSyncingRequest() {
|
|
29478
|
+
this._syncingRequestId++;
|
|
29479
|
+
this.clearSyncingShowTimeout();
|
|
29480
|
+
this.clearSyncingHideTimeout();
|
|
29481
|
+
return this._syncingRequestId;
|
|
29482
|
+
}
|
|
29483
|
+
syncSyncingState(isSyncing, requestId) {
|
|
29484
|
+
if (requestId !== this._syncingRequestId) {
|
|
29485
|
+
return;
|
|
29486
|
+
}
|
|
29487
|
+
if (isSyncing) {
|
|
29488
|
+
this.clearSyncingHideTimeout();
|
|
29489
|
+
if (this.isSyncing || this._syncingShowTimeout !== null) {
|
|
29490
|
+
return;
|
|
29491
|
+
}
|
|
29492
|
+
this._syncingShowTimeout = setTimeout(() => {
|
|
29493
|
+
this._syncingShowTimeout = null;
|
|
29494
|
+
if (requestId !== this._syncingRequestId || this.isSyncing) {
|
|
29495
|
+
return;
|
|
29496
|
+
}
|
|
29497
|
+
this.isSyncing = true;
|
|
29498
|
+
this._syncingVisibleSince = Date.now();
|
|
29499
|
+
this.syncingChange.emit(true);
|
|
29500
|
+
}, this._syncingShowDelayMs);
|
|
29501
|
+
return;
|
|
29502
|
+
}
|
|
29503
|
+
this.clearSyncingShowTimeout();
|
|
29504
|
+
if (!this.isSyncing) {
|
|
29505
|
+
return;
|
|
29506
|
+
}
|
|
29507
|
+
this.clearSyncingHideTimeout();
|
|
29508
|
+
const elapsedMs = Date.now() - (this._syncingVisibleSince ?? Date.now());
|
|
29509
|
+
const remainingVisibleMs = Math.max(0, this._syncingMinimumVisibleMs - elapsedMs);
|
|
29510
|
+
if (remainingVisibleMs === 0) {
|
|
29511
|
+
this.finishSyncingState(requestId);
|
|
29512
|
+
return;
|
|
29513
|
+
}
|
|
29514
|
+
this._syncingHideTimeout = setTimeout(() => this.finishSyncingState(requestId), remainingVisibleMs);
|
|
29515
|
+
}
|
|
29516
|
+
finishSyncingState(requestId) {
|
|
29517
|
+
this._syncingHideTimeout = null;
|
|
29518
|
+
if (requestId !== this._syncingRequestId || !this.isSyncing) {
|
|
29544
29519
|
return;
|
|
29545
29520
|
}
|
|
29546
|
-
this.isSyncing =
|
|
29547
|
-
this.
|
|
29521
|
+
this.isSyncing = false;
|
|
29522
|
+
this._syncingVisibleSince = null;
|
|
29523
|
+
this.syncingChange.emit(false);
|
|
29524
|
+
}
|
|
29525
|
+
clearSyncingShowTimeout() {
|
|
29526
|
+
if (this._syncingShowTimeout !== null) {
|
|
29527
|
+
clearTimeout(this._syncingShowTimeout);
|
|
29528
|
+
this._syncingShowTimeout = null;
|
|
29529
|
+
}
|
|
29548
29530
|
}
|
|
29549
|
-
|
|
29550
|
-
this.
|
|
29551
|
-
|
|
29531
|
+
clearSyncingHideTimeout() {
|
|
29532
|
+
if (this._syncingHideTimeout !== null) {
|
|
29533
|
+
clearTimeout(this._syncingHideTimeout);
|
|
29534
|
+
this._syncingHideTimeout = null;
|
|
29535
|
+
}
|
|
29552
29536
|
}
|
|
29553
29537
|
isNetworkAvailable() {
|
|
29554
29538
|
return typeof navigator !== 'undefined' && navigator.onLine;
|
|
@@ -29661,7 +29645,7 @@ const KritzelEngine = class {
|
|
|
29661
29645
|
disconnectedCallback() {
|
|
29662
29646
|
this.throttledPointerMoveMulti.cancel();
|
|
29663
29647
|
this._revealedImageKeys.clear();
|
|
29664
|
-
this.
|
|
29648
|
+
this.beginSyncingRequest();
|
|
29665
29649
|
if (this._sceneBootstrapTransitionTimer !== null) {
|
|
29666
29650
|
clearTimeout(this._sceneBootstrapTransitionTimer);
|
|
29667
29651
|
this._sceneBootstrapTransitionTimer = null;
|
|
@@ -29911,12 +29895,27 @@ const KritzelEngine = class {
|
|
|
29911
29895
|
}
|
|
29912
29896
|
this._isWorkspaceLoading = true;
|
|
29913
29897
|
this.syncLoadingState();
|
|
29898
|
+
const syncingRequestId = this.beginSyncingRequest();
|
|
29914
29899
|
const initializationPromise = this.core.initializeWorkspace(workspace, options);
|
|
29915
29900
|
this._workspaceInitializationPromise = initializationPromise;
|
|
29916
29901
|
this._workspaceInitializationTargetKey = targetKey;
|
|
29917
29902
|
try {
|
|
29918
29903
|
await initializationPromise;
|
|
29919
|
-
|
|
29904
|
+
// Track remote sync in the background without blocking the loading overlay.
|
|
29905
|
+
const initializedObjects = this.core.store.objects;
|
|
29906
|
+
const networkSyncPromise = initializedObjects?.whenNetworkSynced();
|
|
29907
|
+
if (networkSyncPromise && this.isNetworkAvailable()) {
|
|
29908
|
+
this.syncSyncingState(true, syncingRequestId);
|
|
29909
|
+
void networkSyncPromise.finally(() => {
|
|
29910
|
+
// Only clear syncing for the currently active object map.
|
|
29911
|
+
if (this.core.store.objects === initializedObjects) {
|
|
29912
|
+
this.syncSyncingState(false, syncingRequestId);
|
|
29913
|
+
}
|
|
29914
|
+
});
|
|
29915
|
+
}
|
|
29916
|
+
else {
|
|
29917
|
+
this.syncSyncingState(false, syncingRequestId);
|
|
29918
|
+
}
|
|
29920
29919
|
}
|
|
29921
29920
|
finally {
|
|
29922
29921
|
// Only the most recent init clears loading state to prevent race conditions
|
|
@@ -29928,45 +29927,6 @@ const KritzelEngine = class {
|
|
|
29928
29927
|
}
|
|
29929
29928
|
}
|
|
29930
29929
|
}
|
|
29931
|
-
/**
|
|
29932
|
-
* Reports syncing only while remote data is actually being reconciled into the
|
|
29933
|
-
* active workspace. Yjs suppresses updates that carry nothing new, so a workspace
|
|
29934
|
-
* that already matches the remote never reports syncing at all.
|
|
29935
|
-
*/
|
|
29936
|
-
trackRemoteSynchronization() {
|
|
29937
|
-
this.clearRemoteChangesSubscription();
|
|
29938
|
-
this.syncSyncingState(false);
|
|
29939
|
-
const initializedObjects = this.core.store.objects;
|
|
29940
|
-
if (!initializedObjects?.hasNetworkSyncProvider || !this.isNetworkAvailable()) {
|
|
29941
|
-
return;
|
|
29942
|
-
}
|
|
29943
|
-
if (initializedObjects.supportsRemoteChangeDetection) {
|
|
29944
|
-
this._remoteChangesUnsubscribe = initializedObjects.onRemoteChangesApplied(() => {
|
|
29945
|
-
if (this.core.store.objects !== initializedObjects) {
|
|
29946
|
-
return;
|
|
29947
|
-
}
|
|
29948
|
-
this.syncSyncingState(true);
|
|
29949
|
-
});
|
|
29950
|
-
// The network provider may have already applied remote changes between
|
|
29951
|
-
// object-map initialization and this subscription (e.g. an already-connected
|
|
29952
|
-
// shared socket resolves the sync handshake almost immediately). Without this
|
|
29953
|
-
// check that update is missed entirely and the indicator never appears.
|
|
29954
|
-
if (initializedObjects.hasAppliedRemoteChanges) {
|
|
29955
|
-
this.syncSyncingState(true);
|
|
29956
|
-
}
|
|
29957
|
-
}
|
|
29958
|
-
else {
|
|
29959
|
-
// Custom providers without an update origin cannot be diffed, so fall back to reporting the whole handshake.
|
|
29960
|
-
this.syncSyncingState(true);
|
|
29961
|
-
}
|
|
29962
|
-
void initializedObjects.whenNetworkSynced().finally(() => {
|
|
29963
|
-
if (this.core.store.objects !== initializedObjects) {
|
|
29964
|
-
return;
|
|
29965
|
-
}
|
|
29966
|
-
this.clearRemoteChangesSubscription();
|
|
29967
|
-
this.syncSyncingState(false);
|
|
29968
|
-
});
|
|
29969
|
-
}
|
|
29970
29930
|
emitObjectsChange() {
|
|
29971
29931
|
const objectsMap = this.core.store.objects;
|
|
29972
29932
|
if (!objectsMap) {
|
|
@@ -30758,7 +30718,7 @@ const KritzelExport = class {
|
|
|
30758
30718
|
return (h("div", { class: "export-tab-content" }, h("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 })));
|
|
30759
30719
|
}
|
|
30760
30720
|
render() {
|
|
30761
|
-
return (h(Host, { key: '
|
|
30721
|
+
return (h(Host, { key: '68aef5d406aa819577ca773ea3616b93b9dfc9e7' }, h("kritzel-dialog", { key: '5072ac78ce417ed4d057d44f5532c7ac5c0f5dd6', isOpen: this.isDialogOpen, dialogTitle: this.terms['export.dialogTitle'] ?? 'Export', closable: true, contained: true, onDialogClose: this.closeDialog }, h("div", { key: '8642b3f39b20a5434a8eb5346fb4a71b9aca39da', class: "export-content" }, h("kritzel-pill-tabs", { key: 'b45da668b2f777a826de32ff2fde51e72f6f3deb', tabs: this.tabs, value: this.activeTab, onValueChange: this.handleTabChange }), this.activeTab === 'viewport' && this.renderViewportExport(), this.activeTab === 'workspace' && this.renderWorkspaceExport()), h("div", { key: '594a6ade24ecd869e23e57228ad2f5eff9ee90a8', slot: "footer" }, h("button", { key: '187c56cfd5f00acedb1dfd337a192495a19b5362', class: "export-primary-button", onClick: this.handleExport }, this.terms['export.exportButton'] ?? 'Export')))));
|
|
30762
30722
|
}
|
|
30763
30723
|
};
|
|
30764
30724
|
KritzelExport.style = kritzelExportCss();
|
|
@@ -30773,7 +30733,7 @@ const KritzelFont = class {
|
|
|
30773
30733
|
size = 24;
|
|
30774
30734
|
color = '#000000';
|
|
30775
30735
|
render() {
|
|
30776
|
-
return (h(Host, { key: '
|
|
30736
|
+
return (h(Host, { key: '8e4cf962a3456fb293faa678725e0c86af08bf49' }, h("div", { key: 'acf6986196dffd5c00b7edefa9453259149bf3cf', class: "font-preview", style: {
|
|
30777
30737
|
fontFamily: this.fontFamily,
|
|
30778
30738
|
fontSize: `${this.size}px`,
|
|
30779
30739
|
color: this.color
|
|
@@ -30823,7 +30783,7 @@ const KritzelFontFamily = class {
|
|
|
30823
30783
|
label: option.label,
|
|
30824
30784
|
style: { fontFamily: option.cssFontFamily ?? option.value },
|
|
30825
30785
|
}));
|
|
30826
|
-
return (h(Host, { key: '
|
|
30786
|
+
return (h(Host, { key: '42b2805b1d2df47a1b2336dffac32ee50740809e' }, h("kritzel-dropdown", { key: '3e1f019b2ecacea061f687c93f4fdd6a384b93b7', options: dropdownOptions, value: this.selectedFontFamily, onValueChanged: this.handleDropdownValueChange, selectStyles: { fontFamily: selectedFontFamily } })));
|
|
30827
30787
|
}
|
|
30828
30788
|
static get watchers() { return {
|
|
30829
30789
|
"fontOptions": [{
|
|
@@ -30857,7 +30817,7 @@ const KritzelFontSize = class {
|
|
|
30857
30817
|
render() {
|
|
30858
30818
|
const color = 'var(--kritzel-global-text-primary)';
|
|
30859
30819
|
const sizes = this.sizes ?? [];
|
|
30860
|
-
return (h(Host, { key: '
|
|
30820
|
+
return (h(Host, { key: '18f23b3d58c708a2f385ec539b6a2f02fc33c12a' }, sizes.map(size => (h("div", { tabIndex: 0, class: {
|
|
30861
30821
|
'size-container': true,
|
|
30862
30822
|
'selected': this.selectedSize === size,
|
|
30863
30823
|
}, onClick: () => this.handleSizeClick(size), onKeyDown: event => this.handleKeyDown(event, size) }, h("kritzel-font", { fontFamily: this.fontFamily, size: size, color: color }))))));
|
|
@@ -30924,7 +30884,7 @@ const KritzelInput = class {
|
|
|
30924
30884
|
this.valueChange.emit(input.value);
|
|
30925
30885
|
};
|
|
30926
30886
|
render() {
|
|
30927
|
-
return (h(Host, { key: '
|
|
30887
|
+
return (h(Host, { key: 'b79679b0c9af30caa31423bdadb99819713c567e' }, h("div", { key: '7e54ab560bf19c41cc581e90777f3196931b727a', class: "input-container" }, this.label && h("label", { key: '9d4698d1c145a6aa481b4723d278ceb6e4909344', class: "input-label" }, this.label), h("div", { key: 'b4346d79a9b04ca3e663b490b837af3e8a838075', class: { 'input-wrapper': true, 'has-suffix': !!this.suffix } }, h("input", { key: '686abee5f9444b5227c634bab9743f32d964d74d', type: this.type, class: "text-input", value: this.inputValue, placeholder: this.placeholder, disabled: this.disabled, onInput: this.handleInput }), this.suffix && h("span", { key: 'd0daea49eb781f6c0e6ca310b5f0493e96be5de6', class: "input-suffix" }, this.suffix)))));
|
|
30928
30888
|
}
|
|
30929
30889
|
static get watchers() { return {
|
|
30930
30890
|
"value": [{
|
|
@@ -31006,10 +30966,10 @@ const KritzelLineEndings = class {
|
|
|
31006
30966
|
render() {
|
|
31007
30967
|
const startEnding = this.getStartEnding();
|
|
31008
30968
|
const endEnding = this.getEndEnding();
|
|
31009
|
-
return (h(Host, { key: '
|
|
30969
|
+
return (h(Host, { key: '81e3262408d26a06acb2677698832b89651292a1' }, h("div", { key: '85c67f948075b2d58abfbd9d168a84c89554e81f', class: "endings-section" }, h("div", { key: 'd10a0b1c58fd06926a83cd78e213417aca28d01c', class: "endings-row" }, this.styles.map(type => (h("button", { class: {
|
|
31010
30970
|
'ending-option': true,
|
|
31011
30971
|
'selected': startEnding === type,
|
|
31012
|
-
}, onClick: () => this.handleStartChange(type), title: type === 'none' ? 'No start arrow' : `${type} start arrow` }, this.renderEndingIcon(type, true)))))), h("div", { key: '
|
|
30972
|
+
}, onClick: () => this.handleStartChange(type), title: type === 'none' ? 'No start arrow' : `${type} start arrow` }, this.renderEndingIcon(type, true)))))), h("div", { key: 'fd99875f3cefa8c4e36e106e836088fa61c75432', class: "endings-section" }, h("div", { key: 'dbcd0a32f278cc0d0317913827034f912a14d2b4', class: "endings-row" }, this.styles.map(type => (h("button", { class: {
|
|
31013
30973
|
'ending-option': true,
|
|
31014
30974
|
'selected': endEnding === type,
|
|
31015
30975
|
}, onClick: () => this.handleEndChange(type), title: type === 'none' ? 'No end arrow' : `${type} end arrow` }, this.renderEndingIcon(type, false))))))));
|
|
@@ -31032,7 +30992,7 @@ const KritzelLoadingOverlay = class {
|
|
|
31032
30992
|
*/
|
|
31033
30993
|
text = 'Loading...';
|
|
31034
30994
|
render() {
|
|
31035
|
-
return (h(Host, { key: '
|
|
30995
|
+
return (h(Host, { key: 'bba8ce825e41dff170d9552c28ac996249639ff3' }, h("div", { key: 'af98ab01de836fb6c718f5ceda4a490d91231e66', class: { 'loading-overlay': true, visible: this.visible }, "aria-hidden": this.visible ? 'false' : 'true' }, h("span", { key: '7c04c6abcb445c34f9a036e1797605ef7d575031', class: "loading-spinner" }), this.text)));
|
|
31036
30996
|
}
|
|
31037
30997
|
};
|
|
31038
30998
|
KritzelLoadingOverlay.style = kritzelLoadingOverlayCss();
|
|
@@ -31084,7 +31044,7 @@ const KritzelLoginDialog = class {
|
|
|
31084
31044
|
this.dialogClosed.emit();
|
|
31085
31045
|
};
|
|
31086
31046
|
render() {
|
|
31087
|
-
return (h(Host, { key: '
|
|
31047
|
+
return (h(Host, { key: 'd805664c63cf0d21c827cd8c4f4e52aeeab55773' }, h("kritzel-dialog", { key: '00be052688de8289cc7940fad83200c4d961d765', dialogTitle: this.dialogTitle, isOpen: this.isDialogOpen, onDialogClose: this.closeDialog, size: "small", contained: true }, h("div", { key: '0dcc0c3e8ae4c058ee76e06d988bd120759f52e1', class: "login-content" }, this.subtitle && (h("p", { key: 'e9a53ce3a50c01426b834cce85438ac676f26ca2', class: "login-subtitle" }, this.subtitle)), h("div", { key: 'dead2054cf268e00e5c4be29a0a953d4dd28db71', class: "login-providers" }, this.providers.map(provider => (h("button", { key: provider.name, class: {
|
|
31088
31048
|
'provider-button': true,
|
|
31089
31049
|
'is-loading': this.loadingProvider === provider.name,
|
|
31090
31050
|
'is-disabled': this.loadingProvider !== null && this.loadingProvider !== provider.name,
|
|
@@ -31190,15 +31150,15 @@ const KritzelMasterDetail = class {
|
|
|
31190
31150
|
const selectedItem = this.items.find(item => item.id === this.selectedItemId);
|
|
31191
31151
|
const panelId = 'master-detail-panel';
|
|
31192
31152
|
const selectedTabId = selectedItem ? `tab-${selectedItem.id}` : undefined;
|
|
31193
|
-
return (h(Host, { key: '
|
|
31153
|
+
return (h(Host, { key: 'f54d66ffc0330fa9dc4294f6a21810e3dd5db495' }, h("div", { key: '8f786b099dd5d4b0efcc45cbfb38f37916f60126', class: {
|
|
31194
31154
|
'master-detail-container': true,
|
|
31195
31155
|
'is-mobile-detail-visible': this.showMobileDetail,
|
|
31196
|
-
} }, h("nav", { key: '
|
|
31156
|
+
} }, h("nav", { key: '1a5db5ba8ba393ff7f29b9d438c59acbb6fbd849', class: "master-menu", role: "tablist", "aria-orientation": "vertical", "aria-label": "Settings categories" }, this.items.map((item, index) => (h("button", { key: item.id, id: `tab-${item.id}`, ref: el => this.setTabRef(el, index), class: {
|
|
31197
31157
|
'menu-item': true,
|
|
31198
31158
|
'is-selected': item.id === this.selectedItemId,
|
|
31199
31159
|
'is-disabled': !!item.disabled,
|
|
31200
31160
|
'is-focused': index === this.focusedIndex,
|
|
31201
|
-
}, role: "tab", "aria-selected": item.id === this.selectedItemId ? 'true' : 'false', "aria-controls": panelId, "aria-disabled": item.disabled ? 'true' : undefined, tabIndex: this.getTabIndex(item, index), disabled: item.disabled, onClick: () => this.handleItemClick(item), onKeyDown: e => this.handleKeyDown(e, item, index), onFocus: () => this.handleFocus(index), onBlur: this.handleBlur }, item.icon && (h("kritzel-icon", { name: item.icon, size: 20, class: "menu-item-icon" })), h("span", { class: "menu-item-label" }, item.label), h("span", { class: "menu-item-chevron", "aria-hidden": "true" }, h("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "1.5", "stroke-linecap": "round", "stroke-linejoin": "round" }, h("path", { d: "m9 18 6-6-6-6" }))))))), h("div", { key: '
|
|
31161
|
+
}, role: "tab", "aria-selected": item.id === this.selectedItemId ? 'true' : 'false', "aria-controls": panelId, "aria-disabled": item.disabled ? 'true' : undefined, tabIndex: this.getTabIndex(item, index), disabled: item.disabled, onClick: () => this.handleItemClick(item), onKeyDown: e => this.handleKeyDown(e, item, index), onFocus: () => this.handleFocus(index), onBlur: this.handleBlur }, item.icon && (h("kritzel-icon", { name: item.icon, size: 20, class: "menu-item-icon" })), h("span", { class: "menu-item-label" }, item.label), h("span", { class: "menu-item-chevron", "aria-hidden": "true" }, h("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "1.5", "stroke-linecap": "round", "stroke-linejoin": "round" }, h("path", { d: "m9 18 6-6-6-6" }))))))), h("div", { key: '22943ef64af7b63780fc4a25d0009443b5e1b0ba', id: panelId, class: "detail-panel", role: "tabpanel", "aria-labelledby": selectedTabId }, h("button", { key: '777b26506f739290be2d2267c1bc1381d59475fa', class: "mobile-back-button", onClick: this.handleBackClick, "aria-label": "Back to menu" }, h("kritzel-icon", { key: '96fe6b08965d7c5c41673bae0a5c5cc12f575a8f', name: "chevron-left", size: 20, class: "mobile-back-icon" }), "Back"), h("slot", { key: '985869d89bb10860e4a4bf221523376b7111ec1d' })))));
|
|
31202
31162
|
}
|
|
31203
31163
|
static get watchers() { return {
|
|
31204
31164
|
"selectedItemId": [{
|
|
@@ -31271,7 +31231,7 @@ const KritzelMenu = class {
|
|
|
31271
31231
|
this.itemCloseChildMenu.emit(event.detail);
|
|
31272
31232
|
};
|
|
31273
31233
|
render() {
|
|
31274
|
-
return (h(Host, { key: '
|
|
31234
|
+
return (h(Host, { key: '9ab5256e8888aa48ab6018ffc1109f9614075772', tabIndex: 0, onClick: e => e.stopPropagation() }, this.openChildMenuItem && h("div", { key: '05415b8e7559af7bee51a2dcc62e8ed016fbfc42', class: "has-open-child-overlay", onClick: this.onOverlayClick }), this.items.map(item => (h("kritzel-menu-item", { key: item.id, "data-testid": `menu-item-${item.id}`, item: item, parent: this.parent, style: { pointerEvents: this.editingMenuItem && !item.isEditing ? 'none' : 'auto' }, onItemSelect: this.handleItemSelect, onItemSave: this.handleSave, onItemCancel: this.handleCancel, onItemToggleChildMenu: this.handleToggleChildMenu, onItemCloseChildMenu: this.handleCloseChildMenu })))));
|
|
31275
31235
|
}
|
|
31276
31236
|
};
|
|
31277
31237
|
KritzelMenu.style = kritzelMenuCss();
|
|
@@ -31376,12 +31336,12 @@ const KritzelMenuItem = class {
|
|
|
31376
31336
|
];
|
|
31377
31337
|
}
|
|
31378
31338
|
render() {
|
|
31379
|
-
return (h(Host, { key: '
|
|
31339
|
+
return (h(Host, { key: '9fd327cadf3c28f51a28d174a1c888c3891cbcbd', tabIndex: this.item.isDisabled ? -1 : 0, class: {
|
|
31380
31340
|
'selected': this.item.isSelected,
|
|
31381
31341
|
'editing': this.item.isEditing,
|
|
31382
31342
|
'disabled': this.item.isDisabled,
|
|
31383
31343
|
'child-open': this.item.isChildMenuOpen,
|
|
31384
|
-
}, onClick: this.handleItemSelect }, h("div", { key: '
|
|
31344
|
+
}, onClick: this.handleItemSelect }, h("div", { key: '080c4fb6e04d6c88d7fa1410a5b86caa4952ed07', class: "menu-item-overlay" }), this.item.isEditing ? this.renderEditMode() : this.renderViewMode()));
|
|
31385
31345
|
}
|
|
31386
31346
|
static get watchers() { return {
|
|
31387
31347
|
"item": [{
|
|
@@ -31533,7 +31493,7 @@ const KritzelMoreMenu = class {
|
|
|
31533
31493
|
this.closeMenu();
|
|
31534
31494
|
};
|
|
31535
31495
|
render() {
|
|
31536
|
-
return (h(Host, { key: '
|
|
31496
|
+
return (h(Host, { key: '1c7299e83343fee3daedb5abceb3a341071237db', class: { mobile: this.isTouchDevice }, style: { display: this.visible ? '' : 'none' } }, h("div", { key: '1b7f12ee8679d03ef3648cbda4bda16e692a322f', class: { 'more-menu-wrapper': true, visible: this.visible } }, h("button", { key: '71a6270b3b114f1fb030df57075f4adf215914a4', class: "more-menu-button", "data-testid": "more-menu-button", onClick: this.toggleMenu, "aria-label": this.terms['moreMenu.ariaLabel'] ?? 'More options' }, h("kritzel-icon", { key: 'c5ef80ec7d512a24cd45762397ca5c6727d260b3', name: this.icon, size: this.iconSize })), h("kritzel-portal", { key: '9e467825c1c8e81a35403e1d24be0badf1892548', anchor: this.menuAnchor, offsetY: this.offsetY, onClose: this.closeMenu }, h("kritzel-menu", { key: '6e629208a46247d0f5190c376b3feb5dbc54209a', items: this.resolveMenuLabels(this.visibleItems), onItemSelect: this.handleMenuItemSelect })))));
|
|
31537
31497
|
}
|
|
31538
31498
|
static get watchers() { return {
|
|
31539
31499
|
"items": [{
|
|
@@ -31705,7 +31665,7 @@ const KritzelNumericInput = class {
|
|
|
31705
31665
|
this.valueChange.emit(newValue);
|
|
31706
31666
|
};
|
|
31707
31667
|
render() {
|
|
31708
|
-
return (h(Host, { key: '
|
|
31668
|
+
return (h(Host, { key: '7af3efe94c98934dcfe701c516ffc7cea2b4fde9' }, h("div", { key: '81347ea86a62f72b5b7662d90670e2ace98b16e7', class: "input-container" }, this.label && h("label", { key: '35b7650a3c4d1b93dbcb763b0c8f3767e3b519ac', class: "input-label" }, this.label), h("div", { key: '691ade138e5ba2ef51a76b1fc54da51fb7dd7389', class: "input-wrapper" }, h("input", { key: '58445c41cc8be438d1065787d375fb9d271f3873', type: "number", class: "numeric-input", title: "", min: this.min === Number.MIN_SAFE_INTEGER ? undefined : this.min, max: this.max === Number.MAX_SAFE_INTEGER ? undefined : this.max, step: this.step, value: this.inputValue, placeholder: this.placeholder, onInput: this.handleInput, onBlur: this.handleBlur, onKeyDown: this.handleKeyDown, onInvalid: this.handleInvalid }), h("div", { key: 'c669fc612696c555b96f046a8c70e75e9650af23', class: "spinner-buttons" }, h("button", { key: 'ae904cc60925d48120405f74d656ee9cbf312d70', type: "button", class: "spinner-button spinner-up", onClick: this.handleIncrement, tabIndex: -1, "aria-label": "Increase value" }, h("svg", { key: '4a4964336820cfc2128b98bf245556425919dfb6', viewBox: "0 0 10 6", class: "spinner-icon" }, h("path", { key: 'f305136d337690b0eaa39983d26a67454e4862da', d: "M1 5L5 1L9 5", stroke: "currentColor", "stroke-width": "1.5", fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }))), h("button", { key: 'c90f2d9a3deac66dc577142f87f73aef491e5f25', type: "button", class: "spinner-button spinner-down", onClick: this.handleDecrement, tabIndex: -1, "aria-label": "Decrease value" }, h("svg", { key: '2a3e33c55b6ace48f15ec56d78c6aab782c64520', viewBox: "0 0 10 6", class: "spinner-icon" }, h("path", { key: 'f327413078824800ad061126417a8f25578ba2de', d: "M1 1L5 5L9 1", stroke: "currentColor", "stroke-width": "1.5", fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }))))))));
|
|
31709
31669
|
}
|
|
31710
31670
|
static get watchers() { return {
|
|
31711
31671
|
"value": [{
|
|
@@ -31715,7 +31675,7 @@ const KritzelNumericInput = class {
|
|
|
31715
31675
|
};
|
|
31716
31676
|
KritzelNumericInput.style = kritzelNumericInputCss();
|
|
31717
31677
|
|
|
31718
|
-
const kritzelOpacitySliderCss = () => `:host{display:flex;flex-direction:column;padding:0;box-sizing:border-box}.opacity-container{display:flex;align-items:center;width:232px}.slider-wrapper{flex:1;display:flex;align-items:center}.opacity-slider{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:3px;background:linear-gradient(
|
|
31678
|
+
const kritzelOpacitySliderCss = () => `:host{display:flex;flex-direction:column;padding:0;box-sizing:border-box}.opacity-container{display:flex;align-items:center;width:232px}.slider-wrapper{flex:1;display:flex;align-items:center}.opacity-slider{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:3px;background:linear-gradient( to right, var(--kritzel-opacity-slider-active-color, #007AFF) 0%, var(--kritzel-opacity-slider-active-color, #007AFF) var(--slider-progress, 100%), var(--kritzel-opacity-slider-track-color, #e0e0e0) var(--slider-progress, 100%), var(--kritzel-opacity-slider-track-color, #e0e0e0) 100% );outline:none;cursor:var(--kritzel-global-pointer-cursor, pointer)}.opacity-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:var(--kritzel-opacity-slider-thumb-color, #ffffff);border:2px solid var(--kritzel-opacity-slider-thumb-border-color, #007AFF);cursor:var(--kritzel-global-pointer-cursor, pointer);box-shadow:0 1px 3px rgba(0, 0, 0, 0.2);transition:transform 0.1s ease}.opacity-slider::-webkit-slider-thumb:hover{transform:scale(1.1)}.opacity-slider::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--kritzel-opacity-slider-thumb-color, #ffffff);border:2px solid var(--kritzel-opacity-slider-thumb-border-color, #007AFF);cursor:var(--kritzel-global-pointer-cursor, pointer);box-shadow:0 1px 3px rgba(0, 0, 0, 0.2);transition:transform 0.1s ease}.opacity-slider::-moz-range-thumb:hover{transform:scale(1.1)}.opacity-slider::-moz-range-track{height:6px;border-radius:3px;background:transparent}.opacity-slider:focus{outline:none}.opacity-slider:focus::-webkit-slider-thumb{box-shadow:0 0 0 2px var(--kritzel-global-focus-ring-color, rgba(0, 122, 255, 0.3))}.opacity-slider:focus::-moz-range-thumb{box-shadow:0 0 0 2px var(--kritzel-global-focus-ring-color, rgba(0, 122, 255, 0.3))}`;
|
|
31719
31679
|
|
|
31720
31680
|
const KritzelOpacitySlider = class {
|
|
31721
31681
|
constructor(hostRef) {
|
|
@@ -31744,7 +31704,7 @@ const KritzelOpacitySlider = class {
|
|
|
31744
31704
|
}
|
|
31745
31705
|
render() {
|
|
31746
31706
|
const percentage = this.getPercentage();
|
|
31747
|
-
return (h(Host, { key: '
|
|
31707
|
+
return (h(Host, { key: 'f1f0dad662e93506ddfc99e648a3cedc841de730' }, h("div", { key: '7b495a97a92f8fa8b28c33323d60b790781c7271', class: "opacity-container" }, h("div", { key: 'c41d3b0543a3bf78dc15602e0439f56aef21ddbe', class: "slider-wrapper" }, h("input", { key: 'd9ba313d84b91a0f9312ef1ad9fe67cc231073c9', type: "range", class: "opacity-slider", min: this.min, max: this.max, step: this.step, value: this.value, onInput: (e) => this.handleInput(e), style: {
|
|
31748
31708
|
'--slider-progress': `${percentage}%`,
|
|
31749
31709
|
'--kritzel-opacity-slider-thumb-border-color': this.previewColor,
|
|
31750
31710
|
} })))));
|
|
@@ -31809,7 +31769,7 @@ const KritzelPillTabs = class {
|
|
|
31809
31769
|
buttons?.[newIndex]?.focus();
|
|
31810
31770
|
}
|
|
31811
31771
|
render() {
|
|
31812
|
-
return (h(Host, { key: '
|
|
31772
|
+
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: {
|
|
31813
31773
|
'pill-tab': true,
|
|
31814
31774
|
'selected': this.value === tab.id,
|
|
31815
31775
|
}, 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)))))));
|
|
@@ -32097,7 +32057,7 @@ const KritzelPortal = class {
|
|
|
32097
32057
|
this.portal.style.visibility = 'visible';
|
|
32098
32058
|
}
|
|
32099
32059
|
render() {
|
|
32100
|
-
return (h(Host, { key: '
|
|
32060
|
+
return (h(Host, { key: '3cdb321c2292fc7927a89efef4f3e4e37d68ac8f', style: { display: this.anchor ? 'block' : 'none' } }, h("slot", { key: '54a41f7983405f23e305791bc42513f59c027733' })));
|
|
32101
32061
|
}
|
|
32102
32062
|
static get watchers() { return {
|
|
32103
32063
|
"anchor": [{
|
|
@@ -32111,7 +32071,7 @@ const KritzelPortal = class {
|
|
|
32111
32071
|
* This file is auto-generated by the version bump scripts.
|
|
32112
32072
|
* Do not modify manually.
|
|
32113
32073
|
*/
|
|
32114
|
-
const KRITZEL_VERSION = '0.4.
|
|
32074
|
+
const KRITZEL_VERSION = '0.4.24';
|
|
32115
32075
|
|
|
32116
32076
|
const kritzelSettingsCss = () => `:host{display:contents}kritzel-dialog{--kritzel-dialog-body-padding:0;--kritzel-dialog-width-large:800px;--kritzel-dialog-height-large:500px}.footer-button{padding:8px 16px;border-radius:6px;cursor:pointer;font-size:14px}.cancel-button{border:1px solid #ebebeb;background:#fff;color:inherit}.cancel-button:hover{background:#f5f5f5}.settings-tab-panel{display:none}.settings-tab-panel.is-active{display:block}.settings-content{padding:0}.settings-content h3{margin:0 0 16px 0;font-size:18px;font-weight:600;color:var(--kritzel-settings-content-heading-color, #333333)}.settings-content p{margin:0;font-size:14px;color:var(--kritzel-settings-content-text-color, #666666);line-height:1.5}.settings-group{display:flex;flex-direction:column;gap:24px}.settings-item{display:flex;flex-direction:column;gap:8px}.settings-row{display:flex;align-items:center;justify-content:space-between;gap:16px}.settings-label{font-size:14px;font-weight:600;color:var(--kritzel-settings-label-color, #333333);margin:0 0 4px 0}.settings-description{font-size:12px;color:var(--kritzel-settings-description-color, #888888);margin:0;line-height:1.4}.shortcuts-list{display:flex;flex-direction:column;gap:24px}.shortcuts-category{display:flex;flex-direction:column;gap:8px}.shortcuts-category-title{font-size:14px;font-weight:600;color:var(--kritzel-settings-label-color, #333333);margin:0 0 4px 0}.shortcuts-group{display:flex;flex-direction:column;gap:4px}.shortcut-item{display:flex;justify-content:space-between;align-items:center;padding:6px 8px;border-radius:4px;background:var(--kritzel-settings-shortcut-item-bg, rgba(0, 0, 0, 0.02))}.shortcut-label{font-size:14px;color:var(--kritzel-settings-content-text-color, #666666)}.shortcut-key{font-family:monospace;font-size:12px;padding:2px 8px;border-radius:4px;background:var(--kritzel-settings-shortcut-key-bg, #f0f0f0);color:var(--kritzel-settings-shortcut-key-color, #333333);border:1px solid var(--kritzel-settings-shortcut-key-border, #ddd)}`;
|
|
32117
32077
|
|
|
@@ -32323,7 +32283,7 @@ const KritzelSettings = class {
|
|
|
32323
32283
|
return (h("div", { class: "settings-categories-wrapper" }, h("div", { class: { 'settings-tab-panel': true, 'is-active': this.selectedCategoryId === 'general' } }, h("div", { class: "settings-content" }, h("h3", null, this.t('settings.general.title', 'General Settings')), h("div", { class: "settings-group" }, h("div", { class: "settings-item" }, h("label", { class: "settings-label" }, this.t('settings.general.theme.label', 'Theme')), h("p", { class: "settings-description" }, this.t('settings.general.theme.description', 'Select a registered color theme for the editor interface.')), h("kritzel-dropdown", { options: this.availableThemes.map(t => ({ value: t, label: t })), value: this.theme, onValueChanged: this.handleThemeChange })), this.availableLocales.length > 0 && (h("div", { class: "settings-item" }, h("label", { class: "settings-label" }, this.t('settings.general.language.label', 'Language')), h("p", { class: "settings-description" }, this.t('settings.general.language.description', 'Select the display language for the editor interface.')), h("kritzel-dropdown", { options: this.availableLocales.map(l => ({ value: l.code, label: l.label })), value: this.locale, onValueChanged: this.handleLocaleChange }))), h("div", { class: "settings-item" }, h("label", { class: "settings-label" }, this.t('settings.general.lockDrawingScale.label', 'Lock Drawing Scale')), h("p", { class: "settings-description" }, this.t('settings.general.lockDrawingScale.description', 'When enabled, drawn objects maintain a fixed visual size regardless of the current zoom level.')), h("kritzel-slide-toggle", { checked: this.lockDrawingScale, label: this.t('settings.general.lockDrawingScale.label', 'Lock Drawing Scale'), onCheckedChange: this.handleLockDrawingScaleChange }))))), h("div", { class: { 'settings-tab-panel': true, 'is-active': this.selectedCategoryId === 'viewport' } }, h("div", { class: "settings-content" }, h("h3", null, this.t('settings.viewport.title', 'Viewport Settings')), h("div", { class: "settings-group" }, h("div", { class: "settings-item" }, h("label", { class: "settings-label" }, this.t('settings.viewport.minZoom.label', 'Minimum Zoom Level')), h("p", { class: "settings-description" }, this.t('settings.viewport.minZoom.description', 'Sets the minimum zoom level. Lower values allow zooming out further to see more of the canvas.')), h("kritzel-numeric-input", { value: this.scaleMin, min: 0.0001, max: 1, step: 0.0001, onValueChange: this.handleScaleMinChange })), h("div", { class: "settings-item" }, h("label", { class: "settings-label" }, this.t('settings.viewport.maxZoom.label', 'Maximum Zoom Level')), h("p", { class: "settings-description" }, this.t('settings.viewport.maxZoom.description', 'Sets the maximum zoom level. Higher values allow zooming in closer for detailed work.')), h("kritzel-numeric-input", { value: this.scaleMax, min: 1, max: 1000, step: 1, onValueChange: this.handleScaleMaxChange })), h("div", { class: "settings-item" }, h("label", { class: "settings-label" }, this.t('settings.viewport.boundaryLeft.label', 'Viewport Boundary Left')), h("p", { class: "settings-description" }, this.t('settings.viewport.boundaryLeft.description', 'Left boundary in world coordinates. Set to limit how far left the viewport can pan.')), h("kritzel-numeric-input", { value: this.viewportBoundaryLeft, step: 100, placeholder: this.t('settings.viewport.boundaryPlaceholder', 'Infinite'), onValueChange: this.handleViewportBoundaryLeftChange })), h("div", { class: "settings-item" }, h("label", { class: "settings-label" }, this.t('settings.viewport.boundaryRight.label', 'Viewport Boundary Right')), h("p", { class: "settings-description" }, this.t('settings.viewport.boundaryRight.description', 'Right boundary in world coordinates. Set to limit how far right the viewport can pan.')), h("kritzel-numeric-input", { value: this.viewportBoundaryRight, step: 100, placeholder: this.t('settings.viewport.boundaryPlaceholder', 'Infinite'), onValueChange: this.handleViewportBoundaryRightChange })), h("div", { class: "settings-item" }, h("label", { class: "settings-label" }, this.t('settings.viewport.boundaryTop.label', 'Viewport Boundary Top')), h("p", { class: "settings-description" }, this.t('settings.viewport.boundaryTop.description', 'Top boundary in world coordinates. Set to limit how far up the viewport can pan.')), h("kritzel-numeric-input", { value: this.viewportBoundaryTop, step: 100, placeholder: this.t('settings.viewport.boundaryPlaceholder', 'Infinite'), onValueChange: this.handleViewportBoundaryTopChange })), h("div", { class: "settings-item" }, h("label", { class: "settings-label" }, this.t('settings.viewport.boundaryBottom.label', 'Viewport Boundary Bottom')), h("p", { class: "settings-description" }, this.t('settings.viewport.boundaryBottom.description', 'Bottom boundary in world coordinates. Set to limit how far down the viewport can pan.')), h("kritzel-numeric-input", { value: this.viewportBoundaryBottom, step: 100, placeholder: this.t('settings.viewport.boundaryPlaceholder', 'Infinite'), onValueChange: this.handleViewportBoundaryBottomChange }))))), h("div", { class: { 'settings-tab-panel': true, 'is-active': this.selectedCategoryId === 'shortcuts' } }, h("div", { class: "settings-content" }, h("h3", null, this.t('settings.shortcuts.title', 'Keyboard Shortcuts')), h("div", { class: "shortcuts-list" }, Array.from(this.groupShortcutsByCategory()).map(([category, shortcuts]) => (h("div", { class: "shortcuts-category", key: category }, h("h4", { class: "shortcuts-category-title" }, category), h("div", { class: "shortcuts-group" }, shortcuts.map(shortcut => (h("div", { class: "shortcut-item", key: shortcut.key + shortcut.label }, h("span", { class: "shortcut-label" }, shortcut.label), h("kbd", { class: "shortcut-key" }, this.formatKeyCombo(shortcut)))))))))))), h("div", { class: { 'settings-tab-panel': true, 'is-active': this.selectedCategoryId === 'developer' } }, h("div", { class: "settings-content" }, h("h3", null, this.t('settings.developer.title', 'Developer Options')), h("div", { class: "settings-group" }, h("div", { class: "settings-item" }, h("label", { class: "settings-label" }, this.t('settings.developer.showViewportInfo.label', 'Show Viewport Info')), h("p", { class: "settings-description" }, this.t('settings.developer.showViewportInfo.description', 'Display viewport debug information such as position, zoom level, and boundaries.')), h("kritzel-slide-toggle", { checked: this.debugInfo.showViewportInfo, label: this.t('settings.developer.showViewportInfo.label', 'Show Viewport Info'), onCheckedChange: this.handleDebugInfoChange('showViewportInfo') })), h("div", { class: "settings-item" }, h("label", { class: "settings-label" }, this.t('settings.developer.showObjectInfo.label', 'Show Object Info')), h("p", { class: "settings-description" }, this.t('settings.developer.showObjectInfo.description', 'Display debug information about objects on the canvas.')), h("kritzel-slide-toggle", { checked: this.debugInfo.showObjectInfo, label: this.t('settings.developer.showObjectInfo.label', 'Show Object Info'), onCheckedChange: this.handleDebugInfoChange('showObjectInfo') })), h("div", { class: "settings-item" }, h("label", { class: "settings-label" }, this.t('settings.developer.showSyncProviderInfo.label', 'Show Sync Provider Info')), h("p", { class: "settings-description" }, this.t('settings.developer.showSyncProviderInfo.description', 'Display debug information about the sync provider connection status.')), h("kritzel-slide-toggle", { checked: this.debugInfo.showSyncProviderInfo, label: this.t('settings.developer.showSyncProviderInfo.label', 'Show Sync Provider Info'), onCheckedChange: this.handleDebugInfoChange('showSyncProviderInfo') })), h("div", { class: "settings-item" }, h("label", { class: "settings-label" }, this.t('settings.developer.showMigrationInfo.label', 'Show Migration Info')), h("p", { class: "settings-description" }, this.t('settings.developer.showMigrationInfo.description', 'Display debug information about data migrations.')), h("kritzel-slide-toggle", { checked: this.debugInfo.showMigrationInfo, label: this.t('settings.developer.showMigrationInfo.label', 'Show Migration Info'), onCheckedChange: this.handleDebugInfoChange('showMigrationInfo') }))))), h("div", { class: { 'settings-tab-panel': true, 'is-active': this.selectedCategoryId === 'about' } }, h("div", { class: "settings-content" }, h("h3", null, this.t('settings.about.title', 'About')), h("p", null, this.t('settings.about.description', 'Kritzel - A drawing application')), h("p", { class: "version-info" }, "Version ", KRITZEL_VERSION), h("p", { class: "version-info" }, "App-State Schema v", CURRENT_APP_STATE_SCHEMA_VERSION), h("p", { class: "version-info" }, "Workspace Schema v", CURRENT_WORKSPACE_SCHEMA_VERSION)))));
|
|
32324
32284
|
}
|
|
32325
32285
|
render() {
|
|
32326
|
-
return (h(Host, { key: '
|
|
32286
|
+
return (h(Host, { key: '830e1761493f6a45dfc8d7a63e260de00418c219' }, h("kritzel-dialog", { key: '35bebb215d583ee21b658c5a926335c6c4ffbbeb', isOpen: this.isDialogOpen, dialogTitle: this.t('settings.dialogTitle', 'Settings'), size: "large", contained: true, onDialogClose: this.closeDialog }, h("kritzel-master-detail", { key: '0bfbe1a9de453b9282a4a787aaa243f50c2af620', items: this.categories, selectedItemId: this.selectedCategoryId, onItemSelect: this.handleCategorySelect }, this.renderCategoryContent()))));
|
|
32327
32287
|
}
|
|
32328
32288
|
static get watchers() { return {
|
|
32329
32289
|
"settings": [{
|
|
@@ -32356,10 +32316,10 @@ const KritzelShapeFill = class {
|
|
|
32356
32316
|
return (h("svg", { viewBox: "0 0 24 24", class: "fill-icon" }, h("rect", { x: "4", y: "4", width: "16", height: "16", rx: "2", fill: strokeColor, stroke: strokeColor, "stroke-width": "2" })));
|
|
32357
32317
|
}
|
|
32358
32318
|
render() {
|
|
32359
|
-
return (h(Host, { key: '
|
|
32319
|
+
return (h(Host, { key: 'ec214708dd4210e0c36734cb81fba76849114f9b' }, h("div", { key: 'd64bacdb7c50b31f3c460bdf2e939b4159d4d000', class: "fill-row" }, h("button", { key: '812735be08265145a13ab116e7153fd684f8b77f', class: {
|
|
32360
32320
|
'fill-option': true,
|
|
32361
32321
|
'selected': this.value === 'transparent',
|
|
32362
|
-
}, onClick: () => this.handleFillChange('transparent'), title: "Transparent background" }, this.renderFillIcon('transparent')), h("button", { key: '
|
|
32322
|
+
}, onClick: () => this.handleFillChange('transparent'), title: "Transparent background" }, this.renderFillIcon('transparent')), h("button", { key: 'cb5caf2db8aece4bef2eebca37e7ac36383bb450', class: {
|
|
32363
32323
|
'fill-option': true,
|
|
32364
32324
|
'selected': this.value === 'filled',
|
|
32365
32325
|
}, onClick: () => this.handleFillChange('filled'), title: "Filled background" }, this.renderFillIcon('filled')))));
|
|
@@ -35563,9 +35523,9 @@ const KritzelShareDialog = class {
|
|
|
35563
35523
|
this.dialogClosed.emit();
|
|
35564
35524
|
};
|
|
35565
35525
|
render() {
|
|
35566
|
-
return (h(Host, { key: '
|
|
35526
|
+
return (h(Host, { key: '0e6a5c0b25595499bc676008b22a6b27752666f3' }, h("kritzel-dialog", { key: '1770c3cf05e2ff488872da0db990d119f6903f26', dialogTitle: this.terms['share.dialogTitle'] ?? 'Share Workspace', size: "small", isOpen: this.isDialogOpen, onDialogClose: this.closeDialog, contained: true }, h("div", { key: 'ac629b3c4078c121009d64d7ba29ca8cc0fd7d64', class: "share-content" }, h("div", { key: 'c31fd9bcec831b9105a9784c0764b7d4773fc571', class: "share-section" }, h("div", { key: '1e1177dc959ca3e8e4447e6eda4ed4bf7f2faaff', class: "share-row" }, h("div", { key: 'b82c3a22f22291f2a79b0ebc98825fbc35e849fe', class: "share-label-group" }, h("label", { key: 'f4551050cb0434896f29524b540a7222f48085f2', class: "share-label" }, this.terms['share.linkSharing.label'] ?? 'Link sharing'), h("p", { key: '13ae0f33238041ea949bdd55ac5ba271c58fbdc5', class: "share-description" }, this.internalIsPublic
|
|
35567
35527
|
? (this.terms['share.linkSharing.enabledDescription'] ?? 'Anyone with the link can access this workspace.')
|
|
35568
|
-
: (this.terms['share.linkSharing.disabledDescription'] ?? 'Link sharing is disabled. Only you can access this workspace.'))), h("kritzel-slide-toggle", { key: '
|
|
35528
|
+
: (this.terms['share.linkSharing.disabledDescription'] ?? 'Link sharing is disabled. Only you can access this workspace.'))), h("kritzel-slide-toggle", { key: '9e7b75fe3ae7994fae8a498f1654636481365768', checked: this.internalIsPublic, onCheckedChange: this.handleToggleChange, label: this.terms['share.linkSharing.toggleLabel'] ?? 'Enable link sharing' }))), this.internalIsPublic && (h("div", { key: '1fb6f344bc897284c7d942aeddc77968f7af0509', class: "share-section" }, h("div", { key: '23b4889472eeb7c36c5ebf3655883346cb32bf6c', class: "share-url-container" }, h("input", { key: 'ed5b25430b5013c453ea829ce328a5b4adafd2d9', type: "text", class: "share-url-input", value: this.getShareUrl(), readOnly: true, onClick: (e) => e.target.select() }), h("button", { key: 'ba5b067993e0fab26b149057a4e70f394525cc90', class: { 'copy-button': true, 'copy-success': this.copySuccess }, onClick: this.handleCopyUrl, title: this.copySuccess ? (this.terms['share.copyLink.copied'] ?? 'Copied!') : (this.terms['share.copyLink.title'] ?? 'Copy link') }, h("kritzel-icon", { key: '3f684e493506b62d5c5b32f991c2855f64302e29', name: this.copySuccess ? 'check' : 'copy', size: 18 }))), this.qrCodeDataUrl && (h("div", { key: 'a6314296e3301a1d487d34573fcf581a307cebf4', class: "share-qr-container" }, h("img", { key: '7521ce575728d0418564dc2c407381a536053394', class: "share-qr-image", src: this.qrCodeDataUrl, alt: "QR code for share link" })))))))));
|
|
35569
35529
|
}
|
|
35570
35530
|
static get watchers() { return {
|
|
35571
35531
|
"isPublic": [{
|
|
@@ -35606,7 +35566,7 @@ const KritzelSlideToggle = class {
|
|
|
35606
35566
|
}
|
|
35607
35567
|
};
|
|
35608
35568
|
render() {
|
|
35609
|
-
return (h(Host, { key: '
|
|
35569
|
+
return (h(Host, { key: 'd92f521cf1c7c16db079416dd0943c7bc4f721e9', class: { checked: this.checked, disabled: this.disabled }, tabIndex: this.disabled ? -1 : 0, role: "switch", "aria-checked": this.checked ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.label, onClick: this.handleToggle, onKeyDown: this.handleKeyDown }, h("div", { key: 'e6086cf26ff3065d1215c548f30318414f710798', class: "toggle-track" }, h("div", { key: '38e6c2edef2fde42ac75063858ad44b83e3f8f7b', class: "toggle-thumb" }))));
|
|
35610
35570
|
}
|
|
35611
35571
|
};
|
|
35612
35572
|
KritzelSlideToggle.style = kritzelSlideToggleCss();
|
|
@@ -35706,7 +35666,7 @@ const KritzelSplitButton = class {
|
|
|
35706
35666
|
this.menuScrollTop = event.target.scrollTop;
|
|
35707
35667
|
};
|
|
35708
35668
|
render() {
|
|
35709
|
-
return (h(Host, { key: '
|
|
35669
|
+
return (h(Host, { key: 'd8dac18091d84994607f96dea4cb09f5823b8477', class: { mobile: this.isTouchDevice } }, h("button", { key: '7601c722ba60bf73e8009c32b40ff88e51680011', class: "split-main-button", tabIndex: 0, onClick: this.handleButtonClick, disabled: this.mainButtonDisabled, "aria-label": "Main action" }, this.buttonIcon && h("kritzel-icon", { key: '567ea117b77ee0e8a4e023bc80d5cbafd44e7e05', name: this.buttonIcon })), h("div", { key: '53ae4da47818cb474fe659700d59171a9fe1b150', class: "split-divider" }), h("button", { key: '3893a36b2e33c86aa013e4a28a4428ba6ad4bb55', ref: el => (this.splitMenuButtonRef = el), class: "split-menu-button", tabIndex: 0, onClick: this.toggleMenu, disabled: this.menuButtonDisabled, "aria-label": "Open menu" }, h("kritzel-icon", { key: '2dd391e711b37b41ccfe310fc705842fbde80110', name: this.dropdownIcon })), h("kritzel-portal", { key: '5e5d03337b0fd3e11547bb1678595dd1559e0b88', anchor: this.anchorElement, offsetY: 4, onClose: this.closeMenu }, h("kritzel-menu", { key: 'c50fe3d6591024513e0cb2ecce97f23a34499fe5', ref: el => (this.menuRef = el), items: this.items, onItemSelect: this.handleItemSelect, onItemSave: this.handleItemSave, onItemCancel: this.handleItemCancel, onItemToggleChildMenu: this.handleItemToggleChildMenu, onItemCloseChildMenu: this.handleItemCloseChildMenu, onClose: this.closeMenu, onScroll: this.handleScroll }))));
|
|
35710
35670
|
}
|
|
35711
35671
|
};
|
|
35712
35672
|
KritzelSplitButton.style = kritzelSplitButtonCss();
|
|
@@ -35727,7 +35687,7 @@ const KritzelStrokeSize = class {
|
|
|
35727
35687
|
}
|
|
35728
35688
|
render() {
|
|
35729
35689
|
const sizes = this.sizes ?? [];
|
|
35730
|
-
return (h(Host, { key: '
|
|
35690
|
+
return (h(Host, { key: 'c0920f9f5c038774e8515134e5d5a89dc71b11ab' }, h("div", { key: '05dc9a4b9e91114562bdbaede31c37576a9bd6e9', class: "size-grid" }, sizes.map(size => (h("div", { tabIndex: 0, class: {
|
|
35731
35691
|
'size-container': true,
|
|
35732
35692
|
'selected': this.selectedSize === size,
|
|
35733
35693
|
}, onClick: () => this.handleSizeClick(size) }, h("kritzel-color", { value: 'var(--kritzel-global-text-primary)', size: size })))))));
|
|
@@ -35746,7 +35706,7 @@ const KritzelSyncIndicator = class {
|
|
|
35746
35706
|
/** The text displayed next to the spinner. */
|
|
35747
35707
|
text = 'Syncing...';
|
|
35748
35708
|
render() {
|
|
35749
|
-
return (h(Host, { key: '
|
|
35709
|
+
return (h(Host, { key: '2622544751cd377f172115f5f73e21e0f0995185' }, h("div", { key: '0cf49cbfbfa4ed0625eeff443ba1e2996a26562e', class: { indicator: true, visible: this.visible }, role: "status", "aria-live": "polite", "aria-label": "Synchronizing workspace" }, h("span", { key: '053ddc85e9ad2210822d3100ecf5d54d7170d470', class: "spinner", "aria-hidden": "true" }), h("span", { key: '94ea7f6be206688e9065d02b1d5c753e3598e9df' }, this.text))));
|
|
35750
35710
|
}
|
|
35751
35711
|
};
|
|
35752
35712
|
KritzelSyncIndicator.style = kritzelSyncIndicatorCss();
|
|
@@ -36159,14 +36119,14 @@ const KritzelTooltip = class {
|
|
|
36159
36119
|
}
|
|
36160
36120
|
}
|
|
36161
36121
|
render() {
|
|
36162
|
-
return (h(Host, { key: '
|
|
36122
|
+
return (h(Host, { key: '2fee8c1343888c34bbed7dd172b946ff732f6fc1', style: {
|
|
36163
36123
|
position: 'fixed',
|
|
36164
36124
|
zIndex: '9999',
|
|
36165
36125
|
transition: 'opacity 0.3s ease-in-out, transform 0.3s ease-in-out',
|
|
36166
36126
|
visibility: this.isVisible ? 'visible' : 'hidden',
|
|
36167
36127
|
left: `${this.positionX}px`,
|
|
36168
36128
|
bottom: `${this.positionY}px`,
|
|
36169
|
-
} }, h("div", { key: '
|
|
36129
|
+
} }, h("div", { key: 'fe72d28fb81f24309077f30193c84064afcd6ebe', class: "tooltip-content", onClick: event => event.stopPropagation(), onPointerDown: event => event.stopPropagation(), onMouseDown: event => event.stopPropagation() }, h("slot", { key: 'ee95da259971a58b048780b21a0018fd6731bb03' }))));
|
|
36170
36130
|
}
|
|
36171
36131
|
static get watchers() { return {
|
|
36172
36132
|
"triggerElement": [{
|
|
@@ -36207,7 +36167,7 @@ const KritzelUtilityPanel = class {
|
|
|
36207
36167
|
this.redo.emit();
|
|
36208
36168
|
}
|
|
36209
36169
|
render() {
|
|
36210
|
-
return (h(Host, { key: '
|
|
36170
|
+
return (h(Host, { key: 'bc0322b40c4ff4fba997f1dc1901edbb934e4a0a' }, h("button", { key: 'ff48698d2757b0d99cacfd4fbaa5a7b0ae8f1604', class: "utility-button", "data-testid": "utility-undo", disabled: !this.undoState?.canUndo, onClick: event => this.handleUndo(event), "aria-label": this.terms['utility.undo'] ?? 'Undo' }, h("kritzel-icon", { key: 'bc6756df10c7979e06cd9ebdb172b5ef54c7bb67', name: "undo" })), h("button", { key: '07afd176ae1b5cb5a65cd097ce4a99a131aee7aa', class: "utility-button", "data-testid": "utility-redo", disabled: !this.undoState?.canRedo, onClick: event => this.handleRedo(event), "aria-label": this.terms['utility.redo'] ?? 'Redo' }, h("kritzel-icon", { key: '4573d7ab91f0cbfa0aafb607050f0b09048d60e1', name: "redo" })), h("div", { key: 'b663c43ef9181f61b12614245a65d063f6d94eaf', class: "utility-separator" }), h("button", { key: '248f7ae7cabbd83585674dcb16124a3f9fa2449b', class: "utility-button", "data-testid": "utility-delete", onClick: () => this.delete.emit(), "aria-label": this.terms['utility.delete'] ?? 'Delete selected items' }, h("kritzel-icon", { key: '6cbc48e118c96770333ed3e5947e54e497e93716', name: "delete" }))));
|
|
36211
36171
|
}
|
|
36212
36172
|
};
|
|
36213
36173
|
KritzelUtilityPanel.style = kritzelUtilityPanelCss();
|
|
@@ -36228,7 +36188,7 @@ const KritzelWatermark = class {
|
|
|
36228
36188
|
label;
|
|
36229
36189
|
render() {
|
|
36230
36190
|
const label = this.label ?? this.core.localizationManager.translate('watermark.poweredBy');
|
|
36231
|
-
return (h(Host, { key: '
|
|
36191
|
+
return (h(Host, { key: 'de81b568421f5517fe19897bd4a4a5d58d1f622d' }, h("a", { key: '6278f78180869650afc181aac5c37aa401c09040', class: "watermark-link", href: KRITZEL_WEBSITE_URL, target: "_blank", rel: "noopener noreferrer", part: "watermark", onPointerDown: (ev) => ev.stopPropagation(), onPointerUp: (ev) => ev.stopPropagation() }, label)));
|
|
36232
36192
|
}
|
|
36233
36193
|
};
|
|
36234
36194
|
KritzelWatermark.style = kritzelWatermarkCss();
|
|
@@ -36416,7 +36376,7 @@ const KritzelZoomPanel = class {
|
|
|
36416
36376
|
return Number.isFinite(this.zoomPercent) ? Math.max(1, Math.round(this.zoomPercent)) : 100;
|
|
36417
36377
|
}
|
|
36418
36378
|
render() {
|
|
36419
|
-
return (h(Host, { key: '
|
|
36379
|
+
return (h(Host, { key: '02de6ea9f2f7b6e057555e3b7e1ee3340cab5fa1' }, h("div", { key: '7531e03a4cfa05165057410e4dde3b4cc695f4de', class: { panel: true, visible: this.visible } }, h("button", { key: '57d324c7ad1c21ee8e107ad41cf1a4b708b0fccc', class: "zoom-button", type: "button", "aria-label": this.terms['zoom.zoomOut'] ?? 'Zoom out', disabled: this.disabled, onClick: this.handleZoomOut }, h("kritzel-icon", { key: '656128018addf58a59f223fab400605aeef4f5a8', name: "minus" })), h("span", { key: '32562a4709f8dea98fe3a80bf8a63722b176a3f4', class: "zoom-level", "aria-live": "polite" }, this.normalizedZoomPercent, "%"), h("button", { key: '4c0c5141597f0265ff4bf9d7bd1105666b6b7a76', class: "zoom-button", type: "button", "aria-label": this.terms['zoom.zoomIn'] ?? 'Zoom in', disabled: this.disabled, onClick: this.handleZoomIn }, h("kritzel-icon", { key: 'f85f69f5b0e214a557dfecb6164f5577af66ca7f', name: "plus" })))));
|
|
36420
36380
|
}
|
|
36421
36381
|
};
|
|
36422
36382
|
KritzelZoomPanel.style = kritzelZoomPanelCss();
|