@makefully/notefully 0.1.4 → 0.1.6
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/notefully.css +1 -1
- package/dist/notefully.iife.js +8 -8
- package/dist/notefully.js +382 -359
- package/package.json +1 -1
package/dist/notefully.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
#notefully{all:initial;--nf-launcher-left: 16px;--nf-launcher-bottom: 16px;--nf-radius: 10px;--nf-z: 2147483000;--nf-accent: #864093;--nf-accent-text: #ffffff;--nf-accent-hot: #e83590;--nf-btn: #864093;--nf-btn-border: #382c74;--nf-btn-text: #ffffff;--nf-panel: #f7f4fb;--nf-text: #2a2140;--nf-muted: rgba(42, 33, 64, .72);--nf-input: #efe8f8;--nf-border: rgba(56, 44, 116, .18);--nf-backdrop: rgba(20, 12, 28, .55);--nf-danger: #e83590;--nf-mark: #fdd341;--nf-mark-text: #2a2140;--nf-canvas-bg: #111;font-family:ui-sans-serif,system-ui,sans-serif;color:var(--nf-text)}#notefully[data-theme=maker]{--nf-accent: #864093;--nf-accent-text: #ffffff;--nf-accent-hot: #e83590;--nf-btn: #864093;--nf-btn-border: #382c74;--nf-btn-text: #ffffff;--nf-panel: #f7f4fb;--nf-text: #2a2140;--nf-muted: rgba(42, 33, 64, .72);--nf-input: #efe8f8;--nf-border: rgba(56, 44, 116, .18);--nf-backdrop: rgba(20, 12, 28, .55);--nf-danger: #e83590;--nf-mark: #fdd341;--nf-mark-text: #2a2140}#notefully[data-theme=all-business]{--nf-accent: #5c6570;--nf-accent-text: #ffffff;--nf-accent-hot: #8a4a4a;--nf-btn: #5c6570;--nf-btn-border: #3a4048;--nf-btn-text: #ffffff;--nf-panel: #ffffff;--nf-text: #1f1f23;--nf-muted: rgba(31, 31, 35, .68);--nf-input: #f0f0f2;--nf-border: rgba(0, 0, 0, .14);--nf-backdrop: rgba(20, 20, 24, .4);--nf-danger: #8a4a4a;--nf-mark: #3d6ea8;--nf-mark-text: #ffffff}#notefully[data-theme=brighter-day]{--nf-accent: #5aa8dc;--nf-accent-text: #ffffff;--nf-accent-hot: #f08ab8;--nf-btn: #5aa8dc;--nf-btn-border: #3d7eae;--nf-btn-text: #ffffff;--nf-panel: #fffdf6;--nf-text: #2a2440;--nf-muted: rgba(42, 36, 64, .68);--nf-input: #ffeef5;--nf-border: rgba(90, 168, 220, .28);--nf-backdrop: rgba(60, 40, 70, .35);--nf-danger: #f08ab8;--nf-mark: #5aa8dc;--nf-mark-text: #ffffff}#notefully[data-theme=quiet-night]{--nf-accent: #c4aa5a;--nf-accent-text: #121416;--nf-accent-hot: #6e3a3a;--nf-btn: #3a4048;--nf-btn-border: #0e1012;--nf-btn-text: #d8dbe0;--nf-panel: #1c1f24;--nf-text: #d8dbe0;--nf-muted: rgba(216, 219, 224, .68);--nf-input: #262a30;--nf-border: rgba(255, 255, 255, .12);--nf-backdrop: rgba(0, 0, 0, .65);--nf-danger: #c88888;--nf-mark: #c4aa5a;--nf-mark-text: #121416}#notefully *{box-sizing:border-box}#notefully .nf-launcher{position:fixed;left:var(--nf-launcher-left);bottom:var(--nf-launcher-bottom);z-index:var(--nf-z);width:48px;height:48px;padding:0;display:grid;place-items:center;background:var(--nf-btn);color:var(--nf-btn-text);border:1px solid var(--nf-btn-border);border-radius:999px;cursor:pointer;box-shadow:0 8px 24px #00000040}#notefully .nf-launcher-icon{width:22px;height:22px;display:block}#notefully .nf-launcher[hidden],#notefully .nf-dialog[hidden],#notefully .nf-stop-video[hidden],#notefully .nf-stage[hidden],#notefully .nf-reset-crop[hidden],#notefully .nf-restore[hidden],#notefully .nf-video[hidden]{display:none!important}#notefully .nf-dialog{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--nf-z);background:var(--nf-backdrop);display:flex;align-items:center;justify-content:center;padding:24px}#notefully .nf-panel{width:min(920px,100%);max-height:calc(100vh - 48px);overflow:auto;background:var(--nf-panel);color:var(--nf-text);border:1px solid var(--nf-border);border-radius:var(--nf-radius);padding:16px;display:flex;flex-direction:column;gap:12px}#notefully .nf-stage{display:flex;flex-direction:column;gap:8px}#notefully .nf-palette{display:flex;flex-wrap:wrap;gap:8px;align-items:center}#notefully .nf-tool,#notefully .nf-reset-crop,#notefully .nf-icon-btn{background:var(--nf-input);color:var(--nf-text);border:1px solid var(--nf-border);border-radius:8px;padding:6px 10px;cursor:pointer;font:13px ui-sans-serif,system-ui,sans-serif}#notefully .nf-icon-btn{width:36px;height:36px;padding:0;display:grid;place-items:center;flex:0 0 36px}#notefully .nf-icon{width:18px;height:18px;display:block}#notefully .nf-tool[data-active=true],#notefully .nf-icon-btn[data-active=true]{border-color:var(--nf-accent);color:var(--nf-accent);box-shadow:inset 0 0 0 1px var(--nf-accent)}#notefully .nf-canvas{position:relative;width:min(100%,calc(48vh * var(--nf-shot-aspect, 16 / 9)));max-height:48vh;aspect-ratio:var(--nf-shot-aspect, auto);margin-inline:auto;background:var(--nf-canvas-bg);border-radius:8px;overflow:hidden;-webkit-user-select:none;user-select:none;touch-action:none}#notefully .nf-canvas[data-draw=true],#notefully .nf-canvas[data-draw=true] .nf-shot{cursor:crosshair}#notefully .nf-sticker{cursor:grab}#notefully .nf-sticker[data-preview=true]{cursor:crosshair}#notefully .nf-sticker.nf-arrow .nf-arrow-hit{cursor:grab}#notefully[data-grabbing=true] .nf-canvas,#notefully[data-grabbing=true] .nf-shot,#notefully[data-grabbing=true] .nf-sticker,#notefully[data-grabbing=true] .nf-sticker *{cursor:grabbing}#notefully .nf-shot{position:absolute;overflow:hidden}#notefully .nf-shot img{position:absolute;display:block;max-height:none;pointer-events:none;-webkit-user-drag:none;user-drag:none}#notefully .nf-canvas video.nf-recording-preview{display:block;width:160px;height:auto;max-height:none;object-fit:contain;pointer-events:auto}#notefully .nf-sticker,#notefully .nf-crop{position:absolute;pointer-events:auto;color:var(--nf-mark)}#notefully .nf-sticker[data-selected=true]{z-index:4}#notefully .nf-sticker[data-preview=true],#notefully .nf-sticker.nf-arrow{pointer-events:none}#notefully .nf-sticker.nf-arrow .nf-handle{pointer-events:auto}#notefully .nf-rect,#notefully .nf-circle{border:3px solid var(--nf-mark);background:transparent}#notefully .nf-circle{border-radius:50%}#notefully .nf-arrow-svg{display:block;overflow:visible;pointer-events:none}#notefully .nf-arrow-hit{fill:none;stroke:transparent;stroke-width:16;pointer-events:stroke}#notefully .nf-arrow-shaft{fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;pointer-events:none}#notefully .nf-badge{position:absolute;left:50%;top:0;transform:translate(-50%,-50%);min-width:20px;height:20px;padding:0 5px;border-radius:50%;background:var(--nf-mark);color:var(--nf-mark-text);font:700 11px/20px ui-sans-serif,system-ui,sans-serif;text-align:center;pointer-events:none;z-index:4}#notefully .nf-sticker.nf-arrow .nf-badge{top:50%}#notefully .nf-handle{position:absolute;width:10px;height:10px;background:#fff;border:2px solid var(--nf-mark);border-radius:2px;z-index:5}#notefully .nf-handle[data-dir=nw]{left:-6px;top:-6px;cursor:nwse-resize}#notefully .nf-handle[data-dir=ne]{right:-6px;top:-6px;cursor:nesw-resize}#notefully .nf-handle[data-dir=sw]{left:-6px;bottom:-6px;cursor:nesw-resize}#notefully .nf-handle[data-dir=se]{right:-6px;bottom:-6px;cursor:nwse-resize}#notefully .nf-handle[data-dir=start],#notefully .nf-handle[data-dir=end]{margin:0;cursor:grab}#notefully .nf-crop{border:2px dashed var(--nf-accent);background:color-mix(in srgb,var(--nf-accent) 14%,transparent);box-shadow:0 0 0 9999px #00000073;pointer-events:none}#notefully .nf-text{width:100%;min-height:96px;resize:vertical;background:var(--nf-input);color:var(--nf-text);border:1px solid var(--nf-border);border-radius:8px;padding:10px;font:14px/1.4 ui-sans-serif,system-ui,sans-serif}#notefully .nf-kind{display:flex;gap:8px}#notefully .nf-kind button{background:var(--nf-input);color:var(--nf-muted);border:1px solid var(--nf-border);border-radius:999px;padding:6px 12px;cursor:pointer}#notefully .nf-kind button[data-active=true]{color:var(--nf-accent-text);background:var(--nf-accent);border-color:var(--nf-accent)}#notefully .nf-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}#notefully .nf-actions button{border:1px solid var(--nf-border);border-radius:8px;padding:8px 12px;cursor:pointer;font:600 13px ui-sans-serif,system-ui,sans-serif;background:var(--nf-input);color:var(--nf-text)}#notefully .nf-actions .nf-icon-btn{padding:0}#notefully .nf-submit{margin-left:auto;background:var(--nf-btn)!important;color:var(--nf-btn-text)!important;border-color:var(--nf-btn-border)!important}#notefully .nf-restore{background:transparent;color:var(--nf-muted);border:0;cursor:pointer;font:13px ui-sans-serif,system-ui,sans-serif;text-decoration:underline}#notefully .nf-status{color:var(--nf-muted);font:13px ui-sans-serif,system-ui,sans-serif;min-height:1.2em}#notefully .nf-stop-video{position:fixed;top:16px;left:50%;transform:translate(-50%);z-index:calc(var(--nf-z) + 1);background:var(--nf-danger);color:#fff;border:0;border-radius:999px;padding:10px 18px;font:700 14px ui-sans-serif,system-ui,sans-serif;cursor:pointer}#notefully[data-nf-hidden-launcher] .nf-launcher{display:none!important}
|
|
1
|
+
#notefully{all:initial;--nf-launcher-left: 16px;--nf-launcher-bottom: 16px;--nf-radius: 10px;--nf-z: 2147483000;--nf-accent: #864093;--nf-accent-text: #ffffff;--nf-accent-hot: #e83590;--nf-btn: #864093;--nf-btn-border: #382c74;--nf-btn-text: #ffffff;--nf-panel: #f7f4fb;--nf-text: #2a2140;--nf-muted: rgba(42, 33, 64, .72);--nf-input: #efe8f8;--nf-border: rgba(56, 44, 116, .18);--nf-backdrop: rgba(20, 12, 28, .55);--nf-danger: #e83590;--nf-mark: #fdd341;--nf-mark-text: #2a2140;--nf-canvas-bg: #111;font-family:ui-sans-serif,system-ui,sans-serif;color:var(--nf-text)}#notefully[data-theme=maker]{--nf-accent: #864093;--nf-accent-text: #ffffff;--nf-accent-hot: #e83590;--nf-btn: #864093;--nf-btn-border: #382c74;--nf-btn-text: #ffffff;--nf-panel: #f7f4fb;--nf-text: #2a2140;--nf-muted: rgba(42, 33, 64, .72);--nf-input: #efe8f8;--nf-border: rgba(56, 44, 116, .18);--nf-backdrop: rgba(20, 12, 28, .55);--nf-danger: #e83590;--nf-mark: #fdd341;--nf-mark-text: #2a2140}#notefully[data-theme=all-business]{--nf-accent: #5c6570;--nf-accent-text: #ffffff;--nf-accent-hot: #8a4a4a;--nf-btn: #5c6570;--nf-btn-border: #3a4048;--nf-btn-text: #ffffff;--nf-panel: #ffffff;--nf-text: #1f1f23;--nf-muted: rgba(31, 31, 35, .68);--nf-input: #f0f0f2;--nf-border: rgba(0, 0, 0, .14);--nf-backdrop: rgba(20, 20, 24, .4);--nf-danger: #8a4a4a;--nf-mark: #3d6ea8;--nf-mark-text: #ffffff}#notefully[data-theme=brighter-day]{--nf-accent: #5aa8dc;--nf-accent-text: #ffffff;--nf-accent-hot: #f08ab8;--nf-btn: #5aa8dc;--nf-btn-border: #3d7eae;--nf-btn-text: #ffffff;--nf-panel: #fffdf6;--nf-text: #2a2440;--nf-muted: rgba(42, 36, 64, .68);--nf-input: #ffeef5;--nf-border: rgba(90, 168, 220, .28);--nf-backdrop: rgba(60, 40, 70, .35);--nf-danger: #f08ab8;--nf-mark: #5aa8dc;--nf-mark-text: #ffffff}#notefully[data-theme=quiet-night]{--nf-accent: #c4aa5a;--nf-accent-text: #121416;--nf-accent-hot: #6e3a3a;--nf-btn: #3a4048;--nf-btn-border: #0e1012;--nf-btn-text: #d8dbe0;--nf-panel: #1c1f24;--nf-text: #d8dbe0;--nf-muted: rgba(216, 219, 224, .68);--nf-input: #262a30;--nf-border: rgba(255, 255, 255, .12);--nf-backdrop: rgba(0, 0, 0, .65);--nf-danger: #c88888;--nf-mark: #c4aa5a;--nf-mark-text: #121416}#notefully *{box-sizing:border-box}#notefully .nf-launcher{position:fixed;left:var(--nf-launcher-left);bottom:var(--nf-launcher-bottom);z-index:var(--nf-z);width:48px;height:48px;padding:0;display:grid;place-items:center;background:var(--nf-btn);color:var(--nf-btn-text);border:1px solid var(--nf-btn-border);border-radius:999px;cursor:pointer;box-shadow:0 8px 24px #00000040}#notefully .nf-launcher-icon{width:22px;height:22px;display:block}#notefully .nf-launcher[hidden],#notefully .nf-dialog[hidden],#notefully .nf-stop-video[hidden],#notefully .nf-stage[hidden],#notefully .nf-reset-crop[hidden],#notefully .nf-restore[hidden],#notefully .nf-video[hidden]{display:none!important}#notefully .nf-dialog{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--nf-z);background:var(--nf-backdrop);display:flex;align-items:center;justify-content:center;padding:24px}#notefully .nf-panel{width:min(920px,100%);max-height:calc(100vh - 48px);overflow:auto;background:var(--nf-panel);color:var(--nf-text);border:1px solid var(--nf-border);border-radius:var(--nf-radius);padding:16px;display:flex;flex-direction:column;gap:12px}#notefully .nf-stage{display:flex;flex-direction:column;gap:8px}#notefully .nf-palette{display:flex;flex-wrap:wrap;gap:8px;align-items:center}#notefully .nf-tool,#notefully .nf-reset-crop,#notefully .nf-icon-btn{background:var(--nf-input);color:var(--nf-text);border:1px solid var(--nf-border);border-radius:8px;padding:6px 10px;cursor:pointer;font:13px ui-sans-serif,system-ui,sans-serif}#notefully .nf-icon-btn{width:36px;height:36px;padding:0;display:grid;place-items:center;flex:0 0 36px}#notefully .nf-icon{width:18px;height:18px;display:block}#notefully .nf-tool[data-active=true],#notefully .nf-icon-btn[data-active=true]{border-color:var(--nf-accent);color:var(--nf-accent);box-shadow:inset 0 0 0 1px var(--nf-accent)}#notefully .nf-canvas{position:relative;width:min(100%,calc(48vh * var(--nf-shot-aspect, 16 / 9)));max-height:48vh;aspect-ratio:var(--nf-shot-aspect, auto);margin-inline:auto;background:var(--nf-canvas-bg);border-radius:8px;overflow:hidden;-webkit-user-select:none;user-select:none;touch-action:none}#notefully .nf-canvas[data-draw=true],#notefully .nf-canvas[data-draw=true] .nf-shot{cursor:crosshair}#notefully .nf-sticker{cursor:grab}#notefully .nf-sticker[data-preview=true]{cursor:crosshair}#notefully .nf-sticker.nf-arrow .nf-arrow-hit{cursor:grab}#notefully[data-grabbing=true] .nf-canvas,#notefully[data-grabbing=true] .nf-shot,#notefully[data-grabbing=true] .nf-sticker,#notefully[data-grabbing=true] .nf-sticker *{cursor:grabbing}#notefully .nf-shot{position:absolute;overflow:hidden}#notefully .nf-shot img{position:absolute;display:block;max-height:none;pointer-events:none;-webkit-user-drag:none;user-drag:none}#notefully .nf-canvas video.nf-recording-preview{display:block;width:160px;height:auto;max-height:none;object-fit:contain;pointer-events:auto}#notefully .nf-sticker,#notefully .nf-crop{position:absolute;pointer-events:auto;color:var(--nf-mark)}#notefully .nf-sticker[data-selected=true]{z-index:4}#notefully .nf-sticker[data-preview=true],#notefully .nf-sticker.nf-arrow{pointer-events:none}#notefully .nf-sticker.nf-arrow .nf-handle{pointer-events:auto}#notefully .nf-rect,#notefully .nf-circle{border:3px solid var(--nf-mark);background:transparent}#notefully .nf-circle{border-radius:50%}#notefully .nf-arrow-svg{display:block;overflow:visible;pointer-events:none}#notefully .nf-arrow-hit{fill:none;stroke:transparent;stroke-width:16;pointer-events:stroke}#notefully .nf-arrow-shaft{fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;pointer-events:none}#notefully .nf-badge{position:absolute;left:50%;top:0;transform:translate(-50%,-50%);min-width:20px;height:20px;padding:0 5px;border-radius:50%;background:var(--nf-mark);color:var(--nf-mark-text);font:700 11px/20px ui-sans-serif,system-ui,sans-serif;text-align:center;pointer-events:none;z-index:4}#notefully .nf-sticker.nf-arrow .nf-badge{top:50%}#notefully .nf-handle{position:absolute;width:10px;height:10px;background:#fff;border:2px solid var(--nf-mark);border-radius:2px;z-index:5}#notefully .nf-handle[data-dir=nw]{left:-6px;top:-6px;cursor:nwse-resize}#notefully .nf-handle[data-dir=ne]{right:-6px;top:-6px;cursor:nesw-resize}#notefully .nf-handle[data-dir=sw]{left:-6px;bottom:-6px;cursor:nesw-resize}#notefully .nf-handle[data-dir=se]{right:-6px;bottom:-6px;cursor:nwse-resize}#notefully .nf-handle[data-dir=start],#notefully .nf-handle[data-dir=end]{margin:0;cursor:grab}#notefully .nf-crop{border:2px dashed var(--nf-accent);background:color-mix(in srgb,var(--nf-accent) 14%,transparent);box-shadow:0 0 0 9999px #00000073;pointer-events:none}#notefully .nf-text{width:100%;min-height:96px;resize:vertical;background:var(--nf-input);color:var(--nf-text);border:1px solid var(--nf-border);border-radius:8px;padding:10px;font:14px/1.4 ui-sans-serif,system-ui,sans-serif}#notefully .nf-kind{display:flex;gap:8px}#notefully .nf-kind button{background:var(--nf-input);color:var(--nf-muted);border:1px solid var(--nf-border);border-radius:999px;padding:6px 12px;cursor:pointer}#notefully .nf-kind button[data-active=true]{color:var(--nf-accent-text);background:var(--nf-accent);border-color:var(--nf-accent)}#notefully .nf-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}#notefully .nf-actions button{border:1px solid var(--nf-border);border-radius:8px;padding:8px 12px;cursor:pointer;font:600 13px ui-sans-serif,system-ui,sans-serif;background:var(--nf-input);color:var(--nf-text)}#notefully .nf-actions .nf-icon-btn{padding:0}#notefully .nf-submit{margin-left:auto;background:var(--nf-btn)!important;color:var(--nf-btn-text)!important;border-color:var(--nf-btn-border)!important}#notefully .nf-submit:disabled{opacity:.55;cursor:wait}#notefully .nf-restore{background:transparent;color:var(--nf-muted);border:0;cursor:pointer;font:13px ui-sans-serif,system-ui,sans-serif;text-decoration:underline}#notefully .nf-status{color:var(--nf-muted);font:13px ui-sans-serif,system-ui,sans-serif;min-height:1.2em}#notefully .nf-stop-video{position:fixed;top:16px;left:50%;transform:translate(-50%);z-index:calc(var(--nf-z) + 1);background:var(--nf-danger);color:#fff;border:0;border-radius:999px;padding:10px 18px;font:700 14px ui-sans-serif,system-ui,sans-serif;cursor:pointer}#notefully[data-nf-hidden-launcher] .nf-launcher{display:none!important}.nf-capture-chrome{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2147483645;display:grid;place-items:center;pointer-events:none;background:#140c1c47;animation:nf-capture-fade .16s ease-out both}.nf-capture-chrome-pill{display:inline-flex;align-items:center;gap:.55em;padding:.65em 1.1em;border-radius:999px;background:#f7f4fbf0;color:#2a2140;font:650 14px ui-sans-serif,system-ui,sans-serif;letter-spacing:.01em;box-shadow:0 10px 28px #140c1c38}.nf-capture-chrome-pill:before{content:"";width:.7em;height:.7em;border-radius:50%;border:2px solid rgba(42,33,64,.22);border-top-color:#864093;animation:nf-capture-spin .7s linear infinite}@keyframes nf-capture-fade{0%{opacity:0}to{opacity:1}}@keyframes nf-capture-spin{to{transform:rotate(360deg)}}
|
package/dist/notefully.iife.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
var Notefully=(function(L){"use strict";function ce(t,e){if(t.match(/^[a-z]+:\/\//i))return t;if(t.match(/^\/\//))return window.location.protocol+t;if(t.match(/^[a-z]+:/i))return t;const r=document.implementation.createHTMLDocument(),n=r.createElement("base"),i=r.createElement("a");return r.head.appendChild(n),r.body.appendChild(i),e&&(n.href=e),i.href=t,i.href}const le=(()=>{let t=0;const e=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(t+=1,`u${e()}${t}`)})();function k(t){const e=[];for(let r=0,n=t.length;r<n;r++)e.push(t[r]);return e}let N=null;function Rt(t={}){return N||(t.includeStyleProperties?(N=t.includeStyleProperties,N):(N=k(window.getComputedStyle(document.documentElement)),N))}function Y(t,e){const n=(t.ownerDocument.defaultView||window).getComputedStyle(t).getPropertyValue(e);return n?parseFloat(n.replace("px","")):0}function ue(t){const e=Y(t,"border-left-width"),r=Y(t,"border-right-width");return t.clientWidth+e+r}function de(t){const e=Y(t,"border-top-width"),r=Y(t,"border-bottom-width");return t.clientHeight+e+r}function Lt(t,e={}){const r=e.width||ue(t),n=e.height||de(t);return{width:r,height:n}}function fe(){let t,e;try{e=process}catch{}const r=e&&e.env?e.env.devicePixelRatio:null;return r&&(t=parseInt(r,10),Number.isNaN(t)&&(t=1)),t||window.devicePixelRatio||1}const M=16384;function he(t){(t.width>M||t.height>M)&&(t.width>M&&t.height>M?t.width>t.height?(t.height*=M/t.width,t.width=M):(t.width*=M/t.height,t.height=M):t.width>M?(t.height*=M/t.width,t.width=M):(t.width*=M/t.height,t.height=M))}function G(t){return new Promise((e,r)=>{const n=new Image;n.onload=()=>{n.decode().then(()=>{requestAnimationFrame(()=>e(n))})},n.onerror=r,n.crossOrigin="anonymous",n.decoding="async",n.src=t})}async function pe(t){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(t)).then(encodeURIComponent).then(e=>`data:image/svg+xml;charset=utf-8,${e}`)}async function me(t,e,r){const n="http://www.w3.org/2000/svg",i=document.createElementNS(n,"svg"),a=document.createElementNS(n,"foreignObject");return i.setAttribute("width",`${e}`),i.setAttribute("height",`${r}`),i.setAttribute("viewBox",`0 0 ${e} ${r}`),a.setAttribute("width","100%"),a.setAttribute("height","100%"),a.setAttribute("x","0"),a.setAttribute("y","0"),a.setAttribute("externalResourcesRequired","true"),i.appendChild(a),a.appendChild(t),pe(i)}const E=(t,e)=>{if(t instanceof e)return!0;const r=Object.getPrototypeOf(t);return r===null?!1:r.constructor.name===e.name||E(r,e)};function ye(t){const e=t.getPropertyValue("content");return`${t.cssText} content: '${e.replace(/'|"/g,"")}';`}function ge(t,e){return Rt(e).map(r=>{const n=t.getPropertyValue(r),i=t.getPropertyPriority(r);return`${r}: ${n}${i?" !important":""};`}).join(" ")}function we(t,e,r,n){const i=`.${t}:${e}`,a=r.cssText?ye(r):ge(r,n);return document.createTextNode(`${i}{${a}}`)}function Pt(t,e,r,n){const i=window.getComputedStyle(t,r),a=i.getPropertyValue("content");if(a===""||a==="none")return;const o=le();try{e.className=`${e.className} ${o}`}catch{return}const s=document.createElement("style");s.appendChild(we(o,r,i,n)),e.appendChild(s)}function be(t,e,r){Pt(t,e,":before",r),Pt(t,e,":after",r)}const kt="application/font-woff",Tt="image/jpeg",ve={woff:kt,woff2:kt,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:Tt,jpeg:Tt,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function Se(t){const e=/\.([^./]*?)$/g.exec(t);return e?e[1]:""}function ot(t){const e=Se(t).toLowerCase();return ve[e]||""}function xe(t){return t.split(/,/)[1]}function st(t){return t.search(/^(data:)/)!==-1}function Ee(t,e){return`data:${e};base64,${t}`}async function At(t,e,r){const n=await fetch(t,e);if(n.status===404)throw new Error(`Resource "${n.url}" not found`);const i=await n.blob();return new Promise((a,o)=>{const s=new FileReader;s.onerror=o,s.onloadend=()=>{try{a(r({res:n,result:s.result}))}catch(l){o(l)}},s.readAsDataURL(i)})}const ct={};function Ce(t,e,r){let n=t.replace(/\?.*/,"");return r&&(n=t),/ttf|otf|eot|woff2?/i.test(n)&&(n=n.replace(/.*\//,"")),e?`[${e}]${n}`:n}async function lt(t,e,r){const n=Ce(t,e,r.includeQueryParams);if(ct[n]!=null)return ct[n];r.cacheBust&&(t+=(/\?/.test(t)?"&":"?")+new Date().getTime());let i;try{const a=await At(t,r.fetchRequestInit,({res:o,result:s})=>(e||(e=o.headers.get("Content-Type")||""),xe(s)));i=Ee(a,e)}catch(a){i=r.imagePlaceholder||"";let o=`Failed to fetch resource: ${t}`;a&&(o=typeof a=="string"?a:a.message),o&&console.warn(o)}return ct[n]=i,i}async function Me(t){const e=t.toDataURL();return e==="data:,"?t.cloneNode(!1):G(e)}async function $e(t,e){if(t.currentSrc){const a=document.createElement("canvas"),o=a.getContext("2d");a.width=t.clientWidth,a.height=t.clientHeight,o==null||o.drawImage(t,0,0,a.width,a.height);const s=a.toDataURL();return G(s)}const r=t.poster,n=ot(r),i=await lt(r,n,e);return G(i)}async function Re(t,e){var r;try{if(!((r=t==null?void 0:t.contentDocument)===null||r===void 0)&&r.body)return await J(t.contentDocument.body,e,!0)}catch{}return t.cloneNode(!1)}async function Le(t,e){return E(t,HTMLCanvasElement)?Me(t):E(t,HTMLVideoElement)?$e(t,e):E(t,HTMLIFrameElement)?Re(t,e):t.cloneNode(It(t))}const Pe=t=>t.tagName!=null&&t.tagName.toUpperCase()==="SLOT",It=t=>t.tagName!=null&&t.tagName.toUpperCase()==="SVG";async function ke(t,e,r){var n,i;if(It(e))return e;let a=[];return Pe(t)&&t.assignedNodes?a=k(t.assignedNodes()):E(t,HTMLIFrameElement)&&(!((n=t.contentDocument)===null||n===void 0)&&n.body)?a=k(t.contentDocument.body.childNodes):a=k(((i=t.shadowRoot)!==null&&i!==void 0?i:t).childNodes),a.length===0||E(t,HTMLVideoElement)||await a.reduce((o,s)=>o.then(()=>J(s,r)).then(l=>{l&&e.appendChild(l)}),Promise.resolve()),e}function Te(t,e,r){const n=e.style;if(!n)return;const i=window.getComputedStyle(t);i.cssText?(n.cssText=i.cssText,n.transformOrigin=i.transformOrigin):Rt(r).forEach(a=>{let o=i.getPropertyValue(a);a==="font-size"&&o.endsWith("px")&&(o=`${Math.floor(parseFloat(o.substring(0,o.length-2)))-.1}px`),E(t,HTMLIFrameElement)&&a==="display"&&o==="inline"&&(o="block"),a==="d"&&e.getAttribute("d")&&(o=`path(${e.getAttribute("d")})`),n.setProperty(a,o,i.getPropertyPriority(a))})}function Ae(t,e){E(t,HTMLTextAreaElement)&&(e.innerHTML=t.value),E(t,HTMLInputElement)&&e.setAttribute("value",t.value)}function Ie(t,e){if(E(t,HTMLSelectElement)){const n=Array.from(e.children).find(i=>t.value===i.getAttribute("value"));n&&n.setAttribute("selected","")}}function De(t,e,r){return E(e,Element)&&(Te(t,e,r),be(t,e,r),Ae(t,e),Ie(t,e)),e}async function Fe(t,e){const r=t.querySelectorAll?t.querySelectorAll("use"):[];if(r.length===0)return t;const n={};for(let a=0;a<r.length;a++){const s=r[a].getAttribute("xlink:href");if(s){const l=t.querySelector(s),v=document.querySelector(s);!l&&v&&!n[s]&&(n[s]=await J(v,e,!0))}}const i=Object.values(n);if(i.length){const a="http://www.w3.org/1999/xhtml",o=document.createElementNS(a,"svg");o.setAttribute("xmlns",a),o.style.position="absolute",o.style.width="0",o.style.height="0",o.style.overflow="hidden",o.style.display="none";const s=document.createElementNS(a,"defs");o.appendChild(s);for(let l=0;l<i.length;l++)s.appendChild(i[l]);t.appendChild(o)}return t}async function J(t,e,r){return!r&&e.filter&&!e.filter(t)?null:Promise.resolve(t).then(n=>Le(n,e)).then(n=>ke(t,n,e)).then(n=>De(t,n,e)).then(n=>Fe(n,e))}const Dt=/url\((['"]?)([^'"]+?)\1\)/g,Oe=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,He=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function je(t){const e=t.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${e})(['"]?\\))`,"g")}function Ue(t){const e=[];return t.replace(Dt,(r,n,i)=>(e.push(i),r)),e.filter(r=>!st(r))}async function Ve(t,e,r,n,i){try{const a=r?ce(e,r):e,o=ot(e);let s;return i||(s=await lt(a,o,n)),t.replace(je(e),`$1${s}$3`)}catch{}return t}function Be(t,{preferredFontFormat:e}){return e?t.replace(He,r=>{for(;;){const[n,,i]=Oe.exec(r)||[];if(!i)return"";if(i===e)return`src: ${n};`}}):t}function Ft(t){return t.search(Dt)!==-1}async function Ot(t,e,r){if(!Ft(t))return t;const n=Be(t,r);return Ue(n).reduce((a,o)=>a.then(s=>Ve(s,o,e,r)),Promise.resolve(n))}async function W(t,e,r){var n;const i=(n=e.style)===null||n===void 0?void 0:n.getPropertyValue(t);if(i){const a=await Ot(i,null,r);return e.style.setProperty(t,a,e.style.getPropertyPriority(t)),!0}return!1}async function _e(t,e){await W("background",t,e)||await W("background-image",t,e),await W("mask",t,e)||await W("-webkit-mask",t,e)||await W("mask-image",t,e)||await W("-webkit-mask-image",t,e)}async function Ne(t,e){const r=E(t,HTMLImageElement);if(!(r&&!st(t.src))&&!(E(t,SVGImageElement)&&!st(t.href.baseVal)))return;const n=r?t.src:t.href.baseVal,i=await lt(n,ot(n),e);await new Promise((a,o)=>{t.onload=a,t.onerror=e.onImageErrorHandler?(...l)=>{try{a(e.onImageErrorHandler(...l))}catch(v){o(v)}}:o;const s=t;s.decode&&(s.decode=a),s.loading==="lazy"&&(s.loading="eager"),r?(t.srcset="",t.src=i):t.href.baseVal=i})}async function We(t,e){const n=k(t.childNodes).map(i=>Ht(i,e));await Promise.all(n).then(()=>t)}async function Ht(t,e){E(t,Element)&&(await _e(t,e),await Ne(t,e),await We(t,e))}function qe(t,e){const{style:r}=t;e.backgroundColor&&(r.backgroundColor=e.backgroundColor),e.width&&(r.width=`${e.width}px`),e.height&&(r.height=`${e.height}px`);const n=e.style;return n!=null&&Object.keys(n).forEach(i=>{r[i]=n[i]}),t}const jt={};async function Ut(t){let e=jt[t];if(e!=null)return e;const n=await(await fetch(t)).text();return e={url:t,cssText:n},jt[t]=e,e}async function Vt(t,e){let r=t.cssText;const n=/url\(["']?([^"')]+)["']?\)/g,a=(r.match(/url\([^)]+\)/g)||[]).map(async o=>{let s=o.replace(n,"$1");return s.startsWith("https://")||(s=new URL(s,t.url).href),At(s,e.fetchRequestInit,({result:l})=>(r=r.replace(o,`url(${l})`),[o,l]))});return Promise.all(a).then(()=>r)}function Bt(t){if(t==null)return[];const e=[],r=/(\/\*[\s\S]*?\*\/)/gi;let n=t.replace(r,"");const i=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){const l=i.exec(n);if(l===null)break;e.push(l[0])}n=n.replace(i,"");const a=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,o="((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})",s=new RegExp(o,"gi");for(;;){let l=a.exec(n);if(l===null){if(l=s.exec(n),l===null)break;a.lastIndex=s.lastIndex}else s.lastIndex=a.lastIndex;e.push(l[0])}return e}async function ze(t,e){const r=[],n=[];return t.forEach(i=>{if("cssRules"in i)try{k(i.cssRules||[]).forEach((a,o)=>{if(a.type===CSSRule.IMPORT_RULE){let s=o+1;const l=a.href,v=Ut(l).then(y=>Vt(y,e)).then(y=>Bt(y).forEach(p=>{try{i.insertRule(p,p.startsWith("@import")?s+=1:i.cssRules.length)}catch(b){console.error("Error inserting rule from remote css",{rule:p,error:b})}})).catch(y=>{console.error("Error loading remote css",y.toString())});n.push(v)}})}catch(a){const o=t.find(s=>s.href==null)||document.styleSheets[0];i.href!=null&&n.push(Ut(i.href).then(s=>Vt(s,e)).then(s=>Bt(s).forEach(l=>{o.insertRule(l,o.cssRules.length)})).catch(s=>{console.error("Error loading remote stylesheet",s)})),console.error("Error inlining remote css file",a)}}),Promise.all(n).then(()=>(t.forEach(i=>{if("cssRules"in i)try{k(i.cssRules||[]).forEach(a=>{r.push(a)})}catch(a){console.error(`Error while reading CSS rules from ${i.href}`,a)}}),r))}function Ke(t){return t.filter(e=>e.type===CSSRule.FONT_FACE_RULE).filter(e=>Ft(e.style.getPropertyValue("src")))}async function Xe(t,e){if(t.ownerDocument==null)throw new Error("Provided element is not within a Document");const r=k(t.ownerDocument.styleSheets),n=await ze(r,e);return Ke(n)}function _t(t){return t.trim().replace(/["']/g,"")}function Ye(t){const e=new Set;function r(n){(n.style.fontFamily||getComputedStyle(n).fontFamily).split(",").forEach(a=>{e.add(_t(a))}),Array.from(n.children).forEach(a=>{a instanceof HTMLElement&&r(a)})}return r(t),e}async function Ge(t,e){const r=await Xe(t,e),n=Ye(t);return(await Promise.all(r.filter(a=>n.has(_t(a.style.fontFamily))).map(a=>{const o=a.parentStyleSheet?a.parentStyleSheet.href:null;return Ot(a.cssText,o,e)}))).join(`
|
|
2
|
-
`)}async function
|
|
1
|
+
var Notefully=(function(L){"use strict";function de(t,e){if(t.match(/^[a-z]+:\/\//i))return t;if(t.match(/^\/\//))return window.location.protocol+t;if(t.match(/^[a-z]+:/i))return t;const r=document.implementation.createHTMLDocument(),n=r.createElement("base"),i=r.createElement("a");return r.head.appendChild(n),r.body.appendChild(i),e&&(n.href=e),i.href=t,i.href}const fe=(()=>{let t=0;const e=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(t+=1,`u${e()}${t}`)})();function T(t){const e=[];for(let r=0,n=t.length;r<n;r++)e.push(t[r]);return e}let N=null;function Pt(t={}){return N||(t.includeStyleProperties?(N=t.includeStyleProperties,N):(N=T(window.getComputedStyle(document.documentElement)),N))}function Y(t,e){const n=(t.ownerDocument.defaultView||window).getComputedStyle(t).getPropertyValue(e);return n?parseFloat(n.replace("px","")):0}function he(t){const e=Y(t,"border-left-width"),r=Y(t,"border-right-width");return t.clientWidth+e+r}function me(t){const e=Y(t,"border-top-width"),r=Y(t,"border-bottom-width");return t.clientHeight+e+r}function Tt(t,e={}){const r=e.width||he(t),n=e.height||me(t);return{width:r,height:n}}function pe(){let t,e;try{e=process}catch{}const r=e&&e.env?e.env.devicePixelRatio:null;return r&&(t=parseInt(r,10),Number.isNaN(t)&&(t=1)),t||window.devicePixelRatio||1}const M=16384;function ye(t){(t.width>M||t.height>M)&&(t.width>M&&t.height>M?t.width>t.height?(t.height*=M/t.width,t.width=M):(t.width*=M/t.height,t.height=M):t.width>M?(t.height*=M/t.width,t.width=M):(t.width*=M/t.height,t.height=M))}function G(t){return new Promise((e,r)=>{const n=new Image;n.onload=()=>{n.decode().then(()=>{requestAnimationFrame(()=>e(n))})},n.onerror=r,n.crossOrigin="anonymous",n.decoding="async",n.src=t})}async function ge(t){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(t)).then(encodeURIComponent).then(e=>`data:image/svg+xml;charset=utf-8,${e}`)}async function we(t,e,r){const n="http://www.w3.org/2000/svg",i=document.createElementNS(n,"svg"),a=document.createElementNS(n,"foreignObject");return i.setAttribute("width",`${e}`),i.setAttribute("height",`${r}`),i.setAttribute("viewBox",`0 0 ${e} ${r}`),a.setAttribute("width","100%"),a.setAttribute("height","100%"),a.setAttribute("x","0"),a.setAttribute("y","0"),a.setAttribute("externalResourcesRequired","true"),i.appendChild(a),a.appendChild(t),ge(i)}const C=(t,e)=>{if(t instanceof e)return!0;const r=Object.getPrototypeOf(t);return r===null?!1:r.constructor.name===e.name||C(r,e)};function be(t){const e=t.getPropertyValue("content");return`${t.cssText} content: '${e.replace(/'|"/g,"")}';`}function ve(t,e){return Pt(e).map(r=>{const n=t.getPropertyValue(r),i=t.getPropertyPriority(r);return`${r}: ${n}${i?" !important":""};`}).join(" ")}function Se(t,e,r,n){const i=`.${t}:${e}`,a=r.cssText?be(r):ve(r,n);return document.createTextNode(`${i}{${a}}`)}function kt(t,e,r,n){const i=window.getComputedStyle(t,r),a=i.getPropertyValue("content");if(a===""||a==="none")return;const o=fe();try{e.className=`${e.className} ${o}`}catch{return}const s=document.createElement("style");s.appendChild(Se(o,r,i,n)),e.appendChild(s)}function xe(t,e,r){kt(t,e,":before",r),kt(t,e,":after",r)}const At="application/font-woff",It="image/jpeg",Ee={woff:At,woff2:At,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:It,jpeg:It,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function Ce(t){const e=/\.([^./]*?)$/g.exec(t);return e?e[1]:""}function st(t){const e=Ce(t).toLowerCase();return Ee[e]||""}function Me(t){return t.split(/,/)[1]}function ct(t){return t.search(/^(data:)/)!==-1}function $e(t,e){return`data:${e};base64,${t}`}async function Dt(t,e,r){const n=await fetch(t,e);if(n.status===404)throw new Error(`Resource "${n.url}" not found`);const i=await n.blob();return new Promise((a,o)=>{const s=new FileReader;s.onerror=o,s.onloadend=()=>{try{a(r({res:n,result:s.result}))}catch(l){o(l)}},s.readAsDataURL(i)})}const lt={};function Re(t,e,r){let n=t.replace(/\?.*/,"");return r&&(n=t),/ttf|otf|eot|woff2?/i.test(n)&&(n=n.replace(/.*\//,"")),e?`[${e}]${n}`:n}async function ut(t,e,r){const n=Re(t,e,r.includeQueryParams);if(lt[n]!=null)return lt[n];r.cacheBust&&(t+=(/\?/.test(t)?"&":"?")+new Date().getTime());let i;try{const a=await Dt(t,r.fetchRequestInit,({res:o,result:s})=>(e||(e=o.headers.get("Content-Type")||""),Me(s)));i=$e(a,e)}catch(a){i=r.imagePlaceholder||"";let o=`Failed to fetch resource: ${t}`;a&&(o=typeof a=="string"?a:a.message),o&&console.warn(o)}return lt[n]=i,i}async function Le(t){const e=t.toDataURL();return e==="data:,"?t.cloneNode(!1):G(e)}async function Pe(t,e){if(t.currentSrc){const a=document.createElement("canvas"),o=a.getContext("2d");a.width=t.clientWidth,a.height=t.clientHeight,o==null||o.drawImage(t,0,0,a.width,a.height);const s=a.toDataURL();return G(s)}const r=t.poster,n=st(r),i=await ut(r,n,e);return G(i)}async function Te(t,e){var r;try{if(!((r=t==null?void 0:t.contentDocument)===null||r===void 0)&&r.body)return await J(t.contentDocument.body,e,!0)}catch{}return t.cloneNode(!1)}async function ke(t,e){return C(t,HTMLCanvasElement)?Le(t):C(t,HTMLVideoElement)?Pe(t,e):C(t,HTMLIFrameElement)?Te(t,e):t.cloneNode(Ot(t))}const Ae=t=>t.tagName!=null&&t.tagName.toUpperCase()==="SLOT",Ot=t=>t.tagName!=null&&t.tagName.toUpperCase()==="SVG";async function Ie(t,e,r){var n,i;if(Ot(e))return e;let a=[];return Ae(t)&&t.assignedNodes?a=T(t.assignedNodes()):C(t,HTMLIFrameElement)&&(!((n=t.contentDocument)===null||n===void 0)&&n.body)?a=T(t.contentDocument.body.childNodes):a=T(((i=t.shadowRoot)!==null&&i!==void 0?i:t).childNodes),a.length===0||C(t,HTMLVideoElement)||await a.reduce((o,s)=>o.then(()=>J(s,r)).then(l=>{l&&e.appendChild(l)}),Promise.resolve()),e}function De(t,e,r){const n=e.style;if(!n)return;const i=window.getComputedStyle(t);i.cssText?(n.cssText=i.cssText,n.transformOrigin=i.transformOrigin):Pt(r).forEach(a=>{let o=i.getPropertyValue(a);a==="font-size"&&o.endsWith("px")&&(o=`${Math.floor(parseFloat(o.substring(0,o.length-2)))-.1}px`),C(t,HTMLIFrameElement)&&a==="display"&&o==="inline"&&(o="block"),a==="d"&&e.getAttribute("d")&&(o=`path(${e.getAttribute("d")})`),n.setProperty(a,o,i.getPropertyPriority(a))})}function Oe(t,e){C(t,HTMLTextAreaElement)&&(e.innerHTML=t.value),C(t,HTMLInputElement)&&e.setAttribute("value",t.value)}function Fe(t,e){if(C(t,HTMLSelectElement)){const n=Array.from(e.children).find(i=>t.value===i.getAttribute("value"));n&&n.setAttribute("selected","")}}function He(t,e,r){return C(e,Element)&&(De(t,e,r),xe(t,e,r),Oe(t,e),Fe(t,e)),e}async function je(t,e){const r=t.querySelectorAll?t.querySelectorAll("use"):[];if(r.length===0)return t;const n={};for(let a=0;a<r.length;a++){const s=r[a].getAttribute("xlink:href");if(s){const l=t.querySelector(s),v=document.querySelector(s);!l&&v&&!n[s]&&(n[s]=await J(v,e,!0))}}const i=Object.values(n);if(i.length){const a="http://www.w3.org/1999/xhtml",o=document.createElementNS(a,"svg");o.setAttribute("xmlns",a),o.style.position="absolute",o.style.width="0",o.style.height="0",o.style.overflow="hidden",o.style.display="none";const s=document.createElementNS(a,"defs");o.appendChild(s);for(let l=0;l<i.length;l++)s.appendChild(i[l]);t.appendChild(o)}return t}async function J(t,e,r){return!r&&e.filter&&!e.filter(t)?null:Promise.resolve(t).then(n=>ke(n,e)).then(n=>Ie(t,n,e)).then(n=>He(t,n,e)).then(n=>je(n,e))}const Ft=/url\((['"]?)([^'"]+?)\1\)/g,Ue=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,Be=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function Ve(t){const e=t.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${e})(['"]?\\))`,"g")}function _e(t){const e=[];return t.replace(Ft,(r,n,i)=>(e.push(i),r)),e.filter(r=>!ct(r))}async function Ne(t,e,r,n,i){try{const a=r?de(e,r):e,o=st(e);let s;return i||(s=await ut(a,o,n)),t.replace(Ve(e),`$1${s}$3`)}catch{}return t}function We(t,{preferredFontFormat:e}){return e?t.replace(Be,r=>{for(;;){const[n,,i]=Ue.exec(r)||[];if(!i)return"";if(i===e)return`src: ${n};`}}):t}function Ht(t){return t.search(Ft)!==-1}async function jt(t,e,r){if(!Ht(t))return t;const n=We(t,r);return _e(n).reduce((a,o)=>a.then(s=>Ne(s,o,e,r)),Promise.resolve(n))}async function W(t,e,r){var n;const i=(n=e.style)===null||n===void 0?void 0:n.getPropertyValue(t);if(i){const a=await jt(i,null,r);return e.style.setProperty(t,a,e.style.getPropertyPriority(t)),!0}return!1}async function qe(t,e){await W("background",t,e)||await W("background-image",t,e),await W("mask",t,e)||await W("-webkit-mask",t,e)||await W("mask-image",t,e)||await W("-webkit-mask-image",t,e)}async function ze(t,e){const r=C(t,HTMLImageElement);if(!(r&&!ct(t.src))&&!(C(t,SVGImageElement)&&!ct(t.href.baseVal)))return;const n=r?t.src:t.href.baseVal,i=await ut(n,st(n),e);await new Promise((a,o)=>{t.onload=a,t.onerror=e.onImageErrorHandler?(...l)=>{try{a(e.onImageErrorHandler(...l))}catch(v){o(v)}}:o;const s=t;s.decode&&(s.decode=a),s.loading==="lazy"&&(s.loading="eager"),r?(t.srcset="",t.src=i):t.href.baseVal=i})}async function Ke(t,e){const n=T(t.childNodes).map(i=>Ut(i,e));await Promise.all(n).then(()=>t)}async function Ut(t,e){C(t,Element)&&(await qe(t,e),await ze(t,e),await Ke(t,e))}function Xe(t,e){const{style:r}=t;e.backgroundColor&&(r.backgroundColor=e.backgroundColor),e.width&&(r.width=`${e.width}px`),e.height&&(r.height=`${e.height}px`);const n=e.style;return n!=null&&Object.keys(n).forEach(i=>{r[i]=n[i]}),t}const Bt={};async function Vt(t){let e=Bt[t];if(e!=null)return e;const n=await(await fetch(t)).text();return e={url:t,cssText:n},Bt[t]=e,e}async function _t(t,e){let r=t.cssText;const n=/url\(["']?([^"')]+)["']?\)/g,a=(r.match(/url\([^)]+\)/g)||[]).map(async o=>{let s=o.replace(n,"$1");return s.startsWith("https://")||(s=new URL(s,t.url).href),Dt(s,e.fetchRequestInit,({result:l})=>(r=r.replace(o,`url(${l})`),[o,l]))});return Promise.all(a).then(()=>r)}function Nt(t){if(t==null)return[];const e=[],r=/(\/\*[\s\S]*?\*\/)/gi;let n=t.replace(r,"");const i=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){const l=i.exec(n);if(l===null)break;e.push(l[0])}n=n.replace(i,"");const a=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,o="((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})",s=new RegExp(o,"gi");for(;;){let l=a.exec(n);if(l===null){if(l=s.exec(n),l===null)break;a.lastIndex=s.lastIndex}else s.lastIndex=a.lastIndex;e.push(l[0])}return e}async function Ye(t,e){const r=[],n=[];return t.forEach(i=>{if("cssRules"in i)try{T(i.cssRules||[]).forEach((a,o)=>{if(a.type===CSSRule.IMPORT_RULE){let s=o+1;const l=a.href,v=Vt(l).then(y=>_t(y,e)).then(y=>Nt(y).forEach(m=>{try{i.insertRule(m,m.startsWith("@import")?s+=1:i.cssRules.length)}catch(b){console.error("Error inserting rule from remote css",{rule:m,error:b})}})).catch(y=>{console.error("Error loading remote css",y.toString())});n.push(v)}})}catch(a){const o=t.find(s=>s.href==null)||document.styleSheets[0];i.href!=null&&n.push(Vt(i.href).then(s=>_t(s,e)).then(s=>Nt(s).forEach(l=>{o.insertRule(l,o.cssRules.length)})).catch(s=>{console.error("Error loading remote stylesheet",s)})),console.error("Error inlining remote css file",a)}}),Promise.all(n).then(()=>(t.forEach(i=>{if("cssRules"in i)try{T(i.cssRules||[]).forEach(a=>{r.push(a)})}catch(a){console.error(`Error while reading CSS rules from ${i.href}`,a)}}),r))}function Ge(t){return t.filter(e=>e.type===CSSRule.FONT_FACE_RULE).filter(e=>Ht(e.style.getPropertyValue("src")))}async function Je(t,e){if(t.ownerDocument==null)throw new Error("Provided element is not within a Document");const r=T(t.ownerDocument.styleSheets),n=await Ye(r,e);return Ge(n)}function Wt(t){return t.trim().replace(/["']/g,"")}function Ze(t){const e=new Set;function r(n){(n.style.fontFamily||getComputedStyle(n).fontFamily).split(",").forEach(a=>{e.add(Wt(a))}),Array.from(n.children).forEach(a=>{a instanceof HTMLElement&&r(a)})}return r(t),e}async function Qe(t,e){const r=await Je(t,e),n=Ze(t);return(await Promise.all(r.filter(a=>n.has(Wt(a.style.fontFamily))).map(a=>{const o=a.parentStyleSheet?a.parentStyleSheet.href:null;return jt(a.cssText,o,e)}))).join(`
|
|
2
|
+
`)}async function tn(t,e){const r=e.fontEmbedCSS!=null?e.fontEmbedCSS:e.skipFonts?null:await Qe(t,e);if(r){const n=document.createElement("style"),i=document.createTextNode(r);n.appendChild(i),t.firstChild?t.insertBefore(n,t.firstChild):t.appendChild(n)}}async function en(t,e={}){const{width:r,height:n}=Tt(t,e),i=await J(t,e,!0);return await tn(i,e),await Ut(i,e),Xe(i,e),await we(i,r,n)}async function nn(t,e={}){const{width:r,height:n}=Tt(t,e),i=await en(t,e),a=await G(i),o=document.createElement("canvas"),s=o.getContext("2d"),l=e.pixelRatio||pe(),v=e.canvasWidth||r,y=e.canvasHeight||n;return o.width=v*l,o.height=y*l,e.skipAutoScale||ye(o),o.style.width=`${v}`,o.style.height=`${y}`,e.backgroundColor&&(s.fillStyle=e.backgroundColor,s.fillRect(0,0,o.width,o.height)),s.drawImage(a,0,0,o.width,o.height),o}async function rn(t,e={}){return(await nn(t,e)).toDataURL()}const Z="data-nf-capture-chrome";function an(t){return t instanceof Element&&(t.hasAttribute(Z)||t.hasAttribute("data-nf-mask-cover")||t.id==="notefully")}function on(){const t=[];return document.querySelectorAll('input[type="password"], [data-notefully-mask]').forEach(r=>{const n=r.getBoundingClientRect(),i=document.createElement("div");i.setAttribute("data-nf-mask-cover","1"),i.style.cssText=["position:fixed",`left:${n.left}px`,`top:${n.top}px`,`width:${Math.max(n.width,4)}px`,`height:${Math.max(n.height,4)}px`,"background:#111","z-index:2147483646","pointer-events:none"].join(";"),document.body.appendChild(i),t.push(i)}),()=>t.forEach(r=>r.remove())}function sn(){const t=document.querySelector(`[${Z}]`);if(t)return t;const e=document.createElement("div");return e.setAttribute(Z,"1"),e.className="nf-capture-chrome",e.setAttribute("role","status"),e.setAttribute("aria-live","polite"),e.innerHTML='<span class="nf-capture-chrome-pill">Capturing…</span>',document.body.appendChild(e),e}function cn(){document.querySelectorAll(`[${Z}]`).forEach(t=>t.remove())}async function ln(){const t=document.getElementById("notefully"),e=t?t.style.display:"",r=sn();t&&(t.style.display="none");const n=on();await new Promise(i=>requestAnimationFrame(()=>requestAnimationFrame(i)));try{return await rn(document.body,{cacheBust:!0,pixelRatio:Math.min(window.devicePixelRatio||1,2),filter:i=>!an(i)})}finally{n(),r.remove(),cn(),t&&(t.style.display=e)}}function un(t={}){return{url:location.href,title:document.title,userAgent:navigator.userAgent,language:navigator.language,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,viewport:{width:window.innerWidth,height:window.innerHeight,dpr:window.devicePixelRatio||1},user:{userId:t.userId||null,email:t.email||null,displayName:t.displayName||null}}}const qt=new Set(["userId","email","displayName"]),zt={id:"userId",username:"displayName",name:"displayName"},Kt=new Set(["endpoint","projectKey","version","name","targets","hideLauncher","theme","video"]),Xt={slug:"Use init({ name }) for a per-app report prefix (same idea as package.json name). slug is not a widget option.",projectSlug:"Use init({ name }) for a per-app report prefix. projectSlug is not a widget option.",project:"Pass projectKey (nfk_…) from Showfully Notefully settings — there is no project option on the widget.",username:"Pass people via Notefully.identify({ displayName }) (username is an identify alias), not init().",userId:"Pass people via Notefully.identify({ userId, email, displayName }), not init().",email:"Pass people via Notefully.identify({ userId, email, displayName }), not init().",displayName:"Pass people via Notefully.identify({ userId, email, displayName }), not init()."};function dn(t={},e={}){const r=e.warn||Yt,n=t&&typeof t=="object"?t:{},i={},a=[];for(const o of qt)Object.prototype.hasOwnProperty.call(n,o)&&(i[o]=n[o]);for(const[o,s]of Object.entries(zt))Object.prototype.hasOwnProperty.call(n,o)&&(Object.prototype.hasOwnProperty.call(i,s)||(i[s]=n[o]));for(const o of Object.keys(n))qt.has(o)||Object.prototype.hasOwnProperty.call(zt,o)||a.push(o);if(a.length){const o=a.some(s=>s==="name"||s==="slug"||s==="projectSlug")?" Pass the package/report name via Notefully.init({ name }), not identify().":"";r(`Notefully.identify: ignoring unknown key(s): ${a.join(", ")}. Supported: userId, email, displayName (aliases: id → userId; username/name → displayName).`+o)}return i}function fn(t={},e={}){const r=e.warn||Yt,n=t&&typeof t=="object"?t:{},i=Object.keys(n).filter(a=>!Kt.has(a));if(i.length)for(const a of i){if(Xt[a]){r(`Notefully.init: ignoring "${a}". ${Xt[a]}`);continue}r(`Notefully.init: ignoring unknown key "${a}". Supported: ${[...Kt].join(", ")}.`)}}function Yt(t){typeof console<"u"&&typeof console.warn=="function"&&console.warn(t)}const hn=80;function mn(){const t=[],e={};let r=!1;const n=(a,o)=>{let s="";try{s=o.map(l=>l instanceof Error?l.stack||l.message:typeof l=="string"?l:JSON.stringify(l)).join(" ")}catch{s=String(o[0])}t.push({level:a,text:s.slice(0,2e3),at:Date.now()}),t.length>hn&&t.shift()};return{hook:()=>{r||typeof window>"u"||(r=!0,["log","info","warn","error"].forEach(a=>{e[a]=console[a].bind(console),console[a]=(...o)=>{n(a,o),e[a](...o)}}),window.addEventListener("error",a=>{n("error",[a.message||"window.error"])}),window.addEventListener("unhandledrejection",a=>{n("error",[a.reason||"unhandledrejection"])}))},snapshot(){return t.slice()}}}function pn(t){const e=window.SpeechRecognition||window.webkitSpeechRecognition;let r=null,n=!1;const i=()=>{if(n=!1,r)try{r.stop()}catch{}};return{start:()=>{if(!e)throw new Error("Speech recognition is not supported in this browser.");return n?(i(),!1):(r=new e,r.continuous=!0,r.interimResults=!0,r.lang=navigator.language||"en-US",r.onresult=o=>{let s="";for(let l=o.resultIndex;l<o.results.length;l+=1)o.results[l].isFinal&&(s+=o.results[l][0].transcript);s&&t(s)},r.onerror=()=>{n=!1},r.onend=()=>{n=!1},r.start(),n=!0,!0)},stop:i,isSupported:()=>!!e,isActive:()=>n}}const yn=60*1e3;function gn({onStart:t,onStop:e,onError:r}){let n=null,i=null,a=[],o=null;const s=()=>{if(o&&(clearTimeout(o),o=null),i&&i.state!=="inactive")try{i.stop()}catch{}n&&(n.getTracks().forEach(y=>y.stop()),n=null)},l=()=>{if(i&&i.state==="recording"){i.stop();return}s(),e(null)};return{start:async()=>{var y,m;if(!((y=navigator.mediaDevices)!=null&&y.getDisplayMedia))throw new Error("Screen recording is not supported in this browser.");n=await navigator.mediaDevices.getDisplayMedia({video:{displaySurface:"browser"},audio:!1,preferCurrentTab:!0,selfBrowserSurface:"include"}),a=[],i=new MediaRecorder(n,{mimeType:MediaRecorder.isTypeSupported("video/webm;codecs=vp9")?"video/webm;codecs=vp9":"video/webm"}),i.ondataavailable=b=>{b.data&&b.data.size&&a.push(b.data)},i.onstop=()=>{const b=a.length?new Blob(a,{type:i.mimeType||"video/webm"}):null;s(),e(b)},(m=n.getVideoTracks()[0])==null||m.addEventListener("ended",()=>l()),i.start(),o=setTimeout(l,yn)},stop:l}}function wn(){const t=new Set;return{alloc(){let e=1;for(;t.has(e);)e+=1;return t.add(e),e},free(e){const r=Number(e);Number.isInteger(r)&&r>0&&t.delete(r)},peekUsed(){return[...t].sort((e,r)=>e-r)}}}const dt={x:0,y:0,w:1,h:1};function Gt(){const t=wn();let e=[],r={...dt},n=1;return{list:()=>e.filter(a=>vn(a,r)),all:()=>e.slice(),crop:()=>({...r}),setCrop(a){return r=bn(a),r},resetCrop(){return r={...dt},r},isCropped(){return r.x>1e-6||r.y>1e-6||r.w<.999999||r.h<.999999},add(a,o){const s={id:`s${n++}`,type:a,number:t.alloc(),x:.2,y:.2,w:a==="arrow"?.2:.22,h:a==="arrow"?.05:.16,x2:.4,y2:.28,...o};return e.push(s),s},update(a,o){const s=e.find(l=>l.id===a);return s?(Object.assign(s,o),s):null},remove(a){const o=e.findIndex(l=>l.id===a);if(o<0)return null;const[s]=e.splice(o,1);return t.free(s.number),s},reset(){for(e=[],r={...dt},n=1;t.peekUsed().length;)t.free(t.peekUsed()[0])}}}function bn(t){const e=Math.min(Math.max(t.x,0),.95),r=Math.min(Math.max(t.y,0),.95),n=Math.min(Math.max(t.w,.05),1-e),i=Math.min(Math.max(t.h,.05),1-r);return{x:e,y:r,w:n,h:i}}function vn(t,e){const r=t.type==="arrow"?(t.x+(t.x2??t.x))/2:t.x+(t.w||0)/2,n=t.type==="arrow"?(t.y+(t.y2??t.y))/2:t.y+(t.h||0)/2;return r>=e.x&&n>=e.y&&r<=e.x+e.w&&n<=e.y+e.h}function Sn(t,e,r,n={}){const i=n.mark||"#fdd341",a=n.markText||"#2a2140";return new Promise((o,s)=>{const l=new Image;l.onload=()=>{const v=Math.round(e.x*l.width),y=Math.round(e.y*l.height),m=Math.max(1,Math.round(e.w*l.width)),b=Math.max(1,Math.round(e.h*l.height)),O=document.createElement("canvas");O.width=m,O.height=b;const h=O.getContext("2d");h.drawImage(l,v,y,m,b,0,0,m,b),h.lineWidth=Math.max(3,Math.round(m/400)),h.strokeStyle=i,h.fillStyle=i,h.font=`700 ${Math.max(14,Math.round(m/40))}px sans-serif`,r.forEach(p=>{const F=ft(p.x,e,m),H=ht(p.y,e,b),j=p.w/e.w*m,V=p.h/e.h*b;if(p.type==="rect")h.strokeRect(F,H,j,V);else if(p.type==="circle")h.beginPath(),h.ellipse(F+j/2,H+V/2,j/2,V/2,0,0,Math.PI*2),h.stroke();else if(p.type==="arrow"){const Nn=ft(p.x2??p.x+p.w,e,m),Wn=ht(p.y2??p.y,e,b);En(h,F,H,Nn,Wn)}const _=xn(p,e,m,b,F,H,j),U=String(p.number);h.beginPath(),h.arc(_.x,_.y,11,0,Math.PI*2),h.fill(),h.fillStyle=a,h.textAlign="center",h.textBaseline="middle",h.fillText(U,_.x,_.y),h.fillStyle=i}),O.toBlob(p=>{if(!p){s(new Error("Could not encode screenshot"));return}o(p)},"image/png")},l.onerror=()=>s(new Error("Could not load screenshot")),l.src=t})}function ft(t,e,r){return(t-e.x)/e.w*r}function ht(t,e,r){return(t-e.y)/e.h*r}function xn(t,e,r,n,i,a,o){if(t.type==="arrow"){const s=ft(t.x2??t.x+t.w,e,r),l=ht(t.y2??t.y,e,n);return{x:(i+s)/2,y:(a+l)/2}}return{x:i+o/2,y:a}}function En(t,e,r,n,i){const a=Math.atan2(i-r,n-e),o=14,s=2,l=n-Math.cos(a)*s,v=i-Math.sin(a)*s;t.beginPath(),t.moveTo(e,r),t.lineTo(l,v),t.stroke(),t.beginPath(),t.moveTo(n,i),t.lineTo(n-o*Math.cos(a-.4),i-o*Math.sin(a-.4)),t.lineTo(n-o*Math.cos(a+.4),i-o*Math.sin(a+.4)),t.closePath(),t.fill()}const Cn=["bug","idea","other"],Mn=["maker","all-business","brighter-day","quiet-night"],Jt="maker",$n=new Set(["crop","arrow","rect","circle"]),mt=.02,Zt=.05,Rn=`
|
|
3
3
|
<svg class="nf-launcher-icon" viewBox="0 0 24 24" aria-hidden="true">
|
|
4
4
|
<path fill="currentColor" d="M5.2 2.8h9.1A2.7 2.7 0 0 1 17 5.5v8.2c0 .4-.3.7-.7.7h-.1a.7.7 0 0 1-.7-.7V5.5c0-.7-.6-1.3-1.3-1.3H5.2c-.7 0-1.3.6-1.3 1.3v12.2c0 .7.6 1.3 1.3 1.3h6.4a.7.7 0 0 1 0 1.4H5.2A2.7 2.7 0 0 1 2.5 17.7V5.5A2.7 2.7 0 0 1 5.2 2.8zm1.6 4.2a.7.7 0 0 0 0 1.4h6.2a.7.7 0 0 0 0-1.4H6.8zm0 3.2a.7.7 0 0 0 0 1.4h6.2a.7.7 0 0 0 0-1.4H6.8zm0 3.2a.7.7 0 0 0 0 1.4h3.6a.7.7 0 0 0 0-1.4H6.8z"/>
|
|
5
5
|
<path fill="currentColor" d="M14.7 13.05 20.2 7.55a1.55 1.55 0 0 1 2.2 2.2l-5.5 5.5-.45 1.9a.6.6 0 0 1-.72.45l-1.9-.45.87-1.9z"/>
|
|
6
6
|
</svg>
|
|
7
|
-
`;function
|
|
8
|
-
<button class="nf-launcher" type="button" title="Leave a note…" aria-label="Leave a note…">${
|
|
7
|
+
`;function k(t){return`<svg class="nf-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${t}</svg>`}const A={crop:k('<path d="M6 3v5H1M18 21v-5h5M8 5h8a2 2 0 0 1 2 2v8M16 19H8a2 2 0 0 1-2-2V8"/>'),resetCrop:k('<path d="M3 12a9 9 0 1 0 3-6.7L3 8"/><path d="M3 3v5h5"/>'),arrow:k('<path d="M5 19 19 5"/><path d="M9 5h10v10"/>'),rect:k('<rect x="4" y="6" width="16" height="12" rx="1.5"/>'),circle:k('<circle cx="12" cy="12" r="8"/>'),discard:k('<path d="M4 7h16"/><path d="M9 7V5h6v2"/><path d="M6 7l1 13h10l1-13"/>'),audio:k('<rect x="9" y="3" width="6" height="11" rx="3"/><path d="M5 11a7 7 0 0 0 14 0"/><path d="M12 18v3"/>'),video:k('<rect x="3" y="7" width="13" height="10" rx="2"/><path d="M16 10.5 21 8v8l-5-2.5z"/>')},Qt=mn();Qt.hook();let d={endpoint:"",projectKey:"",version:"0.0.0",name:"",targets:null,hideLauncher:!1,theme:Jt,video:!1},pt={},u=null,c={},f=Gt(),x="",q="",P=null,Q="bug",I=null,R=null,g=null,w=null,tt=null,B=null,z=null,D={w:0,h:0},yt=!1;function E(t){return u.querySelector(t)}function te(t){const e=String(t||"").trim().toLowerCase().replace(/\s+/g,"-");return Mn.includes(e)?e:Jt}function ee(t,e){return u&&getComputedStyle(u).getPropertyValue(t).trim()||e}function S(t,e=!1){c.status&&(c.status.textContent=t||"",tt&&(clearTimeout(tt),tt=null),t&&!e&&(tt=setTimeout(()=>{c.status.textContent=""},4e3)))}function gt(){return u&&document.body.contains(u)||(u=document.createElement("div"),u.id="notefully",u.innerHTML=`
|
|
8
|
+
<button class="nf-launcher" type="button" title="Leave a note…" aria-label="Leave a note…">${Rn}</button>
|
|
9
9
|
<div class="nf-dialog" hidden>
|
|
10
10
|
<div class="nf-panel">
|
|
11
11
|
<div class="nf-stage">
|
|
@@ -35,12 +35,12 @@ var Notefully=(function(L){"use strict";function ce(t,e){if(t.match(/^[a-z]+:\/\
|
|
|
35
35
|
</div>
|
|
36
36
|
</div>
|
|
37
37
|
<button class="nf-stop-video" type="button" hidden>Stop</button>
|
|
38
|
-
`,document.body.appendChild(u),c={launcher:
|
|
38
|
+
`,document.body.appendChild(u),c={launcher:E(".nf-launcher"),dialog:E(".nf-dialog"),stage:E(".nf-stage"),canvas:E(".nf-canvas"),text:E(".nf-text"),restore:E(".nf-restore"),status:E(".nf-status"),audio:E(".nf-audio"),video:E(".nf-video"),discard:E(".nf-discard-shot"),stop:E(".nf-stop-video"),resetCrop:E(".nf-reset-crop"),submit:E(".nf-submit"),shot:null},Ln(),et()),u}function et(){var t;u&&(u.dataset.theme=te(d.theme),d.hideLauncher?u.setAttribute("data-nf-hidden-launcher",""):u.removeAttribute("data-nf-hidden-launcher"),c.video&&(c.video.hidden=!d.video),(t=c.dialog)!=null&&t.hidden&&nt())}function nt(){c.launcher&&(c.launcher.hidden=!!d.hideLauncher)}function Ln(){c.launcher.addEventListener("click",()=>$t()),E(".nf-dialog").addEventListener("click",t=>{t.target===c.dialog&&X()}),u.querySelectorAll(".nf-tool").forEach(t=>{t.addEventListener("click",()=>bt(t.dataset.tool))}),c.resetCrop.addEventListener("click",On),c.canvas.addEventListener("pointerdown",Tn),c.canvas.addEventListener("dragstart",t=>t.preventDefault()),u.querySelectorAll("[data-kind]").forEach(t=>{t.addEventListener("click",()=>wt(t.dataset.kind))}),c.discard.addEventListener("click",Fn),c.restore.addEventListener("click",Hn),c.audio.addEventListener("click",jn),c.video.addEventListener("click",Un),c.stop.addEventListener("click",()=>z==null?void 0:z.stop()),E(".nf-submit").addEventListener("click",()=>{Rt().catch(t=>S(t.message||"Submit failed."))}),wt("bug"),bt(null)}function wt(t){Q=Cn.includes(t)?t:"bug",u.querySelectorAll("[data-kind]").forEach(e=>{e.dataset.active=String(e.dataset.kind===Q)})}function bt(t){I=$n.has(t)?t:null,R=null,u.querySelectorAll(".nf-tool").forEach(e=>{e.dataset.active=String(e.dataset.tool===I)}),c.canvas&&(c.canvas.dataset.draw=I?"true":"false"),x&&$()}function ne(t){return Math.min(1,Math.max(0,t))}function rt(){return c.shot||c.canvas}function it(t){const e=rt().getBoundingClientRect();return{x:ne((t.clientX-e.left)/Math.max(e.width,1)),y:ne((t.clientY-e.top)/Math.max(e.height,1))}}function Pn(t){const e=rt().getBoundingClientRect();return t.clientX>=e.left&&t.clientX<=e.right&&t.clientY>=e.top&&t.clientY<=e.bottom}function re(t){const e=it(t),r=f.crop();return{x:r.x+e.x*r.w,y:r.y+e.y*r.h}}function at(t,e){const r=Math.min(t.x,e.x),n=Math.min(t.y,e.y);return{x:r,y:n,w:Math.max(mt,Math.abs(e.x-t.x)),h:Math.max(mt,Math.abs(e.y-t.y))}}function vt(t){u&&(t?u.dataset.grabbing="true":delete u.dataset.grabbing)}function St(t){try{c.canvas.setPointerCapture(t.pointerId)}catch{}}function xt(){window.addEventListener("pointermove",ae),window.addEventListener("pointerup",ot),window.addEventListener("pointercancel",ot)}function ie(){window.removeEventListener("pointermove",ae),window.removeEventListener("pointerup",ot),window.removeEventListener("pointercancel",ot)}function Tn(t){if(t.button!==0||!x)return;if(!t.target.closest(".nf-sticker")&&!Pn(t)){R=null,$();return}const e=t.target.closest(".nf-handle"),r=t.target.closest(".nf-sticker");if(r&&r.dataset.preview!=="true"){t.preventDefault(),t.stopPropagation(),R=r.dataset.id,St(t),kn({kind:"sticker",id:R,dir:(e==null?void 0:e.dataset.dir)||"move"},t),$();return}if(R=null,I==="crop"){t.preventDefault(),St(t),g={kind:"crop",start:it(t),current:it(t)},xt(),$();return}if(I==="arrow"||I==="rect"||I==="circle"){t.preventDefault(),St(t);const n=re(t);g={kind:"sticker",type:I,start:n,current:n},xt(),$();return}$()}function kn(t,e){e.preventDefault(),e.stopPropagation();const r=rt().getBoundingClientRect(),n=f.list().find(i=>i.id===t.id);w={...t,startX:e.clientX,startY:e.clientY,crop:f.crop(),sticker:n?{...n}:null,rect:r},vt(t.dir==="move"||t.dir==="start"||t.dir==="end"),xt()}function ae(t){if(g){g.current=g.kind==="crop"?it(t):re(t),$();return}if(!w)return;const e=(t.clientX-w.startX)/w.rect.width*w.crop.w,r=(t.clientY-w.startY)/w.rect.height*w.crop.h,n=w.sticker;if(n){if(w.dir==="end")f.update(n.id,{x2:n.x2+e,y2:n.y2+r});else if(w.dir==="start")f.update(n.id,{x:n.x+e,y:n.y+r});else if(w.dir==="move")f.update(n.id,{x:n.x+e,y:n.y+r,x2:(n.x2||n.x)+e,y2:(n.y2||n.y)+r});else{const i={x:n.x,y:n.y,w:n.w,h:n.h};An(i,w.dir,e,r),f.update(n.id,i)}$()}}function An(t,e,r,n){if(e.includes("e")&&(t.w=Math.max(.04,t.w+r)),e.includes("s")&&(t.h=Math.max(.04,t.h+n)),e.includes("w")){const i=Math.max(.04,t.w-r);t.x+=t.w-i,t.w=i}if(e.includes("n")){const i=Math.max(.04,t.h-n);t.y+=t.h-i,t.h=i}}function ot(t){if(ie(),vt(!1),g){In();return}if(w){if(w.kind==="sticker"){const e=c.canvas.getBoundingClientRect();(t.clientX<e.left-24||t.clientX>e.right+24||t.clientY<e.top-24||t.clientY>e.bottom+24)&&(f.remove(w.id),R=null)}w=null,$()}}function In(){const t=g;if(g=null,!t)return;if(t.kind==="crop"){const r=at(t.start,t.current);if(Math.abs(t.current.x-t.start.x)<Zt||Math.abs(t.current.y-t.start.y)<Zt){$();return}const i=f.crop();f.setCrop({x:i.x+r.x*i.w,y:i.y+r.y*i.h,w:r.w*i.w,h:r.h*i.h}),K();return}const e=Dn(t);e&&(R=e.id),$()}function Dn(t){if(t.type==="arrow"){const e=t.current.x-t.start.x,r=t.current.y-t.start.y;return Math.hypot(e,r)<mt?f.add("arrow",{x:t.start.x,y:t.start.y,x2:t.start.x+.12,y2:t.start.y,w:.12,h:.02}):f.add("arrow",{x:t.start.x,y:t.start.y,x2:t.current.x,y2:t.current.y,w:Math.abs(e),h:Math.abs(r)})}return f.add(t.type,at(t.start,t.current))}function On(){f.resetCrop(),R=null,K()}function Et(){c.resetCrop&&(c.resetCrop.hidden=!f.isCropped())}function Ct(t){if(!c.audio)return;const e=t?"Stop audio":"Record audio";c.audio.title=e,c.audio.setAttribute("aria-label",e),c.audio.dataset.active=String(!!t)}function Fn(){x&&(q=x),x="",c.stage.hidden=!0,c.restore.hidden=!q}function Hn(){q&&(x=q,c.stage.hidden=!1,c.restore.hidden=!0,K())}function jn(){try{if(B||(B=pn(e=>{const r=c.text.value.trim();c.text.value=r?`${r} ${e}`:e})),!B.isSupported()){S("Audio-to-text is not supported in this browser.");return}const t=B.start();Ct(t),S(t?"Listening…":"")}catch(t){S(t.message)}}async function Un(){if(!d.video){S("Video is disabled on this host.");return}c.dialog.hidden=!0,c.stop.hidden=!1,et(),c.launcher.hidden=!0,z=gn({onStart(){},onStop(t){P=t,c.stop.hidden=!0,nt(),c.dialog.hidden=!1,K(),S(t?"Video attached.":"Recording cancelled.")},onError(t){S(t.message)}});try{await z.start()}catch(t){c.stop.hidden=!0,nt(),c.dialog.hidden=!1,S(t.message)}}function K(){if(c.shot=null,!x){c.canvas.style.removeProperty("--nf-shot-aspect"),c.canvas.style.removeProperty("aspect-ratio"),c.canvas.innerHTML=P?`<video class="nf-recording-preview" controls src="${URL.createObjectURL(P)}"></video>`:"",Et();return}c.canvas.innerHTML=`<div class="nf-shot"><img alt="Screenshot" src="${x}" draggable="false"></div>`,c.shot=c.canvas.querySelector(".nf-shot");const t=c.shot.querySelector("img");t.draggable=!1,t.addEventListener("dragstart",r=>r.preventDefault());const e=()=>{Bn(t),$()};t.addEventListener("load",e),t.complete&&t.naturalWidth&&e()}function Bn(t){const e=t.naturalWidth||D.w,r=t.naturalHeight||D.h;if(e&&r&&(D={w:e,h:r},c.canvas.style.setProperty("--nf-shot-aspect",String(e/r)),c.canvas.style.aspectRatio=`${e} / ${r}`),!c.shot||!D.w||!D.h)return;const n=f.crop(),i=D.w/D.h,a=n.w/n.h*i,o=Math.min(1,a/i),s=Math.min(1,i/a);c.shot.style.left=`${(1-o)/2*100}%`,c.shot.style.top=`${(1-s)/2*100}%`,c.shot.style.width=`${o*100}%`,c.shot.style.height=`${s*100}%`,t.style.width=`${100/n.w}%`,t.style.height=`${100/n.h}%`,t.style.left=`${-n.x/n.w*100}%`,t.style.top=`${-n.y/n.h*100}%`}function Vn(t){return t.type==="arrow"?{id:"preview",type:"arrow",number:"",x:t.start.x,y:t.start.y,x2:t.current.x,y2:t.current.y,w:Math.abs(t.current.x-t.start.x),h:Math.abs(t.current.y-t.start.y)}:{id:"preview",type:t.type,number:"",...at(t.start,t.current)}}function $(){if((c.shot||c.canvas).querySelectorAll(".nf-sticker, .nf-crop").forEach(n=>n.remove()),!x||!c.shot){Et();return}const e=f.crop();if((g==null?void 0:g.kind)==="crop"){const n=document.createElement("div");n.className="nf-crop",oe(n,at(g.start,g.current),{x:0,y:0,w:1,h:1}),c.shot.appendChild(n)}const r=f.list().slice();if((g==null?void 0:g.kind)==="sticker"&&r.push(Vn(g)),r.forEach(n=>{const i=n.id==="preview",a=!i&&n.id===R,o=document.createElement("div");if(o.className=`nf-sticker nf-${n.type}`,o.dataset.id=n.id,a&&(o.dataset.selected="true"),i&&(o.dataset.preview="true"),n.type==="arrow"?_n(o,n,e,a):(oe(o,n,e),a&&["nw","ne","sw","se"].forEach(s=>Mt(o,s))),!i&&n.number){const s=document.createElement("span");s.className="nf-badge",s.textContent=String(n.number),o.appendChild(s)}c.shot.appendChild(o)}),c.canvas.querySelectorAll(":scope > .nf-recording-preview").forEach(n=>n.remove()),P){const n=document.createElement("video");n.className="nf-recording-preview",n.controls=!0,n.src=URL.createObjectURL(P),n.style.position="absolute",n.style.right="8px",n.style.bottom="8px",n.style.width="160px",c.canvas.appendChild(n)}Et()}function _n(t,e,r,n){const i=rt(),a=i.clientWidth,o=i.clientHeight,s=(e.x-r.x)/r.w*a,l=(e.y-r.y)/r.h*o,v=((e.x2??e.x+e.w)-r.x)/r.w*a,y=((e.y2??e.y)-r.y)/r.h*o,m=18,b=Math.min(s,v)-m,O=Math.min(l,y)-m,h=Math.max(2,Math.abs(v-s))+m*2,p=Math.max(2,Math.abs(y-l))+m*2,F=s-b,H=l-O,j=v-b,V=y-O,_=`nf-ah-${e.id}`,U=document.createElementNS("http://www.w3.org/2000/svg","svg");t.style.left=`${b}px`,t.style.top=`${O}px`,t.style.width=`${h}px`,t.style.height=`${p}px`,U.setAttribute("class","nf-arrow-svg"),U.setAttribute("viewBox",`0 0 ${h} ${p}`),U.setAttribute("width",String(h)),U.setAttribute("height",String(p)),U.innerHTML=`
|
|
39
39
|
<defs>
|
|
40
40
|
<marker id="${_}" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto">
|
|
41
41
|
<path d="M0,0 L10,5 L0,10 Z" fill="currentColor" />
|
|
42
42
|
</marker>
|
|
43
43
|
</defs>
|
|
44
|
-
<line class="nf-arrow-hit" x1="${
|
|
45
|
-
<line class="nf-arrow-shaft" x1="${
|
|
46
|
-
`,t.appendChild(U),n&&(
|
|
44
|
+
<line class="nf-arrow-hit" x1="${F}" y1="${H}" x2="${j}" y2="${V}" />
|
|
45
|
+
<line class="nf-arrow-shaft" x1="${F}" y1="${H}" x2="${j}" y2="${V}" marker-end="url(#${_})" />
|
|
46
|
+
`,t.appendChild(U),n&&(Mt(t,"start",{left:F-5,top:H-5}),Mt(t,"end",{left:j-5,top:V-5}))}function Mt(t,e,r){const n=document.createElement("span");n.className="nf-handle",n.dataset.dir=e,r&&(n.style.left=`${r.left}px`,n.style.top=`${r.top}px`),t.appendChild(n)}function oe(t,e,r){t.style.left=`${(e.x-r.x)/r.w*100}%`,t.style.top=`${(e.y-r.y)/r.h*100}%`,t.style.width=`${e.w/r.w*100}%`,t.style.height=`${e.h/r.h*100}%`}function se(t={}){return fn(t),d={...d,endpoint:String(t.endpoint||d.endpoint||"").replace(/\/$/,""),projectKey:t.projectKey==null?d.projectKey:String(t.projectKey),version:t.version==null?d.version:String(t.version),name:t.name==null?d.name:String(t.name||""),targets:t.targets===void 0?d.targets:t.targets,hideLauncher:t.hideLauncher==null?d.hideLauncher:!!t.hideLauncher,theme:te(t.theme??d.theme),video:t.video==null?d.video:!!t.video},gt(),et(),Lt}async function $t(){gt(),et(),c.launcher.hidden=!0,f=Gt(),D={w:0,h:0},P=null,R=null,g=null,w=null,Q="bug",wt("bug"),bt(null),Ct(!1),c.text.value="",S("");try{x=await ln(),q=x,c.stage.hidden=!1,c.restore.hidden=!0,S("")}catch{x="",S("Screenshot failed; you can still send text.")}c.dialog.hidden=!1,K(),c.text.focus()}function X(){u&&(B==null||B.stop(),Ct(!1),ie(),g=null,w=null,vt(!1),c.dialog.hidden=!0,c.stop.hidden=!0,nt())}function ce(t={}){pt={...pt,...dn(t)}}async function Rt(){if(gt(),yt)return null;const t=c.text.value.trim();if(!t&&!x&&!P)return S("Add a note, screenshot, or video first."),null;if(!d.endpoint||!d.projectKey)return S("Notefully is missing endpoint or projectKey."),null;yt=!0,le(!0),S("Submitting…",!0);try{const e=new FormData;if(e.append("message",t),e.append("kind",Q),e.append("version",d.version||"0.0.0"),d.name&&e.append("name",d.name),e.append("context",JSON.stringify({...un(pt),console:Qt.snapshot()})),e.append("annotations",JSON.stringify(f.list())),Array.isArray(d.targets)&&e.append("targets",JSON.stringify(d.targets)),x){const i=await Sn(x,f.crop(),f.list(),{mark:ee("--nf-mark","#fdd341"),markText:ee("--nf-mark-text","#2a2140")});e.append("screenshot",i,"screenshot.png")}P&&e.append("recording",P,"recording.webm");const r=await fetch(`${d.endpoint}/v1/reports`,{method:"POST",headers:{"X-Notefully-Key":d.projectKey},body:e});let n=null;try{n=await r.json()}catch{n=null}if(!r.ok)throw S((n==null?void 0:n.error)||"Submit failed."),new Error((n==null?void 0:n.error)||`Submit failed (${r.status})`);return S("Sent. Thank you."),X(),n}finally{yt=!1,le(!1)}}function le(t){c.submit&&(c.submit.disabled=!!t,c.submit.setAttribute("aria-busy",t?"true":"false"))}function ue(){X(),u==null||u.remove(),u=null,c={}}const Lt={init:se,open:$t,close:X,identify:ce,submit:Rt,destroy:ue};return typeof window<"u"&&(window.Notefully=Lt),L.close=X,L.default=Lt,L.destroy=ue,L.identify=ce,L.init=se,L.open=$t,L.submit=Rt,Object.defineProperties(L,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),L})({});
|