@inkandswitch/patchwork-pkg-base 0.0.135 → 0.0.136
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/module-settings-url +1 -1
- package/package.json +1 -1
- package/packages/account/dist/{ContactAvatar-IVYTJ7M4.js → ContactAvatar-IL5NSSA4.js} +2 -3
- package/packages/account/dist/{ContactAvatar-IVYTJ7M4.js.map → ContactAvatar-IL5NSSA4.js.map} +1 -1
- package/packages/account/dist/{ContactCursor-2FVKF5QA.js → ContactCursor-AAYWKZQ6.js} +2 -3
- package/packages/account/dist/{ContactCursor-2FVKF5QA.js.map → ContactCursor-AAYWKZQ6.js.map} +1 -1
- package/packages/account/dist/{ContactViewer-32NVB5LB.js → ContactViewer-XSBR3IGY.js} +1 -2
- package/packages/account/dist/{ContactViewer-32NVB5LB.js.map → ContactViewer-XSBR3IGY.js.map} +1 -1
- package/packages/account/dist/{InlineContactAvatar-6UAAJ73R.js → InlineContactAvatar-IWMTGVN7.js} +1 -2
- package/packages/account/dist/{InlineContactAvatar-6UAAJ73R.js.map → InlineContactAvatar-IWMTGVN7.js.map} +1 -1
- package/packages/account/dist/{chunk-L6JWPAD3.js → chunk-3744NRLE.js} +2 -25
- package/packages/account/dist/{chunk-L6JWPAD3.js.map → chunk-3744NRLE.js.map} +1 -1
- package/packages/account/dist/{datatype-Y52FEGOW.js → datatype-TO6U5DAY.js} +1 -3
- package/packages/account/dist/{datatype-Y52FEGOW.js.map → datatype-TO6U5DAY.js.map} +1 -1
- package/packages/account/dist/index.css +0 -507
- package/packages/account/dist/index.css.map +3 -3
- package/packages/account/dist/index.js +9 -22
- package/packages/account/dist/index.js.map +2 -2
- package/packages/account/dist/{styles-KCFZAQMN.js → styles-XU34T3AI.js} +1 -3
- package/packages/account/dist/{styles-KCFZAQMN.js.map → styles-XU34T3AI.js.map} +1 -1
- package/packages/account/package.json +1 -1
- package/packages/codemirror-markdown/dist/extensions/markdown.js +19 -5
- package/packages/codemirror-markdown/dist/extensions/markdown.js.map +2 -2
- package/packages/settings/dist/assets/Settings-Do_cRfv4.js +3 -0
- package/packages/settings/dist/assets/Settings-Do_cRfv4.js.map +1 -0
- package/packages/settings/dist/index.js +1 -1
- package/packages/settings/dist/index.js.map +1 -1
- package/packages/settings/package.json +1 -1
- package/packages/sideboard/dist/account-bar-F3MXGPYB.js +2 -0
- package/packages/sideboard/dist/chunk-4RJIKO65.js +2 -0
- package/packages/sideboard/dist/chunk-4RJIKO65.js.map +7 -0
- package/packages/sideboard/dist/index.js +1 -1
- package/packages/sideboard/dist/sideboard/sideboard.js +1 -1
- package/packages/threepane/dist/IsolatedDocumentArea-GDW25K5U.js +2 -0
- package/packages/threepane/dist/PatchworkFrame-Y342MRR3.js +2 -0
- package/packages/threepane/dist/PatchworkFrame-Y342MRR3.js.map +7 -0
- package/packages/threepane/dist/{chunk-UJ7QHTY6.js → chunk-2HSAKXXA.js} +106 -7
- package/packages/threepane/dist/{chunk-UJ7QHTY6.js.map → chunk-2HSAKXXA.js.map} +2 -2
- package/packages/threepane/dist/index.js +1 -1
- package/plugin-registry-url +1 -1
- package/packages/account/dist/AccountPicker-SBCGXHRS.js +0 -7008
- package/packages/account/dist/AccountPicker-SBCGXHRS.js.map +0 -7
- package/packages/account/dist/chunk-5WRI5ZAA.js +0 -31
- package/packages/settings/dist/assets/FrameConfigurator-M-u9az7g.js +0 -3
- package/packages/settings/dist/assets/FrameConfigurator-M-u9az7g.js.map +0 -1
- package/packages/sideboard/dist/account-bar-6WTRIGGE.js +0 -2
- package/packages/sideboard/dist/chunk-JE5VBSXY.js +0 -2
- package/packages/sideboard/dist/chunk-JE5VBSXY.js.map +0 -7
- package/packages/threepane/dist/IsolatedDocumentArea-ZF6AC4GB.js +0 -2
- package/packages/threepane/dist/IsolatedDocumentArea-ZF6AC4GB.js.map +0 -7
- package/packages/threepane/dist/PatchworkFrame-SEJC7VST.js +0 -2
- package/packages/threepane/dist/PatchworkFrame-SEJC7VST.js.map +0 -7
- /package/packages/{account/dist/chunk-5WRI5ZAA.js.map → sideboard/dist/account-bar-F3MXGPYB.js.map} +0 -0
- /package/packages/{sideboard/dist/account-bar-6WTRIGGE.js.map → threepane/dist/IsolatedDocumentArea-GDW25K5U.js.map} +0 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
(function(){"use strict";try{if(typeof document<"u"){var t=document.createElement("style");t.appendChild(document.createTextNode('@layer package{:root,:host,[theme]{--settings-fill: var(--editor-fill, white);--settings-fg: var(--editor-line, black);--settings-muted: var(--editor-line-offset-50, #888);--settings-rule: var(--editor-fill-offset-20, #ddd);--settings-hover: var(--editor-fill-offset-10, #f2f2f2);--settings-group: color-mix(in oklch, var(--settings-fg) 4%, var(--settings-fill));--settings-well: color-mix(in oklch, var(--settings-fg) 9%, var(--settings-fill));--settings-accent: var(--studio-primary, #35f7ca);--settings-danger: var(--studio-danger-text, var(--studio-danger, crimson));--settings-family: var(--editor-family-sans, system-ui, sans-serif);--settings-family-code: var(--editor-family-code, ui-monospace, monospace);--settings-quick: max(1ms, calc(.12s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1)));--settings-ease-out: cubic-bezier(.23, 1, .32, 1);--settings-switch-time: max(1ms, calc(.18s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1)));--settings-mini-chrome: var(--studio-chrome-fill, var(--studio-chrome, #eee));--settings-mini-chrome-line: var(--studio-chrome-line, var(--studio-line, black));--settings-mini-rule: var(--studio-chrome-fill-offset-30, #ccc);--settings-mini-fill: var(--text-editor-fill, var(--editor-fill, white));--settings-mini-line: var(--text-editor-line, var(--editor-line, black));--settings-mini-primary: var(--studio-primary, #35f7ca);--settings-mini-family: var(--studio-family-sans, system-ui, sans-serif);--settings-mini-family-text: var(--text-editor-family, var(--editor-family-sans, system-ui, sans-serif));--settings-mini-heading: var(--syntax-heading, currentColor);--settings-mini-keyword: var(--syntax-keyword, currentColor);--settings-mini-link: var(--syntax-link, currentColor);--settings-mini-comment: var(--syntax-comment, currentColor)}}.settings{container-type:inline-size;box-sizing:border-box;height:100%;overflow:auto;display:flex;justify-content:center;background:var(--settings-fill);color:var(--settings-fg);font:400 13px/1.4 var(--settings-family)}.settings-page{box-sizing:border-box;width:min(600px,100%);display:grid;align-content:start;gap:36px;padding:32px 24px 64px}.settings-page h2{margin:0 0 0 2px;font-size:13px;font-weight:600}.settings-page h3{display:flex;align-items:center;gap:6px;margin:0;color:var(--settings-muted);font-size:12px;font-weight:500}.settings-page :is(input,select,textarea,button):focus-visible{outline:2px solid var(--settings-accent);outline-offset:1px}.settings-section{display:grid;gap:8px}.settings-group{display:grid;padding:2px 0;border-radius:10px;background:var(--settings-group)}.settings-group-block{display:grid;gap:10px;padding:14px}.settings-row{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:44px;padding:6px 14px;box-sizing:border-box}.settings-label{flex:1;min-width:0;text-wrap:pretty}.settings-control{display:flex;flex:0 1 auto;align-items:center;justify-content:flex-end;gap:10px;min-width:0}@container (max-width: 420px){.settings-row:not(:has(.settings-switch)){flex-wrap:wrap}.settings-row:not(:has(.settings-switch)) .settings-control{flex:1 1 100%;justify-content:flex-start}}.settings-switch{position:relative;flex:none;width:34px;height:20px;padding:0;border:none;border-radius:999px;background:var(--settings-well);cursor:var(--studio-cursor-pointer, pointer);transition:background-color var(--settings-switch-time) ease}.settings-switch[aria-checked=true]{background:var(--settings-accent)}.settings-switch:focus-visible{outline:2px solid var(--settings-accent);outline-offset:2px}.settings-switch-thumb{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #0003,0 0 0 .5px #0000000f;transition:transform var(--settings-switch-time) var(--settings-ease-out)}.settings-switch:active .settings-switch-thumb{width:19px}[aria-checked=true]>.settings-switch-thumb{transform:translate(14px)}.settings-switch[aria-checked=true]:active .settings-switch-thumb{transform:translate(11px)}.settings-segmented{display:inline-flex;flex-wrap:wrap;justify-self:start;gap:2px;padding:2px;border-radius:8px;background:var(--settings-well)}.settings-segment{padding:4px 14px;border:none;border-radius:6px;background:none;color:inherit;font:500 12.5px var(--settings-family);cursor:var(--studio-cursor-pointer, pointer);transition:background-color var(--settings-quick) ease,box-shadow var(--settings-quick) ease}@media(hover:hover)and (pointer:fine){.settings-segment:hover:not([aria-checked=true]){background:color-mix(in oklch,var(--settings-fill) 50%,transparent)}}.settings-segment[aria-checked=true]{background:var(--settings-fill);box-shadow:0 1px 2px #0000001f,0 0 0 .5px #0000000f}.settings-unit{color:var(--settings-muted)}.settings-error{flex-basis:100%;margin:0;color:var(--settings-danger);font-size:12px}.settings-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.settings-cluster{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-width:0}.settings-grow{flex:1;min-width:0}.settings-button{display:inline-flex;align-items:center;justify-content:center;gap:5px;height:28px;padding:0 10px;border:var(--studio-border-width, 1px) solid var(--settings-rule);border-radius:var(--studio-radius-sm, 4px);background:var(--settings-fill);box-shadow:0 1px 2px #0000000d;color:inherit;font:500 12.5px var(--settings-family);white-space:nowrap;cursor:var(--studio-cursor-pointer, pointer);transition:background-color var(--settings-quick) ease,box-shadow var(--settings-quick) ease,color var(--settings-quick) ease,transform var(--settings-quick) var(--settings-ease-out)}@media(hover:hover)and (pointer:fine){.settings-button:hover:not(:disabled){background:var(--settings-hover);box-shadow:none}}.settings-button:active:not(:disabled){transform:scale(.97)}.settings-button:disabled{opacity:.35;cursor:default}.settings-button[data-primary]{border-color:var(--settings-fg);background:var(--settings-fg);color:var(--settings-fill)}@media(hover:hover)and (pointer:fine){.settings-button[data-primary]:hover:not(:disabled){background:var(--settings-fg);opacity:.85}}.settings-button[data-leave]{border-color:transparent;background:none;box-shadow:none;color:var(--settings-muted)}@media(hover:hover)and (pointer:fine){.settings-button[data-leave]:hover:not(:disabled){background:var(--settings-danger);color:#fff}}.settings-button[data-danger]{border-color:var(--settings-danger);background:var(--settings-danger);color:#fff}@media(hover:hover)and (pointer:fine){.settings-button[data-danger]:hover:not(:disabled){background:var(--settings-danger);opacity:.9}}.settings-icon{flex:none;width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.settings-input{box-sizing:border-box;height:28px;padding:4px 8px;border:var(--studio-border-width, 1px) solid var(--settings-rule);border-radius:var(--studio-radius-sm, 4px);background:var(--settings-fill);color:inherit;font:inherit}.settings-number{width:6em}.settings-code{font-family:var(--settings-family-code)}.settings-reset{padding:0;border:none;background:none;color:var(--settings-muted);font:inherit;font-size:12px;cursor:var(--studio-cursor-pointer, pointer);transition:color var(--settings-quick) ease}@media(hover:hover)and (pointer:fine){.settings-reset:hover{color:var(--settings-fg)}}.settings-you{display:flex;align-items:flex-start;gap:18px;padding:4px 0 28px}.settings-you-face{position:relative;flex:none;width:72px;height:72px;padding:4px;box-sizing:border-box}.settings-you-face[aria-busy=true] .settings-you-picture{opacity:.5}.settings-you-picture{position:relative;display:block;width:64px;height:64px;padding:0;overflow:hidden;border:none;border-radius:50%;background:none;box-shadow:0 0 0 2px var(--settings-fill),0 0 0 4px var(--settings-you-color);cursor:var(--studio-cursor-pointer, pointer);transition:box-shadow var(--settings-quick) ease,opacity var(--settings-quick) ease}.settings-you-picture:after{content:"";position:absolute;inset:0;border-radius:50%;background:#0000004d;opacity:0;transition:opacity var(--settings-quick) ease}@media(hover:hover)and (pointer:fine){.settings-you-picture:hover:after{opacity:1}}.settings-you-picture:focus-visible:after{opacity:1}.settings-you-picture patchwork-view{display:block;width:64px;height:64px;font:600 20px var(--settings-family);letter-spacing:.02em}.settings-you-picture patchwork-view .contact-avatar{display:flex;box-sizing:border-box;width:100%;min-width:0;max-width:none;height:100%;min-height:0;max-height:none}.settings-you-picture:disabled{cursor:progress}.settings-you-nobody{box-sizing:border-box;display:grid;place-items:center;width:64px;height:64px;border-radius:50%;background:var(--settings-hover);color:var(--settings-muted);font-size:20px}.settings-you-unpicture{position:absolute;top:0;right:0;z-index:1;display:grid;place-items:center;width:20px;height:20px;padding:0;border:var(--studio-border-width, 1px) solid var(--settings-rule);border-radius:50%;background:var(--settings-fill);color:var(--settings-muted);font-size:13px;line-height:1;cursor:var(--studio-cursor-pointer, pointer);opacity:0;transition:opacity var(--settings-quick) ease,transform var(--settings-quick) var(--settings-ease-out)}.settings-you-face:hover .settings-you-unpicture,.settings-you-unpicture:focus-visible{opacity:1}@media(hover:none){.settings-you-unpicture{opacity:1}}@media(hover:hover)and (pointer:fine){.settings-you-unpicture:hover{border-color:var(--settings-danger);color:var(--settings-danger)}}.settings-you-unpicture:active{transform:scale(.9)}.settings-you-cursor{position:absolute;top:56px;left:44px;z-index:2}.settings-pointer{display:inline-flex;align-items:flex-start;padding:0;border:none;background:none;cursor:var(--studio-cursor-pointer, pointer);transition:transform var(--settings-quick) var(--settings-ease-out)}.settings-pointer:active{transform:scale(.96)}@media(hover:hover)and (pointer:fine){.settings-pointer:hover .settings-pointer-tag{filter:brightness(1.08)}}.settings-pointer:focus-visible{outline:none}.settings-pointer:focus-visible .settings-pointer-tag{outline:2px solid var(--settings-accent);outline-offset:1px}.settings-pointer-arrow{flex:none;width:16px;height:24px;filter:drop-shadow(0 1px 1px rgb(0 0 0 / 25%))}.settings-pointer-tag{max-width:12rem;margin:13px 0 0 -3px;padding:2px 6px;overflow:hidden;border-radius:4px;color:#fff;font:500 12px/1.3 var(--settings-family);white-space:nowrap;text-overflow:ellipsis}.settings-colors{position:absolute;top:calc(100% + 4px);left:0;z-index:var(--studio-layer-dropdown, 30);display:grid;grid-template-columns:repeat(7,24px);gap:3px;padding:6px;border:var(--studio-border-width, 1px) solid var(--settings-rule);border-radius:8px;background:var(--settings-fill);box-shadow:0 4px 16px #0000001f;transform-origin:top left;animation:settings-pop var(--settings-quick) var(--settings-ease-out)}@keyframes settings-pop{0%{opacity:0;transform:scale(.96)}}.settings-swatch{position:relative;box-sizing:border-box;width:24px;height:24px;padding:0;overflow:hidden;border:none;border-radius:4px;cursor:var(--studio-cursor-pointer, pointer);transition:transform var(--settings-quick) var(--settings-ease-out)}.settings-swatch:active{transform:scale(.92)}.settings-swatch[aria-checked=true]{box-shadow:inset 0 0 0 2px var(--settings-fill),0 0 0 2px var(--settings-fg)}.settings-swatch:focus-visible,.settings-swatch:has(:focus-visible){outline:2px solid var(--settings-accent);outline-offset:1px}.settings-swatch-custom{background:conic-gradient(#dd3c3c,#dddd3c,#3cdd3c,#3cdddd,#3c3cdd,#dd3cdd,#dd3c3c)}.settings-swatch-custom input{position:absolute;inset:0;width:100%;height:100%;padding:0;border:none;opacity:0;cursor:inherit}.settings-you-says{display:flex;flex:1;flex-direction:column;gap:10px;min-width:0;padding-top:18px}.settings-you-name{box-sizing:border-box;width:100%;margin-left:-7px;padding:3px 6px;border:var(--studio-border-width, 1px) solid transparent;border-radius:var(--studio-radius-sm, 4px);background:none;color:inherit;font:600 20px/1.2 var(--settings-family)}.settings-you-name::placeholder{color:var(--settings-muted)}.settings-you-name:hover{border-color:var(--settings-rule)}.settings-you-name:focus{border-color:var(--settings-accent);background:var(--settings-fill);outline:none}.settings-ask{margin-right:4px;font-weight:600}.settings-dialog{padding:20px;border:var(--studio-border-width, 1px) solid var(--settings-rule);border-radius:8px;background:var(--settings-fill);box-shadow:0 8px 30px #0000001a;color:var(--settings-fg);font:400 13px/1.4 var(--settings-family)}.settings-dialog::backdrop{background:var(--studio-backdrop, rgb(0 0 0 / 20%));-webkit-backdrop-filter:var(--studio-backdrop-blur, blur(2px));backdrop-filter:var(--studio-backdrop-blur, blur(2px))}.settings-dialog[open]{animation:settings-pop var(--settings-quick) var(--settings-ease-out)}.settings-dialog-actions{display:flex;justify-content:flex-end;gap:6px}.settings-cropper[open]{display:grid;justify-items:center;gap:12px}.settings-cropper-view{position:relative;width:240px;height:240px;overflow:hidden;border-radius:6px;background:var(--settings-hover);cursor:var(--studio-cursor-grab, grab);touch-action:none}.settings-cropper-view:active{cursor:var(--studio-cursor-grabbing, grabbing)}.settings-cropper-view img{position:absolute;top:0;left:0;max-width:none;transform-origin:0 0;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.settings-cropper-mask{position:absolute;inset:0;border-radius:50%;box-shadow:0 0 0 9999px #00000073;pointer-events:none}.settings-cropper-zoom{width:240px;accent-color:var(--settings-fg)}.settings-cropper .settings-dialog-actions{justify-self:stretch}.settings-now{padding:1px 6px;border-radius:999px;background:color-mix(in oklch,var(--settings-accent) 30%,transparent);color:var(--settings-fg);font-size:11px;font-weight:500}.settings-theme-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(124px,1fr));gap:14px 12px}.settings-theme-card{display:grid;gap:6px;padding:0;border:none;background:none;color:inherit;font:inherit;text-align:left;cursor:var(--studio-cursor-pointer, pointer)}.settings-theme-card .settings-mini{transition:transform .14s ease-out}.settings-theme-card:active .settings-mini{transform:scale(.98)}.settings-theme-card[aria-checked=true] .settings-mini,.settings-theme-card:focus-visible .settings-mini{outline:2px solid var(--settings-accent);outline-offset:2px}.settings-theme-card:focus-visible{outline:none!important}.settings-theme-name{min-width:0;overflow:hidden;font-size:12px;white-space:nowrap;text-overflow:ellipsis}.settings-mini{display:flex;aspect-ratio:16 / 10;overflow:hidden;border:var(--studio-border-width, 1px) solid var(--settings-mini-rule);border-radius:var(--studio-radius, 6px);background:var(--settings-mini-chrome);color:var(--settings-mini-chrome-line);font:400 7.5px/1.4 var(--settings-mini-family);pointer-events:none;-webkit-user-select:none;user-select:none}.settings-mini-side{display:flex;flex:none;flex-direction:column;width:34%;padding:12px 0 4px;border-right:var(--studio-border-width, 1px) solid var(--settings-mini-rule)}.settings-mini-side b{padding:0 5px 2px;font-weight:600;opacity:.6}.settings-mini-side span{padding:1px 5px 1px 8px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.settings-mini-side [data-current]{background:color-mix(in oklch,var(--settings-mini-primary) 18%,transparent);box-shadow:inset 1.5px 0 var(--settings-mini-primary)}.settings-mini-main{display:flex;flex:1;flex-direction:column;min-width:0}.settings-mini-top{display:flex;flex:none;align-items:center;height:12px;padding:0 6px;border-bottom:var(--studio-border-width, 1px) solid var(--settings-mini-rule);font-weight:600}.settings-mini-text{flex:1;padding:4px 6px;background:var(--settings-mini-fill);color:var(--settings-mini-line);font-family:var(--settings-mini-family-text);white-space:nowrap}.settings-mini-text .h{color:var(--settings-mini-heading);font-weight:700}.settings-mini-text .k{color:var(--settings-mini-keyword)}.settings-mini-text .l{color:var(--settings-mini-link);text-decoration:underline}.settings-mini-text .c{color:var(--settings-mini-comment);font-style:italic}.settings-strip{display:grid;gap:8px;justify-items:start}.settings-strip-items{display:flex;flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none}.settings-strip-items:empty{display:none}.settings-strip-item{display:flex;align-items:center;gap:4px;padding:3px 4px 3px 9px;border:var(--studio-border-width, 1px) solid var(--settings-rule);border-radius:var(--studio-radius-sm, 4px);background:var(--settings-fill);cursor:var(--studio-cursor-grab, grab);-webkit-user-select:none;user-select:none}.settings-strip-item[data-dragging]{opacity:.4}.settings-strip-item[data-over]{border-color:var(--settings-accent)}.settings-strip-remove{display:grid;place-items:center;width:16px;height:16px;padding:0;border:none;border-radius:50%;background:none;color:var(--settings-muted);line-height:1;cursor:var(--studio-cursor-pointer, pointer)}@media(hover:hover)and (pointer:fine){.settings-strip-remove:hover{background:var(--settings-hover);color:var(--settings-danger)}}.settings-strip-add{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.settings-color-input{width:32px;height:24px;padding:0;border:var(--studio-border-width, 1px) solid var(--settings-rule);border-radius:var(--studio-radius-sm, 4px);background:none}')),document.head.appendChild(t)}}catch(i){console.error("vite-plugin-css-injected-by-js",i)}})();
|
|
2
|
+
import{use as G,setAttribute as C,insert as b,createComponent as y,effect as F,addEventListener as $e,style as Te,template as w,delegateEvents as z,getOwner as Le,setStyleProperty as re,memo as X,render as Me}from"solid-js/web";import{onCleanup as N,createMemo as D,createContext as Re,useContext as Oe,createResource as Ie,createEffect as _e,createSignal as L,onMount as Pe,Show as T,For as U,Switch as Ue,Match as q}from"solid-js";import{createStore as De,reconcile as ge,produce as Ne}from"solid-js/store";import{parseAutomergeUrl as je,isValidAutomergeUrl as ke}from"@automerge/automerge-repo/slim";import{getRegistry as ie}from"@inkandswitch/patchwork-plugins";function ze(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var K={exports:{}},Q,he;function Be(){if(he)return Q;he=1;var e=1e3,n=e*60,r=n*60,t=r*24,a=t*7,s=t*365.25;Q=function(d,o){o=o||{};var u=typeof d;if(u==="string"&&d.length>0)return i(d);if(u==="number"&&isFinite(d))return o.long?g(d):c(d);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(d))};function i(d){if(d=String(d),!(d.length>100)){var o=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(d);if(o){var u=parseFloat(o[1]),m=(o[2]||"ms").toLowerCase();switch(m){case"years":case"year":case"yrs":case"yr":case"y":return u*s;case"weeks":case"week":case"w":return u*a;case"days":case"day":case"d":return u*t;case"hours":case"hour":case"hrs":case"hr":case"h":return u*r;case"minutes":case"minute":case"mins":case"min":case"m":return u*n;case"seconds":case"second":case"secs":case"sec":case"s":return u*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return u;default:return}}}}function c(d){var o=Math.abs(d);return o>=t?Math.round(d/t)+"d":o>=r?Math.round(d/r)+"h":o>=n?Math.round(d/n)+"m":o>=e?Math.round(d/e)+"s":d+"ms"}function g(d){var o=Math.abs(d);return o>=t?l(d,o,t,"day"):o>=r?l(d,o,r,"hour"):o>=n?l(d,o,n,"minute"):o>=e?l(d,o,e,"second"):d+" ms"}function l(d,o,u,m){var v=o>=u*1.5;return Math.round(d/u)+" "+m+(v?"s":"")}return Q}var ee,me;function qe(){if(me)return ee;me=1;function e(n){t.debug=t,t.default=t,t.coerce=l,t.disable=c,t.enable=s,t.enabled=g,t.humanize=Be(),t.destroy=d,Object.keys(n).forEach(o=>{t[o]=n[o]}),t.names=[],t.skips=[],t.formatters={};function r(o){let u=0;for(let m=0;m<o.length;m++)u=(u<<5)-u+o.charCodeAt(m),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=r;function t(o){let u,m=null,v,h;function f(...p){if(!f.enabled)return;const E=f,A=Number(new Date),k=A-(u||A);E.diff=k,E.prev=u,E.curr=A,u=A,p[0]=t.coerce(p[0]),typeof p[0]!="string"&&p.unshift("%O");let S=0;p[0]=p[0].replace(/%([a-zA-Z%])/g,(x,M)=>{if(x==="%%")return"%";S++;const R=t.formatters[M];if(typeof R=="function"){const I=p[S];x=R.call(E,I),p.splice(S,1),S--}return x}),t.formatArgs.call(E,p),(E.log||t.log).apply(E,p)}return f.namespace=o,f.useColors=t.useColors(),f.color=t.selectColor(o),f.extend=a,f.destroy=t.destroy,Object.defineProperty(f,"enabled",{enumerable:!0,configurable:!1,get:()=>m!==null?m:(v!==t.namespaces&&(v=t.namespaces,h=t.enabled(o)),h),set:p=>{m=p}}),typeof t.init=="function"&&t.init(f),f}function a(o,u){const m=t(this.namespace+(typeof u>"u"?":":u)+o);return m.log=this.log,m}function s(o){t.save(o),t.namespaces=o,t.names=[],t.skips=[];const u=(typeof o=="string"?o:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(const m of u)m[0]==="-"?t.skips.push(m.slice(1)):t.names.push(m)}function i(o,u){let m=0,v=0,h=-1,f=0;for(;m<o.length;)if(v<u.length&&(u[v]===o[m]||u[v]==="*"))u[v]==="*"?(h=v,f=m,v++):(m++,v++);else if(h!==-1)v=h+1,f++,m=f;else return!1;for(;v<u.length&&u[v]==="*";)v++;return v===u.length}function c(){const o=[...t.names,...t.skips.map(u=>"-"+u)].join(",");return t.enable(""),o}function g(o){for(const u of t.skips)if(i(o,u))return!1;for(const u of t.names)if(i(o,u))return!0;return!1}function l(o){return o instanceof Error?o.stack||o.message:o}function d(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}return ee=e,ee}var ve;function Ve(){return ve||(ve=1,(function(e,n){var r={};n.formatArgs=a,n.save=s,n.load=i,n.useColors=t,n.storage=c(),n.destroy=(()=>{let l=!1;return()=>{l||(l=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),n.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function t(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let l;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(l=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(l[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function a(l){if(l[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+l[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const d="color: "+this.color;l.splice(1,0,d,"color: inherit");let o=0,u=0;l[0].replace(/%[a-zA-Z%]/g,m=>{m!=="%%"&&(o++,m==="%c"&&(u=o))}),l.splice(u,0,d)}n.log=console.debug||console.log||(()=>{});function s(l){try{l?n.storage.setItem("debug",l):n.storage.removeItem("debug")}catch{}}function i(){let l;try{l=n.storage.getItem("debug")||n.storage.getItem("DEBUG")}catch{}return!l&&typeof process<"u"&&"env"in process&&(l=r.DEBUG),l}function c(){try{return localStorage}catch{}}e.exports=qe()(n);const{formatters:g}=e.exports;g.j=function(l){try{return JSON.stringify(l)}catch(d){return"[UnexpectedJSONParseError]: "+d.message}}})(K,K.exports)),K.exports}var Ye=Ve();const He=ze(Ye);var te=He("cabbages");function ne(e){return typeof e=="object"&&e!=null&&Object.getPrototypeOf(e)==Object.prototype}function W(e){if(Array.isArray(e))return e.map(W);if(ne(e)){let n={};for(let r of Object.keys(e))n[r]=W(e[r]);return n}return e instanceof Date?new Date(e):ArrayBuffer.isView(e)?e.slice():e}var Ke="";function We(e,...n){if(n.length==0){te("empty patch");return}const[r,t,a]=n;let s=[...r];for(;;){let i=s.shift();if(!s.length){const g=Array.isArray(t);if(ne(e)&&g&&typeof i>"u"&&typeof t[0]=="string"){delete e[t[0]];return}if(g||typeof t=="number"){if(typeof i>"u")throw new Error("cant treat top level as a seq");i=i;let[l,d]=Array.isArray(t)?t:[t,t+1];const o=Array.isArray(t)&&t.length==0;if(!o&&(l==null||d==null))throw new RangeError("it's all or nothing, no half measures");const u=typeof a>"u",m=l===d&&!u,v=o&&!u,h=!m&&!u&&!v;if(typeof e[i]>"u"){if(typeof e=="string")return;typeof a=="string"?e[i]="":e[i]=[]}let f=e[i];if(Array.isArray(f)){if(v){Array.isArray(a)?f.push(...a):f.push(a);return}if(m||h){Array.isArray(a)?f.splice(l,d-l,...a):f.splice(l,d-l,a);return}if(u){f.splice(l,d-l);return}throw new Error("i don't know what happened")}if(typeof f=="string"){if(v){e[i]=f+a;return}if(h||m){e[i]=f.slice(0,l)+(typeof a=="string"?a:a.map(p=>typeof p=="string"?p:Ke).join(""))+f.slice(d);return}if(u){e[i]=f.slice(0,l)+f.slice(d);return}throw new Error("i don't know what happened")}if(ne(f)&&g&&typeof t[0]=="string"){delete f[t[0]];return}throw new Error("not implemented")}if(typeof i>"u"){if(typeof t!="string")throw new Error(`can't index top-level map with ${t}`);typeof a>"u"?delete e[t]:e[t]=a;return}if(typeof e[i]>"u"&&(e[i]={}),g){let[l,d]=t;l!=null&&d!=null&&(typeof a>"u"&&l!=null&&d!=null?delete e[i][l||d]:e[i][l||d]=a)}else if(typeof a>"u")delete e[i][t];else{if(typeof e[i]=="string")return;e[i][t]=a}return}if(typeof i>"u")throw new Error("cant treat top level as a seq");i=i;let c=s[0];if(typeof e[i]>"u")if(typeof c=="string")e[i]={};else if(typeof c=="number")e[i]=[];else throw new Error(`can't go down this road ${e}.${i}.${c}`);if(e=e[i],typeof e=="string"){te("ignoring patch to a block marker in a string",r,t);return}if(e==null||typeof e!="object"&&typeof e!="function")throw new TypeError(`invalid path ${JSON.stringify(r)}: ${String(i)} is ${e}`)}}function pe(e,n){for(let r=0;r<n.length;r++)e=e?e[n[r]]:void 0;return e}function Ze(e,n){const r=e.path.slice(0,-1),t=e.path[e.path.length-1];switch(e.action){case"mark":case"unmark":return te(`skipping ${e.action} because it doesn't affect material reality`),[];case"inc":if(n)return[r,t,pe(n.patchInfo.after,e.path)];throw new Error(`can't apply ${e.action} without payload argument`);case"conflict":if(n)return[r,t,pe(n.patchInfo.after,e.path)];throw new Error(`can't apply ${e.action} without payload argument`);case"del":return typeof t=="string"?[r,t]:[r,[t,t+(e.length||1)]];case"insert":return[r,[t,t],W(e.values)];case"splice":return[r,[t,t],[e.value]];case"put":return[r,t,W(e.value)]}}function Ge(e){return n=>{for(let r of e.patches)We(n,...Ze(r,e))}}const V=new WeakMap;function Je(e){if(N(()=>{const s=V.get(e);s&&(s.refs--||s.cleanup())}),V.has(e)){const s=V.get(e);return s.refs++,s.store}const[n,r]=De(structuredClone(e.doc()));V.set(e,{refs:0,store:n,cleanup(){e.off("change",t),e.off("delete",a),V.delete(e)}});function t(s){if(s.scopeReplaced){r(ge(s.doc??{}));return}r(Ne(Ge(s)))}function a(){r(ge({}))}return e.on("change",t),e.on("delete",a),n}const Z=e=>typeof e=="function"&&!e.length?e():e;function Xe(e){return D(()=>Z(e)&&Je(Z(e)))}const Fe=Re(null);function Qe(e,n){const r=Oe(Fe);if(!r)throw new Error("use outside <RepoContext> requires options.repo");const t=r;function a(){const c=Z(e);if(c)return tt(t,c)}const[s,{mutate:i}]=Ie(e,c=>t.find(c),{initialValue:a()});return _e(()=>{Z(e)||i()}),s}function et(e){return typeof e.query=="function"}function tt(e,n){if(et(e)){const t=e.query(n).state();return t.status=="ready"?t.handle:void 0}const r=e.findWithProgress(n).peek();return r.state=="ready"?r.handle:void 0}function J(e,n){const r=Qe(e);return[Xe(r),r]}const Y=[{name:"Sky Blue",value:"hsl(200, 70%, 50%)"},{name:"Coral",value:"hsl(10, 75%, 58%)"},{name:"Emerald",value:"hsl(145, 70%, 45%)"},{name:"Violet",value:"hsl(270, 70%, 55%)"},{name:"Amber",value:"hsl(38, 85%, 50%)"},{name:"Rose",value:"hsl(350, 70%, 55%)"},{name:"Teal",value:"hsl(178, 70%, 45%)"},{name:"Indigo",value:"hsl(235, 70%, 58%)"},{name:"Lime",value:"hsl(85, 70%, 45%)"},{name:"Fuchsia",value:"hsl(310, 70%, 55%)"},{name:"Orange",value:"hsl(25, 80%, 52%)"},{name:"Cyan",value:"hsl(188, 75%, 48%)"}];function nt(e){const n=Math.abs(e.split("").reduce((r,t)=>r+t.charCodeAt(0),0));return Y[n%Y.length].value}const rt="tinyPatchworkAccountUrl";function it(e,n){const{documentId:r}=je(e);return`account:${encodeURIComponent(n)}/${r}`}const st=256;async function ot(e,n){const r=await createImageBitmap(e),t=Math.min(r.width,r.height),a=n??{x:(r.width-t)/2,y:(r.height-t)/2,size:t},s=Math.round(Math.min(st,a.size)),i=new OffscreenCanvas(s,s);i.getContext("2d").drawImage(r,a.x,a.y,a.size,a.size,0,0,s,s),r.close();const c=await i.convertToBlob({type:"image/webp",quality:.8});return new Uint8Array(await c.arrayBuffer())}function at(e){const n=new OffscreenCanvas(1,1).getContext("2d");return n.fillStyle="#000000",n.fillStyle=e,String(n.fillStyle)}var lt=w("<input class=settings-cropper-zoom type=range min=1 max=4 step=0.01 aria-label=Zoom>"),ct=w('<dialog class="settings-dialog settings-cropper"aria-label="Crop picture"><div class=settings-cropper-view><img alt><div class=settings-cropper-mask></div></div><div class=settings-dialog-actions><button type=button class=settings-button>Cancel</button><button type=button class=settings-button data-primary>Save');const P=240,ut=4;function dt(e){const[n,r]=L(),[t,a]=L(1),[s,i]=L({x:0,y:0}),c=()=>{const h=n();return h?P/Math.min(h.w,h.h)*t():1},g=()=>{const h=n();return{w:h.w*c(),h:h.h*c()}},l=h=>{const{w:f,h:p}=g();return{x:Math.min(0,Math.max(P-f,h.x)),y:Math.min(0,Math.max(P-p,h.y))}};function d(h){const f=h.currentTarget;r({w:f.naturalWidth,h:f.naturalHeight});const p=c();i({x:(P-f.naturalWidth*p)/2,y:(P-f.naturalHeight*p)/2})}function o(h){if(!n())return;const f=h.currentTarget;f.setPointerCapture(h.pointerId);const p={...s(),px:h.clientX,py:h.clientY},E=k=>i(l({x:p.x+k.clientX-p.px,y:p.y+k.clientY-p.py})),A=()=>{f.removeEventListener("pointermove",E),f.removeEventListener("pointerup",A),f.removeEventListener("pointercancel",A)};f.addEventListener("pointermove",E),f.addEventListener("pointerup",A),f.addEventListener("pointercancel",A)}function u(h){if(!n())return;const f=c();a(Math.min(ut,Math.max(1,h)));const p=c()/f,E=s();i(l({x:P/2-(P/2-E.x)*p,y:P/2-(P/2-E.y)*p}))}function m(){const h=s(),f=c();e.onCrop({x:-h.x/f,y:-h.y/f,size:P/f})}let v;return Pe(()=>v.showModal()),(()=>{var h=ct(),f=h.firstChild,p=f.firstChild,E=f.nextSibling,A=E.firstChild,k=A.nextSibling;h.$$click=$=>$.target===v&&e.onCancel(),h.addEventListener("cancel",$=>{$.preventDefault(),e.onCancel()});var S=v;return typeof S=="function"?G(S,h):v=h,f.addEventListener("wheel",$=>{$.preventDefault(),u(t()*(1-$.deltaY/500))}),f.$$pointerdown=o,p.addEventListener("load",d),C(p,"draggable",!1),b(h,y(T,{get when(){return n()},get children(){var $=lt();return $.$$input=x=>u(x.currentTarget.valueAsNumber),F(()=>$.value=t()),$}}),E),$e(A,"click",e.onCancel,!0),k.$$click=m,F($=>{var x=e.src,M=n()?{width:`${g().w}px`,height:`${g().h}px`,transform:`translate(${s().x}px, ${s().y}px)`}:{visibility:"hidden"},R=!n();return x!==$.e&&C(p,"src",$.e=x),$.t=Te(p,M,$.t),R!==$.a&&(k.disabled=$.a=R),$},{e:void 0,t:void 0,a:void 0}),h})()}z(["click","pointerdown","input"]);var ft=w('<button type=button class=settings-you-unpicture title="Remove picture"aria-label="Remove picture">×'),gt=w("<p class=settings-error role=alert>Couldn't read that picture"),ht=w('<section class=settings-section aria-labelledby=settings-you><h2 id=settings-you class=settings-hidden>you</h2><div class=settings-you><div class=settings-you-face><button type=button class=settings-you-picture></button><input type=file accept=image/* hidden><div class=settings-you-cursor></div></div><div class=settings-you-says><input class=settings-you-name placeholder="Your name"aria-label="Your name"autocomplete=name>'),mt=w("<span class=settings-you-nobody>+"),vt=w("<patchwork-view tool-id=contact-avatar>",!0,!1,!1),pt=w('<button type=button class=settings-pointer><svg class=settings-pointer-arrow viewBox="11 7 14 21"aria-hidden=true><g fill=#fff><path d="m12 24.4219v-16.015l11.591 11.619h-6.781l-.411.124z"></path><path d="m21.0845 25.0962-3.605 1.535-4.682-11.089 3.686-1.553z"></path></g><g><path d="m13 10.814v11.188l2.969-2.866.428-.139h4.768z"></path><path d="m19.751 24.4155-1.844.774-3.1-7.374 1.841-.775z"></path></g></svg><span class=settings-pointer-tag>'),yt=w('<div class=settings-colors role=radiogroup aria-label=Colour><label class="settings-swatch settings-swatch-custom"title="Any colour"><input type=color aria-label="Any colour">'),Ct=w("<button type=button class=settings-swatch role=radio>"),bt=w("<button type=button class=settings-button>"),wt=w("<div class=settings-cluster><button type=button class=settings-button data-leave>Sign out"),$t=w("<div class=settings-cluster><strong class=settings-ask>Sign out?</strong><button type=button class=settings-button>Cancel</button><button type=button class=settings-button data-danger>Sign out"),_t=w("<div class=settings-account>"),kt=w('<svg class=settings-icon viewBox="0 0 24 24"aria-hidden=true><rect width=14 height=14 x=8 y=8 rx=2 ry=2></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2">'),Ft=w('<svg class=settings-icon viewBox="0 0 24 24"aria-hidden=true><path d="M20 6 9 17l-5-5">');function Et(e){const n=()=>e.account()?.contactUrl,[r,t]=J(n);let a=null;async function s(){const $=n();return $?t()??e.repo.find($):(a??=e.repo.create2({"@patchwork":{type:"patchwork:contact"},type:"anonymous"}).then(x=>(x.change(M=>{M.color=nt(x.url)}),e.handle.change(M=>{M.contactUrl=x.url}),x)),a)}const i=async $=>(await s()).change(x=>$(x)),c=()=>{const $=r();return $?.type==="registered"?$.name??"":""};function g($,x){const M=x?$.trim():$;i(R=>{M.trim()&&R.type!=="registered"&&(R.type="registered"),R.type==="registered"&&(R.name??"")!==M&&(R.name=M)})}let l;const[d,o]=L(),[u,m]=L(!1),[v,h]=L(!1),f=()=>r()?.avatarUrl;function p(){const $=d();$&&URL.revokeObjectURL($.src),o(void 0)}async function E($,x){p(),m(!0),h(!1);try{const M=await ot($,x),R=await e.repo.create2({content:M,mimeType:"image/webp",name:$.name,extension:"webp"});await i(I=>{I.avatarUrl=R.url})}catch(M){console.error("[settings] couldn't use that picture",M),h(!0)}finally{m(!1)}}const A=()=>r()?.color||"#888",[k,S]=L(!1);return(()=>{var $=ht(),x=$.firstChild,M=x.nextSibling,R=M.firstChild,I=R.firstChild,B=I.nextSibling,se=B.nextSibling,oe=R.nextSibling,j=oe.firstChild;I.$$click=()=>l.click(),b(I,y(T,{get when(){return n()},get fallback(){return mt()},children:_=>(()=>{var O=vt();return O._$owner=Le(),F(()=>O.docUrl=_()),O})()})),b(R,y(T,{get when(){return f()},get children(){var _=ft();return _.$$click=()=>i(O=>{delete O.avatarUrl}),_}}),B),B.addEventListener("change",_=>{const[O]=_.currentTarget.files??[];_.currentTarget.value="",O&&o({file:O,src:URL.createObjectURL(O)})});var ae=l;return typeof ae=="function"?G(ae,B):l=B,b(se,y(xt,{get color(){return A()},get name(){return c()||"You"},get"aria-expanded"(){return k()},"aria-haspopup":"true",title:"Change colour",onClick:()=>S(_=>!_)}),null),b(se,y(T,{get when(){return k()},get children(){return y(At,{get value(){return r()?.color},onChange:_=>i(O=>{O.color=_}),onClose:()=>S(!1)})}}),null),j.$$keydown=_=>_.key==="Enter"&&_.currentTarget.blur(),j.addEventListener("change",_=>g(_.currentTarget.value,!0)),j.$$input=_=>g(_.currentTarget.value,!1),C(j,"spellcheck",!1),b(oe,y(T,{get when(){return v()},get children(){return gt()}}),null),b($,y(St,{get handle(){return e.handle},name:c}),null),b($,y(T,{get when(){return d()},children:_=>y(dt,{get src(){return _().src},onCancel:p,onCrop:O=>E(_().file,O)})}),null),F(_=>{var O=A(),le=u(),ce=f()?"Change picture":"Add a picture",ue=f()?"Change picture":"Add a picture",de=u(),fe=v()||void 0;return O!==_.e&&re(M,"--settings-you-color",_.e=O),le!==_.t&&C(R,"aria-busy",_.t=le),ce!==_.a&&C(I,"title",_.a=ce),ue!==_.o&&C(I,"aria-label",_.o=ue),de!==_.i&&(I.disabled=_.i=de),fe!==_.n&&C(j,"aria-invalid",_.n=fe),_},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),F(()=>j.value=c()),$})()}function xt(e){return(()=>{var n=pt(),r=n.firstChild,t=r.firstChild,a=t.nextSibling,s=r.nextSibling;return $e(n,"click",e.onClick,!0),b(s,()=>e.name),F(i=>{var c=e.title,g=e.title,l=e["aria-expanded"],d=e["aria-haspopup"],o=e.color,u=e.color;return c!==i.e&&C(n,"title",i.e=c),g!==i.t&&C(n,"aria-label",i.t=g),l!==i.a&&C(n,"aria-expanded",i.a=l),d!==i.o&&C(n,"aria-haspopup",i.o=d),o!==i.i&&C(a,"fill",i.i=o),u!==i.n&&re(s,"background-color",i.n=u),i},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),n})()}function At(e){let n;_e(()=>{const t=s=>{const i=s.target;n.contains(i)||i?.closest(".settings-pointer")||e.onClose()},a=s=>s.key==="Escape"&&e.onClose();document.addEventListener("pointerdown",t,!0),document.addEventListener("keydown",a),N(()=>{document.removeEventListener("pointerdown",t,!0),document.removeEventListener("keydown",a)})});const r=()=>!!e.value&&!Y.some(t=>t.value===e.value);return(()=>{var t=yt(),a=t.firstChild,s=a.firstChild,i=n;return typeof i=="function"?G(i,t):n=t,b(t,y(U,{each:Y,children:c=>(()=>{var g=Ct();return g.$$click=()=>{e.onChange(c.value),e.onClose()},F(l=>{var d=c.value,o=e.value===c.value,u=c.name,m=c.name;return d!==l.e&&re(g,"background-color",l.e=d),o!==l.t&&C(g,"aria-checked",l.t=o),u!==l.a&&C(g,"aria-label",l.a=u),m!==l.o&&C(g,"title",l.o=m),l},{e:void 0,t:void 0,a:void 0,o:void 0}),g})()}),a),s.$$input=c=>e.onChange(c.currentTarget.value),F(()=>C(a,"aria-checked",r())),F(()=>s.value=at(e.value||Y[0].value)),t})()}function St(e){const[n,r]=L(!1),[t,a]=L(!1);function s(){navigator.clipboard.writeText(it(e.handle.url,e.name())),a(!0),setTimeout(()=>a(!1),1200)}function i(){localStorage.removeItem(rt),window.location.replace("/")}const c=()=>(()=>{var l=bt();return l.$$click=s,b(l,y(T,{get when(){return t()},get fallback(){return y(Tt,{})},get children(){return y(Lt,{})}}),null),b(l,()=>t()?"Copied":"Copy account key",null),F(()=>C(l,"data-copied",t()||void 0)),l})(),g=l=>l.key==="Escape"&&r(!1);return(()=>{var l=_t();return b(l,y(T,{get when(){return!n()},get children(){var d=wt(),o=d.firstChild;return b(d,c,o),o.$$click=()=>r(!0),d}}),null),b(l,y(T,{get when(){return n()},get children(){var d=$t(),o=d.firstChild,u=o.nextSibling,m=u.nextSibling;return d.$$keydown=g,b(d,c,u),u.$$click=()=>r(!1),G(v=>queueMicrotask(()=>v.focus()),u),m.$$click=i,d}}),null),l})()}function Tt(){return kt()}function Lt(){return Ft()}z(["click","input","keydown"]);function Mt(e,n,r){const t=e.closest("patchwork-view")??e,a=new MessageChannel,s=a.port2;s.onmessage=c=>{c.data?.type==="change"&&r(c.data.value)},s.start(),t.dispatchEvent(new CustomEvent("patchwork:subscribe",{detail:{selector:n,port:a.port1},bubbles:!0,composed:!0}));let i=!1;return()=>{if(!i){i=!0;try{s.postMessage({type:"unsubscribe"})}catch{}s.close()}}}function Rt(e,n){return new Promise(r=>{const t=Mt(e,{type:"patchwork:tool-storage",toolId:n},a=>{ke(String(a??""))&&(t(),r(a))})})}function Ee(e,n,r,{init:t}={}){const a=D(()=>{const v=n()?.toolStorage?.[r];return v&&ke(v)?v:void 0}),[s,i]=L(),c=()=>a()??s(),[g,l]=J(c);let d=null,o=!0;N(()=>o=!1);async function u(){const v=l();if(v)return v;d??=Rt(e,r).then(async h=>{o&&i(h);const p=await e.repo.find(h);return t&&p.change(E=>t(E)),p});try{return await d}finally{d=null}}async function m(v){(await u())?.change(h=>v(h))}return[g,m]}var Ot=w("<button type=button role=switch class=settings-switch><span class=settings-switch-thumb>");function xe(e){return(()=>{var n=Ot();return n.$$click=()=>e.onChange(!e.checked),F(r=>{var t=e.id,a=e.checked,s=e.label;return t!==r.e&&C(n,"id",r.e=t),a!==r.t&&C(n,"aria-checked",r.t=a),s!==r.a&&C(n,"aria-label",r.a=s),r},{e:void 0,t:void 0,a:void 0}),n})()}z(["click"]);var It=w("<div class=settings-mini aria-hidden=true><div class=settings-mini-side><b>documents</b><span data-current>notes</span><span>garden plan</span><span>recipes</span></div><div class=settings-mini-main><div class=settings-mini-top><span>notes</span></div><div class=settings-mini-text><div><span class=h># tuesday</span></div><div>water the <span class=k>tomatoes</span></div><div><span class=l>[seed list]</span> <span class=c>// later"),Pt=w("<div class=settings-theme-cards role=radiogroup>"),Ut=w("<button type=button class=settings-theme-card role=radio><span class=settings-theme-name>"),Dt=w("<div class=settings-group><div class=settings-row><label class=settings-label for=settings-theme-split>Use a different theme when Computer is in dark mode"),Nt=w("<section class=settings-section aria-labelledby=settings-theme><h2 id=settings-theme>Theme"),jt=w("<div class=settings-group-block>"),zt=w("<span class=settings-now>Now"),Bt=w('<div class="settings-group-block settings-theme-mode"><h3>');const ye="theme-preferences",qt=e=>document.documentElement.getAttribute(`data-theme-${e}`)||(e==="dark"?"gloom":"lychee");function Vt(){const e=ie("patchwork:theme"),n=()=>(e.all?.()??[]).map(s=>({id:s.id,name:s.name||s.id,colorScheme:s.colorScheme})).sort((s,i)=>s.name.localeCompare(i.name)),[r,t]=L(n()),a=e.on("changed",()=>{t(n())});return N(()=>a?.()),r}function Yt(){const e=matchMedia("(prefers-color-scheme: dark)"),[n,r]=L(e.matches?"dark":"light"),t=()=>r(e.matches?"dark":"light");return e.addEventListener("change",t),N(()=>e.removeEventListener("change",t)),n}function Ht(e){return(()=>{var n=It();return F(()=>C(n,"theme",e.id)),n})()}function Ce(e){return(()=>{var n=Pt();return b(n,y(U,{get each(){return e.themes},children:r=>(()=>{var t=Ut(),a=t.firstChild;return t.$$click=()=>e.onChoose(r.id),b(t,y(Ht,{get id(){return r.id}}),a),b(a,()=>r.name),F(()=>C(t,"aria-checked",e.chosen===r.id)),t})()})),F(()=>C(n,"aria-label",e.label)),n})()}function Kt(e){const n=Vt(),r=Yt(),[t,a]=Ee(e.element,e.account,ye,{init(o){o["@patchwork"]||(o["@patchwork"]={type:ye})}}),s=o=>t()?.[o]||qt(o),[i,c]=L(),g=D(()=>i()??s("light")!==s("dark")),l=(o,u)=>a(m=>{o!=="dark"&&(m.light=u),o!=="light"&&(m.dark=u)}),d=o=>[...n()].sort((u,m)=>+((u.colorScheme??o)!==o)-+((m.colorScheme??o)!==o));return(()=>{var o=Nt();return o.firstChild,b(o,y(T,{get when(){return n().length},get children(){var u=Dt(),m=u.firstChild;return m.firstChild,b(u,y(T,{get when(){return g()},get fallback(){return(()=>{var v=jt();return b(v,y(Ce,{get themes(){return n()},get chosen(){return s(r())},onChoose:h=>l("both",h),label:"Theme"})),v})()},get children(){return y(U,{each:["light","dark"],children:v=>(()=>{var h=Bt(),f=h.firstChild;return b(f,v==="light"?"Light mode":"Dark mode",null),b(f,y(T,{get when(){return r()===v},get children(){return zt()}}),null),b(h,y(Ce,{get themes(){return d(v)},get chosen(){return s(v)},onChoose:p=>l(v,p),label:v==="light"?"Light mode theme":"Dark mode theme"}),null),h})()})}}),m),b(m,y(xe,{id:"settings-theme-split",get checked(){return g()},onChange:v=>{c(v),v||l("both",s(r()))}}),null),u}}),null),o})()}z(["click"]);var Wt=w("<section class=settings-section aria-labelledby=settings-frame><h2 id=settings-frame>Frame</h2><div class=settings-group><div class=settings-group-block><div class=settings-segmented role=radiogroup aria-label=Frame>"),Zt=w("<button type=button class=settings-segment role=radio>"),Gt=w("<section class=settings-section aria-labelledby=settings-titlebar><h2 id=settings-titlebar>Title bar</h2><div class=settings-group><div class=settings-group-block>"),Jt=w('<div class=settings-strip-add><form class=settings-cluster><input class="settings-input settings-code"placeholder="Tool id"aria-label="Tool id"><button type=submit class=settings-button>Add</button><button type=button class=settings-button data-primary>Done'),Xt=w("<div class=settings-strip><ol class=settings-strip-items>"),Qt=w("<li class=settings-strip-item><span></span><button type=button class=settings-strip-remove>×"),en=w("<button type=button class=settings-button>Add…"),tn=w("<button type=button class=settings-button>+ ");const nn=250;function be(e){const n=ie(e),r=()=>(n.all?.()??[]).slice(),[t,a]=L(r()),s=n.on("changed",()=>{a(r())});return N(()=>s?.()),t}const we=(e,n)=>e.filter(r=>!r.unlisted&&(r.tags??[]).includes(n)).map(r=>({id:r.id,name:r.name||r.id})).sort((r,t)=>r.name.localeCompare(t.name)),rn=e=>typeof e=="string"?e:e[0];function sn(e,n){const r=new Set(n.map(t=>t.id));for(let t=e.parentElement;t;t=t.parentElement){const a=t.tagName==="PATCHWORK-VIEW"?t.getAttribute("tool-id"):null;if(a&&r.has(a))return a}}function on(e){const n=be("patchwork:tool"),r=be("patchwork:component"),t=D(()=>new Map([...r(),...n()].map(o=>[o.id,o.name||o.id]))),a=D(()=>we(n(),"frame-tool")),s=()=>e.account()?.frameToolId??sn(e.element,a()),i=D(()=>we(n(),"titlebar-tool")),[c,g]=J(()=>e.account()?.tools?.threepane),l=()=>c()?.doctitle?.tools?.map(rn);function d(o){s()!==o&&(e.handle.change(u=>{u.frameToolId=o}),setTimeout(async()=>{await e.repo.flush().catch(()=>null),window.location.reload()},nn))}return[y(T,{get when(){return a().length},get children(){var o=Wt(),u=o.firstChild,m=u.nextSibling,v=m.firstChild,h=v.firstChild;return b(h,y(U,{get each(){return a()},children:f=>(()=>{var p=Zt();return p.$$click=()=>d(f.id),b(p,()=>f.name),F(()=>C(p,"aria-checked",s()===f.id)),p})()})),o}}),y(T,{get when(){return g()},children:o=>(()=>{var u=Gt(),m=u.firstChild,v=m.nextSibling,h=v.firstChild;return b(h,y(an,{get values(){return l()??[]},get options(){return i()},get names(){return t()},setValues:f=>o().change(p=>{p.doctitle??={},p.doctitle.tools=f.slice()})})),u})()})]}function an(e){const[n,r]=L(!1),[t,a]=L(""),[s,i]=L(null),[c,g]=L(null),l=m=>e.names.get(m)??m,d=D(()=>e.options.filter(m=>!e.values.includes(m.id))),o=m=>{const v=m.trim();v&&!e.values.includes(v)&&e.setValues([...e.values,v])};function u(){const m=s(),v=c();if(i(null),g(null),m==null||v==null||m===v)return;const h=e.values.slice(),[f]=h.splice(m,1);h.splice(v,0,f),e.setValues(h)}return(()=>{var m=Xt(),v=m.firstChild;return b(v,y(U,{get each(){return e.values},children:(h,f)=>(()=>{var p=Qt(),E=p.firstChild,A=E.nextSibling;return p.addEventListener("dragend",u),p.addEventListener("dragover",k=>{k.preventDefault(),k.dataTransfer.dropEffect="move",g(f())}),p.addEventListener("dragstart",k=>{k.dataTransfer.effectAllowed="move",i(f()),g(f())}),C(p,"draggable",!0),b(E,()=>l(h)),A.$$click=()=>e.setValues(e.values.filter((k,S)=>S!==f())),F(k=>{var S=s()===f()?"":void 0,$=c()===f()&&s()!==f()?"":void 0,x=`Remove ${l(h)}`;return S!==k.e&&C(p,"data-dragging",k.e=S),$!==k.t&&C(p,"data-over",k.t=$),x!==k.a&&C(A,"aria-label",k.a=x),k},{e:void 0,t:void 0,a:void 0}),p})()})),b(m,y(T,{get when(){return n()},get fallback(){return(()=>{var h=en();return h.$$click=()=>r(!0),h})()},get children(){var h=Jt(),f=h.firstChild,p=f.firstChild,E=p.nextSibling,A=E.nextSibling;return h.$$keydown=k=>k.key==="Escape"&&r(!1),b(h,y(U,{get each(){return d()},children:k=>(()=>{var S=tn();return S.firstChild,S.$$click=()=>o(k.id),b(S,()=>k.name,null),S})()}),f),f.addEventListener("submit",k=>{k.preventDefault(),o(t()),a("")}),p.$$input=k=>a(k.currentTarget.value),C(p,"spellcheck",!1),A.$$click=()=>r(!1),F(()=>E.disabled=!t().trim()),F(()=>p.value=t()),h}}),null),m})()}z(["click","keydown","input"]);const ln="patchwork:settings",cn=new Set(["boolean","string","number","enum","color"]),un=/^[A-Za-z_$][\w$-]*(\.[A-Za-z_$][\w$-]*)*$/,dn=new Set(["__proto__","prototype","constructor"]),H=e=>e!==null&&typeof e=="object"&&!Array.isArray(e);function Ae(e){return un.test(e)&&!e.split(".").some(n=>dn.has(n))}function fn(e){if(!H(e)||!H(e.properties))return[];const n=[];for(const[r,t]of Object.entries(e.properties)){if(!Ae(r)){console.warn(`[settings] ${e.id}: "${r}" isn't a usable key`);continue}if(!H(t)||!cn.has(t.type)){console.warn(`[settings] ${e.id}.${r}: unknown setting type`,t);continue}if(t.type==="enum"&&!Array.isArray(t.options)){console.warn(`[settings] ${e.id}.${r}: an enum needs options`);continue}n.push([r,t])}return n}function gn(e){return e.options.map(n=>typeof n=="string"?{value:n,label:n}:{value:n.value,label:n.label??n.value})}function Se(e,n){let r=e;for(const t of n.split(".")){if(!H(r))return;r=r[t]}return r}function hn(e,n,r){const t=Se(e,n);return t??r.default}function mn(e,n,r){if(!Ae(n))throw new Error(`[settings] "${n}" isn't a usable key`);const t=n.split("."),a=t.pop();let s=e;for(const i of t){if(!H(s[i])){if(r===void 0)return;s[i]={}}s=s[i]}r===void 0?delete s[a]:s[a]=r}function vn(e,n){if(e.trim()==="")return;let r=Number(e);if(Number.isFinite(r))return n.min!==void 0&&(r=Math.max(n.min,r)),n.max!==void 0&&(r=Math.min(n.max,r)),r}var pn=w("<section class=settings-section><h2></h2><div class=settings-group>"),yn=w("<input class=settings-color-input type=color>"),Cn=w('<textarea class="settings-input settings-grow"rows=3>'),bn=w('<input class="settings-input settings-grow">'),wn=w("<span class=settings-unit>"),$n=w('<span class=settings-cluster><input class="settings-input settings-number"type=number>'),_n=w("<option value>—"),kn=w("<select class=settings-input>"),Fn=w("<option>"),En=w('<button type=button class=settings-reset title="Back to the default">Reset'),xn=w("<div class=settings-row><label class=settings-label></label><span class=settings-control>");function An(){const e=ie(ln),n=()=>(e.all?.()??[]).filter(s=>typeof s?.id=="string").sort((s,i)=>String(s.name??s.id).localeCompare(String(i.name??i.id))),[r,t]=L(n()),a=e.on("changed",()=>{t(n())});return N(()=>a?.()),r}function Sn(e){const n=An();return y(U,{get each(){return n()},children:r=>y(Tn,{plugin:r,get element(){return e.element},get account(){return e.account}})})}function Tn(e){const n=D(()=>fn(e.plugin)),[r,t]=Ee(e.element,e.account,e.plugin.id),a=(i,c)=>t(g=>mn(g,i,c)),s=`settings-plugin-${e.plugin.id.replace(/[^\w-]/g,"-")}`;return y(T,{get when(){return n().length},get children(){var i=pn(),c=i.firstChild,g=c.nextSibling;return C(i,"aria-labelledby",s),C(c,"id",s),b(c,()=>e.plugin.name||e.plugin.id),b(g,y(U,{get each(){return n()},children:([l,d])=>y(Ln,{get id(){return`${s}-${l.replace(/\./g,"-")}`},name:l,setting:d,get value(){return hn(r(),l,d)},get chosen(){return Se(r(),l)!==void 0},set:o=>a(l,o)})})),F(()=>C(c,"title",e.plugin.description)),i}})}function Ln(e){const n=()=>e.setting.title||e.name,r=a=>a==null?"":String(a),t=()=>y(Ue,{get children(){return[y(q,{get when(){return e.setting.type==="boolean"},get children(){return y(xe,{get id(){return e.id},get checked(){return e.value===!0},onChange:a=>e.set(a)})}}),y(q,{get when(){return X(()=>e.setting.type==="string")()&&e.setting},children:a=>{const s=a();return s.multiline?(()=>{var i=Cn();return i.addEventListener("change",c=>e.set(c.currentTarget.value)),F(c=>{var g=e.id,l=s.placeholder;return g!==c.e&&C(i,"id",c.e=g),l!==c.t&&C(i,"placeholder",c.t=l),c},{e:void 0,t:void 0}),F(()=>i.value=r(e.value)),i})():(()=>{var i=bn();return i.addEventListener("change",c=>e.set(c.currentTarget.value)),F(c=>{var g=e.id,l=s.placeholder;return g!==c.e&&C(i,"id",c.e=g),l!==c.t&&C(i,"placeholder",c.t=l),c},{e:void 0,t:void 0}),F(()=>i.value=r(e.value)),i})()}}),y(q,{get when(){return X(()=>e.setting.type==="number")()&&e.setting},children:a=>{const s=a();return(()=>{var i=$n(),c=i.firstChild;return c.addEventListener("change",g=>{const l=vn(g.currentTarget.value,s);e.set(l),g.currentTarget.value=r(l??s.default)}),b(i,y(T,{get when(){return s.unit},get children(){var g=wn();return b(g,()=>s.unit),g}}),null),F(g=>{var l=e.id,d=s.min,o=s.max,u=s.step??"any";return l!==g.e&&C(c,"id",g.e=l),d!==g.t&&C(c,"min",g.t=d),o!==g.a&&C(c,"max",g.a=o),u!==g.o&&C(c,"step",g.o=u),g},{e:void 0,t:void 0,a:void 0,o:void 0}),F(()=>c.value=r(e.value)),i})()}}),y(q,{get when(){return X(()=>e.setting.type==="enum")()&&e.setting},children:a=>{const s=a();return(()=>{var i=kn();return i.addEventListener("change",c=>e.set(c.currentTarget.value||void 0)),b(i,y(T,{get when(){return s.default===void 0},get children(){var c=_n();return F(()=>c.selected=!e.value),c}}),null),b(i,y(U,{get each(){return gn(s)},children:c=>(()=>{var g=Fn();return b(g,()=>c.label),F(()=>g.selected=e.value===c.value),F(()=>g.value=c.value),g})()}),null),F(()=>C(i,"id",e.id)),i})()}}),y(q,{get when(){return e.setting.type==="color"},get children(){var a=yn();return a.$$input=s=>e.set(s.currentTarget.value),F(()=>C(a,"id",e.id)),F(()=>a.value=r(e.value)||"#000000"),a}})]}});return(()=>{var a=xn(),s=a.firstChild,i=s.nextSibling;return b(s,n),b(i,y(T,{get when(){return e.chosen},get children(){var c=En();return c.$$click=()=>e.set(void 0),F(()=>C(c,"aria-label",`Reset ${n()}`)),c}}),null),b(i,t,null),F(c=>{var g=e.setting.type,l=e.id,d=e.setting.description;return g!==c.e&&C(a,"data-type",c.e=g),l!==c.t&&C(s,"for",c.t=l),d!==c.a&&C(s,"title",c.a=d),c},{e:void 0,t:void 0,a:void 0}),a})()}z(["input","click"]);var Mn=w("<div class=settings><div class=settings-page>");function Rn(e){const[n]=J(()=>e.handle.url),r=e.element.repo;return(()=>{var t=Mn(),a=t.firstChild;return b(a,y(T,{get when(){return n()},get children(){return[y(Et,{get handle(){return e.handle},account:n,repo:r}),y(Kt,{get element(){return e.element},account:n}),y(on,{get element(){return e.element},get handle(){return e.handle},account:n,repo:r}),y(Sn,{get element(){return e.element},account:n})]}})),t})()}function Nn(e,n){const r=Me(()=>y(Fe.Provider,{get value(){return n.repo},get children(){return y(Rn,{handle:e,element:n})}}),n);return()=>r()}export{Nn as default};
|
|
3
|
+
//# sourceMappingURL=Settings-Do_cRfv4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Settings-Do_cRfv4.js","sources":["../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js","../../node_modules/.pnpm/debug@4.4.3_supports-color@7.2.0/node_modules/debug/src/common.js","../../node_modules/.pnpm/debug@4.4.3_supports-color@7.2.0/node_modules/debug/src/browser.js","../../node_modules/.pnpm/cabbages@0.2.11_supports-color@7.2.0/node_modules/cabbages/output/cabbages.js","../../node_modules/.pnpm/solid-automerge@2.1.1_@automerge+automerge-repo@2.6.0-subduction.14_supports-color@7.2._f9145988a6c68487cd995f8979290564/node_modules/solid-automerge/out/autoproduce.js","../../node_modules/.pnpm/solid-automerge@2.1.1_@automerge+automerge-repo@2.6.0-subduction.14_supports-color@7.2._f9145988a6c68487cd995f8979290564/node_modules/solid-automerge/out/makeDocumentProjection.js","../../node_modules/.pnpm/@solid-primitives+utils@6.4.1_solid-js@1.9.13/node_modules/@solid-primitives/utils/dist/index.js","../../node_modules/.pnpm/solid-automerge@2.1.1_@automerge+automerge-repo@2.6.0-subduction.14_supports-color@7.2._f9145988a6c68487cd995f8979290564/node_modules/solid-automerge/out/createDocumentProjection.js","../../node_modules/.pnpm/solid-automerge@2.1.1_@automerge+automerge-repo@2.6.0-subduction.14_supports-color@7.2._f9145988a6c68487cd995f8979290564/node_modules/solid-automerge/out/context.js","../../node_modules/.pnpm/solid-automerge@2.1.1_@automerge+automerge-repo@2.6.0-subduction.14_supports-color@7.2._f9145988a6c68487cd995f8979290564/node_modules/solid-automerge/out/useDocHandle.js","../../node_modules/.pnpm/solid-automerge@2.1.1_@automerge+automerge-repo@2.6.0-subduction.14_supports-color@7.2._f9145988a6c68487cd995f8979290564/node_modules/solid-automerge/out/useDocument.js","../../src/you/contact.ts","../../src/you/Cropper.tsx","../../src/you/You.tsx","../../src/storage.ts","../../src/Toggle.tsx","../../src/theme/Theme.tsx","../../src/frame/Frame.tsx","../../src/schema.ts","../../src/contributed/Contributed.tsx","../../src/Settings.tsx"],"sourcesContent":["/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","// cabbages.ts\nimport debug from \"debug\";\nvar log = debug(\"cabbages\");\nfunction pojo(target) {\n return typeof target == \"object\" && target != null && Object.getPrototypeOf(target) == Object.prototype;\n}\nfunction copy(value) {\n if (Array.isArray(value)) return value.map(copy);\n if (pojo(value)) {\n let result = {};\n for (let key of Object.keys(value)) result[key] = copy(value[key]);\n return result;\n }\n if (value instanceof Date) return new Date(value);\n if (ArrayBuffer.isView(value)) return value.slice();\n return value;\n}\nvar BLOCK_MARKER = \"\\uFFFC\";\nfunction apply(target, ...rest) {\n if (rest.length == 0) {\n log(\"empty patch\");\n return;\n }\n const [path, range, val] = rest;\n let p = [...path];\n while (true) {\n let key = p.shift();\n if (!p.length) {\n const RANGE_ARRAY = Array.isArray(range);\n if (pojo(target) && RANGE_ARRAY && typeof key == \"undefined\" && typeof range[0] == \"string\") {\n delete target[range[0]];\n return;\n }\n if (RANGE_ARRAY || typeof range == \"number\") {\n if (typeof key == \"undefined\") {\n throw new Error(\"cant treat top level as a seq\");\n }\n key = key;\n let [start, end] = Array.isArray(range) ? range : [range, range + 1];\n const ZERO_LENGTH = Array.isArray(range) && range.length == 0;\n if (!ZERO_LENGTH && (start == null || end == null)) {\n throw new RangeError(\"it's all or nothing, no half measures\");\n }\n const DELETE = typeof val == \"undefined\";\n const INSERT = start === end && !DELETE;\n const APPEND = ZERO_LENGTH && !DELETE;\n const REPLACE = !INSERT && !DELETE && !APPEND;\n if (typeof target[key] == \"undefined\") {\n if (typeof target == \"string\") {\n return;\n } else if (typeof val == \"string\") {\n target[key] = \"\";\n } else {\n target[key] = [];\n }\n }\n let seq = target[key];\n if (Array.isArray(seq)) {\n if (APPEND) {\n Array.isArray(val) ? seq.push(...val) : seq.push(val);\n return;\n }\n if (INSERT || REPLACE) {\n Array.isArray(val) ? seq.splice(start, end - start, ...val) : seq.splice(start, end - start, val);\n return;\n }\n if (DELETE) {\n seq.splice(start, end - start);\n return;\n }\n throw new Error(\"i don't know what happened\");\n }\n if (typeof seq == \"string\") {\n if (APPEND) {\n target[key] = seq + val;\n return;\n }\n if (REPLACE || INSERT) {\n target[key] = seq.slice(0, start) + (typeof val == \"string\" ? val : val.map(\n (n) => typeof n == \"string\" ? n : BLOCK_MARKER\n ).join(\"\")) + seq.slice(end);\n return;\n }\n if (DELETE) {\n target[key] = seq.slice(0, start) + seq.slice(end);\n return;\n }\n throw new Error(\"i don't know what happened\");\n }\n if (pojo(seq) && RANGE_ARRAY && typeof range[0] == \"string\") {\n delete seq[range[0]];\n return;\n }\n throw new Error(\"not implemented\");\n }\n if (typeof key == \"undefined\") {\n if (typeof range != \"string\") {\n throw new Error(`can't index top-level map with ${range}`);\n }\n if (typeof val == \"undefined\") {\n delete target[range];\n } else {\n target[range] = val;\n }\n return;\n }\n if (typeof target[key] == \"undefined\") {\n target[key] = {};\n }\n if (RANGE_ARRAY) {\n let [a, b] = range;\n if (a != null && b != null) {\n if (typeof val == \"undefined\" && a != null && b != null) {\n delete target[key][a || b];\n } else {\n target[key][a || b] = val;\n }\n }\n } else {\n if (typeof val == \"undefined\") {\n delete target[key][range];\n } else if (typeof target[key] == \"string\") {\n return;\n } else {\n target[key][range] = val;\n }\n }\n return;\n }\n if (typeof key == \"undefined\") {\n throw new Error(\"cant treat top level as a seq\");\n }\n key = key;\n let nextkey = p[0];\n if (typeof target[key] == \"undefined\") {\n if (typeof nextkey == \"string\") {\n target[key] = {};\n } else if (typeof nextkey == \"number\") {\n target[key] = [];\n } else {\n throw new Error(`can't go down this road ${target}.${key}.${nextkey}`);\n }\n }\n target = target[key];\n if (typeof target == \"string\") {\n log(\"ignoring patch to a block marker in a string\", path, range);\n return;\n }\n if (target == null || typeof target != \"object\" && typeof target != \"function\") {\n throw new TypeError(\n `invalid path ${JSON.stringify(path)}: ${String(key)} is ${target}`\n );\n }\n }\n}\nvar patch = apply;\nfunction get(obj, key) {\n for (let p = 0; p < key.length; p++) {\n obj = obj ? obj[key[p]] : void 0;\n }\n return obj;\n}\nfunction fromAutomerge(autopatch, payload) {\n const path = autopatch.path.slice(0, -1);\n const key = autopatch.path[autopatch.path.length - 1];\n switch (autopatch.action) {\n case \"mark\":\n case \"unmark\":\n log(\n `skipping ${autopatch.action} because it doesn't affect material reality`\n );\n return [];\n case \"inc\":\n if (payload) {\n return [path, key, get(payload.patchInfo.after, autopatch.path)];\n } else {\n throw new Error(\n `can't apply ${autopatch.action} without payload argument`\n );\n }\n case \"conflict\":\n if (payload) {\n return [path, key, get(payload.patchInfo.after, autopatch.path)];\n } else {\n throw new Error(\n `can't apply ${autopatch.action} without payload argument`\n );\n }\n case \"del\": {\n return typeof key == \"string\" ? [path, key] : [path, [key, key + (autopatch.length || 1)]];\n }\n case \"insert\": {\n return [\n path,\n [key, key],\n copy(autopatch.values)\n ];\n }\n case \"splice\": {\n return [path, [key, key], [autopatch.value]];\n }\n case \"put\": {\n return [path, key, copy(autopatch.value)];\n }\n }\n}\nexport {\n apply,\n fromAutomerge,\n patch,\n pojo\n};\n","\"use strict\";\nimport { apply, fromAutomerge } from \"cabbages\";\nexport default function autoproduce(payload) {\n return (doc) => {\n for (let patch of payload.patches) {\n apply(doc, ...fromAutomerge(patch, payload));\n }\n };\n}\n//# sourceMappingURL=autoproduce.js.map\n","\"use strict\";\nimport { onCleanup } from \"solid-js\";\nimport autoproduce from \"./autoproduce.js\";\nimport { createStore, produce, reconcile } from \"solid-js/store\";\nconst cache = /* @__PURE__ */ new WeakMap();\nexport default function makeDocumentProjection(handle) {\n onCleanup(() => {\n const item = cache.get(handle);\n if (!item) return;\n if (!item.refs--) {\n item.cleanup();\n }\n });\n if (cache.has(handle)) {\n const item = cache.get(handle);\n item.refs++;\n return item.store;\n }\n const [doc, set] = createStore(structuredClone(handle.doc()));\n cache.set(handle, {\n refs: 0,\n store: doc,\n cleanup() {\n handle.off(\"change\", patch);\n handle.off(\"delete\", ondelete);\n cache.delete(handle);\n }\n });\n function patch(payload) {\n if (payload.scopeReplaced) {\n set(reconcile(payload.doc ?? {}));\n return;\n }\n set(produce(autoproduce(payload)));\n }\n function ondelete() {\n set(reconcile({}));\n }\n handle.on(\"change\", patch);\n handle.on(\"delete\", ondelete);\n return doc;\n}\n//# sourceMappingURL=makeDocumentProjection.js.map\n","import { getOwner, onCleanup, createSignal, untrack, sharedConfig, onMount, DEV, equalFn, } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nexport * from \"./types.js\";\n//\n// GENERAL HELPERS:\n//\nexport { isServer };\nexport const isClient = !isServer;\nexport const isDev = isClient && !!DEV;\nexport const isProd = !isDev;\n/** no operation */\nexport const noop = (() => void 0);\nexport const trueFn = () => true;\nexport const falseFn = () => false;\n/** @deprecated use {@link equalFn} from \"solid-js\" */\nexport const defaultEquals = equalFn;\nexport const EQUALS_FALSE_OPTIONS = { equals: false };\nexport const INTERNAL_OPTIONS = { internal: true };\n/**\n * Check if the value is an instance of ___\n */\nexport const ofClass = (v, c) => v instanceof c || (v && v.constructor === c);\n/** Check if value is typeof \"object\" or \"function\" */\nexport function isObject(value) {\n return value !== null && (typeof value === \"object\" || typeof value === \"function\");\n}\nexport const isNonNullable = (i) => i != null;\nexport const filterNonNullable = (arr) => arr.filter(isNonNullable);\nexport const compare = (a, b) => (a < b ? -1 : a > b ? 1 : 0);\n/**\n * Check shallow array equality\n */\nexport const arrayEquals = (a, b) => a === b || (a.length === b.length && a.every((e, i) => e === b[i]));\n/**\n * Returns a function that will call all functions in the order they were chained with the same arguments.\n */\nexport function chain(callbacks) {\n return (...args) => {\n for (const callback of callbacks)\n callback && callback(...args);\n };\n}\n/**\n * Returns a function that will call all functions in the reversed order with the same arguments.\n */\nexport function reverseChain(callbacks) {\n return (...args) => {\n for (let i = callbacks.length - 1; i >= 0; i--) {\n const callback = callbacks[i];\n callback && callback(...args);\n }\n };\n}\nexport const clamp = (n, min, max) => Math.min(Math.max(n, min), max);\n/**\n * Accesses the value of a MaybeAccessor\n * @example\n * ```ts\n * access(\"foo\") // => \"foo\"\n * access(() => \"foo\") // => \"foo\"\n * ```\n */\nexport const access = (v) => typeof v === \"function\" && !v.length ? v() : v;\nexport const asArray = (value) => Array.isArray(value) ? value : value ? [value] : [];\n/**\n * Access an array of MaybeAccessors\n * @example\n * const list = [1, 2, () => 3)] // T: MaybeAccessor<number>[]\n * const newList = accessArray(list) // T: number[]\n */\nexport const accessArray = (list) => list.map(v => access(v));\n/**\n * Run the function if the accessed value is not `undefined` nor `null`\n * @param value\n * @param fn\n */\nexport const withAccess = (value, fn) => {\n const _value = access(value);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n typeof _value != null && fn(_value);\n};\nexport const asAccessor = (v) => (typeof v === \"function\" ? v : () => v);\n/** If value is a function – call it with a given arguments – otherwise get the value as is */\nexport function accessWith(valueOrFn, ...args) {\n return typeof valueOrFn === \"function\" ? valueOrFn(...args) : valueOrFn;\n}\nexport function defer(deps, fn, initialValue) {\n const isArray = Array.isArray(deps);\n let prevInput;\n let shouldDefer = true;\n return prevValue => {\n let input;\n if (isArray) {\n input = Array(deps.length);\n for (let i = 0; i < deps.length; i++)\n input[i] = deps[i]();\n }\n else\n input = deps();\n if (shouldDefer) {\n shouldDefer = false;\n prevInput = input;\n return initialValue;\n }\n const result = untrack(() => fn(input, prevInput, prevValue));\n prevInput = input;\n return result;\n };\n}\n/**\n * Get entries of an object\n */\nexport const entries = Object.entries;\n/**\n * Get keys of an object\n */\nexport const keys = Object.keys;\n/**\n * Solid's `onCleanup` that doesn't warn in development if used outside of a component.\n */\nexport const tryOnCleanup = isDev\n ? fn => (getOwner() ? onCleanup(fn) : fn)\n : onCleanup;\nexport const createCallbackStack = () => {\n let stack = [];\n const clear = () => (stack = []);\n return {\n push: (...callbacks) => stack.push(...callbacks),\n execute(arg0, arg1, arg2, arg3) {\n stack.forEach(cb => cb(arg0, arg1, arg2, arg3));\n clear();\n },\n clear,\n };\n};\n/**\n * Group synchronous function calls.\n * @param fn\n * @returns `fn`\n */\nexport function createMicrotask(fn) {\n let calls = 0;\n let args;\n onCleanup(() => (calls = 0));\n return (...a) => {\n (args = a), calls++;\n queueMicrotask(() => --calls === 0 && fn(...args));\n };\n}\n/**\n * A hydratable version of the {@link createSignal}. It will use the serverValue on the server and the update function on the client. If initialized during hydration it will use serverValue as the initial value and update it once hydration is complete.\n *\n * @param serverValue initial value of the state on the server\n * @param update called once on the client or on hydration to initialize the value\n * @param options {@link SignalOptions}\n * @returns\n * ```ts\n * [state: Accessor<T>, setState: Setter<T>]\n * ```\n * @see {@link createSignal}\n */\nexport function createHydratableSignal(serverValue, update, options) {\n if (isServer) {\n return createSignal(serverValue, options);\n }\n if (sharedConfig.context) {\n const [state, setState] = createSignal(serverValue, options);\n onMount(() => setState(() => update()));\n return [state, setState];\n }\n return createSignal(update(), options);\n}\n/** @deprecated use {@link createHydratableSignal} instead */\nexport const createHydrateSignal = createHydratableSignal;\n/**\n * Handle items removed and added to the array by diffing it by refference.\n *\n * @param current new array instance\n * @param prev previous array copy\n * @param handleAdded called once for every added item to array\n * @param handleRemoved called once for every removed from array\n */\nexport function handleDiffArray(current, prev, handleAdded, handleRemoved) {\n const currLength = current.length;\n const prevLength = prev.length;\n let i = 0;\n if (!prevLength) {\n for (; i < currLength; i++)\n handleAdded(current[i]);\n return;\n }\n if (!currLength) {\n for (; i < prevLength; i++)\n handleRemoved(prev[i]);\n return;\n }\n for (; i < prevLength; i++) {\n if (prev[i] !== current[i])\n break;\n }\n let prevEl;\n let currEl;\n prev = prev.slice(i);\n current = current.slice(i);\n for (prevEl of prev) {\n if (!current.includes(prevEl))\n handleRemoved(prevEl);\n }\n for (currEl of current) {\n if (!prev.includes(currEl))\n handleAdded(currEl);\n }\n}\n// ─── String transforms ────────────────────────────────────────────────────────\n/**\n * Parse a string as a single JSON value.\n *\n * ```ts\n * const { data } = createSSE<{ status: string }>(url, { transform: json });\n * ```\n */\nexport const json = (raw) => JSON.parse(raw);\n/**\n * Parse a string as newline-delimited JSON (NDJSON / JSON Lines).\n *\n * Each non-empty line is parsed as a separate JSON value and returned as an array.\n *\n * ```ts\n * const { data } = createSSE<TickEvent[]>(url, { transform: ndjson });\n * // data() === [{ id: 1, type: \"tick\" }, { id: 2, type: \"tick\" }]\n * ```\n */\nexport const ndjson = (raw) => raw\n .split(\"\\n\")\n .filter(line => line !== \"\")\n .map(line => JSON.parse(line));\n/**\n * Split a string into individual lines, returning a `string[]`. Empty lines are filtered out.\n *\n * ```ts\n * const { data } = createSSE<string[]>(url, { transform: lines });\n * // data() === [\"line one\", \"line two\"]\n * ```\n */\nexport const lines = (raw) => raw.split(\"\\n\").filter(line => line !== \"\");\n/**\n * Parse a string as a number using `Number()` semantics.\n *\n * Note: `\"\"` → `0`, non-numeric strings → `NaN`.\n *\n * ```ts\n * const { data } = createSSE<number>(url, { transform: number });\n * // data() === 42\n * ```\n */\nexport const number = (raw) => Number(raw);\nexport function safe(transform, fallback) {\n return (raw) => {\n try {\n return transform(raw);\n }\n catch {\n return fallback;\n }\n };\n}\n/**\n * Compose two transforms into one: the output of `a` is passed as the input of `b`.\n *\n * ```ts\n * const { data } = createSSE<RawEvent[]>(url, {\n * transform: pipe(ndjson<RawEvent>, rows => rows.filter(r => r.type === \"tick\")),\n * });\n * ```\n */\nexport function pipe(a, b) {\n return (raw) => b(a(raw));\n}\n","\"use strict\";\nimport { createMemo } from \"solid-js\";\nimport makeDocumentProjection from \"./makeDocumentProjection.js\";\nimport { access } from \"@solid-primitives/utils\";\nexport default function createDocumentProjection(handle) {\n const projection = createMemo(\n () => access(handle) && makeDocumentProjection(access(handle))\n );\n return projection;\n}\n//# sourceMappingURL=createDocumentProjection.js.map\n","\"use strict\";\nimport { createContext } from \"solid-js\";\nexport const RepoContext = createContext(\n null\n);\n//# sourceMappingURL=context.js.map\n","\"use strict\";\nimport { createEffect, createResource, useContext } from \"solid-js\";\nimport { access } from \"@solid-primitives/utils\";\nimport { RepoContext } from \"./context.js\";\nexport default function useDocHandle(url, options) {\n const contextRepo = useContext(RepoContext);\n if (!options?.repo && !contextRepo) {\n throw new Error(\"use outside <RepoContext> requires options.repo\");\n }\n const repo = options?.repo || contextRepo;\n function getExistingHandle() {\n if (options?.[\"~skipInitialValue\"]) return void 0;\n const unwrappedURL = access(url);\n if (!unwrappedURL) return void 0;\n return peekReadyHandle(repo, unwrappedURL);\n }\n const [handle, { mutate }] = createResource(\n url,\n (url2) => repo.find(url2),\n {\n initialValue: getExistingHandle()\n }\n );\n createEffect(() => {\n if (!access(url)) {\n mutate();\n }\n });\n return handle;\n}\nfunction isQueryable(repo) {\n return typeof repo.query == \"function\";\n}\nfunction peekReadyHandle(repo, url) {\n if (isQueryable(repo)) {\n const state2 = repo.query(url).state();\n return state2.status == \"ready\" ? state2.handle : void 0;\n }\n const state = repo.findWithProgress(url).peek();\n return state.state == \"ready\" ? state.handle : void 0;\n}\n//# sourceMappingURL=useDocHandle.js.map\n","\"use strict\";\nimport createDocumentProjection from \"./createDocumentProjection.js\";\nimport useDocHandle from \"./useDocHandle.js\";\nexport default function useDocument(url, options) {\n const handle = useDocHandle(url, options);\n return [createDocumentProjection(handle), handle];\n}\n//# sourceMappingURL=useDocument.js.map\n","// the bits of account/ the \"you\" section needs, copied rather than linked\n// (see CLAUDE.md): the contact doc's shape, the presence palette, and the\n// account key you copy to use this account somewhere else\nimport { parseAutomergeUrl, type AutomergeUrl } from \"@automerge/automerge-repo/slim\";\n\nexport type ContactDoc =\n | { type: \"anonymous\"; color?: string }\n | { type: \"registered\"; name: string; avatarUrl?: AutomergeUrl; color?: string };\n\nexport type AccountDoc = {\n contactUrl?: AutomergeUrl;\n rootFolderUrl?: AutomergeUrl;\n moduleSettingsUrl?: AutomergeUrl;\n frameToolId?: string;\n tools?: Record<string, AutomergeUrl>;\n toolStorage?: Record<string, AutomergeUrl>;\n};\n\n// account/src/user-colors.ts\nexport const USER_COLOR_PALETTE = [\n { name: \"Sky Blue\", value: \"hsl(200, 70%, 50%)\" },\n { name: \"Coral\", value: \"hsl(10, 75%, 58%)\" },\n { name: \"Emerald\", value: \"hsl(145, 70%, 45%)\" },\n { name: \"Violet\", value: \"hsl(270, 70%, 55%)\" },\n { name: \"Amber\", value: \"hsl(38, 85%, 50%)\" },\n { name: \"Rose\", value: \"hsl(350, 70%, 55%)\" },\n { name: \"Teal\", value: \"hsl(178, 70%, 45%)\" },\n { name: \"Indigo\", value: \"hsl(235, 70%, 58%)\" },\n { name: \"Lime\", value: \"hsl(85, 70%, 45%)\" },\n { name: \"Fuchsia\", value: \"hsl(310, 70%, 55%)\" },\n { name: \"Orange\", value: \"hsl(25, 80%, 52%)\" },\n { name: \"Cyan\", value: \"hsl(188, 75%, 48%)\" },\n] as const;\n\nexport function colorFromString(str: string): string {\n const hash = Math.abs(str.split(\"\").reduce((acc, char) => acc + char.charCodeAt(0), 0));\n return USER_COLOR_PALETTE[hash % USER_COLOR_PALETTE.length].value;\n}\n\n// the key the bootloader reads the account from (account picker's, kept)\nexport const ACCOUNT_URL_STORAGE_KEY = \"tinyPatchworkAccountUrl\";\n\n// account/src/picker/tokens.ts\nexport function accountToken(url: AutomergeUrl, name: string): string {\n const { documentId } = parseAutomergeUrl(url);\n return `account:${encodeURIComponent(name)}/${documentId}`;\n}\n\n// a picture, made square and small: the square you cropped it to, or else\n// the middle of it\nconst PICTURE = 256;\nexport type Crop = { x: number; y: number; size: number };\nexport async function squarePicture(file: File, crop?: Crop): Promise<Uint8Array> {\n const bitmap = await createImageBitmap(file);\n const side = Math.min(bitmap.width, bitmap.height);\n const from = crop ?? { x: (bitmap.width - side) / 2, y: (bitmap.height - side) / 2, size: side };\n const size = Math.round(Math.min(PICTURE, from.size));\n const canvas = new OffscreenCanvas(size, size);\n canvas.getContext(\"2d\")!.drawImage(bitmap, from.x, from.y, from.size, from.size, 0, 0, size, size);\n bitmap.close();\n const blob = await canvas.convertToBlob({ type: \"image/webp\", quality: 0.8 });\n return new Uint8Array(await blob.arrayBuffer());\n}\n\n// any css colour as #rrggbb, for <input type=\"color\">\nexport function hexColor(color: string): string {\n const context = new OffscreenCanvas(1, 1).getContext(\"2d\")!;\n context.fillStyle = \"#000000\";\n context.fillStyle = color;\n return String(context.fillStyle);\n}\n","// choosing which square of a picture is you: drag it about, zoom it in\n// (the account picker's cropper, in a <dialog>)\nimport { createSignal, onMount, Show } from \"solid-js\";\nimport type { Crop } from \"./contact\";\n\nconst VIEWPORT = 240;\nconst MAX_ZOOM = 4;\n\nexport function Cropper(props: {\n src: string;\n onCancel: () => void;\n onCrop: (crop: Crop) => void;\n}) {\n const [natural, setNatural] = createSignal<{ w: number; h: number }>();\n const [zoom, setZoom] = createSignal(1);\n const [offset, setOffset] = createSignal({ x: 0, y: 0 });\n\n const scale = () => {\n const n = natural();\n return n ? (VIEWPORT / Math.min(n.w, n.h)) * zoom() : 1;\n };\n const size = () => {\n const n = natural()!;\n return { w: n.w * scale(), h: n.h * scale() };\n };\n const clamp = (next: { x: number; y: number }) => {\n const { w, h } = size();\n return {\n x: Math.min(0, Math.max(VIEWPORT - w, next.x)),\n y: Math.min(0, Math.max(VIEWPORT - h, next.y)),\n };\n };\n\n function onLoad(event: Event & { currentTarget: HTMLImageElement }) {\n const img = event.currentTarget;\n setNatural({ w: img.naturalWidth, h: img.naturalHeight });\n const s = scale();\n setOffset({\n x: (VIEWPORT - img.naturalWidth * s) / 2,\n y: (VIEWPORT - img.naturalHeight * s) / 2,\n });\n }\n\n function onPointerDown(event: PointerEvent & { currentTarget: HTMLElement }) {\n if (!natural()) return;\n const el = event.currentTarget;\n el.setPointerCapture(event.pointerId);\n const start = { ...offset(), px: event.clientX, py: event.clientY };\n const onMove = (move: PointerEvent) =>\n setOffset(\n clamp({\n x: start.x + move.clientX - start.px,\n y: start.y + move.clientY - start.py,\n })\n );\n const onUp = () => {\n el.removeEventListener(\"pointermove\", onMove);\n el.removeEventListener(\"pointerup\", onUp);\n el.removeEventListener(\"pointercancel\", onUp);\n };\n el.addEventListener(\"pointermove\", onMove);\n el.addEventListener(\"pointerup\", onUp);\n el.addEventListener(\"pointercancel\", onUp);\n }\n\n function zoomTo(next: number) {\n if (!natural()) return;\n const previous = scale();\n setZoom(Math.min(MAX_ZOOM, Math.max(1, next)));\n const ratio = scale() / previous;\n const o = offset();\n setOffset(\n clamp({\n x: VIEWPORT / 2 - (VIEWPORT / 2 - o.x) * ratio,\n y: VIEWPORT / 2 - (VIEWPORT / 2 - o.y) * ratio,\n })\n );\n }\n\n function crop() {\n const o = offset();\n const s = scale();\n props.onCrop({ x: -o.x / s, y: -o.y / s, size: VIEWPORT / s });\n }\n\n let dialog!: HTMLDialogElement;\n onMount(() => dialog.showModal());\n\n return (\n <dialog\n ref={dialog}\n class=\"settings-dialog settings-cropper\"\n aria-label=\"Crop picture\"\n onCancel={(event) => {\n event.preventDefault();\n props.onCancel();\n }}\n onClick={(event) => event.target === dialog && props.onCancel()}\n >\n <div\n class=\"settings-cropper-view\"\n onPointerDown={onPointerDown}\n onWheel={(event) => {\n event.preventDefault();\n zoomTo(zoom() * (1 - event.deltaY / 500));\n }}\n >\n <img\n src={props.src}\n alt=\"\"\n draggable={false}\n onLoad={onLoad}\n style={\n natural()\n ? {\n width: `${size().w}px`,\n height: `${size().h}px`,\n transform: `translate(${offset().x}px, ${offset().y}px)`,\n }\n : { visibility: \"hidden\" }\n }\n />\n <div class=\"settings-cropper-mask\" />\n </div>\n <Show when={natural()}>\n <input\n class=\"settings-cropper-zoom\"\n type=\"range\"\n min=\"1\"\n max={MAX_ZOOM}\n step=\"0.01\"\n aria-label=\"Zoom\"\n value={zoom()}\n onInput={(event) => zoomTo(event.currentTarget.valueAsNumber)}\n />\n </Show>\n <div class=\"settings-dialog-actions\">\n <button type=\"button\" class=\"settings-button\" onClick={props.onCancel}>\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"settings-button\"\n data-primary\n disabled={!natural()}\n onClick={crop}\n >\n Save\n </button>\n </div>\n </dialog>\n );\n}\n","// you: your picture (ringed in your colour), your cursor as people see it\n// (click it for another colour), your name, and which account this is.\n// there's no signing up: the first change to any of you makes your contact,\n// and a name makes you someone (and not anonymous)\nimport { createEffect, createSignal, For, onCleanup, Show } from \"solid-js\";\nimport type { DocHandle, Repo } from \"@automerge/automerge-repo/slim\";\nimport { useDocument } from \"solid-automerge\";\nimport {\n ACCOUNT_URL_STORAGE_KEY,\n accountToken,\n colorFromString,\n hexColor,\n squarePicture,\n USER_COLOR_PALETTE,\n type AccountDoc,\n type ContactDoc,\n type Crop,\n} from \"./contact\";\nimport { Cropper } from \"./Cropper\";\n\nexport function You(props: {\n handle: DocHandle<AccountDoc>;\n account: () => AccountDoc | undefined;\n repo: Repo;\n}) {\n const contactUrl = () => props.account()?.contactUrl;\n const [me, contact] = useDocument<ContactDoc>(contactUrl);\n\n // your contact, made if you've none yet\n let making: Promise<DocHandle<ContactDoc>> | null = null;\n async function myContact(): Promise<DocHandle<ContactDoc>> {\n const url = contactUrl();\n if (url) return contact() ?? props.repo.find<ContactDoc>(url);\n making ??= props.repo\n .create2<ContactDoc & { \"@patchwork\": { type: string } }>({\n \"@patchwork\": { type: \"patchwork:contact\" },\n type: \"anonymous\",\n })\n .then((handle) => {\n handle.change((doc) => {\n doc.color = colorFromString(handle.url);\n });\n props.handle.change((doc) => {\n doc.contactUrl = handle.url;\n });\n return handle as unknown as DocHandle<ContactDoc>;\n });\n return making;\n }\n const changeMe = async (\n fn: (doc: ContactDoc & Record<string, any>) => void\n ) =>\n (await myContact()).change((doc) =>\n fn(doc as ContactDoc & Record<string, any>)\n );\n\n const name = () => {\n const doc = me();\n return doc?.type === \"registered\" ? (doc.name ?? \"\") : \"\";\n };\n\n function rename(value: string, done: boolean) {\n const next = done ? value.trim() : value;\n changeMe((doc) => {\n if (next.trim() && doc.type !== \"registered\")\n (doc as { type: string }).type = \"registered\";\n if (doc.type === \"registered\" && (doc.name ?? \"\") !== next)\n doc.name = next;\n });\n }\n\n // a picture: chosen, cropped, then made small and kept\n let pictureInput!: HTMLInputElement;\n const [cropping, setCropping] = createSignal<{ file: File; src: string }>();\n const [busy, setBusy] = createSignal(false);\n const [failed, setFailed] = createSignal(false);\n const avatarUrl = () => (me() as any)?.avatarUrl as string | undefined;\n\n function stopCropping() {\n const pending = cropping();\n if (pending) URL.revokeObjectURL(pending.src);\n setCropping(undefined);\n }\n async function keepPicture(file: File, crop: Crop) {\n stopCropping();\n setBusy(true);\n setFailed(false);\n try {\n const content = await squarePicture(file, crop);\n const image = await props.repo.create2<Record<string, unknown>>({\n content,\n mimeType: \"image/webp\",\n name: file.name,\n extension: \"webp\",\n });\n await changeMe((doc) => {\n doc.avatarUrl = image.url;\n });\n } catch (error) {\n console.error(\"[settings] couldn't use that picture\", error);\n setFailed(true);\n } finally {\n setBusy(false);\n }\n }\n\n // contacts without a colour are grey everywhere, so they're grey here too\n const myColor = () => me()?.color || \"#888\";\n const [choosingColor, setChoosingColor] = createSignal(false);\n\n return (\n <section class=\"settings-section\" aria-labelledby=\"settings-you\">\n <h2 id=\"settings-you\" class=\"settings-hidden\">\n you\n </h2>\n <div class=\"settings-you\" style={{ \"--settings-you-color\": myColor() }}>\n <div class=\"settings-you-face\" aria-busy={busy()}>\n <button\n type=\"button\"\n class=\"settings-you-picture\"\n title={avatarUrl() ? \"Change picture\" : \"Add a picture\"}\n aria-label={avatarUrl() ? \"Change picture\" : \"Add a picture\"}\n disabled={busy()}\n onClick={() => pictureInput.click()}\n >\n <Show\n when={contactUrl()}\n fallback={<span class=\"settings-you-nobody\">+</span>}\n >\n {(url) => (\n <patchwork-view doc-url={url()} tool-id=\"contact-avatar\" />\n )}\n </Show>\n </button>\n <Show when={avatarUrl()}>\n <button\n type=\"button\"\n class=\"settings-you-unpicture\"\n title=\"Remove picture\"\n aria-label=\"Remove picture\"\n onClick={() =>\n changeMe((doc) => {\n delete doc.avatarUrl;\n })\n }\n >\n ×\n </button>\n </Show>\n <input\n type=\"file\"\n accept=\"image/*\"\n hidden\n ref={pictureInput}\n onChange={(event) => {\n const [file] = event.currentTarget.files ?? [];\n event.currentTarget.value = \"\";\n if (file) setCropping({ file, src: URL.createObjectURL(file) });\n }}\n />\n <div class=\"settings-you-cursor\">\n <Pointer\n color={myColor()}\n name={name() || \"You\"}\n aria-expanded={choosingColor()}\n aria-haspopup=\"true\"\n title=\"Change colour\"\n onClick={() => setChoosingColor((open) => !open)}\n />\n <Show when={choosingColor()}>\n <Colors\n value={me()?.color}\n onChange={(color) =>\n changeMe((doc) => {\n doc.color = color;\n })\n }\n onClose={() => setChoosingColor(false)}\n />\n </Show>\n </div>\n </div>\n <div class=\"settings-you-says\">\n <input\n class=\"settings-you-name\"\n value={name()}\n placeholder=\"Your name\"\n aria-label=\"Your name\"\n aria-invalid={failed() || undefined}\n autocomplete=\"name\"\n spellcheck={false}\n onInput={(event) => rename(event.currentTarget.value, false)}\n onChange={(event) => rename(event.currentTarget.value, true)}\n onKeyDown={(event) =>\n event.key === \"Enter\" && event.currentTarget.blur()\n }\n />\n <Show when={failed()}>\n <p class=\"settings-error\" role=\"alert\">\n Couldn't read that picture\n </p>\n </Show>\n </div>\n </div>\n <AccountKey handle={props.handle} name={name} />\n\n <Show when={cropping()}>\n {(pending) => (\n <Cropper\n src={pending().src}\n onCancel={stopCropping}\n onCrop={(crop) => keepPicture(pending().file, crop)}\n />\n )}\n </Show>\n </section>\n );\n}\n\n// your cursor and its name tag, in your colour: you as other people see you\nfunction Pointer(props: {\n color: string;\n name: string;\n title: string;\n onClick: () => void;\n \"aria-expanded\": boolean;\n \"aria-haspopup\": \"true\";\n}) {\n return (\n <button\n type=\"button\"\n class=\"settings-pointer\"\n title={props.title}\n aria-label={props.title}\n aria-expanded={props[\"aria-expanded\"]}\n aria-haspopup={props[\"aria-haspopup\"]}\n onClick={props.onClick}\n >\n <svg\n class=\"settings-pointer-arrow\"\n viewBox=\"11 7 14 21\"\n aria-hidden=\"true\"\n >\n <g fill=\"#fff\">\n <path d=\"m12 24.4219v-16.015l11.591 11.619h-6.781l-.411.124z\" />\n <path d=\"m21.0845 25.0962-3.605 1.535-4.682-11.089 3.686-1.553z\" />\n </g>\n <g fill={props.color}>\n <path d=\"m13 10.814v11.188l2.969-2.866.428-.139h4.768z\" />\n <path d=\"m19.751 24.4155-1.844.774-3.1-7.374 1.841-.775z\" />\n </g>\n </svg>\n <span\n class=\"settings-pointer-tag\"\n style={{ \"background-color\": props.color }}\n >\n {props.name}\n </span>\n </button>\n );\n}\n\n// the palette, and any colour you like\nfunction Colors(props: {\n value?: string;\n onChange: (color: string) => void;\n onClose: () => void;\n}) {\n let popup!: HTMLDivElement;\n createEffect(() => {\n const onPointerDown = (event: PointerEvent) => {\n const target = event.target as Element | null;\n if (popup.contains(target) || target?.closest(\".settings-pointer\"))\n return;\n props.onClose();\n };\n const onKeyDown = (event: KeyboardEvent) =>\n event.key === \"Escape\" && props.onClose();\n document.addEventListener(\"pointerdown\", onPointerDown, true);\n document.addEventListener(\"keydown\", onKeyDown);\n onCleanup(() => {\n document.removeEventListener(\"pointerdown\", onPointerDown, true);\n document.removeEventListener(\"keydown\", onKeyDown);\n });\n });\n const custom = () =>\n !!props.value &&\n !USER_COLOR_PALETTE.some((color) => color.value === props.value);\n\n return (\n <div\n class=\"settings-colors\"\n ref={popup}\n role=\"radiogroup\"\n aria-label=\"Colour\"\n >\n <For each={USER_COLOR_PALETTE}>\n {(color) => (\n <button\n type=\"button\"\n class=\"settings-swatch\"\n role=\"radio\"\n style={{ \"background-color\": color.value }}\n aria-checked={props.value === color.value}\n aria-label={color.name}\n title={color.name}\n onClick={() => {\n props.onChange(color.value);\n props.onClose();\n }}\n />\n )}\n </For>\n <label\n class=\"settings-swatch settings-swatch-custom\"\n title=\"Any colour\"\n aria-checked={custom()}\n >\n <input\n type=\"color\"\n aria-label=\"Any colour\"\n value={hexColor(props.value || USER_COLOR_PALETTE[0].value)}\n onInput={(event) => props.onChange(event.currentTarget.value)}\n />\n </label>\n </div>\n );\n}\n\n// this account, elsewhere: its key, to use it on another computer; and leaving\nfunction AccountKey(props: {\n handle: DocHandle<AccountDoc>;\n name: () => string;\n}) {\n const [leaving, setLeaving] = createSignal(false);\n const [copied, setCopied] = createSignal(false);\n\n function copy() {\n navigator.clipboard.writeText(accountToken(props.handle.url, props.name()));\n setCopied(true);\n setTimeout(() => setCopied(false), 1200);\n }\n\n function signOut() {\n localStorage.removeItem(ACCOUNT_URL_STORAGE_KEY);\n window.location.replace(\"/\");\n }\n\n const copyButton = () => (\n <button\n type=\"button\"\n class=\"settings-button\"\n data-copied={copied() || undefined}\n onClick={copy}\n >\n <Show when={copied()} fallback={<CopyIcon />}>\n <CheckIcon />\n </Show>\n {copied() ? \"Copied\" : \"Copy account key\"}\n </button>\n );\n const escape = (event: KeyboardEvent) =>\n event.key === \"Escape\" && setLeaving(false);\n\n return (\n <div class=\"settings-account\">\n <Show when={!leaving()}>\n <div class=\"settings-cluster\">\n {copyButton()}\n <button\n type=\"button\"\n class=\"settings-button\"\n data-leave\n onClick={() => setLeaving(true)}\n >\n Sign out\n </button>\n </div>\n </Show>\n <Show when={leaving()}>\n <div class=\"settings-cluster\" onKeyDown={escape}>\n <strong class=\"settings-ask\">Sign out?</strong>\n {copyButton()}\n <button\n type=\"button\"\n class=\"settings-button\"\n ref={(el) => queueMicrotask(() => el.focus())}\n onClick={() => setLeaving(false)}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"settings-button\"\n data-danger\n onClick={signOut}\n >\n Sign out\n </button>\n </div>\n </Show>\n </div>\n );\n}\n\nfunction CopyIcon() {\n return (\n <svg class=\"settings-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg class=\"settings-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n","// a tool's own doc in the account: account.toolStorage[toolId]. the page\n// reads it straight off the account doc (which is what it's open on) so that\n// just looking at settings makes nothing. the first time something's written,\n// it asks the frame's tool-storage provider for it, which makes it and links\n// it into the account\nimport { createMemo, createSignal, onCleanup } from \"solid-js\";\nimport { isValidAutomergeUrl, type AutomergeUrl, type DocHandle } from \"@automerge/automerge-repo/slim\";\nimport { useDocument } from \"solid-automerge\";\n\ntype AccountWithStorage = { toolStorage?: Record<string, AutomergeUrl> };\n\n/**\n * one `patchwork:subscribe` to the providers above `element` (the port\n * protocol patchwork-providers speaks). `onValue` hears each value; returns\n * a stop\n */\nexport function subscribe<T>(\n element: HTMLElement,\n selector: Record<string, unknown>,\n onValue: (value: T) => void,\n): () => void {\n const target = (element.closest(\"patchwork-view\") as HTMLElement | null) ?? element;\n const channel = new MessageChannel();\n const port = channel.port2;\n port.onmessage = (event: MessageEvent) => {\n if (event.data?.type === \"change\") onValue(event.data.value as T);\n };\n port.start();\n target.dispatchEvent(\n new CustomEvent(\"patchwork:subscribe\", {\n detail: { selector, port: channel.port1 },\n bubbles: true,\n composed: true,\n }),\n );\n let stopped = false;\n return () => {\n if (stopped) return;\n stopped = true;\n try {\n port.postMessage({ type: \"unsubscribe\" });\n } catch {}\n port.close();\n };\n}\n\n/** the url of `toolId`'s storage, made if it isn't yet */\nexport function ensureToolStorage(element: HTMLElement, toolId: string): Promise<AutomergeUrl> {\n return new Promise((resolve) => {\n const stop = subscribe<string>(element, { type: \"patchwork:tool-storage\", toolId }, (url) => {\n if (!isValidAutomergeUrl(String(url ?? \"\"))) return;\n stop();\n resolve(url as AutomergeUrl);\n });\n });\n}\n\n/**\n * [doc, change] of `toolId`'s storage. `change` makes the doc the first\n * time, then changes it. call under a solid owner, inside a RepoContext\n */\nexport function useToolStorage<T extends object>(\n element: HTMLElement,\n account: () => AccountWithStorage | undefined,\n toolId: string,\n { init }: { init?: (doc: T) => void } = {},\n) {\n const linked = createMemo(() => {\n const url = account()?.toolStorage?.[toolId];\n return url && isValidAutomergeUrl(url) ? url : undefined;\n });\n // the one this page made, before the account says so\n const [made, setMade] = createSignal<AutomergeUrl>();\n const url = () => linked() ?? made();\n const [doc, handle] = useDocument<T>(url);\n\n let making: Promise<DocHandle<T>> | null = null;\n let alive = true;\n onCleanup(() => (alive = false));\n\n async function ready(): Promise<DocHandle<T> | undefined> {\n const current = handle();\n if (current) return current;\n making ??= ensureToolStorage(element, toolId).then(async (found) => {\n if (alive) setMade(found);\n const repo = (element as unknown as { repo: { find<D>(url: AutomergeUrl): Promise<DocHandle<D>> } }).repo;\n const found_ = await repo.find<T>(found);\n if (init) found_.change((d) => init(d as T));\n return found_;\n });\n try {\n return await making;\n } finally {\n making = null;\n }\n }\n\n async function change(fn: (doc: T) => void) {\n (await ready())?.change((d) => fn(d as T));\n }\n\n return [doc, change] as const;\n}\n","// an on/off switch: a button with role=\"switch\", so a <label for> beside it\n// works as you'd expect, and space and enter flip it\nexport function Toggle(props: {\n id?: string;\n checked: boolean;\n onChange: (checked: boolean) => void;\n label?: string;\n}) {\n return (\n <button\n id={props.id}\n type=\"button\"\n role=\"switch\"\n class=\"settings-switch\"\n aria-checked={props.checked}\n aria-label={props.label}\n onClick={() => props.onChange(!props.checked)}\n >\n <span class=\"settings-switch-thumb\" />\n </button>\n );\n}\n","// the theme: each one drawn as a little patchwork in it (lattice's cards).\n// which is chosen is the account's theme preferences (theme-preferences'\n// tool storage, as `light` and `dark`), which the theming package watches\n// and puts on the page. one theme for both unless you say otherwise\nimport { createMemo, createSignal, For, onCleanup, Show } from \"solid-js\";\nimport { getRegistry } from \"@inkandswitch/patchwork-plugins\";\nimport { useToolStorage } from \"../storage\";\nimport { Toggle } from \"../Toggle\";\nimport type { AccountDoc } from \"../you/contact\";\n\ntype ThemeDescription = {\n id: string;\n name?: string;\n colorScheme?: \"light\" | \"dark\";\n};\ntype Preferences = {\n light?: string;\n dark?: string;\n \"@patchwork\"?: { type: string };\n};\ntype Mode = \"light\" | \"dark\";\n\nconst PREFERENCES = \"theme-preferences\";\n\n// the site's own, for when nothing's been picked (as theming has it)\nconst defaultFor = (mode: Mode) =>\n document.documentElement.getAttribute(`data-theme-${mode}`) ||\n (mode === \"dark\" ? \"gloom\" : \"lychee\");\n\nfunction useThemes() {\n const registry = getRegistry(\"patchwork:theme\");\n const read = () =>\n ((registry.all?.() ?? []) as unknown as ThemeDescription[])\n .map((theme) => ({\n id: theme.id,\n name: theme.name || theme.id,\n colorScheme: theme.colorScheme,\n }))\n .sort((a, b) => a.name.localeCompare(b.name));\n const [themes, setThemes] = createSignal(read());\n const off = registry.on(\"changed\" as any, () => {\n setThemes(read());\n });\n onCleanup(() => (off as () => void)?.());\n return themes;\n}\n\nfunction useMode() {\n const query = matchMedia(\"(prefers-color-scheme: dark)\");\n const [mode, setMode] = createSignal<Mode>(query.matches ? \"dark\" : \"light\");\n const onChange = () => setMode(query.matches ? \"dark\" : \"light\");\n query.addEventListener(\"change\", onChange);\n onCleanup(() => query.removeEventListener(\"change\", onChange));\n return mode;\n}\n\n/** a little patchwork, in a theme: its rules are all [theme=\"…\"] */\nexport function ThemePreview(props: { id: string }) {\n return (\n <div class=\"settings-mini\" attr:theme={props.id} aria-hidden=\"true\">\n <div class=\"settings-mini-side\">\n <b>documents</b>\n <span data-current>notes</span>\n <span>garden plan</span>\n <span>recipes</span>\n </div>\n <div class=\"settings-mini-main\">\n <div class=\"settings-mini-top\">\n <span>notes</span>\n </div>\n <div class=\"settings-mini-text\">\n <div>\n <span class=\"h\"># tuesday</span>\n </div>\n <div>\n water the <span class=\"k\">tomatoes</span>\n </div>\n <div>\n <span class=\"l\">[seed list]</span> <span class=\"c\">// later</span>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction Cards(props: {\n themes: ThemeDescription[];\n chosen: string;\n onChoose: (id: string) => void;\n label: string;\n}) {\n return (\n <div\n class=\"settings-theme-cards\"\n role=\"radiogroup\"\n aria-label={props.label}\n >\n <For each={props.themes}>\n {(theme) => (\n <button\n type=\"button\"\n class=\"settings-theme-card\"\n role=\"radio\"\n aria-checked={props.chosen === theme.id}\n onClick={() => props.onChoose(theme.id)}\n >\n <ThemePreview id={theme.id} />\n <span class=\"settings-theme-name\">{theme.name}</span>\n </button>\n )}\n </For>\n </div>\n );\n}\n\nexport function Theme(props: {\n element: HTMLElement;\n account: () => AccountDoc | undefined;\n}) {\n const themes = useThemes();\n const mode = useMode();\n const [prefs, change] = useToolStorage<Preferences>(\n props.element,\n props.account,\n PREFERENCES,\n {\n init(doc) {\n if (!doc[\"@patchwork\"]) doc[\"@patchwork\"] = { type: PREFERENCES };\n },\n }\n );\n\n const chosen = (which: Mode) => prefs()?.[which] || defaultFor(which);\n // split only once someone's chosen two different ones\n const [splitByHand, setSplitByHand] = createSignal<boolean>();\n const split = createMemo(\n () => splitByHand() ?? chosen(\"light\") !== chosen(\"dark\")\n );\n\n const choose = (which: Mode | \"both\", id: string) =>\n change((doc) => {\n if (which !== \"dark\") doc.light = id;\n if (which !== \"light\") doc.dark = id;\n });\n\n // light themes first for light mode, dark ones for dark\n const forMode = (which: Mode) =>\n [...themes()].sort(\n (a, b) =>\n Number((a.colorScheme ?? which) !== which) -\n Number((b.colorScheme ?? which) !== which)\n );\n\n return (\n <section class=\"settings-section\" aria-labelledby=\"settings-theme\">\n <h2 id=\"settings-theme\">Theme</h2>\n <Show when={themes().length}>\n <div class=\"settings-group\">\n <Show\n when={split()}\n fallback={\n <div class=\"settings-group-block\">\n <Cards\n themes={themes()}\n chosen={chosen(mode())}\n onChoose={(id) => choose(\"both\", id)}\n label=\"Theme\"\n />\n </div>\n }\n >\n <For each={[\"light\", \"dark\"] as Mode[]}>\n {(which) => (\n <div class=\"settings-group-block settings-theme-mode\">\n <h3>\n {which === \"light\" ? \"Light mode\" : \"Dark mode\"}\n <Show when={mode() === which}>\n <span class=\"settings-now\">Now</span>\n </Show>\n </h3>\n <Cards\n themes={forMode(which)}\n chosen={chosen(which)}\n onChoose={(id) => choose(which, id)}\n label={\n which === \"light\" ? \"Light mode theme\" : \"Dark mode theme\"\n }\n />\n </div>\n )}\n </For>\n </Show>\n <div class=\"settings-row\">\n <label class=\"settings-label\" for=\"settings-theme-split\">\n Use a different theme when Computer is in dark mode\n </label>\n <Toggle\n id=\"settings-theme-split\"\n checked={split()}\n onChange={(on) => {\n setSplitByHand(on);\n // back to one: the one that's showing now, for both\n if (!on) choose(\"both\", chosen(mode()));\n }}\n />\n </div>\n </div>\n </Show>\n </section>\n );\n}\n","// what used to be the frame configurator: which frame the studio is, and\n// which tools sit in a document's title bar. the frame's on the account doc\n// (`frameToolId`); the title bar's in threepane's config doc\n// (`account.tools.threepane`), as frame-configurator kept them\nimport { createMemo, createSignal, For, onCleanup, Show } from \"solid-js\";\nimport type { DocHandle } from \"@automerge/automerge-repo/slim\";\nimport { getRegistry } from \"@inkandswitch/patchwork-plugins\";\nimport { useDocument } from \"solid-automerge\";\nimport type { AccountDoc } from \"../you/contact\";\n\ntype ToolSlot = [toolId: string, docId: string] | string;\ntype ThreepaneConfigDoc = { doctitle?: { tools?: ToolSlot[] } };\ntype Describable = {\n id: string;\n name?: string;\n tags?: string[];\n unlisted?: boolean;\n};\ntype Option = { id: string; name: string };\n\nconst FRAME_RELOAD_DELAY_MS = 250;\n\nfunction useRegistry(type: string) {\n const registry = getRegistry(type);\n const read = () =>\n ((registry.all?.() ?? []) as unknown as Describable[]).slice();\n const [tools, setTools] = createSignal(read());\n const off = registry.on(\"changed\" as any, () => {\n setTools(read());\n });\n onCleanup(() => (off as () => void)?.());\n return tools;\n}\n\nconst tagged = (tools: Describable[], tag: string): Option[] =>\n tools\n .filter((tool) => !tool.unlisted && (tool.tags ?? []).includes(tag))\n .map((tool) => ({ id: tool.id, name: tool.name || tool.id }))\n .sort((a, b) => a.name.localeCompare(b.name));\n\nconst slotId = (slot: ToolSlot) => (typeof slot === \"string\" ? slot : slot[0]);\n\n// the frame this page is in: the nearest patchwork-view around it that's one\n// of the frames. an account that's never chosen has no frameToolId, but it's\n// still in one\nfunction runningFrame(\n element: HTMLElement,\n frames: Option[]\n): string | undefined {\n const ids = new Set(frames.map((frame) => frame.id));\n for (let el = element.parentElement; el; el = el.parentElement) {\n const id =\n el.tagName === \"PATCHWORK-VIEW\" ? el.getAttribute(\"tool-id\") : null;\n if (id && ids.has(id)) return id;\n }\n}\n\nexport function Frame(props: {\n element: HTMLElement;\n handle: DocHandle<AccountDoc>;\n account: () => AccountDoc | undefined;\n repo: { flush(): Promise<unknown> };\n}) {\n const tools = useRegistry(\"patchwork:tool\");\n // title bar slots can be tools or components, listed or not: any of them\n // has a better name than its id\n const components = useRegistry(\"patchwork:component\");\n const names = createMemo(\n () =>\n new Map(\n [...components(), ...tools()].map((plugin) => [\n plugin.id,\n plugin.name || plugin.id,\n ])\n )\n );\n const frames = createMemo(() => tagged(tools(), \"frame-tool\"));\n const current = () =>\n props.account()?.frameToolId ?? runningFrame(props.element, frames());\n const titlebar = createMemo(() => tagged(tools(), \"titlebar-tool\"));\n\n const [threepane, threepaneHandle] = useDocument<ThreepaneConfigDoc>(\n () => props.account()?.tools?.threepane\n );\n const doctitle = () => threepane()?.doctitle?.tools?.map(slotId);\n\n function chooseFrame(id: string) {\n if (current() === id) return;\n props.handle.change((doc) => {\n doc.frameToolId = id;\n });\n // the frame's what everything's in, so it takes a reload\n setTimeout(async () => {\n await props.repo.flush().catch(() => null);\n window.location.reload();\n }, FRAME_RELOAD_DELAY_MS);\n }\n\n return (\n <>\n <Show when={frames().length}>\n <section class=\"settings-section\" aria-labelledby=\"settings-frame\">\n <h2 id=\"settings-frame\">Frame</h2>\n <div class=\"settings-group\">\n <div class=\"settings-group-block\">\n <div\n class=\"settings-segmented\"\n role=\"radiogroup\"\n aria-label=\"Frame\"\n >\n <For each={frames()}>\n {(frame) => (\n <button\n type=\"button\"\n class=\"settings-segment\"\n role=\"radio\"\n aria-checked={current() === frame.id}\n onClick={() => chooseFrame(frame.id)}\n >\n {frame.name}\n </button>\n )}\n </For>\n </div>\n </div>\n </div>\n </section>\n </Show>\n\n <Show when={threepaneHandle()}>\n {(handle) => (\n <section class=\"settings-section\" aria-labelledby=\"settings-titlebar\">\n <h2 id=\"settings-titlebar\">Title bar</h2>\n <div class=\"settings-group\">\n <div class=\"settings-group-block\">\n <Strip\n values={doctitle() ?? []}\n options={titlebar()}\n names={names()}\n setValues={(next) =>\n handle().change((doc) => {\n doc.doctitle ??= {};\n doc.doctitle.tools = next.slice();\n })\n }\n />\n </div>\n </div>\n </section>\n )}\n </Show>\n </>\n );\n}\n\n// an ordered row of tool ids: drag to reorder, × to take one out, + to add.\n// ids are kept as they are, even ones whose plugin hasn't registered yet\n// (they're shown by id), so a slow plugin isn't dropped by a rewrite\nfunction Strip(props: {\n values: string[];\n options: Option[];\n names: Map<string, string>;\n setValues: (next: string[]) => void;\n}) {\n const [adding, setAdding] = createSignal(false);\n const [custom, setCustom] = createSignal(\"\");\n const [from, setFrom] = createSignal<number | null>(null);\n const [to, setTo] = createSignal<number | null>(null);\n\n const nameOf = (id: string) => props.names.get(id) ?? id;\n const available = createMemo(() =>\n props.options.filter((option) => !props.values.includes(option.id))\n );\n\n const add = (id: string) => {\n const clean = id.trim();\n if (clean && !props.values.includes(clean))\n props.setValues([...props.values, clean]);\n };\n\n function drop() {\n const a = from();\n const b = to();\n setFrom(null);\n setTo(null);\n if (a == null || b == null || a === b) return;\n const next = props.values.slice();\n const [moved] = next.splice(a, 1);\n next.splice(b, 0, moved);\n props.setValues(next);\n }\n\n return (\n <div class=\"settings-strip\">\n <ol class=\"settings-strip-items\">\n <For each={props.values}>\n {(id, index) => (\n <li\n class=\"settings-strip-item\"\n draggable={true}\n data-dragging={from() === index() ? \"\" : undefined}\n data-over={\n to() === index() && from() !== index() ? \"\" : undefined\n }\n onDragStart={(event) => {\n event.dataTransfer!.effectAllowed = \"move\";\n setFrom(index());\n setTo(index());\n }}\n onDragOver={(event) => {\n event.preventDefault();\n event.dataTransfer!.dropEffect = \"move\";\n setTo(index());\n }}\n onDragEnd={drop}\n >\n <span>{nameOf(id)}</span>\n <button\n type=\"button\"\n class=\"settings-strip-remove\"\n aria-label={`Remove ${nameOf(id)}`}\n onClick={() =>\n props.setValues(props.values.filter((_, i) => i !== index()))\n }\n >\n ×\n </button>\n </li>\n )}\n </For>\n </ol>\n <Show\n when={adding()}\n fallback={\n <button\n type=\"button\"\n class=\"settings-button\"\n onClick={() => setAdding(true)}\n >\n Add…\n </button>\n }\n >\n <div\n class=\"settings-strip-add\"\n onKeyDown={(event) => event.key === \"Escape\" && setAdding(false)}\n >\n <For each={available()}>\n {(option) => (\n <button\n type=\"button\"\n class=\"settings-button\"\n onClick={() => add(option.id)}\n >\n + {option.name}\n </button>\n )}\n </For>\n <form\n class=\"settings-cluster\"\n onSubmit={(event) => {\n event.preventDefault();\n add(custom());\n setCustom(\"\");\n }}\n >\n <input\n class=\"settings-input settings-code\"\n placeholder=\"Tool id\"\n aria-label=\"Tool id\"\n spellcheck={false}\n value={custom()}\n onInput={(event) => setCustom(event.currentTarget.value)}\n />\n <button\n type=\"submit\"\n class=\"settings-button\"\n disabled={!custom().trim()}\n >\n Add\n </button>\n <button\n type=\"button\"\n class=\"settings-button\"\n data-primary\n onClick={() => setAdding(false)}\n >\n Done\n </button>\n </form>\n </div>\n </Show>\n </div>\n );\n}\n","/**\n * `patchwork:settings` — a package's settings, as static JSON.\n *\n * A package that wants a section on the settings page registers one plugin\n * of this type alongside its others. It carries no code: the settings page\n * draws every control itself, from the `properties` map.\n *\n * {\n * type: \"patchwork:settings\",\n * id: \"my-tool\", // whose tool storage the values go in\n * name: \"My tool\", // the section's heading\n * properties: {\n * \"wrap\": { type: \"boolean\", title: \"Wrap long lines\", default: true },\n * \"font.size\": { type: \"number\", min: 8, max: 32, unit: \"px\", default: 14 },\n * \"greeting\": { type: \"string\", placeholder: \"hello\" },\n * \"mode\": { type: \"enum\", options: [\"fast\", { value: \"slow\", label: \"Careful\" }] },\n * \"highlight\": { type: \"color\" }\n * }\n * }\n *\n * Where the values live: the account's tool storage for `id` — the same doc\n * the tool gets from `{ type: \"patchwork:tool-storage\", toolId: id }`. Each\n * key is a dotted path into that doc (`\"font.size\"` is `doc.font.size`).\n * Nothing is written until someone changes a setting, so a tool reads\n * `valueAt(doc, key) ?? properties[key].default` — it shipped the defaults\n * itself, so it needs nobody to tell it them.\n */\n\nexport const SETTINGS_PLUGIN_TYPE = \"patchwork:settings\";\n\ntype Common = {\n /** the label. defaults to the key */\n title?: string;\n /** a line under the label */\n description?: string;\n};\n\nexport type BooleanSetting = Common & { type: \"boolean\"; default?: boolean };\nexport type StringSetting = Common & {\n type: \"string\";\n default?: string;\n placeholder?: string;\n multiline?: boolean;\n};\nexport type NumberSetting = Common & {\n type: \"number\";\n default?: number;\n min?: number;\n max?: number;\n step?: number;\n unit?: string;\n};\nexport type EnumOption = string | { value: string; label?: string };\nexport type EnumSetting = Common & {\n type: \"enum\";\n options: EnumOption[];\n default?: string;\n};\nexport type ColorSetting = Common & { type: \"color\"; default?: string };\n\nexport type Setting =\n | BooleanSetting\n | StringSetting\n | NumberSetting\n | EnumSetting\n | ColorSetting;\n\nexport type SettingsPlugin = {\n type: typeof SETTINGS_PLUGIN_TYPE;\n id: string;\n name: string;\n description?: string;\n properties: Record<string, Setting>;\n};\n\nconst TYPES = new Set([\"boolean\", \"string\", \"number\", \"enum\", \"color\"]);\nconst KEY = /^[A-Za-z_$][\\w$-]*(\\.[A-Za-z_$][\\w$-]*)*$/;\nconst UNSAFE = new Set([\"__proto__\", \"prototype\", \"constructor\"]);\n\nconst isObject = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value);\n\n/** whether `key` is a dotted path we'll write into a doc */\nexport function isValidKey(key: string): boolean {\n return KEY.test(key) && !key.split(\".\").some((part) => UNSAFE.has(part));\n}\n\n/**\n * the settings in `plugin` the page can draw, in the order they were\n * declared. anything malformed is left out (and said so in the console),\n * so one bad entry doesn't cost a package its whole section\n */\nexport function settingsOf(plugin: unknown): [string, Setting][] {\n if (!isObject(plugin) || !isObject(plugin.properties)) return [];\n const out: [string, Setting][] = [];\n for (const [key, setting] of Object.entries(plugin.properties)) {\n if (!isValidKey(key)) {\n console.warn(`[settings] ${plugin.id}: \"${key}\" isn't a usable key`);\n continue;\n }\n if (!isObject(setting) || !TYPES.has(setting.type as string)) {\n console.warn(`[settings] ${plugin.id}.${key}: unknown setting type`, setting);\n continue;\n }\n if (setting.type === \"enum\" && !Array.isArray(setting.options)) {\n console.warn(`[settings] ${plugin.id}.${key}: an enum needs options`);\n continue;\n }\n out.push([key, setting as Setting]);\n }\n return out;\n}\n\nexport function optionsOf(setting: EnumSetting): { value: string; label: string }[] {\n return setting.options.map((option) =>\n typeof option === \"string\"\n ? { value: option, label: option }\n : { value: option.value, label: option.label ?? option.value },\n );\n}\n\n/** what's at a dotted path in a doc, or undefined */\nexport function valueAt(doc: unknown, key: string): unknown {\n let here: unknown = doc;\n for (const part of key.split(\".\")) {\n if (!isObject(here)) return undefined;\n here = here[part];\n }\n return here;\n}\n\n/** the value someone's chosen, or the setting's default */\nexport function settingValue(doc: unknown, key: string, setting: Setting): unknown {\n const value = valueAt(doc, key);\n return value === undefined || value === null ? setting.default : value;\n}\n\n/**\n * put a value at a dotted path, inside a `change`. `undefined` takes it out\n * (automerge can't hold undefined), which puts the setting back to its default\n */\nexport function setValueAt(doc: Record<string, unknown>, key: string, value: unknown) {\n if (!isValidKey(key)) throw new Error(`[settings] \"${key}\" isn't a usable key`);\n const parts = key.split(\".\");\n const last = parts.pop()!;\n let here: Record<string, unknown> = doc;\n for (const part of parts) {\n if (!isObject(here[part])) {\n if (value === undefined) return;\n here[part] = {};\n }\n here = here[part] as Record<string, unknown>;\n }\n if (value === undefined) delete here[last];\n else here[last] = value;\n}\n\n/** a number from an input, held to the setting's bounds; undefined if it isn't one */\nexport function clampNumber(raw: string, setting: NumberSetting): number | undefined {\n if (raw.trim() === \"\") return undefined;\n let n = Number(raw);\n if (!Number.isFinite(n)) return undefined;\n if (setting.min !== undefined) n = Math.max(setting.min, n);\n if (setting.max !== undefined) n = Math.min(setting.max, n);\n return n;\n}\n","// a section for each `patchwork:settings` plugin: its JSON, drawn. nothing\n// of the plugin's runs here; the page only reads its description out of the\n// registry (it never calls load). values go in the plugin's tool storage\nimport {\n createMemo,\n createSignal,\n For,\n Match,\n onCleanup,\n Show,\n Switch,\n} from \"solid-js\";\nimport { getRegistry } from \"@inkandswitch/patchwork-plugins\";\nimport { useToolStorage } from \"../storage\";\nimport { Toggle } from \"../Toggle\";\nimport type { AccountDoc } from \"../you/contact\";\nimport {\n clampNumber,\n optionsOf,\n SETTINGS_PLUGIN_TYPE,\n settingsOf,\n setValueAt,\n settingValue,\n valueAt,\n type Setting,\n type SettingsPlugin,\n} from \"../schema\";\n\nfunction useSettingsPlugins() {\n const registry = getRegistry(SETTINGS_PLUGIN_TYPE);\n const read = () =>\n ((registry.all?.() ?? []) as unknown as SettingsPlugin[])\n .filter((plugin) => typeof plugin?.id === \"string\")\n .sort((a, b) =>\n String(a.name ?? a.id).localeCompare(String(b.name ?? b.id))\n );\n const [plugins, setPlugins] = createSignal(read());\n const off = registry.on(\"changed\" as any, () => {\n setPlugins(read());\n });\n onCleanup(() => (off as () => void)?.());\n return plugins;\n}\n\nexport function Contributed(props: {\n element: HTMLElement;\n account: () => AccountDoc | undefined;\n}) {\n const plugins = useSettingsPlugins();\n return (\n <For each={plugins()}>\n {(plugin) => (\n <PluginSection\n plugin={plugin}\n element={props.element}\n account={props.account}\n />\n )}\n </For>\n );\n}\n\nfunction PluginSection(props: {\n plugin: SettingsPlugin;\n element: HTMLElement;\n account: () => AccountDoc | undefined;\n}) {\n const settings = createMemo(() => settingsOf(props.plugin));\n const [doc, change] = useToolStorage<Record<string, unknown>>(\n props.element,\n props.account,\n props.plugin.id\n );\n const set = (key: string, value: unknown) =>\n change((d) => setValueAt(d, key, value));\n const headingId = `settings-plugin-${props.plugin.id.replace(/[^\\w-]/g, \"-\")}`;\n\n return (\n <Show when={settings().length}>\n <section class=\"settings-section\" aria-labelledby={headingId}>\n <h2 id={headingId} title={props.plugin.description}>\n {props.plugin.name || props.plugin.id}\n </h2>\n <div class=\"settings-group\">\n <For each={settings()}>\n {([key, setting]) => (\n <Field\n id={`${headingId}-${key.replace(/\\./g, \"-\")}`}\n name={key}\n setting={setting}\n value={settingValue(doc(), key, setting)}\n chosen={valueAt(doc(), key) !== undefined}\n set={(value) => set(key, value)}\n />\n )}\n </For>\n </div>\n </section>\n </Show>\n );\n}\n\nfunction Field(props: {\n id: string;\n name: string;\n setting: Setting;\n value: unknown;\n chosen: boolean;\n set: (value: unknown) => void;\n}) {\n const label = () => props.setting.title || props.name;\n const text = (value: unknown) =>\n value === undefined || value === null ? \"\" : String(value);\n\n const control = () => (\n <Switch>\n <Match when={props.setting.type === \"boolean\"}>\n <Toggle\n id={props.id}\n checked={props.value === true}\n onChange={(on) => props.set(on)}\n />\n </Match>\n <Match when={props.setting.type === \"string\" && props.setting}>\n {(setting) => {\n const s = setting() as Extract<Setting, { type: \"string\" }>;\n return s.multiline ? (\n <textarea\n id={props.id}\n class=\"settings-input settings-grow\"\n rows={3}\n placeholder={s.placeholder}\n value={text(props.value)}\n onChange={(event) => props.set(event.currentTarget.value)}\n />\n ) : (\n <input\n id={props.id}\n class=\"settings-input settings-grow\"\n placeholder={s.placeholder}\n value={text(props.value)}\n onChange={(event) => props.set(event.currentTarget.value)}\n />\n );\n }}\n </Match>\n <Match when={props.setting.type === \"number\" && props.setting}>\n {(setting) => {\n const s = setting() as Extract<Setting, { type: \"number\" }>;\n return (\n <span class=\"settings-cluster\">\n <input\n id={props.id}\n class=\"settings-input settings-number\"\n type=\"number\"\n min={s.min}\n max={s.max}\n step={s.step ?? \"any\"}\n value={text(props.value)}\n onChange={(event) => {\n const n = clampNumber(event.currentTarget.value, s);\n props.set(n);\n // held to the bounds: show what was kept\n event.currentTarget.value = text(n ?? s.default);\n }}\n />\n <Show when={s.unit}>\n <span class=\"settings-unit\">{s.unit}</span>\n </Show>\n </span>\n );\n }}\n </Match>\n <Match when={props.setting.type === \"enum\" && props.setting}>\n {(setting) => {\n const s = setting() as Extract<Setting, { type: \"enum\" }>;\n return (\n <select\n id={props.id}\n class=\"settings-input\"\n onChange={(event) =>\n props.set(event.currentTarget.value || undefined)\n }\n >\n <Show when={s.default === undefined}>\n <option value=\"\" selected={!props.value}>\n —\n </option>\n </Show>\n <For each={optionsOf(s)}>\n {(option) => (\n <option\n value={option.value}\n selected={props.value === option.value}\n >\n {option.label}\n </option>\n )}\n </For>\n </select>\n );\n }}\n </Match>\n <Match when={props.setting.type === \"color\"}>\n <input\n id={props.id}\n class=\"settings-color-input\"\n type=\"color\"\n value={text(props.value) || \"#000000\"}\n onInput={(event) => props.set(event.currentTarget.value)}\n />\n </Match>\n </Switch>\n );\n\n return (\n <div class=\"settings-row\" data-type={props.setting.type}>\n <label\n class=\"settings-label\"\n for={props.id}\n title={props.setting.description}\n >\n {label()}\n </label>\n <span class=\"settings-control\">\n <Show when={props.chosen}>\n <button\n type=\"button\"\n class=\"settings-reset\"\n title=\"Back to the default\"\n aria-label={`Reset ${label()}`}\n onClick={() => props.set(undefined)}\n >\n Reset\n </button>\n </Show>\n {control()}\n </span>\n </div>\n );\n}\n","import \"./styles.css\";\nimport type { DocHandle, Repo } from \"@automerge/automerge-repo/slim\";\nimport type { ToolElement } from \"@inkandswitch/patchwork-plugins\";\nimport { RepoContext, useDocument } from \"solid-automerge\";\nimport { Show } from \"solid-js\";\nimport { render } from \"solid-js/web\";\nimport { You } from \"./you/You\";\nimport { Theme } from \"./theme/Theme\";\nimport { Frame } from \"./frame/Frame\";\nimport { Contributed } from \"./contributed/Contributed\";\nimport type { AccountDoc } from \"./you/contact\";\n\n// settings, on the account doc: you, the theme, the frame, and then a\n// section for every package that's asked for one (patchwork:settings)\nfunction SettingsPage(props: {\n handle: DocHandle<AccountDoc>;\n element: ToolElement;\n}) {\n const [account] = useDocument<AccountDoc>(() => props.handle.url);\n const repo = props.element.repo as unknown as Repo;\n\n return (\n <div class=\"settings\">\n <div class=\"settings-page\">\n <Show when={account()}>\n <You handle={props.handle} account={account} repo={repo} />\n <Theme element={props.element} account={account} />\n <Frame\n element={props.element}\n handle={props.handle}\n account={account}\n repo={repo}\n />\n <Contributed element={props.element} account={account} />\n </Show>\n </div>\n </div>\n );\n}\n\nexport default function renderSettings(\n handle: DocHandle<AccountDoc>,\n element: ToolElement\n) {\n const dispose = render(\n () => (\n <RepoContext.Provider value={element.repo as any}>\n <SettingsPage handle={handle} element={element} />\n </RepoContext.Provider>\n ),\n element\n );\n return () => dispose();\n}\n"],"names":["s","m","h","d","w","y","ms","val","options","type","parse","fmtLong","fmtShort","str","match","n","msAbs","plural","name","isPlural","setup","env","createDebug","coerce","disable","enable","enabled","require$$0","destroy","key","selectColor","namespace","hash","i","prevTime","enableOverride","namespacesCache","enabledCache","debug","args","self","curr","index","format","formatter","extend","v","delimiter","newDebug","namespaces","split","ns","matchesTemplate","search","template","searchIndex","templateIndex","starIndex","matchIndex","skip","common","exports","formatArgs","save","load","useColors","localstorage","warned","module","c","lastC","r","define_process_env_default","formatters","error","log","pojo","target","copy","value","result","BLOCK_MARKER","apply","rest","path","range","p","RANGE_ARRAY","start","end","ZERO_LENGTH","DELETE","INSERT","APPEND","REPLACE","seq","a","b","nextkey","get","obj","fromAutomerge","autopatch","payload","autoproduce","doc","patch","cache","makeDocumentProjection","handle","onCleanup","item","set","createStore","ondelete","reconcile","produce","access","createDocumentProjection","createMemo","RepoContext","createContext","useDocHandle","url","contextRepo","useContext","repo","getExistingHandle","unwrappedURL","peekReadyHandle","mutate","createResource","url2","createEffect","isQueryable","state2","state","useDocument","USER_COLOR_PALETTE","colorFromString","acc","char","ACCOUNT_URL_STORAGE_KEY","accountToken","documentId","parseAutomergeUrl","PICTURE","squarePicture","file","crop","bitmap","side","from","size","canvas","blob","hexColor","color","context","VIEWPORT","MAX_ZOOM","Cropper","props","natural","setNatural","createSignal","zoom","setZoom","offset","setOffset","x","scale","Math","min","clamp","next","max","onLoad","event","img","currentTarget","naturalWidth","naturalHeight","onPointerDown","el","setPointerCapture","pointerId","px","clientX","py","clientY","onMove","move","onUp","removeEventListener","addEventListener","zoomTo","previous","ratio","o","onCrop","dialog","onMount","showModal","_el$","_tmpl$2","_el$2","firstChild","_el$3","_el$5","nextSibling","_el$6","_el$7","$$click","onCancel","preventDefault","_ref$","_$use","deltaY","$$pointerdown","_$setAttribute","_$insert","_$createComponent","Show","when","children","_el$4","_tmpl$","$$input","valueAsNumber","_$effect","_$addEventListener","_p$","_v$","src","_v$2","width","height","transform","visibility","_v$3","e","t","_$style","disabled","undefined","_$delegateEvents","You","contactUrl","account","me","contact","making","myContact","find","create2","then","change","changeMe","fn","rename","done","trim","pictureInput","cropping","setCropping","busy","setBusy","failed","setFailed","avatarUrl","stopCropping","pending","URL","revokeObjectURL","keepPicture","content","image","mimeType","extension","console","myColor","choosingColor","setChoosingColor","_tmpl$3","_el$8","_el$9","_el$0","click","fallback","_tmpl$4","_el$11","_tmpl$5","_$owner","_$getOwner","docUrl","files","createObjectURL","Pointer","title","onClick","open","Colors","onChange","onClose","$$keydown","blur","AccountKey","_v$4","_v$5","_v$6","_$setStyleProperty","_el$12","_tmpl$6","_el$13","_el$14","_el$15","_el$16","_v$7","_v$8","_v$9","_v$0","_v$1","_v$10","popup","contains","closest","onKeyDown","document","custom","some","_el$17","_tmpl$7","_el$18","_el$19","_ref$2","For","each","_el$20","_tmpl$8","_v$11","_v$12","_v$13","_v$14","leaving","setLeaving","copied","setCopied","navigator","clipboard","writeText","setTimeout","signOut","localStorage","removeItem","window","location","replace","copyButton","_el$21","_tmpl$9","CopyIcon","CheckIcon","escape","_el$22","_tmpl$10","_el$23","_tmpl$0","_el$24","_el$25","_tmpl$1","_el$26","_el$27","_el$28","queueMicrotask","focus","_tmpl$11","_tmpl$12","subscribe","element","selector","onValue","channel","port","stopped","ensureToolStorage","toolId","resolve","stop","isValidAutomergeUrl","useToolStorage","init","linked","made","setMade","alive","ready","current","found","found_","Toggle","checked","id","label","PREFERENCES","defaultFor","mode","documentElement","getAttribute","useThemes","registry","getRegistry","read","all","map","theme","colorScheme","sort","localeCompare","themes","setThemes","off","on","useMode","query","matchMedia","setMode","matches","ThemePreview","Cards","onChoose","chosen","Theme","prefs","which","splitByHand","setSplitByHand","choose","light","dark","forMode","Number","length","_el$1","_el$10","FRAME_RELOAD_DELAY_MS","useRegistry","slice","tools","setTools","tagged","tag","filter","tool","unlisted","tags","includes","slotId","slot","runningFrame","frames","ids","Set","frame","parentElement","tagName","has","Frame","components","names","Map","plugin","frameToolId","titlebar","threepane","threepaneHandle","doctitle","chooseFrame","flush","catch","reload","Strip","values","setValues","adding","setAdding","setCustom","setFrom","to","setTo","nameOf","available","option","add","clean","drop","moved","splice","dataTransfer","dropEffect","effectAllowed","_","SETTINGS_PLUGIN_TYPE","TYPES","KEY","UNSAFE","isObject","isValidKey","part","settingsOf","out","setting","optionsOf","valueAt","here","settingValue","setValueAt","parts","last","clampNumber","raw","useSettingsPlugins","String","plugins","setPlugins","Contributed","PluginSection","settings","headingId","Field","description","text","control","Switch","Match","_$memo","multiline","placeholder","default","unit","step","selected","SettingsPage","renderSettings","dispose","render","Provider"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const y="modulepreload",
|
|
1
|
+
const y="modulepreload",_=function(i,a){return new URL(i,a).href},p={},E=function(a,u,d){let f=Promise.resolve();if(u&&u.length>0){let v=function(e){return Promise.all(e.map(o=>Promise.resolve(o).then(s=>({status:"fulfilled",value:s}),s=>({status:"rejected",reason:s}))))};const r=document.getElementsByTagName("link"),t=document.querySelector("meta[property=csp-nonce]"),h=t?.nonce||t?.getAttribute("nonce");f=v(u.map(e=>{if(e=_(e,d),e in p)return;p[e]=!0;const o=e.endsWith(".css"),s=o?'[rel="stylesheet"]':"";if(d)for(let c=r.length-1;c>=0;c--){const l=r[c];if(l.href===e&&(!o||l.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${e}"]${s}`))return;const n=document.createElement("link");if(n.rel=o?"stylesheet":y,o||(n.as="script"),n.crossOrigin="",n.href=e,h&&n.setAttribute("nonce",h),document.head.appendChild(n),o)return new Promise((c,l)=>{n.addEventListener("load",c),n.addEventListener("error",()=>l(new Error(`Unable to preload CSS for ${e}`)))})}))}function m(r){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=r,window.dispatchEvent(t),!t.defaultPrevented)throw r}return f.then(r=>{for(const t of r||[])t.status==="rejected"&&m(t.reason);return a().catch(m)})},g=[{type:"patchwork:tool",id:"settings",name:"Settings",icon:"Settings",supportedDatatypes:["account"],async load(){return(await E(async()=>{const{default:i}=await import("./assets/Settings-Do_cRfv4.js");return{default:i}},[],import.meta.url)).default}}];export{g as plugins};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"gsCAEaA,
|
|
1
|
+
{"version":3,"mappings":"gsCAEaA,EAAU,CACrB,CACE,KAAM,iBACN,GAAI,WACJ,KAAM,WACN,KAAM,WACN,mBAAoB,CAAC,SAAS,EAC9B,MAAM,MAAO,CACX,OAAQ,MAAAC,EAAA,wBAAAC,CAAA,OAAM,QAAO,+BAAY,iBAAAA,CAAA,wBAAG,OACtC,EAEJ","names":["plugins","__vitePreload","__vite_default__"],"ignoreList":[],"sources":["../src/index.ts"],"sourcesContent":["// the settings page. other packages get a section on it by registering a\n// `patchwork:settings` plugin: static JSON, see ./schema.ts\nexport const plugins = [\n {\n type: \"patchwork:tool\",\n id: \"settings\",\n name: \"Settings\",\n icon: \"Settings\",\n supportedDatatypes: [\"account\"],\n async load() {\n return (await import(\"./Settings\")).default;\n },\n },\n];\n"],"file":"index.js"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as i,c as m}from"./chunk-3Q7KVV6Y.js";import{template as a}from"solid-js/web";import{delegateEvents as p}from"solid-js/web";import{insert as u}from"solid-js/web";import{createComponent as n}from"solid-js/web";import{effect as f}from"solid-js/web";import{getOwner as _}from"solid-js/web";import{Show as s}from"solid-js";import{render as b}from"solid-js/web";var d=a('<button type=button class="account-bar__button account-bar__avatar"title=Settings aria-label=Settings><patchwork-view tool-id=contact-avatar>',!0,!1,!1),$=a("<button type=button class=account-bar__button>Packages"),g=a("<footer class=account-bar>");function h(r){let t=i(r.handle),c=o=>r.element.dispatchEvent(m(o));return(()=>{var o=g();return u(o,n(s,{get when(){return t.contactUrl},get children(){var e=d(),l=e.firstChild;return e.$$click=()=>c({url:r.handle.url,toolId:"settings"}),l._$owner=_(),f(()=>l.docUrl=t.contactUrl),e}}),null),u(o,n(s,{get when(){return t.moduleSettingsUrl},get children(){var e=$();return e.$$click=()=>c({url:t.moduleSettingsUrl,toolId:"packages"}),e}}),null),o})()}function A(r,t){return b(()=>n(h,{handle:r,get repo(){return t.repo},element:t}),t)}p(["click"]);export{h as a,A as b};
|
|
2
|
+
//# sourceMappingURL=chunk-4RJIKO65.js.map
|