buoy-ui 0.1.1 → 0.1.2
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/README.md +11 -1
- package/dist/buoy.global.js +1 -1
- package/dist/index.cjs +2 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/vanilla.cjs +2 -1
- package/dist/vanilla.cjs.map +1 -1
- package/dist/vanilla.js +2 -1
- package/dist/vanilla.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/core/styles.ts","../src/core/inject.ts","../src/core/format.ts","../src/core/icons.ts","../src/core/island.ts","../src/core/store.ts","../src/core/shared.ts","../src/core/mount.ts","../src/core/api.ts"],"sourcesContent":["import { useEffect, useRef, useSyncExternalStore } from 'react';\nimport { mount } from './core/mount';\nimport { shared } from './core/shared';\nimport type { BuoyOptions, Labels, MountHandle, MountOptions, TaskInfo } from './core/types';\n\nexport { buoy } from './core/api';\nexport type {\n Buoy as BuoyApi,\n BuoyOptions,\n ColorScheme,\n IconInput,\n IconName,\n Labels,\n LiveHandle,\n LiveOptions,\n LiveView,\n MessageAction,\n MessageOptions,\n MessageType,\n Position,\n PromiseOptions,\n Resting,\n TaskContext,\n TaskHandle,\n TaskInfo,\n TaskStatus,\n Theme,\n Tone,\n TrackOptions,\n} from './core/types';\n\nexport type BuoyProps = Omit<MountOptions, keyof BuoyOptions> & BuoyOptions;\n\n/**\n * Renders the island. Put it once near the root of your app, then call `buoy()` from anywhere.\n * It renders nothing in React's tree: the island lives in its own element at the end of <body>.\n */\nexport function Buoy(props: BuoyProps): null {\n const { container, injectStyles, nonce, labels, ...options } = props;\n const handle = useRef<MountHandle | null>(null);\n // Label functions are read through refs, so inline arrow functions don't reconfigure on every render.\n const latestLabels = useRef(labels);\n latestLabels.current = labels;\n\n useEffect(() => {\n const h = mount({ container, injectStyles, nonce });\n handle.current = h;\n return () => {\n handle.current = null;\n h.destroy();\n };\n }, [container, injectStyles, nonce]);\n\n const { store } = shared();\n const defaults = store.defaults;\n const { theme, position, resting, richColors, expandOnHover, duration, concurrency, guard, haptics, colorScheme, offset, taskIcon } = options;\n const noun = labels?.noun;\n const hasActive = !!labels?.active;\n const hasDoneOne = !!labels?.doneOne;\n const hasDoneMany = !!labels?.doneMany;\n\n useEffect(() => {\n const d = defaults.options;\n const next: Labels = {\n noun: noun ?? defaults.labels.noun,\n active: hasActive ? (tasks) => latestLabels.current!.active!(tasks) : defaults.labels.active,\n doneOne: hasDoneOne ? (task) => latestLabels.current!.doneOne!(task) : defaults.labels.doneOne,\n doneMany: hasDoneMany ? (count) => latestLabels.current!.doneMany!(count) : defaults.labels.doneMany,\n };\n // Missing props go back to their defaults, so removing a prop undoes it.\n store.configure({\n theme: theme ?? d.theme,\n position: position ?? d.position,\n resting: resting ?? d.resting,\n richColors: richColors ?? d.richColors,\n expandOnHover: expandOnHover ?? d.expandOnHover,\n duration: duration ?? d.duration,\n concurrency: concurrency ?? d.concurrency,\n guard: guard ?? d.guard,\n haptics: haptics ?? d.haptics,\n colorScheme: colorScheme ?? d.colorScheme,\n offset: offset ?? d.offset,\n taskIcon: taskIcon ?? d.taskIcon,\n labels: next,\n });\n }, [store, defaults, theme, position, resting, richColors, expandOnHover, duration, concurrency, guard, haptics, colorScheme, offset, taskIcon, noun, hasActive, hasDoneOne, hasDoneMany]);\n\n return null;\n}\n\nconst NO_TASKS: TaskInfo[] = [];\n\n/** The current tasks, kept in sync. Use it to show progress somewhere else in your UI. */\nexport function useBuoyTasks(): TaskInfo[] {\n const { store } = shared();\n const cache = useRef<{ version: number; tasks: TaskInfo[] }>({ version: -1, tasks: NO_TASKS });\n return useSyncExternalStore(\n (onChange) => store.subscribe(() => onChange()),\n () => {\n if (cache.current.version !== store.state.version) cache.current = { version: store.state.version, tasks: store.tasks() };\n return cache.current.tasks;\n },\n () => NO_TASKS,\n );\n}\n","// The island's stylesheet. Injected once at mount, or import `buoy-ui/styles.css` and pass injectStyles={false}.\n// Public custom properties (set them anywhere above the island, e.g. on :root):\n// --buoy-accent progress color on dark surfaces (default #2DD4BF)\n// --buoy-accent-strong progress color on light surfaces (default #0F766E)\n// --buoy-ink fill of the Ink and Notch themes (default #0B0B0C)\n// --buoy-font font stack (default system UI)\n// --buoy-offset distance from the screen edge (default 12px)\n// --buoy-z stacking order (default 2147483000)\n// Read-only tokens for live activity markup, resolved for the current theme:\n// --buoy-bg, --buoy-fg, --buoy-fg-2 (muted), --buoy-chip, --buoy-chip-2 (hover), --buoy-track,\n// --buoy-tint (accent on this surface), --buoy-success, --buoy-error, --buoy-warn\n\nconst INK_DARK = '--a-edge:rgba(255,255,255,.14);--a-shadow:0 14px 30px -14px rgba(0,0,0,.9),0 2px 6px -2px rgba(0,0,0,.5);';\n\nconst FROST_LIGHT = '--a-bg:rgba(255,255,255,.66);--a-fg:#0B0B0C;--a-fg2:#3F3F46;--a-edge:rgba(255,255,255,.7);--a-shadow:0 12px 30px -14px rgba(0,0,0,.4);--a-chip:rgba(11,11,12,.08);--a-chip-2:rgba(11,11,12,.14);--a-primary:#0B0B0C;--a-primary-fg:#fff;--a-track:rgba(11,11,12,.14);--a-row:rgba(11,11,12,.05);--a-row-2:rgba(11,11,12,.09);--a-accent:var(--buoy-accent-strong,#0F766E);--a-blur:blur(20px) saturate(1.6);--a-success:#047857;--a-error:#B91C1C;--a-warn:#B45309;--a-info:#1D4ED8;';\nconst FROST_DARK = '--a-bg:rgba(32,32,37,.62);--a-fg:#F4F4F5;--a-fg2:#C8C8CE;--a-edge:rgba(255,255,255,.12);--a-chip:rgba(255,255,255,.1);--a-chip-2:rgba(255,255,255,.16);--a-primary:#F4F4F5;--a-primary-fg:#0B0B0C;--a-track:rgba(255,255,255,.16);--a-row:rgba(255,255,255,.05);--a-row-2:rgba(255,255,255,.09);--a-accent:var(--buoy-accent,#2DD4BF);--a-success:#34D399;--a-error:#F87171;--a-warn:#FBBF24;--a-info:#60A5FA;';\n\nconst PAPER_LIGHT = '--a-bg:#fff;--a-fg:#111113;--a-fg2:#52525B;--a-edge:#E4E4E7;--a-shadow:0 12px 28px -16px rgba(0,0,0,.3),0 1px 2px rgba(0,0,0,.06);--a-chip:#F4F4F5;--a-chip-2:#EAEAEC;--a-primary:#0B0B0C;--a-primary-fg:#fff;--a-track:#E4E4E7;--a-row:#F7F7F8;--a-row-2:#F0F0F2;--a-accent:var(--buoy-accent-strong,#0F766E);--a-blur:none;--a-success:#047857;--a-error:#B91C1C;--a-warn:#B45309;--a-info:#1D4ED8;';\nconst PAPER_DARK = '--a-bg:#18181B;--a-fg:#F4F4F5;--a-fg2:#A1A1AA;--a-edge:#2E2E34;--a-shadow:0 14px 30px -14px rgba(0,0,0,.9),0 2px 6px -2px rgba(0,0,0,.5);--a-chip:#232328;--a-chip-2:#2C2C32;--a-primary:#F4F4F5;--a-primary-fg:#0B0B0C;--a-track:#2E2E34;--a-row:#1F1F23;--a-row-2:#26262B;--a-accent:var(--buoy-accent,#2DD4BF);--a-success:#34D399;--a-error:#F87171;--a-warn:#FBBF24;--a-info:#60A5FA;';\n\nconst SOLID = '.buoy:is([data-buoy-theme=\"ink\"],[data-buoy-theme=\"notch\"])';\nconst FROST = '.buoy[data-buoy-theme=\"frost\"]';\nconst PAPER = '.buoy[data-buoy-theme=\"paper\"]';\nconst NOTCH = '.buoy[data-buoy-theme=\"notch\"]';\nconst BOTTOM = '.buoy[data-position=\"bottom\"]';\n\nconst rich = (type: string, tone: string) =>\n `.buoy[data-rich=\"true\"][data-type=\"${type}\"]{--a-fill:color-mix(in srgb,var(${tone}) 20%,var(--a-bg));--a-edge:color-mix(in srgb,var(${tone}) 32%,transparent)}`;\n\nexport const css = [\n /* Root and tokens */\n '.buoy{position:fixed;left:50%;top:calc(var(--buoy-offset,12px) + env(safe-area-inset-top,0px));width:0;height:0;z-index:var(--buoy-z,2147483000);font-family:var(--buoy-font,ui-sans-serif,system-ui,-apple-system,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif);font-size:14px;font-weight:400;line-height:1.25;letter-spacing:normal;text-align:left;text-transform:none;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;'\n + '--a-bg:var(--buoy-ink,#0B0B0C);--a-fg:#fff;--a-fg2:rgba(255,255,255,.62);--a-edge:rgba(255,255,255,.07);--a-shadow:0 14px 30px -14px rgba(0,0,0,.55),0 2px 6px -2px rgba(0,0,0,.25);--a-chip:rgba(255,255,255,.1);--a-chip-2:rgba(255,255,255,.16);--a-primary:#fff;--a-primary-fg:#0B0B0C;--a-track:rgba(255,255,255,.16);--a-row:rgba(255,255,255,.05);--a-row-2:rgba(255,255,255,.09);--a-accent:var(--buoy-accent,#2DD4BF);--a-blur:none;--a-success:#34D399;--a-error:#F87171;--a-warn:#FBBF24;--a-info:#60A5FA;--a-fill:var(--a-bg);--a-danger:#DC2626;--buoy-bg:var(--a-bg);--buoy-fg:var(--a-fg);--buoy-fg-2:var(--a-fg2);--buoy-chip:var(--a-chip);--buoy-chip-2:var(--a-chip-2);--buoy-track:var(--a-track);--buoy-tint:var(--a-accent);--buoy-success:var(--a-success);--buoy-error:var(--a-error);--buoy-warn:var(--a-warn)}',\n `${SOLID}[data-scheme=\"dark\"]{${INK_DARK}}`,\n `@media (prefers-color-scheme:dark){${SOLID}[data-scheme=\"system\"]{${INK_DARK}}}`,\n `${FROST}{${FROST_LIGHT}}`,\n `${FROST}[data-scheme=\"dark\"]{${FROST_DARK}}`,\n `@media (prefers-color-scheme:dark){${FROST}[data-scheme=\"system\"]{${FROST_DARK}}}`,\n `${PAPER}{${PAPER_LIGHT}}`,\n `${PAPER}[data-scheme=\"dark\"]{${PAPER_DARK}}`,\n `@media (prefers-color-scheme:dark){${PAPER}[data-scheme=\"system\"]{${PAPER_DARK}}}`,\n rich('success', '--a-success'),\n rich('error', '--a-error'),\n rich('warning', '--a-warn'),\n rich('info', '--a-info'),\n\n /* Resets with zero specificity so component rules always win */\n ':where(.buoy) *,:where(.buoy) *::before,:where(.buoy) *::after{box-sizing:border-box}',\n ':where(.buoy) button{margin:0;font:inherit;color:inherit;letter-spacing:inherit;text-transform:none;-webkit-appearance:none;appearance:none}',\n '.buoy [hidden]{display:none!important}',\n\n /* Geometry layers */\n `${NOTCH}{top:env(safe-area-inset-top,0px)}`,\n `${BOTTOM}{top:auto;bottom:calc(var(--buoy-offset,12px) + env(safe-area-inset-bottom,0px))}`,\n `${NOTCH}[data-position=\"bottom\"]{top:auto;bottom:env(safe-area-inset-bottom,0px)}`,\n '.buoy-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}',\n '.buoy-stage,.buoy-drag,.buoy-goo{position:absolute;left:0;top:0;width:0;height:0}',\n '.buoy-shadow,.buoy-bshadow,.buoy-fill,.buoy-bfill,.buoy-shell,.buoy-bubble{position:absolute;left:0;top:0}',\n `${BOTTOM} :is(.buoy-stage,.buoy-drag,.buoy-goo,.buoy-shadow,.buoy-bshadow,.buoy-fill,.buoy-bfill,.buoy-shell,.buoy-bubble){top:auto;bottom:0}`,\n '.buoy-bshadow,.buoy-bfill,.buoy-bubble{width:44px;height:44px}',\n '.buoy-shadow,.buoy-bshadow{box-shadow:var(--a-shadow);pointer-events:none}',\n '.buoy-fill,.buoy-bfill{background-color:var(--a-fill);-webkit-backdrop-filter:var(--a-blur);backdrop-filter:var(--a-blur);pointer-events:none;transition:background-color .25s ease}',\n '.buoy-goo.is-gooey{filter:url(#buoy-goo)}',\n '.buoy-shell{overflow:hidden;color:var(--a-fg);box-shadow:inset 0 0 0 1px var(--a-edge);isolation:isolate;touch-action:none;transition:box-shadow .25s ease}',\n '.buoy-bubble{padding:0;border:0;background:transparent;box-shadow:inset 0 0 0 1px var(--a-edge);color:var(--a-fg);display:grid;place-items:center;cursor:pointer}',\n '.buoy-bub-ic{display:grid;color:var(--a-error)}',\n '.buoy-bub-ic svg{width:20px;height:20px}',\n '.buoy-layer{position:absolute;left:50%;top:0;translate:-50% 0;width:max-content}',\n `${BOTTOM} .buoy-layer{top:auto;bottom:0}`,\n\n /* Notch shoulders */\n `${NOTCH} :is(.buoy-fill,.buoy-bfill)::before,${NOTCH} :is(.buoy-fill,.buoy-bfill)::after{content:\"\";position:absolute;top:0;width:16px;height:16px;pointer-events:none}`,\n `${NOTCH} :is(.buoy-fill,.buoy-bfill)::before{left:-16px;background:radial-gradient(circle at 0 100%,transparent 15.5px,var(--a-fill) 16px)}`,\n `${NOTCH} :is(.buoy-fill,.buoy-bfill)::after{right:-16px;background:radial-gradient(circle at 100% 100%,transparent 15.5px,var(--a-fill) 16px)}`,\n `${NOTCH}[data-position=\"bottom\"] :is(.buoy-fill,.buoy-bfill)::before{top:auto;bottom:0;background:radial-gradient(circle at 0 0,transparent 15.5px,var(--a-fill) 16px)}`,\n `${NOTCH}[data-position=\"bottom\"] :is(.buoy-fill,.buoy-bfill)::after{top:auto;bottom:0;background:radial-gradient(circle at 100% 0,transparent 15.5px,var(--a-fill) 16px)}`,\n\n /* Tones */\n '.buoy [data-tone=\"success\"]{--tone:var(--a-success)}',\n '.buoy [data-tone=\"error\"]{--tone:var(--a-error)}',\n '.buoy [data-tone=\"warn\"]{--tone:var(--a-warn)}',\n '.buoy [data-tone=\"info\"]{--tone:var(--a-info)}',\n '.buoy [data-tone=\"accent\"]{--tone:var(--a-accent)}',\n\n /* Compact row */\n '.buoy-row{display:flex;align-items:center;gap:10px;height:44px;padding:0 18px 0 6px;white-space:nowrap;font-size:14px;font-weight:500;letter-spacing:-.005em;color:var(--a-fg)}',\n '.buoy-row.no-icon{padding-left:18px}',\n '.buoy-row.end-action{padding-right:4px}',\n '.buoy-row.end-ring{padding-right:8px}',\n '.buoy-row.end-badge{padding-right:10px}',\n 'button.buoy-row{border:0;background:none;cursor:pointer;text-align:left}',\n '.buoy-ic{width:32px;height:32px;flex:none;border-radius:999px;background:var(--a-chip);color:var(--a-fg);display:grid;place-items:center}',\n '.buoy-ic svg{width:18px;height:18px}',\n '.buoy-ic[data-tone]:not([data-tone=\"\"]),.buoy-tile[data-tone]:not([data-tone=\"\"]){background:color-mix(in srgb,var(--tone) 17%,transparent);color:var(--tone)}',\n '.buoy-title{overflow:hidden;text-overflow:ellipsis;max-width:min(260px,calc(100vw - 170px))}',\n '.buoy-pct{margin-left:2px;min-width:3.4ch;text-align:right;font-size:13px;color:var(--a-fg2);font-variant-numeric:tabular-nums}',\n '.buoy-badge{height:24px;padding:0 8px;border-radius:999px;background:var(--a-chip-2);font-size:12px;font-weight:600;display:inline-flex;align-items:center;font-variant-numeric:tabular-nums}',\n '.buoy-act{flex:none;height:44px;padding:0 0 0 4px;border:0;background:none;display:flex;align-items:center;cursor:pointer}',\n '.buoy-act>span{height:32px;padding:0 14px;border-radius:999px;background:var(--a-chip);font-size:13px;font-weight:600;display:flex;align-items:center;transition:background-color .15s ease}',\n '.buoy-act:hover>span{background:var(--a-chip-2)}',\n '.buoy-link{padding:0;border:0;background:none;cursor:pointer}',\n '.buoy-rest{display:block;width:104px;height:30px;padding:0;border:0;background:none}',\n 'button.buoy-rest{cursor:pointer}',\n '.buoy-ring{width:28px;height:28px;flex:none;transform:rotate(-90deg)}',\n '.buoy-ring circle{fill:none;stroke-width:3.5}',\n '.buoy-ring .trk{stroke:var(--a-track)}',\n '.buoy-ring .val{stroke:var(--a-accent);stroke-linecap:round;transition:stroke-dashoffset .35s ease,opacity .2s ease}',\n '.buoy-ring.is-muted .val{stroke:var(--a-fg2)}',\n '.buoy-spin{animation:buoy-spin .9s linear infinite}',\n '@keyframes buoy-spin{to{transform:rotate(360deg)}}',\n '.buoy-ic .draw{stroke-dasharray:20;stroke-dashoffset:20;animation:buoy-draw .36s .1s cubic-bezier(.2,.8,.2,1) forwards}',\n '@keyframes buoy-draw{to{stroke-dashoffset:0}}',\n\n /* Expanded message */\n '.buoy-exp{width:min(380px,calc(100vw - 24px));padding:14px;display:flex;flex-direction:column;gap:12px;white-space:normal;color:var(--a-fg)}',\n '.buoy-exp-head{display:flex;align-items:center;gap:12px}',\n '.buoy-tile{width:44px;height:44px;flex:none;border-radius:14px;background:var(--a-chip);color:var(--a-fg);display:grid;place-items:center}',\n '.buoy-tile svg{width:22px;height:22px}',\n '.buoy-exp-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}',\n '.buoy-exp-title{font-size:15px;font-weight:600;letter-spacing:-.01em}',\n '.buoy-exp-desc{font-size:13px;color:var(--a-fg2)}',\n '.buoy-x{width:44px;height:44px;flex:none;padding:0;border:0;border-radius:999px;background:transparent;color:var(--a-fg2);display:grid;place-items:center;cursor:pointer}',\n '.buoy-x:hover{color:var(--a-fg)}',\n '.buoy-x svg{width:16px;height:16px}',\n '.buoy-actions{display:flex;gap:8px}',\n '.buoy-btn.is-danger{background:var(--a-danger);color:#fff}',\n '.buoy-btn.is-danger:hover{background:var(--a-danger);opacity:.9}',\n '.buoy-custom{display:block;color:var(--a-fg)}',\n 'button.buoy-custom{margin:0;padding:0;border:0;background:none;font:inherit;letter-spacing:inherit;text-align:inherit;cursor:pointer}',\n '.buoy-custom:focus{outline:none}',\n 'button.buoy-custom:focus-visible{outline:2px solid var(--a-accent);outline-offset:-3px;border-radius:999px}',\n '.buoy-btn{flex:1;height:44px;border:0;border-radius:999px;background:var(--a-chip);color:var(--a-fg);font-size:14px;font-weight:600;line-height:1;cursor:pointer;transition:background-color .15s ease}',\n '.buoy-btn:hover{background:var(--a-chip-2)}',\n '.buoy-btn.is-primary{background:var(--a-primary);color:var(--a-primary-fg)}',\n '.buoy-btn.is-primary:hover{background:var(--a-primary);opacity:.9}',\n\n /* Tray */\n '.buoy-tray{width:min(420px,calc(100vw - 16px));padding:8px;display:flex;flex-direction:column;gap:4px;white-space:normal;color:var(--a-fg)}',\n '.buoy-tray-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:2px 2px 2px 14px}',\n '.buoy-tray-titles{display:flex;flex-direction:column;gap:2px;min-width:0}',\n '.buoy-tray-title{font-size:15px;font-weight:600;letter-spacing:-.01em}',\n '.buoy-tray-sub{font-size:12px;color:var(--a-fg2)}',\n '.buoy-tray-tools{display:flex;align-items:center;flex:none}',\n '.buoy-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;max-height:min(52vh,420px);overflow-y:auto;overscroll-behavior:contain;touch-action:pan-y}',\n '.buoy-task{display:flex;align-items:center;gap:12px;padding:10px 2px 10px 10px;border-radius:22px;background:var(--a-row)}',\n '.buoy-task:hover,.buoy-task:focus-within{background:var(--a-row-2)}',\n '.buoy-task[data-status=\"failed\"]{background:color-mix(in srgb,var(--a-error) 9%,transparent)}',\n '.buoy-tile.sm{width:40px;height:40px;border-radius:12px}',\n '.buoy-tile.sm svg{width:20px;height:20px}',\n '.buoy-task-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}',\n '.buoy-task-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px}',\n '.buoy-task-name{font-size:14px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}',\n '.buoy-task-state{flex:none;font-size:12px;font-weight:500;color:var(--a-fg2);font-variant-numeric:tabular-nums}',\n '.buoy-task-state.is-error{color:var(--a-error);font-weight:600}',\n '.buoy-bar{height:4px;border-radius:999px;background:var(--a-track);overflow:hidden}',\n '.buoy-bar>i{display:block;height:100%;border-radius:inherit;background:var(--a-accent);transition:width .3s ease}',\n '.buoy-task[data-status=\"paused\"] .buoy-bar>i{background:var(--a-fg2)}',\n '.buoy-task[data-status=\"failed\"] .buoy-bar>i{background:var(--a-error)}',\n '.buoy-task-meta{font-size:12px;color:var(--a-fg2);font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}',\n '.buoy-task-actions{display:flex;flex:none}',\n '.buoy-ib{width:44px;height:44px;padding:0;border:0;background:transparent;color:var(--a-fg);display:grid;place-items:center;cursor:pointer}',\n '.buoy-ib>span{width:32px;height:32px;border-radius:999px;background:var(--a-chip);display:grid;place-items:center;transition:background-color .15s ease}',\n '.buoy-ib:hover>span{background:var(--a-chip-2)}',\n '.buoy-ib svg{width:14px;height:14px}',\n '.buoy-task-actions .buoy-ib+.buoy-ib{margin-left:-8px}',\n '.buoy-reveal{display:none}',\n '.buoy-task:hover .buoy-reveal,.buoy-task:focus-within .buoy-reveal{display:grid}',\n '@media (hover:none){.buoy-reveal{display:grid}}',\n '.buoy-tray-foot{display:flex;align-items:center;gap:10px;padding:2px 2px 0 14px;font-size:12px;color:var(--a-fg2)}',\n '.buoy-tray-foot>svg{width:16px;height:16px;flex:none}',\n '.buoy-tray-foot>span{flex:1}',\n '.buoy-empty{margin:0;padding:14px;font-size:13px;color:var(--a-fg2)}',\n\n /* Focus */\n '.buoy button:focus-visible{outline:none}',\n '.buoy button:focus-visible>span,.buoy .buoy-btn:focus-visible,.buoy .buoy-x:focus-visible,.buoy .buoy-link:focus-visible,.buoy .buoy-bubble:focus-visible,.buoy button.buoy-rest:focus-visible{outline:2px solid var(--a-accent);outline-offset:2px}',\n '.buoy button.buoy-live:focus-visible{outline:2px solid var(--a-accent);outline-offset:-3px;border-radius:999px}',\n\n /* Motion preferences */\n '@media (prefers-reduced-motion:reduce){.buoy-spin{animation-duration:1.8s}.buoy-ic .draw{animation:none;stroke-dashoffset:0}.buoy-ring .val,.buoy-bar>i{transition:none}}',\n].join('\\n');\n","import { css } from './styles';\n\n/** Adds the stylesheet once, at the top of <head> so your own CSS can override it. */\nexport function injectStyles(doc: Document, nonce?: string): void {\n if (doc.querySelector('style[data-buoy]')) return;\n const style = doc.createElement('style');\n style.setAttribute('data-buoy', '');\n if (nonce) style.nonce = nonce;\n style.textContent = css;\n const head = doc.head || doc.getElementsByTagName('head')[0] || doc.documentElement;\n head.insertBefore(style, head.firstChild);\n}\n","import type { Task } from './store';\n\nexport const clamp = (v: number, min: number, max: number): number => Math.min(max, Math.max(min, v));\n\nconst ESC: Record<string, string> = { '&': '&', '<': '<', '>': '>', '\"': '"', \"'\": ''' };\nexport const esc = (s: unknown): string => String(s ?? '').replace(/[&<>\"']/g, (c) => ESC[c]);\n\ntype Progressing = Pick<Task, 'status' | 'total' | 'loaded' | 'fraction'>;\nexport const frac = (t: Progressing): number =>\n t.status === 'done' ? 1 : t.total > 0 ? clamp(t.loaded / t.total, 0, 1) : t.fraction;\n\nconst UNITS: ReadonlyArray<readonly [number, string]> = [[1e9, 'GB'], [1e6, 'MB'], [1e3, 'KB']];\nfunction unitFor(total: number): readonly [number, string] {\n for (const unit of UNITS) if (total >= unit[0]) return unit;\n return [1, 'B'];\n}\nconst num = (v: number): string => (v >= 100 ? String(Math.round(v)) : String(Math.round(v * 10) / 10));\n\n/** \"18.2 of 24 MB\", sized by the total. */\nexport function amount(loaded: number, total: number): string {\n const [d, u] = unitFor(total);\n return `${num(loaded / d)} of ${num(total / d)} ${u}`;\n}\n\nexport function size(total: number): string {\n const [d, u] = unitFor(total);\n return `${num(total / d)} ${u}`;\n}\n\nexport function eta(t: Task): string {\n if (!(t.rate > 0) || !(t.total > 0)) return '';\n const s = Math.max(1, Math.round((t.total - t.loaded) / t.rate));\n return s < 60 ? `${s} s left` : `${Math.round(s / 60)} min left`;\n}\n\n/** Right-hand label on a tray row. */\nexport function stateText(t: Task): string {\n switch (t.status) {\n case 'running': return `${Math.round(frac(t) * 100)}%`;\n case 'queued': return 'Queued';\n case 'paused': return 'Paused';\n case 'failed': return 'Failed';\n default: return t.total > 0 && !t.format ? size(t.total) : 'Done';\n }\n}\n\n/** Second line on a tray row. */\nexport function metaText(t: Task): string {\n const amt = t.total > 0 ? (t.format ? t.format(t.loaded, t.total) : amount(t.loaded, t.total)) : `${Math.round(frac(t) * 100)}%`;\n switch (t.status) {\n case 'running': {\n const left = eta(t);\n return left ? `${amt} · ${left}` : amt;\n }\n case 'queued': return 'Waiting to start';\n case 'paused': return amt;\n case 'failed': return t.total > 0 ? `${t.error} at ${amt}` : t.error;\n default: return t.doneLabel || 'Finished';\n }\n}\n","export const ICONS = {\n link: '<path d=\"M10 14a4.5 4.5 0 0 0 6.4 0l3-3a4.5 4.5 0 0 0-6.4-6.4l-1.1 1.1\"/><path d=\"M14 10a4.5 4.5 0 0 0-6.4 0l-3 3a4.5 4.5 0 0 0 6.4 6.4l1.1-1.1\"/>',\n check: '<path class=\"draw\" d=\"M5.5 12.5l4 4L18.5 7.5\"/>',\n error: '<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 8v4.5\"/><path d=\"M12 16h.01\"/>',\n warning: '<path d=\"M10.3 4.6 3 17.5a2 2 0 0 0 1.7 3h14.6a2 2 0 0 0 1.7-3L13.7 4.6a2 2 0 0 0-3.4 0z\"/><path d=\"M12 9.5v4\"/><path d=\"M12 17h.01\"/>',\n info: '<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 11v5\"/><path d=\"M12 7.8h.01\"/>',\n upload: '<path d=\"M12 15V4.5\"/><path d=\"M7.5 9 12 4.5 16.5 9\"/><path d=\"M4.5 15v2.5a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V15\"/>',\n download: '<path d=\"M12 4.5V15\"/><path d=\"M7.5 10.5 12 15l4.5-4.5\"/><path d=\"M4.5 15v2.5a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V15\"/>',\n file: '<path d=\"M14 3.5H7.5a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2V8z\"/><path d=\"M14 3.5V8h4.5\"/><path d=\"M9 13h6\"/><path d=\"M9 16.5h4\"/>',\n archive: '<path d=\"M14 3.5H7.5a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2V8z\"/><path d=\"M14 3.5V8h4.5\"/><path d=\"M11 9.5h2\"/><path d=\"M11 12.5h2\"/><path d=\"M11 15.5h2\"/>',\n image: '<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"15\" rx=\"2.5\"/><circle cx=\"9\" cy=\"10\" r=\"1.75\"/><path d=\"m20.5 15.5-4.5-4.5-8.5 8.5\"/>',\n send: '<path d=\"M20.5 3.5 10 14\"/><path d=\"m20.5 3.5-6.5 17-4-6.5-6.5-4z\"/>',\n folder: '<path d=\"M3.5 7.5a2 2 0 0 1 2-2h3.6l2 2h7.4a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-13a2 2 0 0 1-2-2z\"/>',\n copy: '<rect x=\"8.5\" y=\"8.5\" width=\"11\" height=\"11\" rx=\"2.5\"/><path d=\"M15.5 8.5v-2a2 2 0 0 0-2-2h-7a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h2\"/>',\n stack: '<path d=\"m12 4 8 4.5-8 4.5-8-4.5z\"/><path d=\"m4 13 8 4.5 8-4.5\"/>',\n bell: '<path d=\"M6 16v-5a6 6 0 0 1 12 0v5l1.5 2h-15z\"/><path d=\"M10 20.5a2 2 0 0 0 4 0\"/>',\n timer: '<circle cx=\"12\" cy=\"13.5\" r=\"7.5\"/><path d=\"M12 10v3.5l2.5 2\"/><path d=\"M9.5 3h5\"/>',\n user: '<circle cx=\"12\" cy=\"8.5\" r=\"3.5\"/><path d=\"M5 19.5a7 7 0 0 1 14 0\"/>',\n pause: '<path d=\"M9 6v12\"/><path d=\"M15 6v12\"/>',\n play: '<path d=\"M8.5 6v12l9.5-6z\" fill=\"currentColor\"/>',\n retry: '<path d=\"M4.5 12a7.5 7.5 0 1 0 2.2-5.3\"/><path d=\"M4.5 4.5v4h4\"/>',\n x: '<path d=\"m6.5 6.5 11 11\"/><path d=\"m17.5 6.5-11 11\"/>',\n open: '<path d=\"M7 17 17 7\"/><path d=\"M9 7h8v8\"/>',\n up: '<path d=\"M6.5 14.5 12 9l5.5 5.5\"/>',\n down: '<path d=\"M6.5 9.5 12 15l5.5-5.5\"/>',\n} as const;\n\nexport type IconName = keyof typeof ICONS;\n\nconst OPEN = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\">';\n\n/** A built-in icon by name, or a custom `<svg>` string passed through as is. Custom SVG must be trusted markup. */\nexport function iconHTML(icon: string | null | undefined): string {\n if (!icon) return '';\n if (Object.prototype.hasOwnProperty.call(ICONS, icon)) return `${OPEN}${ICONS[icon as IconName]}</svg>`;\n return /^\\s*<svg[\\s>]/i.test(icon) ? icon : '';\n}\n\nexport const spinnerHTML = '<svg class=\"buoy-spin\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"8.5\" opacity=\".22\"/><path d=\"M12 3.5a8.5 8.5 0 0 1 8.5 8.5\"/></svg>';\n\nconst RING = 2 * Math.PI * 10.5;\nconst offset = (f: number) => (RING * (1 - Math.min(1, Math.max(0, f)))).toFixed(2);\n\nexport function ringHTML(fraction: number, muted: boolean): string {\n return `<svg class=\"buoy-ring${muted ? ' is-muted' : ''}\" viewBox=\"0 0 28 28\" aria-hidden=\"true\" focusable=\"false\"><circle class=\"trk\" cx=\"14\" cy=\"14\" r=\"10.5\"/><circle class=\"val\" cx=\"14\" cy=\"14\" r=\"10.5\" style=\"stroke-dasharray:${RING.toFixed(2)};stroke-dashoffset:${offset(fraction)};opacity:${fraction > 0.004 ? 1 : 0}\"/></svg>`;\n}\n\nexport function setRing(svg: Element | null, fraction: number): void {\n const val = svg && (svg.querySelector('.val') as SVGElement | null);\n if (!val) return;\n val.style.strokeDashoffset = offset(fraction);\n val.style.opacity = fraction > 0.004 ? '1' : '0';\n}\n","import { esc, frac, metaText, stateText } from './format';\nimport { iconHTML, ringHTML, setRing, spinnerHTML } from './icons';\nimport type { Msg, Store, Task } from './store';\n\ntype Spr = readonly [stiffness: number, damping: number];\nconst SPR = {\n enter: [420, 32],\n resize: [320, 30],\n expand: [300, 28],\n tray: [260, 26],\n bubble: [380, 22],\n drag: [420, 34],\n} as const satisfies Record<string, Spr>;\n\nconst BUBBLE = 44;\nconst GAP = 8;\nconst TYPE_ICON: Record<string, string> = { success: 'check', error: 'error', warning: 'warning', info: 'info' };\nconst TYPE_TONE: Record<string, string> = { success: 'success', error: 'error', warning: 'warn', info: 'info' };\nconst USER_TONE: Record<string, string> = { accent: 'accent', success: 'success', error: 'error', warning: 'warn', info: 'info' };\n\nconst MARKUP =\n '<div class=\"buoy-sr\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"></div>' +\n '<div class=\"buoy-stage\" hidden><div class=\"buoy-drag\">' +\n '<div class=\"buoy-shadow\"></div><div class=\"buoy-bshadow\"></div>' +\n '<div class=\"buoy-goo\"><div class=\"buoy-fill\"></div><div class=\"buoy-bfill\"></div></div>' +\n '<div class=\"buoy-shell\"></div>' +\n '<button class=\"buoy-bubble\" type=\"button\" data-act=\"bubble\" tabindex=\"-1\" aria-hidden=\"true\"></button>' +\n '</div></div>';\n\n// Blur plus an alpha threshold: shapes that come close melt into each other while the bubble splits off.\nconst GOO =\n '<svg data-buoy-goo aria-hidden=\"true\" width=\"0\" height=\"0\" style=\"position:absolute;width:0;height:0;overflow:hidden\"><defs>' +\n '<filter id=\"buoy-goo\" filterUnits=\"userSpaceOnUse\" x=\"-700\" y=\"-700\" width=\"1400\" height=\"1400\" color-interpolation-filters=\"sRGB\">' +\n '<feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"7\" result=\"b\"/>' +\n '<feColorMatrix in=\"b\" mode=\"matrix\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 22 -9\" result=\"g\"/>' +\n '<feComposite in=\"SourceGraphic\" in2=\"g\" operator=\"atop\"/>' +\n '</filter></defs></svg>';\n\ntype Kind = 'msg' | 'live' | 'attention' | 'rest' | 'tray';\ninterface View {\n kind: Kind;\n key: string;\n /** Structure signature. A change rebuilds the layer in place without a cross-fade. */\n sig: string;\n html: string;\n type: string;\n expanded: boolean;\n radius: number | null;\n spring: Spr;\n /** Cheap in-place updates (progress) that don't change the structure. */\n patch?: (el: HTMLElement) => void;\n}\ninterface Spring { x: number; v: number; t: number; k: number; c: number }\n\nexport interface IslandOptions {\n container?: HTMLElement | null;\n}\nexport interface Island {\n readonly element: HTMLElement;\n destroy(): void;\n}\n\nexport function createIsland(store: Store, options: IslandOptions = {}): Island {\n const doc = document;\n const win = window;\n const { cfg, state } = store;\n\n const motionQuery = typeof win.matchMedia === 'function' ? win.matchMedia('(prefers-reduced-motion: reduce)') : null;\n const reduced = () => !!(motionQuery && motionQuery.matches);\n const clock = () => (win.performance ? win.performance.now() : Date.now());\n const raf: (cb: (time: number) => void) => number =\n typeof win.requestAnimationFrame === 'function' ? (cb) => win.requestAnimationFrame(cb) : (cb) => win.setTimeout(() => cb(clock()), 16);\n const caf: (id: number) => void =\n typeof win.cancelAnimationFrame === 'function' ? (id) => win.cancelAnimationFrame(id) : (id) => win.clearTimeout(id);\n const canAnimate = typeof (doc.documentElement as Partial<HTMLElement>).animate === 'function';\n const play = (el: Element, keyframes: Keyframe[], o: KeyframeAnimationOptions): Animation | null =>\n canAnimate ? el.animate(keyframes, o) : null;\n\n /* ───── DOM ───── */\n\n const root = doc.createElement('div');\n root.className = 'buoy';\n root.innerHTML = MARKUP;\n const pick = <T extends Element = HTMLElement>(selector: string) => root.querySelector(selector) as T;\n const sr = pick('.buoy-sr');\n const stage = pick('.buoy-stage');\n const dragEl = pick('.buoy-drag');\n const goo = pick('.buoy-goo');\n const shell = pick('.buoy-shell');\n const bubble = pick<HTMLButtonElement>('.buoy-bubble');\n const shellParts = [pick('.buoy-shadow'), pick('.buoy-fill'), shell];\n const bubbleParts = [pick('.buoy-bshadow'), pick('.buoy-bfill'), bubble];\n const holder = doc.createElement('div');\n holder.innerHTML = GOO;\n const gooSvg = holder.firstElementChild as Element;\n\n /* ───── Springs: interruptible and retargetable mid-flight ───── */\n\n const spring = (x: number): Spring => ({ x, v: 0, t: x, k: 320, c: 30 });\n const S = { w: spring(44), h: spring(44), r: spring(22), p: spring(0), dy: spring(0) };\n type Key = keyof typeof S;\n const KEYS = Object.keys(S) as Key[];\n let frameId = 0;\n let last = 0;\n\n function kick() {\n if (frameId) return;\n last = clock();\n frameId = raf(step);\n }\n function step(time: number) {\n const dt = Math.min(0.05, Math.max(0, (time - last) / 1000));\n last = time;\n const n = Math.max(1, Math.ceil(dt * 240));\n const h = dt / n;\n let moving = false;\n for (const key of KEYS) {\n const s = S[key];\n if (s.x === s.t && s.v === 0) continue;\n for (let i = 0; i < n; i++) {\n const a = -s.k * (s.x - s.t) - s.c * s.v;\n s.v += a * h;\n s.x += s.v * h;\n }\n const eps = key === 'p' ? 0.002 : 0.25;\n if (Math.abs(s.x - s.t) < eps && Math.abs(s.v) < eps * 4) {\n s.x = s.t;\n s.v = 0;\n } else {\n moving = true;\n }\n }\n layout();\n frameId = moving ? raf(step) : 0;\n }\n function to(key: Key, target: number, spr: Spr) {\n const s = S[key];\n if (s.t === target && s.k === spr[0] && s.c === spr[1]) return;\n s.t = target;\n s.k = spr[0];\n s.c = spr[1];\n if (reduced()) {\n s.x = target;\n s.v = 0;\n layout();\n return;\n }\n kick();\n }\n function snap(key: Key, value: number) {\n const s = S[key];\n s.x = s.t = value;\n s.v = 0;\n }\n\n function layout() {\n const w = Math.max(0, S.w.x);\n const h = Math.max(0, S.h.x);\n const r = Math.min(Math.max(0, S.r.x), Math.min(w, h) / 2);\n const p = S.p.x;\n const left = -w / 2 - ((BUBBLE + GAP) / 2) * Math.min(Math.max(p, 0), 1.25);\n const notch = cfg.theme === 'notch';\n const bottom = cfg.position === 'bottom';\n const radius = notch ? (bottom ? `${r}px ${r}px 0 0` : `0 0 ${r}px ${r}px`) : `${r}px`;\n for (const el of shellParts) {\n const st = el.style;\n st.transform = `translateX(${left.toFixed(2)}px)`;\n st.width = `${w.toFixed(2)}px`;\n st.height = `${h.toFixed(2)}px`;\n st.borderRadius = radius;\n }\n const bl = left + w - BUBBLE + (BUBBLE + GAP) * p;\n const scale = 0.4 + 0.6 * Math.min(Math.max(p, 0), 1.2);\n const opacity = Math.min(Math.max(p * 2.2, 0), 1);\n const bubbleRadius = notch ? (bottom ? '22px 22px 0 0' : '0 0 22px 22px') : '22px';\n for (const el of bubbleParts) {\n const st = el.style;\n st.transform = `translateX(${bl.toFixed(2)}px) scale(${scale.toFixed(3)})`;\n st.opacity = opacity.toFixed(3);\n st.borderRadius = bubbleRadius;\n st.visibility = opacity < 0.01 ? 'hidden' : 'visible';\n }\n dragEl.style.transform = S.dy.x ? `translateY(${S.dy.x.toFixed(2)}px)` : '';\n goo.classList.toggle('is-gooey', (cfg.theme === 'ink' || notch) && p > 0.02 && p < 0.97 && !reduced());\n }\n\n /* ───── Views: what the one surface should look like right now ───── */\n\n const ib = (t: Task, act: string, fk: string, label: string, icon: string, reveal = false) =>\n `<button type=\"button\" class=\"buoy-ib${reveal ? ' buoy-reveal' : ''}\" data-act=\"${act}\" data-id=\"${t.id}\" data-fk=\"${fk}:${t.id}\" aria-label=\"${label} ${esc(t.label)}\"><span>${iconHTML(icon)}</span></button>`;\n const hasDetails = (m: Msg) => !!(m.description || (m.actions && m.actions.length));\n let hoverExpand = false;\n\n function msgView(m: Msg): View {\n if (m.render) return customView(m);\n const expanded = hasDetails(m) && (m.expanded || m.tapped || (hoverExpand && cfg.expandOnHover));\n const tone = TYPE_TONE[m.type] || USER_TONE[m.tone] || '';\n const icon = m.type === 'loading' ? spinnerHTML : iconHTML(m.icon === undefined ? TYPE_ICON[m.type] : m.icon);\n let html: string;\n if (expanded) {\n const actions = (m.actions || [])\n .map((a, i) => `<button type=\"button\" class=\"buoy-btn${a.primary ? ' is-primary' : ''}\" data-act=\"action\" data-i=\"${i}\" data-fk=\"a${i}\">${esc(a.label)}</button>`)\n .join('');\n html =\n `<div class=\"buoy-exp\"><div class=\"buoy-exp-head\"><span class=\"buoy-tile\" data-tone=\"${tone}\">${icon || iconHTML('info')}</span>` +\n `<div class=\"buoy-exp-text\"><span class=\"buoy-exp-title\">${esc(m.title)}</span>${m.description ? `<span class=\"buoy-exp-desc\">${esc(m.description)}</span>` : ''}</div>` +\n `<button type=\"button\" class=\"buoy-x\" data-act=\"dismiss\" data-fk=\"x\" aria-label=\"Dismiss\">${iconHTML('x')}</button></div>` +\n `${actions ? `<div class=\"buoy-actions\">${actions}</div>` : ''}</div>`;\n } else {\n const waiting = state.queue.length;\n const action = m.action ? `<button type=\"button\" class=\"buoy-act\" data-act=\"action\" data-i=\"-1\" data-fk=\"a-1\"><span>${esc(m.action.label)}</span></button>` : '';\n const badge = !action && waiting ? `<span class=\"buoy-badge\" title=\"${waiting} waiting\">+${waiting}</span>` : '';\n const cls = `buoy-row${icon ? '' : ' no-icon'}${action ? ' end-action' : badge ? ' end-badge' : ''}`;\n html = `<div class=\"${cls}\">${icon ? `<span class=\"buoy-ic\" data-tone=\"${tone}\">${icon}</span>` : ''}<span class=\"buoy-title\">${esc(m.title)}</span>${badge}${action}</div>`;\n }\n return {\n kind: 'msg',\n key: `m:${m.id}:${m.type}:${expanded ? 'x' : 'c'}`,\n sig: html,\n html,\n type: m.type,\n expanded,\n radius: expanded ? 28 : null,\n spring: expanded ? SPR.expand : SPR.resize,\n };\n }\n\n /** A live activity: the island keeps the shape and motion, the app draws what is inside. */\n function customView(m: Msg): View {\n const expanded = m.expandable && m.open;\n const label = esc(m.title);\n const html = expanded\n ? `<div class=\"buoy-custom is-expanded\" role=\"group\" aria-label=\"${label}\" tabindex=\"-1\" data-fk=\"live-x\"></div>`\n : m.expandable\n ? `<button type=\"button\" class=\"buoy-custom\" data-act=\"live-open\" data-fk=\"live-c\" aria-expanded=\"false\" aria-label=\"${label}. Show details\"></button>`\n : `<div class=\"buoy-custom\" role=\"group\" aria-label=\"${label}\"></div>`;\n return {\n kind: 'msg',\n key: `l:${m.id}:${expanded ? 'x' : 'c'}`,\n sig: html,\n html,\n type: 'live',\n expanded,\n radius: expanded ? 28 : null,\n spring: expanded ? SPR.expand : SPR.resize,\n patch: (el) => drawLive(el, m, expanded),\n };\n }\n\n // Draws only when the activity asked for it, so task progress and other redraws leave its markup alone.\n function drawLive(el: HTMLElement, m: Msg, expanded: boolean) {\n const box = el.querySelector<HTMLElement>('.buoy-custom');\n if (!box || !m.render) return;\n const stamp = `${m.rev}:${expanded ? 1 : 0}`;\n if (box.getAttribute('data-rev') === stamp) return;\n box.setAttribute('data-rev', stamp);\n try {\n m.render(box, { expanded });\n } catch (error) {\n if (typeof console !== 'undefined') console.error(error);\n box.textContent = m.title;\n }\n }\n\n function liveView(running: Task[]): View {\n const f = store.aggregate();\n const paused = running.every((t) => t.status === 'paused');\n const name = cfg.labels.active(running.map(store.info));\n const label = paused ? `Paused · ${name}` : name;\n const html =\n `<button type=\"button\" class=\"buoy-row end-ring buoy-live\" data-act=\"open-tray\" data-fk=\"live\" aria-label=\"${esc(label)}. Show details\">` +\n `<span class=\"buoy-ic\" data-tone=\"${paused ? '' : 'accent'}\">${iconHTML(paused ? 'pause' : cfg.taskIcon)}</span>` +\n `<span class=\"buoy-title\">${esc(label)}</span><span class=\"buoy-pct\">${Math.round(f * 100)}%</span>${ringHTML(f, paused)}</button>`;\n const patch = (el: HTMLElement) => {\n const pct = el.querySelector('.buoy-pct');\n if (pct) pct.textContent = `${Math.round(f * 100)}%`;\n setRing(el.querySelector('.buoy-ring'), f);\n };\n return { kind: 'live', key: 'live', sig: `live|${label}|${paused}`, html, type: '', expanded: false, radius: null, spring: SPR.resize, patch };\n }\n\n function attentionView(bad: Task[]): View {\n const n = bad.length;\n const label = `${n} ${cfg.labels.noun}${n === 1 ? '' : 's'} failed`;\n const html =\n `<div class=\"buoy-row end-action\"><span class=\"buoy-ic\" data-tone=\"error\">${iconHTML('error')}</span>` +\n `<button type=\"button\" class=\"buoy-link buoy-title\" data-act=\"open-tray\" data-fk=\"att\">${esc(label)}</button>` +\n `<button type=\"button\" class=\"buoy-act\" data-act=\"retry-failed\" data-fk=\"att-retry\"><span>Retry</span></button></div>`;\n return { kind: 'attention', key: 'attention', sig: html, html, type: 'error', expanded: false, radius: null, spring: SPR.resize };\n }\n\n function restView(): View {\n const html = state.tasks.length\n ? '<button type=\"button\" class=\"buoy-rest\" data-act=\"open-tray\" data-fk=\"rest\" aria-label=\"Show activity\"></button>'\n : '<div class=\"buoy-rest\"></div>';\n return { kind: 'rest', key: 'rest', sig: html, html, type: '', expanded: false, radius: 15, spring: SPR.resize };\n }\n\n function rowHTML(t: Task): string {\n const st = t.status;\n const tone = st === 'failed' ? 'error' : st === 'done' ? 'success' : '';\n const tile = `<span class=\"buoy-tile sm\" data-tone=\"${tone}\">${iconHTML(st === 'done' ? 'check' : t.icon) || iconHTML('file')}</span>`;\n const bar = st === 'done' || st === 'queued' ? '' : `<div class=\"buoy-bar\"><i style=\"width:${(frac(t) * 100).toFixed(1)}%\"></i></div>`;\n let buttons = '';\n if (st === 'running') buttons = ib(t, 'cancel', 'c', 'Cancel', 'x', true) + (t.pausable ? ib(t, 'pause', 'p', 'Pause', 'pause') : '');\n else if (st === 'queued') buttons = ib(t, 'cancel', 'c', 'Cancel', 'x');\n else if (st === 'paused') buttons = ib(t, 'cancel', 'c', 'Cancel', 'x', true) + ib(t, 'resume', 'p', 'Resume', 'play');\n else if (st === 'failed') buttons = ib(t, 'remove', 'c', 'Remove', 'x', true) + ib(t, 'retry', 'p', 'Retry', 'retry');\n else if (st === 'done' && t.onOpen) buttons = ib(t, 'open', 'p', 'Open', 'open');\n return (\n `<li class=\"buoy-task\" data-id=\"${t.id}\" data-status=\"${st}\">${tile}<div class=\"buoy-task-main\">` +\n `<div class=\"buoy-task-top\"><span class=\"buoy-task-name\">${esc(t.label)}</span><span class=\"buoy-task-state${st === 'failed' ? ' is-error' : ''}\">${esc(stateText(t))}</span></div>` +\n `${bar}<span class=\"buoy-task-meta\">${esc(metaText(t))}</span></div><div class=\"buoy-task-actions\">${buttons}</div></li>`\n );\n }\n\n function trayView(): View {\n const { counts, text } = store.summary();\n const running = counts.running + counts.queued + counts.paused;\n const bottom = cfg.position === 'bottom';\n const noun = (n: number) => `${cfg.labels.noun}${n === 1 ? '' : 's'}`;\n const clear = counts.done ? '<button type=\"button\" class=\"buoy-act\" data-act=\"clear-done\" data-fk=\"clear\"><span>Clear done</span></button>' : '';\n const head =\n `<div class=\"buoy-tray-head\"><div class=\"buoy-tray-titles\"><span class=\"buoy-tray-title\">Activity</span><span class=\"buoy-tray-sub\">${esc(text || 'Nothing here yet')}</span></div>` +\n `<div class=\"buoy-tray-tools\">${clear}<button type=\"button\" class=\"buoy-ib\" data-act=\"close-tray\" data-fk=\"close\" aria-label=\"Close\"><span>${iconHTML(bottom ? 'down' : 'up')}</span></button></div></div>`;\n const list = state.tasks.length ? `<ul class=\"buoy-list\">${state.tasks.map(rowHTML).join('')}</ul>` : '<p class=\"buoy-empty\">Tasks you start show up here.</p>';\n let foot = '';\n if (cfg.guard && running) {\n const all = counts.running\n ? '<button type=\"button\" class=\"buoy-act\" data-act=\"pause-all\" data-fk=\"all\"><span>Pause all</span></button>'\n : counts.paused\n ? '<button type=\"button\" class=\"buoy-act\" data-act=\"resume-all\" data-fk=\"all\"><span>Resume all</span></button>'\n : '';\n foot = `<div class=\"buoy-tray-foot\">${iconHTML('info')}<span>Closing this tab stops ${running} ${noun(running)}.</span>${all}</div>`;\n }\n const html = `<div class=\"buoy-tray\" role=\"dialog\" aria-label=\"Activity\">${head}${list}${foot}</div>`;\n const sig = ['tray', bottom, cfg.guard, running, counts.running > 0, counts.paused > 0, counts.done > 0, state.tasks.map((t) => t.id + t.status).join(',')].join('|');\n const patch = (el: HTMLElement) => {\n for (const t of state.tasks) {\n const row = el.querySelector(`.buoy-task[data-id=\"${t.id}\"]`);\n if (!row) continue;\n const label = row.querySelector('.buoy-task-state');\n if (label) label.textContent = stateText(t);\n const fill = row.querySelector<HTMLElement>('.buoy-bar > i');\n if (fill) fill.style.width = `${(frac(t) * 100).toFixed(1)}%`;\n const meta = row.querySelector('.buoy-task-meta');\n if (meta) meta.textContent = metaText(t);\n }\n const sub = el.querySelector('.buoy-tray-sub');\n if (sub) sub.textContent = text || 'Nothing here yet';\n };\n return { kind: 'tray', key: 'tray', sig, html, type: '', expanded: false, radius: 30, spring: SPR.tray, patch };\n }\n\n /* ───── Rendering ───── */\n\n let view: View | null = null;\n let layer: HTMLElement | null = null;\n let visible = false;\n let exitAnim: Animation | null = null;\n let renderId = 0;\n let bubbleMode = '';\n let lastMessageId: string | null = null;\n\n function render() {\n if (!renderId) renderId = raf(() => {\n renderId = 0;\n draw();\n });\n }\n\n function draw() {\n const running = store.active();\n const bad = store.failed();\n const attention = bad.length > 0 && !state.attentionDismissed;\n const currentId = state.current ? state.current.id : null;\n if (currentId !== lastMessageId) {\n hoverExpand = false;\n lastMessageId = currentId;\n }\n let next: View;\n let withBubble = false;\n if (state.trayOpen) next = trayView();\n else if (state.current) {\n next = msgView(state.current);\n withBubble = running.length > 0 || attention;\n } else if (running.length) next = liveView(running);\n else if (attention) next = attentionView(bad);\n else next = restView();\n\n root.dataset.kind = next.kind;\n root.dataset.type = next.type;\n if (next.kind === 'rest' && cfg.resting === 'hidden') {\n setBubble(false, running);\n hide();\n return;\n }\n const entering = !visible;\n if (entering) show();\n const base = (key: string) => key.slice(0, key.lastIndexOf(':'));\n const toggling = !!view && view.type === 'live' && next.type === 'live' && view.expanded !== next.expanded && base(view.key) === base(next.key);\n const focusInside = !!layer && layer.contains(doc.activeElement);\n if (!view || !layer || view.key !== next.key) swap(next);\n else if (view.sig !== next.sig) rebuild(next);\n if (next.patch && layer) next.patch(layer);\n if (toggling && focusInside && layer) {\n const target = layer.querySelector<HTMLElement>('[data-fk=\"live-x\"], [data-fk=\"live-c\"]');\n if (target) target.focus({ preventScroll: true });\n }\n view = next;\n const el = layer as HTMLElement;\n const w = el.offsetWidth;\n const h = el.offsetHeight;\n const spr = entering ? SPR.enter : next.spring;\n to('w', w, spr);\n to('h', h, spr);\n to('r', next.radius == null ? h / 2 : next.radius, spr);\n setBubble(withBubble, running);\n shell.style.cursor = next.kind === 'msg' && !next.expanded && state.current && state.current.type !== 'loading' && state.current.type !== 'live' ? 'pointer' : '';\n }\n\n function swap(next: View) {\n const old = layer;\n const el = doc.createElement('div');\n el.className = 'buoy-layer';\n el.innerHTML = next.html;\n shell.appendChild(el);\n layer = el;\n const calm = reduced();\n if (old) {\n old.inert = true;\n old.setAttribute('aria-hidden', 'true');\n const out = play(\n old,\n calm ? [{ opacity: 1 }, { opacity: 0 }] : [{ opacity: 1, filter: 'blur(0px)', transform: 'scale(1)' }, { opacity: 0, filter: 'blur(2px)', transform: 'scale(.96)' }],\n { duration: calm ? 80 : 120, easing: 'ease-in', fill: 'forwards' },\n );\n if (out) out.onfinish = () => old.remove();\n else old.remove();\n }\n play(\n el,\n calm ? [{ opacity: 0 }, { opacity: 1 }] : [{ opacity: 0, filter: 'blur(2px)', transform: 'scale(.96)' }, { opacity: 1, filter: 'blur(0px)', transform: 'scale(1)' }],\n { duration: calm ? 120 : 200, delay: old ? 60 : 40, easing: 'cubic-bezier(.2,.8,.2,1)', fill: 'backwards' },\n );\n }\n\n function rebuild(next: View) {\n if (!layer) return;\n const active = doc.activeElement;\n const focusKey = active && layer.contains(active) ? active.getAttribute('data-fk') : null;\n const list = layer.querySelector('.buoy-list');\n const scroll = list ? list.scrollTop : 0;\n layer.innerHTML = next.html;\n const newList = layer.querySelector('.buoy-list');\n if (newList && scroll) newList.scrollTop = scroll;\n if (focusKey) {\n const target = Array.from(layer.querySelectorAll<HTMLElement>('[data-fk]')).find((n) => n.getAttribute('data-fk') === focusKey);\n if (target) target.focus({ preventScroll: true });\n }\n }\n\n function show() {\n visible = true;\n if (exitAnim) {\n exitAnim.cancel();\n exitAnim = null;\n }\n stage.hidden = false;\n if (reduced()) {\n play(stage, [{ opacity: 0 }, { opacity: 1 }], { duration: 150 });\n return;\n }\n const notch = cfg.theme === 'notch';\n const bottom = cfg.position === 'bottom';\n play(\n stage,\n notch ? [{ transform: `translateY(${bottom ? 60 : -60}px)` }, { transform: 'translateY(0px)' }] : [{ opacity: 0, transform: 'scale(.6)' }, { opacity: 1, transform: 'scale(1)' }],\n { duration: notch ? 380 : 340, easing: 'cubic-bezier(.2,.9,.25,1.12)' },\n );\n }\n\n function resetGeometry() {\n snap('w', 44);\n snap('h', 44);\n snap('r', 22);\n snap('p', 0);\n layout();\n }\n\n function hide() {\n if (!visible) return;\n visible = false;\n unhover();\n const old = layer;\n layer = null;\n view = null;\n if (old) {\n old.inert = true;\n old.setAttribute('aria-hidden', 'true');\n const out = play(old, [{ opacity: 1 }, { opacity: 0 }], { duration: 120, fill: 'forwards' });\n if (out) out.onfinish = () => old.remove();\n else old.remove();\n }\n const notch = cfg.theme === 'notch';\n const bottom = cfg.position === 'bottom';\n const keyframes: Keyframe[] = reduced()\n ? [{ opacity: 1 }, { opacity: 0 }]\n : notch\n ? [{ transform: 'translateY(0px)' }, { transform: `translateY(${((bottom ? 1 : -1) * (S.h.x + 24)).toFixed(1)}px)` }]\n : [{ opacity: 1, transform: 'scale(1)', filter: 'blur(0px)' }, { opacity: 0, transform: 'scale(.92)', filter: 'blur(4px)' }];\n const anim = play(stage, keyframes, { duration: notch ? 220 : 180, easing: 'cubic-bezier(.4,0,1,1)', fill: 'forwards' });\n const finish = () => {\n if (visible) return;\n stage.hidden = true;\n if (anim) anim.cancel();\n exitAnim = null;\n resetGeometry();\n };\n if (anim) {\n exitAnim = anim;\n anim.onfinish = () => {\n if (exitAnim === anim) finish();\n };\n } else {\n finish();\n }\n }\n\n function setBubble(on: boolean, running: Task[]) {\n if (on) {\n if (running.length) {\n const f = store.aggregate();\n const paused = running.every((t) => t.status === 'paused');\n const mode = `ring|${paused}`;\n if (bubbleMode !== mode) {\n bubble.innerHTML = ringHTML(f, paused);\n bubbleMode = mode;\n } else {\n setRing(bubble.querySelector('.buoy-ring'), f);\n }\n bubble.setAttribute('aria-label', `${cfg.labels.active(running.map(store.info))}. Show details`);\n } else if (bubbleMode !== 'attention') {\n bubble.innerHTML = `<span class=\"buoy-bub-ic\">${iconHTML('error')}</span>`;\n bubbleMode = 'attention';\n bubble.setAttribute('aria-label', `A ${cfg.labels.noun} needs attention. Show details`);\n }\n bubble.tabIndex = 0;\n bubble.removeAttribute('aria-hidden');\n } else {\n bubble.tabIndex = -1;\n bubble.setAttribute('aria-hidden', 'true');\n }\n to('p', on ? 1 : 0, SPR.bubble);\n }\n\n function announce(m: Msg) {\n const text = [m.title, m.description].filter(Boolean).join('. ');\n sr.textContent = '';\n win.setTimeout(() => {\n sr.textContent = text;\n }, 40);\n }\n\n let lastPosition = cfg.position;\n function applyConfig() {\n root.dataset.buoyTheme = cfg.theme;\n root.dataset.position = cfg.position;\n root.dataset.rich = cfg.richColors ? 'true' : 'false';\n root.dataset.scheme = cfg.colorScheme;\n if (cfg.offset != null) root.style.setProperty('--buoy-offset', `${cfg.offset}px`);\n else root.style.removeProperty('--buoy-offset');\n layout();\n if (lastPosition !== cfg.position && visible && !reduced()) play(stage, [{ opacity: 0 }, { opacity: 1 }], { duration: 220 });\n lastPosition = cfg.position;\n }\n\n /* ───── Input ───── */\n\n const cleanups: Array<() => void> = [];\n function on<K extends keyof WindowEventMap>(target: Window, type: K, fn: (e: WindowEventMap[K]) => void, o?: AddEventListenerOptions): void;\n function on<K extends keyof DocumentEventMap>(target: Document, type: K, fn: (e: DocumentEventMap[K]) => void, o?: AddEventListenerOptions): void;\n function on<K extends keyof HTMLElementEventMap>(target: HTMLElement, type: K, fn: (e: HTMLElementEventMap[K]) => void, o?: AddEventListenerOptions): void;\n function on(target: EventTarget, type: string, fn: (e: never) => void, o?: AddEventListenerOptions) {\n const listener = fn as unknown as EventListener;\n target.addEventListener(type, listener, o);\n cleanups.push(() => target.removeEventListener(type, listener, o));\n }\n\n let lastFocus: Element | null = null;\n function openTray(keyboard: boolean) {\n if (state.trayOpen) return;\n lastFocus = doc.activeElement;\n hoverExpand = false;\n store.openTray();\n if (keyboard) raf(() => raf(() => {\n const close = layer && layer.querySelector<HTMLElement>('[data-fk=\"close\"]');\n if (close) close.focus({ preventScroll: true });\n }));\n }\n function closeTray() {\n if (!state.trayOpen) return;\n const inside = root.contains(doc.activeElement);\n store.closeTray();\n if (inside) raf(() => raf(() => {\n const target = layer && layer.querySelector<HTMLElement>('[data-fk=\"live\"], [data-fk=\"att\"], [data-fk=\"rest\"]');\n const back = target || (lastFocus instanceof HTMLElement && lastFocus.isConnected ? lastFocus : null);\n if (back) back.focus({ preventScroll: true });\n }));\n }\n function swipeAway() {\n if (state.trayOpen) closeTray();\n else if (state.current && state.current.type === 'live') store.setOpen(state.current.id, false);\n else if (state.current) store.dismiss(state.current.id);\n else if (view && view.kind === 'attention') store.dismissAttention();\n }\n\n function act(el: Element, e: MouseEvent) {\n const keyboard = e.detail === 0;\n const id = el.getAttribute('data-id') || '';\n const m = state.current;\n switch (el.getAttribute('data-act')) {\n case 'dismiss':\n if (m) store.dismiss(m.id);\n break;\n case 'action': {\n if (!m) break;\n const i = Number(el.getAttribute('data-i'));\n const action = i < 0 ? m.action : m.actions && m.actions[i];\n store.dismiss(m.id);\n if (action && action.onClick) action.onClick();\n break;\n }\n case 'live-open':\n if (m) store.setOpen(m.id, true);\n break;\n case 'open-tray':\n case 'bubble':\n openTray(keyboard);\n break;\n case 'close-tray':\n closeTray();\n break;\n case 'retry-failed':\n store.retryFailed();\n break;\n case 'pause':\n store.pauseTask(id);\n break;\n case 'resume':\n store.resumeTask(id);\n break;\n case 'cancel':\n store.cancelTask(id);\n break;\n case 'retry':\n store.retryTask(id);\n break;\n case 'remove':\n store.removeTask(id);\n break;\n case 'open': {\n const t = state.tasks.find((x) => x.id === id);\n closeTray();\n if (t && t.onOpen) t.onOpen(store.info(t));\n break;\n }\n case 'clear-done':\n store.clearDone();\n break;\n case 'pause-all':\n store.pauseAll();\n break;\n case 'resume-all':\n store.resumeAll();\n break;\n default:\n break;\n }\n }\n\n let suppressClick = false;\n on(root, 'click', (e) => {\n if (suppressClick) {\n suppressClick = false;\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n const target = e.target as Element;\n const button = target.closest('[data-act]');\n if (button && root.contains(button)) {\n act(button, e);\n return;\n }\n // A live activity's markup handles its own clicks, even if one of them just replaced the message.\n if (!view || view.kind !== 'msg' || view.expanded || !shell.contains(target) || target.closest('.buoy-custom')) return;\n const m = state.current;\n if (!m || m.type === 'live' || !view.key.startsWith(`m:${m.id}:`)) return;\n if (hasDetails(m)) store.tap(m.id);\n else if (m.type !== 'loading') store.dismiss(m.id);\n });\n\n // Hovering pauses timers and, after a short intent delay, opens a message's details.\n let hovering = false;\n let hoverTimer = 0;\n let leaveTimer = 0;\n function unhover() {\n if (!hovering) return;\n hovering = false;\n store.setPaused('hover', false);\n win.clearTimeout(hoverTimer);\n if (hoverExpand) {\n win.clearTimeout(leaveTimer);\n leaveTimer = win.setTimeout(() => {\n if (hovering) return;\n hoverExpand = false;\n render();\n }, 300);\n }\n }\n on(stage, 'pointerenter', (e) => {\n if (e.pointerType !== 'mouse') return;\n hovering = true;\n store.setPaused('hover', true);\n win.clearTimeout(leaveTimer);\n const m = state.current;\n if (m && cfg.expandOnHover && hasDetails(m) && !m.expanded && !hoverExpand) {\n win.clearTimeout(hoverTimer);\n hoverTimer = win.setTimeout(() => {\n if (hovering && state.current === m) {\n hoverExpand = true;\n render();\n }\n }, 120);\n }\n });\n on(stage, 'pointerleave', (e) => {\n if (e.pointerType === 'mouse') unhover();\n });\n\n let drag: { id: number; y: number; t: number; dy: number; active: boolean } | null = null;\n on(shell, 'pointerdown', (e) => {\n if (e.button !== 0 || (e.target as Element).closest('.buoy-list')) return;\n drag = { id: e.pointerId, y: e.clientY, t: clock(), dy: 0, active: false };\n });\n on(win, 'pointermove', (e) => {\n // Safety net: if the island shrank or vanished under a still pointer, leave events can be skipped.\n if (hovering && e.pointerType === 'mouse' && !stage.contains(e.target as Node)) unhover();\n if (!drag || e.pointerId !== drag.id) return;\n const raw = e.clientY - drag.y;\n const dir = cfg.position === 'bottom' ? 1 : -1;\n if (!drag.active && Math.abs(raw) > 6) {\n drag.active = true;\n try { shell.setPointerCapture(e.pointerId); } catch { /* optional */ }\n }\n if (!drag.active) return;\n const toward = raw * dir;\n drag.dy = (toward > 0 ? toward : toward * 0.2) * dir;\n snap('dy', drag.dy);\n layout();\n });\n const endDrag = (e: PointerEvent) => {\n if (!drag || e.pointerId !== drag.id) return;\n const d = drag;\n drag = null;\n if (!d.active) return;\n suppressClick = true;\n win.setTimeout(() => {\n suppressClick = false;\n }, 0);\n const dir = cfg.position === 'bottom' ? 1 : -1;\n const distance = d.dy * dir;\n const velocity = distance / Math.max(1, clock() - d.t);\n if (distance > 28 || velocity > 0.45) swipeAway();\n to('dy', 0, SPR.drag);\n };\n on(win, 'pointerup', endDrag);\n on(win, 'pointercancel', endDrag);\n on(doc, 'keydown', (e) => {\n if (e.key !== 'Escape') return;\n if (state.trayOpen) {\n e.preventDefault();\n closeTray();\n } else if (root.contains(doc.activeElement) || hovering) {\n swipeAway();\n }\n });\n on(doc, 'pointerdown', (e) => {\n if (root.contains(e.target as Node)) return;\n if (state.trayOpen) closeTray();\n else if (state.current && state.current.open) store.setOpen(state.current.id, false);\n }, { capture: true });\n on(doc, 'visibilitychange', () => store.setPaused('hidden', doc.hidden));\n on(win, 'beforeunload', (e) => {\n if (cfg.guard && store.active().length) {\n e.preventDefault();\n e.returnValue = '';\n }\n });\n if (motionQuery && typeof motionQuery.addEventListener === 'function') {\n const onMotion = () => layout();\n motionQuery.addEventListener('change', onMotion);\n cleanups.push(() => motionQuery.removeEventListener('change', onMotion));\n }\n\n /* ───── Lifecycle ───── */\n\n const unsubscribe = store.subscribe((event, message) => {\n if (event === 'show' && message) announce(message);\n if (event === 'config') applyConfig();\n render();\n });\n\n (options.container || doc.body).appendChild(root);\n doc.body.appendChild(gooSvg);\n applyConfig();\n store.setPaused('hidden', doc.hidden);\n store.setPaused('detached', false);\n if (state.current) announce(state.current);\n render();\n\n let destroyed = false;\n return {\n element: root,\n destroy() {\n if (destroyed) return;\n destroyed = true;\n unsubscribe();\n cleanups.forEach((fn) => fn());\n if (frameId) caf(frameId);\n if (renderId) caf(renderId);\n win.clearTimeout(hoverTimer);\n win.clearTimeout(leaveTimer);\n store.setPaused('hover', false);\n store.setPaused('hidden', false);\n store.setPaused('detached', true);\n root.remove();\n gooSvg.remove();\n },\n };\n}\n","import { clamp, frac } from './format';\nimport type {\n BuoyOptions,\n ColorScheme,\n Labels,\n LiveHandle,\n LiveOptions,\n LiveView,\n MessageAction,\n MessageOptions,\n MessageType,\n Position,\n PromiseOptions,\n Resting,\n TaskContext,\n TaskHandle,\n TaskInfo,\n TaskStatus,\n Theme,\n TrackOptions,\n} from './types';\n\nexport interface Msg {\n id: string;\n type: MessageType;\n title: string;\n description: string;\n icon: string | null | undefined;\n tone: string;\n action: MessageAction | null;\n actions: MessageAction[] | null;\n expanded: boolean;\n persist: boolean;\n duration: number;\n remaining: number;\n timer: ReturnType<typeof setTimeout> | 0;\n deadline: number;\n shownAt: number;\n tapped: boolean;\n onDismiss: (() => void) | null;\n /** Live activities: draws the content. */\n render: ((el: HTMLElement, view: LiveView) => void) | null;\n expandable: boolean;\n /** A live activity's details are open. */\n open: boolean;\n /** Bumped whenever a live activity needs drawing again. */\n rev: number;\n}\n\nexport interface Task {\n id: string;\n label: string;\n icon: string;\n run: (task: TaskContext) => unknown;\n pausable: boolean;\n onOpen: ((task: TaskInfo) => void) | null;\n doneLabel: string;\n format: ((loaded: number, total: number) => string) | null;\n status: TaskStatus | 'canceled';\n loaded: number;\n total: number;\n fraction: number;\n rate: number;\n lastT: number;\n lastL: number;\n attempt: number;\n started: boolean;\n paused: boolean;\n resumers: Array<() => void>;\n ctrl: AbortController | null;\n batch: number;\n error: string;\n}\n\nexport interface ResolvedOptions {\n theme: Theme;\n position: Position;\n resting: Resting;\n richColors: boolean;\n expandOnHover: boolean;\n duration: number;\n concurrency: number;\n guard: boolean;\n haptics: boolean;\n colorScheme: ColorScheme;\n offset: number | null;\n taskIcon: string;\n labels: Labels;\n}\n\nexport type StoreEvent = 'change' | 'progress' | 'config' | 'show';\nexport type StoreListener = (event: StoreEvent, message?: Msg) => void;\ntype NewMessage = MessageOptions & { type?: MessageType; render?: Msg['render']; expandable?: boolean };\n\n/** How long a message stays when others are waiting behind it. */\nconst HURRY_MS = 1500;\n/** A message is readable after this long; anything waiting can take its place after that. */\nconst MIN_VISIBLE_MS = 900;\n/** Shortest gap before a waiting message morphs in. */\nconst SWAP_MS = 200;\n/** Minimum time for a message that carries buttons. */\nconst ACTION_MS = 6000;\nconst SUCCESS_MS = 2000;\nconst SUMMARY_MS = 4000;\n\nexport const DEFAULT_OPTIONS: Omit<ResolvedOptions, 'labels'> = {\n theme: 'ink',\n position: 'top',\n resting: 'hidden',\n richColors: false,\n expandOnHover: true,\n duration: 3000,\n concurrency: 2,\n guard: true,\n haptics: false,\n colorScheme: 'system',\n offset: null,\n taskIcon: 'upload',\n};\n\nexport type Store = ReturnType<typeof createStore>;\n\nexport function createStore() {\n const defaultLabels: Labels = {\n noun: 'task',\n active: (tasks) => (tasks.length === 1 ? tasks[0].label : `${tasks.length} ${cfg.labels.noun}s`),\n doneOne: (task) => `${task.label} finished`,\n doneMany: (count) => `${count} ${cfg.labels.noun}s finished`,\n };\n const cfg: ResolvedOptions = { ...DEFAULT_OPTIONS, labels: { ...defaultLabels } };\n const state = {\n current: null as Msg | null,\n queue: [] as Msg[],\n tasks: [] as Task[],\n trayOpen: false,\n attentionDismissed: false,\n batch: 0,\n batchAnnounced: false,\n /** Increments on every change. Handy for snapshot caching. */\n version: 0,\n };\n const listeners = new Set<StoreListener>();\n // Timers stay paused until an island is attached, so nothing expires unseen.\n const pauses = new Set<string>(['detached']);\n let seq = 0;\n const uid = (prefix: string) => `buoy-${prefix}${++seq}`;\n const now = () => Date.now();\n\n function emit(event: StoreEvent = 'change', message?: Msg) {\n state.version++;\n listeners.forEach((listener) => listener(event, message));\n }\n function subscribe(listener: StoreListener): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }\n function report(error: unknown) {\n if (typeof console !== 'undefined') console.error(error);\n }\n function buzz() {\n if (!cfg.haptics || typeof navigator === 'undefined' || typeof navigator.vibrate !== 'function') return;\n try { navigator.vibrate(8); } catch { /* not supported */ }\n }\n\n /* ───── Options ───── */\n\n function configure(options: BuoyOptions = {}) {\n const { labels, ...rest } = options;\n const target = cfg as unknown as Record<string, unknown>;\n let changed = false;\n for (const [key, value] of Object.entries(rest)) {\n if (value === undefined || target[key] === value) continue;\n target[key] = value;\n changed = true;\n }\n if (labels) {\n const l = cfg.labels as unknown as Record<string, unknown>;\n for (const [key, value] of Object.entries(labels)) {\n if (value === undefined || l[key] === value) continue;\n l[key] = value;\n changed = true;\n }\n }\n if (!changed) return;\n if (rest.concurrency !== undefined) pump();\n emit('config');\n }\n\n /* ───── Message timers ───── */\n\n const isPaused = () => pauses.size > 0 || state.trayOpen;\n function startTimer(m: Msg) {\n if (m.timer || !Number.isFinite(m.remaining) || isPaused() || m !== state.current) return;\n m.deadline = now() + m.remaining;\n m.timer = setTimeout(() => {\n m.timer = 0;\n dismiss(m.id);\n }, m.remaining);\n }\n function pauseTimer(m: Msg) {\n if (!m.timer) return;\n clearTimeout(m.timer);\n m.timer = 0;\n m.remaining = Math.max(0, m.deadline - now());\n }\n function syncTimers() {\n const m = state.current;\n if (!m) return;\n if (isPaused()) pauseTimer(m);\n else startTimer(m);\n }\n /** Pause or resume message timers for a reason, e.g. \"hover\" or \"hidden\". */\n function setPaused(reason: string, on: boolean) {\n if (on === pauses.has(reason)) return;\n if (on) pauses.add(reason);\n else pauses.delete(reason);\n syncTimers();\n }\n\n /* ───── Messages ───── */\n\n function make(title: string, o: NewMessage): Msg {\n const type = o.type ?? 'default';\n const persist = o.persist ?? type === 'error';\n const hasButtons = !!(o.action || (o.actions && o.actions.length));\n const duration = o.duration ?? (persist ? Infinity : hasButtons ? Math.max(cfg.duration, ACTION_MS) : cfg.duration);\n return {\n id: o.id ?? uid('m'),\n type,\n title: String(title),\n description: o.description ?? '',\n icon: o.icon,\n tone: o.tone ?? '',\n action: o.action ?? null,\n actions: o.actions && o.actions.length ? o.actions.slice(0, 2) : null,\n expanded: !!o.expanded,\n persist,\n duration,\n remaining: duration,\n timer: 0,\n deadline: 0,\n shownAt: 0,\n tapped: false,\n onDismiss: o.onDismiss ?? null,\n render: o.render ?? null,\n expandable: !!o.expandable,\n open: false,\n rev: 0,\n };\n }\n function find(id: string): Msg | null {\n if (state.current && state.current.id === id) return state.current;\n return state.queue.find((m) => m.id === id) ?? null;\n }\n function arm(m: Msg) {\n m.remaining = m.duration;\n if (state.queue.length && Number.isFinite(m.remaining)) m.remaining = Math.min(m.remaining, HURRY_MS);\n m.timer = 0;\n m.shownAt = now();\n m.open = false;\n startTimer(m);\n emit('show', m);\n buzz();\n }\n /** Something is waiting: let the visible message finish being read, then hand over. */\n function hurry(m: Msg) {\n if (!Number.isFinite(m.remaining)) return;\n const target = Math.max(SWAP_MS, MIN_VISIBLE_MS - (now() - m.shownAt));\n const left = m.timer ? m.deadline - now() : m.remaining;\n if (left <= target) return;\n pauseTimer(m);\n m.remaining = target;\n startTimer(m);\n }\n function push(title: string, o: NewMessage = {}): string {\n if (o.id) {\n const existing = find(o.id);\n if (existing) {\n update(existing, title, o);\n return existing.id;\n }\n }\n const m = make(title, o);\n const cur = state.current;\n if (!cur) {\n state.current = m;\n arm(m);\n } else if (cur.persist && cur.type !== 'loading') {\n // A sticky message steps aside for the newcomer and comes back after it.\n pauseTimer(cur);\n state.queue.push(cur);\n state.current = m;\n arm(m);\n } else {\n state.queue.push(m);\n hurry(cur);\n }\n emit();\n return m.id;\n }\n function update(m: Msg, title: string, o: NewMessage) {\n const fresh = make(title, { ...o, id: m.id });\n fresh.rev = m.rev + 1;\n pauseTimer(m);\n Object.assign(m, fresh);\n if (m === state.current) arm(m);\n emit();\n }\n function dismiss(id?: string) {\n const cur = state.current;\n if (id === undefined) {\n // No id: clear everything.\n for (const m of [cur, ...state.queue]) if (m) pauseTimer(m);\n state.queue = [];\n state.current = null;\n if (cur && cur.onDismiss) safe(cur.onDismiss);\n emit();\n return;\n }\n if (cur && cur.id === id) {\n pauseTimer(cur);\n state.current = null;\n if (cur.onDismiss) safe(cur.onDismiss);\n const next = state.queue.shift();\n if (next) {\n state.current = next;\n arm(next);\n }\n } else {\n const i = state.queue.findIndex((m) => m.id === id);\n if (i < 0) return;\n state.queue.splice(i, 1);\n }\n emit();\n }\n function safe(fn: () => void) {\n try { fn(); } catch (error) { report(error); }\n }\n /* ───── Live activities ───── */\n\n function live(o: LiveOptions): LiveHandle {\n const timed = o.duration !== undefined && Number.isFinite(o.duration);\n const id = push(o.label, {\n id: o.id,\n type: 'live',\n persist: !timed,\n duration: timed ? o.duration : Infinity,\n onDismiss: o.onClose,\n render: o.render,\n expandable: o.expandable,\n });\n return { id, refresh: () => refresh(id), expand: (open = true) => setOpen(id, open), close: () => dismiss(id) };\n }\n /** Asks the island to draw a live activity again, without announcing it. */\n function refresh(id: string) {\n const m = find(id);\n if (!m || !m.render) return;\n m.rev++;\n emit();\n }\n function setOpen(id: string, open: boolean) {\n const m = find(id);\n if (!m || !m.expandable || m.open === open) return;\n m.open = open;\n m.rev++;\n emit();\n }\n\n function tap(id: string) {\n const m = find(id);\n if (!m || m.tapped) return;\n m.tapped = true;\n emit();\n }\n function promise<T>(input: Promise<T> | (() => Promise<T>), o: PromiseOptions<T> = {}): Promise<T> {\n const id = push(o.loading ?? 'Loading…', { type: 'loading', duration: Infinity, persist: false });\n let p: Promise<T>;\n try {\n p = Promise.resolve(typeof input === 'function' ? input() : input);\n } catch (error) {\n p = Promise.reject(error);\n }\n const settle = (title: string, opts: NewMessage) => {\n const m = find(id);\n if (m) update(m, title, opts);\n else push(title, opts);\n };\n p.then(\n (value) => settle(typeof o.success === 'function' ? o.success(value) : o.success ?? 'Done', { type: 'success', duration: o.successDuration ?? SUCCESS_MS }),\n (error) => settle(typeof o.error === 'function' ? o.error(error) : o.error ?? 'Something went wrong', { type: 'error', action: o.retry ? { label: 'Retry', onClick: o.retry } : undefined }),\n );\n return p;\n }\n\n /* ───── Tasks ───── */\n\n const isActive = (t: Task) => t.status === 'running' || t.status === 'queued' || t.status === 'paused';\n const active = () => state.tasks.filter(isActive);\n const failed = () => state.tasks.filter((t) => t.status === 'failed');\n const byId = (id: string) => state.tasks.find((t) => t.id === id) ?? null;\n\n function info(t: Task): TaskInfo {\n return {\n id: t.id,\n label: t.label,\n status: t.status === 'canceled' ? 'failed' : t.status,\n loaded: t.loaded,\n total: t.total,\n progress: frac(t),\n error: t.error || undefined,\n attempt: t.attempt,\n };\n }\n function newBatch(clearDone: boolean) {\n state.batch++;\n state.batchAnnounced = false;\n state.attentionDismissed = false;\n if (clearDone) state.tasks = state.tasks.filter((t) => t.status !== 'done');\n }\n function track(run: (task: TaskContext) => unknown, o: TrackOptions = {}): TaskHandle {\n if (typeof run !== 'function') throw new TypeError('buoy.track() needs a function that does the work.');\n if (!active().length) newBatch(true);\n const t: Task = {\n id: uid('t'),\n label: String(o.label ?? 'Task'),\n icon: o.icon ?? 'file',\n run,\n pausable: o.pausable !== false,\n onOpen: o.onOpen ?? null,\n doneLabel: o.doneLabel ?? '',\n format: o.format ?? null,\n status: 'queued',\n loaded: 0,\n total: o.total ?? 0,\n fraction: 0,\n rate: 0,\n lastT: 0,\n lastL: 0,\n attempt: 0,\n started: false,\n paused: false,\n resumers: [],\n ctrl: null,\n batch: state.batch,\n error: '',\n };\n state.tasks.push(t);\n pump();\n emit();\n return {\n id: t.id,\n pause: () => pauseTask(t),\n resume: () => resumeTask(t),\n cancel: () => cancelTask(t),\n retry: () => retryTask(t),\n };\n }\n function measureRate(t: Task) {\n const at = now();\n const dt = (at - t.lastT) / 1000;\n if (dt < 0.05) return;\n const inst = (t.loaded - t.lastL) / dt;\n t.rate = t.rate ? t.rate * 0.75 + inst * 0.25 : inst;\n t.lastT = at;\n t.lastL = t.loaded;\n }\n function flush(t: Task) {\n const resumers = t.resumers;\n t.resumers = [];\n resumers.forEach((resume) => resume());\n }\n function startTask(t: Task) {\n t.status = 'running';\n t.started = true;\n t.paused = false;\n t.attempt += 1;\n t.error = '';\n t.ctrl = new AbortController();\n t.lastT = now();\n t.lastL = t.loaded;\n t.rate = 0;\n const attempt = t.attempt;\n const context: TaskContext = {\n signal: t.ctrl.signal,\n attempt,\n progress: (a: number, b?: number) => {\n if (t.attempt !== attempt || t.status === 'canceled') return;\n if (typeof b === 'number') {\n t.total = Math.max(0, b);\n t.loaded = clamp(a, 0, t.total || a);\n } else {\n t.fraction = clamp(a, 0, 1);\n if (t.total) t.loaded = t.fraction * t.total;\n }\n measureRate(t);\n emit('progress');\n },\n checkpoint: () => (t.paused ? new Promise<void>((resolve) => t.resumers.push(resolve)) : Promise.resolve()),\n };\n Promise.resolve()\n .then(() => t.run(context))\n .then(\n () => {\n if (t.attempt !== attempt || t.status === 'canceled') return;\n t.status = 'done';\n if (t.total) t.loaded = t.total;\n t.fraction = 1;\n checkDone();\n },\n (error: unknown) => {\n if (t.attempt !== attempt || t.status === 'canceled') return;\n t.status = 'failed';\n t.error = error instanceof Error && error.message ? error.message : typeof error === 'string' ? error : 'Failed';\n checkDone();\n },\n );\n }\n /** Start queued tasks while there are free slots. */\n function pump() {\n let running = state.tasks.filter((t) => t.status === 'running').length;\n for (const t of state.tasks) {\n if (running >= cfg.concurrency) break;\n if (t.status !== 'queued') continue;\n running++;\n if (t.started) {\n // A resumed task waiting at its checkpoint.\n t.status = 'running';\n t.paused = false;\n t.lastT = now();\n t.lastL = t.loaded;\n t.rate = 0;\n flush(t);\n } else {\n startTask(t);\n }\n }\n }\n function pauseTask(t: Task) {\n if (t.status !== 'running' || !t.pausable) return;\n t.status = 'paused';\n t.paused = true;\n t.rate = 0;\n pump();\n emit();\n }\n function resumeTask(t: Task) {\n if (t.status !== 'paused') return;\n t.status = 'queued';\n pump();\n emit();\n }\n function cancelTask(t: Task) {\n if (!isActive(t)) return;\n t.status = 'canceled';\n t.paused = false;\n if (t.ctrl) t.ctrl.abort();\n flush(t);\n state.tasks = state.tasks.filter((x) => x !== t);\n checkDone();\n }\n function retryTask(t: Task) {\n if (t.status !== 'failed') return;\n if (!active().length) newBatch(false);\n Object.assign(t, { status: 'queued', loaded: 0, fraction: 0, rate: 0, started: false, error: '', batch: state.batch });\n state.attentionDismissed = false;\n pump();\n emit();\n }\n function removeTask(t: Task) {\n if (isActive(t)) return;\n state.tasks = state.tasks.filter((x) => x !== t);\n emit();\n }\n function clearDone() {\n state.tasks = state.tasks.filter((t) => t.status !== 'done');\n emit();\n }\n function checkDone() {\n pump();\n if (!active().length) {\n const bad = failed();\n const done = state.tasks.filter((t) => t.status === 'done' && t.batch === state.batch);\n if (bad.length) {\n state.attentionDismissed = false;\n buzz();\n } else if (done.length && !state.trayOpen && !state.batchAnnounced) {\n state.batchAnnounced = true;\n const title = done.length === 1 ? cfg.labels.doneOne(info(done[0])) : cfg.labels.doneMany(done.length);\n push(title, { type: 'success', duration: SUMMARY_MS, action: { label: 'View', onClick: openTray } });\n }\n }\n emit();\n }\n /** Overall progress of the current batch, 0 to 1. */\n function aggregate(): number {\n let total = 0;\n let loaded = 0;\n let sum = 0;\n let unknown = 0;\n for (const t of state.tasks) {\n if (t.batch !== state.batch) continue;\n if (t.total > 0) {\n total += t.total;\n loaded += frac(t) * t.total;\n } else {\n sum += frac(t);\n unknown++;\n }\n }\n if (!total && !unknown) return 0;\n if (!unknown) return clamp(loaded / total, 0, 1);\n return clamp(total ? (loaded / total + sum) / (1 + unknown) : sum / unknown, 0, 1);\n }\n function summary() {\n const counts: Record<TaskStatus, number> = { running: 0, queued: 0, paused: 0, failed: 0, done: 0 };\n for (const t of state.tasks) if (t.status !== 'canceled') counts[t.status]++;\n const order: TaskStatus[] = ['running', 'queued', 'paused', 'failed', 'done'];\n return { counts, text: order.filter((k) => counts[k]).map((k) => `${counts[k]} ${k}`).join(' · ') };\n }\n\n /* ───── Tray ───── */\n\n function openTray() {\n if (state.trayOpen) return;\n state.trayOpen = true;\n syncTimers();\n emit();\n }\n function closeTray() {\n if (!state.trayOpen) return;\n state.trayOpen = false;\n syncTimers();\n emit();\n }\n function dismissAttention() {\n if (state.attentionDismissed) return;\n state.attentionDismissed = true;\n emit();\n }\n\n const withTask = (fn: (t: Task) => void) => (id: string) => {\n const t = byId(id);\n if (t) fn(t);\n };\n\n return {\n cfg,\n state,\n defaults: { options: DEFAULT_OPTIONS, labels: defaultLabels },\n subscribe,\n configure,\n setPaused,\n push,\n dismiss,\n tap,\n live,\n refresh,\n setOpen,\n promise,\n find,\n track,\n tasks: () => state.tasks.map(info),\n info,\n active,\n failed,\n aggregate,\n summary,\n pauseTask: withTask(pauseTask),\n resumeTask: withTask(resumeTask),\n cancelTask: withTask(cancelTask),\n retryTask: withTask(retryTask),\n removeTask: withTask(removeTask),\n retryFailed: () => failed().forEach(retryTask),\n pauseAll: () => state.tasks.filter((t) => t.status === 'running').forEach(pauseTask),\n resumeAll: () => state.tasks.filter((t) => t.status === 'paused').forEach(resumeTask),\n clearDone,\n openTray,\n closeTray,\n toggleTray: () => (state.trayOpen ? closeTray() : openTray()),\n dismissAttention,\n };\n}\n","import { createStore, type Store } from './store';\nimport type { Island } from './island';\n\ninterface Shared {\n store: Store;\n island: Island | null;\n warned: boolean;\n}\n\n// One store per page, even if two copies of the package end up bundled (ESM + CJS, or two versions).\nconst KEY = Symbol.for('buoy-ui');\n\nexport function shared(): Shared {\n const g = globalThis as unknown as Record<symbol, Shared | undefined>;\n let s = g[KEY];\n if (!s) {\n s = { store: createStore(), island: null, warned: false };\n g[KEY] = s;\n }\n return s;\n}\n","import { injectStyles } from './inject';\nimport { createIsland } from './island';\nimport { shared } from './shared';\nimport type { BuoyOptions, MountHandle, MountOptions } from './types';\n\n/**\n * Put the island on the page. Without React, call this once at startup.\n * Safe to call on a server: it does nothing there.\n */\nexport function mount(options: MountOptions = {}): MountHandle {\n const { container, injectStyles: inject = true, nonce, ...config } = options;\n const s = shared();\n const configure = (o: BuoyOptions) => s.store.configure(o);\n s.store.configure(config);\n if (typeof document === 'undefined') return { configure, destroy() {} };\n if (s.island) {\n if (!s.warned && typeof console !== 'undefined') {\n s.warned = true;\n console.warn('[buoy] An island is already mounted. Only one is shown at a time, so this one was skipped.');\n }\n return { configure, destroy() {} };\n }\n if (inject) injectStyles(document, nonce);\n const island = createIsland(s.store, { container });\n s.island = island;\n return {\n configure,\n destroy() {\n if (s.island === island) s.island = null;\n island.destroy();\n },\n };\n}\n","import { shared } from './shared';\nimport type { Buoy, BuoyOptions, LiveOptions, MessageOptions, PromiseOptions, TaskContext, TrackOptions } from './types';\n\nconst store = () => shared().store;\n\nfunction message(title: string, options?: MessageOptions): string {\n return store().push(title, options);\n}\n\n/**\n * Show messages, promises and background work in the island.\n * Calls made before an island is mounted wait and appear once it is.\n */\nexport const buoy: Buoy = Object.assign(message, {\n success: (title: string, options?: MessageOptions) => store().push(title, { ...options, type: 'success' }),\n error: (title: string, options?: MessageOptions) => store().push(title, { ...options, type: 'error' }),\n warn: (title: string, options?: MessageOptions) => store().push(title, { ...options, type: 'warning' }),\n info: (title: string, options?: MessageOptions) => store().push(title, { ...options, type: 'info' }),\n promise: <T>(promise: Promise<T> | (() => Promise<T>), options?: PromiseOptions<T>) => store().promise(promise, options),\n dismiss: (id?: string) => store().dismiss(id),\n track: (run: (task: TaskContext) => unknown, options?: TrackOptions) => store().track(run, options),\n live: (options: LiveOptions) => store().live(options),\n tasks: () => store().tasks(),\n tray: {\n open: () => store().openTray(),\n close: () => store().closeTray(),\n toggle: () => store().toggleTray(),\n },\n configure: (options: BuoyOptions) => store().configure(options),\n});\n"],"mappings":"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","names":["store","act","on","message","message","_a","clearDone","injectStyles","store","offset"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/core/styles.ts","../src/core/inject.ts","../src/core/format.ts","../src/core/icons.ts","../src/core/island.ts","../src/core/store.ts","../src/core/shared.ts","../src/core/mount.ts","../src/core/api.ts"],"sourcesContent":["import { useEffect, useRef, useSyncExternalStore } from 'react';\nimport { mount } from './core/mount';\nimport { shared } from './core/shared';\nimport type { BuoyOptions, Labels, MountHandle, MountOptions, TaskInfo } from './core/types';\n\nexport { buoy } from './core/api';\nexport type {\n Buoy as BuoyApi,\n BuoyOptions,\n ColorScheme,\n IconInput,\n IconName,\n Labels,\n LiveHandle,\n LiveOptions,\n LiveView,\n MessageAction,\n MessageOptions,\n MessageType,\n Position,\n PromiseOptions,\n Resting,\n TaskContext,\n TaskHandle,\n TaskInfo,\n TaskStatus,\n Theme,\n Tone,\n TrackOptions,\n} from './core/types';\n\nexport type BuoyProps = Omit<MountOptions, keyof BuoyOptions> & BuoyOptions;\n\n/**\n * Renders the island. Put it once near the root of your app, then call `buoy()` from anywhere.\n * It renders nothing in React's tree: the island lives in its own element at the end of <body>.\n */\nexport function Buoy(props: BuoyProps): null {\n const { container, injectStyles, nonce, labels, ...options } = props;\n const handle = useRef<MountHandle | null>(null);\n // Label functions are read through refs, so inline arrow functions don't reconfigure on every render.\n const latestLabels = useRef(labels);\n latestLabels.current = labels;\n\n useEffect(() => {\n const h = mount({ container, injectStyles, nonce });\n handle.current = h;\n return () => {\n handle.current = null;\n h.destroy();\n };\n }, [container, injectStyles, nonce]);\n\n const { store } = shared();\n const defaults = store.defaults;\n const { theme, position, resting, richColors, expandOnHover, duration, concurrency, guard, haptics, colorScheme, offset, taskIcon } = options;\n const noun = labels?.noun;\n const hasActive = !!labels?.active;\n const hasDoneOne = !!labels?.doneOne;\n const hasDoneMany = !!labels?.doneMany;\n\n useEffect(() => {\n const d = defaults.options;\n const next: Labels = {\n noun: noun ?? defaults.labels.noun,\n active: hasActive ? (tasks) => latestLabels.current!.active!(tasks) : defaults.labels.active,\n doneOne: hasDoneOne ? (task) => latestLabels.current!.doneOne!(task) : defaults.labels.doneOne,\n doneMany: hasDoneMany ? (count) => latestLabels.current!.doneMany!(count) : defaults.labels.doneMany,\n };\n // Missing props go back to their defaults, so removing a prop undoes it.\n store.configure({\n theme: theme ?? d.theme,\n position: position ?? d.position,\n resting: resting ?? d.resting,\n richColors: richColors ?? d.richColors,\n expandOnHover: expandOnHover ?? d.expandOnHover,\n duration: duration ?? d.duration,\n concurrency: concurrency ?? d.concurrency,\n guard: guard ?? d.guard,\n haptics: haptics ?? d.haptics,\n colorScheme: colorScheme ?? d.colorScheme,\n offset: offset ?? d.offset,\n taskIcon: taskIcon ?? d.taskIcon,\n labels: next,\n });\n }, [store, defaults, theme, position, resting, richColors, expandOnHover, duration, concurrency, guard, haptics, colorScheme, offset, taskIcon, noun, hasActive, hasDoneOne, hasDoneMany]);\n\n return null;\n}\n\nconst NO_TASKS: TaskInfo[] = [];\n\n/** The current tasks, kept in sync. Use it to show progress somewhere else in your UI. */\nexport function useBuoyTasks(): TaskInfo[] {\n const { store } = shared();\n const cache = useRef<{ version: number; tasks: TaskInfo[] }>({ version: -1, tasks: NO_TASKS });\n return useSyncExternalStore(\n (onChange) => store.subscribe(() => onChange()),\n () => {\n if (cache.current.version !== store.state.version) cache.current = { version: store.state.version, tasks: store.tasks() };\n return cache.current.tasks;\n },\n () => NO_TASKS,\n );\n}\n","// The island's stylesheet. Injected once at mount, or import `buoy-ui/styles.css` and pass injectStyles={false}.\n// Public custom properties (set them anywhere above the island, e.g. on :root):\n// --buoy-accent progress color on dark surfaces (default #2DD4BF)\n// --buoy-accent-strong progress color on light surfaces (default #0F766E)\n// --buoy-ink fill of the Ink and Notch themes (default #0B0B0C)\n// --buoy-font font stack (default system UI)\n// --buoy-offset distance from the screen edge (default 12px)\n// --buoy-z stacking order (default 2147483000)\n// Read-only tokens for live activity markup, resolved for the current theme:\n// --buoy-bg, --buoy-fg, --buoy-fg-2 (muted), --buoy-chip, --buoy-chip-2 (hover), --buoy-track,\n// --buoy-tint (accent on this surface), --buoy-success, --buoy-error, --buoy-warn\n\nconst INK_DARK = '--a-edge:rgba(255,255,255,.14);--a-shadow:0 14px 30px -14px rgba(0,0,0,.9),0 2px 6px -2px rgba(0,0,0,.5);';\n\nconst FROST_LIGHT = '--a-bg:rgba(255,255,255,.66);--a-fg:#0B0B0C;--a-fg2:#3F3F46;--a-edge:rgba(255,255,255,.7);--a-shadow:0 12px 30px -14px rgba(0,0,0,.4);--a-chip:rgba(11,11,12,.08);--a-chip-2:rgba(11,11,12,.14);--a-primary:#0B0B0C;--a-primary-fg:#fff;--a-track:rgba(11,11,12,.14);--a-row:rgba(11,11,12,.05);--a-row-2:rgba(11,11,12,.09);--a-accent:var(--buoy-accent-strong,#0F766E);--a-blur:blur(20px) saturate(1.6);--a-success:#047857;--a-error:#B91C1C;--a-warn:#B45309;--a-info:#1D4ED8;';\nconst FROST_DARK = '--a-bg:rgba(32,32,37,.62);--a-fg:#F4F4F5;--a-fg2:#C8C8CE;--a-edge:rgba(255,255,255,.12);--a-chip:rgba(255,255,255,.1);--a-chip-2:rgba(255,255,255,.16);--a-primary:#F4F4F5;--a-primary-fg:#0B0B0C;--a-track:rgba(255,255,255,.16);--a-row:rgba(255,255,255,.05);--a-row-2:rgba(255,255,255,.09);--a-accent:var(--buoy-accent,#2DD4BF);--a-success:#34D399;--a-error:#F87171;--a-warn:#FBBF24;--a-info:#60A5FA;';\n\nconst PAPER_LIGHT = '--a-bg:#fff;--a-fg:#111113;--a-fg2:#52525B;--a-edge:#E4E4E7;--a-shadow:0 12px 28px -16px rgba(0,0,0,.3),0 1px 2px rgba(0,0,0,.06);--a-chip:#F4F4F5;--a-chip-2:#EAEAEC;--a-primary:#0B0B0C;--a-primary-fg:#fff;--a-track:#E4E4E7;--a-row:#F7F7F8;--a-row-2:#F0F0F2;--a-accent:var(--buoy-accent-strong,#0F766E);--a-blur:none;--a-success:#047857;--a-error:#B91C1C;--a-warn:#B45309;--a-info:#1D4ED8;';\nconst PAPER_DARK = '--a-bg:#18181B;--a-fg:#F4F4F5;--a-fg2:#A1A1AA;--a-edge:#2E2E34;--a-shadow:0 14px 30px -14px rgba(0,0,0,.9),0 2px 6px -2px rgba(0,0,0,.5);--a-chip:#232328;--a-chip-2:#2C2C32;--a-primary:#F4F4F5;--a-primary-fg:#0B0B0C;--a-track:#2E2E34;--a-row:#1F1F23;--a-row-2:#26262B;--a-accent:var(--buoy-accent,#2DD4BF);--a-success:#34D399;--a-error:#F87171;--a-warn:#FBBF24;--a-info:#60A5FA;';\n\nconst SOLID = '.buoy:is([data-buoy-theme=\"ink\"],[data-buoy-theme=\"notch\"])';\nconst FROST = '.buoy[data-buoy-theme=\"frost\"]';\nconst PAPER = '.buoy[data-buoy-theme=\"paper\"]';\nconst NOTCH = '.buoy[data-buoy-theme=\"notch\"]';\nconst BOTTOM = '.buoy[data-position=\"bottom\"]';\n\nconst rich = (type: string, tone: string) =>\n `.buoy[data-rich=\"true\"][data-type=\"${type}\"]{--a-fill:color-mix(in srgb,var(${tone}) 20%,var(--a-bg));--a-edge:color-mix(in srgb,var(${tone}) 32%,transparent)}`;\n\nexport const css = [\n /* Root and tokens */\n '.buoy{position:fixed;left:50%;top:calc(var(--buoy-offset,12px) + env(safe-area-inset-top,0px));width:0;height:0;z-index:var(--buoy-z,2147483000);font-family:var(--buoy-font,ui-sans-serif,system-ui,-apple-system,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif);font-size:14px;font-weight:400;line-height:1.25;letter-spacing:normal;text-align:left;text-transform:none;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;'\n + '--a-bg:var(--buoy-ink,#0B0B0C);--a-fg:#fff;--a-fg2:rgba(255,255,255,.62);--a-edge:rgba(255,255,255,.07);--a-shadow:0 14px 30px -14px rgba(0,0,0,.55),0 2px 6px -2px rgba(0,0,0,.25);--a-chip:rgba(255,255,255,.1);--a-chip-2:rgba(255,255,255,.16);--a-primary:#fff;--a-primary-fg:#0B0B0C;--a-track:rgba(255,255,255,.16);--a-row:rgba(255,255,255,.05);--a-row-2:rgba(255,255,255,.09);--a-accent:var(--buoy-accent,#2DD4BF);--a-blur:none;--a-success:#34D399;--a-error:#F87171;--a-warn:#FBBF24;--a-info:#60A5FA;--a-fill:var(--a-bg);--a-danger:#DC2626;--buoy-bg:var(--a-bg);--buoy-fg:var(--a-fg);--buoy-fg-2:var(--a-fg2);--buoy-chip:var(--a-chip);--buoy-chip-2:var(--a-chip-2);--buoy-track:var(--a-track);--buoy-tint:var(--a-accent);--buoy-success:var(--a-success);--buoy-error:var(--a-error);--buoy-warn:var(--a-warn)}',\n `${SOLID}[data-scheme=\"dark\"]{${INK_DARK}}`,\n `@media (prefers-color-scheme:dark){${SOLID}[data-scheme=\"system\"]{${INK_DARK}}}`,\n `${FROST}{${FROST_LIGHT}}`,\n `${FROST}[data-scheme=\"dark\"]{${FROST_DARK}}`,\n `@media (prefers-color-scheme:dark){${FROST}[data-scheme=\"system\"]{${FROST_DARK}}}`,\n `${PAPER}{${PAPER_LIGHT}}`,\n `${PAPER}[data-scheme=\"dark\"]{${PAPER_DARK}}`,\n `@media (prefers-color-scheme:dark){${PAPER}[data-scheme=\"system\"]{${PAPER_DARK}}}`,\n rich('success', '--a-success'),\n rich('error', '--a-error'),\n rich('warning', '--a-warn'),\n rich('info', '--a-info'),\n\n /* Resets with zero specificity so component rules always win */\n ':where(.buoy) *,:where(.buoy) *::before,:where(.buoy) *::after{box-sizing:border-box}',\n ':where(.buoy) button{margin:0;font:inherit;color:inherit;letter-spacing:inherit;text-transform:none;-webkit-appearance:none;appearance:none}',\n '.buoy [hidden]{display:none!important}',\n\n /* Geometry layers */\n `${NOTCH}{top:env(safe-area-inset-top,0px)}`,\n `${BOTTOM}{top:auto;bottom:calc(var(--buoy-offset,12px) + env(safe-area-inset-bottom,0px))}`,\n `${NOTCH}[data-position=\"bottom\"]{top:auto;bottom:env(safe-area-inset-bottom,0px)}`,\n '.buoy-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}',\n '.buoy-stage,.buoy-drag,.buoy-goo{position:absolute;left:0;top:0;width:0;height:0}',\n '.buoy-shadow,.buoy-bshadow,.buoy-fill,.buoy-bfill,.buoy-shell,.buoy-bubble{position:absolute;left:0;top:0}',\n `${BOTTOM} :is(.buoy-stage,.buoy-drag,.buoy-goo,.buoy-shadow,.buoy-bshadow,.buoy-fill,.buoy-bfill,.buoy-shell,.buoy-bubble){top:auto;bottom:0}`,\n '.buoy-bshadow,.buoy-bfill,.buoy-bubble{width:44px;height:44px}',\n '.buoy-shadow,.buoy-bshadow{box-shadow:var(--a-shadow);pointer-events:none}',\n '.buoy-fill,.buoy-bfill{background-color:var(--a-fill);-webkit-backdrop-filter:var(--a-blur);backdrop-filter:var(--a-blur);pointer-events:none;transition:background-color .25s ease}',\n '.buoy-goo.is-gooey{filter:url(#buoy-goo)}',\n '.buoy-shell{overflow:hidden;color:var(--a-fg);box-shadow:inset 0 0 0 1px var(--a-edge);isolation:isolate;touch-action:none;transition:box-shadow .25s ease}',\n '.buoy-bubble{padding:0;border:0;background:transparent;box-shadow:inset 0 0 0 1px var(--a-edge);color:var(--a-fg);display:grid;place-items:center;cursor:pointer}',\n '.buoy-bub-ic{display:grid;color:var(--a-error)}',\n '.buoy-bub-ic svg{width:20px;height:20px}',\n '.buoy-layer{position:absolute;left:50%;top:0;translate:-50% 0;width:max-content}',\n `${BOTTOM} .buoy-layer{top:auto;bottom:0}`,\n\n /* Notch shoulders */\n `${NOTCH} :is(.buoy-fill,.buoy-bfill)::before,${NOTCH} :is(.buoy-fill,.buoy-bfill)::after{content:\"\";position:absolute;top:0;width:16px;height:16px;pointer-events:none}`,\n `${NOTCH} :is(.buoy-fill,.buoy-bfill)::before{left:-16px;background:radial-gradient(circle at 0 100%,transparent 15.5px,var(--a-fill) 16px)}`,\n `${NOTCH} :is(.buoy-fill,.buoy-bfill)::after{right:-16px;background:radial-gradient(circle at 100% 100%,transparent 15.5px,var(--a-fill) 16px)}`,\n `${NOTCH}[data-position=\"bottom\"] :is(.buoy-fill,.buoy-bfill)::before{top:auto;bottom:0;background:radial-gradient(circle at 0 0,transparent 15.5px,var(--a-fill) 16px)}`,\n `${NOTCH}[data-position=\"bottom\"] :is(.buoy-fill,.buoy-bfill)::after{top:auto;bottom:0;background:radial-gradient(circle at 100% 0,transparent 15.5px,var(--a-fill) 16px)}`,\n\n /* Tones */\n '.buoy [data-tone=\"success\"]{--tone:var(--a-success)}',\n '.buoy [data-tone=\"error\"]{--tone:var(--a-error)}',\n '.buoy [data-tone=\"warn\"]{--tone:var(--a-warn)}',\n '.buoy [data-tone=\"info\"]{--tone:var(--a-info)}',\n '.buoy [data-tone=\"accent\"]{--tone:var(--a-accent)}',\n\n /* Compact row */\n '.buoy-row{display:flex;align-items:center;gap:10px;height:44px;padding:0 18px 0 6px;white-space:nowrap;font-size:14px;font-weight:500;letter-spacing:-.005em;color:var(--a-fg)}',\n '.buoy-row.no-icon{padding-left:18px}',\n // Inset the action pill by the same 6px on the right as above and below, so its end is concentric with the island's.\n '.buoy-row.end-action{padding-right:6px}',\n '.buoy-row.end-ring{padding-right:8px}',\n '.buoy-row.end-badge{padding-right:10px}',\n 'button.buoy-row{border:0;background:none;cursor:pointer;text-align:left}',\n '.buoy-ic{width:32px;height:32px;flex:none;border-radius:999px;background:var(--a-chip);color:var(--a-fg);display:grid;place-items:center}',\n '.buoy-ic svg{width:18px;height:18px}',\n '.buoy-ic[data-tone]:not([data-tone=\"\"]),.buoy-tile[data-tone]:not([data-tone=\"\"]){background:color-mix(in srgb,var(--tone) 17%,transparent);color:var(--tone)}',\n '.buoy-title{overflow:hidden;text-overflow:ellipsis;max-width:min(260px,calc(100vw - 170px))}',\n '.buoy-pct{margin-left:2px;min-width:3.4ch;text-align:right;font-size:13px;color:var(--a-fg2);font-variant-numeric:tabular-nums}',\n '.buoy-badge{height:24px;padding:0 8px;border-radius:999px;background:var(--a-chip-2);font-size:12px;font-weight:600;display:inline-flex;align-items:center;font-variant-numeric:tabular-nums}',\n '.buoy-act{flex:none;height:44px;padding:0 0 0 4px;border:0;background:none;display:flex;align-items:center;cursor:pointer}',\n '.buoy-act>span{height:32px;padding:0 14px;border-radius:999px;background:var(--a-chip);font-size:13px;font-weight:600;display:flex;align-items:center;transition:background-color .15s ease}',\n '.buoy-act:hover>span{background:var(--a-chip-2)}',\n '.buoy-link{padding:0;border:0;background:none;cursor:pointer}',\n '.buoy-rest{display:block;width:104px;height:30px;padding:0;border:0;background:none}',\n 'button.buoy-rest{cursor:pointer}',\n '.buoy-ring{width:28px;height:28px;flex:none;transform:rotate(-90deg)}',\n '.buoy-ring circle{fill:none;stroke-width:3.5}',\n '.buoy-ring .trk{stroke:var(--a-track)}',\n '.buoy-ring .val{stroke:var(--a-accent);stroke-linecap:round;transition:stroke-dashoffset .35s ease,opacity .2s ease}',\n '.buoy-ring.is-muted .val{stroke:var(--a-fg2)}',\n '.buoy-spin{animation:buoy-spin .9s linear infinite}',\n '@keyframes buoy-spin{to{transform:rotate(360deg)}}',\n '.buoy-ic .draw{stroke-dasharray:20;stroke-dashoffset:20;animation:buoy-draw .36s .1s cubic-bezier(.2,.8,.2,1) forwards}',\n '@keyframes buoy-draw{to{stroke-dashoffset:0}}',\n\n /* Expanded message */\n '.buoy-exp{width:min(380px,calc(100vw - 24px));padding:14px;display:flex;flex-direction:column;gap:12px;white-space:normal;color:var(--a-fg)}',\n '.buoy-exp-head{display:flex;align-items:center;gap:12px}',\n '.buoy-tile{width:44px;height:44px;flex:none;border-radius:14px;background:var(--a-chip);color:var(--a-fg);display:grid;place-items:center}',\n '.buoy-tile svg{width:22px;height:22px}',\n '.buoy-exp-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}',\n '.buoy-exp-title{font-size:15px;font-weight:600;letter-spacing:-.01em}',\n '.buoy-exp-desc{font-size:13px;color:var(--a-fg2)}',\n '.buoy-x{width:44px;height:44px;flex:none;padding:0;border:0;border-radius:999px;background:transparent;color:var(--a-fg2);display:grid;place-items:center;cursor:pointer}',\n '.buoy-x:hover{color:var(--a-fg)}',\n '.buoy-x svg{width:16px;height:16px}',\n '.buoy-actions{display:flex;gap:8px}',\n '.buoy-btn.is-danger{background:var(--a-danger);color:#fff}',\n '.buoy-btn.is-danger:hover{background:var(--a-danger);opacity:.9}',\n '.buoy-custom{display:block;color:var(--a-fg)}',\n 'button.buoy-custom{margin:0;padding:0;border:0;background:none;font:inherit;letter-spacing:inherit;text-align:inherit;cursor:pointer}',\n '.buoy-custom:focus{outline:none}',\n 'button.buoy-custom:focus-visible{outline:2px solid var(--a-accent);outline-offset:-3px;border-radius:999px}',\n '.buoy-btn{flex:1;height:44px;border:0;border-radius:999px;background:var(--a-chip);color:var(--a-fg);font-size:14px;font-weight:600;line-height:1;cursor:pointer;transition:background-color .15s ease}',\n '.buoy-btn:hover{background:var(--a-chip-2)}',\n '.buoy-btn.is-primary{background:var(--a-primary);color:var(--a-primary-fg)}',\n '.buoy-btn.is-primary:hover{background:var(--a-primary);opacity:.9}',\n\n /* Tray */\n '.buoy-tray{width:min(420px,calc(100vw - 16px));padding:8px;display:flex;flex-direction:column;gap:4px;white-space:normal;color:var(--a-fg)}',\n '.buoy-tray-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:2px 2px 2px 14px}',\n '.buoy-tray-titles{display:flex;flex-direction:column;gap:2px;min-width:0}',\n '.buoy-tray-title{font-size:15px;font-weight:600;letter-spacing:-.01em}',\n '.buoy-tray-sub{font-size:12px;color:var(--a-fg2)}',\n '.buoy-tray-tools{display:flex;align-items:center;flex:none}',\n '.buoy-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;max-height:min(52vh,420px);overflow-y:auto;overscroll-behavior:contain;touch-action:pan-y}',\n '.buoy-task{display:flex;align-items:center;gap:12px;padding:10px 2px 10px 10px;border-radius:22px;background:var(--a-row)}',\n '.buoy-task:hover,.buoy-task:focus-within{background:var(--a-row-2)}',\n '.buoy-task[data-status=\"failed\"]{background:color-mix(in srgb,var(--a-error) 9%,transparent)}',\n '.buoy-tile.sm{width:40px;height:40px;border-radius:12px}',\n '.buoy-tile.sm svg{width:20px;height:20px}',\n '.buoy-task-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}',\n '.buoy-task-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px}',\n '.buoy-task-name{font-size:14px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}',\n '.buoy-task-state{flex:none;font-size:12px;font-weight:500;color:var(--a-fg2);font-variant-numeric:tabular-nums}',\n '.buoy-task-state.is-error{color:var(--a-error);font-weight:600}',\n '.buoy-bar{height:4px;border-radius:999px;background:var(--a-track);overflow:hidden}',\n '.buoy-bar>i{display:block;height:100%;border-radius:inherit;background:var(--a-accent);transition:width .3s ease}',\n '.buoy-task[data-status=\"paused\"] .buoy-bar>i{background:var(--a-fg2)}',\n '.buoy-task[data-status=\"failed\"] .buoy-bar>i{background:var(--a-error)}',\n '.buoy-task-meta{font-size:12px;color:var(--a-fg2);font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}',\n '.buoy-task-actions{display:flex;flex:none}',\n '.buoy-ib{width:44px;height:44px;padding:0;border:0;background:transparent;color:var(--a-fg);display:grid;place-items:center;cursor:pointer}',\n '.buoy-ib>span{width:32px;height:32px;border-radius:999px;background:var(--a-chip);display:grid;place-items:center;transition:background-color .15s ease}',\n '.buoy-ib:hover>span{background:var(--a-chip-2)}',\n '.buoy-ib svg{width:14px;height:14px}',\n '.buoy-task-actions .buoy-ib+.buoy-ib{margin-left:-8px}',\n '.buoy-reveal{display:none}',\n '.buoy-task:hover .buoy-reveal,.buoy-task:focus-within .buoy-reveal{display:grid}',\n '@media (hover:none){.buoy-reveal{display:grid}}',\n '.buoy-tray-foot{display:flex;align-items:center;gap:10px;padding:2px 2px 0 14px;font-size:12px;color:var(--a-fg2)}',\n '.buoy-tray-foot>svg{width:16px;height:16px;flex:none}',\n '.buoy-tray-foot>span{flex:1}',\n '.buoy-empty{margin:0;padding:14px;font-size:13px;color:var(--a-fg2)}',\n\n /* Focus */\n '.buoy button:focus-visible{outline:none}',\n '.buoy button:focus-visible>span,.buoy .buoy-btn:focus-visible,.buoy .buoy-x:focus-visible,.buoy .buoy-link:focus-visible,.buoy .buoy-bubble:focus-visible,.buoy button.buoy-rest:focus-visible{outline:2px solid var(--a-accent);outline-offset:2px}',\n '.buoy button.buoy-live:focus-visible{outline:2px solid var(--a-accent);outline-offset:-3px;border-radius:999px}',\n\n /* Motion preferences */\n '@media (prefers-reduced-motion:reduce){.buoy-spin{animation-duration:1.8s}.buoy-ic .draw{animation:none;stroke-dashoffset:0}.buoy-ring .val,.buoy-bar>i{transition:none}}',\n].join('\\n');\n","import { css } from './styles';\n\n/** Adds the stylesheet once, at the top of <head> so your own CSS can override it. */\nexport function injectStyles(doc: Document, nonce?: string): void {\n if (doc.querySelector('style[data-buoy]')) return;\n const style = doc.createElement('style');\n style.setAttribute('data-buoy', '');\n if (nonce) style.nonce = nonce;\n style.textContent = css;\n const head = doc.head || doc.getElementsByTagName('head')[0] || doc.documentElement;\n head.insertBefore(style, head.firstChild);\n}\n","import type { Task } from './store';\n\nexport const clamp = (v: number, min: number, max: number): number => Math.min(max, Math.max(min, v));\n\nconst ESC: Record<string, string> = { '&': '&', '<': '<', '>': '>', '\"': '"', \"'\": ''' };\nexport const esc = (s: unknown): string => String(s ?? '').replace(/[&<>\"']/g, (c) => ESC[c]);\n\ntype Progressing = Pick<Task, 'status' | 'total' | 'loaded' | 'fraction'>;\nexport const frac = (t: Progressing): number =>\n t.status === 'done' ? 1 : t.total > 0 ? clamp(t.loaded / t.total, 0, 1) : t.fraction;\n\nconst UNITS: ReadonlyArray<readonly [number, string]> = [[1e9, 'GB'], [1e6, 'MB'], [1e3, 'KB']];\nfunction unitFor(total: number): readonly [number, string] {\n for (const unit of UNITS) if (total >= unit[0]) return unit;\n return [1, 'B'];\n}\nconst num = (v: number): string => (v >= 100 ? String(Math.round(v)) : String(Math.round(v * 10) / 10));\n\n/** \"18.2 of 24 MB\", sized by the total. */\nexport function amount(loaded: number, total: number): string {\n const [d, u] = unitFor(total);\n return `${num(loaded / d)} of ${num(total / d)} ${u}`;\n}\n\nexport function size(total: number): string {\n const [d, u] = unitFor(total);\n return `${num(total / d)} ${u}`;\n}\n\nexport function eta(t: Task): string {\n if (!(t.rate > 0) || !(t.total > 0)) return '';\n const s = Math.max(1, Math.round((t.total - t.loaded) / t.rate));\n return s < 60 ? `${s} s left` : `${Math.round(s / 60)} min left`;\n}\n\n/** Right-hand label on a tray row. */\nexport function stateText(t: Task): string {\n switch (t.status) {\n case 'running': return `${Math.round(frac(t) * 100)}%`;\n case 'queued': return 'Queued';\n case 'paused': return 'Paused';\n case 'failed': return 'Failed';\n default: return t.total > 0 && !t.format ? size(t.total) : 'Done';\n }\n}\n\n/** Second line on a tray row. */\nexport function metaText(t: Task): string {\n const amt = t.total > 0 ? (t.format ? t.format(t.loaded, t.total) : amount(t.loaded, t.total)) : `${Math.round(frac(t) * 100)}%`;\n switch (t.status) {\n case 'running': {\n const left = eta(t);\n return left ? `${amt} · ${left}` : amt;\n }\n case 'queued': return 'Waiting to start';\n case 'paused': return amt;\n case 'failed': return t.total > 0 ? `${t.error} at ${amt}` : t.error;\n default: return t.doneLabel || 'Finished';\n }\n}\n","export const ICONS = {\n link: '<path d=\"M10 14a4.5 4.5 0 0 0 6.4 0l3-3a4.5 4.5 0 0 0-6.4-6.4l-1.1 1.1\"/><path d=\"M14 10a4.5 4.5 0 0 0-6.4 0l-3 3a4.5 4.5 0 0 0 6.4 6.4l1.1-1.1\"/>',\n check: '<path class=\"draw\" d=\"M5.5 12.5l4 4L18.5 7.5\"/>',\n error: '<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 8v4.5\"/><path d=\"M12 16h.01\"/>',\n warning: '<path d=\"M10.3 4.6 3 17.5a2 2 0 0 0 1.7 3h14.6a2 2 0 0 0 1.7-3L13.7 4.6a2 2 0 0 0-3.4 0z\"/><path d=\"M12 9.5v4\"/><path d=\"M12 17h.01\"/>',\n info: '<circle cx=\"12\" cy=\"12\" r=\"8.5\"/><path d=\"M12 11v5\"/><path d=\"M12 7.8h.01\"/>',\n upload: '<path d=\"M12 15V4.5\"/><path d=\"M7.5 9 12 4.5 16.5 9\"/><path d=\"M4.5 15v2.5a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V15\"/>',\n download: '<path d=\"M12 4.5V15\"/><path d=\"M7.5 10.5 12 15l4.5-4.5\"/><path d=\"M4.5 15v2.5a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V15\"/>',\n file: '<path d=\"M14 3.5H7.5a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2V8z\"/><path d=\"M14 3.5V8h4.5\"/><path d=\"M9 13h6\"/><path d=\"M9 16.5h4\"/>',\n archive: '<path d=\"M14 3.5H7.5a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2V8z\"/><path d=\"M14 3.5V8h4.5\"/><path d=\"M11 9.5h2\"/><path d=\"M11 12.5h2\"/><path d=\"M11 15.5h2\"/>',\n image: '<rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"15\" rx=\"2.5\"/><circle cx=\"9\" cy=\"10\" r=\"1.75\"/><path d=\"m20.5 15.5-4.5-4.5-8.5 8.5\"/>',\n send: '<path d=\"M20.5 3.5 10 14\"/><path d=\"m20.5 3.5-6.5 17-4-6.5-6.5-4z\"/>',\n folder: '<path d=\"M3.5 7.5a2 2 0 0 1 2-2h3.6l2 2h7.4a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-13a2 2 0 0 1-2-2z\"/>',\n copy: '<rect x=\"8.5\" y=\"8.5\" width=\"11\" height=\"11\" rx=\"2.5\"/><path d=\"M15.5 8.5v-2a2 2 0 0 0-2-2h-7a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h2\"/>',\n stack: '<path d=\"m12 4 8 4.5-8 4.5-8-4.5z\"/><path d=\"m4 13 8 4.5 8-4.5\"/>',\n bell: '<path d=\"M6 16v-5a6 6 0 0 1 12 0v5l1.5 2h-15z\"/><path d=\"M10 20.5a2 2 0 0 0 4 0\"/>',\n timer: '<circle cx=\"12\" cy=\"13.5\" r=\"7.5\"/><path d=\"M12 10v3.5l2.5 2\"/><path d=\"M9.5 3h5\"/>',\n user: '<circle cx=\"12\" cy=\"8.5\" r=\"3.5\"/><path d=\"M5 19.5a7 7 0 0 1 14 0\"/>',\n pause: '<path d=\"M9 6v12\"/><path d=\"M15 6v12\"/>',\n play: '<path d=\"M8.5 6v12l9.5-6z\" fill=\"currentColor\"/>',\n retry: '<path d=\"M4.5 12a7.5 7.5 0 1 0 2.2-5.3\"/><path d=\"M4.5 4.5v4h4\"/>',\n x: '<path d=\"m6.5 6.5 11 11\"/><path d=\"m17.5 6.5-11 11\"/>',\n open: '<path d=\"M7 17 17 7\"/><path d=\"M9 7h8v8\"/>',\n up: '<path d=\"M6.5 14.5 12 9l5.5 5.5\"/>',\n down: '<path d=\"M6.5 9.5 12 15l5.5-5.5\"/>',\n} as const;\n\nexport type IconName = keyof typeof ICONS;\n\nconst OPEN = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\">';\n\n/** A built-in icon by name, or a custom `<svg>` string passed through as is. Custom SVG must be trusted markup. */\nexport function iconHTML(icon: string | null | undefined): string {\n if (!icon) return '';\n if (Object.prototype.hasOwnProperty.call(ICONS, icon)) return `${OPEN}${ICONS[icon as IconName]}</svg>`;\n return /^\\s*<svg[\\s>]/i.test(icon) ? icon : '';\n}\n\nexport const spinnerHTML = '<svg class=\"buoy-spin\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"8.5\" opacity=\".22\"/><path d=\"M12 3.5a8.5 8.5 0 0 1 8.5 8.5\"/></svg>';\n\nconst RING = 2 * Math.PI * 10.5;\nconst offset = (f: number) => (RING * (1 - Math.min(1, Math.max(0, f)))).toFixed(2);\n\nexport function ringHTML(fraction: number, muted: boolean): string {\n return `<svg class=\"buoy-ring${muted ? ' is-muted' : ''}\" viewBox=\"0 0 28 28\" aria-hidden=\"true\" focusable=\"false\"><circle class=\"trk\" cx=\"14\" cy=\"14\" r=\"10.5\"/><circle class=\"val\" cx=\"14\" cy=\"14\" r=\"10.5\" style=\"stroke-dasharray:${RING.toFixed(2)};stroke-dashoffset:${offset(fraction)};opacity:${fraction > 0.004 ? 1 : 0}\"/></svg>`;\n}\n\nexport function setRing(svg: Element | null, fraction: number): void {\n const val = svg && (svg.querySelector('.val') as SVGElement | null);\n if (!val) return;\n val.style.strokeDashoffset = offset(fraction);\n val.style.opacity = fraction > 0.004 ? '1' : '0';\n}\n","import { esc, frac, metaText, stateText } from './format';\nimport { iconHTML, ringHTML, setRing, spinnerHTML } from './icons';\nimport type { Msg, Store, Task } from './store';\n\ntype Spr = readonly [stiffness: number, damping: number];\nconst SPR = {\n enter: [420, 32],\n resize: [320, 30],\n expand: [300, 28],\n tray: [260, 26],\n bubble: [380, 22],\n drag: [420, 34],\n} as const satisfies Record<string, Spr>;\n\nconst BUBBLE = 44;\nconst GAP = 8;\nconst TYPE_ICON: Record<string, string> = { success: 'check', error: 'error', warning: 'warning', info: 'info' };\nconst TYPE_TONE: Record<string, string> = { success: 'success', error: 'error', warning: 'warn', info: 'info' };\nconst USER_TONE: Record<string, string> = { accent: 'accent', success: 'success', error: 'error', warning: 'warn', info: 'info' };\n\nconst MARKUP =\n '<div class=\"buoy-sr\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"></div>' +\n '<div class=\"buoy-stage\" hidden><div class=\"buoy-drag\">' +\n '<div class=\"buoy-shadow\"></div><div class=\"buoy-bshadow\"></div>' +\n '<div class=\"buoy-goo\"><div class=\"buoy-fill\"></div><div class=\"buoy-bfill\"></div></div>' +\n '<div class=\"buoy-shell\"></div>' +\n '<button class=\"buoy-bubble\" type=\"button\" data-act=\"bubble\" tabindex=\"-1\" aria-hidden=\"true\"></button>' +\n '</div></div>';\n\n// Blur plus an alpha threshold: shapes that come close melt into each other while the bubble splits off.\nconst GOO =\n '<svg data-buoy-goo aria-hidden=\"true\" width=\"0\" height=\"0\" style=\"position:absolute;width:0;height:0;overflow:hidden\"><defs>' +\n '<filter id=\"buoy-goo\" filterUnits=\"userSpaceOnUse\" x=\"-700\" y=\"-700\" width=\"1400\" height=\"1400\" color-interpolation-filters=\"sRGB\">' +\n '<feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"7\" result=\"b\"/>' +\n '<feColorMatrix in=\"b\" mode=\"matrix\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 22 -9\" result=\"g\"/>' +\n '<feComposite in=\"SourceGraphic\" in2=\"g\" operator=\"atop\"/>' +\n '</filter></defs></svg>';\n\ntype Kind = 'msg' | 'live' | 'attention' | 'rest' | 'tray';\ninterface View {\n kind: Kind;\n key: string;\n /** Structure signature. A change rebuilds the layer in place without a cross-fade. */\n sig: string;\n html: string;\n type: string;\n expanded: boolean;\n radius: number | null;\n spring: Spr;\n /** Cheap in-place updates (progress) that don't change the structure. */\n patch?: (el: HTMLElement) => void;\n}\ninterface Spring { x: number; v: number; t: number; k: number; c: number }\n\nexport interface IslandOptions {\n container?: HTMLElement | null;\n}\nexport interface Island {\n readonly element: HTMLElement;\n destroy(): void;\n}\n\nexport function createIsland(store: Store, options: IslandOptions = {}): Island {\n const doc = document;\n const win = window;\n const { cfg, state } = store;\n\n const motionQuery = typeof win.matchMedia === 'function' ? win.matchMedia('(prefers-reduced-motion: reduce)') : null;\n const reduced = () => !!(motionQuery && motionQuery.matches);\n const clock = () => (win.performance ? win.performance.now() : Date.now());\n const raf: (cb: (time: number) => void) => number =\n typeof win.requestAnimationFrame === 'function' ? (cb) => win.requestAnimationFrame(cb) : (cb) => win.setTimeout(() => cb(clock()), 16);\n const caf: (id: number) => void =\n typeof win.cancelAnimationFrame === 'function' ? (id) => win.cancelAnimationFrame(id) : (id) => win.clearTimeout(id);\n const canAnimate = typeof (doc.documentElement as Partial<HTMLElement>).animate === 'function';\n const play = (el: Element, keyframes: Keyframe[], o: KeyframeAnimationOptions): Animation | null =>\n canAnimate ? el.animate(keyframes, o) : null;\n\n /* ───── DOM ───── */\n\n const root = doc.createElement('div');\n root.className = 'buoy';\n root.innerHTML = MARKUP;\n const pick = <T extends Element = HTMLElement>(selector: string) => root.querySelector(selector) as T;\n const sr = pick('.buoy-sr');\n const stage = pick('.buoy-stage');\n const dragEl = pick('.buoy-drag');\n const goo = pick('.buoy-goo');\n const shell = pick('.buoy-shell');\n const bubble = pick<HTMLButtonElement>('.buoy-bubble');\n const shellParts = [pick('.buoy-shadow'), pick('.buoy-fill'), shell];\n const bubbleParts = [pick('.buoy-bshadow'), pick('.buoy-bfill'), bubble];\n const holder = doc.createElement('div');\n holder.innerHTML = GOO;\n const gooSvg = holder.firstElementChild as Element;\n\n /* ───── Springs: interruptible and retargetable mid-flight ───── */\n\n const spring = (x: number): Spring => ({ x, v: 0, t: x, k: 320, c: 30 });\n const S = { w: spring(44), h: spring(44), r: spring(22), p: spring(0), dy: spring(0) };\n type Key = keyof typeof S;\n const KEYS = Object.keys(S) as Key[];\n let frameId = 0;\n let last = 0;\n\n function kick() {\n if (frameId) return;\n last = clock();\n frameId = raf(step);\n }\n function step(time: number) {\n const dt = Math.min(0.05, Math.max(0, (time - last) / 1000));\n last = time;\n const n = Math.max(1, Math.ceil(dt * 240));\n const h = dt / n;\n let moving = false;\n for (const key of KEYS) {\n const s = S[key];\n if (s.x === s.t && s.v === 0) continue;\n for (let i = 0; i < n; i++) {\n const a = -s.k * (s.x - s.t) - s.c * s.v;\n s.v += a * h;\n s.x += s.v * h;\n }\n const eps = key === 'p' ? 0.002 : 0.25;\n if (Math.abs(s.x - s.t) < eps && Math.abs(s.v) < eps * 4) {\n s.x = s.t;\n s.v = 0;\n } else {\n moving = true;\n }\n }\n layout();\n frameId = moving ? raf(step) : 0;\n }\n function to(key: Key, target: number, spr: Spr) {\n const s = S[key];\n if (s.t === target && s.k === spr[0] && s.c === spr[1]) return;\n s.t = target;\n s.k = spr[0];\n s.c = spr[1];\n if (reduced()) {\n s.x = target;\n s.v = 0;\n layout();\n return;\n }\n kick();\n }\n function snap(key: Key, value: number) {\n const s = S[key];\n s.x = s.t = value;\n s.v = 0;\n }\n\n function layout() {\n const w = Math.max(0, S.w.x);\n const h = Math.max(0, S.h.x);\n const r = Math.min(Math.max(0, S.r.x), Math.min(w, h) / 2);\n const p = S.p.x;\n const left = -w / 2 - ((BUBBLE + GAP) / 2) * Math.min(Math.max(p, 0), 1.25);\n const notch = cfg.theme === 'notch';\n const bottom = cfg.position === 'bottom';\n const radius = notch ? (bottom ? `${r}px ${r}px 0 0` : `0 0 ${r}px ${r}px`) : `${r}px`;\n for (const el of shellParts) {\n const st = el.style;\n st.transform = `translateX(${left.toFixed(2)}px)`;\n st.width = `${w.toFixed(2)}px`;\n st.height = `${h.toFixed(2)}px`;\n st.borderRadius = radius;\n }\n const bl = left + w - BUBBLE + (BUBBLE + GAP) * p;\n const scale = 0.4 + 0.6 * Math.min(Math.max(p, 0), 1.2);\n const opacity = Math.min(Math.max(p * 2.2, 0), 1);\n const bubbleRadius = notch ? (bottom ? '22px 22px 0 0' : '0 0 22px 22px') : '22px';\n for (const el of bubbleParts) {\n const st = el.style;\n st.transform = `translateX(${bl.toFixed(2)}px) scale(${scale.toFixed(3)})`;\n st.opacity = opacity.toFixed(3);\n st.borderRadius = bubbleRadius;\n st.visibility = opacity < 0.01 ? 'hidden' : 'visible';\n }\n dragEl.style.transform = S.dy.x ? `translateY(${S.dy.x.toFixed(2)}px)` : '';\n goo.classList.toggle('is-gooey', (cfg.theme === 'ink' || notch) && p > 0.02 && p < 0.97 && !reduced());\n }\n\n /* ───── Views: what the one surface should look like right now ───── */\n\n const ib = (t: Task, act: string, fk: string, label: string, icon: string, reveal = false) =>\n `<button type=\"button\" class=\"buoy-ib${reveal ? ' buoy-reveal' : ''}\" data-act=\"${act}\" data-id=\"${t.id}\" data-fk=\"${fk}:${t.id}\" aria-label=\"${label} ${esc(t.label)}\"><span>${iconHTML(icon)}</span></button>`;\n const hasDetails = (m: Msg) => !!(m.description || (m.actions && m.actions.length));\n let hoverExpand = false;\n\n function msgView(m: Msg): View {\n if (m.render) return customView(m);\n const expanded = hasDetails(m) && (m.expanded || m.tapped || (hoverExpand && cfg.expandOnHover));\n const tone = TYPE_TONE[m.type] || USER_TONE[m.tone] || '';\n const icon = m.type === 'loading' ? spinnerHTML : iconHTML(m.icon === undefined ? TYPE_ICON[m.type] : m.icon);\n let html: string;\n if (expanded) {\n const actions = (m.actions || [])\n .map((a, i) => `<button type=\"button\" class=\"buoy-btn${a.primary ? ' is-primary' : ''}\" data-act=\"action\" data-i=\"${i}\" data-fk=\"a${i}\">${esc(a.label)}</button>`)\n .join('');\n html =\n `<div class=\"buoy-exp\"><div class=\"buoy-exp-head\"><span class=\"buoy-tile\" data-tone=\"${tone}\">${icon || iconHTML('info')}</span>` +\n `<div class=\"buoy-exp-text\"><span class=\"buoy-exp-title\">${esc(m.title)}</span>${m.description ? `<span class=\"buoy-exp-desc\">${esc(m.description)}</span>` : ''}</div>` +\n `<button type=\"button\" class=\"buoy-x\" data-act=\"dismiss\" data-fk=\"x\" aria-label=\"Dismiss\">${iconHTML('x')}</button></div>` +\n `${actions ? `<div class=\"buoy-actions\">${actions}</div>` : ''}</div>`;\n } else {\n const waiting = state.queue.length;\n const action = m.action ? `<button type=\"button\" class=\"buoy-act\" data-act=\"action\" data-i=\"-1\" data-fk=\"a-1\"><span>${esc(m.action.label)}</span></button>` : '';\n const badge = !action && waiting ? `<span class=\"buoy-badge\" title=\"${waiting} waiting\">+${waiting}</span>` : '';\n const cls = `buoy-row${icon ? '' : ' no-icon'}${action ? ' end-action' : badge ? ' end-badge' : ''}`;\n html = `<div class=\"${cls}\">${icon ? `<span class=\"buoy-ic\" data-tone=\"${tone}\">${icon}</span>` : ''}<span class=\"buoy-title\">${esc(m.title)}</span>${badge}${action}</div>`;\n }\n return {\n kind: 'msg',\n key: `m:${m.id}:${m.type}:${expanded ? 'x' : 'c'}`,\n sig: html,\n html,\n type: m.type,\n expanded,\n radius: expanded ? 28 : null,\n spring: expanded ? SPR.expand : SPR.resize,\n };\n }\n\n /** A live activity: the island keeps the shape and motion, the app draws what is inside. */\n function customView(m: Msg): View {\n const expanded = m.expandable && m.open;\n const label = esc(m.title);\n const html = expanded\n ? `<div class=\"buoy-custom is-expanded\" role=\"group\" aria-label=\"${label}\" tabindex=\"-1\" data-fk=\"live-x\"></div>`\n : m.expandable\n ? `<button type=\"button\" class=\"buoy-custom\" data-act=\"live-open\" data-fk=\"live-c\" aria-expanded=\"false\" aria-label=\"${label}. Show details\"></button>`\n : `<div class=\"buoy-custom\" role=\"group\" aria-label=\"${label}\"></div>`;\n return {\n kind: 'msg',\n key: `l:${m.id}:${expanded ? 'x' : 'c'}`,\n sig: html,\n html,\n type: 'live',\n expanded,\n radius: expanded ? 28 : null,\n spring: expanded ? SPR.expand : SPR.resize,\n patch: (el) => drawLive(el, m, expanded),\n };\n }\n\n // Draws only when the activity asked for it, so task progress and other redraws leave its markup alone.\n function drawLive(el: HTMLElement, m: Msg, expanded: boolean) {\n const box = el.querySelector<HTMLElement>('.buoy-custom');\n if (!box || !m.render) return;\n const stamp = `${m.rev}:${expanded ? 1 : 0}`;\n if (box.getAttribute('data-rev') === stamp) return;\n box.setAttribute('data-rev', stamp);\n try {\n m.render(box, { expanded });\n } catch (error) {\n if (typeof console !== 'undefined') console.error(error);\n box.textContent = m.title;\n }\n }\n\n function liveView(running: Task[]): View {\n const f = store.aggregate();\n const paused = running.every((t) => t.status === 'paused');\n const name = cfg.labels.active(running.map(store.info));\n const label = paused ? `Paused · ${name}` : name;\n const html =\n `<button type=\"button\" class=\"buoy-row end-ring buoy-live\" data-act=\"open-tray\" data-fk=\"live\" aria-label=\"${esc(label)}. Show details\">` +\n `<span class=\"buoy-ic\" data-tone=\"${paused ? '' : 'accent'}\">${iconHTML(paused ? 'pause' : cfg.taskIcon)}</span>` +\n `<span class=\"buoy-title\">${esc(label)}</span><span class=\"buoy-pct\">${Math.round(f * 100)}%</span>${ringHTML(f, paused)}</button>`;\n const patch = (el: HTMLElement) => {\n const pct = el.querySelector('.buoy-pct');\n if (pct) pct.textContent = `${Math.round(f * 100)}%`;\n setRing(el.querySelector('.buoy-ring'), f);\n };\n return { kind: 'live', key: 'live', sig: `live|${label}|${paused}`, html, type: '', expanded: false, radius: null, spring: SPR.resize, patch };\n }\n\n function attentionView(bad: Task[]): View {\n const n = bad.length;\n const label = `${n} ${cfg.labels.noun}${n === 1 ? '' : 's'} failed`;\n const html =\n `<div class=\"buoy-row end-action\"><span class=\"buoy-ic\" data-tone=\"error\">${iconHTML('error')}</span>` +\n `<button type=\"button\" class=\"buoy-link buoy-title\" data-act=\"open-tray\" data-fk=\"att\">${esc(label)}</button>` +\n `<button type=\"button\" class=\"buoy-act\" data-act=\"retry-failed\" data-fk=\"att-retry\"><span>Retry</span></button></div>`;\n return { kind: 'attention', key: 'attention', sig: html, html, type: 'error', expanded: false, radius: null, spring: SPR.resize };\n }\n\n function restView(): View {\n const html = state.tasks.length\n ? '<button type=\"button\" class=\"buoy-rest\" data-act=\"open-tray\" data-fk=\"rest\" aria-label=\"Show activity\"></button>'\n : '<div class=\"buoy-rest\"></div>';\n return { kind: 'rest', key: 'rest', sig: html, html, type: '', expanded: false, radius: 15, spring: SPR.resize };\n }\n\n function rowHTML(t: Task): string {\n const st = t.status;\n const tone = st === 'failed' ? 'error' : st === 'done' ? 'success' : '';\n const tile = `<span class=\"buoy-tile sm\" data-tone=\"${tone}\">${iconHTML(st === 'done' ? 'check' : t.icon) || iconHTML('file')}</span>`;\n const bar = st === 'done' || st === 'queued' ? '' : `<div class=\"buoy-bar\"><i style=\"width:${(frac(t) * 100).toFixed(1)}%\"></i></div>`;\n let buttons = '';\n if (st === 'running') buttons = ib(t, 'cancel', 'c', 'Cancel', 'x', true) + (t.pausable ? ib(t, 'pause', 'p', 'Pause', 'pause') : '');\n else if (st === 'queued') buttons = ib(t, 'cancel', 'c', 'Cancel', 'x');\n else if (st === 'paused') buttons = ib(t, 'cancel', 'c', 'Cancel', 'x', true) + ib(t, 'resume', 'p', 'Resume', 'play');\n else if (st === 'failed') buttons = ib(t, 'remove', 'c', 'Remove', 'x', true) + ib(t, 'retry', 'p', 'Retry', 'retry');\n else if (st === 'done' && t.onOpen) buttons = ib(t, 'open', 'p', 'Open', 'open');\n return (\n `<li class=\"buoy-task\" data-id=\"${t.id}\" data-status=\"${st}\">${tile}<div class=\"buoy-task-main\">` +\n `<div class=\"buoy-task-top\"><span class=\"buoy-task-name\">${esc(t.label)}</span><span class=\"buoy-task-state${st === 'failed' ? ' is-error' : ''}\">${esc(stateText(t))}</span></div>` +\n `${bar}<span class=\"buoy-task-meta\">${esc(metaText(t))}</span></div><div class=\"buoy-task-actions\">${buttons}</div></li>`\n );\n }\n\n function trayView(): View {\n const { counts, text } = store.summary();\n const running = counts.running + counts.queued + counts.paused;\n const bottom = cfg.position === 'bottom';\n const noun = (n: number) => `${cfg.labels.noun}${n === 1 ? '' : 's'}`;\n const clear = counts.done ? '<button type=\"button\" class=\"buoy-act\" data-act=\"clear-done\" data-fk=\"clear\"><span>Clear done</span></button>' : '';\n const head =\n `<div class=\"buoy-tray-head\"><div class=\"buoy-tray-titles\"><span class=\"buoy-tray-title\">Activity</span><span class=\"buoy-tray-sub\">${esc(text || 'Nothing here yet')}</span></div>` +\n `<div class=\"buoy-tray-tools\">${clear}<button type=\"button\" class=\"buoy-ib\" data-act=\"close-tray\" data-fk=\"close\" aria-label=\"Close\"><span>${iconHTML(bottom ? 'down' : 'up')}</span></button></div></div>`;\n const list = state.tasks.length ? `<ul class=\"buoy-list\">${state.tasks.map(rowHTML).join('')}</ul>` : '<p class=\"buoy-empty\">Tasks you start show up here.</p>';\n let foot = '';\n if (cfg.guard && running) {\n const all = counts.running\n ? '<button type=\"button\" class=\"buoy-act\" data-act=\"pause-all\" data-fk=\"all\"><span>Pause all</span></button>'\n : counts.paused\n ? '<button type=\"button\" class=\"buoy-act\" data-act=\"resume-all\" data-fk=\"all\"><span>Resume all</span></button>'\n : '';\n foot = `<div class=\"buoy-tray-foot\">${iconHTML('info')}<span>Closing this tab stops ${running} ${noun(running)}.</span>${all}</div>`;\n }\n const html = `<div class=\"buoy-tray\" role=\"dialog\" aria-label=\"Activity\">${head}${list}${foot}</div>`;\n const sig = ['tray', bottom, cfg.guard, running, counts.running > 0, counts.paused > 0, counts.done > 0, state.tasks.map((t) => t.id + t.status).join(',')].join('|');\n const patch = (el: HTMLElement) => {\n for (const t of state.tasks) {\n const row = el.querySelector(`.buoy-task[data-id=\"${t.id}\"]`);\n if (!row) continue;\n const label = row.querySelector('.buoy-task-state');\n if (label) label.textContent = stateText(t);\n const fill = row.querySelector<HTMLElement>('.buoy-bar > i');\n if (fill) fill.style.width = `${(frac(t) * 100).toFixed(1)}%`;\n const meta = row.querySelector('.buoy-task-meta');\n if (meta) meta.textContent = metaText(t);\n }\n const sub = el.querySelector('.buoy-tray-sub');\n if (sub) sub.textContent = text || 'Nothing here yet';\n };\n return { kind: 'tray', key: 'tray', sig, html, type: '', expanded: false, radius: 30, spring: SPR.tray, patch };\n }\n\n /* ───── Rendering ───── */\n\n let view: View | null = null;\n let layer: HTMLElement | null = null;\n let visible = false;\n let exitAnim: Animation | null = null;\n let renderId = 0;\n let bubbleMode = '';\n let lastMessageId: string | null = null;\n\n function render() {\n if (!renderId) renderId = raf(() => {\n renderId = 0;\n draw();\n });\n }\n\n function draw() {\n const running = store.active();\n const bad = store.failed();\n const attention = bad.length > 0 && !state.attentionDismissed;\n const currentId = state.current ? state.current.id : null;\n if (currentId !== lastMessageId) {\n hoverExpand = false;\n lastMessageId = currentId;\n }\n let next: View;\n let withBubble = false;\n if (state.trayOpen) next = trayView();\n else if (state.current) {\n next = msgView(state.current);\n withBubble = running.length > 0 || attention;\n } else if (running.length) next = liveView(running);\n else if (attention) next = attentionView(bad);\n else next = restView();\n\n root.dataset.kind = next.kind;\n root.dataset.type = next.type;\n if (next.kind === 'rest' && cfg.resting === 'hidden') {\n setBubble(false, running);\n hide();\n return;\n }\n const entering = !visible;\n if (entering) show();\n const base = (key: string) => key.slice(0, key.lastIndexOf(':'));\n const toggling = !!view && view.type === 'live' && next.type === 'live' && view.expanded !== next.expanded && base(view.key) === base(next.key);\n const focusInside = !!layer && layer.contains(doc.activeElement);\n if (!view || !layer || view.key !== next.key) swap(next);\n else if (view.sig !== next.sig) rebuild(next);\n if (next.patch && layer) next.patch(layer);\n if (toggling && focusInside && layer) {\n const target = layer.querySelector<HTMLElement>('[data-fk=\"live-x\"], [data-fk=\"live-c\"]');\n if (target) target.focus({ preventScroll: true });\n }\n view = next;\n const el = layer as HTMLElement;\n const w = el.offsetWidth;\n const h = el.offsetHeight;\n const spr = entering ? SPR.enter : next.spring;\n to('w', w, spr);\n to('h', h, spr);\n to('r', next.radius == null ? h / 2 : next.radius, spr);\n setBubble(withBubble, running);\n shell.style.cursor = next.kind === 'msg' && !next.expanded && state.current && state.current.type !== 'loading' && state.current.type !== 'live' ? 'pointer' : '';\n }\n\n function swap(next: View) {\n const old = layer;\n const el = doc.createElement('div');\n el.className = 'buoy-layer';\n el.innerHTML = next.html;\n shell.appendChild(el);\n layer = el;\n const calm = reduced();\n if (old) {\n old.inert = true;\n old.setAttribute('aria-hidden', 'true');\n const out = play(\n old,\n calm ? [{ opacity: 1 }, { opacity: 0 }] : [{ opacity: 1, filter: 'blur(0px)', transform: 'scale(1)' }, { opacity: 0, filter: 'blur(2px)', transform: 'scale(.96)' }],\n { duration: calm ? 80 : 120, easing: 'ease-in', fill: 'forwards' },\n );\n if (out) out.onfinish = () => old.remove();\n else old.remove();\n }\n play(\n el,\n calm ? [{ opacity: 0 }, { opacity: 1 }] : [{ opacity: 0, filter: 'blur(2px)', transform: 'scale(.96)' }, { opacity: 1, filter: 'blur(0px)', transform: 'scale(1)' }],\n { duration: calm ? 120 : 200, delay: old ? 60 : 40, easing: 'cubic-bezier(.2,.8,.2,1)', fill: 'backwards' },\n );\n }\n\n function rebuild(next: View) {\n if (!layer) return;\n const active = doc.activeElement;\n const focusKey = active && layer.contains(active) ? active.getAttribute('data-fk') : null;\n const list = layer.querySelector('.buoy-list');\n const scroll = list ? list.scrollTop : 0;\n layer.innerHTML = next.html;\n const newList = layer.querySelector('.buoy-list');\n if (newList && scroll) newList.scrollTop = scroll;\n if (focusKey) {\n const target = Array.from(layer.querySelectorAll<HTMLElement>('[data-fk]')).find((n) => n.getAttribute('data-fk') === focusKey);\n if (target) target.focus({ preventScroll: true });\n }\n }\n\n function show() {\n visible = true;\n if (exitAnim) {\n exitAnim.cancel();\n exitAnim = null;\n }\n stage.hidden = false;\n if (reduced()) {\n play(stage, [{ opacity: 0 }, { opacity: 1 }], { duration: 150 });\n return;\n }\n const notch = cfg.theme === 'notch';\n const bottom = cfg.position === 'bottom';\n play(\n stage,\n notch ? [{ transform: `translateY(${bottom ? 60 : -60}px)` }, { transform: 'translateY(0px)' }] : [{ opacity: 0, transform: 'scale(.6)' }, { opacity: 1, transform: 'scale(1)' }],\n { duration: notch ? 380 : 340, easing: 'cubic-bezier(.2,.9,.25,1.12)' },\n );\n }\n\n function resetGeometry() {\n snap('w', 44);\n snap('h', 44);\n snap('r', 22);\n snap('p', 0);\n layout();\n }\n\n function hide() {\n if (!visible) return;\n visible = false;\n unhover();\n const old = layer;\n layer = null;\n view = null;\n if (old) {\n old.inert = true;\n old.setAttribute('aria-hidden', 'true');\n const out = play(old, [{ opacity: 1 }, { opacity: 0 }], { duration: 120, fill: 'forwards' });\n if (out) out.onfinish = () => old.remove();\n else old.remove();\n }\n const notch = cfg.theme === 'notch';\n const bottom = cfg.position === 'bottom';\n const keyframes: Keyframe[] = reduced()\n ? [{ opacity: 1 }, { opacity: 0 }]\n : notch\n ? [{ transform: 'translateY(0px)' }, { transform: `translateY(${((bottom ? 1 : -1) * (S.h.x + 24)).toFixed(1)}px)` }]\n : [{ opacity: 1, transform: 'scale(1)', filter: 'blur(0px)' }, { opacity: 0, transform: 'scale(.92)', filter: 'blur(4px)' }];\n const anim = play(stage, keyframes, { duration: notch ? 220 : 180, easing: 'cubic-bezier(.4,0,1,1)', fill: 'forwards' });\n const finish = () => {\n if (visible) return;\n stage.hidden = true;\n if (anim) anim.cancel();\n exitAnim = null;\n resetGeometry();\n };\n if (anim) {\n exitAnim = anim;\n anim.onfinish = () => {\n if (exitAnim === anim) finish();\n };\n } else {\n finish();\n }\n }\n\n function setBubble(on: boolean, running: Task[]) {\n if (on) {\n if (running.length) {\n const f = store.aggregate();\n const paused = running.every((t) => t.status === 'paused');\n const mode = `ring|${paused}`;\n if (bubbleMode !== mode) {\n bubble.innerHTML = ringHTML(f, paused);\n bubbleMode = mode;\n } else {\n setRing(bubble.querySelector('.buoy-ring'), f);\n }\n bubble.setAttribute('aria-label', `${cfg.labels.active(running.map(store.info))}. Show details`);\n } else if (bubbleMode !== 'attention') {\n bubble.innerHTML = `<span class=\"buoy-bub-ic\">${iconHTML('error')}</span>`;\n bubbleMode = 'attention';\n bubble.setAttribute('aria-label', `A ${cfg.labels.noun} needs attention. Show details`);\n }\n bubble.tabIndex = 0;\n bubble.removeAttribute('aria-hidden');\n } else {\n bubble.tabIndex = -1;\n bubble.setAttribute('aria-hidden', 'true');\n }\n to('p', on ? 1 : 0, SPR.bubble);\n }\n\n function announce(m: Msg) {\n const text = [m.title, m.description].filter(Boolean).join('. ');\n sr.textContent = '';\n win.setTimeout(() => {\n sr.textContent = text;\n }, 40);\n }\n\n let lastPosition = cfg.position;\n function applyConfig() {\n root.dataset.buoyTheme = cfg.theme;\n root.dataset.position = cfg.position;\n root.dataset.rich = cfg.richColors ? 'true' : 'false';\n root.dataset.scheme = cfg.colorScheme;\n if (cfg.offset != null) root.style.setProperty('--buoy-offset', `${cfg.offset}px`);\n else root.style.removeProperty('--buoy-offset');\n layout();\n if (lastPosition !== cfg.position && visible && !reduced()) play(stage, [{ opacity: 0 }, { opacity: 1 }], { duration: 220 });\n lastPosition = cfg.position;\n }\n\n /* ───── Input ───── */\n\n const cleanups: Array<() => void> = [];\n function on<K extends keyof WindowEventMap>(target: Window, type: K, fn: (e: WindowEventMap[K]) => void, o?: AddEventListenerOptions): void;\n function on<K extends keyof DocumentEventMap>(target: Document, type: K, fn: (e: DocumentEventMap[K]) => void, o?: AddEventListenerOptions): void;\n function on<K extends keyof HTMLElementEventMap>(target: HTMLElement, type: K, fn: (e: HTMLElementEventMap[K]) => void, o?: AddEventListenerOptions): void;\n function on(target: EventTarget, type: string, fn: (e: never) => void, o?: AddEventListenerOptions) {\n const listener = fn as unknown as EventListener;\n target.addEventListener(type, listener, o);\n cleanups.push(() => target.removeEventListener(type, listener, o));\n }\n\n let lastFocus: Element | null = null;\n function openTray(keyboard: boolean) {\n if (state.trayOpen) return;\n lastFocus = doc.activeElement;\n hoverExpand = false;\n store.openTray();\n if (keyboard) raf(() => raf(() => {\n const close = layer && layer.querySelector<HTMLElement>('[data-fk=\"close\"]');\n if (close) close.focus({ preventScroll: true });\n }));\n }\n function closeTray() {\n if (!state.trayOpen) return;\n const inside = root.contains(doc.activeElement);\n store.closeTray();\n if (inside) raf(() => raf(() => {\n const target = layer && layer.querySelector<HTMLElement>('[data-fk=\"live\"], [data-fk=\"att\"], [data-fk=\"rest\"]');\n const back = target || (lastFocus instanceof HTMLElement && lastFocus.isConnected ? lastFocus : null);\n if (back) back.focus({ preventScroll: true });\n }));\n }\n function swipeAway() {\n if (state.trayOpen) closeTray();\n else if (state.current && state.current.type === 'live') store.setOpen(state.current.id, false);\n else if (state.current) store.dismiss(state.current.id);\n else if (view && view.kind === 'attention') store.dismissAttention();\n }\n\n function act(el: Element, e: MouseEvent) {\n const keyboard = e.detail === 0;\n const id = el.getAttribute('data-id') || '';\n const m = state.current;\n switch (el.getAttribute('data-act')) {\n case 'dismiss':\n if (m) store.dismiss(m.id);\n break;\n case 'action': {\n if (!m) break;\n const i = Number(el.getAttribute('data-i'));\n const action = i < 0 ? m.action : m.actions && m.actions[i];\n store.dismiss(m.id);\n if (action && action.onClick) action.onClick();\n break;\n }\n case 'live-open':\n if (m) store.setOpen(m.id, true);\n break;\n case 'open-tray':\n case 'bubble':\n openTray(keyboard);\n break;\n case 'close-tray':\n closeTray();\n break;\n case 'retry-failed':\n store.retryFailed();\n break;\n case 'pause':\n store.pauseTask(id);\n break;\n case 'resume':\n store.resumeTask(id);\n break;\n case 'cancel':\n store.cancelTask(id);\n break;\n case 'retry':\n store.retryTask(id);\n break;\n case 'remove':\n store.removeTask(id);\n break;\n case 'open': {\n const t = state.tasks.find((x) => x.id === id);\n closeTray();\n if (t && t.onOpen) t.onOpen(store.info(t));\n break;\n }\n case 'clear-done':\n store.clearDone();\n break;\n case 'pause-all':\n store.pauseAll();\n break;\n case 'resume-all':\n store.resumeAll();\n break;\n default:\n break;\n }\n }\n\n let suppressClick = false;\n on(root, 'click', (e) => {\n if (suppressClick) {\n suppressClick = false;\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n const target = e.target as Element;\n const button = target.closest('[data-act]');\n if (button && root.contains(button)) {\n act(button, e);\n return;\n }\n // A live activity's markup handles its own clicks, even if one of them just replaced the message.\n if (!view || view.kind !== 'msg' || view.expanded || !shell.contains(target) || target.closest('.buoy-custom')) return;\n const m = state.current;\n if (!m || m.type === 'live' || !view.key.startsWith(`m:${m.id}:`)) return;\n if (hasDetails(m)) store.tap(m.id);\n else if (m.type !== 'loading') store.dismiss(m.id);\n });\n\n // Hovering pauses timers and, after a short intent delay, opens a message's details.\n let hovering = false;\n let hoverTimer = 0;\n let leaveTimer = 0;\n function unhover() {\n if (!hovering) return;\n hovering = false;\n store.setPaused('hover', false);\n win.clearTimeout(hoverTimer);\n if (hoverExpand) {\n win.clearTimeout(leaveTimer);\n leaveTimer = win.setTimeout(() => {\n if (hovering) return;\n hoverExpand = false;\n render();\n }, 300);\n }\n }\n on(stage, 'pointerenter', (e) => {\n if (e.pointerType !== 'mouse') return;\n hovering = true;\n store.setPaused('hover', true);\n win.clearTimeout(leaveTimer);\n const m = state.current;\n if (m && cfg.expandOnHover && hasDetails(m) && !m.expanded && !hoverExpand) {\n win.clearTimeout(hoverTimer);\n hoverTimer = win.setTimeout(() => {\n if (hovering && state.current === m) {\n hoverExpand = true;\n render();\n }\n }, 120);\n }\n });\n on(stage, 'pointerleave', (e) => {\n if (e.pointerType === 'mouse') unhover();\n });\n\n let drag: { id: number; y: number; t: number; dy: number; active: boolean } | null = null;\n on(shell, 'pointerdown', (e) => {\n if (e.button !== 0 || (e.target as Element).closest('.buoy-list')) return;\n drag = { id: e.pointerId, y: e.clientY, t: clock(), dy: 0, active: false };\n });\n on(win, 'pointermove', (e) => {\n // Safety net: if the island shrank or vanished under a still pointer, leave events can be skipped.\n if (hovering && e.pointerType === 'mouse' && !stage.contains(e.target as Node)) unhover();\n if (!drag || e.pointerId !== drag.id) return;\n const raw = e.clientY - drag.y;\n const dir = cfg.position === 'bottom' ? 1 : -1;\n if (!drag.active && Math.abs(raw) > 6) {\n drag.active = true;\n try { shell.setPointerCapture(e.pointerId); } catch { /* optional */ }\n }\n if (!drag.active) return;\n const toward = raw * dir;\n drag.dy = (toward > 0 ? toward : toward * 0.2) * dir;\n snap('dy', drag.dy);\n layout();\n });\n const endDrag = (e: PointerEvent) => {\n if (!drag || e.pointerId !== drag.id) return;\n const d = drag;\n drag = null;\n if (!d.active) return;\n suppressClick = true;\n win.setTimeout(() => {\n suppressClick = false;\n }, 0);\n const dir = cfg.position === 'bottom' ? 1 : -1;\n const distance = d.dy * dir;\n const velocity = distance / Math.max(1, clock() - d.t);\n if (distance > 28 || velocity > 0.45) swipeAway();\n to('dy', 0, SPR.drag);\n };\n on(win, 'pointerup', endDrag);\n on(win, 'pointercancel', endDrag);\n on(doc, 'keydown', (e) => {\n if (e.key !== 'Escape') return;\n if (state.trayOpen) {\n e.preventDefault();\n closeTray();\n } else if (root.contains(doc.activeElement) || hovering) {\n swipeAway();\n }\n });\n on(doc, 'pointerdown', (e) => {\n if (root.contains(e.target as Node)) return;\n if (state.trayOpen) closeTray();\n else if (state.current && state.current.open) store.setOpen(state.current.id, false);\n }, { capture: true });\n on(doc, 'visibilitychange', () => store.setPaused('hidden', doc.hidden));\n on(win, 'beforeunload', (e) => {\n if (cfg.guard && store.active().length) {\n e.preventDefault();\n e.returnValue = '';\n }\n });\n if (motionQuery && typeof motionQuery.addEventListener === 'function') {\n const onMotion = () => layout();\n motionQuery.addEventListener('change', onMotion);\n cleanups.push(() => motionQuery.removeEventListener('change', onMotion));\n }\n\n /* ───── Lifecycle ───── */\n\n const unsubscribe = store.subscribe((event, message) => {\n if (event === 'show' && message) announce(message);\n if (event === 'config') applyConfig();\n render();\n });\n\n (options.container || doc.body).appendChild(root);\n doc.body.appendChild(gooSvg);\n applyConfig();\n store.setPaused('hidden', doc.hidden);\n store.setPaused('detached', false);\n if (state.current) announce(state.current);\n render();\n\n let destroyed = false;\n return {\n element: root,\n destroy() {\n if (destroyed) return;\n destroyed = true;\n unsubscribe();\n cleanups.forEach((fn) => fn());\n if (frameId) caf(frameId);\n if (renderId) caf(renderId);\n win.clearTimeout(hoverTimer);\n win.clearTimeout(leaveTimer);\n store.setPaused('hover', false);\n store.setPaused('hidden', false);\n store.setPaused('detached', true);\n root.remove();\n gooSvg.remove();\n },\n };\n}\n","import { clamp, frac } from './format';\nimport type {\n BuoyOptions,\n ColorScheme,\n Labels,\n LiveHandle,\n LiveOptions,\n LiveView,\n MessageAction,\n MessageOptions,\n MessageType,\n Position,\n PromiseOptions,\n Resting,\n TaskContext,\n TaskHandle,\n TaskInfo,\n TaskStatus,\n Theme,\n TrackOptions,\n} from './types';\n\nexport interface Msg {\n id: string;\n type: MessageType;\n title: string;\n description: string;\n icon: string | null | undefined;\n tone: string;\n action: MessageAction | null;\n actions: MessageAction[] | null;\n expanded: boolean;\n persist: boolean;\n duration: number;\n remaining: number;\n timer: ReturnType<typeof setTimeout> | 0;\n deadline: number;\n shownAt: number;\n tapped: boolean;\n onDismiss: (() => void) | null;\n /** Live activities: draws the content. */\n render: ((el: HTMLElement, view: LiveView) => void) | null;\n expandable: boolean;\n /** A live activity's details are open. */\n open: boolean;\n /** Bumped whenever a live activity needs drawing again. */\n rev: number;\n}\n\nexport interface Task {\n id: string;\n label: string;\n icon: string;\n run: (task: TaskContext) => unknown;\n pausable: boolean;\n onOpen: ((task: TaskInfo) => void) | null;\n doneLabel: string;\n format: ((loaded: number, total: number) => string) | null;\n status: TaskStatus | 'canceled';\n loaded: number;\n total: number;\n fraction: number;\n rate: number;\n lastT: number;\n lastL: number;\n attempt: number;\n started: boolean;\n paused: boolean;\n resumers: Array<() => void>;\n ctrl: AbortController | null;\n batch: number;\n error: string;\n}\n\nexport interface ResolvedOptions {\n theme: Theme;\n position: Position;\n resting: Resting;\n richColors: boolean;\n expandOnHover: boolean;\n duration: number;\n concurrency: number;\n guard: boolean;\n haptics: boolean;\n colorScheme: ColorScheme;\n offset: number | null;\n taskIcon: string;\n labels: Labels;\n}\n\nexport type StoreEvent = 'change' | 'progress' | 'config' | 'show';\nexport type StoreListener = (event: StoreEvent, message?: Msg) => void;\ntype NewMessage = MessageOptions & { type?: MessageType; render?: Msg['render']; expandable?: boolean };\n\n/** How long a message stays when others are waiting behind it. */\nconst HURRY_MS = 1500;\n/** A message is readable after this long; anything waiting can take its place after that. */\nconst MIN_VISIBLE_MS = 900;\n/** Shortest gap before a waiting message morphs in. */\nconst SWAP_MS = 200;\n/** Minimum time for a message that carries buttons. */\nconst ACTION_MS = 6000;\nconst SUCCESS_MS = 2000;\nconst SUMMARY_MS = 4000;\n\nexport const DEFAULT_OPTIONS: Omit<ResolvedOptions, 'labels'> = {\n theme: 'ink',\n position: 'top',\n resting: 'hidden',\n richColors: false,\n expandOnHover: true,\n duration: 3000,\n concurrency: 2,\n guard: true,\n haptics: false,\n colorScheme: 'system',\n offset: null,\n taskIcon: 'upload',\n};\n\nexport type Store = ReturnType<typeof createStore>;\n\nexport function createStore() {\n const defaultLabels: Labels = {\n noun: 'task',\n active: (tasks) => (tasks.length === 1 ? tasks[0].label : `${tasks.length} ${cfg.labels.noun}s`),\n doneOne: (task) => `${task.label} finished`,\n doneMany: (count) => `${count} ${cfg.labels.noun}s finished`,\n };\n const cfg: ResolvedOptions = { ...DEFAULT_OPTIONS, labels: { ...defaultLabels } };\n const state = {\n current: null as Msg | null,\n queue: [] as Msg[],\n tasks: [] as Task[],\n trayOpen: false,\n attentionDismissed: false,\n batch: 0,\n batchAnnounced: false,\n /** Increments on every change. Handy for snapshot caching. */\n version: 0,\n };\n const listeners = new Set<StoreListener>();\n // Timers stay paused until an island is attached, so nothing expires unseen.\n const pauses = new Set<string>(['detached']);\n let seq = 0;\n const uid = (prefix: string) => `buoy-${prefix}${++seq}`;\n const now = () => Date.now();\n\n function emit(event: StoreEvent = 'change', message?: Msg) {\n state.version++;\n listeners.forEach((listener) => listener(event, message));\n }\n function subscribe(listener: StoreListener): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }\n function report(error: unknown) {\n if (typeof console !== 'undefined') console.error(error);\n }\n function buzz() {\n if (!cfg.haptics || typeof navigator === 'undefined' || typeof navigator.vibrate !== 'function') return;\n try { navigator.vibrate(8); } catch { /* not supported */ }\n }\n\n /* ───── Options ───── */\n\n function configure(options: BuoyOptions = {}) {\n const { labels, ...rest } = options;\n const target = cfg as unknown as Record<string, unknown>;\n let changed = false;\n for (const [key, value] of Object.entries(rest)) {\n if (value === undefined || target[key] === value) continue;\n target[key] = value;\n changed = true;\n }\n if (labels) {\n const l = cfg.labels as unknown as Record<string, unknown>;\n for (const [key, value] of Object.entries(labels)) {\n if (value === undefined || l[key] === value) continue;\n l[key] = value;\n changed = true;\n }\n }\n if (!changed) return;\n if (rest.concurrency !== undefined) pump();\n emit('config');\n }\n\n /* ───── Message timers ───── */\n\n const isPaused = () => pauses.size > 0 || state.trayOpen;\n function startTimer(m: Msg) {\n if (m.timer || !Number.isFinite(m.remaining) || isPaused() || m !== state.current) return;\n m.deadline = now() + m.remaining;\n m.timer = setTimeout(() => {\n m.timer = 0;\n dismiss(m.id);\n }, m.remaining);\n }\n function pauseTimer(m: Msg) {\n if (!m.timer) return;\n clearTimeout(m.timer);\n m.timer = 0;\n m.remaining = Math.max(0, m.deadline - now());\n }\n function syncTimers() {\n const m = state.current;\n if (!m) return;\n if (isPaused()) pauseTimer(m);\n else startTimer(m);\n }\n /** Pause or resume message timers for a reason, e.g. \"hover\" or \"hidden\". */\n function setPaused(reason: string, on: boolean) {\n if (on === pauses.has(reason)) return;\n if (on) pauses.add(reason);\n else pauses.delete(reason);\n syncTimers();\n }\n\n /* ───── Messages ───── */\n\n function make(title: string, o: NewMessage): Msg {\n const type = o.type ?? 'default';\n const persist = o.persist ?? type === 'error';\n const hasButtons = !!(o.action || (o.actions && o.actions.length));\n const duration = o.duration ?? (persist ? Infinity : hasButtons ? Math.max(cfg.duration, ACTION_MS) : cfg.duration);\n return {\n id: o.id ?? uid('m'),\n type,\n title: String(title),\n description: o.description ?? '',\n icon: o.icon,\n tone: o.tone ?? '',\n action: o.action ?? null,\n actions: o.actions && o.actions.length ? o.actions.slice(0, 2) : null,\n expanded: !!o.expanded,\n persist,\n duration,\n remaining: duration,\n timer: 0,\n deadline: 0,\n shownAt: 0,\n tapped: false,\n onDismiss: o.onDismiss ?? null,\n render: o.render ?? null,\n expandable: !!o.expandable,\n open: false,\n rev: 0,\n };\n }\n function find(id: string): Msg | null {\n if (state.current && state.current.id === id) return state.current;\n return state.queue.find((m) => m.id === id) ?? null;\n }\n function arm(m: Msg) {\n m.remaining = m.duration;\n if (state.queue.length && Number.isFinite(m.remaining)) m.remaining = Math.min(m.remaining, HURRY_MS);\n m.timer = 0;\n m.shownAt = now();\n m.open = false;\n startTimer(m);\n emit('show', m);\n buzz();\n }\n /** Something is waiting: let the visible message finish being read, then hand over. */\n function hurry(m: Msg) {\n if (!Number.isFinite(m.remaining)) return;\n const target = Math.max(SWAP_MS, MIN_VISIBLE_MS - (now() - m.shownAt));\n const left = m.timer ? m.deadline - now() : m.remaining;\n if (left <= target) return;\n pauseTimer(m);\n m.remaining = target;\n startTimer(m);\n }\n function push(title: string, o: NewMessage = {}): string {\n if (o.id) {\n const existing = find(o.id);\n if (existing) {\n update(existing, title, o);\n return existing.id;\n }\n }\n const m = make(title, o);\n const cur = state.current;\n if (!cur) {\n state.current = m;\n arm(m);\n } else if (cur.persist && cur.type !== 'loading') {\n // A sticky message steps aside for the newcomer and comes back after it.\n pauseTimer(cur);\n state.queue.push(cur);\n state.current = m;\n arm(m);\n } else {\n state.queue.push(m);\n hurry(cur);\n }\n emit();\n return m.id;\n }\n function update(m: Msg, title: string, o: NewMessage) {\n const fresh = make(title, { ...o, id: m.id });\n fresh.rev = m.rev + 1;\n pauseTimer(m);\n Object.assign(m, fresh);\n if (m === state.current) arm(m);\n emit();\n }\n function dismiss(id?: string) {\n const cur = state.current;\n if (id === undefined) {\n // No id: clear everything.\n for (const m of [cur, ...state.queue]) if (m) pauseTimer(m);\n state.queue = [];\n state.current = null;\n if (cur && cur.onDismiss) safe(cur.onDismiss);\n emit();\n return;\n }\n if (cur && cur.id === id) {\n pauseTimer(cur);\n state.current = null;\n if (cur.onDismiss) safe(cur.onDismiss);\n const next = state.queue.shift();\n if (next) {\n state.current = next;\n arm(next);\n }\n } else {\n const i = state.queue.findIndex((m) => m.id === id);\n if (i < 0) return;\n state.queue.splice(i, 1);\n }\n emit();\n }\n function safe(fn: () => void) {\n try { fn(); } catch (error) { report(error); }\n }\n /* ───── Live activities ───── */\n\n function live(o: LiveOptions): LiveHandle {\n const timed = o.duration !== undefined && Number.isFinite(o.duration);\n const id = push(o.label, {\n id: o.id,\n type: 'live',\n persist: !timed,\n duration: timed ? o.duration : Infinity,\n onDismiss: o.onClose,\n render: o.render,\n expandable: o.expandable,\n });\n return { id, refresh: () => refresh(id), expand: (open = true) => setOpen(id, open), close: () => dismiss(id) };\n }\n /** Asks the island to draw a live activity again, without announcing it. */\n function refresh(id: string) {\n const m = find(id);\n if (!m || !m.render) return;\n m.rev++;\n emit();\n }\n function setOpen(id: string, open: boolean) {\n const m = find(id);\n if (!m || !m.expandable || m.open === open) return;\n m.open = open;\n m.rev++;\n emit();\n }\n\n function tap(id: string) {\n const m = find(id);\n if (!m || m.tapped) return;\n m.tapped = true;\n emit();\n }\n function promise<T>(input: Promise<T> | (() => Promise<T>), o: PromiseOptions<T> = {}): Promise<T> {\n const id = push(o.loading ?? 'Loading…', { type: 'loading', duration: Infinity, persist: false });\n let p: Promise<T>;\n try {\n p = Promise.resolve(typeof input === 'function' ? input() : input);\n } catch (error) {\n p = Promise.reject(error);\n }\n const settle = (title: string, opts: NewMessage) => {\n const m = find(id);\n if (m) update(m, title, opts);\n else push(title, opts);\n };\n p.then(\n (value) => settle(typeof o.success === 'function' ? o.success(value) : o.success ?? 'Done', { type: 'success', duration: o.successDuration ?? SUCCESS_MS }),\n (error) => settle(typeof o.error === 'function' ? o.error(error) : o.error ?? 'Something went wrong', { type: 'error', action: o.retry ? { label: 'Retry', onClick: o.retry } : undefined }),\n );\n return p;\n }\n\n /* ───── Tasks ───── */\n\n const isActive = (t: Task) => t.status === 'running' || t.status === 'queued' || t.status === 'paused';\n const active = () => state.tasks.filter(isActive);\n const failed = () => state.tasks.filter((t) => t.status === 'failed');\n const byId = (id: string) => state.tasks.find((t) => t.id === id) ?? null;\n\n function info(t: Task): TaskInfo {\n return {\n id: t.id,\n label: t.label,\n status: t.status === 'canceled' ? 'failed' : t.status,\n loaded: t.loaded,\n total: t.total,\n progress: frac(t),\n error: t.error || undefined,\n attempt: t.attempt,\n };\n }\n function newBatch(clearDone: boolean) {\n state.batch++;\n state.batchAnnounced = false;\n state.attentionDismissed = false;\n if (clearDone) state.tasks = state.tasks.filter((t) => t.status !== 'done');\n }\n function track(run: (task: TaskContext) => unknown, o: TrackOptions = {}): TaskHandle {\n if (typeof run !== 'function') throw new TypeError('buoy.track() needs a function that does the work.');\n if (!active().length) newBatch(true);\n const t: Task = {\n id: uid('t'),\n label: String(o.label ?? 'Task'),\n icon: o.icon ?? 'file',\n run,\n pausable: o.pausable !== false,\n onOpen: o.onOpen ?? null,\n doneLabel: o.doneLabel ?? '',\n format: o.format ?? null,\n status: 'queued',\n loaded: 0,\n total: o.total ?? 0,\n fraction: 0,\n rate: 0,\n lastT: 0,\n lastL: 0,\n attempt: 0,\n started: false,\n paused: false,\n resumers: [],\n ctrl: null,\n batch: state.batch,\n error: '',\n };\n state.tasks.push(t);\n pump();\n emit();\n return {\n id: t.id,\n pause: () => pauseTask(t),\n resume: () => resumeTask(t),\n cancel: () => cancelTask(t),\n retry: () => retryTask(t),\n };\n }\n function measureRate(t: Task) {\n const at = now();\n const dt = (at - t.lastT) / 1000;\n if (dt < 0.05) return;\n const inst = (t.loaded - t.lastL) / dt;\n t.rate = t.rate ? t.rate * 0.75 + inst * 0.25 : inst;\n t.lastT = at;\n t.lastL = t.loaded;\n }\n function flush(t: Task) {\n const resumers = t.resumers;\n t.resumers = [];\n resumers.forEach((resume) => resume());\n }\n function startTask(t: Task) {\n t.status = 'running';\n t.started = true;\n t.paused = false;\n t.attempt += 1;\n t.error = '';\n t.ctrl = new AbortController();\n t.lastT = now();\n t.lastL = t.loaded;\n t.rate = 0;\n const attempt = t.attempt;\n const context: TaskContext = {\n signal: t.ctrl.signal,\n attempt,\n progress: (a: number, b?: number) => {\n if (t.attempt !== attempt || t.status === 'canceled') return;\n if (typeof b === 'number') {\n t.total = Math.max(0, b);\n t.loaded = clamp(a, 0, t.total || a);\n } else {\n t.fraction = clamp(a, 0, 1);\n if (t.total) t.loaded = t.fraction * t.total;\n }\n measureRate(t);\n emit('progress');\n },\n checkpoint: () => (t.paused ? new Promise<void>((resolve) => t.resumers.push(resolve)) : Promise.resolve()),\n };\n Promise.resolve()\n .then(() => t.run(context))\n .then(\n () => {\n if (t.attempt !== attempt || t.status === 'canceled') return;\n t.status = 'done';\n if (t.total) t.loaded = t.total;\n t.fraction = 1;\n checkDone();\n },\n (error: unknown) => {\n if (t.attempt !== attempt || t.status === 'canceled') return;\n t.status = 'failed';\n t.error = error instanceof Error && error.message ? error.message : typeof error === 'string' ? error : 'Failed';\n checkDone();\n },\n );\n }\n /** Start queued tasks while there are free slots. */\n function pump() {\n let running = state.tasks.filter((t) => t.status === 'running').length;\n for (const t of state.tasks) {\n if (running >= cfg.concurrency) break;\n if (t.status !== 'queued') continue;\n running++;\n if (t.started) {\n // A resumed task waiting at its checkpoint.\n t.status = 'running';\n t.paused = false;\n t.lastT = now();\n t.lastL = t.loaded;\n t.rate = 0;\n flush(t);\n } else {\n startTask(t);\n }\n }\n }\n function pauseTask(t: Task) {\n if (t.status !== 'running' || !t.pausable) return;\n t.status = 'paused';\n t.paused = true;\n t.rate = 0;\n pump();\n emit();\n }\n function resumeTask(t: Task) {\n if (t.status !== 'paused') return;\n t.status = 'queued';\n pump();\n emit();\n }\n function cancelTask(t: Task) {\n if (!isActive(t)) return;\n t.status = 'canceled';\n t.paused = false;\n if (t.ctrl) t.ctrl.abort();\n flush(t);\n state.tasks = state.tasks.filter((x) => x !== t);\n checkDone();\n }\n function retryTask(t: Task) {\n if (t.status !== 'failed') return;\n if (!active().length) newBatch(false);\n Object.assign(t, { status: 'queued', loaded: 0, fraction: 0, rate: 0, started: false, error: '', batch: state.batch });\n state.attentionDismissed = false;\n pump();\n emit();\n }\n function removeTask(t: Task) {\n if (isActive(t)) return;\n state.tasks = state.tasks.filter((x) => x !== t);\n emit();\n }\n function clearDone() {\n state.tasks = state.tasks.filter((t) => t.status !== 'done');\n emit();\n }\n function checkDone() {\n pump();\n if (!active().length) {\n const bad = failed();\n const done = state.tasks.filter((t) => t.status === 'done' && t.batch === state.batch);\n if (bad.length) {\n state.attentionDismissed = false;\n buzz();\n } else if (done.length && !state.trayOpen && !state.batchAnnounced) {\n state.batchAnnounced = true;\n const title = done.length === 1 ? cfg.labels.doneOne(info(done[0])) : cfg.labels.doneMany(done.length);\n push(title, { type: 'success', duration: SUMMARY_MS, action: { label: 'View', onClick: openTray } });\n }\n }\n emit();\n }\n /** Overall progress of the current batch, 0 to 1. */\n function aggregate(): number {\n let total = 0;\n let loaded = 0;\n let sum = 0;\n let unknown = 0;\n for (const t of state.tasks) {\n if (t.batch !== state.batch) continue;\n if (t.total > 0) {\n total += t.total;\n loaded += frac(t) * t.total;\n } else {\n sum += frac(t);\n unknown++;\n }\n }\n if (!total && !unknown) return 0;\n if (!unknown) return clamp(loaded / total, 0, 1);\n return clamp(total ? (loaded / total + sum) / (1 + unknown) : sum / unknown, 0, 1);\n }\n function summary() {\n const counts: Record<TaskStatus, number> = { running: 0, queued: 0, paused: 0, failed: 0, done: 0 };\n for (const t of state.tasks) if (t.status !== 'canceled') counts[t.status]++;\n const order: TaskStatus[] = ['running', 'queued', 'paused', 'failed', 'done'];\n return { counts, text: order.filter((k) => counts[k]).map((k) => `${counts[k]} ${k}`).join(' · ') };\n }\n\n /* ───── Tray ───── */\n\n function openTray() {\n if (state.trayOpen) return;\n state.trayOpen = true;\n syncTimers();\n emit();\n }\n function closeTray() {\n if (!state.trayOpen) return;\n state.trayOpen = false;\n syncTimers();\n emit();\n }\n function dismissAttention() {\n if (state.attentionDismissed) return;\n state.attentionDismissed = true;\n emit();\n }\n\n const withTask = (fn: (t: Task) => void) => (id: string) => {\n const t = byId(id);\n if (t) fn(t);\n };\n\n return {\n cfg,\n state,\n defaults: { options: DEFAULT_OPTIONS, labels: defaultLabels },\n subscribe,\n configure,\n setPaused,\n push,\n dismiss,\n tap,\n live,\n refresh,\n setOpen,\n promise,\n find,\n track,\n tasks: () => state.tasks.map(info),\n info,\n active,\n failed,\n aggregate,\n summary,\n pauseTask: withTask(pauseTask),\n resumeTask: withTask(resumeTask),\n cancelTask: withTask(cancelTask),\n retryTask: withTask(retryTask),\n removeTask: withTask(removeTask),\n retryFailed: () => failed().forEach(retryTask),\n pauseAll: () => state.tasks.filter((t) => t.status === 'running').forEach(pauseTask),\n resumeAll: () => state.tasks.filter((t) => t.status === 'paused').forEach(resumeTask),\n clearDone,\n openTray,\n closeTray,\n toggleTray: () => (state.trayOpen ? closeTray() : openTray()),\n dismissAttention,\n };\n}\n","import { createStore, type Store } from './store';\nimport type { Island } from './island';\n\ninterface Shared {\n store: Store;\n island: Island | null;\n warned: boolean;\n}\n\n// One store per page, even if two copies of the package end up bundled (ESM + CJS, or two versions).\nconst KEY = Symbol.for('buoy-ui');\n\nexport function shared(): Shared {\n const g = globalThis as unknown as Record<symbol, Shared | undefined>;\n let s = g[KEY];\n if (!s) {\n s = { store: createStore(), island: null, warned: false };\n g[KEY] = s;\n }\n return s;\n}\n","import { injectStyles } from './inject';\nimport { createIsland } from './island';\nimport { shared } from './shared';\nimport type { BuoyOptions, MountHandle, MountOptions } from './types';\n\n/**\n * Put the island on the page. Without React, call this once at startup.\n * Safe to call on a server: it does nothing there.\n */\nexport function mount(options: MountOptions = {}): MountHandle {\n const { container, injectStyles: inject = true, nonce, ...config } = options;\n const s = shared();\n const configure = (o: BuoyOptions) => s.store.configure(o);\n s.store.configure(config);\n if (typeof document === 'undefined') return { configure, destroy() {} };\n if (s.island) {\n if (!s.warned && typeof console !== 'undefined') {\n s.warned = true;\n console.warn('[buoy] An island is already mounted. Only one is shown at a time, so this one was skipped.');\n }\n return { configure, destroy() {} };\n }\n if (inject) injectStyles(document, nonce);\n const island = createIsland(s.store, { container });\n s.island = island;\n return {\n configure,\n destroy() {\n if (s.island === island) s.island = null;\n island.destroy();\n },\n };\n}\n","import { shared } from './shared';\nimport type { Buoy, BuoyOptions, LiveOptions, MessageOptions, PromiseOptions, TaskContext, TrackOptions } from './types';\n\nconst store = () => shared().store;\n\nfunction message(title: string, options?: MessageOptions): string {\n return store().push(title, options);\n}\n\n/**\n * Show messages, promises and background work in the island.\n * Calls made before an island is mounted wait and appear once it is.\n */\nexport const buoy: Buoy = Object.assign(message, {\n success: (title: string, options?: MessageOptions) => store().push(title, { ...options, type: 'success' }),\n error: (title: string, options?: MessageOptions) => store().push(title, { ...options, type: 'error' }),\n warn: (title: string, options?: MessageOptions) => store().push(title, { ...options, type: 'warning' }),\n info: (title: string, options?: MessageOptions) => store().push(title, { ...options, type: 'info' }),\n promise: <T>(promise: Promise<T> | (() => Promise<T>), options?: PromiseOptions<T>) => store().promise(promise, options),\n dismiss: (id?: string) => store().dismiss(id),\n track: (run: (task: TaskContext) => unknown, options?: TrackOptions) => store().track(run, options),\n live: (options: LiveOptions) => store().live(options),\n tasks: () => store().tasks(),\n tray: {\n open: () => store().openTray(),\n close: () => store().closeTray(),\n toggle: () => store().toggleTray(),\n },\n configure: (options: BuoyOptions) => store().configure(options),\n});\n"],"mappings":"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","names":["store","act","on","message","message","_a","clearDone","injectStyles","store","offset"]}
|