@magicpages/kalotyp-ui 0.1.1 → 0.2.0
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/dist/canvas/position-handles.d.ts.map +1 -1
- package/dist/canvas/preview-canvas.d.ts +1 -1
- package/dist/canvas/preview-canvas.d.ts.map +1 -1
- package/dist/canvas/render-overlay.d.ts.map +1 -1
- package/dist/icons.d.ts +1 -1
- package/dist/icons.d.ts.map +1 -1
- package/dist/index.d.ts +42 -42
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15928 -5184
- package/dist/index.js.map +1 -1
- package/dist/kalotyp-ui.css +2 -0
- package/dist/output/popover.d.ts.map +1 -1
- package/dist/plugins/annotate/coord-inputs.d.ts +10 -2
- package/dist/plugins/annotate/coord-inputs.d.ts.map +1 -1
- package/dist/plugins/annotate/emoji-data.d.ts +27 -0
- package/dist/plugins/annotate/emoji-data.d.ts.map +1 -0
- package/dist/plugins/annotate/emoji-images.d.ts +47 -0
- package/dist/plugins/annotate/emoji-images.d.ts.map +1 -0
- package/dist/plugins/annotate/emoji-picker.d.ts +29 -0
- package/dist/plugins/annotate/emoji-picker.d.ts.map +1 -0
- package/dist/plugins/annotate/fonts-loader.d.ts +22 -0
- package/dist/plugins/annotate/fonts-loader.d.ts.map +1 -0
- package/dist/plugins/annotate/mount.d.ts.map +1 -1
- package/dist/plugins/annotate/panel.d.ts +20 -1
- package/dist/plugins/annotate/panel.d.ts.map +1 -1
- package/dist/plugins/annotate/plugin.d.ts.map +1 -1
- package/dist/plugins/annotate/render.d.ts +3 -3
- package/dist/plugins/annotate/render.d.ts.map +1 -1
- package/dist/plugins/annotate/selection.d.ts +29 -1
- package/dist/plugins/annotate/selection.d.ts.map +1 -1
- package/dist/plugins/annotate/text-editor.d.ts +6 -2
- package/dist/plugins/annotate/text-editor.d.ts.map +1 -1
- package/dist/plugins/annotate/tools.d.ts +11 -0
- package/dist/plugins/annotate/tools.d.ts.map +1 -1
- package/dist/plugins/crop/interaction.d.ts.map +1 -1
- package/dist/plugins/crop/mount.d.ts +1 -1
- package/dist/plugins/crop/mount.d.ts.map +1 -1
- package/dist/plugins/crop/plugin.d.ts.map +1 -1
- package/dist/plugins/filter/mount.d.ts.map +1 -1
- package/dist/plugins/filter/thumbnails.d.ts.map +1 -1
- package/dist/plugins/finetune/mount.d.ts.map +1 -1
- package/dist/plugins/finetune/plugin.d.ts.map +1 -1
- package/dist/plugins/finetune/preview.d.ts.map +1 -1
- package/dist/plugins/flip/mount.d.ts.map +1 -1
- package/dist/plugins/flip/plugin.d.ts.map +1 -1
- package/dist/plugins/frame/mount.d.ts.map +1 -1
- package/dist/plugins/frame/plugin.d.ts.map +1 -1
- package/dist/plugins/redact/mount.d.ts.map +1 -1
- package/dist/plugins/redact/plugin.d.ts.map +1 -1
- package/dist/plugins/redact/render.d.ts.map +1 -1
- package/dist/plugins/redact/selection.d.ts.map +1 -1
- package/dist/plugins/resize/mount.d.ts.map +1 -1
- package/dist/plugins/resize/plugin.d.ts.map +1 -1
- package/dist/plugins/rotate/mount.d.ts.map +1 -1
- package/dist/plugins/rotate/plugin.d.ts.map +1 -1
- package/package.json +7 -7
- package/dist/styles.css +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
.pintura-editor{--color-background:255, 255, 255;--color-foreground:21, 23, 26;--font-family:Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Helvetica Neue", Arial, sans-serif;--editor-modal-border-radius:0px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--kalotyp-success:48, 207, 67;--kalotyp-border:rgba(var(--color-foreground), .16);--kalotyp-border-strong:rgba(var(--color-foreground), .36);--kalotyp-muted:rgba(var(--color-foreground), .7);--kalotyp-soft:rgba(var(--color-foreground), .08);--kalotyp-track:rgba(var(--color-foreground), .1);--kalotyp-radius:6px;--kalotyp-radius-lg:10px;--kalotyp-control-height:36px;--kalotyp-text-size:13px;--kalotyp-transition:all .2s ease;z-index:2147483646;background:rgb(var(--color-background));font-family:var(--font-family);color:rgb(var(--color-foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:14px;line-height:1.5;display:flex;position:fixed;inset:0}html:not(.dark) .pintura-editor{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--color-background:255, 255, 255!important;--color-foreground:21, 23, 26!important}html.dark .pintura-editor{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--color-background:21, 23, 26!important;--color-foreground:244, 245, 246!important}.PinturaModal{background:rgb(var(--color-background));border-radius:var(--editor-modal-border-radius);overflow:hidden;flex:auto!important;width:100%!important;height:100%!important;min-height:0!important;display:flex!important;position:relative!important}.kalotyp-editor:focus,.kalotyp-editor:focus-visible{outline:none}.kalotyp-button-prefs{border-radius:var(--kalotyp-radius);width:32px;height:32px;color:var(--kalotyp-muted);cursor:pointer;z-index:2;transition:var(--kalotyp-transition);background:0 0;border:1px solid #0000;justify-content:center;align-items:center;padding:0;font-size:16px;line-height:1;display:inline-flex;position:absolute;top:18px;right:56px}.kalotyp-button-prefs svg{width:16px;height:16px}.kalotyp-button-prefs:hover{background:var(--kalotyp-soft);color:rgb(var(--color-foreground))}.kalotyp-button-prefs:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-button-close{border-radius:var(--kalotyp-radius);width:32px;height:32px;color:var(--kalotyp-muted);cursor:pointer;z-index:2;transition:var(--kalotyp-transition);background:0 0;border:1px solid #0000;justify-content:center;align-items:center;padding:0;font-size:16px;line-height:1;display:inline-flex;position:absolute;top:18px;right:14px}.kalotyp-button-close svg{width:16px;height:16px}.kalotyp-button-close:hover{background:var(--kalotyp-soft);color:rgb(var(--color-foreground))}.kalotyp-button-close:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-root{grid-template-rows:auto minmax(0,1fr) auto!important;grid-template-columns:minmax(0,1fr)!important;width:100%!important;height:100%!important;min-height:0!important;display:grid!important}.kalotyp-root[data-env~=landscape]{grid-template-rows:auto 1fr auto}.kalotyp-nav-tools{border-bottom:1px solid var(--kalotyp-border);flex:none;align-items:center;gap:8px;min-height:56px;padding:14px 180px 14px 24px;display:flex}.kalotyp-history-controls{z-index:2;align-items:center;gap:4px;display:inline-flex;position:absolute;top:18px;right:100px}.kalotyp-history-button{width:32px;height:32px;color:var(--kalotyp-muted);cursor:pointer;transition:var(--kalotyp-transition);background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;padding:0;display:inline-flex}.kalotyp-history-button svg{width:16px;height:16px}.kalotyp-history-button:hover:not(:disabled){color:rgb(var(--color-foreground));background:var(--kalotyp-track)}.kalotyp-history-button:focus-visible{box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-history-button:disabled{opacity:.35;cursor:not-allowed}.kalotyp-main{background:rgb(var(--color-background));gap:12px;padding:12px 16px 0;flex-direction:column!important;min-height:0!important;display:flex!important}.kalotyp-stage{border-radius:var(--kalotyp-radius);background:rgba(var(--color-foreground), .06);flex:1 1 0!important;min-height:0!important;position:relative!important}.kalotyp-util-footer{border-top:1px solid var(--kalotyp-border);justify-content:flex-end;align-items:center;gap:8px;padding:14px 24px;display:flex}.pintura-editor .kalotyp-root>.kalotyp-nav-tools{padding-bottom:14px!important}.pintura-editor .kalotyp-root .kalotyp-stage{max-width:none!important;margin:0!important}.pintura-editor .kalotyp-root[data-env~=landscape] .kalotyp-util-main,.pintura-editor .kalotyp-root[data-env~=landscape] .kalotyp-util-footer{padding-right:24px!important}.kalotyp-export-group{height:var(--kalotyp-control-height);border:1px solid rgb(var(--color-foreground));border-radius:var(--kalotyp-radius);background:rgb(var(--color-foreground));isolation:isolate;transition:var(--kalotyp-transition);align-items:stretch;display:inline-flex;overflow:hidden}.kalotyp-export-group:focus-within{box-shadow:var(--kalotyp-focus-shadow)}.pintura-editor .kalotyp-root .kalotyp-export-group .kalotyp-button-export{font-family:inherit;font-size:var(--kalotyp-text-size);cursor:pointer;justify-content:center;align-items:center;line-height:1;transition:background .18s;height:100%!important;color:rgb(var(--color-background))!important;opacity:1!important;background:0 0!important;border:0!important;border-radius:0!important;padding:0 18px!important;font-weight:700!important;display:inline-flex!important}.pintura-editor .kalotyp-root .kalotyp-export-group .kalotyp-button-export:hover{background:rgba(var(--color-background), .12)!important;color:rgb(var(--color-background))!important;opacity:1!important}.pintura-editor .kalotyp-root .kalotyp-export-group .kalotyp-button-export:focus-visible{outline:none;background:rgba(var(--color-background), .12)!important}.pintura-editor .kalotyp-root .kalotyp-export-group .kalotyp-button-export:disabled{cursor:not-allowed;opacity:.4!important}.kalotyp-button-inner{display:inline-block}.pintura-editor .kalotyp-root .kalotyp-export-group .kalotyp-button-output-settings{cursor:pointer;width:36px;box-shadow:inset 1px 0 0 rgba(var(--color-background), .22);justify-content:center;align-items:center;padding:0;transition:background .18s;height:100%!important;color:rgb(var(--color-background))!important;opacity:1!important;background:0 0!important;border:0!important;border-radius:0!important;display:inline-flex!important}.pintura-editor .kalotyp-root .kalotyp-export-group .kalotyp-button-output-settings:hover{background:rgba(var(--color-background), .12)!important;color:rgb(var(--color-background))!important;opacity:1!important}.pintura-editor .kalotyp-root .kalotyp-export-group .kalotyp-button-output-settings:focus-visible{outline:none;background:rgba(var(--color-background), .12)!important}.pintura-editor .kalotyp-root .kalotyp-export-group .kalotyp-button-output-settings:disabled{cursor:not-allowed;opacity:.4!important}.pintura-editor .kalotyp-root .kalotyp-export-group .kalotyp-button-output-settings[aria-expanded=true]{background:rgba(var(--color-background), .18)!important}.pintura-editor .kalotyp-root .kalotyp-export-group:hover{background:rgba(var(--color-foreground), .92);border-color:rgba(var(--color-foreground), .92)}.kalotyp-visually-hidden{clip:rect(0, 0, 0, 0)!important;white-space:nowrap!important;border:0!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;position:absolute!important;overflow:hidden!important}.pintura-editor{--kalotyp-focus-ring:rgb(var(--color-foreground));--kalotyp-focus-halo:rgb(var(--color-background));--kalotyp-focus-shadow:0 0 0 2px var(--kalotyp-focus-halo), 0 0 0 4px var(--kalotyp-focus-ring)}.kalotyp-nested-overlay{z-index:50;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.kalotyp-nested-overlay--modal{background:rgba(var(--color-foreground), .32)}.kalotyp-nested-overlay--popover{pointer-events:auto;background:0 0}.kalotyp-nested-surface{background:rgb(var(--color-background));color:rgb(var(--color-foreground));border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius-lg);flex-direction:column;min-width:280px;max-width:min(520px,100% - 32px);max-height:calc(100% - 32px);display:flex;position:relative;overflow:hidden;box-shadow:0 10px 30px #0000002e,0 2px 6px #00000014}.kalotyp-nested-surface:focus-visible{outline:none}.kalotyp-nested-header{border-bottom:1px solid var(--kalotyp-border);justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;display:flex}.kalotyp-nested-title{margin:0;font-size:14px;font-weight:600;line-height:1.2}.kalotyp-nested-close{border-radius:var(--kalotyp-radius);width:28px;height:28px;color:var(--kalotyp-muted);cursor:pointer;transition:var(--kalotyp-transition);background:0 0;border:1px solid #0000;justify-content:center;align-items:center;padding:0;font-size:22px;line-height:1;display:inline-flex}.kalotyp-nested-close:hover{background:var(--kalotyp-soft);color:rgb(var(--color-foreground))}.kalotyp-nested-close:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-nested-body{padding:16px 14px;overflow-y:auto}.kalotyp-stage-container{-webkit-user-select:none;user-select:none;touch-action:none;background:0 0;position:absolute;inset:0;overflow:hidden}.kalotyp-stage-status{text-align:center;pointer-events:none;color:rgba(var(--color-foreground), .7);justify-content:center;align-items:center;padding:12px 18px;font-size:14px;display:flex;position:absolute;inset:50% 0 auto}.kalotyp-stage-image,.kalotyp-stage-overlay{pointer-events:none;width:100%;height:100%;display:block;position:absolute;inset:0}.kalotyp-stage-overlay{z-index:1}.kalotyp-stage-body{z-index:2;cursor:move;touch-action:none;position:absolute}.kalotyp-handles{z-index:3;pointer-events:none;position:absolute;inset:0}.kalotyp-corner-anchor{pointer-events:none;width:0;height:0;position:absolute}.kalotyp-handle{pointer-events:auto;touch-action:none;background:0 0;border:none;margin:0;padding:0;position:absolute}.kalotyp-handle[data-shape=circle]{background:rgb(var(--color-foreground));border:2px solid rgb(var(--color-background));border-radius:50%;width:12px;height:12px;top:-6px;left:-6px;box-shadow:0 1px 3px #0000002e}.kalotyp-handle[data-shape=circle][data-direction=tl],.kalotyp-handle[data-shape=circle][data-direction=br]{cursor:nwse-resize}.kalotyp-handle[data-shape=circle][data-direction=tr],.kalotyp-handle[data-shape=circle][data-direction=bl]{cursor:nesw-resize}.kalotyp-handle[data-shape=edge][data-direction=t],.kalotyp-handle[data-shape=edge][data-direction=b]{cursor:ns-resize;height:6px;margin-top:-3px}.kalotyp-handle[data-shape=edge][data-direction=l],.kalotyp-handle[data-shape=edge][data-direction=r]{cursor:ew-resize;width:6px;margin-left:-3px}.kalotyp-handle:focus-visible{outline:2px solid var(--kalotyp-focus-ring);outline-offset:2px;box-shadow:0 0 0 4px var(--kalotyp-focus-halo)}.kalotyp-crop-panel{flex-direction:column;align-items:center;gap:8px;width:100%;display:flex}.kalotyp-preset-row{flex-wrap:wrap;justify-content:center;align-items:center;gap:6px;display:flex}.kalotyp-preset-button{height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);cursor:pointer;transition:var(--kalotyp-transition);background:0 0;align-items:center;padding:0 12px;display:inline-flex}.kalotyp-preset-button:hover{background:var(--kalotyp-soft);border-color:var(--kalotyp-border-strong)}.kalotyp-preset-button:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-preset-button[aria-checked=true]{background:rgb(var(--color-foreground));border-color:rgb(var(--color-foreground));color:rgb(var(--color-background))}.kalotyp-crop-dims{flex-wrap:wrap;justify-content:center;align-items:end;gap:8px;width:100%;margin-top:6px;display:flex}.kalotyp-crop-dims-field{flex-direction:column;gap:4px;display:flex}.kalotyp-crop-dims-label{color:var(--kalotyp-muted);font-size:12px;font-weight:500}.kalotyp-crop-dims-input{width:80px;height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:rgb(var(--color-background));color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);text-align:right;font-variant-numeric:tabular-nums;padding:0 10px}.kalotyp-crop-dims-input:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);background:rgb(var(--color-background));outline:none}.kalotyp-util-nav{background:var(--kalotyp-track);border-radius:var(--kalotyp-radius-lg);align-items:center;gap:2px;padding:4px;display:inline-flex}.kalotyp-util-nav-button{height:28px;color:var(--kalotyp-muted);font:inherit;font-size:var(--kalotyp-text-size);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;padding:0 14px;font-weight:500;transition:color .2s,background .2s,border-color .2s,box-shadow .2s;display:inline-flex;position:relative}.kalotyp-util-nav-button:hover{color:rgb(var(--color-foreground))}.kalotyp-util-nav-button:focus-visible{box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-util-nav-button[aria-selected=true]{background:rgb(var(--color-background));border-color:var(--kalotyp-border);color:rgb(var(--color-foreground));font-weight:600;box-shadow:0 1px 2px #0000000a}.kalotyp-util-nav-button:disabled{opacity:.4;cursor:not-allowed}.kalotyp-preview-canvas{pointer-events:none}.kalotyp-flip-panel,.kalotyp-rotate-panel,.kalotyp-resize-panel{width:100%;font-size:var(--kalotyp-text-size);flex-wrap:wrap;justify-content:center;align-items:center;gap:12px;display:flex}.kalotyp-rotate-row{align-items:center;gap:8px;display:flex}.kalotyp-resize-row{align-items:end;gap:8px;display:flex}.kalotyp-util-main{border-top:1px solid var(--kalotyp-border);background:rgb(var(--color-background));flex:none;justify-content:center;align-items:center;min-height:88px;padding:18px 24px;display:flex}.kalotyp-flip-panel{justify-content:center;gap:8px;display:flex}.kalotyp-toggle-button{height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);cursor:pointer;transition:var(--kalotyp-transition);background:0 0;align-items:center;padding:0 14px;display:inline-flex}.kalotyp-toggle-button:hover{border-color:var(--kalotyp-border-strong)}.kalotyp-toggle-button:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-toggle-button[aria-pressed=true]{background:rgb(var(--color-foreground));border-color:rgb(var(--color-foreground));color:rgb(var(--color-background))}.kalotyp-rotate-slider-label{font-size:var(--kalotyp-text-size);color:var(--kalotyp-muted);min-width:72px}.kalotyp-rotate-slider{cursor:ew-resize;appearance:none;background:0 0;flex:1;min-width:220px;height:4px}.kalotyp-rotate-slider::-webkit-slider-runnable-track{background:var(--kalotyp-border);border-radius:999px;height:4px}.kalotyp-rotate-slider::-moz-range-track{background:var(--kalotyp-border);border-radius:999px;height:4px}.kalotyp-rotate-slider::-webkit-slider-thumb{appearance:none;background:rgb(var(--color-foreground));border:2px solid rgb(var(--color-background));cursor:ew-resize;border-radius:50%;width:16px;height:16px;margin-top:-6px;box-shadow:0 1px 3px #0003}.kalotyp-rotate-slider::-moz-range-thumb{background:rgb(var(--color-foreground));border:2px solid rgb(var(--color-background));cursor:ew-resize;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 3px #0003}.kalotyp-rotate-slider:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 2px rgb(var(--color-background)), 0 0 0 5px rgb(var(--color-foreground))}.kalotyp-rotate-slider:focus-visible::-moz-range-thumb{box-shadow:0 0 0 2px rgb(var(--color-background)), 0 0 0 5px rgb(var(--color-foreground))}.kalotyp-rotate-input{width:72px;height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:rgb(var(--color-background));color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);text-align:right;font-variant-numeric:tabular-nums;padding:0 8px}.kalotyp-rotate-input:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);background:rgb(var(--color-background));outline:none}.kalotyp-rotate-input-group{align-items:center;gap:4px;display:inline-flex}.kalotyp-rotate-suffix{font-size:var(--kalotyp-text-size);color:var(--kalotyp-muted);font-variant-numeric:tabular-nums}.kalotyp-rotate-reset{height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);cursor:pointer;transition:var(--kalotyp-transition);background:0 0;padding:0 12px}.kalotyp-rotate-reset:hover{border-color:var(--kalotyp-border-strong)}.kalotyp-rotate-reset:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-quarter-button{width:36px;height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);color:rgb(var(--color-foreground));cursor:pointer;transition:var(--kalotyp-transition);background:0 0;padding:0;font-size:18px;line-height:1}.kalotyp-quarter-button:hover{background:var(--kalotyp-soft);border-color:var(--kalotyp-border-strong)}.kalotyp-quarter-button:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-resize-field{flex-direction:column;gap:4px;display:flex}.kalotyp-resize-field-label{color:var(--kalotyp-muted);font-size:12px;font-weight:500}.kalotyp-resize-input{width:92px;height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:rgb(var(--color-background));color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);text-align:right;font-variant-numeric:tabular-nums;padding:0 10px}.kalotyp-resize-input:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);background:rgb(var(--color-background));outline:none}.kalotyp-resize-lock{border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);width:32px;height:32px;color:var(--kalotyp-muted);cursor:pointer;transition:var(--kalotyp-transition);background:0 0;justify-content:center;align-items:center;padding:0;display:inline-flex}.kalotyp-resize-lock:hover{border-color:var(--kalotyp-border-strong);color:rgb(var(--color-foreground))}.kalotyp-resize-lock:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-resize-lock[aria-pressed=true]{color:rgb(var(--color-foreground));border-color:var(--kalotyp-border-strong)}.kalotyp-resize-dims{align-items:end}.kalotyp-resize-dims .kalotyp-resize-lock{margin-bottom:2px}.kalotyp-resize-summary{font-size:var(--kalotyp-text-size);color:rgb(var(--color-foreground));font-variant-numeric:tabular-nums}.kalotyp-resize-helper{color:var(--kalotyp-muted);font-size:12px}.kalotyp-annotate-stage{-webkit-user-select:none;user-select:none;touch-action:none;background:0 0;position:absolute;inset:0;overflow:hidden}.kalotyp-annotate-image,.kalotyp-annotate-shapes,.kalotyp-annotate-live{pointer-events:none;width:100%;height:100%;display:block;position:absolute;inset:0}.kalotyp-annotate-shapes{z-index:1}.kalotyp-annotate-live{z-index:2}.kalotyp-annotate-hit{z-index:3;cursor:crosshair;position:absolute;inset:0}.kalotyp-annotate-stage[data-tool=select] .kalotyp-annotate-hit{cursor:default}.kalotyp-annotate-stage[data-tool=text] .kalotyp-annotate-hit{cursor:text}.kalotyp-annotate-stage[data-tool=emoji] .kalotyp-annotate-hit{cursor:copy}.kalotyp-annotate-handles{z-index:4;pointer-events:none;position:absolute;inset:0}.kalotyp-annotate-handle{border:2px solid rgb(var(--color-background));background:rgb(var(--color-foreground));cursor:pointer;pointer-events:auto;touch-action:none;border-radius:50%;width:12px;height:12px;margin-top:-6px;margin-left:-6px;padding:0;font-size:0;position:absolute;box-shadow:0 1px 2px #0006}.kalotyp-annotate-handle:focus-visible{outline:2px solid var(--kalotyp-focus-ring);outline-offset:2px;box-shadow:0 0 0 4px var(--kalotyp-focus-halo)}.kalotyp-annotate-handle[data-direction=tl],.kalotyp-annotate-handle[data-direction=br]{cursor:nwse-resize}.kalotyp-annotate-handle[data-direction=tr],.kalotyp-annotate-handle[data-direction=bl]{cursor:nesw-resize}.kalotyp-annotate-handle[data-direction=t],.kalotyp-annotate-handle[data-direction=b]{cursor:ns-resize}.kalotyp-annotate-handle[data-direction=l],.kalotyp-annotate-handle[data-direction=r]{cursor:ew-resize}.kalotyp-annotate-rotate-handle{border:2px solid rgb(var(--color-background));cursor:grab;pointer-events:auto;touch-action:none;background:#6366f1;border-radius:50%;width:14px;height:14px;margin-top:-7px;margin-left:-7px;padding:0;font-size:0;position:absolute;box-shadow:0 1px 2px #0006}.kalotyp-annotate-rotate-handle:active{cursor:grabbing}.kalotyp-annotate-rotate-handle:focus-visible{outline:2px solid var(--kalotyp-focus-ring);outline-offset:2px;box-shadow:0 0 0 4px var(--kalotyp-focus-halo)}.kalotyp-annotate-text-overlay{z-index:5;pointer-events:none;position:absolute;inset:0}.kalotyp-annotate-text-editor{pointer-events:auto;white-space:pre;background:0 0;border:none;outline:none;min-width:1ch;margin:0;padding:0;line-height:1.2;display:inline-block;position:absolute}.kalotyp-annotate-text-editor::selection{color:#0000;background-color:#6366f159}.kalotyp-annotate-emoji-picker{z-index:6;background:rgb(var(--color-background));border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius-lg);pointer-events:auto;flex-direction:column;gap:8px;width:min(360px,100% - 24px);max-height:min(360px,100% - 24px);padding:10px;display:flex;position:absolute;bottom:12px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #0000002e}.kalotyp-annotate-emoji-picker[hidden]{display:none}.kalotyp-annotate-emoji-header{flex:none;justify-content:space-between;align-items:center;display:flex}.kalotyp-annotate-emoji-title{font-size:var(--kalotyp-text-size);color:rgb(var(--color-foreground));font-weight:600}.kalotyp-annotate-emoji-close{width:24px;height:24px;color:var(--kalotyp-muted);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;padding:0;display:inline-flex}.kalotyp-annotate-emoji-close svg{width:16px;height:16px}.kalotyp-annotate-emoji-close:hover{color:rgb(var(--color-foreground));background:var(--kalotyp-soft)}.kalotyp-annotate-emoji-close:focus-visible{box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-annotate-emoji-search{flex:none;align-items:center;display:flex;position:relative}.kalotyp-annotate-emoji-search svg{width:16px;height:16px;color:var(--kalotyp-muted);pointer-events:none;position:absolute;left:8px}.kalotyp-annotate-emoji-search-input{width:100%;height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:rgb(var(--color-background));color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);padding:0 10px 0 30px}.kalotyp-annotate-emoji-search-input:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-annotate-emoji-tabs{flex:none;align-items:center;gap:4px;padding-bottom:2px;display:flex;overflow-x:auto}.kalotyp-annotate-emoji-tab{cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;flex:none;justify-content:center;align-items:center;width:36px;height:36px;padding:0;line-height:1;display:inline-flex}.kalotyp-annotate-emoji-tab-img{pointer-events:none;width:24px;height:24px;display:block}.kalotyp-annotate-emoji-tab:hover{background:var(--kalotyp-soft)}.kalotyp-annotate-emoji-tab:focus-visible{box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-annotate-emoji-tab[aria-pressed=true]{background:var(--kalotyp-track);border-color:var(--kalotyp-border)}.kalotyp-annotate-emoji-grid{grid-template-columns:repeat(var(--kalotyp-emoji-cols,8), 1fr);touch-action:pan-y;overscroll-behavior:contain;flex:auto;gap:2px;min-height:0;display:grid;overflow-y:auto}.kalotyp-annotate-emoji-cell{aspect-ratio:1;cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:20px;line-height:1;display:inline-flex}.kalotyp-annotate-emoji-cell:hover{background:var(--kalotyp-soft)}.kalotyp-annotate-emoji-cell:focus-visible{box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-annotate-emoji-cell-img{pointer-events:none;width:26px;height:26px;display:block}.kalotyp-annotate-emoji-empty{text-align:center;font-size:var(--kalotyp-text-size);color:var(--kalotyp-muted);margin:0;padding:12px 0}.kalotyp-annotate-emoji-empty[hidden]{display:none}.kalotyp-util-main:has(.kalotyp-annotate-panel){align-items:flex-start;min-height:244px}.kalotyp-annotate-panel{flex-direction:column;align-items:center;gap:10px;width:100%;display:flex}.kalotyp-annotate-toolbar{background:var(--kalotyp-track);border-radius:var(--kalotyp-radius-lg);align-items:center;gap:4px;padding:4px;display:inline-flex}.kalotyp-annotate-tool{width:32px;height:32px;color:var(--kalotyp-muted);cursor:pointer;transition:var(--kalotyp-transition);background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:16px;font-weight:500;display:inline-flex}.kalotyp-annotate-tool svg{width:18px;height:18px;display:block}.kalotyp-annotate-tool:hover{color:rgb(var(--color-foreground))}.kalotyp-annotate-tool:focus-visible{box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-annotate-tool[aria-pressed=true]{background:rgb(var(--color-background));border-color:var(--kalotyp-border);color:rgb(var(--color-foreground));box-shadow:0 1px 2px #0000000a}.kalotyp-annotate-style-row{flex-wrap:wrap;justify-content:center;align-items:center;gap:12px;display:inline-flex}.kalotyp-annotate-text-row{flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;display:inline-flex}.kalotyp-annotate-font{height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:rgb(var(--color-background));color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);cursor:pointer;padding:0 8px}.kalotyp-annotate-font:focus-visible{box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-annotate-font-size{width:64px;height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:rgb(var(--color-background));color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);text-align:right;font-variant-numeric:tabular-nums;padding:0 10px}.kalotyp-annotate-font-size:focus-visible{box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-annotate-text-toggle,.kalotyp-annotate-align-button{width:32px;height:var(--kalotyp-control-height);color:var(--kalotyp-muted);cursor:pointer;transition:var(--kalotyp-transition);background:0 0;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;padding:0;display:inline-flex}.kalotyp-annotate-text-toggle svg,.kalotyp-annotate-align-button svg{width:18px;height:18px;display:block}.kalotyp-annotate-text-toggle:hover,.kalotyp-annotate-align-button:hover{color:rgb(var(--color-foreground))}.kalotyp-annotate-text-toggle:focus-visible,.kalotyp-annotate-align-button:focus-visible{box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-annotate-text-toggle[aria-pressed=true],.kalotyp-annotate-align-button[aria-checked=true]{background:rgb(var(--color-background));border-color:var(--kalotyp-border);color:rgb(var(--color-foreground));box-shadow:0 1px 2px #0000000a}.kalotyp-annotate-align{align-items:center;gap:2px;display:inline-flex}.kalotyp-annotate-swatches{align-items:center;gap:4px;display:inline-flex}.kalotyp-annotate-swatch{border:2px solid var(--kalotyp-border);background:var(--kalotyp-swatch,currentColor);cursor:pointer;width:22px;height:22px;transition:var(--kalotyp-transition);border-radius:50%;padding:0}.kalotyp-annotate-swatch:hover{transform:scale(1.08)}.kalotyp-annotate-swatch:focus-visible{box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-annotate-swatch[aria-checked=true]{border-color:rgb(var(--color-foreground));box-shadow:0 0 0 1px rgb(var(--color-background)) inset}.kalotyp-annotate-hex{border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:rgb(var(--color-background));background-image:linear-gradient(var(--kalotyp-hex-swatch,#000), var(--kalotyp-hex-swatch,#000));width:116px;height:28px;color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);text-transform:lowercase;font-variant-numeric:tabular-nums;background-position:6px;background-repeat:no-repeat;background-size:18px 18px;padding:0 8px 0 32px}.kalotyp-annotate-hex:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-annotate-stroke-label{font-size:var(--kalotyp-text-size);color:var(--kalotyp-muted)}.kalotyp-annotate-stroke{width:120px}.kalotyp-annotate-delete{height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);cursor:pointer;transition:var(--kalotyp-transition);background:0 0;align-items:center;gap:6px;padding:0 12px;display:inline-flex}.kalotyp-annotate-delete svg{width:14px;height:14px}.kalotyp-annotate-delete:hover:not(:disabled){background:var(--kalotyp-soft);border-color:var(--kalotyp-border-strong)}.kalotyp-annotate-delete:disabled{opacity:.4;cursor:not-allowed}.kalotyp-annotate-insert{height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);cursor:pointer;transition:var(--kalotyp-transition);background:0 0;align-items:center;gap:6px;padding:0 12px;display:inline-flex}.kalotyp-annotate-insert svg{width:14px;height:14px}.kalotyp-annotate-insert:hover:not(:disabled){background:var(--kalotyp-soft);border-color:var(--kalotyp-border-strong)}.kalotyp-annotate-insert:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-annotate-insert:disabled{opacity:.4;cursor:not-allowed}.kalotyp-annotate-coords{flex-wrap:wrap;justify-content:center;align-items:end;gap:8px;width:100%;margin-top:6px;display:flex}.kalotyp-annotate-coords[hidden]{display:none}.kalotyp-annotate-coords-field{flex-direction:column;gap:4px;display:flex}.kalotyp-annotate-coords-label{color:var(--kalotyp-muted);font-size:12px;font-weight:500}.kalotyp-annotate-coords-input{width:80px;height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:rgb(var(--color-background));color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);text-align:right;font-variant-numeric:tabular-nums;padding:0 10px}.kalotyp-annotate-coords-input:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);background:rgb(var(--color-background));outline:none}.kalotyp-finetune-panel{width:100%;max-width:640px;font-size:var(--kalotyp-text-size);grid-template-columns:1fr;gap:6px;margin:0 auto;display:grid}.kalotyp-util-main:has(.kalotyp-finetune-panel){justify-content:center;align-items:stretch;padding-block:16px}.kalotyp-finetune-row{align-items:center;gap:10px;height:32px;display:flex}.kalotyp-finetune-label{width:84px;color:var(--kalotyp-muted);font-size:var(--kalotyp-text-size);text-align:right;flex:none;font-weight:500}.kalotyp-finetune-slider{cursor:ew-resize;appearance:none;background:0 0;flex:1;min-width:160px;height:4px}.kalotyp-finetune-slider::-webkit-slider-runnable-track{background:var(--kalotyp-border);border-radius:999px;height:4px}.kalotyp-finetune-slider::-moz-range-track{background:var(--kalotyp-border);border-radius:999px;height:4px}.kalotyp-finetune-slider::-webkit-slider-thumb{appearance:none;background:rgb(var(--color-foreground));border:2px solid rgb(var(--color-background));cursor:ew-resize;border-radius:50%;width:16px;height:16px;margin-top:-6px;box-shadow:0 1px 3px #0003}.kalotyp-finetune-slider::-moz-range-thumb{background:rgb(var(--color-foreground));border:2px solid rgb(var(--color-background));cursor:ew-resize;border-radius:50%;width:16px;height:16px;box-shadow:0 1px 3px #0003}.kalotyp-finetune-slider:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 2px rgb(var(--color-background)), 0 0 0 5px rgb(var(--color-foreground))}.kalotyp-finetune-slider:focus-visible::-moz-range-thumb{box-shadow:0 0 0 2px rgb(var(--color-background)), 0 0 0 5px rgb(var(--color-foreground))}.kalotyp-finetune-input{border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:rgb(var(--color-background));width:60px;height:28px;color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);text-align:right;font-variant-numeric:tabular-nums;flex:none;padding:0 8px}.kalotyp-finetune-input:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-finetune-row-reset{border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);width:28px;height:28px;color:var(--kalotyp-muted);cursor:pointer;transition:var(--kalotyp-transition);background:0 0;flex:none;padding:0;font-size:14px;line-height:1}.kalotyp-finetune-row-reset:hover{border-color:var(--kalotyp-border-strong);color:rgb(var(--color-foreground))}.kalotyp-finetune-row-reset:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-finetune-reset-all{border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);height:28px;color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);cursor:pointer;transition:var(--kalotyp-transition);background:0 0;align-self:flex-end;margin-top:4px;padding:0 12px}.kalotyp-finetune-reset-all:hover{border-color:var(--kalotyp-border-strong)}.kalotyp-finetune-reset-all:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-filter-panel{width:100%;max-width:100%;font-size:var(--kalotyp-text-size);flex-direction:column;gap:8px;margin:0 auto;display:flex}.kalotyp-util-main:has(.kalotyp-filter-panel){justify-content:center;align-items:stretch;padding-block:12px}.kalotyp-filter-strip{scrollbar-width:thin;-webkit-overflow-scrolling:touch;justify-content:flex-start;gap:12px;padding:4px 16px;display:flex;overflow:auto hidden}@media (min-width:720px){.kalotyp-filter-strip{justify-content:center}}.kalotyp-filter-thumb{cursor:pointer;font:inherit;color:rgb(var(--color-foreground));border-radius:var(--kalotyp-radius);transition:var(--kalotyp-transition);background:0 0;border:0;flex-direction:column;flex:none;align-items:center;gap:6px;padding:4px;display:flex}.kalotyp-filter-thumb:hover{background:var(--kalotyp-soft)}.kalotyp-filter-thumb:focus-visible{box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-filter-thumb-image{border:2px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:var(--kalotyp-track);transition:var(--kalotyp-transition);line-height:0;display:block;overflow:hidden}.kalotyp-filter-thumb-canvas{width:100%;height:100%;display:block}.kalotyp-filter-thumb-label{color:var(--kalotyp-muted);text-align:center;font-variant-numeric:tabular-nums;min-height:14px;font-size:12px;line-height:1.2}.kalotyp-filter-thumb--active .kalotyp-filter-thumb-image{border-color:rgb(var(--color-foreground));box-shadow:0 0 0 3px rgba(var(--color-foreground), .18)}.kalotyp-filter-thumb--active .kalotyp-filter-thumb-label{color:rgb(var(--color-foreground));font-weight:600}.kalotyp-filter-thumb-check{background:rgb(var(--color-foreground));width:18px;height:18px;color:rgb(var(--color-background));pointer-events:none;border-radius:50%;justify-content:center;align-items:center;font-size:12px;font-weight:700;line-height:1;display:none;position:absolute;top:4px;right:4px}.kalotyp-filter-thumb-image{position:relative}.kalotyp-filter-thumb--active .kalotyp-filter-thumb-check{display:inline-flex}.kalotyp-redact-stage{-webkit-user-select:none;user-select:none;touch-action:none;background:0 0;position:absolute;inset:0;overflow:hidden}.kalotyp-redact-image,.kalotyp-redact-regions,.kalotyp-redact-live{pointer-events:none;width:100%;height:100%;display:block;position:absolute;inset:0}.kalotyp-redact-regions{z-index:1}.kalotyp-redact-live{z-index:2}.kalotyp-redact-hit{z-index:3;cursor:crosshair;position:absolute;inset:0}.kalotyp-redact-handles{z-index:4;pointer-events:none;position:absolute;inset:0}.kalotyp-redact-handle{border:2px solid rgb(var(--color-background));background:rgb(var(--color-foreground));cursor:pointer;pointer-events:auto;touch-action:none;border-radius:50%;width:12px;height:12px;margin-top:-6px;margin-left:-6px;padding:0;font-size:0;position:absolute;box-shadow:0 1px 2px #0006}.kalotyp-redact-handle:focus-visible{outline:2px solid var(--kalotyp-focus-ring);outline-offset:2px;box-shadow:0 0 0 4px var(--kalotyp-focus-halo)}.kalotyp-redact-handle[data-direction=tl],.kalotyp-redact-handle[data-direction=br]{cursor:nwse-resize}.kalotyp-redact-handle[data-direction=tr],.kalotyp-redact-handle[data-direction=bl]{cursor:nesw-resize}.kalotyp-redact-handle[data-direction=t],.kalotyp-redact-handle[data-direction=b]{cursor:ns-resize}.kalotyp-redact-handle[data-direction=l],.kalotyp-redact-handle[data-direction=r]{cursor:ew-resize}.kalotyp-redact-panel{width:100%;max-width:720px;font-size:var(--kalotyp-text-size);flex-direction:column;gap:10px;margin:0 auto;display:flex}.kalotyp-redact-toolbar{flex-wrap:wrap;justify-content:center;gap:6px;display:flex}.kalotyp-redact-mode{height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:rgb(var(--color-background));color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);cursor:pointer;transition:var(--kalotyp-transition);padding:0 14px}.kalotyp-redact-mode:hover{background:var(--kalotyp-soft)}.kalotyp-redact-mode:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-redact-mode--active{box-shadow:0 0 0 1px rgb(var(--color-foreground)) inset;font-weight:600;background:rgb(var(--color-foreground))!important;color:rgb(var(--color-background))!important;border-color:rgb(var(--color-foreground))!important}.kalotyp-redact-style-row{flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;display:flex}.kalotyp-redact-color-group,.kalotyp-redact-button-group{flex:none;align-items:center;gap:8px;display:inline-flex}.kalotyp-redact-color-hint{text-align:center;color:var(--kalotyp-muted);flex:100%;font-size:12px;font-style:italic}.kalotyp-redact-color-hint[hidden]{display:none}.kalotyp-redact-color{width:36px;height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);cursor:pointer;background:0 0;padding:0}.kalotyp-redact-color:disabled{opacity:.4;cursor:not-allowed}.kalotyp-redact-hex{width:100px;height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:rgb(var(--color-background));color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);font-variant-numeric:tabular-nums;text-align:left;padding:0 10px}.kalotyp-redact-hex:disabled{opacity:.4;cursor:not-allowed}.kalotyp-redact-hex:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-redact-insert,.kalotyp-redact-delete{height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:rgb(var(--color-background));color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);cursor:pointer;transition:var(--kalotyp-transition);align-items:center;gap:6px;padding:0 14px;display:inline-flex}.kalotyp-redact-insert:hover,.kalotyp-redact-delete:hover{background:var(--kalotyp-soft)}.kalotyp-redact-insert:focus-visible,.kalotyp-redact-delete:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-redact-delete:disabled{opacity:.5;cursor:not-allowed}.kalotyp-redact-coords{flex-wrap:wrap;justify-content:center;align-items:end;gap:8px;width:100%;margin-top:6px;display:flex}.kalotyp-redact-coords[hidden]{display:none}.kalotyp-redact-coords-field{flex-direction:column;gap:4px;display:flex}.kalotyp-redact-coords-label{color:var(--kalotyp-muted);font-size:12px;font-weight:500}.kalotyp-redact-coords-input{width:80px;height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:rgb(var(--color-background));color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);text-align:right;font-variant-numeric:tabular-nums;padding:0 10px}.kalotyp-redact-coords-input:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);background:rgb(var(--color-background));outline:none}.kalotyp-frame-panel{width:100%;max-width:100%;font-size:var(--kalotyp-text-size);flex-direction:column;gap:8px;margin:0 auto;display:flex}.kalotyp-util-main:has(.kalotyp-frame-panel){justify-content:center;align-items:stretch;padding-block:12px}.kalotyp-frame-strip-wrap{display:block}.kalotyp-frame-strip{scrollbar-width:thin;-webkit-overflow-scrolling:touch;justify-content:flex-start;gap:12px;padding:4px 16px;display:flex;overflow:auto hidden}@media (min-width:720px){.kalotyp-frame-strip{justify-content:center}}.kalotyp-frame-thumb{cursor:pointer;font:inherit;color:rgb(var(--color-foreground));border-radius:var(--kalotyp-radius);transition:var(--kalotyp-transition);background:0 0;border:0;flex-direction:column;flex:none;align-items:center;gap:6px;padding:4px;display:flex}.kalotyp-frame-thumb:hover{background:var(--kalotyp-soft)}.kalotyp-frame-thumb:focus-visible{box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-frame-thumb-image{border:2px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:var(--kalotyp-track);transition:var(--kalotyp-transition);justify-content:center;align-items:center;width:80px;height:60px;line-height:0;display:flex;position:relative;overflow:hidden}.kalotyp-frame-thumb-canvas{max-width:100%;max-height:100%;display:block}.kalotyp-frame-thumb-label{color:var(--kalotyp-muted);text-align:center;font-variant-numeric:tabular-nums;min-height:14px;font-size:12px;line-height:1.2}.kalotyp-frame-thumb--active .kalotyp-frame-thumb-image{border-color:rgb(var(--color-foreground));box-shadow:0 0 0 3px rgba(var(--color-foreground), .18)}.kalotyp-frame-thumb--active .kalotyp-frame-thumb-label{color:rgb(var(--color-foreground));font-weight:600}.kalotyp-frame-thumb-check{background:rgb(var(--color-foreground));width:18px;height:18px;color:rgb(var(--color-background));pointer-events:none;border-radius:50%;justify-content:center;align-items:center;font-size:12px;font-weight:700;line-height:1;display:none;position:absolute;top:4px;right:4px}.kalotyp-frame-thumb--active .kalotyp-frame-thumb-check{display:inline-flex}.kalotyp-frame-color-row{flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;display:flex}.kalotyp-frame-color-label{color:var(--kalotyp-muted);font-size:12px;font-weight:500}.kalotyp-frame-color-hint{text-align:center;color:var(--kalotyp-muted);flex:100%;font-size:12px;font-style:italic}.kalotyp-frame-color-hint[hidden]{display:none}.kalotyp-frame-color{width:36px;height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);cursor:pointer;background:0 0;padding:0}.kalotyp-frame-color:disabled{opacity:.4;cursor:not-allowed}.kalotyp-frame-hex{width:100px;height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:rgb(var(--color-background));color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);font-variant-numeric:tabular-nums;text-align:left;padding:0 10px}.kalotyp-frame-hex:disabled{opacity:.4;cursor:not-allowed}.kalotyp-frame-hex:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-frame-preview-container{position:absolute;inset:0}.kalotyp-frame-preview-canvas{position:absolute}.kalotyp-nested-overlay--popover .kalotyp-nested-surface.kalotyp-output-popover{min-width:280px;max-width:320px}.kalotyp-output-popover-body{flex-direction:column;gap:10px;display:flex}.kalotyp-output-row{grid-template-columns:64px 1fr auto;align-items:center;gap:10px;display:grid}.kalotyp-output-row-label{color:var(--kalotyp-muted);font-size:12px;font-weight:500}.kalotyp-output-format{height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);background:rgb(var(--color-background));color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);padding:0 8px}.kalotyp-output-format:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-output-quality{width:100%;accent-color:rgb(var(--color-foreground))}.kalotyp-output-quality:focus-visible{box-shadow:var(--kalotyp-focus-shadow);border-radius:var(--kalotyp-radius);outline:none}.kalotyp-output-quality-readout{font-size:var(--kalotyp-text-size);color:var(--kalotyp-muted);font-variant-numeric:tabular-nums;text-align:right;min-width:28px}.kalotyp-output-hint{color:var(--kalotyp-muted);margin:0 0 4px 74px;font-size:12px}.kalotyp-output-summary{font-size:var(--kalotyp-text-size);color:rgb(var(--color-foreground));margin:4px 0 0;font-weight:500}.kalotyp-output-metadata-row{font-size:var(--kalotyp-text-size);cursor:pointer;align-items:center;gap:8px;margin:6px 0 0;display:flex}.kalotyp-output-metadata-checkbox{accent-color:rgb(var(--color-foreground));width:16px;height:16px;margin:0}.kalotyp-output-metadata-text{line-height:1.3}.kalotyp-output-metadata-hint{color:var(--kalotyp-muted);min-height:16px;margin:2px 0 0;padding-left:24px;font-size:11px;font-style:italic;line-height:1.4}.kalotyp-output-footer{border-top:1px solid var(--kalotyp-border);justify-content:flex-end;align-items:center;gap:8px;margin-top:12px;padding-top:12px;display:flex}.kalotyp-output-done{height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);color:rgb(var(--color-foreground));font:inherit;font-size:var(--kalotyp-text-size);cursor:pointer;transition:var(--kalotyp-transition);background:0 0;padding:0 14px}.kalotyp-output-done:hover{background:var(--kalotyp-soft)}.kalotyp-output-done:focus-visible{border-color:rgb(var(--color-foreground));box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-output-save{height:var(--kalotyp-control-height);border:1px solid rgb(var(--color-foreground));border-radius:var(--kalotyp-radius);background:rgb(var(--color-foreground));color:rgb(var(--color-background));font:inherit;font-size:var(--kalotyp-text-size);cursor:pointer;transition:var(--kalotyp-transition);padding:0 16px;font-weight:600}.kalotyp-output-save:hover{background:rgba(var(--color-foreground), .88);border-color:rgba(var(--color-foreground), .88)}.kalotyp-output-save:focus-visible{box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-output-save:disabled{opacity:.4;cursor:not-allowed}.kalotyp-nested-overlay--modal .kalotyp-nested-surface.kalotyp-preferences-modal{min-width:360px;max-width:460px}.kalotyp-preferences-body{flex-direction:column;gap:18px;display:flex}.kalotyp-preferences-section{flex-direction:column;gap:10px;display:flex}.kalotyp-preferences-section h4{letter-spacing:.02em;text-transform:uppercase;color:var(--kalotyp-muted);margin:0;font-size:13px;font-weight:600}.kalotyp-preferences-toggle{font-size:var(--kalotyp-text-size);cursor:pointer;align-items:center;gap:10px;display:flex}.kalotyp-preferences-toggle input[type=checkbox]{accent-color:rgb(var(--color-foreground));width:16px;height:16px}.kalotyp-preferences-footer{border-top:1px solid var(--kalotyp-border);justify-content:space-between;align-items:center;gap:8px;margin-top:4px;padding-top:12px;display:flex}.kalotyp-preferences-reset{height:var(--kalotyp-control-height);border:1px solid var(--kalotyp-border);border-radius:var(--kalotyp-radius);color:var(--kalotyp-muted);font:inherit;font-size:var(--kalotyp-text-size);cursor:pointer;background:0 0;padding:0 14px}.kalotyp-preferences-reset:hover{background:var(--kalotyp-soft);color:rgb(var(--color-foreground))}.kalotyp-preferences-done{height:var(--kalotyp-control-height);border:1px solid rgb(var(--color-foreground));border-radius:var(--kalotyp-radius);background:rgb(var(--color-foreground));color:rgb(var(--color-background));font:inherit;font-size:var(--kalotyp-text-size);cursor:pointer;padding:0 16px;font-weight:600}.kalotyp-preferences-done:hover{background:rgba(var(--color-foreground), .88)}.kalotyp-preferences-done:focus-visible,.kalotyp-preferences-reset:focus-visible{box-shadow:var(--kalotyp-focus-shadow);outline:none}.kalotyp-nested-overlay--modal .kalotyp-nested-surface.kalotyp-cheatsheet-modal{min-width:380px;max-width:520px;max-height:80vh;overflow-y:auto}.kalotyp-cheatsheet-body{flex-direction:column;gap:18px;display:flex}.kalotyp-cheatsheet-section{flex-direction:column;gap:8px;display:flex}.kalotyp-cheatsheet-heading{letter-spacing:.04em;text-transform:uppercase;color:var(--kalotyp-muted);margin:0;font-size:12px;font-weight:600}.kalotyp-cheatsheet-list{grid-template-columns:minmax(140px,auto) 1fr;align-items:baseline;gap:6px 16px;margin:0;display:grid}.kalotyp-cheatsheet-keys{flex-wrap:wrap;align-items:center;gap:4px;margin:0;display:flex}.kalotyp-cheatsheet-kbd{border:1px solid var(--kalotyp-border);background:var(--kalotyp-soft);min-width:22px;color:rgb(var(--color-foreground));font:inherit;text-align:center;border-bottom-width:2px;border-radius:4px;padding:2px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;font-weight:500;line-height:1.4;display:inline-block}.kalotyp-cheatsheet-plus{color:var(--kalotyp-muted);font-size:11px}.kalotyp-cheatsheet-description{font-size:var(--kalotyp-text-size);color:rgb(var(--color-foreground));margin:0;line-height:1.4}@media (pointer:coarse){.kalotyp-button-close{position:absolute}.kalotyp-button-close:before{content:"";position:absolute;inset:-6px}.kalotyp-history-button{position:relative}.kalotyp-history-button:before{content:"";position:absolute;inset:-6px}.kalotyp-util-nav-button{position:relative}.kalotyp-util-nav-button:before{content:"";position:absolute;inset:-8px -2px}.kalotyp-handle[data-shape=circle]:before{content:"";z-index:-1;position:absolute;inset:-12px}.kalotyp-handle[data-shape=edge][data-direction=t]:before,.kalotyp-handle[data-shape=edge][data-direction=b]:before{content:"";z-index:-1;position:absolute;inset:-19px 0}.kalotyp-handle[data-shape=edge][data-direction=l]:before,.kalotyp-handle[data-shape=edge][data-direction=r]:before{content:"";z-index:-1;position:absolute;inset:0 -19px}.kalotyp-annotate-handle:before{content:"";position:absolute;inset:-16px}.kalotyp-annotate-tool{position:relative}.kalotyp-annotate-tool:before{content:"";position:absolute;inset:-6px}.kalotyp-annotate-swatch{width:32px;height:32px;position:relative}.kalotyp-annotate-swatch:before{content:"";border-radius:50%;position:absolute;inset:-6px}.kalotyp-annotate-color{width:36px;height:36px;position:relative}.kalotyp-annotate-color:before{content:"";position:absolute;inset:-4px}.kalotyp-preset-button{height:40px;position:relative}.kalotyp-preset-button:before{content:"";position:absolute;inset:-2px}.kalotyp-toggle-button,.kalotyp-rotate-input,.kalotyp-rotate-reset,.kalotyp-quarter-button,.kalotyp-resize-input,.kalotyp-resize-lock{height:40px;min-height:40px}.kalotyp-toggle-button:before,.kalotyp-rotate-reset:before,.kalotyp-quarter-button:before,.kalotyp-resize-lock:before{content:"";position:absolute;inset:-2px}.kalotyp-toggle-button,.kalotyp-rotate-reset,.kalotyp-quarter-button,.kalotyp-resize-lock,.kalotyp-finetune-row-reset{position:relative}.kalotyp-finetune-row-reset:before{content:"";position:absolute;inset:-8px}.kalotyp-finetune-reset-all{height:36px;position:relative}.kalotyp-finetune-reset-all:before{content:"";position:absolute;inset:-4px}.kalotyp-rotate-slider,.kalotyp-finetune-slider,.kalotyp-annotate-stroke{height:44px}.kalotyp-rotate-slider::-webkit-slider-thumb{width:24px;height:24px;margin-top:-10px}.kalotyp-finetune-slider::-webkit-slider-thumb{width:24px;height:24px;margin-top:-10px}.kalotyp-annotate-stroke::-webkit-slider-thumb{width:24px;height:24px;margin-top:-10px}.kalotyp-rotate-slider::-moz-range-thumb{width:24px;height:24px}.kalotyp-finetune-slider::-moz-range-thumb{width:24px;height:24px}.kalotyp-annotate-stroke::-moz-range-thumb{width:24px;height:24px}.kalotyp-button-export{height:44px;padding:0 22px}}@media (max-width:768px){.kalotyp-main{gap:8px;padding:8px 8px 0!important}.kalotyp-nav-tools{flex-wrap:nowrap;gap:8px;min-height:56px;padding:8px 8px 8px 12px}.kalotyp-util-nav{scrollbar-width:none;-webkit-overflow-scrolling:touch;flex:auto;min-width:0;overflow:auto hidden;-webkit-mask-image:linear-gradient(90deg,#0000 0,#000 36px calc(100% - 36px),#0000 100%);mask-image:linear-gradient(90deg,#0000 0,#000 36px calc(100% - 36px),#0000 100%)}.kalotyp-util-nav::-webkit-scrollbar{display:none}.kalotyp-util-nav-button{scroll-snap-align:start;flex:none}.kalotyp-history-controls,.kalotyp-button-close{flex:none;position:static!important}.kalotyp-nav-tools{padding-right:168px}.kalotyp-button-close{position:absolute!important;top:12px!important;right:8px!important}.kalotyp-button-prefs{position:absolute!important;top:12px!important;right:48px!important}.kalotyp-history-controls{position:absolute!important;top:12px!important;right:88px!important}.kalotyp-util-main{min-height:72px;padding:12px}.kalotyp-util-footer{padding:10px 12px}.pintura-editor .kalotyp-root>.kalotyp-nav-tools{padding:8px 100px 8px 12px!important}.pintura-editor .kalotyp-root[data-env~=landscape] .kalotyp-util-main,.pintura-editor .kalotyp-root[data-env~=landscape] .kalotyp-util-footer{padding-left:12px!important;padding-right:12px!important}.kalotyp-rotate-slider{min-width:140px}.kalotyp-rotate-slider-label{min-width:auto}.kalotyp-resize-panel{align-items:stretch;gap:8px}.kalotyp-resize-row{flex-wrap:wrap;justify-content:center}.kalotyp-finetune-panel{max-width:100%}.kalotyp-finetune-label{text-align:right;width:56px;font-size:12px}.kalotyp-finetune-slider{min-width:80px}.kalotyp-finetune-input{width:56px}.kalotyp-annotate-toolbar{-webkit-overflow-scrolling:touch;scrollbar-width:none;max-width:100%;overflow:auto hidden}.kalotyp-annotate-toolbar::-webkit-scrollbar{display:none}.kalotyp-annotate-tool{flex:none}.kalotyp-annotate-style-row{flex-wrap:wrap;gap:8px}.kalotyp-annotate-stroke{min-width:120px}.kalotyp-filter-strip{gap:8px;padding:4px 8px}}@media (max-width:360px){.kalotyp-util-nav{-webkit-mask-image:none;mask-image:none}.pintura-editor .kalotyp-root>.kalotyp-nav-tools,.kalotyp-nav-tools{padding-right:92px!important}}@media (max-height:500px) and (orientation:landscape){.kalotyp-nav-tools{min-height:44px;padding-top:6px;padding-bottom:6px}.kalotyp-main{gap:6px;padding:6px 12px 0!important}.kalotyp-util-main{padding:6px 12px;min-height:56px!important}.kalotyp-util-footer{padding:6px 12px}.kalotyp-button-export{height:40px;padding:0 16px}.kalotyp-button-close,.kalotyp-button-prefs,.kalotyp-history-controls{top:6px!important}}
|
|
2
|
+
/*$vite$:1*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../src/output/popover.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../src/output/popover.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,KAAK,EAIX,MAAM,0BAA0B,CAAC;AAGlC,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IACnC,oDAAoD;IACpD,QAAQ,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC;IACpC,2FAA2F;IAC3F,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,IAAI,IAAI,CAAC;CACf;AA2CD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,mBAAmB,CA8KxF"}
|
|
@@ -11,15 +11,17 @@
|
|
|
11
11
|
* - rect / ellipse → Left, Top, Width, Height (matches crop's
|
|
12
12
|
* dimension-input pattern from Phase 6.2; same semantics).
|
|
13
13
|
* - arrow → Start X, Start Y, End X, End Y (the two endpoints).
|
|
14
|
-
* - text → X, Y (anchor only; size is driven by the font
|
|
14
|
+
* - text → X, Y (anchor only; size is driven by the font-size
|
|
15
15
|
* control, and the inline editor handles the text content).
|
|
16
|
+
* - emoji → X, Y, Size, Angle (the square sticker box; Size and Angle are the
|
|
17
|
+
* keyboard equivalents of dragging a corner / the rotate handle).
|
|
16
18
|
*
|
|
17
19
|
* One row instance is reused across selections; it rebuilds its
|
|
18
20
|
* fields when the selected shape's kind changes. The mount layer
|
|
19
21
|
* subscribes to the selection and calls `updateForShape(shape)` on
|
|
20
22
|
* each change so the inputs reflect the live geometry.
|
|
21
23
|
*/
|
|
22
|
-
import type
|
|
24
|
+
import { type Shape } from '@magicpages/kalotyp-core';
|
|
23
25
|
export interface CoordInputsOptions {
|
|
24
26
|
/**
|
|
25
27
|
* Called when a typed value commits (blur or Enter). The handler
|
|
@@ -49,6 +51,12 @@ export type ShapeCoordEdit = {
|
|
|
49
51
|
readonly kind: 'text';
|
|
50
52
|
readonly x: number;
|
|
51
53
|
readonly y: number;
|
|
54
|
+
} | {
|
|
55
|
+
readonly kind: 'emoji';
|
|
56
|
+
readonly x: number;
|
|
57
|
+
readonly y: number;
|
|
58
|
+
readonly size: number;
|
|
59
|
+
readonly rotation: number;
|
|
52
60
|
};
|
|
53
61
|
export interface CoordInputsHandle {
|
|
54
62
|
readonly container: HTMLDivElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coord-inputs.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/coord-inputs.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"coord-inputs.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/coord-inputs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAOL,KAAK,KAAK,EAEX,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GACjE;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEN,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,oFAAoF;IACpF,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1C,OAAO,IAAI,IAAI,CAAC;CACjB;AAsCD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,CAqL/E;AAkBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,GAAG,KAAK,CAgDxE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GENERATED FILE — do not edit by hand.
|
|
3
|
+
*
|
|
4
|
+
* Emoji catalogue for the annotate emoji picker. List/names from
|
|
5
|
+
* unicode-emoji-json (MIT); `key` is the OpenMoji (CC-BY-SA-4.0) artwork
|
|
6
|
+
* filename stem, resolved at generation time. Regenerate with `pnpm gen:emoji`
|
|
7
|
+
* — see scripts/gen-emoji-data.mjs.
|
|
8
|
+
*
|
|
9
|
+
* 1914 emojis across 9 groups.
|
|
10
|
+
*/
|
|
11
|
+
export interface EmojiEntry {
|
|
12
|
+
/** The emoji character (used for search context and the placed shape). */
|
|
13
|
+
readonly char: string;
|
|
14
|
+
/** CLDR name, used as the search corpus and the picker button's accessible label. */
|
|
15
|
+
readonly name: string;
|
|
16
|
+
/** OpenMoji artwork filename stem; the SVG URL is `<assetBase>/<key>.svg`. */
|
|
17
|
+
readonly key: string;
|
|
18
|
+
}
|
|
19
|
+
export interface EmojiGroup {
|
|
20
|
+
/** Stable group key (the Unicode group slug). */
|
|
21
|
+
readonly id: string;
|
|
22
|
+
/** Human-readable group label for the category tab. */
|
|
23
|
+
readonly label: string;
|
|
24
|
+
readonly emojis: ReadonlyArray<EmojiEntry>;
|
|
25
|
+
}
|
|
26
|
+
export declare const EMOJI_GROUPS: ReadonlyArray<EmojiGroup>;
|
|
27
|
+
//# sourceMappingURL=emoji-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emoji-data.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/emoji-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,UAAU;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CAC5C;AAED,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,UAAU,CAUlD,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Emoji artwork loader for the annotate emoji sticker tool.
|
|
3
|
+
*
|
|
4
|
+
* Emoji stickers render as OpenMoji SVGs (crisp at any size) rather than the
|
|
5
|
+
* platform's bitmap emoji font (which blurs when enlarged). The SVGs ship as
|
|
6
|
+
* static same-origin assets next to the bundle; this module resolves their URL,
|
|
7
|
+
* loads them on demand into an `<img>` cache, and hands the decoded image to the
|
|
8
|
+
* shared `paintShape` so the on-screen preview and the bake draw the same pixels.
|
|
9
|
+
*
|
|
10
|
+
* Nothing is fetched until an emoji is actually browsed or placed, and each
|
|
11
|
+
* glyph is loaded once and cached. Until an image is ready (or if the asset is
|
|
12
|
+
* unavailable) `paintShape` falls back to the OS emoji font, so the feature
|
|
13
|
+
* degrades gracefully and never blocks.
|
|
14
|
+
*/
|
|
15
|
+
import type { Shape } from '@magicpages/kalotyp-core';
|
|
16
|
+
/** The OpenMoji artwork key for an emoji character, or `undefined` if unknown. */
|
|
17
|
+
export declare function emojiKeyFor(char: string): string | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Override where emoji SVGs are loaded from. The host (e.g. the Ghost loader)
|
|
20
|
+
* calls this when the assets aren't served at the default `/emoji/` path. A
|
|
21
|
+
* trailing slash is enforced.
|
|
22
|
+
*
|
|
23
|
+
* Best set before the first emoji is used, but a later change is honoured:
|
|
24
|
+
* already-cached images were loaded from the old base, so changing it drops the
|
|
25
|
+
* cache and the next paint reloads from the new base.
|
|
26
|
+
*/
|
|
27
|
+
export declare function setEmojiAssetBase(url: string): void;
|
|
28
|
+
/** The same-origin SVG URL for an OpenMoji artwork key. */
|
|
29
|
+
export declare function emojiSvgUrlForKey(key: string): string;
|
|
30
|
+
/** The same-origin SVG URL for an emoji character, or `null` if it has no artwork. */
|
|
31
|
+
export declare function emojiSvgUrl(char: string): string | null;
|
|
32
|
+
/** Register a callback fired whenever an emoji image finishes loading (for repaint). */
|
|
33
|
+
export declare function onEmojiImageLoad(callback: () => void): () => void;
|
|
34
|
+
/**
|
|
35
|
+
* Synchronous resolver consumed by `paintShape`: returns the decoded image if
|
|
36
|
+
* it's ready, otherwise `null` (and kicks off the load so a later repaint — via
|
|
37
|
+
* `onEmojiImageLoad` — can draw it). `null` makes `paintShape` fall back to the
|
|
38
|
+
* OS emoji font.
|
|
39
|
+
*/
|
|
40
|
+
export declare function resolveEmojiImage(char: string): CanvasImageSource | null;
|
|
41
|
+
/**
|
|
42
|
+
* Load the artwork for every emoji shape and await it (for the bake, so the
|
|
43
|
+
* saved image gets the crisp SVG rather than the fallback). Bounded by a
|
|
44
|
+
* timeout — a slow or blocked asset must never wedge Save.
|
|
45
|
+
*/
|
|
46
|
+
export declare function ensureEmojiImagesLoaded(shapes: ReadonlyArray<Shape>): Promise<void>;
|
|
47
|
+
//# sourceMappingURL=emoji-images.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emoji-images.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/emoji-images.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAQtD,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5D;AAID;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAOnD;AAmBD,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGvD;AAWD,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAKjE;AAwBD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAKxE;AAKD;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BzF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Emoji picker popover for the annotate emoji sticker tool.
|
|
3
|
+
*
|
|
4
|
+
* A self-contained overlay (owned by the mount layer, like the inline text
|
|
5
|
+
* editor) with a search box, category tabs, and a scrollable grid. To keep the
|
|
6
|
+
* DOM small the grid renders only the active category — or, while searching,
|
|
7
|
+
* the capped set of name matches — never all ~1,900 cells at once.
|
|
8
|
+
*
|
|
9
|
+
* The picker is purely presentational: clicking a cell reports the chosen
|
|
10
|
+
* character via `onSelect`; the caller arms it as the current emoji and places
|
|
11
|
+
* it on the canvas. The popover is positioned by CSS (absolute, anchored above
|
|
12
|
+
* the panel) so showing it never reflows the stage.
|
|
13
|
+
*/
|
|
14
|
+
export interface EmojiPickerOptions {
|
|
15
|
+
readonly host: HTMLElement;
|
|
16
|
+
/** A cell was chosen; the value is the emoji character. */
|
|
17
|
+
onSelect(char: string): void;
|
|
18
|
+
/** The close (×) button was pressed. */
|
|
19
|
+
onClose(): void;
|
|
20
|
+
}
|
|
21
|
+
export interface EmojiPickerHandle {
|
|
22
|
+
readonly element: HTMLDivElement;
|
|
23
|
+
show(): void;
|
|
24
|
+
hide(): void;
|
|
25
|
+
readonly isOpen: boolean;
|
|
26
|
+
destroy(): void;
|
|
27
|
+
}
|
|
28
|
+
export declare function buildEmojiPicker(options: EmojiPickerOptions): EmojiPickerHandle;
|
|
29
|
+
//# sourceMappingURL=emoji-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emoji-picker.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/emoji-picker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,wCAAwC;IACxC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,IAAI,IAAI,IAAI,CAAC;IACb,IAAI,IAAI,IAAI,CAAC;IACb,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,OAAO,IAAI,IAAI,CAAC;CACjB;AAOD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,CA+O/E"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loads the text-annotation web fonts from fonts.bunny.net — the same
|
|
3
|
+
* GDPR-friendly CDN and family set Ghost's own admin uses, so annotations can
|
|
4
|
+
* match a site's typography. Injection is idempotent: if the link is already
|
|
5
|
+
* present (Ghost may have loaded these, or we ran before), it's a no-op.
|
|
6
|
+
*
|
|
7
|
+
* The bake awaits `document.fonts.load` (with a timeout) before painting, so a
|
|
8
|
+
* slow load never produces a wrong baked image — it just falls back to the
|
|
9
|
+
* generic family if the face isn't ready in time.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Inject the Bunny stylesheet once (idempotent) and invoke `onFontsChanged`
|
|
13
|
+
* whenever font faces finish loading. Web fonts arrive asynchronously: the
|
|
14
|
+
* canvas first paints with a fallback face, then the real face swaps in with
|
|
15
|
+
* different metrics — so the caller must repaint the shapes when fonts load,
|
|
16
|
+
* or committed text appears to shift on the next interaction. `loadingdone`
|
|
17
|
+
* fires for each batch the document loads (including fonts Ghost or other tools
|
|
18
|
+
* trigger), and `fonts.ready` covers any already-pending load. Returns a
|
|
19
|
+
* cleanup that detaches the listener.
|
|
20
|
+
*/
|
|
21
|
+
export declare function ensureAnnotateFontsLoaded(onFontsChanged?: () => void): () => void;
|
|
22
|
+
//# sourceMappingURL=fonts-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fonts-loader.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/fonts-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAeH;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAejF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/mount.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/mount.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,KAAK,aAAa,EAelB,KAAK,WAAW,EAChB,KAAK,KAAK,EAQV,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAuBlC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACrC,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IACvC,6DAA6D;IAC7D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,mBAAmB,CA6rBvF"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* other Phase 2 panels (rotate, flip, resize) established — flat
|
|
5
5
|
* row(s) of controls under `.kalotyp-util-main`.
|
|
6
6
|
*/
|
|
7
|
-
import { type AnnotateTool, type StylePalette } from '@magicpages/kalotyp-core';
|
|
7
|
+
import { type AnnotateTool, type StylePalette, type TextAlign } from '@magicpages/kalotyp-core';
|
|
8
8
|
export interface AnnotatePanelOptions {
|
|
9
9
|
readonly initialTool: AnnotateTool;
|
|
10
10
|
readonly initialStyle: StylePalette;
|
|
@@ -18,6 +18,11 @@ export interface AnnotatePanelOptions {
|
|
|
18
18
|
onSelectTool(tool: AnnotateTool): void;
|
|
19
19
|
onColorChange(color: string): void;
|
|
20
20
|
onStrokeWidthChange(width: number): void;
|
|
21
|
+
onFontFamilyChange(fontFamily: string): void;
|
|
22
|
+
onFontSizeChange(fontSize: number): void;
|
|
23
|
+
onToggleBold(): void;
|
|
24
|
+
onToggleItalic(): void;
|
|
25
|
+
onAlignChange(align: TextAlign): void;
|
|
21
26
|
onDeleteSelected(): void;
|
|
22
27
|
/**
|
|
23
28
|
* Insert the active drawing tool's default shape at image centre
|
|
@@ -33,11 +38,25 @@ export interface AnnotatePanel {
|
|
|
33
38
|
readonly hexInput: HTMLInputElement;
|
|
34
39
|
readonly colorSwatches: ReadonlyArray<HTMLButtonElement>;
|
|
35
40
|
readonly strokeRange: HTMLInputElement;
|
|
41
|
+
readonly fontSelect: HTMLSelectElement;
|
|
42
|
+
readonly fontSizeInput: HTMLInputElement;
|
|
43
|
+
readonly boldButton: HTMLButtonElement;
|
|
44
|
+
readonly italicButton: HTMLButtonElement;
|
|
45
|
+
readonly alignButtons: ReadonlyMap<TextAlign, HTMLButtonElement>;
|
|
36
46
|
readonly deleteButton: HTMLButtonElement;
|
|
37
47
|
readonly insertButton: HTMLButtonElement;
|
|
38
48
|
setActiveTool(tool: AnnotateTool): void;
|
|
39
49
|
setStyle(style: StylePalette): void;
|
|
40
50
|
setCanDelete(canDelete: boolean): void;
|
|
51
|
+
/**
|
|
52
|
+
* Show the per-mode controls for the active tool / selection. `text` reveals
|
|
53
|
+
* the font/size/bold/italic/align row; `emoji` hides the colour + stroke
|
|
54
|
+
* controls (an emoji carries its own colour). Stroke width hides for both.
|
|
55
|
+
*/
|
|
56
|
+
setControlsMode(mode: {
|
|
57
|
+
readonly text: boolean;
|
|
58
|
+
readonly emoji: boolean;
|
|
59
|
+
}): void;
|
|
41
60
|
}
|
|
42
61
|
export declare function buildAnnotatePanel(options: AnnotatePanelOptions): AnnotatePanel;
|
|
43
62
|
//# sourceMappingURL=panel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/panel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/panel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,YAAY,EAEjB,KAAK,SAAS,EACf,MAAM,0BAA0B,CAAC;AAGlC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IACvC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,YAAY,IAAI,IAAI,CAAC;IACrB,cAAc,IAAI,IAAI,CAAC;IACvB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACtC,gBAAgB,IAAI,IAAI,CAAC;IACzB;;;;;OAKG;IACH,gBAAgB,IAAI,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IACnE,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACzD,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACjE,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IACvC;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;CAClF;AA4CD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAyT/E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAGlB,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAIlC,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,CAAC,aAAa,CAAC,CAwBjG"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* from the core `bake.ts` module so the live preview is byte-equal to
|
|
16
16
|
* the bake output (per shape).
|
|
17
17
|
*/
|
|
18
|
-
import { type Shape, type SourceImage, type Viewport } from '@magicpages/kalotyp-core';
|
|
18
|
+
import { type PaintShapeOptions, type Shape, type SourceImage, type Viewport } from '@magicpages/kalotyp-core';
|
|
19
19
|
export declare function paintImageLayer(canvas: HTMLCanvasElement, source: SourceImage, stageWidth: number, stageHeight: number, viewport: Viewport): void;
|
|
20
20
|
/**
|
|
21
21
|
* Paint a list of shapes by setting up an image-space coordinate
|
|
@@ -24,13 +24,13 @@ export declare function paintImageLayer(canvas: HTMLCanvasElement, source: Sourc
|
|
|
24
24
|
* scaling by the viewport scale; the shapes' image-space coordinates
|
|
25
25
|
* then land at the right display pixels for free.
|
|
26
26
|
*/
|
|
27
|
-
export declare function paintShapesLayer(canvas: HTMLCanvasElement, shapes: ReadonlyArray<Shape>, stageWidth: number, stageHeight: number, viewport: Viewport): void;
|
|
27
|
+
export declare function paintShapesLayer(canvas: HTMLCanvasElement, shapes: ReadonlyArray<Shape>, stageWidth: number, stageHeight: number, viewport: Viewport, opts?: PaintShapeOptions): void;
|
|
28
28
|
/**
|
|
29
29
|
* Paint a single in-progress shape on the live canvas. Same
|
|
30
30
|
* coordinate setup as the shapes layer; passing `null` clears the
|
|
31
31
|
* canvas without drawing — useful when a gesture ends.
|
|
32
32
|
*/
|
|
33
|
-
export declare function paintLiveLayer(canvas: HTMLCanvasElement, shape: Shape | null, stageWidth: number, stageHeight: number, viewport: Viewport): void;
|
|
33
|
+
export declare function paintLiveLayer(canvas: HTMLCanvasElement, shape: Shape | null, stageWidth: number, stageHeight: number, viewport: Viewport, opts?: PaintShapeOptions): void;
|
|
34
34
|
/**
|
|
35
35
|
* Paint a selection-marquee rectangle (image-space) on the live
|
|
36
36
|
* canvas. Distinct from `paintLiveLayer` because the marquee uses
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AA0BlC,wBAAgB,eAAe,CAC7B,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,QAAQ,GACjB,IAAI,CAYN;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,EAC5B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,QAAQ,EAClB,IAAI,CAAC,EAAE,iBAAiB,GACvB,IAAI,CAWN;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,KAAK,GAAG,IAAI,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,QAAQ,EAClB,IAAI,CAAC,EAAE,iBAAiB,GACvB,IAAI,CASN;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,iBAAiB,EACzB,YAAY,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAC5E,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,QAAQ,GACjB,IAAI,CA+BN"}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* manipulators. Reusing that helper keeps the handle DOM consistent
|
|
15
15
|
* with crop's so future styling can target both with a single rule.
|
|
16
16
|
*/
|
|
17
|
-
import { type AnnotateState, type Shape, type Viewport } from '@magicpages/kalotyp-core';
|
|
17
|
+
import { type AnnotateState, type SelectionHandle, type Shape, type Viewport } from '@magicpages/kalotyp-core';
|
|
18
18
|
import type { ToolGestureContext } from './tools.js';
|
|
19
19
|
/**
|
|
20
20
|
* Build and own the selection-handle DOM. The returned object exposes
|
|
@@ -34,6 +34,34 @@ export interface SelectionLayer {
|
|
|
34
34
|
destroy(): void;
|
|
35
35
|
}
|
|
36
36
|
export declare function buildSelectionLayer(options: SelectionLayerOptions): SelectionLayer;
|
|
37
|
+
/**
|
|
38
|
+
* Build the per-handle resize gesture. Snapshots the selected shape
|
|
39
|
+
* at gesture start; each move computes the new image-space pointer
|
|
40
|
+
* position and applies it via the appropriate per-shape mutator.
|
|
41
|
+
*
|
|
42
|
+
* Returns `null` if no shape is selected when the handle is pressed
|
|
43
|
+
* (defensive — UI should hide handles in that case).
|
|
44
|
+
*/
|
|
45
|
+
/**
|
|
46
|
+
* The rotation (degrees, CW) that aims the box's "up" edge toward `pointer`,
|
|
47
|
+
* about the box `center`. Pointer directly above the centre → 0°. Exported so
|
|
48
|
+
* the angle math can be unit-tested without a live gesture.
|
|
49
|
+
*/
|
|
50
|
+
export declare function emojiRotationFromPointer(center: {
|
|
51
|
+
x: number;
|
|
52
|
+
y: number;
|
|
53
|
+
}, pointer: {
|
|
54
|
+
x: number;
|
|
55
|
+
y: number;
|
|
56
|
+
}): number;
|
|
57
|
+
/**
|
|
58
|
+
* Map a handle drag to a new shape. Exported for unit testing; the gesture
|
|
59
|
+
* wrapper calls it on each pointer move.
|
|
60
|
+
*/
|
|
61
|
+
export declare function applyHandleDrag(shape: Shape, direction: SelectionHandle, image: {
|
|
62
|
+
x: number;
|
|
63
|
+
y: number;
|
|
64
|
+
}): Shape | null;
|
|
37
65
|
/**
|
|
38
66
|
* Helper for the mount layer: which shape (if any) is selected, given
|
|
39
67
|
* the current state? Keeps the lookup logic in one place — most
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAEL,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAEL,KAAK,aAAa,EAQlB,KAAK,eAAe,EACpB,KAAK,KAAK,EAEV,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAOrD;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,iEAAiE;IACjE,WAAW,IAAI,QAAQ,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtD,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAkHlF;AAwBD;;;;;;;GAOG;AACH;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAChC,OAAO,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,MAAM,CAGR;AA0DD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,KAAK,GAAG,IAAI,CAkEd;AAuBD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,KAAK,GAAG,IAAI,CAGlE"}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* annotation's image-space anchor. Using a `<div>` instead of a
|
|
6
6
|
* `<textarea>` lets us match the canvas-side font and size precisely
|
|
7
7
|
* (textareas restrict the visible padding/size combination on some
|
|
8
|
-
* browsers). The element
|
|
9
|
-
*
|
|
8
|
+
* browsers). The element auto-sizes to its content and grows with the
|
|
9
|
+
* text the user types (line breaks via Shift+Enter).
|
|
10
10
|
*
|
|
11
11
|
* Lifecycle:
|
|
12
12
|
* - `open(shape, viewport)`: position the editor over the shape,
|
|
@@ -27,6 +27,10 @@ export interface TextEditorOptions {
|
|
|
27
27
|
}
|
|
28
28
|
export interface TextEditorHandle {
|
|
29
29
|
open(shape: TextShape, viewport: Viewport, source: SourceImage): void;
|
|
30
|
+
/** Re-apply font/colour/alignment/position to the open editor without
|
|
31
|
+
* resetting its text or moving the caret (used when panel controls
|
|
32
|
+
* restyle the text mid-edit). */
|
|
33
|
+
restyle(shape: TextShape, viewport: Viewport): void;
|
|
30
34
|
close(): void;
|
|
31
35
|
destroy(): void;
|
|
32
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-editor.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/text-editor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAEL,KAAK,WAAW,
|
|
1
|
+
{"version":3,"file":"text-editor.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/text-editor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAEL,KAAK,WAAW,EAEhB,KAAK,SAAS,EACd,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,IAAI,IAAI,CAAC;IACjB,QAAQ,IAAI,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IACtE;;sCAEkC;IAClC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACpD,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAkI5E"}
|
|
@@ -35,6 +35,17 @@ export declare function startArrowGesture(ctx: ToolGestureContext, origin: Point
|
|
|
35
35
|
export declare function startFreehandGesture(ctx: ToolGestureContext, origin: PointerEvent, options: {
|
|
36
36
|
kind: 'freehand' | 'highlight';
|
|
37
37
|
}): DragHandlers;
|
|
38
|
+
/**
|
|
39
|
+
* Emoji sticker placement. Unlike the drag-to-create tools, an emoji is placed
|
|
40
|
+
* on press (centred on the pointer at the armed size) and a drag before release
|
|
41
|
+
* just repositions it — so a plain tap is a valid placement, and a press-drag
|
|
42
|
+
* lets you fine-tune the drop point in one gesture. The committed sticker is
|
|
43
|
+
* selected so its resize handles are immediately available.
|
|
44
|
+
*/
|
|
45
|
+
export declare function startEmojiGesture(ctx: ToolGestureContext, origin: PointerEvent, spec: {
|
|
46
|
+
emoji: string;
|
|
47
|
+
size: number;
|
|
48
|
+
}): DragHandlers;
|
|
38
49
|
/**
|
|
39
50
|
* Body-drag (move) gesture used by the select tool when the user
|
|
40
51
|
* presses on an already-selected shape and drags. Translates the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/plugins/annotate/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,KAAK,aAAa,EAYlB,KAAK,KAAK,EAEV,KAAK,KAAK,EACV,KAAK,KAAK,EAEX,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA6CtD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACrC,gEAAgE;IAChE,YAAY,CAAC,WAAW,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,KAAK,CAAC;IACvE,yDAAyD;IACzD,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;IACxC,+CAA+C;IAC/C,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,YAAY,GAAG,YAAY,CAiD5F;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,YAAY,GAAG,YAAY,CAgD/F;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,YAAY,GAAG,YAAY,CA+C7F;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE;IAAE,IAAI,EAAE,UAAU,GAAG,WAAW,CAAA;CAAE,GAC1C,YAAY,CAiFd;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpC,YAAY,CAgCd;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,KAAK,EACnB,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,KAAK,EAC1D,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC9B,YAAY,CAgBd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interaction.d.ts","sourceRoot":"","sources":["../../../src/plugins/crop/interaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"interaction.d.ts","sourceRoot":"","sources":["../../../src/plugins/crop/interaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,eAAe,EAIpB,KAAK,KAAK,EAEV,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC;IACjE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,IAAI,QAAQ,CAAC;IACxB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,6FAA6F;AAC7F,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,uBAAuB,EACjC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,EACvB,GAAG,EAAE,sBAAsB,GAC1B,qBAAqB,CAcvB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CropPreset, type CropPresetFilter, type CropState, type SourceImage, type Store, type ViewportController
|
|
1
|
+
import { type CropPreset, type CropPresetFilter, type CropState, initialCropState, type SourceImage, type Store, type ViewportController } from '@magicpages/kalotyp-core';
|
|
2
2
|
export interface MountCropOptions {
|
|
3
3
|
readonly stageHost: HTMLElement;
|
|
4
4
|
readonly utilHost: HTMLElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../../../src/plugins/crop/mount.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../../../src/plugins/crop/mount.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,SAAS,EAId,gBAAgB,EAEhB,KAAK,WAAW,EAChB,KAAK,KAAK,EAEV,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAQlC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,wFAAwF;IACxF,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,IAAI,IAAI,CAAC;CACjB;AAID,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAmJ3E;AAuFD,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/crop/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/crop/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,SAAS,EAEd,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAKlC,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,4DAA4D;IAC5D,QAAQ,CAAC,YAAY,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACpD,sEAAsE;IACtE,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;CACjC;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,CAAC,SAAS,CAAC,CA2BrF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../../../src/plugins/filter/mount.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../../../src/plugins/filter/mount.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,aAAa,EAElB,KAAK,WAAW,EAChB,KAAK,KAAK,EACV,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAKlC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,8FAA8F;IAC9F,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,CAgHjF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thumbnails.d.ts","sourceRoot":"","sources":["../../../src/plugins/filter/thumbnails.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"thumbnails.d.ts","sourceRoot":"","sources":["../../../src/plugins/filter/thumbnails.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAGlB,MAAM,0BAA0B,CAAC;AAElC;;;GAGG;AAEH,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,oEAAoE;AACpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,CAU7F;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,iBAAiB,CAAC;IAC7C,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3F,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;CAC5C;AAED,iHAAiH;AACjH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,cAAc,CA2DvF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../../../src/plugins/finetune/mount.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../../../src/plugins/finetune/mount.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,aAAa,EAGlB,KAAK,WAAW,EAChB,KAAK,KAAK,EAEV,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAIlC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACrC,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IACvC,qGAAqG;IACrG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,mBAAmB,CA4GvF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/finetune/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/finetune/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAElB,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAGlC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;CACjC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,CAAC,aAAa,CAAC,CAiBjG"}
|