anniedrawing 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/README.md +5 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/toolDefs.d.ts +1 -0
- package/dist/board.d.ts +7 -1
- package/dist/core/catalog.d.ts +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/textFit.d.ts +13 -0
- package/dist/core/types.d.ts +12 -0
- package/dist/docs/agents-repository.md +2 -2
- package/dist/docs/agents.md +6 -2
- package/dist/docs/api.md +7 -3
- package/dist/docs/board-js.md +20 -16
- package/dist/docs/decisions.md +21 -1
- package/dist/docs/format.md +2 -2
- package/dist/docs/index.html +15 -7
- package/dist/docs/llms-full.txt +20 -16
- package/dist/docs/llms.txt +14 -10
- package/dist/docs/mcp.md +1 -1
- package/dist/fellow.d.ts +2 -2
- package/dist/fellow.js +1 -1
- package/dist/fellow.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/shared/board-OPwsZ2_V.js +2 -0
- package/dist/shared/board-OPwsZ2_V.js.map +1 -0
- package/dist/shared/{cards-DWgSVE54.js → cards-D_9Lly1d.js} +2 -2
- package/dist/shared/{cards-DWgSVE54.js.map → cards-D_9Lly1d.js.map} +1 -1
- package/dist/shared/defaults-DZEoAeRz.js +2 -0
- package/dist/shared/defaults-DZEoAeRz.js.map +1 -0
- package/dist/shared/describe-o3vER0cL.js +3 -0
- package/dist/shared/{describe-DaWyf3qV.js.map → describe-o3vER0cL.js.map} +1 -1
- package/dist/shared/{paste-C22i8o-g.js → paste-B4b0C9Jh.js} +2 -2
- package/dist/shared/{paste-C22i8o-g.js.map → paste-B4b0C9Jh.js.map} +1 -1
- package/dist/shared/picker-ciuPQvRn.js +2 -0
- package/dist/shared/picker-ciuPQvRn.js.map +1 -0
- package/dist/shared/textFit-BrGz6lhQ.js +2 -0
- package/dist/shared/textFit-BrGz6lhQ.js.map +1 -0
- package/dist/shared/ui-c98N8xEV.js +2 -0
- package/dist/shared/ui-c98N8xEV.js.map +1 -0
- package/dist/shared/{urlPaste-DN4JtgeB.js → urlPaste-BqcpeQ-c.js} +2 -2
- package/dist/shared/{urlPaste-DN4JtgeB.js.map → urlPaste-BqcpeQ-c.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/ui/index.js +1 -1
- package/dist/ui/version.d.ts +1 -1
- package/llms-full.txt +20 -16
- package/llms.txt +14 -10
- package/package.json +1 -1
- package/dist/shared/board-DV5lzxNR.js +0 -2
- package/dist/shared/board-DV5lzxNR.js.map +0 -1
- package/dist/shared/defaults-C-aC_B4z.js +0 -2
- package/dist/shared/defaults-C-aC_B4z.js.map +0 -1
- package/dist/shared/describe-DaWyf3qV.js +0 -3
- package/dist/shared/picker-Dv_i4iNP.js +0 -2
- package/dist/shared/picker-Dv_i4iNP.js.map +0 -1
- package/dist/shared/ui-DEBI1jv_.js +0 -2
- package/dist/shared/ui-DEBI1jv_.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"defaults-C-aC_B4z.js","names":["random"],"sources":["../../src/core/catalog.ts","../../node_modules/nanoid/index.browser.js","../../src/core/ids.ts","../../src/core/defaults.ts"],"sourcesContent":["/** Bump when a built-in kind is added or its create/read contract changes. */\nexport const CATALOG_VERSION = 1;\n\nexport interface KindCatalogEntry {\n kind: string;\n /** Catalog version that added this kind or last changed its create/read fields. */\n since: number;\n w: number;\n h: number;\n note: string;\n}\n\nexport interface KindCatalogSnapshot {\n version: number;\n since: number;\n kinds: KindCatalogEntry[];\n}\n\n/** Built-in kinds. `since` is the catalog version that introduced or last changed the kind. */\nexport const KIND_CATALOG: readonly KindCatalogEntry[] = [\n { kind: 'rect', since: 1, w: 180, h: 110, note: 'Rounded rectangle. Nodes, cards, boxes.' },\n { kind: 'ellipse', since: 1, w: 180, h: 110, note: 'Ellipse or circle.' },\n { kind: 'diamond', since: 1, w: 160, h: 140, note: 'Diamond. Decisions or highlights.' },\n {\n kind: 'line',\n since: 1,\n w: 180,\n h: 0,\n note: 'Straight segment. Optional points are relative to x/y.',\n },\n {\n kind: 'connector',\n since: 1,\n w: 0,\n h: 0,\n note: 'Bound or free link. Requires from and to. Compact JSON omits x/y/w/h.',\n },\n {\n kind: 'path',\n since: 1,\n w: 0,\n h: 0,\n note: 'Freehand or polyline. points relative to x/y; closed optional.',\n },\n {\n kind: 'text',\n since: 1,\n w: 200,\n h: 48,\n note: 'Plain text. Browser autoWidth measures and stores width and height.',\n },\n {\n kind: 'note',\n since: 1,\n w: 200,\n h: 180,\n note: 'Sticky note. Default moss fill and 12px corner.',\n },\n {\n kind: 'image',\n since: 1,\n w: 240,\n h: 180,\n note: 'References a media table key. Raster or SVG; remote URLs need allowed origins.',\n },\n {\n kind: 'video',\n since: 1,\n w: 480,\n h: 270,\n note: 'YouTube or Vimeo href. Stores the watch URL, not iframe markup.',\n },\n {\n kind: 'link',\n since: 1,\n w: 220,\n h: 200,\n note: 'Website card. href plus optional title, description, and preview media.',\n },\n {\n kind: 'group',\n since: 1,\n w: 0,\n h: 0,\n note: 'Only kind that contains children. Child positions stay in page coordinates.',\n },\n {\n kind: 'html',\n since: 1,\n w: 240,\n h: 160,\n note: 'Markup. Renders only when the host passed a sanitizer.',\n },\n];\n\n/**\n * Built-in kinds added or last changed after `since`.\n * Omit `since` or pass 0 to list every built-in kind.\n */\nexport function kindsSince(since = 0): KindCatalogSnapshot {\n const from = since || 0;\n return {\n version: CATALOG_VERSION,\n since: from,\n kinds: KIND_CATALOG.filter((entry) => entry.since > from).map((entry) => ({ ...entry })),\n };\n}\n","\n\nimport { urlAlphabet } from './url-alphabet/index.js'\n\nexport { urlAlphabet }\n\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\n\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let safeByteCutoff = 256 - (256 % alphabet.length)\n\n if (safeByteCutoff === 256) {\n let mask = alphabet.length - 1\n\n return (size = defaultSize) => {\n if (!size) return ''\n let id = ''\n while (true) {\n let bytes = getRandom(size)\n let j = size\n while (j--) {\n id += alphabet[bytes[j] & mask]\n if (id.length >= size) return id\n }\n }\n }\n }\n\n let step = Math.ceil((1.6 * 256 * defaultSize) / safeByteCutoff)\n\n return (size = defaultSize) => {\n if (!size) return ''\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n if (bytes[j] < safeByteCutoff) {\n id += alphabet[bytes[j] % alphabet.length]\n if (id.length >= size) return id\n }\n }\n }\n }\n}\n\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size | 0, random)\n\nexport let nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array((size |= 0)))\n while (size--) {\n id += urlAlphabet[bytes[size] & 63]\n }\n return id\n}\n","import { customAlphabet } from 'nanoid';\nconst random = customAlphabet('346789abcdefghjkmnpqrtwxyz', 6);\n/** Matches the item-id schema maximum. */\nconst ID_MAX = 160;\nexport const itemId = () => `i_${random()}`;\nexport const pageId = () => `p_${random()}`;\nexport const mediaId = () => `m_${random()}`;\n\n/** Next free id: keep `requested` when unused, otherwise `stem_1`, `stem_2`, … */\nexport function uniqueItemId(requested: string, taken: Set<string>): string {\n if (requested && !taken.has(requested) && requested.length <= ID_MAX) return requested;\n const stem = (requested.replace(/_\\d+$/, '') || requested || 'i').slice(0, ID_MAX - 2);\n for (let n = 1; n < 1e7; n++) {\n const suffix = `_${n}`;\n const id = `${stem.slice(0, ID_MAX - suffix.length)}${suffix}`;\n if (!taken.has(id)) return id;\n }\n return itemId();\n}\n","import type { AnnieDoc, Endpoint, EndpointInput, Item, NewItem, Style } from './types';\nimport { KIND_CATALOG } from './catalog';\nimport { itemId } from './ids';\nexport const KIND_ALIASES: Record<string, string> = {\n rectangle: 'rect',\n arrow: 'connector',\n};\nexport const COLOR_ALIASES: Record<string, string> = {\n black: 'ink',\n grey: 'slate',\n gray: 'slate',\n blue: 'sky',\n 'light-blue': 'sky',\n green: 'teal',\n 'light-green': 'moss',\n red: 'rose',\n 'light-red': 'rose',\n orange: 'coral',\n yellow: 'amber',\n violet: 'violet',\n 'light-violet': 'violet',\n};\nexport function storedKind(kind: string): string {\n return KIND_ALIASES[kind] ?? kind;\n}\nexport function storedColor(value?: string): string | undefined {\n if (value === undefined) return undefined;\n return COLOR_ALIASES[value] ?? value;\n}\nexport function storedEndpoint(value?: EndpointInput): Endpoint | undefined {\n if (value === undefined) return undefined;\n if (typeof value === 'string') return { item: value, side: 'auto' };\n return value;\n}\nexport function aliasStyle(style?: Style): Style | undefined {\n if (!style) return style;\n const stroke = storedColor(style.stroke),\n fill = storedColor(style.fill);\n if (stroke === style.stroke && fill === style.fill) return style;\n return {\n ...style,\n ...(stroke !== undefined ? { stroke } : {}),\n ...(fill !== undefined ? { fill } : {}),\n };\n}\nexport const CARD_CORNER = 12;\nexport const DEFAULT_STYLE: Required<Style> = {\n stroke: 'ink',\n strokeWidth: 2,\n dash: 'solid',\n fill: 'none',\n fillMode: 'solid',\n corner: CARD_CORNER,\n opacity: 1,\n};\nexport const DEFAULT_SIZES: Record<string, [number, number]> = Object.fromEntries(\n KIND_CATALOG.map((entry) => [entry.kind, [entry.w, entry.h]]),\n);\nexport function clone<T>(value: T): T {\n return structuredClone(value);\n}\nexport function sizeOf(kind: string): [number, number] {\n return DEFAULT_SIZES[kind] ?? [180, 110];\n}\nexport function kindDefaultsFrom(\n kinds?: { kind: string; defaults?: Partial<Item> }[],\n): Record<string, Partial<Item>> {\n return Object.fromEntries(\n (kinds ?? []).filter((kind) => kind.defaults).map((kind) => [kind.kind, kind.defaults!]),\n );\n}\nexport function defaultDoc(): AnnieDoc {\n return {\n format: 'anniedrawing',\n version: 2,\n meta: { title: 'Untitled board' },\n pages: [{ id: 'p_main', name: 'Page 1', background: 'paper', items: [] }],\n media: {},\n };\n}\nexport function normalizeItem(\n input: NewItem,\n kindDefaults: Record<string, Partial<Item>> = {},\n): Item {\n const originalKind = input.kind,\n kind = storedKind(originalKind);\n const custom = kindDefaults[kind] ?? kindDefaults[originalKind];\n input = { ...input, kind };\n if (custom)\n input = {\n ...clone(custom),\n ...input,\n ...(custom.style ? { style: { ...clone(custom.style), ...input.style } } : {}),\n };\n const size = sizeOf(kind);\n const result = {\n ...clone(input),\n id: input.id ?? itemId(),\n kind,\n x: input.x ?? 0,\n y: input.y ?? 0,\n w: input.w ?? size[0],\n h: input.h ?? size[1],\n } as Item;\n const from = storedEndpoint(input.from),\n to = storedEndpoint(input.to),\n style = aliasStyle(input.style);\n if (from) result.from = from;\n else delete result.from;\n if (to) result.to = to;\n else delete result.to;\n if (style) result.style = style;\n else delete result.style;\n if (originalKind === 'arrow') {\n if (result.heads?.end === undefined) result.heads = { ...result.heads, end: 'arrow' };\n if (result.route === undefined) result.route = 'elbow';\n }\n if (input.children)\n result.children = input.children.map((child) => normalizeItem(child, kindDefaults));\n return result;\n}\nexport function minimalItem(item: Item, kindDefaults: Record<string, Partial<Item>> = {}): Item {\n const defaults = {\n ...DEFAULT_STYLE,\n ...(item.kind === 'note' ? { fill: 'moss', strokeWidth: 0, corner: CARD_CORNER } : {}),\n ...kindDefaults[item.kind]?.style,\n };\n const next = clone(item);\n if (next.rotation === 0) delete next.rotation;\n if (next.locked === false) delete next.locked;\n if (next.hidden === false) delete next.hidden;\n if (next.style) {\n for (const key of Object.keys(next.style) as (keyof Style)[])\n if (next.style[key] === defaults[key]) delete next.style[key];\n if (!Object.keys(next.style).length) delete next.style;\n }\n if (next.children) {\n next.children = next.children.map((child) => minimalItem(child, kindDefaults));\n if (!next.children.length) delete next.children;\n }\n if (next.kind === 'connector') {\n delete (next as Partial<Item>).x;\n delete (next as Partial<Item>).y;\n delete (next as Partial<Item>).w;\n delete (next as Partial<Item>).h;\n }\n return next;\n}\n"],"x_google_ignoreList":[1],"mappings":"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"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{_ as e,a as t,m as n,p as i}from"./defaults-C-aC_B4z.js";var s={lang:void 0,message:void 0,abortEarly:void 0,abortPipeEarly:void 0};function r(e){return e?{lang:e?.lang??void 0,message:e?.message,abortEarly:e?.abortEarly??void 0,abortPipeEarly:e?.abortPipeEarly??void 0}:s}function a(e){const t=typeof e;return"string"===t?`"${e}"`:"number"===t||"bigint"===t||"boolean"===t?`${e}`:"object"===t||"function"===t?(e&&Object.getPrototypeOf(e)?.constructor?.name)??"null":t}function o(e,t,n,i,s){const r=s&&"input"in s?s.input:n.value,o=s?.expected??e.expects??null,u=s?.received??/* @__PURE__ */a(r),c={kind:e.kind,type:e.type,input:r,expected:o,received:u,message:`Invalid ${t}: ${o?`Expected ${o} but r`:"R"}eceived ${u}`,requirement:e.requirement,path:s?.path,issues:s?.issues,lang:i.lang,abortEarly:i.abortEarly,abortPipeEarly:i.abortPipeEarly},l="schema"===e.kind,p=s?.message??e.message??(/* @__PURE__ */e.reference,void c.lang)??(l?/* @__PURE__ */void c.lang:null)??i.message??/* @__PURE__ */void c.lang;void 0!==p&&(c.message="function"==typeof p?p(c):p),l&&(n.typed=!1),n.issues?n.issues.push(c):n.issues=[c]}function u(e,t){return e===t||Number.isNaN(e)&&Number.isNaN(t)}function c(e,t){return Object.prototype.hasOwnProperty.call(e,t)&&"__proto__"!==t&&"prototype"!==t&&"constructor"!==t}function l(e,t){const n=[...new Set(e)];return n.length>1?`(${n.join(` ${t} `)})`:n[0]??"never"}function p(e){return e["~standard"]={version:1,vendor:"valibot",validate:t=>e["~run"]({value:t},/* @__PURE__ */r())},e}function y(e){return{kind:"validation",type:"finite",reference:y,async:!1,expects:null,requirement:Number.isFinite,message:e,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&o(this,"finite",e,t),e}}}function d(e){return{kind:"validation",type:"integer",reference:d,async:!1,expects:null,requirement:Number.isInteger,message:e,"~run"(e,t){return e.typed&&!this.requirement(e.value)&&o(this,"integer",e,t),e}}}function f(e,t){return{kind:"validation",type:"max_length",reference:f,async:!1,expects:`<=${e}`,requirement:e,message:t,"~run"(e,t){return e.typed&&e.value.length>this.requirement&&o(this,"length",e,t,{received:`${e.value.length}`}),e}}}function h(e,t){return{kind:"validation",type:"max_value",reference:h,async:!1,expects:`<=${e instanceof Date?e.toJSON():/* @__PURE__ */a(e)}`,requirement:e,message:t,"~run"(e,t){return!e.typed||e.value<=this.requirement||o(this,"value",e,t,{received:e.value instanceof Date?e.value.toJSON():/* @__PURE__ */a(e.value)}),e}}}function m(e,t){return{kind:"validation",type:"min_length",reference:m,async:!1,expects:`>=${e}`,requirement:e,message:t,"~run"(e,t){return e.typed&&e.value.length<this.requirement&&o(this,"length",e,t,{received:`${e.value.length}`}),e}}}function x(e,t){return{kind:"validation",type:"min_value",reference:x,async:!1,expects:`>=${e instanceof Date?e.toJSON():/* @__PURE__ */a(e)}`,requirement:e,message:t,"~run"(e,t){return!e.typed||e.value>=this.requirement||o(this,"value",e,t,{received:e.value instanceof Date?e.value.toJSON():/* @__PURE__ */a(e.value)}),e}}}var g={abortEarly:!0};function v(e,t,n){return"function"==typeof e.fallback?e.fallback(t,n):e.fallback}function b(e,t,n){return"function"==typeof e.default?e.default(t,n):e.default}function k(e,t){return p({kind:"schema",type:"array",reference:k,expects:"Array",async:!1,item:e,message:t,"~run"(e,t){const n=e.value;if(Array.isArray(n)){e.typed=!0,e.value=[];for(let i=0;i<n.length;i++){const s=n[i],r=this.item["~run"]({value:s},t);if(r.issues){const a={type:"array",origin:"value",input:n,key:i,value:s};for(const t of r.issues)t.path?t.path.unshift(a):t.path=[a],e.issues?.push(t);if(e.issues||(e.issues=r.issues),t.abortEarly){e.typed=!1;break}}r.typed||(e.typed=!1),e.value.push(r.value)}}else o(this,"type",e,t);return e}})}function w(e){return p({kind:"schema",type:"boolean",reference:w,expects:"boolean",async:!1,message:e,"~run"(e,t){return"boolean"==typeof e.value?e.typed=!0:o(this,"type",e,t),e}})}function $(e,t){return p({kind:"schema",type:"literal",reference:$,expects:/* @__PURE__ */a(e),async:!1,literal:e,message:t,"~run"(e,t){/* @__PURE__ */
|
|
2
|
-
return u(e.value,this.literal)?e.typed=!0:o(this,"type",e,t),e}})}function M(e,t){return p({kind:"schema",type:"loose_object",reference:M,expects:"Object",async:!1,entries:e,message:t,"~run"(e,t){const n=e.value;if(n&&"object"==typeof n){e.typed=!0,e.value={};for(const i in this.entries){const s=this.entries[i];if(i in n||("exact_optional"===s.type||"optional"===s.type||"nullish"===s.type)&&void 0!==s.default){const r=i in n?n[i]:/* @__PURE__ */b(s),a=s["~run"]({value:r},t);if(a.issues){const s={type:"object",origin:"value",input:n,key:i,value:r};for(const t of a.issues)t.path?t.path.unshift(s):t.path=[s],e.issues?.push(t);if(e.issues||(e.issues=a.issues),t.abortEarly){e.typed=!1;break}}a.typed||(e.typed=!1),e.value[i]=a.value}else if(void 0!==s.fallback)e.value[i]=/* @__PURE__ */v(s);else if("exact_optional"!==s.type&&"optional"!==s.type&&"nullish"!==s.type&&(o(this,"key",e,t,{input:void 0,expected:`"${i}"`,path:[{type:"object",origin:"key",input:n,key:i,value:n[i]}]}),t.abortEarly))break}if(!e.issues||!t.abortEarly)for(const t in n)/* @__PURE__ */c(n,t)&&!Object.prototype.hasOwnProperty.call(this.entries,t)&&(e.value[t]=n[t])}else o(this,"type",e,t);return e}})}function j(e){return p({kind:"schema",type:"number",reference:j,expects:"number",async:!1,message:e,"~run"(e,t){return"number"!=typeof e.value||isNaN(e.value)?o(this,"type",e,t):e.typed=!0,e}})}function E(e,t){return p({kind:"schema",type:"object",reference:E,expects:"Object",async:!1,entries:e,message:t,"~run"(e,t){const n=e.value;if(n&&"object"==typeof n){e.typed=!0,e.value={};for(const i in this.entries){const s=this.entries[i];if(i in n||("exact_optional"===s.type||"optional"===s.type||"nullish"===s.type)&&void 0!==s.default){const r=i in n?n[i]:/* @__PURE__ */b(s),a=s["~run"]({value:r},t);if(a.issues){const s={type:"object",origin:"value",input:n,key:i,value:r};for(const t of a.issues)t.path?t.path.unshift(s):t.path=[s],e.issues?.push(t);if(e.issues||(e.issues=a.issues),t.abortEarly){e.typed=!1;break}}a.typed||(e.typed=!1),e.value[i]=a.value}else if(void 0!==s.fallback)e.value[i]=/* @__PURE__ */v(s);else if("exact_optional"!==s.type&&"optional"!==s.type&&"nullish"!==s.type&&(o(this,"key",e,t,{input:void 0,expected:`"${i}"`,path:[{type:"object",origin:"key",input:n,key:i,value:n[i]}]}),t.abortEarly))break}}else o(this,"type",e,t);return e}})}function O(e,t){return p({kind:"schema",type:"optional",reference:O,expects:`(${e.expects} | undefined)`,async:!1,wrapped:e,default:t,"~run"(e,t){return void 0===e.value&&(void 0!==this.default&&(e.value=/* @__PURE__ */b(this,e,t)),void 0===e.value)?(e.typed=!0,e):this.wrapped["~run"](e,t)}})}function A(e,t){return p({kind:"schema",type:"picklist",reference:A,expects:/* @__PURE__ */l(e.map(a),"|"),async:!1,options:e,message:t,"~run"(e,t){return this.options.includes(e.value)?e.typed=!0:o(this,"type",e,t),e}})}function N(e,t,n){return p({kind:"schema",type:"record",reference:N,expects:"Object",async:!1,key:e,value:t,message:n,"~run"(e,t){const n=e.value;if(n&&"object"==typeof n){e.typed=!0,e.value={};for(const i in n)if(/* @__PURE__ */c(n,i)){const s=n[i],r=this.key["~run"]({value:i},t);if(r.issues){const a={type:"object",origin:"key",input:n,key:i,value:s};for(const t of r.issues)t.path=[a],e.issues?.push(t);if(e.issues||(e.issues=r.issues),t.abortEarly){e.typed=!1;break}}const a=this.value["~run"]({value:s},t);if(a.issues){const r={type:"object",origin:"value",input:n,key:i,value:s};for(const t of a.issues)t.path?t.path.unshift(r):t.path=[r],e.issues?.push(t);if(e.issues||(e.issues=a.issues),t.abortEarly){e.typed=!1;break}}r.typed&&a.typed||(e.typed=!1),r.typed&&(e.value[r.value]=a.value)}}else o(this,"type",e,t);return e}})}function S(e){return p({kind:"schema",type:"string",reference:S,expects:"string",async:!1,message:e,"~run"(e,t){return"string"==typeof e.value?e.typed=!0:o(this,"type",e,t),e}})}function q(e,t){return p({kind:"schema",type:"tuple",reference:q,expects:"Array",async:!1,items:e,message:t,"~run"(e,t){const n=e.value;if(Array.isArray(n)){e.typed=!0,e.value=[];for(let i=0;i<this.items.length;i++){const s=n[i],r=this.items[i]["~run"]({value:s},t);if(r.issues){const a={type:"array",origin:"value",input:n,key:i,value:s};for(const t of r.issues)t.path?t.path.unshift(a):t.path=[a],e.issues?.push(t);if(e.issues||(e.issues=r.issues),t.abortEarly){e.typed=!1;break}}r.typed||(e.typed=!1),e.value.push(r.value)}}else o(this,"type",e,t);return e}})}function _(e,t,n){return p({kind:"schema",type:"tuple_with_rest",reference:_,expects:"Array",async:!1,items:e,rest:t,message:n,"~run"(e,t){const n=e.value;if(Array.isArray(n)){e.typed=!0,e.value=[];for(let i=0;i<this.items.length;i++){const s=n[i],r=this.items[i]["~run"]({value:s},t);if(r.issues){const a={type:"array",origin:"value",input:n,key:i,value:s};for(const t of r.issues)t.path?t.path.unshift(a):t.path=[a],e.issues?.push(t);if(e.issues||(e.issues=r.issues),t.abortEarly){e.typed=!1;break}}r.typed||(e.typed=!1),e.value.push(r.value)}if(!e.issues||!t.abortEarly)for(let i=this.items.length;i<n.length;i++){const s=n[i],r=this.rest["~run"]({value:s},t);if(r.issues){const a={type:"array",origin:"value",input:n,key:i,value:s};for(const t of r.issues)t.path?t.path.unshift(a):t.path=[a],e.issues?.push(t);if(e.issues||(e.issues=r.issues),t.abortEarly){e.typed=!1;break}}r.typed||(e.typed=!1),e.value.push(r.value)}}else o(this,"type",e,t);return e}})}function P(e){let t;if(e)for(const n of e)if(t)for(const e of n.issues)t.push(e);else t=n.issues;return t}function I(e,t){return p({kind:"schema",type:"union",reference:I,expects:/* @__PURE__ */l(e.map(e=>e.expects),"|"),async:!1,options:e,message:t,"~run"(e,t){let n,i,s;for(const r of this.options){const a=r["~run"]({value:e.value},t);if(a.typed){if(!a.issues){n=a;break}i?i.push(a):i=[a]}else s?s.push(a):s=[a]}if(n)return n;if(i){if(1===i.length)return i[0];o(this,"type",e,t,{issues:/* @__PURE__ */P(i)}),e.typed=!0}else{if(1===s?.length)return s[0];o(this,"type",e,t,{issues:/* @__PURE__ */P(s)})}return e}})}function J(...e){return p({...e[0],pipe:e,"~run"(t,n){for(const i of e)if("metadata"!==i.kind){if(t.issues&&("schema"===i.kind||"transformation"===i.kind)){t.typed=!1;break}t.issues&&(n.abortEarly||n.abortPipeEarly)||(t=i["~run"](t,n))}return t}})}function L(e,t,n){const i=e["~run"]({value:t},/* @__PURE__ */r(n));return{typed:i.typed,success:!i.issues,output:i.value,issues:i.issues}}var D={maxBatch:1e3,maxItems:5e4,maxCoordinate:1e6,maxTextLength:1e5,maxDepth:32,maxPoints:1e5,maxMediaLength:2e7,maxHistory:100,maxSessionLog:500,maxJsonDepth:104},C={colors:32,maxBytes:245760},T=J(j(),y()),z=J(T,x(-D.maxCoordinate),h(D.maxCoordinate)),B=J(T,x(0),h(D.maxCoordinate)),W=J(S(),m(1),f(160)),F=J(S(),f(D.maxTextLength)),R=E({x:z,y:z}),H=E({x:z,y:z,w:B,h:B}),U=E({stroke:O(S()),strokeWidth:O(J(B,h(1e3))),dash:O(A(["solid","dashed","dotted"])),fill:O(S()),fillMode:O(A(["solid","tint","hatch"])),corner:O(B),opacity:O(J(T,x(0),h(1)))}),G=E({value:F,align:O(A(["start","center","end"])),valign:O(A(["top","middle","bottom"])),size:O(I([A(["s","m","l","xl"]),J(T,x(1),h(1e3))])),font:O(A(["sans","serif","mono","hand"]))}),K=N(S(),function e(){return p({kind:"schema",type:"unknown",reference:e,expects:"unknown",async:!1,"~run":e=>(e.typed=!0,e)})}()),Q=I([W,E({item:W,side:O(A(["auto","top","right","bottom","left"])),anchor:O(q([J(T,x(0),h(1)),J(T,x(0),h(1))]))}),R]),V=function e(t){return p({kind:"schema",type:"lazy",reference:e,expects:"unknown",async:!1,getter:t,"~run"(e,t){return this.getter(e.value)["~run"](e,t)}})}(()=>M({id:O(W),kind:J(S(),m(1),f(100)),x:O(z),y:O(z),w:O(B),h:O(B),rotation:O(z),style:O(U),text:O(G),locked:O(w()),hidden:O(w()),name:O(F),data:O(K),children:O(k(V)),points:O(J(k(_([z,z],J(T,x(0),h(1)))),f(D.maxPoints))),from:O(Q),to:O(Q),route:O(A(["straight","elbow","curve"])),heads:O(E({start:O(A(["none","arrow","dot"])),end:O(A(["none","arrow","dot"]))})),waypoints:O(k(q([z,z]))),closed:O(w()),autoWidth:O(w()),media:O(W),crop:O(H),href:O(F),description:O(F),html:O(F),mount:O(W)})),X=M({x:O(z),y:O(z),w:O(B),h:O(B),rotation:O(z),style:O(U),text:O(function(e,t){const n={};for(const i in e.entries)n[i]=!t||t.includes(i)?/* @__PURE__ */O(e.entries[i]):e.entries[i];return p({...e,entries:n})}(G)),href:O(F),description:O(F),data:O(K),from:O(Q),to:O(Q)}),Y=E({rightOf:O(W),leftOf:O(W),above:O(W),below:O(W),inside:O(W),near:O(W),gap:O(B),align:O(A(["start","middle","end"]))}),Z=E({mime:J(S(),function e(t,n){return{kind:"validation",type:"regex",reference:e,async:!1,expects:`${t}`,requirement:t,message:n,"~run"(e,t){return e.typed&&!this.requirement.test(e.value)&&o(this,"format",e,t),e}}}(/^image\/(png|jpeg|gif|webp|avif|svg\+xml)$/)),w:B,h:B,src:J(S(),f(D.maxMediaLength))}),ee=E({id:W,name:F,background:O(S()),items:k(V)}),te=E({format:$("anniedrawing"),version:$(2),meta:M({title:F,modified:O(S())}),pages:J(k(ee),m(1)),media:N(S(),Z)}),ne=function e(t,n,i){return p({kind:"schema",type:"variant",reference:e,expects:"Object",async:!1,key:t,options:n,message:i,"~run"(e,t){const n=e.value;if(n&&"object"==typeof n){let i,s=0,r=this.key,a=[];const u=(e,o)=>{for(const c of e.options){if("variant"===c.type)u(c,new Set(o).add(c.key));else{let e=!0,u=0;for(const t of o){const i=c.entries[t];if(t in n?i["~run"]({typed:!1,value:n[t]},g).issues:"exact_optional"!==i.type&&"optional"!==i.type&&"nullish"!==i.type){e=!1,r!==t&&(s<u||s===u&&t in n&&!(r in n))&&(s=u,r=t,a=[]),r===t&&a.push(c.entries[t].expects);break}u++}if(e){const e=c["~run"]({value:n},t);(!i||!i.typed&&e.typed)&&(i=e)}}if(i&&!i.issues)break}};if(u(this,/* @__PURE__ */new Set([this.key])),i)return i;o(this,"type",e,t,{input:n[r],expected:/* @__PURE__ */l(a,"|"),path:[{type:"object",origin:"value",input:n,key:r,value:n[r]}]})}else o(this,"type",e,t);return e}})}("op",[E({op:$("add"),item:V,page:O(W),parent:O(W),index:O(J(j(),d(),x(0))),place:O(Y)}),E({op:$("set"),id:W,patch:X}),E({op:$("remove"),id:W}),E({op:$("order"),id:W,to:I([A(["front","back","forward","backward"]),J(j(),d(),x(0))])}),E({op:$("reparent"),id:W,parent:function e(t,n){return p({kind:"schema",type:"nullable",reference:e,expects:`(${t.expects} | null)`,async:!1,wrapped:t,default:n,"~run"(e,t){return null===e.value&&(void 0!==this.default&&(e.value=/* @__PURE__ */b(this,e,t)),null===e.value)?(e.typed=!0,e):this.wrapped["~run"](e,t)}})}(W),index:O(J(j(),d(),x(0)))}),E({op:$("page.add"),index:O(J(j(),d(),x(0))),page:E({id:O(W),name:F,background:O(S()),items:O(k(V))})}),E({op:$("page.set"),id:W,patch:E({name:O(F),background:O(S())})}),E({op:$("page.remove"),id:W}),E({op:$("meta.set"),patch:M({title:O(F),modified:O(S())})}),E({op:$("media.set"),id:W,media:Z}),E({op:$("media.remove"),id:W})]),ie=J(k(ne),f(D.maxBatch)),se=E({kind:O(I([S(),k(S())])),text:O(S()),within:O(H),connectedTo:O(W),direction:O(A(["in","out","both"])),inside:O(W),data:O(K),hidden:O(w()),locked:O(w()),page:O(W)}),re=E({scope:O(A(["doc","page","selection","viewport"])),detail:O(A(["brief","normal","full"])),relations:O(w()),freeSpace:O(w()),maxItems:O(J(j(),d(),x(1),h(1e4))),selection:O(k(W)),page:O(W),since:O(J(j(),y()))});function ae(e,t){const n=L(e,t);return n.success?void 0:n.issues.map(e=>`${e.path?.map(e=>e.key).join(".")??"value"}: ${e.message}`).join("; ")}var oe=(e,t)=>Math.hypot(e.x-t.x,e.y-t.y);function ue(e,t,n){const i=n*Math.PI/180,s=Math.cos(i),r=Math.sin(i),a=e.x-t.x,o=e.y-t.y;return{x:t.x+a*s-o*r,y:t.y+a*r+o*s}}function ce(e,t,n){const i=n.x-t.x,s=n.y-t.y,r=i*i+s*s,a=r?Math.max(0,Math.min(1,((e.x-t.x)*i+(e.y-t.y)*s)/r)):0;return Math.hypot(e.x-t.x-a*i,e.y-t.y-a*s)}function le(e,t){let n=!1;for(let i=0,s=t.length-1;i<t.length;s=i++){const r=t[i],a=t[s];r.y>e.y!=a.y>e.y&&e.x<(a.x-r.x)*(e.y-r.y)/(a.y-r.y)+r.x&&(n=!n)}return n}function pe(e,t=.5){if(e.length<3)return e.slice();const n=/* @__PURE__ */new Set([0,e.length-1]),i=[[0,e.length-1]];for(;i.length;){const[s,r]=i.pop();let a=t,o=-1;for(let t=s+1;t<r;t++){const n=ce({x:e[t][0],y:e[t][1]},{x:e[s][0],y:e[s][1]},{x:e[r][0],y:e[r][1]});n>a&&(a=n,o=t)}o>=0&&(n.add(o),i.push([s,o],[o,r]))}return[...n].sort((e,t)=>e-t).map(t=>e[t])}function ye(e,t){if(e.length<3)return e;let n=0,i=0;for(let s=1;s<e.length-1;s++){const r=ce({x:e[s][0],y:e[s][1]},{x:e[0][0],y:e[0][1]},{x:e.at(-1)[0],y:e.at(-1)[1]}),a=s/(e.length-1),o=(e[0][2]??.5)*(1-a)+(e.at(-1)[2]??.5)*a,u=Math.max(r,Math.abs((e[s][2]??.5)-o)>.08?2*t:0);u>n&&(n=u,i=s)}return n>t?[...ye(e.slice(0,i+1),t).slice(0,-1),...ye(e.slice(i),t)]:[e[0],e.at(-1)]}function de(e,t,n){const i=xe(t,e);if("group"!==i?.kind)return i;const s=ge(i.children??[]).filter(e=>"connector"!==e.kind&&"group"!==e.kind).map(e=>xe(t,e.id)??e);return s.length?{...i,...$e(s,t,n),rotation:0}:i}function fe(e,t,n){const i=n?.(e);if(!i)return;const s=Array.isArray(i)?i:[i],r=e.w/2,a=e.h/2,o=t.x**2+t.y**2;if(!o)return;const u=(e,t)=>e.x*t.y-e.y*t.x;let c=-1/0;for(const l of s){const e=l.points.length;for(let n=0;n<e-(l.closed?0:1);n++){const i=l.points[n],s=l.points[(n+1)%e],p={x:s.x-i.x,y:s.y-i.y},y={x:i.x-r,y:i.y-a},d=u(t,p);if(Math.abs(d)<1e-10){if(Math.abs(u(y,t))<1e-10)for(const e of[i,s]){const n=((e.x-r)*t.x+(e.y-a)*t.y)/o;n>=0&&(c=Math.max(c,n))}continue}const f=u(y,p)/d,h=u(y,t)/d;f>=-1e-10&&h>=-1e-10&&h<=1+1e-10&&(c=Math.max(c,Math.max(0,f)))}}return Number.isFinite(c)?{x:e.x+r+t.x*c,y:e.y+a+t.y*c}:void 0}function he(e,t,n,i){if(!e)return{x:0,y:0};if(!("item"in e))return{x:e.x,y:e.y};const s=de(e.item,n,i);if(!s)return{x:0,y:0};const r=ve(s);let a;if(e.anchor)a={x:s.x+s.w*e.anchor[0],y:s.y+s.h*e.anchor[1]};else if(e.side&&"auto"!==e.side)a="top"===e.side?{x:r.x,y:s.y}:"bottom"===e.side?{x:r.x,y:s.y+s.h}:"left"===e.side?{x:s.x,y:r.y}:{x:s.x+s.w,y:r.y},a=fe(s,{x:a.x-r.x,y:a.y-r.y},i)??a;else{const e=ue(function(e,t,n){if(!e)return{x:0,y:0};if("item"in e){const i=de(e.item,t,n);return i?ve(i):{x:0,y:0}}return e}(t,n,i),r,-(s.rotation??0));let o=e.x-r.x,u=e.y-r.y;o||u||(o=1);const c=Math.max(s.w/2,.001),l=Math.max(s.h/2,.001),p="ellipse"===s.kind?1/Math.sqrt(o*o/(c*c)+u*u/(l*l)):"diamond"===s.kind?1/(Math.abs(o)/c+Math.abs(u)/l):Math.min(c/Math.max(Math.abs(o),1e-4),l/Math.max(Math.abs(u),1e-4));a=fe(s,{x:o,y:u},i)??{x:r.x+o*p,y:r.y+u*p}}return ue(a,r,s.rotation??0)}function me(e,t,n){const i=he(e.from,e.to,t,n),s=he(e.to,e.from,t,n);let r=[i,...(e.waypoints??[]).map(([e,t])=>({x:e,y:t})),s],a="";if("elbow"===e.route&&!e.waypoints?.length){const t=e.from,n=t&&"item"in t?t.side:void 0;r="top"===n||"bottom"===n||(!n||"auto"===n)&&Math.abs(s.y-i.y)>Math.abs(s.x-i.x)?[i,{x:i.x,y:(i.y+s.y)/2},{x:s.x,y:(i.y+s.y)/2},s]:[i,{x:(i.x+s.x)/2,y:i.y},{x:(i.x+s.x)/2,y:s.y},s]}if("curve"!==e.route||e.waypoints?.length)a=r.map((e,t)=>`${t?"L":"M"} ${e.x} ${e.y}`).join(" ");else{const e=s.x-i.x,t=s.y-i.y,n={x:(i.x+s.x)/2-.22*t,y:(i.y+s.y)/2+.22*e};a=`M ${i.x} ${i.y} Q ${n.x} ${n.y} ${s.x} ${s.y}`,r=Array.from({length:25},(e,t)=>{const r=t/24,a=1-r;return{x:a*a*i.x+2*a*r*n.x+r*r*s.x,y:a*a*i.y+2*a*r*n.y+r*r*s.y}})}const o=r.slice(1).map((e,t)=>oe(r[t],e));let u=o.reduce((e,t)=>e+t,0)/2,c=i;for(let l=0;l<o.length;l++){if(u<=o[l]){const e=o[l]?u/o[l]:0;c={x:r[l].x+(r[l+1].x-r[l].x)*e,y:r[l].y+(r[l+1].y-r[l].y)*e};break}u-=o[l]}return{points:r,d:a,midpoint:c,bounds:ke(r)}}function xe(e,t){return"function"==typeof e?e(t):e instanceof Map?e.get(t):Array.isArray(e)?ge(e).find(e=>e.id===t):e?.[t]}function ge(e){const t=[];return function e(n){for(const i of n)t.push(i),i.children&&e(i.children)}(e),t}var ve=e=>({x:e.x+e.w/2,y:e.y+e.h/2});function be(e,t=0,n=ve(e)){const i=[{x:e.x,y:e.y},{x:e.x+e.w,y:e.y},{x:e.x+e.w,y:e.y+e.h},{x:e.x,y:e.y+e.h}];return t?i.map(e=>ue(e,n,t)):i}function ke(e){if(!e.length)return{x:0,y:0,w:0,h:0};let t=1/0,n=1/0,i=-1/0,s=-1/0;for(const r of e)t=Math.min(t,r.x),n=Math.min(n,r.y),i=Math.max(i,r.x),s=Math.max(s,r.y);return{x:t,y:n,w:i-t,h:s-n}}function we(e,t,n){if("connector"===e.kind)return me(e,t,n).bounds;if("group"===e.kind&&e.children?.length)return $e(e.children.map(e=>xe(t,e.id)??e),t,n);let i={x:e.x,y:e.y,w:e.w,h:e.h};return"path"!==e.kind&&"line"!==e.kind||!e.points?.length||(i=ke(e.points.map(t=>({x:e.x+t[0],y:e.y+t[1]})))),e.rotation?ke(be(i,e.rotation,ve(e))):i}function $e(e,t,n){const i=t??new Map(ge(e).map(e=>[e.id,e]));return ke(e.flatMap(e=>{const t=we(e,i,n);return[{x:t.x,y:t.y},{x:t.x+t.w,y:t.y+t.h}]}))}var Me=(e,t)=>e.x<=t.x+t.w&&e.x+e.w>=t.x&&e.y<=t.y+t.h&&e.y+e.h>=t.y,je=(e,t)=>t.x>=e.x&&t.y>=e.y&&t.x+t.w<=e.x+e.w&&t.y+t.h<=e.y+e.h,Ee=(e,t)=>t.x>=e.x&&t.x<=e.x+e.w&&t.y>=e.y&&t.y<=e.y+e.h;function Oe(e){return e.pages.flatMap(e=>e.items)}function Ae(e){return ge(Oe(e))}function Ne(e,t){return t?{...e,...t,style:t.style?{...e.style,...t.style}:e.style,text:t.text?{...e.text,...t.text}:e.text,data:t.data?{...e.data,...t.data}:e.data}:e}function Se(e,t,n){const i={x:(e.x??0)+t,y:(e.y??0)+n};if("connector"===e.kind){for(const s of["from","to"]){const r=e[s];r&&!("item"in r)&&(i[s]={x:r.x+t,y:r.y+n})}e.waypoints&&(i.waypoints=e.waypoints.map(([e,i])=>[e+t,i+n]))}return i}var qe=["rightOf","leftOf","above","below","inside","near"];function _e(n,i){const s=t(i),r=new Set(Ae(n).map(e=>e.id)),a=/* @__PURE__ */new Map,o=[],u=(t,n)=>{t&&"object"==typeof t&&("string"==typeof t.id&&t.id&&(t.id=((t,n)=>{const i=e(t,r);return r.add(i),a.has(t)||a.set(t,i),i!==t&&o.push({index:n,code:"ID_REMAPPED",message:`Item id ${t} was already in use; stored as ${i}.`}),i})(t.id,n)),t.children?.forEach(e=>u(e,n)))};for(let e=0;e<s.length;e++){const t=s[e];t&&"object"==typeof t&&("add"===t.op?u(t.item,e):"page.add"===t.op?t.page.items?.forEach(t=>u(t,e)):"set"===t.op&&Array.isArray(t.patch?.children)&&t.patch.children.forEach(t=>u(t,e)))}const c=e=>e&&a.has(e)?a.get(e):e,l=e=>"string"==typeof e?c(e)??e:e&&"item"in e?{...e,item:c(e.item)??e.item}:e,p=e=>{e&&"object"==typeof e&&("from"in e&&void 0!==e.from&&(e.from=l(e.from)),"to"in e&&void 0!==e.to&&(e.to=l(e.to)),e.children?.forEach(p))};for(const e of s)if(e&&"object"==typeof e)if("add"===e.op){if(p(e.item),e.parent&&(e.parent=c(e.parent)),e.place)for(const t of qe){const n=e.place[t];n&&(e.place[t]=c(n))}}else"page.add"===e.op?e.page.items?.forEach(p):"set"===e.op?(e.id=c(e.id),void 0!==e.patch.from&&(e.patch.from=l(e.patch.from)),void 0!==e.patch.to&&(e.patch.to=l(e.patch.to)),Array.isArray(e.patch.children)&&e.patch.children.forEach(p)):"remove"===e.op||"order"===e.op?e.id=c(e.id):"reparent"===e.op&&(e.id=c(e.id),e.parent&&(e.parent=c(e.parent)));return{ops:s,warnings:o}}function Pe(e,i,s=n){const r=new Map(ge(e).map(e=>[e.id,s()])),a=e=>{const n={...t(e),id:r.get(e.id),x:(e.x??0)+i,y:(e.y??0)+i};e.children&&(n.children=e.children.map(a)),e.waypoints&&(n.waypoints=e.waypoints.map(([e,t])=>[e+i,t+i]));for(const t of["from","to"]){const s=e[t];s&&(n[t]="item"in s?{...s,item:r.get(s.item)??s.item}:{x:s.x+i,y:s.y+i})}return n};return e.map(a)}function Ie(e,n,i){const s=ge([...e]),r=new Set(s.map(e=>e.id)),a=[];for(const o of s){const e={};for(const s of["from","to"]){const a=o[s];a&&"item"in a&&!r.has(a.item)&&(e[s]=t(a),o[s]=he(a,o["from"===s?"to":"from"],n,i))}Object.keys(e).length&&a.push({op:"set",id:o.id,patch:e})}return a}function Je(e,t,n,i=n){const s=["rightOf","leftOf","above","below","inside","near"].filter(e=>t[e]);if(1!==s.length)throw new Error("Placement requires exactly one of rightOf, leftOf, above, below, inside, or near.");const r=s[0],a=xe(i,t[r]);if(!a)throw new Error(`Placement reference ${t[r]} does not exist.`);const o="inside"===r?{x:a.x,y:a.y,w:a.w,h:a.h}:we(a,i),u=t.gap??32,c=t.align??"middle",l=(e,t)=>"start"===c?0:"end"===c?e-t:(e-t)/2;let p=o.x,y=o.y;if("rightOf"===r&&(p=o.x+o.w+u,y=o.y+l(o.h,e.h)),"leftOf"===r&&(p=o.x-e.w-u,y=o.y+l(o.h,e.h)),"above"===r&&(p=o.x+l(o.w,e.w),y=o.y-e.h-u),"below"===r&&(p=o.x+l(o.w,e.w),y=o.y+o.h+u),"inside"===r){if("group"!==a.kind)throw new Error("Inside placement requires a group.");const t=a.children??[];let n=!1;for(let s=0;s<100&&!n;s++)for(let r=0;r<100&&!n;r++){const a={x:o.x+u+r*(e.w+u),y:o.y+u+s*(e.h+u),w:e.w,h:e.h};je(o,a)&&!t.some(e=>Me(a,we(e,i)))&&(p=a.x,y=a.y,n=!0)}if(!n)throw new Error(`No free slot inside ${a.id}; enlarge the group or use a smaller item.`)}if("near"===r){let t=!1;for(let s=1;s<=100&&!t;s++){const r=[{x:o.x+o.w+u*s,y:o.y},{x:o.x,y:o.y+o.h+u*s},{x:o.x-e.w-u*s,y:o.y},{x:o.x,y:o.y-e.h-u*s}];for(const s of r)if(!n.some(t=>Me({...s,w:e.w,h:e.h},we(t,i)))){p=s.x,y=s.y,t=!0;break}}if(!t)throw new Error("No free space found near the requested item.")}return{...e,x:p,y:y}}function Le(e,n={}){const s=Ae(e),r=new Map(s.map(e=>[e.id,e])),a=n.page?ge(e.pages.find(e=>e.id===n.page)?.items??[]):s,o=n.inside?new Set(ge(r.get(n.inside)?.children??[]).map(e=>e.id)):void 0;return a.filter(e=>{if(n.kind&&!(Array.isArray(n.kind)?n.kind:[n.kind]).map(i).includes(e.kind))return!1;if(n.text){const t=[e.text?.value,e.name].filter(Boolean).join(" ");if("string"==typeof n.text?!t.toLowerCase().includes(n.text.toLowerCase()):!new RegExp(n.text.source,n.text.flags.replace(/[gy]/g,"")).test(t))return!1}if(void 0!==n.hidden&&!!e.hidden!==n.hidden||void 0!==n.locked&&!!e.locked!==n.locked)return!1;if(n.within&&!je(n.within,we(e,r)))return!1;if(o&&!o.has(e.id))return!1;if(n.data&&Object.entries(n.data).some(([t,n])=>JSON.stringify(e.data?.[t])!==JSON.stringify(n)))return!1;if(n.connectedTo){const t=e.from&&"item"in e.from&&e.from.item===n.connectedTo,i=e.to&&"item"in e.to&&e.to.item===n.connectedTo,s=n.direction??"both";if(!("out"===s?t:"in"===s?i:t||i))return!1}return!0}).map(t)}var De=e=>Math.round(10*e)/10,Ce=e=>e.name??e.text?.value,Te=e=>JSON.stringify(e.length>160?`${e.slice(0,157)}…`:e);function ze(e,t={},n){const i=e.pages.filter((e,n)=>t.page?e.id===t.page:"page"!==t.scope||0===n),s=t.detail??"normal",r=t.maxItems??100,a=t.since,o=new Set(t.selection??[]),u=t.ids?new Set(t.ids):void 0,c=[];let l=0;const p=/* @__PURE__ */new Set,y=Ae(e),d=new Map(y.map(e=>[e.id,e])),f=void 0!==a&&n?e=>{const t=n.written.get(e);return!!t&&t.revision>a}:()=>!0,h=e=>!("selection"===t.scope&&!o.has(e.id))&&(!(u&&!u.has(e.id))&&f(e.id)),m=e=>"selection"!==t.scope&&!u&&((!t.page||e.page===t.page)&&(void 0!==a&&e.revision>a));let x=!1;for(const g of i){const e=ge(g.items).filter(h),i=n?[...n.removed.entries()].filter(([,e])=>e.page===g.id&&m(e)).sort(([e],[t])=>e<t?-1:e>t?1:0):[];if(void 0!==a&&!e.length&&!i.length)continue;x=!0;const y=ge(g.items).filter(e=>!("selection"===t.scope&&!o.has(e.id))&&!(u&&!u.has(e.id)));if(c.push(`Page ${Te(g.name)} (${g.id}): ${void 0===a?y.length:e.length+i.length} item${1===(void 0===a?y.length:e.length+i.length)?"":"s"}.${o.size&&void 0===a?` Selection: ${[...o].join(", ")}.`:""}`),!e.length&&!i.length){c.push("An empty board, ready for your first idea.");continue}const f=e.filter(e=>"connector"!==e.kind).sort((e,t)=>e.y-t.y||e.x-t.x||(e.id<t.id?-1:e.id>t.id?1:0));for(const t of f){if(l>=r)continue;l++,p.add(t.id);const e=we(t,d),i=Ce(t);let a=`${t.id} ${t.kind}${i?` ${Te(i)}`:""}`;"brief"!==s&&(a+=` at (${De(e.x)},${De(e.y)}) ${De(e.w)}×${De(e.h)}${t.style?.fill?`, fill ${t.style.fill}`:""}${t.hidden?", hidden":""}${t.locked?", locked":""}`),t.children?.length&&(a+=` contains ${t.children.map(e=>e.id).join(", ")}`),"full"===s&&t.data&&(a+=` [${Object.entries(t.data).sort(([e],[t])=>e<t?-1:e>t?1:0).map(([e,t])=>`data.${e}=${JSON.stringify(t)}`).join(", ")}]`),"brief"!==s&&n?.written.get(t.id)?.origin.startsWith("agent:")&&(a+=", by agent"),c.push(a)}const v=e.filter(e=>"connector"===e.kind);if(v.length){c.push("Connections:");for(const e of v){if(l>=r)continue;l++,p.add(e.id);const t=e=>e?"item"in e?e.item:`(${De(e.x)},${De(e.y)})`:"unset";let i=` ${e.id}: ${t(e.from)} → ${t(e.to)}${Ce(e)?` ${Te(Ce(e))}`:""} (${e.route??"straight"})`;"brief"!==s&&n?.written.get(e.id)?.origin.startsWith("agent:")&&(i+=", by agent"),c.push(i)}}for(const[t,n]of i)l>=r||(l++,p.add(t),c.push("brief"===s?`removed ${t}`:`removed ${t} ${n.kind}`));if(t.relations&&"brief"!==s){const e=[];for(let t=0;t<Math.min(f.length,20);t++){const n=f[t],i=f[t+1];if(!i)continue;const s=i.x-n.x-n.w;s>=0&&Math.abs(n.y-i.y)<5&&e.push(`${n.id} is left of ${i.id}, tops aligned, gap ${De(s)}`)}e.length&&c.push(`Layout: ${e.join("; ")}.`)}if(t.freeSpace){const t=void 0===a?ge(g.items).filter(h):e,n=t.length?t:e;if(n.length){const e=$e(n,d);c.push(`Free space: right of content from x=${De(e.x+e.w+40)}; below content from y=${De(e.y+e.h+40)}.`)}}const b=e.filter(e=>!p.has(e.id));if(b.length){const e=/* @__PURE__ */new Map;for(const t of b){const n=`near (${600*Math.floor(t.x/600)},${600*Math.floor(t.y/600)})`;e.set(n,(e.get(n)??0)+1)}c.push(`${b.length} more items: ${[...e].slice(0,8).map(([e,t])=>`${t} ${e}`).join("; ")}${e.size>8?`; ${e.size-8} more clusters`:""}. Use query() or increase maxItems for detail.`)}}return void 0===a||x?c.join("\n"):`No changes since revision ${a}.`}export{te as A,w as B,oe as C,pe as D,ce as E,Y as F,E as G,h as H,se as I,J,O as K,C as L,D as M,ne as N,ye as O,ie as P,ae as R,me as S,ue as T,x as U,d as V,j as W,S as X,L as Y,ge as _,Ne as a,xe as b,Oe as c,$e as d,be as f,Ee as g,je as h,Ae as i,V as j,re as k,_e as l,ve as m,Le as n,Pe as o,ke as p,A as q,Je as r,Ie as s,ze as t,Se as u,Me as v,le as w,he as x,we as y,k as z};
|
|
3
|
-
//# sourceMappingURL=describe-DaWyf3qV.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as t,b as e,c as i,f as n,g as r,i as o,l as s,o as a,s as d}from"./defaults-C-aC_B4z.js";import{A as c,E as h,M as f,N as l,R as p,S as u,T as m,_ as g,c as v,g as w,h as x,i as y,l as b,n as M,r as E,s as k,t as $,v as S,w as O,y as X}from"./describe-DaWyf3qV.js";var Y,j=Symbol.for("preact-signals");function _(){if(N>1)N--;else{var t,e=!1;for(!function(){var t=R;for(R=void 0;void 0!==t;){var e=t.S;if(e.v===t.v)for(var i=e.t;void 0!==i;i=i.x)i.i===t.i&&(i.i=e.i);t=t.o}}();void 0!==I;){var i=I;for(I=void 0,L++;void 0!==i;){var n=i.u;if(i.u=void 0,i.f&=-3,!(8&i.f)&&W(i))try{i.c()}catch(i){e||(t=i,e=!0)}i=n}}if(L=0,N--,e)throw t}}var B=void 0;function A(t){var e=B,i=Y;B=void 0,Y=void 0;try{return t()}finally{B=e,Y=i}}var I=void 0,N=0,L=0,D=0,T=0,R=void 0,U=0;function P(t){if(void 0!==B){var e=t.n;if(void 0===e||e.t!==B)return e={i:0,S:t,p:B.s,n:void 0,t:B,e:void 0,x:void 0,r:e},void 0!==B.s&&(B.s.n=e),B.s=e,t.n=e,32&B.f&&t.S(e),e;if(-1===e.i)return e.i=0,void 0!==e.n&&(e.n.p=e.p,void 0!==e.p&&(e.p.n=e.n),e.p=B.s,e.n=void 0,B.s.n=e,B.s=e),e}}function z(t,e){this.v=t,this.i=0,this.n=void 0,this.t=void 0,this.l=0,this.W=null==e?void 0:e.watched,this.Z=null==e?void 0:e.unwatched,this.name=null==e?void 0:e.name}function H(t,e){return new z(t,e)}function W(t){for(var e=t.s;void 0!==e;e=e.n)if(e.S.i!==e.i||!e.S.h()||e.S.i!==e.i)return!0;return!1}function C(t){for(var e=t.s;void 0!==e;e=e.n){var i=e.S.n;if(void 0!==i&&(e.r=i),e.S.n=e,e.i=-1,void 0===e.n){t.s=e;break}}}function J(t){for(var e=t.s,i=void 0;void 0!==e;){var n=e.p;-1===e.i?(e.S.U(e),void 0!==n&&(n.n=e.n),void 0!==e.n&&(e.n.p=n)):i=e,e.S.n=e.r,void 0!==e.r&&(e.r=void 0),e=n}t.s=i}function q(t,e){z.call(this,void 0,e),this.x=t,this.s=void 0,this.g=U-1,this.f=4}function G(t){var e=t.m;if(t.m=void 0,"function"==typeof e){N++;var i=B;B=void 0;try{e()}catch(_){throw t.f&=-2,t.f|=8,V(t),_}finally{B=i,_()}}}function V(t){for(var e=t.s;void 0!==e;e=e.n)e.S.U(e);t.x=void 0,t.s=void 0,G(t)}function F(t){if(B!==this)throw new Error("Out-of-order effect");J(this),B=t,this.f&=-2,8&this.f&&V(this),_()}function Z(t,e){this.x=t,this.m=void 0,this.s=void 0,this.u=void 0,this.f=32,this.name=null==e?void 0:e.name,Y&&Y.push(this)}z.prototype.brand=j,z.prototype.h=function(){return!0},z.prototype.S=function(t){var e=this,i=this.t;i!==t&&void 0===t.e&&(t.x=i,this.t=t,void 0!==i?i.e=t:A(function(){var t;null==(t=e.W)||t.call(e)}))},z.prototype.U=function(t){var e=this;if(void 0!==this.t){var i=t.e,n=t.x;void 0!==i&&(i.x=n,t.e=void 0),void 0!==n&&(n.e=i,t.x=void 0),t===this.t&&(this.t=n,void 0===n&&A(function(){var t;null==(t=e.Z)||t.call(e)}))}},z.prototype.subscribe=function(t){var e=this;return function(t,e){var i=new Z(t,e);try{i.c()}catch(t){throw i.d(),t}var n=i.d.bind(i);return n[Symbol.dispose]=n,n}(function(){var i=e.value;A(function(){return t(i)})},{name:"sub"})},z.prototype.valueOf=function(){return this.value},z.prototype.toString=function(){return this.value+""},z.prototype.toJSON=function(){return this.value},z.prototype.peek=function(){var t=this;return A(function(){return t.value})},Object.defineProperty(z.prototype,"value",{get:function(){var t=P(this);return void 0!==t&&(t.i=this.i),this.v},set:function(t){if(t!==this.v){if(L>100)throw new Error("Cycle detected");!function(t){0!==N&&0===L&&t.l!==T&&(t.l=T,R={S:t,v:t.v,i:t.i,o:R})}(this),this.v=t,this.i++,U++,N++;try{for(var e=this.t;void 0!==e;e=e.x)e.t.N()}finally{_()}}}}),q.prototype=new z,q.prototype.h=function(){if(this.f&=-3,1&this.f)return!1;if(32==(36&this.f))return!0;if(this.f&=-5,this.g===U)return!0;if(this.g=U,this.f|=1,this.i>0&&!W(this))return this.f&=-2,!0;var t=B;try{C(this),B=this;var e=this.x();(16&this.f||this.v!==e||0===this.i)&&(this.v=e,this.f&=-17,this.i++)}catch(t){this.v=t,this.f|=16,this.i++}return B=t,J(this),this.f&=-2,!0},q.prototype.S=function(t){if(void 0===this.t){this.f|=36;for(var e=this.s;void 0!==e;e=e.n)e.S.S(e)}z.prototype.S.call(this,t)},q.prototype.U=function(t){if(void 0!==this.t&&(z.prototype.U.call(this,t),void 0===this.t)){this.f&=-33;for(var e=this.s;void 0!==e;e=e.n)e.S.U(e)}},q.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(var t=this.t;void 0!==t;t=t.x)t.t.N()}},Object.defineProperty(q.prototype,"value",{get:function(){if(1&this.f)throw new Error("Cycle detected");var t=P(this);if(this.h(),void 0!==t&&(t.i=this.i),16&this.f)throw this.v;return this.v}}),Z.prototype.c=function(){var t=this.S();try{if(8&this.f)return;if(void 0===this.x)return;var e=this.x();"function"==typeof e&&(this.m=e)}finally{t()}},Z.prototype.S=function(){if(1&this.f)throw new Error("Cycle detected");this.f|=1,this.f&=-9,G(this),C(this),N++;var t=B;return B=this,F.bind(this,t)},Z.prototype.N=function(){2&this.f||(this.f|=2,this.u=I,I=this)},Z.prototype.d=function(){this.f|=8,1&this.f||V(this)},Z.prototype.dispose=function(){this.d()};var K={1:t=>({...t,format:"anniedrawing",version:1,media:t.media??{},meta:t.meta??{title:"Untitled board"}}),2:t=>{const{sheets:e,...i}=t,n=e??t.pages;return{...i,version:2,pages:Array.isArray(n)?n.map(t=>({...t,name:"string"==typeof t.name&&/^Sheet [1-9]\d*$/.test(t.name)?t.name.replace(/^Sheet /,"Page "):t.name})):n}}};function Q(e,i={}){if(!e||"object"!=typeof e)throw new Error("A drawing must be a JSON object.");let n=t(e);if(void 0!==n.format&&"anniedrawing"!==n.format)throw new Error("This is not an AnnieDrawing document.");const r=n.version??0;if("number"!=typeof r||!Number.isInteger(r)||r<0)throw new Error("Invalid drawing version.");if(r>2)throw new Error(`Drawing version ${r} is newer than supported version 2.`);for(let t=r+1;t<=2;t++)n=K[t](n);const o=n;return Array.isArray(o.pages)&&(o.pages=function(t){const e=new Set(g(t.flatMap(t=>t.items??[])).map(t=>t.id)),i=t=>{let i=t;for(let n=2;e.has(i);n++)i=`${t}_${n}`;return e.add(i),i},n=t=>{const e=t.children?.map(n);if("frame"!==t.kind)return{...t,...e?{children:e}:{}};const{clip:r,title:o,text:s,style:a,...d}=t,c={x:t.x??0,y:t.y??0,w:t.w??600,h:t.h??400},h=[{kind:"rect",id:i(`${t.id}_background`),...c,rotation:t.rotation,style:{fill:"paper",strokeWidth:1.5,...a},...s?{text:s}:{}}],f="string"==typeof o?o:t.name;return f&&h.push({kind:"text",id:i(`${t.id}_label`),x:c.x,y:c.y-30,w:c.w,h:20,text:{value:f,size:14,align:"start",valign:"top"}}),{...d,...c,kind:"group",name:t.name??f,children:[...h,...e??[]]}};return t.map(t=>({...t,items:Array.isArray(t.items)?t.items.map(n):t.items}))}(o.pages).map(t=>({...t,items:Array.isArray(t.items)?t.items.map(t=>s(t,i)):t.items}))),o}var tt=/^[\w-]{11}$/,et=/^data:image\/(png|jpeg|gif|webp|avif);base64,[a-z0-9+/=\s]+$/i,it=/^data:image\/(png|jpeg|gif|webp|avif|svg\+xml);base64,[a-z0-9+/=\s]+$/i;function nt(t){if("string"!=typeof t)return;const e=t.trim();if(et.test(e))return e.replace(/\s+/g,"");try{const t=new URL(e);if("http:"!==t.protocol&&"https:"!==t.protocol)return;return t.username=t.password="",t.href}catch{return}}function rt(t){try{const e=new URL(t);return("http:"===e.protocol||"https:"===e.protocol)&&(!e.username&&!e.password&&!function(t){const e=t.replace(/^\[|\]$/g,"").replace(/\.+$/,"").toLowerCase();if("localhost"===e||"0.0.0.0"===e||"::"===e||e.endsWith(".localhost")||e.endsWith(".local")||e.endsWith(".internal"))return!0;const i=e.match(/^(\d{1,3}(?:\.\d{1,3}){3})(?:\.|$)/);if(i&&ot(i[1]))return!0;const n=function(t){if(/^\d{1,3}(?:\.\d{1,3}){3}$/.test(t))return t;const e=at(t);return e?st(e):void 0}(e);if(n)return ot(n);const r=at(e);if(!r)return!1;if(r.every(t=>0===t))return!0;if(1===r[7]&&r.slice(0,7).every(t=>0===t))return!0;if(65152==(65472&r[0])||64512==(65024&r[0])||!(65280&~r[0]))return!0;const o=st(r);return!!o&&ot(o)}(e.hostname))}catch{return!1}}function ot(t){const e=t.split(".").map(Number);if(4!==e.length||e.some(t=>t>255))return!1;const[i,n]=e;return 0===i||10===i||127===i||(169===i&&254===n||(192===i&&168===n||(172===i&&n>=16&&n<=31||(100===i&&n>=64&&n<=127||(198===i&&(18===n||19===n)||i>=224)))))}function st(t){const e=`${t[6]>>8&255}.${255&t[6]}.${t[7]>>8&255}.${255&t[7]}`;return 0===t[0]&&0===t[1]&&0===t[2]&&0===t[3]&&0===t[4]&&65535===t[5]||100===t[0]&&65435===t[1]&&t.slice(2,6).every(t=>0===t)?e:void 0}function at(t){if(!t.includes(":"))return;let e=t;const i=e.match(/:(\d{1,3}(?:\.\d{1,3}){3})$/);if(i){const[t,n,r,o]=i[1].split(".").map(Number);if([t,n,r,o].some(t=>t>255))return;e=`${e.slice(0,-i[1].length)}${t<<8|n}:${r<<8|o}`}const n=e.split("::");if(n.length>2)return;const r=t=>t?t.split(":").filter(Boolean).map(t=>/^[0-9a-f]{1,4}$/i.test(t)?parseInt(t,16):NaN):[],o=r(n[0]),s=2===n.length?r(n[1]):[];if(o.some(Number.isNaN)||s.some(Number.isNaN))return;if(1===n.length)return 8===o.length?o:void 0;const a=8-o.length-s.length;return a<0?void 0:[...o,...Array(a).fill(0),...s]}function dt(t){try{return new URL(t).hostname.replace(/^www\./,"")}catch{return t}}function ct(t){const e=nt(t);if(!e||e.startsWith("data:"))return;const i=new URL(e),n=i.hostname.replace(/^(www|m)\./,""),r=i.pathname.split("/").filter(Boolean);if(n.includes("youtu")){const t="youtu.be"===n?r[0]:i.searchParams.get("v")??r[r.findIndex(t=>/^(embed|shorts|live|v)$/.test(t))+1];if(t&&tt.test(t))return{provider:"youtube",id:t}}if(!/^(player\.)?vimeo\.com$/.test(n))return;const o="video"===r[0]||n.startsWith("player")?1:0,s=r[o];if(!s||!/^\d+$/.test(s))return;const a=i.searchParams.get("h")??r[o+1]?.match(/^[\w]+$/)?.[0];return{provider:"vimeo",id:s,...a?{hash:a}:{}}}function ht(t){const e=ct(t);if(e)return"youtube"===e.provider?`https://www.youtube-nocookie.com/embed/${e.id}?rel=0`:`https://player.vimeo.com/video/${e.id}${e.hash?`?h=${encodeURIComponent(e.hash)}`:""}`}var ft=(t,e)=>JSON.stringify(t)===JSON.stringify(e);function lt(t,e){return e?e(t):t.replace(/&(?!(?:amp|lt|gt|quot|apos|#\d+|#x[\da-f]+);)/gi,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function pt(t){if(Object.keys(t).some(t=>"name"!==t&&"background"!==t))throw new Error("page.set may only update name and background. Use item operations to change page content.")}function ut(t,e){for(const i of t.pages){const t=(n,r)=>{for(let o=0;o<n.length;o++){const s=n[o];if(s.id===e)return{item:s,list:n,index:o,parent:r,page:i};if(s.children){const e=t(s.children,s);if(e)return e}}},n=t(i.items);if(n)return n}}function mt(t,e){const i=ut(t,e);if(!i){const i=y(t).map(t=>t.id).slice(0,5);throw new Error(`Item ${e} does not exist.${i.length?` Known ids: ${i.join(", ")}.`:""}`)}return i}function gt(e,i,n=[]){const r={...e};for(const[o,s]of Object.entries(i))if(void 0!==s)if(n.includes(o)&&s&&"object"==typeof s&&!Array.isArray(s)){const t=r[o];r[o]=gt(t&&"object"==typeof t?t:{},s)}else r[o]=t(s);else delete r[o];return r}function vt(e,i,n=[]){const r=e,o={};for(const s of Object.keys(i)){const e=i[s];o[s]=n.includes(s)&&e&&"object"==typeof e&&r[s]&&"object"==typeof r[s]?vt(r[s],e):t(r[s])}return o}function wt(t,e=0,i=/* @__PURE__ */new Set){if(e>f.maxJsonDepth)throw new Error(`Document data exceeds maximum nesting depth ${f.maxJsonDepth}.`);if(null==t||"boolean"==typeof t||"string"==typeof t)return;if("number"==typeof t){if(!Number.isFinite(t))throw new Error("All numbers must be finite.");return}if("object"!=typeof t)throw new Error("Document values must be plain JSON data.");if(i.has(t))throw new Error("Circular document data is not supported.");const n=Object.getPrototypeOf(t);if(!Array.isArray(t)&&n!==Object.prototype&&null!==n)throw new Error("Document values must be plain JSON objects.");i.add(t);for(const[r,o]of Object.entries(t)){if(["__proto__","prototype","constructor"].includes(r))throw new Error(`Unsafe property ${r}.`);wt(o,e+1,i)}i.delete(t)}function xt(t,e={},i="user",n){wt(t);const r=p(c,t);if(r)throw new Error(r);const o=/* @__PURE__ */new Set,s=/* @__PURE__ */new Set;let a=0;for(const d of t.pages){if(s.has(d.id))throw new Error(`Duplicate page id ${d.id}.`);s.add(d.id);const i=(n,r)=>{if(r>f.maxDepth)throw new Error("Item nesting is too deep.");for(const s of n){if(a++,"string"!=typeof s.id||!s.id)throw new Error("Every item must have a stable string id.");for(const t of["x","y","w","h"])if("number"!=typeof s[t]||!Number.isFinite(s[t]))throw new Error(`Item ${s.id} requires finite ${t}.`);if(o.has(s.id))throw new Error(`Duplicate item id ${s.id}.`);if(o.add(s.id),s.children&&"group"!==s.kind)throw new Error(`Only groups may contain children (${s.id}).`);if(!("connector"!==s.kind||s.from&&s.to))throw new Error(`Connector ${s.id} needs both from and to endpoints.`);if(!("image"!==s.kind||s.media&&t.media[s.media]))throw new Error(`Image ${s.id} references missing media ${s.media??"(unset)"}.`);if("video"===s.kind||"link"===s.kind||void 0!==s.href){if(!nt(s.href))throw new Error(`Bad href (${s.id}).`);if("video"===s.kind&&!ct(s.href))throw new Error(`Bad video (${s.id}).`)}const n=e.kinds?.find(t=>t.kind===s.kind)?.schema;if(n){const t=p(n,s);if(t)throw new Error(`${s.kind} ${s.id}: ${t}`)}s.children&&i(s.children,r+1)}};i(d.items,0)}if(a>f.maxItems)throw new Error(`A document may contain at most ${f.maxItems} items.`);for(const d of t.pages){const t=g(d.items),e=new Map(t.map(t=>[t.id,t]));for(const i of t)for(const t of[i.from,i.to])if(t&&"item"in t){const n=e.get(t.item);if(!n)throw new Error(`Endpoint ${t.item} does not exist on page ${d.id}.`);if("connector"===n.kind||n.id===i.id)throw new Error(`Connector endpoints must attach to a non-connector item (${t.item}).`)}}for(const[d,c]of Object.entries(t.media)){const t=it.test(c.src);let r;try{r=new URL(c.src)}catch{}if(!(t||r&&["http:","https:"].includes(r.protocol)))throw new Error("Images must use an image data URL or an HTTP(S) URL.");if(r&&(r.username||r.password))throw new Error("Image URLs must not include credentials.");if("user"!==i&&(!n||n.has(d))&&!t&&r&&!e.allowedImageOrigins?.includes(r.origin))throw new Error(`Image origin ${r.origin} is not allowed. Pass allowedImageOrigins when creating the board.`)}}function yt(t){if(void 0===t.href)return;const e=nt(t.href);if(!e)throw new Error(`Bad href (${t.id}).`);t.href=e,t.children?.forEach(yt)}function bt(t,e){void 0!==t.html&&(t.html=lt(t.html,e)),t.mount&&delete t.mount,t.children?.forEach(t=>bt(t,e))}function Mt(e,i,a,c={}){const h=t(i),f=d(c.kinds),l=t=>c.kinds?.find(e=>e.kind===t.kind)?.outline?.(t);let p=[],u=[];if("add"===h.op){let i=s(h.item,f);"user"!==a&&bt(i,c.sanitizeHTML),yt(i);const n=h.parent??h.place?.inside,r=n?mt(e,n):void 0;if(r&&"group"!==r.item.kind)throw new Error(`Parent ${n} must be a group.`);const o=r?.page??e.pages.find(t=>!h.page||t.id===h.page);if(!o)throw new Error(`Page ${h.page??"(first)"} does not exist.`);if(r&&h.page&&h.page!==r.page.id)throw new Error("Parent and page must refer to the same page.");if(h.place){const t=h.place.gap??(a.startsWith("agent:")?c.agentPlaceGap??32:32);i=E(i,{...h.place,gap:t},g(o.items))}const d=r?r.item.children??=[]:o.items;if(void 0!==h.index&&h.index>d.length)throw new Error("Insert index is outside the target list.");return d.splice(h.index??d.length,0,i),p=[{op:"remove",id:i.id}],u=g([i]).map(t=>t.id),{op:{op:"add",item:t(i),page:o.id,...r?{parent:r.item.id}:{},...void 0!==h.index?{index:h.index}:{}},inverse:p,created:u}}if("set"===h.op){const i=mt(e,h.id),r=Object.hasOwn(h.patch,"children")?new Map(y(e).map(t=>[t.id,t])):void 0;if(Object.hasOwn(h.patch,"id")&&h.patch.id!==h.id)throw new Error("Item ids cannot be changed.");p=[{op:"set",id:h.id,patch:vt(i.item,h.patch,["style","text","data"])}];const d=t(h.patch),{from:m,to:w,style:x,children:b,...M}=d,E={...M};Object.hasOwn(d,"style")&&(E.style=o(x)),Object.hasOwn(d,"from")&&(E.from=n(m)),Object.hasOwn(d,"to")&&(E.to=n(w)),Object.hasOwn(d,"children")&&(E.children=b?b.map(t=>s(t,f)):void 0);for(const t of["kind","x","y","w","h"])if(Object.hasOwn(E,t)&&void 0===E[t])throw new Error(`Required field ${t} cannot be deleted.`);if("string"==typeof E.href){const t=nt(E.href);if(!t)throw new Error(`Bad href (${h.id}).`);E.href=t}return"user"!==a&&("string"==typeof E.html&&(E.html=lt(E.html,c.sanitizeHTML)),Object.hasOwn(E,"mount")&&delete E.mount,E.children&&E.children.forEach(t=>bt(t,c.sanitizeHTML))),i.list[i.index]=gt(i.item,E,["style","text","data"]),r&&(u=[...new Set(g(i.list[i.index].children??[]).map(t=>t.id))].filter(t=>!r.has(t)),p.push(...k(v(e),r,l))),{op:{...h,patch:E},inverse:p,created:u}}if("remove"===h.op){const i=mt(e,h.id),n=new Map(y(e).map(t=>[t.id,t]));p=[{op:"add",item:t(i.item),page:i.page.id,...i.parent?{parent:i.parent.id}:{},index:i.index}],i.list.splice(i.index,1),p.push(...k(v(e),n,l))}if("order"===h.op){const t=mt(e,h.id),i="number"==typeof h.to?h.to:"front"===h.to?t.list.length-1:"back"===h.to?0:"forward"===h.to?Math.min(t.list.length-1,t.index+1):Math.max(0,t.index-1);if(i>=t.list.length)throw new Error("Order index is outside the item list.");t.list.splice(t.index,1),t.list.splice(i,0,t.item),p=[{op:"order",id:h.id,to:t.index}]}if("reparent"===h.op){const t=mt(e,h.id),i=h.parent?mt(e,h.parent):void 0;if(i&&"group"!==i.item.kind)throw new Error("New parent must be a group.");if(i&&g([t.item]).some(t=>t.id===i.item.id))throw new Error("An item cannot be placed inside itself or a descendant.");if(i&&i.page.id!==t.page.id)throw new Error("Reparenting across pages is not supported.");p=[{op:"reparent",id:h.id,parent:t.parent?.id??null,index:t.index}],t.list.splice(t.index,1);const n=i?i.item.children??=[]:t.page.items;if(void 0!==h.index&&h.index>n.length)throw new Error("Reparent index is outside the target list.");n.splice(h.index??n.length,0,t.item)}if("page.add"===h.op){const i={...h.page,id:h.page.id??r(),items:(h.page.items??[]).map(t=>s(t,f))};if("user"!==a&&i.items.forEach(t=>bt(t,c.sanitizeHTML)),void 0!==h.index&&h.index>e.pages.length)throw new Error("Page insert index is outside the page list.");return e.pages.splice(h.index??e.pages.length,0,i),p=[{op:"page.remove",id:i.id}],u=g(i.items).map(t=>t.id),{op:{op:"page.add",page:t(i),...void 0!==h.index?{index:h.index}:{}},inverse:p,created:u}}if("page.set"===h.op){pt(h.patch);const t=e.pages.find(t=>t.id===h.id);if(!t)throw new Error(`Page ${h.id} does not exist.`);p=[{op:"page.set",id:h.id,patch:vt(t,h.patch)}],Object.assign(t,gt(t,h.patch));for(const e of Object.keys(h.patch))void 0===h.patch[e]&&delete t[e]}if("page.remove"===h.op){const i=e.pages.findIndex(t=>t.id===h.id);if(i<0)throw new Error(`Page ${h.id} does not exist.`);const[n]=e.pages.splice(i,1);p=[{op:"page.add",page:t(n),index:i}]}if("meta.set"===h.op&&(p=[{op:"meta.set",patch:vt(e.meta,h.patch)}],e.meta=gt(e.meta,h.patch)),"media.set"===h.op&&(p=e.media[h.id]?[{op:"media.set",id:h.id,media:t(e.media[h.id])}]:[{op:"media.remove",id:h.id}],e.media[h.id]=t(h.media)),"media.remove"===h.op){if(!e.media[h.id])throw new Error(`Media ${h.id} does not exist.`);p=[{op:"media.set",id:h.id,media:t(e.media[h.id])}],delete e.media[h.id]}return{op:h,inverse:p,created:u}}function Et(e,i,n,r=[]){const o={};for(const s of/* @__PURE__ */new Set([...Object.keys(e),...Object.keys(i)]))if(!ft(e[s],i[s]))if(!r.includes(s)||!n[s]||"object"!=typeof n[s]||void 0!==e[s]&&"object"!=typeof e[s]||void 0!==i[s]&&"object"!=typeof i[s])ft(n[s],i[s])&&(o[s]=t(e[s]));else{const t=Et(e[s]??{},i[s]??{},n[s]);Object.keys(t).length&&(o[s]=t)}return o}function kt(n,r={}){r.sanitizeHTML&&function(t){let e;try{e=t('<img src="x" onerror="alert(1)"><script>alert(1)<\/script>')}catch(n){throw new Error(`sanitizeHTML failed on a safety probe (${n instanceof Error?n.message:n}).`)}if("string"!=typeof e)throw new Error("sanitizeHTML must return a string.");const i=e.toLowerCase();if(i.includes("onerror")||/<script\b/.test(i))throw new Error("sanitizeHTML must strip active HTML. Do not pass an identity function or a no-op.")}(r.sanitizeHTML);const o=t=>Q(t,d(r.kinds));let s=n?o(n):a();xt(s,r);let c=new Map(y(s).map(t=>[t.id,t]));const h=/* @__PURE__ */new Map,u=/* @__PURE__ */new Map,m=/* @__PURE__ */new Map,v=e=>{const i=t(e),n=t=>{t&&"object"==typeof t&&(Object.values(t).forEach(n),Object.freeze(t))};return n(i),i},w=t=>(c.get(t)?.children??s.pages.find(e=>e.id===t)?.items??[]).map(t=>t.id),x=()=>{c=new Map(y(s).map(t=>[t.id,t])),function(t){if(N>0)return t();T=++D,N++;try{return t()}finally{_()}}(()=>{for(const[t,e]of h){const i=c.get(t);ft(e.peek(),i)||(e.value=v(i))}for(const[t,e]of u)for(const[i,n]of e){const e=c.get(t)?.[i];ft(n.peek(),e)||(n.value=v(e))}for(const[t,e]of m){const i=w(t);ft(e.peek(),i)||(e.value=Object.freeze(i))}})},E=/* @__PURE__ */new Set,k=[],O=[];let Y=0;const j=[],B=/* @__PURE__ */new Map,A=/* @__PURE__ */new Map,I=()=>"hidden"===r.agentHistory,L=t=>t.startsWith("agent:"),R=(t,e)=>{let i=t.length-1;for(;i>=0&&!e(t[i].origin);)i--;return i},U=t=>{const e=/* @__PURE__ */new Map;for(const i of t.pages)for(const t of g(i.items))e.set(t.id,i.id);return e},P=()=>{Y=0,j.length=0,B.clear(),A.clear()},z=(e,i,n)=>(Y+=1,((t,e,i,n)=>{const r=new Map(y(t).map(t=>[t.id,t])),o=new Map(y(e).map(t=>[t.id,t])),s=U(t),a=U(e);for(const[d,c]of o){const t=r.get(d);t&&ft(t,c)||(B.set(d,{revision:i,origin:n,kind:c.kind,page:a.get(d)}),A.delete(d))}for(const[d,c]of r)o.has(d)||(B.delete(d),A.set(d,{revision:i,origin:n,kind:c.kind,page:s.get(d)}))})(i,n,Y,e.origin),j.push({...e,revision:Y,ops:t(e.ops)}),j.length>f.maxSessionLog&&j.shift(),Y),W=e=>{for(const i of E)try{i(t({ops:e.ops,inverse:e.inverse,origin:e.origin,label:e.label,revision:e.revision}))}catch{}};return{itemSignal(t){let e=h.get(t);return e||(e=H(v(c.get(t))),h.set(t,e)),e},fieldSignal(t,e){let i=u.get(t);i||(i=/* @__PURE__ */new Map,u.set(t,i));let n=i.get(e);return n||(n=H(v(c.get(t)?.[e])),i.set(e,n)),n},childrenSignal(t){let e=m.get(t);return e||(e=H(Object.freeze(w(t))),m.set(t,e)),e},apply(e,i={}){const n={ok:!1,created:[],errors:[],warnings:[]},o=i.origin??"api",a=!!i.lenient;if(r.readonly)return n.errors.push({index:0,code:"READONLY",message:"This document is read-only."}),n;const d="user"===o?f.maxItems:f.maxBatch;if(!Array.isArray(e)||e.length>d)return n.errors.push({index:0,code:"BATCH_LIMIT",message:`A batch must be an array of at most ${d} operations for origin ${o}.`}),n;let c;try{wt(e),c=t(s)}catch(_){return n.errors.push({index:0,code:"INVALID_DATA",message:String(_ instanceof Error?_.message:_)}),n}const h=o.startsWith("agent:")?b(c,e):{ops:e,warnings:[]};n.warnings.push(...h.warnings);const u=[],m=[],g=[],v=/* @__PURE__ */new Map,w=()=>new Set(u.filter(t=>"media.set"===t.op).map(t=>t.id)),M=h.ops;for(let s=0;s<M.length;s++){const e=a?t(c):void 0;try{const t=p(l,M[s]);if(t)throw new Error(t);const e=Mt(c,M[s],o,r);if("user"!==o&&n.created.length+e.created.length>f.maxBatch)throw new Error(`An agent batch may create at most ${f.maxBatch} items, including nested children.`);a&&xt(c,r,o,/* @__PURE__ */new Set([...w(),..."media.set"===e.op.op?[e.op.id]:[]])),u.push(e.op),m.unshift(...e.inverse),n.created.push(...e.created),e.created.forEach(t=>v.set(t,s))}catch(_){e&&(c=e),g.push({index:s,code:"INVALID_OP",message:`${M[s]?.op??"operation"} #${s+1}: ${_ instanceof Error?_.message:String(_)}`})}}if(!a&&!g.length)try{xt(c,r,o,w())}catch(_){g.push({index:Math.max(0,e.length-1),code:"INVALID_DOCUMENT",message:_ instanceof Error?_.message:String(_)})}if(!a&&g.length)return n.errors=g,n.created=[],n.warnings=[],n;if(a&&!u.length)return n.skipped=g,n.created=[],n;a&&g.length&&(n.skipped=g);const E=y(c),$=new Map(E.map(t=>[t.id,t]));for(const t of n.created){const e=$.get(t);e&&("connector"!==e.kind&&E.some(i=>i.id!==t&&!i.children?.length&&"connector"!==i.kind&&S(X(e,$),X(i,$)))&&n.warnings.push({index:v.get(t)??0,code:"OVERLAPS_EXISTING",message:`Item ${t} overlaps another item.`}))}if(n.ok=!0,i.dryRun||!u.length)return n;const Y={ops:u,inverse:m,before:s,after:c,origin:o,label:i.label};s=c,x();const j=k.at(-1);return i.merge&&j&&j.origin===o&&j.label===Y.label?(j.ops.push(...Y.ops),j.inverse.unshift(...Y.inverse),j.after=s):(k.push(Y),k.length>f.maxHistory&&k.shift()),O.length=0,W({...Y,revision:z({origin:o,label:i.label,ops:u},Y.before,s)}),n},get:e=>t(c.get(e)),query:t=>M(s,t),describe:t=>$(s,t,{written:B,removed:A}),changesSince(e,i){const n=Y;if(!Number.isFinite(e)||e>=n)return{cursor:n,since:e,changes:[]};const r=j[0];if(r&&e+1<r.revision)return{cursor:n,since:e,changes:[],truncated:!0};let o=j.filter(t=>t.revision>e);const s=i?.origin;return"agent"===s?o=o.filter(t=>L(t.origin)):void 0!==s&&(o=o.filter(t=>t.origin===s)),{cursor:n,since:e,changes:t(o)}},kindsSince:t=>e(t),toJSON(e){const n=t(s);if(!1===e?.compact)return n;for(const t of n.pages)t.items=t.items.map(t=>i(t,d(r.kinds)));return n},undo(e){if(r.readonly)return!1;const i=e?.origin?R(k,t=>t===e.origin):I()?R(k,t=>!L(t)):k.length-1;if(i<0)return!1;const n=k[i],o=i!==k.length-1?function(t,e){return t.inverse.flatMap(i=>{if("set"===i.op){const n=ut(t.before,i.id)?.item,r=ut(t.after,i.id)?.item,o=ut(e,i.id)?.item;if(!n||!r||!o)return[];const s=Et(n,r,o,["style","text","data"]);return Object.keys(s).length?[{...i,patch:s}]:[]}if("meta.set"===i.op){const n=Et(t.before.meta,t.after.meta,e.meta);return Object.keys(n).length?[{...i,patch:n}]:[]}if("remove"===i.op)return ut(e,i.id)?[i]:[];if("add"===i.op)return ut(e,String(i.item.id))?[]:[i];if("order"===i.op||"reparent"===i.op){const n=ut(e,i.id),r=ut(t.after,i.id);return n&&r&&n.parent?.id===r.parent?.id&&n.page.id===r.page.id?[i]:[]}if("media.set"===i.op||"media.remove"===i.op)return ft(e.media[i.id],t.after.media[i.id])?[i]:[];if("page.set"===i.op){pt(i.patch);const n=t.before.pages.find(t=>t.id===i.id),r=t.after.pages.find(t=>t.id===i.id),o=e.pages.find(t=>t.id===i.id);if(!n||!r||!o)return[];const s=Et(n,r,o);return delete s.items,Object.keys(s).length?[{...i,patch:s}]:[]}return[i]})}(n,s):n.inverse,a=t(s),d=[],c=[];try{for(const t of o){const e=Mt(a,t,"user",r);d.push(e.op),c.unshift(...e.inverse)}xt(a,r)}catch{return!1}const h={ops:d,inverse:c,before:s,after:a,origin:n.origin,label:n.label},f=s;s=a,x(),k.splice(i,1),O.push(h);const l=`Undo ${n.label??"change"}`;return W({ops:d,inverse:c,origin:n.origin,label:l,revision:z({origin:n.origin,label:l,ops:d},f,s)}),!0},redo(){if(r.readonly)return!1;const e=I()?R(O,t=>!L(t)):O.length-1;if(e<0)return!1;const i=O[e],n=t(s),o=[],a=[];try{for(const t of i.inverse){const e=Mt(n,t,"user",r);o.push(e.op),a.unshift(...e.inverse)}xt(n,r)}catch{return!1}const d={ops:o,inverse:a,before:s,after:n,origin:i.origin,label:i.label},c=s;s=n,x(),O.splice(e,1),k.push(d);const h=`Redo ${d.label??"change"}`;return W({ops:o,inverse:a,origin:d.origin,label:h,revision:z({origin:d.origin,label:h,ops:o},c,s)}),!0},load(t){if(r.readonly)throw new Error("This document is read-only.");const e=o(t);xt(e,r),s=e,x(),k.length=0,O.length=0,P(),W({ops:[],inverse:[],origin:"api",label:"Load document",revision:0})},clear(){if(r.readonly)throw new Error("This document is read-only.");s=a(),x(),k.length=0,O.length=0,P(),W({ops:[],inverse:[],origin:"api",label:"Clear document",revision:0})},on:(t,e)=>(E.add(e),()=>E.delete(e)),get revision(){return Y},get canUndo(){return I()?k.some(t=>!L(t.origin)):k.length>0},get canRedo(){return I()?O.some(t=>!L(t.origin)):O.length>0}}}function $t(t){return(t?.getData("text/uri-list")?.split(/\r?\n/).find(t=>t&&!t.startsWith("#")))?.trim()||t?.getData("text/plain")||""}function St(t,e,i=0,n=t.length-1,r=Xt){for(;n>i;){if(n-i>600){const o=n-i+1,s=e-i+1,a=Math.log(o),d=.5*Math.exp(2*a/3),c=.5*Math.sqrt(a*d*(o-d)/o)*(s-o/2<0?-1:1);St(t,e,Math.max(i,Math.floor(e-s*d/o+c)),Math.min(n,Math.floor(e+(o-s)*d/o+c)),r)}const o=t[e];let s=i,a=n;for(Ot(t,i,e),r(t[n],o)>0&&Ot(t,i,n);s<a;){for(Ot(t,s,a),s++,a--;r(t[s],o)<0;)s++;for(;r(t[a],o)>0;)a--}0===r(t[i],o)?Ot(t,i,a):(a++,Ot(t,a,n)),a<=e&&(i=a+1),e<=a&&(n=a-1)}}function Ot(t,e,i){const n=t[e];t[e]=t[i],t[i]=n}function Xt(t,e){return t<e?-1:t>e?1:0}var Yt=class{constructor(t=9){this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}all(){return this._all(this.data,[])}search(t){let e=this.data;const i=[];if(!Pt(t,e))return i;const n=this.toBBox,r=[];for(;e;){for(let o=0;o<e.children.length;o++){const s=e.children[o],a=e.leaf?n(s):s;Pt(t,a)&&(e.leaf?i.push(s):Ut(t,a)?this._all(s,i):r.push(s))}e=r.pop()}return i}collides(t){let e=this.data;if(!Pt(t,e))return!1;const i=[];for(;e;){for(let n=0;n<e.children.length;n++){const r=e.children[n],o=e.leaf?this.toBBox(r):r;if(Pt(t,o)){if(e.leaf||Ut(t,o))return!0;i.push(r)}}e=i.pop()}return!1}load(t){if(!t||!t.length)return this;if(t.length<this._minEntries){for(let e=0;e<t.length;e++)this.insert(t[e]);return this}let e=this._build(t.slice(),0,t.length-1,0);if(this.data.children.length)if(this.data.height===e.height)this._splitRoot(this.data,e);else{if(this.data.height<e.height){const t=this.data;this.data=e,e=t}this._insert(e,this.data.height-e.height-1,!0)}else this.data=e;return this}insert(t){return t&&this._insert(t,this.data.height-1),this}clear(){return this.data=zt([]),this}remove(t,e){if(!t)return this;let i=this.data;const n=this.toBBox(t),r=[],o=[];let s,a,d;for(;i||r.length;){if(i||(i=r.pop(),a=r[r.length-1],s=o.pop(),d=!0),i.leaf){const n=jt(t,i.children,e);if(-1!==n)return i.children.splice(n,1),r.push(i),this._condense(r),this}d||i.leaf||!Ut(i,n)?a?(s++,i=a.children[s],d=!1):i=null:(r.push(i),o.push(s),s=0,a=i,i=i.children[0])}return this}toBBox(t){return t}compareMinX(t,e){return t.minX-e.minX}compareMinY(t,e){return t.minY-e.minY}toJSON(){return this.data}fromJSON(t){return this.data=t,this}_all(t,e){const i=[];for(;t;)t.leaf?e.push(...t.children):i.push(...t.children),t=i.pop();return e}_build(t,e,i,n){const r=i-e+1;let o,s=this._maxEntries;if(r<=s)return o=zt(t.slice(e,i+1)),_t(o,this.toBBox),o;n||(n=Math.ceil(Math.log(r)/Math.log(s)),s=Math.ceil(r/Math.pow(s,n-1))),o=zt([]),o.leaf=!1,o.height=n;const a=Math.ceil(r/s),d=a*Math.ceil(Math.sqrt(s));Ht(t,e,i,d,this.compareMinX);for(let c=e;c<=i;c+=d){const e=Math.min(c+d-1,i);Ht(t,c,e,a,this.compareMinY);for(let i=c;i<=e;i+=a){const r=Math.min(i+a-1,e);o.children.push(this._build(t,i,r,n-1))}}return _t(o,this.toBBox),o}_chooseSubtree(t,e,i,n){for(;n.push(e),!e.leaf&&n.length-1!==i;){let i,n=1/0,r=1/0;for(let o=0;o<e.children.length;o++){const s=e.children[o],a=Lt(s),d=Tt(t,s)-a;d<r?(r=d,n=a<n?a:n,i=s):d===r&&a<n&&(n=a,i=s)}e=i||e.children[0]}return e}_insert(t,e,i){const n=i?t:this.toBBox(t),r=[],o=this._chooseSubtree(n,this.data,e,r);for(o.children.push(t),At(o,n);e>=0&&r[e].children.length>this._maxEntries;)this._split(r,e),e--;this._adjustParentBBoxes(n,r,e)}_split(t,e){const i=t[e],n=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,n);const o=this._chooseSplitIndex(i,r,n),s=zt(i.children.splice(o,i.children.length-o));s.height=i.height,s.leaf=i.leaf,_t(i,this.toBBox),_t(s,this.toBBox),e?t[e-1].children.push(s):this._splitRoot(i,s)}_splitRoot(t,e){this.data=zt([t,e]),this.data.height=t.height+1,this.data.leaf=!1,_t(this.data,this.toBBox)}_chooseSplitIndex(t,e,i){let n,r=1/0,o=1/0;for(let s=e;s<=i-e;s++){const e=Bt(t,0,s,this.toBBox),a=Bt(t,s,i,this.toBBox),d=Rt(e,a),c=Lt(e)+Lt(a);d<r?(r=d,n=s,o=c<o?c:o):d===r&&c<o&&(o=c,n=s)}return n||i-e}_chooseSplitAxis(t,e,i){const n=t.leaf?this.compareMinX:It,r=t.leaf?this.compareMinY:Nt;this._allDistMargin(t,e,i,n)<this._allDistMargin(t,e,i,r)&&t.children.sort(n)}_allDistMargin(t,e,i,n){t.children.sort(n);const r=this.toBBox,o=Bt(t,0,e,r),s=Bt(t,i-e,i,r);let a=Dt(o)+Dt(s);for(let d=e;d<i-e;d++){const e=t.children[d];At(o,t.leaf?r(e):e),a+=Dt(o)}for(let d=i-e-1;d>=e;d--){const e=t.children[d];At(s,t.leaf?r(e):e),a+=Dt(s)}return a}_adjustParentBBoxes(t,e,i){for(let n=i;n>=0;n--)At(e[n],t)}_condense(t){for(let e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children,e.splice(e.indexOf(t[i]),1)):this.clear():_t(t[i],this.toBBox)}};function jt(t,e,i){if(!i)return e.indexOf(t);for(let n=0;n<e.length;n++)if(i(t,e[n]))return n;return-1}function _t(t,e){Bt(t,0,t.children.length,e,t)}function Bt(t,e,i,n,r){r||(r=zt(null)),r.minX=1/0,r.minY=1/0,r.maxX=-1/0,r.maxY=-1/0;for(let o=e;o<i;o++){const e=t.children[o];At(r,t.leaf?n(e):e)}return r}function At(t,e){return t.minX=Math.min(t.minX,e.minX),t.minY=Math.min(t.minY,e.minY),t.maxX=Math.max(t.maxX,e.maxX),t.maxY=Math.max(t.maxY,e.maxY),t}function It(t,e){return t.minX-e.minX}function Nt(t,e){return t.minY-e.minY}function Lt(t){return(t.maxX-t.minX)*(t.maxY-t.minY)}function Dt(t){return t.maxX-t.minX+(t.maxY-t.minY)}function Tt(t,e){return(Math.max(e.maxX,t.maxX)-Math.min(e.minX,t.minX))*(Math.max(e.maxY,t.maxY)-Math.min(e.minY,t.minY))}function Rt(t,e){const i=Math.max(t.minX,e.minX),n=Math.max(t.minY,e.minY),r=Math.min(t.maxX,e.maxX),o=Math.min(t.maxY,e.maxY);return Math.max(0,r-i)*Math.max(0,o-n)}function Ut(t,e){return t.minX<=e.minX&&t.minY<=e.minY&&e.maxX<=t.maxX&&e.maxY<=t.maxY}function Pt(t,e){return e.minX<=t.maxX&&e.minY<=t.maxY&&e.maxX>=t.minX&&e.maxY>=t.minY}function zt(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function Ht(t,e,i,n,r){const o=[e,i];for(;o.length;){if((i=o.pop())-(e=o.pop())<=n)continue;const s=e+Math.ceil((i-e)/n/2)*n;St(t,s,e,i,r),o.push(e,s,s,i)}}function Wt(t,e,i=4,n,r){const o="function"==typeof r?r:void 0;if("group"===t.kind)return w(X(t,n,o),e);if("connector"===t.kind){const r=u(t,n,o).points;return r.slice(1).some((n,o)=>h(e,r[o],n)<=i+(t.style?.strokeWidth??2)/2)}const s=m(e,{x:t.x+t.w/2,y:t.y+t.h/2},-(t.rotation??0)),a=s.x-t.x,d=s.y-t.y,c=i+(t.style?.strokeWidth??2)/2,f=t.points??("line"===t.kind?[[0,0],[t.w,t.h]]:void 0);if(("line"===t.kind||"path"===t.kind)&&f){const e=f.map(([e,i])=>({x:t.x+e,y:t.y+i}));return t.closed&&O(s,e)||e.slice(1).some((t,i)=>h(s,e[i],t)<=c)}const l=!!t.text?.value||void 0!==t.style?.fill&&"none"!==t.style.fill||["note","text","image","video","link","html","group"].includes(t.kind),p="function"==typeof r?r(t):r;if(p){const t=Array.isArray(p)?p:[p],e={x:a,y:d};return t.some(t=>{if(!t.points.length)return!1;if(t.closed&&l&&O(e,t.points))return!0;const i=t.closed?[...t.points,t.points[0]]:t.points;return 1===i.length?h(e,i[0],i[0])<=c:i.slice(1).some((t,n)=>h(e,i[n],t)<=c)})}if("ellipse"===t.kind){const e=t.w/2,i=t.h/2;if(!e||!i)return!1;const n=Math.hypot((a-e)/e,(d-i)/i),r=c/Math.min(e,i);return l?n<=1+r:Math.abs(n-1)<=r}if("diamond"===t.kind){const e=[{x:t.w/2,y:0},{x:t.w,y:t.h/2},{x:t.w/2,y:t.h},{x:0,y:t.h/2}],i={x:a,y:d};return l&&O(i,e)||e.some((t,n)=>h(i,t,e[(n+1)%4])<=c)}return a>=-c&&a<=t.w+c&&d>=-c&&d<=t.h+c&&(l||a<=c||a>=t.w-c||d<=c||d>=t.h-c)}var Ct=class{outline;tree=new Yt;lookup=/* @__PURE__ */new Map;entries=/* @__PURE__ */new Map;constructor(t=[],e){this.outline=e,this.set(t)}set(t,e=this.outline){this.outline=e,this.tree.clear(),this.lookup=new Map(g(t).map(t=>[t.id,t]));const i=[];let n=0;const r=(t,e)=>{for(const o of t){const t=X(o,this.lookup,this.outline);i.push({minX:t.x,minY:t.y,maxX:t.x+t.w,maxY:t.y+t.h,item:o,order:n++,parents:e}),o.children&&r(o.children,[...e,o])}};r(t,[]),this.entries=new Map(i.map(t=>[t.item.id,t])),this.tree.load(i)}search(t){return this.tree.search({minX:t.x,minY:t.y,maxX:t.x+t.w,maxY:t.y+t.h}).filter(t=>!t.item.hidden&&!t.parents.some(t=>t.hidden)).sort((t,e)=>t.order-e.order).map(t=>t.item)}enclosed(t,e={}){const i=/* @__PURE__ */new Map,n=this.tree.search({minX:t.x,minY:t.y,maxX:t.x+t.w,maxY:t.y+t.h}),r=t=>{if(!(t.item.hidden||t.item.locked||e.ignore?.(t.item)||t.parents.some(t=>t.hidden||t.locked||e.ignore?.(t))))return{x:t.minX,y:t.minY,w:t.maxX-t.minX,h:t.maxY-t.minY}};for(const o of n){const n=r(o);if(!n||!x(t,n))continue;const s=o.parents.filter(t=>"group"===t.kind),a=s[s.findIndex(t=>t.id===e.enteredGroup)+1],d=a?this.entries.get(a.id):o;if(d.item.id===e.enteredGroup)continue;const c=d===o?n:r(d);c&&x(t,c)&&i.set(d.item.id,d)}return[...i.values()].sort((t,e)=>t.order-e.order).map(t=>t.item)}pick(t,e={}){const i=e.tolerance??6,n=this.tree.search({minX:t.x-i,minY:t.y-i,maxX:t.x+i,maxY:t.y+i}).sort((t,e)=>e.order-t.order);for(const r of n){if(r.item.hidden||e.ignore?.(r.item)||!e.includeLocked&&r.item.locked||r.parents.some(t=>t.hidden||e.ignore?.(t)||!e.includeLocked&&t.locked))continue;if(!Wt(r.item,t,i,this.lookup,e.outline??this.outline))continue;const n=r.parents.filter(t=>"group"===t.kind);return n[n.findIndex(t=>t.id===e.enteredGroup)+1]??r.item}}};export{kt as a,dt as c,ct as d,ht as f,$t as i,rt as l,H as m,Wt as n,et as o,Q as p,Yt as r,it as s,Ct as t,nt as u};
|
|
2
|
-
//# sourceMappingURL=picker-Dv_i4iNP.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"picker-Dv_i4iNP.js","names":[],"sources":["../../node_modules/@preact/signals-core/dist/signals-core.module.js","../../src/core/migrate.ts","../../src/core/links.ts","../../src/core/doc.ts","../../src/core/clipboard.ts","../../node_modules/quickselect/index.js","../../node_modules/rbush/index.js","../../src/geo/picker.ts"],"sourcesContent":["var i=Symbol.for(\"preact-signals\");function t(){if(!(v>1)){var i,t=!1;!function(){var i=c;c=void 0;while(void 0!==i){var t=i.S;if(t.v===i.v)for(var n=t.t;void 0!==n;n=n.x)if(n.i===i.i)n.i=t.i;i=i.o}}();while(void 0!==h){var n=h;h=void 0;s++;while(void 0!==n){var r=n.u;n.u=void 0;n.f&=-3;if(!(8&n.f)&&w(n))try{n.c()}catch(n){if(!t){i=n;t=!0}}n=r}}s=0;v--;if(t)throw i}else v--}function n(i){if(v>0)return i();e=++u;v++;try{return i()}finally{t()}}var r,o=void 0;function f(i){var t=o,n=r;o=void 0;r=void 0;try{return i()}finally{o=t;r=n}}var h=void 0,v=0,s=0,u=0,e=0,c=void 0,d=0;function a(i){if(void 0!==o){var t=i.n;if(void 0===t||t.t!==o){t={i:0,S:i,p:o.s,n:void 0,t:o,e:void 0,x:void 0,r:t};if(void 0!==o.s)o.s.n=t;o.s=t;i.n=t;if(32&o.f)i.S(t);return t}else if(-1===t.i){t.i=0;if(void 0!==t.n){t.n.p=t.p;if(void 0!==t.p)t.p.n=t.n;t.p=o.s;t.n=void 0;o.s.n=t;o.s=t}return t}}}function l(i,t){this.v=i;this.i=0;this.n=void 0;this.t=void 0;this.l=0;this.W=null==t?void 0:t.watched;this.Z=null==t?void 0:t.unwatched;this.name=null==t?void 0:t.name}l.prototype.brand=i;l.prototype.h=function(){return!0};l.prototype.S=function(i){var t=this,n=this.t;if(n!==i&&void 0===i.e){i.x=n;this.t=i;if(void 0!==n)n.e=i;else f(function(){var i;null==(i=t.W)||i.call(t)})}};l.prototype.U=function(i){var t=this;if(void 0!==this.t){var n=i.e,r=i.x;if(void 0!==n){n.x=r;i.e=void 0}if(void 0!==r){r.e=n;i.x=void 0}if(i===this.t){this.t=r;if(void 0===r)f(function(){var i;null==(i=t.Z)||i.call(t)})}}};l.prototype.subscribe=function(i){var t=this;return j(function(){var n=t.value;f(function(){return i(n)})},{name:\"sub\"})};l.prototype.valueOf=function(){return this.value};l.prototype.toString=function(){return this.value+\"\"};l.prototype.toJSON=function(){return this.value};l.prototype.peek=function(){var i=this;return f(function(){return i.value})};Object.defineProperty(l.prototype,\"value\",{get:function(){var i=a(this);if(void 0!==i)i.i=this.i;return this.v},set:function(i){if(i!==this.v){if(s>100)throw new Error(\"Cycle detected\");!function(i){if(0!==v&&0===s)if(i.l!==e){i.l=e;c={S:i,v:i.v,i:i.i,o:c}}}(this);this.v=i;this.i++;d++;v++;try{for(var n=this.t;void 0!==n;n=n.x)n.t.N()}finally{t()}}}});function y(i,t){return new l(i,t)}function w(i){for(var t=i.s;void 0!==t;t=t.n)if(t.S.i!==t.i||!t.S.h()||t.S.i!==t.i)return!0;return!1}function _(i){for(var t=i.s;void 0!==t;t=t.n){var n=t.S.n;if(void 0!==n)t.r=n;t.S.n=t;t.i=-1;if(void 0===t.n){i.s=t;break}}}function b(i){var t=i.s,n=void 0;while(void 0!==t){var r=t.p;if(-1===t.i){t.S.U(t);if(void 0!==r)r.n=t.n;if(void 0!==t.n)t.n.p=r}else n=t;t.S.n=t.r;if(void 0!==t.r)t.r=void 0;t=r}i.s=n}function p(i,t){l.call(this,void 0,t);this.x=i;this.s=void 0;this.g=d-1;this.f=4}p.prototype=new l;p.prototype.h=function(){this.f&=-3;if(1&this.f)return!1;if(32==(36&this.f))return!0;this.f&=-5;if(this.g===d)return!0;this.g=d;this.f|=1;if(this.i>0&&!w(this)){this.f&=-2;return!0}var i=o;try{_(this);o=this;var t=this.x();if(16&this.f||this.v!==t||0===this.i){this.v=t;this.f&=-17;this.i++}}catch(i){this.v=i;this.f|=16;this.i++}o=i;b(this);this.f&=-2;return!0};p.prototype.S=function(i){if(void 0===this.t){this.f|=36;for(var t=this.s;void 0!==t;t=t.n)t.S.S(t)}l.prototype.S.call(this,i)};p.prototype.U=function(i){if(void 0!==this.t){l.prototype.U.call(this,i);if(void 0===this.t){this.f&=-33;for(var t=this.s;void 0!==t;t=t.n)t.S.U(t)}}};p.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(var i=this.t;void 0!==i;i=i.x)i.t.N()}};Object.defineProperty(p.prototype,\"value\",{get:function(){if(1&this.f)throw new Error(\"Cycle detected\");var i=a(this);this.h();if(void 0!==i)i.i=this.i;if(16&this.f)throw this.v;return this.v}});function g(i,t){return new p(i,t)}function S(i){var n=i.m;i.m=void 0;if(\"function\"==typeof n){v++;var r=o;o=void 0;try{n()}catch(t){i.f&=-2;i.f|=8;m(i);throw t}finally{o=r;t()}}}function m(i){for(var t=i.s;void 0!==t;t=t.n)t.S.U(t);i.x=void 0;i.s=void 0;S(i)}function x(i){if(o!==this)throw new Error(\"Out-of-order effect\");b(this);o=i;this.f&=-2;if(8&this.f)m(this);t()}function E(i,t){this.x=i;this.m=void 0;this.s=void 0;this.u=void 0;this.f=32;this.name=null==t?void 0:t.name;if(r)r.push(this)}E.prototype.c=function(){var i=this.S();try{if(8&this.f)return;if(void 0===this.x)return;var t=this.x();if(\"function\"==typeof t)this.m=t}finally{i()}};E.prototype.S=function(){if(1&this.f)throw new Error(\"Cycle detected\");this.f|=1;this.f&=-9;S(this);_(this);v++;var i=o;o=this;return x.bind(this,i)};E.prototype.N=function(){if(!(2&this.f)){this.f|=2;this.u=h;h=this}};E.prototype.d=function(){this.f|=8;if(!(1&this.f))m(this)};E.prototype.dispose=function(){this.d()};function j(i,t){var n=new E(i,t);try{n.c()}catch(i){n.d();throw i}var r=n.d.bind(n);r[Symbol.dispose]=r;return r}function C(i){return function(){var t=arguments,r=this;return n(function(){return f(function(){return i.apply(r,[].slice.call(t))})})}}function O(){var i=r;r=[];return function(){var t=r;if(r&&i)i=i.concat(r);r=i;return t}}var k=function(i){for(var t in i){var n=i[t];if(\"function\"==typeof n)i[t]=C(n);else if(\"object\"==typeof n&&null!==n&&!(\"brand\"in n))k(n)}};function T(i){return function(){var t,n,o=O();try{n=i.apply(void 0,[].slice.call(arguments))}catch(i){r=void 0;throw i}finally{t=o()}k(n);n[Symbol.dispose]=C(function(){if(t)for(var i=0;i<t.length;i++)t[i].dispose();t=void 0});return n}}export{p as Computed,E as Effect,l as Signal,C as action,n as batch,g as computed,T as createModel,j as effect,y as signal,f as untracked};//# sourceMappingURL=signals-core.module.js.map\n","import type { AnnieDoc, Item, NewItem } from './types';\nimport { clone, normalizeItem } from './defaults';\nimport { flattenItems } from '../geo/box';\n\n/** Retired containers become editable groups; no child or visible label is discarded. */\nfunction convertContainers(pages: AnnieDoc['pages']) {\n const ids = new Set(\n flattenItems(pages.flatMap((page) => page.items ?? [])).map((item) => item.id),\n );\n const unique = (base: string) => {\n let id = base;\n for (let suffix = 2; ids.has(id); suffix++) id = `${base}_${suffix}`;\n ids.add(id);\n return id;\n };\n const convert = (input: NewItem): NewItem => {\n const children = input.children?.map(convert);\n if (input.kind !== 'frame') return { ...input, ...(children ? { children } : {}) };\n const { clip, title, text, style, ...rest } = input;\n const box = { x: input.x ?? 0, y: input.y ?? 0, w: input.w ?? 600, h: input.h ?? 400 };\n const parts: NewItem[] = [\n {\n kind: 'rect',\n id: unique(`${input.id}_background`),\n ...box,\n rotation: input.rotation,\n style: { fill: 'paper', strokeWidth: 1.5, ...style },\n ...(text ? { text } : {}),\n },\n ];\n const label = typeof title === 'string' ? title : input.name;\n if (label)\n parts.push({\n kind: 'text',\n id: unique(`${input.id}_label`),\n x: box.x,\n y: box.y - 30,\n w: box.w,\n h: 20,\n text: { value: label, size: 14, align: 'start', valign: 'top' },\n });\n return {\n ...rest,\n ...box,\n kind: 'group',\n name: input.name ?? label,\n children: [...parts, ...(children ?? [])],\n };\n };\n return pages.map((page) => ({\n ...page,\n items: Array.isArray(page.items) ? page.items.map(convert) : page.items,\n }));\n}\nexport const CURRENT_VERSION = 2;\nexport const migrations: Record<number, (doc: Record<string, unknown>) => Record<string, unknown>> =\n {\n 1: (doc) => ({\n ...doc,\n format: 'anniedrawing',\n version: 1,\n media: doc.media ?? {},\n meta: doc.meta ?? { title: 'Untitled board' },\n }),\n 2: (doc) => {\n const { sheets, ...rest } = doc;\n const pages = sheets ?? doc.pages;\n return {\n ...rest,\n version: 2,\n pages: Array.isArray(pages)\n ? pages.map((page: Record<string, unknown>) => ({\n ...page,\n name:\n typeof page.name === 'string' && /^Sheet [1-9]\\d*$/.test(page.name)\n ? page.name.replace(/^Sheet /, 'Page ')\n : page.name,\n }))\n : pages,\n };\n },\n };\n\n/** Load any supported version. Retired `frame` items become groups on every import. */\nexport function migrate(\n input: unknown,\n kindDefaults: Record<string, Partial<Item>> = {},\n): AnnieDoc {\n if (!input || typeof input !== 'object') throw new Error('A drawing must be a JSON object.');\n let doc = clone(input) as Record<string, unknown>;\n if (doc.format !== undefined && doc.format !== 'anniedrawing')\n throw new Error('This is not an AnnieDrawing document.');\n const version = doc.version ?? 0;\n if (typeof version !== 'number' || !Number.isInteger(version) || version < 0)\n throw new Error('Invalid drawing version.');\n if (version > CURRENT_VERSION)\n throw new Error(\n `Drawing version ${version} is newer than supported version ${CURRENT_VERSION}.`,\n );\n for (let next = version + 1; next <= CURRENT_VERSION; next++) doc = migrations[next](doc);\n const result = doc as unknown as AnnieDoc;\n if (Array.isArray(result.pages))\n result.pages = convertContainers(result.pages).map((page) => ({\n ...page,\n items: Array.isArray(page.items)\n ? page.items.map((item) => normalizeItem(item, kindDefaults))\n : page.items,\n }));\n return result;\n}\n","export type VideoProvider = 'youtube' | 'vimeo';\nexport interface VideoRef {\n provider: VideoProvider;\n id: string;\n hash?: string;\n}\nexport interface LinkPreview {\n title?: string;\n description?: string;\n image?: string;\n}\n\nconst YT = /^[\\w-]{11}$/;\n/** Raster image data URLs accepted as image items. */\nexport const IMAGE_DATA_URL = /^data:image\\/(png|jpeg|gif|webp|avif);base64,[a-z0-9+/=\\s]+$/i;\n/** Image media table sources, including SVG. */\nexport const MEDIA_DATA_URL =\n /^data:image\\/(png|jpeg|gif|webp|avif|svg\\+xml);base64,[a-z0-9+/=\\s]+$/i;\n\nexport function normalizeHref(value?: string): string | undefined {\n if (typeof value !== 'string') return;\n const text = value.trim();\n if (IMAGE_DATA_URL.test(text)) return text.replace(/\\s+/g, '');\n try {\n const url = new URL(text);\n if (url.protocol !== 'http:' && url.protocol !== 'https:') return;\n url.username = url.password = '';\n return url.href;\n } catch {\n return;\n }\n}\n\n/** True for http(s) URLs whose host is not loopback, link-local, ULA, or RFC1918. */\nexport function isPublicHttpUrl(value: string): boolean {\n try {\n const url = new URL(value);\n if (url.protocol !== 'http:' && url.protocol !== 'https:') return false;\n if (url.username || url.password) return false;\n return !isPrivateOrLocalHostname(url.hostname);\n } catch {\n return false;\n }\n}\n\nfunction isPrivateOrLocalHostname(host: string): boolean {\n const hostname = host\n .replace(/^\\[|\\]$/g, '')\n .replace(/\\.+$/, '')\n .toLowerCase();\n if (\n hostname === 'localhost' ||\n hostname === '0.0.0.0' ||\n hostname === '::' ||\n hostname.endsWith('.localhost') ||\n hostname.endsWith('.local') ||\n hostname.endsWith('.internal')\n )\n return true;\n const prefix = hostname.match(/^(\\d{1,3}(?:\\.\\d{1,3}){3})(?:\\.|$)/);\n if (prefix && isPrivateIPv4(prefix[1])) return true;\n const v4 = ipv4Address(hostname);\n if (v4) return isPrivateIPv4(v4);\n const v6 = parseIPv6(hostname);\n if (!v6) return false;\n if (v6.every((part) => part === 0)) return true;\n if (v6[7] === 1 && v6.slice(0, 7).every((part) => part === 0)) return true;\n if ((v6[0] & 0xffc0) === 0xfe80 || (v6[0] & 0xfe00) === 0xfc00 || (v6[0] & 0xff00) === 0xff00)\n return true;\n const mapped = mappedIPv4(v6);\n return mapped ? isPrivateIPv4(mapped) : false;\n}\n\nfunction isPrivateIPv4(value: string): boolean {\n const parts = value.split('.').map(Number);\n if (parts.length !== 4 || parts.some((n) => n > 255)) return false;\n const [a, b] = parts;\n if (a === 0 || a === 10 || a === 127) return true;\n if (a === 169 && b === 254) return true;\n if (a === 192 && b === 168) return true;\n if (a === 172 && b >= 16 && b <= 31) return true;\n if (a === 100 && b >= 64 && b <= 127) return true;\n if (a === 198 && (b === 18 || b === 19)) return true;\n return a >= 224;\n}\n\nfunction ipv4Address(hostname: string): string | undefined {\n if (/^\\d{1,3}(?:\\.\\d{1,3}){3}$/.test(hostname)) return hostname;\n const v6 = parseIPv6(hostname);\n return v6 ? mappedIPv4(v6) : undefined;\n}\n\nfunction mappedIPv4(groups: number[]): string | undefined {\n const last = `${(groups[6] >> 8) & 255}.${groups[6] & 255}.${(groups[7] >> 8) & 255}.${groups[7] & 255}`;\n if (\n groups[0] === 0 &&\n groups[1] === 0 &&\n groups[2] === 0 &&\n groups[3] === 0 &&\n groups[4] === 0 &&\n groups[5] === 0xffff\n )\n return last;\n if (groups[0] === 0x64 && groups[1] === 0xff9b && groups.slice(2, 6).every((part) => part === 0))\n return last;\n return;\n}\n\nfunction parseIPv6(host: string): number[] | undefined {\n if (!host.includes(':')) return;\n let value = host;\n const dotted = value.match(/:(\\d{1,3}(?:\\.\\d{1,3}){3})$/);\n if (dotted) {\n const [a, b, c, d] = dotted[1].split('.').map(Number);\n if ([a, b, c, d].some((n) => n > 255)) return;\n value = `${value.slice(0, -dotted[1].length)}${(a << 8) | b}:${(c << 8) | d}`;\n }\n const halves = value.split('::');\n if (halves.length > 2) return;\n const parse = (side: string | undefined) =>\n side\n ? side\n .split(':')\n .filter(Boolean)\n .map((part) => (/^[0-9a-f]{1,4}$/i.test(part) ? parseInt(part, 16) : NaN))\n : [];\n const head = parse(halves[0]);\n const tail = halves.length === 2 ? parse(halves[1]) : [];\n if (head.some(Number.isNaN) || tail.some(Number.isNaN)) return;\n if (halves.length === 1) return head.length === 8 ? head : undefined;\n const missing = 8 - head.length - tail.length;\n if (missing < 0) return;\n return [...head, ...Array(missing).fill(0), ...tail];\n}\n\nexport function hostnameOf(href: string): string {\n try {\n return new URL(href).hostname.replace(/^www\\./, '');\n } catch {\n return href;\n }\n}\n\nexport function parseVideo(href?: string): VideoRef | undefined {\n const normalized = normalizeHref(href);\n if (!normalized || normalized.startsWith('data:')) return;\n const url = new URL(normalized);\n const host = url.hostname.replace(/^(www|m)\\./, '');\n const parts = url.pathname.split('/').filter(Boolean);\n if (host.includes('youtu')) {\n const id =\n host === 'youtu.be'\n ? parts[0]\n : (url.searchParams.get('v') ??\n parts[parts.findIndex((part) => /^(embed|shorts|live|v)$/.test(part)) + 1]);\n if (id && YT.test(id)) return { provider: 'youtube', id };\n }\n if (!/^(player\\.)?vimeo\\.com$/.test(host)) return;\n const start = parts[0] === 'video' || host.startsWith('player') ? 1 : 0;\n const id = parts[start];\n if (!id || !/^\\d+$/.test(id)) return;\n const hash = url.searchParams.get('h') ?? parts[start + 1]?.match(/^[\\w]+$/)?.[0];\n return { provider: 'vimeo', id, ...(hash ? { hash } : {}) };\n}\n\nexport function videoEmbed(href?: string): string | undefined {\n const video = parseVideo(href);\n if (!video) return;\n return video.provider === 'youtube'\n ? `https://www.youtube-nocookie.com/embed/${video.id}?rel=0`\n : `https://player.vimeo.com/video/${video.id}${video.hash ? `?h=${encodeURIComponent(video.hash)}` : ''}`;\n}\n","import { batch, signal, type Signal, type ReadonlySignal } from '@preact/signals-core';\nimport type {\n AnnieDoc,\n ApplyIssue,\n ApplyResult,\n ChangeEvent,\n ChangeSlice,\n DocModel,\n DocOptions,\n Item,\n NewItem,\n Op,\n Page,\n Style,\n} from './types';\nimport { kindsSince } from './catalog';\nimport {\n aliasStyle,\n clone,\n defaultDoc,\n kindDefaultsFrom,\n minimalItem,\n normalizeItem,\n storedEndpoint,\n} from './defaults';\nimport type { ItemStamp } from '../agent/describe';\nimport { allItems, detachMissingEndpoints, pageRoots, remapAgentCreateIds } from './item';\nimport { DocumentSchema, LIMITS, OpSchema, schemaError } from './schema';\nimport { migrate } from './migrate';\nimport { pageId } from './ids';\nimport { flattenItems, intersects, itemBounds } from '../geo/box';\nimport { placeItem } from '../agent/place';\nimport { queryDoc } from '../agent/query';\nimport { describeDoc } from '../agent/describe';\nimport { MEDIA_DATA_URL, normalizeHref, parseVideo } from './links';\ninterface Location {\n item: Item;\n list: Item[];\n index: number;\n parent?: Item;\n page: Page;\n}\ninterface Entry {\n ops: Op[];\n inverse: Op[];\n before: AnnieDoc;\n after: AnnieDoc;\n origin: string;\n label?: string;\n}\nconst equal = (a: unknown, b: unknown) => JSON.stringify(a) === JSON.stringify(b);\nfunction escapeHtml(html: string, sanitize?: DocOptions['sanitizeHTML']): string {\n return sanitize\n ? sanitize(html)\n : html\n .replace(/&(?!(?:amp|lt|gt|quot|apos|#\\d+|#x[\\da-f]+);)/gi, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\nconst SANITIZER_PROBE = '<img src=\"x\" onerror=\"alert(1)\"><script>alert(1)</script>';\nfunction assertEffectiveSanitizer(sanitize: (html: string) => string): void {\n let out: string;\n try {\n out = sanitize(SANITIZER_PROBE);\n } catch (error) {\n throw new Error(\n `sanitizeHTML failed on a safety probe (${error instanceof Error ? error.message : error}).`,\n );\n }\n if (typeof out !== 'string') throw new Error('sanitizeHTML must return a string.');\n const lower = out.toLowerCase();\n if (lower.includes('onerror') || /<script\\b/.test(lower))\n throw new Error(\n 'sanitizeHTML must strip active HTML. Do not pass an identity function or a no-op.',\n );\n}\nfunction assertPagePatch(patch: object): void {\n if (Object.keys(patch).some((key) => key !== 'name' && key !== 'background'))\n throw new Error(\n 'page.set may only update name and background. Use item operations to change page content.',\n );\n}\nfunction locate(doc: AnnieDoc, id: string): Location | undefined {\n for (const page of doc.pages) {\n const walk = (list: Item[], parent?: Item): Location | undefined => {\n for (let index = 0; index < list.length; index++) {\n const item = list[index];\n if (item.id === id) return { item, list, index, parent, page };\n if (item.children) {\n const found = walk(item.children, item);\n if (found) return found;\n }\n }\n };\n const result = walk(page.items);\n if (result) return result;\n }\n}\nfunction requireItem(doc: AnnieDoc, id: string): Location {\n const result = locate(doc, id);\n if (!result) {\n const candidates = allItems(doc)\n .map((i) => i.id)\n .slice(0, 5);\n throw new Error(\n `Item ${id} does not exist.${candidates.length ? ` Known ids: ${candidates.join(', ')}.` : ''}`,\n );\n }\n return result;\n}\nfunction mergePatch<T extends object>(target: T, patch: Partial<T>, nested: string[] = []): T {\n const next = { ...target } as Record<string, unknown>;\n for (const [key, value] of Object.entries(patch)) {\n if (value === undefined) {\n delete next[key];\n continue;\n }\n if (nested.includes(key) && value && typeof value === 'object' && !Array.isArray(value)) {\n const old = next[key];\n next[key] = mergePatch(old && typeof old === 'object' ? (old as object) : {}, value);\n } else next[key] = clone(value);\n }\n return next as T;\n}\nfunction inversePatch(\n target: object,\n patch: object,\n nested: string[] = [],\n): Record<string, unknown> {\n const before = target as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(patch)) {\n const value = (patch as Record<string, unknown>)[key];\n result[key] =\n nested.includes(key) &&\n value &&\n typeof value === 'object' &&\n before[key] &&\n typeof before[key] === 'object'\n ? inversePatch(before[key] as object, value as object)\n : clone(before[key]);\n }\n return result;\n}\nfunction assertSafeJSON(value: unknown, depth = 0, seen = new Set<unknown>()): void {\n if (depth > LIMITS.maxJsonDepth)\n throw new Error(`Document data exceeds maximum nesting depth ${LIMITS.maxJsonDepth}.`);\n if (\n value === undefined ||\n value === null ||\n typeof value === 'boolean' ||\n typeof value === 'string'\n )\n return;\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) throw new Error('All numbers must be finite.');\n return;\n }\n if (typeof value !== 'object') throw new Error('Document values must be plain JSON data.');\n if (seen.has(value)) throw new Error('Circular document data is not supported.');\n const proto = Object.getPrototypeOf(value);\n if (!Array.isArray(value) && proto !== Object.prototype && proto !== null)\n throw new Error('Document values must be plain JSON objects.');\n seen.add(value);\n for (const [key, child] of Object.entries(value)) {\n if (['__proto__', 'prototype', 'constructor'].includes(key))\n throw new Error(`Unsafe property ${key}.`);\n assertSafeJSON(child, depth + 1, seen);\n }\n seen.delete(value);\n}\nfunction validateDoc(\n doc: AnnieDoc,\n options: DocOptions = {},\n origin = 'user',\n restrictedMedia?: Set<string>,\n): void {\n assertSafeJSON(doc);\n const error = schemaError(DocumentSchema, doc);\n if (error) throw new Error(error);\n const ids = new Set<string>(),\n pageIds = new Set<string>();\n let count = 0;\n for (const page of doc.pages) {\n if (pageIds.has(page.id)) throw new Error(`Duplicate page id ${page.id}.`);\n pageIds.add(page.id);\n const walk = (list: Item[], depth: number) => {\n if (depth > LIMITS.maxDepth) throw new Error('Item nesting is too deep.');\n for (const item of list) {\n count++;\n if (typeof item.id !== 'string' || !item.id)\n throw new Error('Every item must have a stable string id.');\n for (const field of ['x', 'y', 'w', 'h'] as const)\n if (typeof item[field] !== 'number' || !Number.isFinite(item[field]))\n throw new Error(`Item ${item.id} requires finite ${field}.`);\n if (ids.has(item.id)) throw new Error(`Duplicate item id ${item.id}.`);\n ids.add(item.id);\n if (item.children && item.kind !== 'group')\n throw new Error(`Only groups may contain children (${item.id}).`);\n if (item.kind === 'connector' && (!item.from || !item.to))\n throw new Error(`Connector ${item.id} needs both from and to endpoints.`);\n if (item.kind === 'image' && (!item.media || !doc.media[item.media]))\n throw new Error(`Image ${item.id} references missing media ${item.media ?? '(unset)'}.`);\n if (item.kind === 'video' || item.kind === 'link' || item.href !== undefined) {\n if (!normalizeHref(item.href)) throw new Error(`Bad href (${item.id}).`);\n if (item.kind === 'video' && !parseVideo(item.href))\n throw new Error(`Bad video (${item.id}).`);\n }\n const customSchema = options.kinds?.find((kind) => kind.kind === item.kind)?.schema;\n if (customSchema) {\n const customError = schemaError(customSchema as Parameters<typeof schemaError>[0], item);\n if (customError) throw new Error(`${item.kind} ${item.id}: ${customError}`);\n }\n if (item.children) walk(item.children, depth + 1);\n }\n };\n walk(page.items, 0);\n }\n if (count > LIMITS.maxItems)\n throw new Error(`A document may contain at most ${LIMITS.maxItems} items.`);\n for (const page of doc.pages) {\n const local = flattenItems(page.items),\n localIds = new Map(local.map((i) => [i.id, i]));\n for (const item of local)\n for (const endpoint of [item.from, item.to])\n if (endpoint && 'item' in endpoint) {\n const target = localIds.get(endpoint.item);\n if (!target)\n throw new Error(`Endpoint ${endpoint.item} does not exist on page ${page.id}.`);\n if (target.kind === 'connector' || target.id === item.id)\n throw new Error(\n `Connector endpoints must attach to a non-connector item (${endpoint.item}).`,\n );\n }\n }\n for (const [mediaId, media] of Object.entries(doc.media)) {\n const data = MEDIA_DATA_URL.test(media.src);\n let url: URL | undefined;\n try {\n url = new URL(media.src);\n } catch {\n /* Validation below reports a useful error. */\n }\n if (!data && (!url || !['http:', 'https:'].includes(url.protocol)))\n throw new Error('Images must use an image data URL or an HTTP(S) URL.');\n if (url && (url.username || url.password))\n throw new Error('Image URLs must not include credentials.');\n if (\n origin !== 'user' &&\n (!restrictedMedia || restrictedMedia.has(mediaId)) &&\n !data &&\n url &&\n !options.allowedImageOrigins?.includes(url.origin)\n )\n throw new Error(\n `Image origin ${url.origin} is not allowed. Pass allowedImageOrigins when creating the board.`,\n );\n }\n}\nfunction cleanHref(item: Item): void {\n if (item.href === undefined) return;\n const href = normalizeHref(item.href);\n if (!href) throw new Error(`Bad href (${item.id}).`);\n item.href = href;\n item.children?.forEach(cleanHref);\n}\nfunction sanitizeAgentItems(item: Item, sanitizeHTML?: DocOptions['sanitizeHTML']): void {\n if (item.html !== undefined) item.html = escapeHtml(item.html, sanitizeHTML);\n if (item.mount) delete item.mount;\n item.children?.forEach((child) => sanitizeAgentItems(child, sanitizeHTML));\n}\nfunction perform(\n doc: AnnieDoc,\n raw: Op,\n origin: string,\n options: DocOptions = {},\n): {\n op: Op;\n inverse: Op[];\n created: string[];\n} {\n const op = clone(raw),\n kindDefaults = kindDefaultsFrom(options.kinds);\n const outline = (item: Item) =>\n options.kinds?.find((kind) => kind.kind === item.kind)?.outline?.(item);\n let inverse: Op[] = [],\n created: string[] = [];\n if (op.op === 'add') {\n let item = normalizeItem(op.item, kindDefaults);\n if (origin !== 'user') sanitizeAgentItems(item, options.sanitizeHTML);\n cleanHref(item);\n const parentId = op.parent ?? op.place?.inside,\n parent = parentId ? requireItem(doc, parentId) : undefined;\n if (parent && parent.item.kind !== 'group')\n throw new Error(`Parent ${parentId} must be a group.`);\n const page = parent?.page ?? doc.pages.find((page) => (op.page ? page.id === op.page : true));\n if (!page) throw new Error(`Page ${op.page ?? '(first)'} does not exist.`);\n if (parent && op.page && op.page !== parent.page.id)\n throw new Error('Parent and page must refer to the same page.');\n if (op.place) {\n const gap =\n op.place.gap ?? (origin.startsWith('agent:') ? (options.agentPlaceGap ?? 32) : 32);\n item = placeItem(item, { ...op.place, gap }, flattenItems(page.items));\n }\n const list = parent ? (parent.item.children ??= []) : page.items;\n if (op.index !== undefined && op.index > list.length)\n throw new Error('Insert index is outside the target list.');\n list.splice(op.index ?? list.length, 0, item);\n inverse = [{ op: 'remove', id: item.id }];\n created = flattenItems([item]).map((i) => i.id);\n return {\n op: {\n op: 'add',\n item: clone(item),\n page: page.id,\n ...(parent ? { parent: parent.item.id } : {}),\n ...(op.index !== undefined ? { index: op.index } : {}),\n },\n inverse,\n created,\n };\n }\n if (op.op === 'set') {\n const at = requireItem(doc, op.id);\n const oldLookup = Object.hasOwn(op.patch, 'children')\n ? new Map(allItems(doc).map((item) => [item.id, item]))\n : undefined;\n if (Object.hasOwn(op.patch, 'id') && op.patch.id !== op.id)\n throw new Error('Item ids cannot be changed.');\n inverse = [\n { op: 'set', id: op.id, patch: inversePatch(at.item, op.patch, ['style', 'text', 'data']) },\n ];\n const incoming = clone(op.patch);\n const { from, to, style, children, ...rest } = incoming;\n const patch: Partial<Item> = { ...(rest as Partial<Item>) };\n if (Object.hasOwn(incoming, 'style')) patch.style = aliasStyle(style as Style | undefined);\n if (Object.hasOwn(incoming, 'from')) patch.from = storedEndpoint(from);\n if (Object.hasOwn(incoming, 'to')) patch.to = storedEndpoint(to);\n if (Object.hasOwn(incoming, 'children'))\n patch.children = children\n ? (children as NewItem[]).map((child) => normalizeItem(child, kindDefaults))\n : undefined;\n for (const field of ['kind', 'x', 'y', 'w', 'h'] as const)\n if (Object.hasOwn(patch, field) && patch[field] === undefined)\n throw new Error(`Required field ${field} cannot be deleted.`);\n if (typeof patch.href === 'string') {\n const href = normalizeHref(patch.href);\n if (!href) throw new Error(`Bad href (${op.id}).`);\n patch.href = href;\n }\n if (origin !== 'user') {\n if (typeof patch.html === 'string') patch.html = escapeHtml(patch.html, options.sanitizeHTML);\n if (Object.hasOwn(patch, 'mount')) delete patch.mount;\n if (patch.children)\n patch.children.forEach((child) => sanitizeAgentItems(child, options.sanitizeHTML));\n }\n at.list[at.index] = mergePatch(at.item, patch, ['style', 'text', 'data']);\n if (oldLookup) {\n const newDescendants = new Set(\n flattenItems(at.list[at.index].children ?? []).map((item) => item.id),\n );\n created = [...newDescendants].filter((id) => !oldLookup.has(id));\n inverse.push(...detachMissingEndpoints(pageRoots(doc), oldLookup, outline));\n }\n return { op: { ...op, patch }, inverse, created };\n }\n if (op.op === 'remove') {\n const at = requireItem(doc, op.id),\n lookup = new Map(allItems(doc).map((i) => [i.id, i]));\n inverse = [\n {\n op: 'add',\n item: clone(at.item),\n page: at.page.id,\n ...(at.parent ? { parent: at.parent.id } : {}),\n index: at.index,\n },\n ];\n at.list.splice(at.index, 1);\n inverse.push(...detachMissingEndpoints(pageRoots(doc), lookup, outline));\n }\n if (op.op === 'order') {\n const at = requireItem(doc, op.id),\n to =\n typeof op.to === 'number'\n ? op.to\n : op.to === 'front'\n ? at.list.length - 1\n : op.to === 'back'\n ? 0\n : op.to === 'forward'\n ? Math.min(at.list.length - 1, at.index + 1)\n : Math.max(0, at.index - 1);\n if (to >= at.list.length) throw new Error('Order index is outside the item list.');\n at.list.splice(at.index, 1);\n at.list.splice(to, 0, at.item);\n inverse = [{ op: 'order', id: op.id, to: at.index }];\n }\n if (op.op === 'reparent') {\n const at = requireItem(doc, op.id),\n parent = op.parent ? requireItem(doc, op.parent) : undefined;\n if (parent && parent.item.kind !== 'group') throw new Error('New parent must be a group.');\n if (parent && flattenItems([at.item]).some((i) => i.id === parent.item.id))\n throw new Error('An item cannot be placed inside itself or a descendant.');\n if (parent && parent.page.id !== at.page.id)\n throw new Error('Reparenting across pages is not supported.');\n inverse = [{ op: 'reparent', id: op.id, parent: at.parent?.id ?? null, index: at.index }];\n at.list.splice(at.index, 1);\n const list = parent ? (parent.item.children ??= []) : at.page.items;\n if (op.index !== undefined && op.index > list.length)\n throw new Error('Reparent index is outside the target list.');\n list.splice(op.index ?? list.length, 0, at.item);\n }\n if (op.op === 'page.add') {\n const page: Page = {\n ...op.page,\n id: op.page.id ?? pageId(),\n items: (op.page.items ?? []).map((item) => normalizeItem(item, kindDefaults)),\n };\n if (origin !== 'user')\n page.items.forEach((item) => sanitizeAgentItems(item, options.sanitizeHTML));\n if (op.index !== undefined && op.index > doc.pages.length)\n throw new Error('Page insert index is outside the page list.');\n doc.pages.splice(op.index ?? doc.pages.length, 0, page);\n inverse = [{ op: 'page.remove', id: page.id }];\n created = flattenItems(page.items).map((i) => i.id);\n return {\n op: {\n op: 'page.add',\n page: clone(page),\n ...(op.index !== undefined ? { index: op.index } : {}),\n },\n inverse,\n created,\n };\n }\n if (op.op === 'page.set') {\n assertPagePatch(op.patch);\n const page = doc.pages.find((page) => page.id === op.id);\n if (!page) throw new Error(`Page ${op.id} does not exist.`);\n inverse = [{ op: 'page.set', id: op.id, patch: inversePatch(page, op.patch) }];\n Object.assign(page, mergePatch(page, op.patch));\n for (const key of Object.keys(op.patch))\n if ((op.patch as Record<string, unknown>)[key] === undefined)\n delete (page as unknown as Record<string, unknown>)[key];\n }\n if (op.op === 'page.remove') {\n const index = doc.pages.findIndex((page) => page.id === op.id);\n if (index < 0) throw new Error(`Page ${op.id} does not exist.`);\n const [page] = doc.pages.splice(index, 1);\n inverse = [{ op: 'page.add', page: clone(page), index }];\n }\n if (op.op === 'meta.set') {\n inverse = [{ op: 'meta.set', patch: inversePatch(doc.meta, op.patch) }];\n doc.meta = mergePatch(doc.meta, op.patch);\n }\n if (op.op === 'media.set') {\n inverse = doc.media[op.id]\n ? [{ op: 'media.set', id: op.id, media: clone(doc.media[op.id]) }]\n : [{ op: 'media.remove', id: op.id }];\n doc.media[op.id] = clone(op.media);\n }\n if (op.op === 'media.remove') {\n if (!doc.media[op.id]) throw new Error(`Media ${op.id} does not exist.`);\n inverse = [{ op: 'media.set', id: op.id, media: clone(doc.media[op.id]) }];\n delete doc.media[op.id];\n }\n return { op, inverse, created };\n}\nfunction revertedPatch(\n before: Record<string, unknown>,\n after: Record<string, unknown>,\n current: Record<string, unknown>,\n nested: string[] = [],\n): Record<string, unknown> {\n const patch: Record<string, unknown> = {};\n for (const key of new Set([...Object.keys(before), ...Object.keys(after)])) {\n if (equal(before[key], after[key])) continue;\n if (\n nested.includes(key) &&\n current[key] &&\n typeof current[key] === 'object' &&\n (before[key] === undefined || typeof before[key] === 'object') &&\n (after[key] === undefined || typeof after[key] === 'object')\n ) {\n const sub = revertedPatch(\n (before[key] ?? {}) as Record<string, unknown>,\n (after[key] ?? {}) as Record<string, unknown>,\n current[key] as Record<string, unknown>,\n );\n if (Object.keys(sub).length) patch[key] = sub;\n } else if (equal(current[key], after[key])) patch[key] = clone(before[key]);\n }\n return patch;\n}\nfunction selectiveInverse(entry: Entry, current: AnnieDoc): Op[] {\n return entry.inverse.flatMap<Op>((op) => {\n if (op.op === 'set') {\n const before = locate(entry.before, op.id)?.item,\n after = locate(entry.after, op.id)?.item,\n now = locate(current, op.id)?.item;\n if (!before || !after || !now) return [];\n const patch = revertedPatch(before, after, now, ['style', 'text', 'data']);\n return Object.keys(patch).length ? [{ ...op, patch }] : [];\n }\n if (op.op === 'meta.set') {\n const patch = revertedPatch(entry.before.meta, entry.after.meta, current.meta);\n return Object.keys(patch).length ? [{ ...op, patch }] : [];\n }\n if (op.op === 'remove') return locate(current, op.id) ? [op] : [];\n if (op.op === 'add') return locate(current, String(op.item.id)) ? [] : [op];\n if (op.op === 'order' || op.op === 'reparent') {\n const now = locate(current, op.id),\n after = locate(entry.after, op.id);\n if (!now || !after || now.parent?.id !== after.parent?.id || now.page.id !== after.page.id)\n return [];\n return [op];\n }\n if (op.op === 'media.set' || op.op === 'media.remove')\n return equal(current.media[op.id], entry.after.media[op.id]) ? [op] : [];\n if (op.op === 'page.set') {\n assertPagePatch(op.patch);\n const before = entry.before.pages.find((page) => page.id === op.id),\n after = entry.after.pages.find((page) => page.id === op.id),\n now = current.pages.find((page) => page.id === op.id);\n if (!before || !after || !now) return [];\n const patch = revertedPatch(\n before as unknown as Record<string, unknown>,\n after as unknown as Record<string, unknown>,\n now as unknown as Record<string, unknown>,\n );\n delete patch.items;\n return Object.keys(patch).length ? [{ ...op, patch }] : [];\n }\n return [op];\n });\n}\nexport function createDoc(initial?: AnnieDoc, options: DocOptions = {}): DocModel {\n if (options.sanitizeHTML) assertEffectiveSanitizer(options.sanitizeHTML);\n const loadInitial = (doc: AnnieDoc) => {\n return migrate(doc, kindDefaultsFrom(options.kinds));\n };\n let state = initial ? loadInitial(initial) : defaultDoc();\n validateDoc(state, options);\n let index = new Map(allItems(state).map((item) => [item.id, item]));\n const observedItems = new Map<string, Signal<Item | undefined>>(),\n observedFields = new Map<string, Map<keyof Item, Signal<unknown>>>(),\n observedChildren = new Map<string, Signal<readonly string[]>>();\n const frozenCopy = <T>(value: T): T => {\n const result = clone(value);\n const freeze = (node: unknown) => {\n if (node && typeof node === 'object') {\n Object.values(node).forEach(freeze);\n Object.freeze(node);\n }\n };\n freeze(result);\n return result;\n };\n const childIds = (id: string) =>\n (index.get(id)?.children ?? state.pages.find((page) => page.id === id)?.items ?? []).map(\n (item) => item.id,\n );\n const reindex = () => {\n index = new Map(allItems(state).map((item) => [item.id, item]));\n batch(() => {\n for (const [id, observed] of observedItems) {\n const next = index.get(id);\n if (!equal(observed.peek(), next)) observed.value = frozenCopy(next);\n }\n for (const [id, fields] of observedFields)\n for (const [key, observed] of fields) {\n const next = index.get(id)?.[key];\n if (!equal(observed.peek(), next)) observed.value = frozenCopy(next);\n }\n for (const [id, observed] of observedChildren) {\n const next = childIds(id);\n if (!equal(observed.peek(), next)) observed.value = Object.freeze(next);\n }\n });\n };\n const listeners = new Set<(event: ChangeEvent) => void>(),\n history: Entry[] = [],\n future: Entry[] = [];\n let revision = 0;\n const sessionLog: ChangeSlice[] = [];\n const written = new Map<string, ItemStamp>(),\n removed = new Map<string, ItemStamp>();\n const hideAgent = () => options.agentHistory === 'hidden';\n const agentOrigin = (origin: string) => origin.startsWith('agent:');\n const walkBack = (stack: { origin: string }[], keep: (origin: string) => boolean) => {\n let index = stack.length - 1;\n while (index >= 0 && !keep(stack[index].origin)) index--;\n return index;\n };\n const pageOf = (doc: AnnieDoc) => {\n const map = new Map<string, string>();\n for (const page of doc.pages)\n for (const item of flattenItems(page.items)) map.set(item.id, page.id);\n return map;\n };\n const stampTransition = (before: AnnieDoc, after: AnnieDoc, rev: number, origin: string) => {\n const beforeItems = new Map(allItems(before).map((item) => [item.id, item])),\n afterItems = new Map(allItems(after).map((item) => [item.id, item])),\n beforePages = pageOf(before),\n afterPages = pageOf(after);\n for (const [id, item] of afterItems) {\n const prev = beforeItems.get(id);\n if (!prev || !equal(prev, item)) {\n written.set(id, { revision: rev, origin, kind: item.kind, page: afterPages.get(id)! });\n removed.delete(id);\n }\n }\n for (const [id, item] of beforeItems) {\n if (!afterItems.has(id)) {\n written.delete(id);\n removed.set(id, { revision: rev, origin, kind: item.kind, page: beforePages.get(id)! });\n }\n }\n };\n const resetSession = () => {\n revision = 0;\n sessionLog.length = 0;\n written.clear();\n removed.clear();\n };\n const commitSession = (\n slice: Omit<ChangeSlice, 'revision'>,\n before: AnnieDoc,\n after: AnnieDoc,\n ) => {\n revision += 1;\n stampTransition(before, after, revision, slice.origin);\n sessionLog.push({ ...slice, revision, ops: clone(slice.ops) });\n if (sessionLog.length > LIMITS.maxSessionLog) sessionLog.shift();\n return revision;\n };\n const emit = (\n entry: Pick<Entry, 'ops' | 'inverse' | 'origin' | 'label'> & { revision: number },\n ) => {\n for (const callback of listeners) {\n try {\n callback(\n clone({\n ops: entry.ops,\n inverse: entry.inverse,\n origin: entry.origin,\n label: entry.label,\n revision: entry.revision,\n }),\n );\n } catch {\n /* A subscriber cannot roll back a committed transaction. */\n }\n }\n };\n const model: DocModel = {\n itemSignal(id) {\n let observed = observedItems.get(id);\n if (!observed) {\n observed = signal(frozenCopy(index.get(id)));\n observedItems.set(id, observed);\n }\n return observed;\n },\n fieldSignal(id, key) {\n let fields = observedFields.get(id);\n if (!fields) {\n fields = new Map();\n observedFields.set(id, fields);\n }\n let observed = fields.get(key);\n if (!observed) {\n observed = signal<unknown>(frozenCopy(index.get(id)?.[key]));\n fields.set(key, observed);\n }\n return observed as ReadonlySignal<Item[typeof key] | undefined>;\n },\n childrenSignal(id) {\n let observed = observedChildren.get(id);\n if (!observed) {\n observed = signal<readonly string[]>(Object.freeze(childIds(id)));\n observedChildren.set(id, observed);\n }\n return observed;\n },\n apply(ops, applyOptions = {}) {\n const result: ApplyResult = { ok: false, created: [], errors: [], warnings: [] },\n origin = applyOptions.origin ?? 'api',\n lenient = !!applyOptions.lenient;\n if (options.readonly) {\n result.errors.push({ index: 0, code: 'READONLY', message: 'This document is read-only.' });\n return result;\n }\n const batchLimit = origin === 'user' ? LIMITS.maxItems : LIMITS.maxBatch;\n if (!Array.isArray(ops) || ops.length > batchLimit) {\n result.errors.push({\n index: 0,\n code: 'BATCH_LIMIT',\n message: `A batch must be an array of at most ${batchLimit} operations for origin ${origin}.`,\n });\n return result;\n }\n let draft: AnnieDoc;\n try {\n assertSafeJSON(ops);\n draft = clone(state);\n } catch (error) {\n result.errors.push({\n index: 0,\n code: 'INVALID_DATA',\n message: String(error instanceof Error ? error.message : error),\n });\n return result;\n }\n const remapped = origin.startsWith('agent:')\n ? remapAgentCreateIds(draft, ops)\n : { ops, warnings: [] as ApplyIssue[] };\n result.warnings.push(...remapped.warnings);\n const concrete: Op[] = [],\n inverse: Op[] = [],\n failures: ApplyIssue[] = [];\n const creationOps = new Map<string, number>();\n const mediaIds = () =>\n new Set(concrete.filter((op) => op.op === 'media.set').map((op) => op.id));\n const batch = remapped.ops;\n for (let index = 0; index < batch.length; index++) {\n const snapshot = lenient ? clone(draft) : undefined;\n try {\n const error = schemaError(OpSchema, batch[index]);\n if (error) throw new Error(error);\n const change = perform(draft, batch[index], origin, options);\n if (origin !== 'user' && result.created.length + change.created.length > LIMITS.maxBatch)\n throw new Error(\n `An agent batch may create at most ${LIMITS.maxBatch} items, including nested children.`,\n );\n if (lenient)\n validateDoc(\n draft,\n options,\n origin,\n new Set([...mediaIds(), ...(change.op.op === 'media.set' ? [change.op.id] : [])]),\n );\n concrete.push(change.op);\n inverse.unshift(...change.inverse);\n result.created.push(...change.created);\n change.created.forEach((id) => creationOps.set(id, index));\n } catch (error) {\n if (snapshot) draft = snapshot;\n failures.push({\n index,\n code: 'INVALID_OP',\n message: `${batch[index]?.op ?? 'operation'} #${index + 1}: ${error instanceof Error ? error.message : String(error)}`,\n });\n }\n }\n if (!lenient && !failures.length) {\n try {\n validateDoc(draft, options, origin, mediaIds());\n } catch (error) {\n failures.push({\n index: Math.max(0, ops.length - 1),\n code: 'INVALID_DOCUMENT',\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }\n if (!lenient && failures.length) {\n result.errors = failures;\n result.created = [];\n result.warnings = [];\n return result;\n }\n if (lenient && !concrete.length) {\n result.skipped = failures;\n result.created = [];\n return result;\n }\n if (lenient && failures.length) result.skipped = failures;\n const all = allItems(draft),\n lookup = new Map(all.map((i) => [i.id, i]));\n for (const id of result.created) {\n const item = lookup.get(id);\n if (!item) continue;\n if (\n item.kind !== 'connector' &&\n all.some(\n (other) =>\n other.id !== id &&\n !other.children?.length &&\n other.kind !== 'connector' &&\n intersects(itemBounds(item, lookup), itemBounds(other, lookup)),\n )\n )\n result.warnings.push({\n index: creationOps.get(id) ?? 0,\n code: 'OVERLAPS_EXISTING',\n message: `Item ${id} overlaps another item.`,\n });\n }\n result.ok = true;\n if (applyOptions.dryRun || !concrete.length) return result;\n const entry: Entry = {\n ops: concrete,\n inverse,\n before: state,\n after: draft,\n origin,\n label: applyOptions.label,\n };\n state = draft;\n reindex();\n const previous = history.at(-1);\n if (\n applyOptions.merge &&\n previous &&\n previous.origin === origin &&\n previous.label === entry.label\n ) {\n previous.ops.push(...entry.ops);\n previous.inverse.unshift(...entry.inverse);\n previous.after = state;\n } else {\n history.push(entry);\n if (history.length > LIMITS.maxHistory) history.shift();\n }\n future.length = 0;\n emit({\n ...entry,\n revision: commitSession(\n { origin, label: applyOptions.label, ops: concrete },\n entry.before,\n state,\n ),\n });\n return result;\n },\n get(id) {\n return clone(index.get(id));\n },\n query(selector) {\n return queryDoc(state, selector);\n },\n describe(describeOptions) {\n return describeDoc(state, describeOptions, { written, removed });\n },\n changesSince(since, changeOptions) {\n const cursor = revision;\n if (!Number.isFinite(since) || since >= cursor) return { cursor, since, changes: [] };\n const oldest = sessionLog[0];\n if (oldest && since + 1 < oldest.revision)\n return { cursor, since, changes: [], truncated: true };\n let changes = sessionLog.filter((slice) => slice.revision > since);\n const origin = changeOptions?.origin;\n if (origin === 'agent') changes = changes.filter((slice) => agentOrigin(slice.origin));\n else if (origin !== undefined) changes = changes.filter((slice) => slice.origin === origin);\n return { cursor, since, changes: clone(changes) };\n },\n kindsSince(since) {\n return kindsSince(since);\n },\n toJSON(saveOptions) {\n const json = clone(state);\n if (saveOptions?.compact === false) return json;\n for (const page of json.pages)\n page.items = page.items.map((item) => minimalItem(item, kindDefaultsFrom(options.kinds)));\n return json;\n },\n undo(undoOptions) {\n if (options.readonly) return false;\n const index = undoOptions?.origin\n ? walkBack(history, (origin) => origin === undoOptions.origin)\n : hideAgent()\n ? walkBack(history, (origin) => !agentOrigin(origin))\n : history.length - 1;\n if (index < 0) return false;\n const entry = history[index],\n selective = index !== history.length - 1,\n ops = selective ? selectiveInverse(entry, state) : entry.inverse,\n draft = clone(state),\n actual: Op[] = [],\n redo: Op[] = [];\n try {\n for (const op of ops) {\n const result = perform(draft, op, 'user', options);\n actual.push(result.op);\n redo.unshift(...result.inverse);\n }\n validateDoc(draft, options);\n } catch {\n return false;\n }\n const reverse: Entry = {\n ops: actual,\n inverse: redo,\n before: state,\n after: draft,\n origin: entry.origin,\n label: entry.label,\n };\n const before = state;\n state = draft;\n reindex();\n history.splice(index, 1);\n future.push(reverse);\n const label = `Undo ${entry.label ?? 'change'}`;\n emit({\n ops: actual,\n inverse: redo,\n origin: entry.origin,\n label,\n revision: commitSession({ origin: entry.origin, label, ops: actual }, before, state),\n });\n return true;\n },\n redo() {\n if (options.readonly) return false;\n const index = hideAgent()\n ? walkBack(future, (origin) => !agentOrigin(origin))\n : future.length - 1;\n if (index < 0) return false;\n const reverse = future[index];\n const draft = clone(state),\n ops: Op[] = [],\n inverse: Op[] = [];\n try {\n for (const op of reverse.inverse) {\n const change = perform(draft, op, 'user', options);\n ops.push(change.op);\n inverse.unshift(...change.inverse);\n }\n validateDoc(draft, options);\n } catch {\n return false;\n }\n const entry: Entry = {\n ops,\n inverse,\n before: state,\n after: draft,\n origin: reverse.origin,\n label: reverse.label,\n };\n const before = state;\n state = draft;\n reindex();\n future.splice(index, 1);\n history.push(entry);\n const label = `Redo ${entry.label ?? 'change'}`;\n emit({\n ops,\n inverse,\n origin: entry.origin,\n label,\n revision: commitSession({ origin: entry.origin, label, ops }, before, state),\n });\n return true;\n },\n load(doc) {\n if (options.readonly) throw new Error('This document is read-only.');\n const next = loadInitial(doc);\n validateDoc(next, options);\n state = next;\n reindex();\n history.length = 0;\n future.length = 0;\n resetSession();\n emit({ ops: [], inverse: [], origin: 'api', label: 'Load document', revision: 0 });\n },\n clear() {\n if (options.readonly) throw new Error('This document is read-only.');\n state = defaultDoc();\n reindex();\n history.length = 0;\n future.length = 0;\n resetSession();\n emit({ ops: [], inverse: [], origin: 'api', label: 'Clear document', revision: 0 });\n },\n on(_type, callback) {\n listeners.add(callback);\n return () => listeners.delete(callback);\n },\n get revision() {\n return revision;\n },\n get canUndo() {\n return hideAgent() ? history.some((entry) => !agentOrigin(entry.origin)) : history.length > 0;\n },\n get canRedo() {\n return hideAgent() ? future.some((entry) => !agentOrigin(entry.origin)) : future.length > 0;\n },\n };\n return model;\n}\n","/** First non-comment `text/uri-list` line, then `text/plain`. */\nexport function clipboardText(data: DataTransfer | null | undefined): string {\n const line = data\n ?.getData('text/uri-list')\n ?.split(/\\r?\\n/)\n .find((entry) => entry && !entry.startsWith('#'));\n return line?.trim() || data?.getData('text/plain') || '';\n}\n","\n/**\n * Rearranges items so that all items in the [left, k] are the smallest.\n * The k-th element will have the (k - left + 1)-th smallest value in [left, right].\n *\n * @template T\n * @param {T[]} arr the array to partially sort (in place)\n * @param {number} k middle index for partial sorting (as defined above)\n * @param {number} [left=0] left index of the range to sort\n * @param {number} [right=arr.length-1] right index\n * @param {(a: T, b: T) => number} [compare = (a, b) => a - b] compare function\n */\nexport default function quickselect(arr, k, left = 0, right = arr.length - 1, compare = defaultCompare) {\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(arr, k, newLeft, newRight, compare);\n }\n\n const t = arr[k];\n let i = left;\n /** @type {number} */\n let j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\n/**\n * @template T\n * @param {T[]} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\n/**\n * @template T\n * @param {T} a\n * @param {T} b\n * @returns {number}\n */\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n","import quickselect from 'quickselect';\n\nexport default class RBush {\n constructor(maxEntries = 9) {\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n }\n\n all() {\n return this._all(this.data, []);\n }\n\n search(bbox) {\n let node = this.data;\n const result = [];\n\n if (!intersects(bbox, node)) return result;\n\n const toBBox = this.toBBox;\n const nodesToSearch = [];\n\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) result.push(child);\n else if (contains(bbox, childBBox)) this._all(child, result);\n else nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return result;\n }\n\n collides(bbox) {\n let node = this.data;\n\n if (!intersects(bbox, node)) return false;\n\n const nodesToSearch = [];\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? this.toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf || contains(bbox, childBBox)) return true;\n nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return false;\n }\n\n load(data) {\n if (!(data && data.length)) return this;\n\n if (data.length < this._minEntries) {\n for (let i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n let node = this._build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this._splitRoot(this.data, node);\n\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n const tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this._insert(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n }\n\n insert(item) {\n if (item) this._insert(item, this.data.height - 1);\n return this;\n }\n\n clear() {\n this.data = createNode([]);\n return this;\n }\n\n remove(item, equalsFn) {\n if (!item) return this;\n\n let node = this.data;\n const bbox = this.toBBox(item);\n const path = [];\n const indexes = [];\n let i, parent, goingUp;\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n const index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this._condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n\n } else node = null; // nothing found\n }\n\n return this;\n }\n\n toBBox(item) { return item; }\n\n compareMinX(a, b) { return a.minX - b.minX; }\n compareMinY(a, b) { return a.minY - b.minY; }\n\n toJSON() { return this.data; }\n\n fromJSON(data) {\n this.data = data;\n return this;\n }\n\n _all(node, result) {\n const nodesToSearch = [];\n while (node) {\n if (node.leaf) result.push(...node.children);\n else nodesToSearch.push(...node.children);\n\n node = nodesToSearch.pop();\n }\n return result;\n }\n\n _build(items, left, right, height) {\n\n const N = right - left + 1;\n let M = this._maxEntries;\n let node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / Math.pow(M, height - 1));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n const N2 = Math.ceil(N / M);\n const N1 = N2 * Math.ceil(Math.sqrt(M));\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (let i = left; i <= right; i += N1) {\n\n const right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (let j = i; j <= right2; j += N2) {\n\n const right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this._build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n }\n\n _chooseSubtree(bbox, node, level, path) {\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) break;\n\n let minArea = Infinity;\n let minEnlargement = Infinity;\n let targetNode;\n\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const area = bboxArea(child);\n const enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n }\n\n _insert(item, level, isNode) {\n const bbox = isNode ? item : this.toBBox(item);\n const insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n const node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this._split(insertPath, level);\n level--;\n } else break;\n }\n\n // adjust bboxes along the insertion path\n this._adjustParentBBoxes(bbox, insertPath, level);\n }\n\n // split overflowed node into two\n _split(insertPath, level) {\n const node = insertPath[level];\n const M = node.children.length;\n const m = this._minEntries;\n\n this._chooseSplitAxis(node, m, M);\n\n const splitIndex = this._chooseSplitIndex(node, m, M);\n\n const newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) insertPath[level - 1].children.push(newNode);\n else this._splitRoot(node, newNode);\n }\n\n _splitRoot(node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n }\n\n _chooseSplitIndex(node, m, M) {\n let index;\n let minOverlap = Infinity;\n let minArea = Infinity;\n\n for (let i = m; i <= M - m; i++) {\n const bbox1 = distBBox(node, 0, i, this.toBBox);\n const bbox2 = distBBox(node, i, M, this.toBBox);\n\n const overlap = intersectionArea(bbox1, bbox2);\n const area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index || M - m;\n }\n\n // sorts node children by the best axis for split\n _chooseSplitAxis(node, m, M) {\n const compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n const compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n const xMargin = this._allDistMargin(node, m, M, compareMinX);\n const yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) node.children.sort(compareMinX);\n }\n\n // total margin of all possible split distributions where each node is at least m full\n _allDistMargin(node, m, M, compare) {\n node.children.sort(compare);\n\n const toBBox = this.toBBox;\n const leftBBox = distBBox(node, 0, m, toBBox);\n const rightBBox = distBBox(node, M - m, M, toBBox);\n let margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n for (let i = m; i < M - m; i++) {\n const child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (let i = M - m - 1; i >= m; i--) {\n const child = node.children[i];\n extend(rightBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n }\n\n _adjustParentBBoxes(bbox, path, level) {\n // adjust bboxes along the given tree path\n for (let i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n }\n\n _condense(path) {\n // go through the path, removing empty nodes and updating bboxes\n for (let i = path.length - 1, siblings; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n\n } else this.clear();\n\n } else calcBBox(path[i], this.toBBox);\n }\n }\n}\n\nfunction findItem(item, items, equalsFn) {\n if (!equalsFn) return items.indexOf(item);\n\n for (let i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) return i;\n }\n return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n if (!destNode) destNode = createNode(null);\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (let i = k; i < p; i++) {\n const child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n}\n\nfunction extend(a, b) {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n const minX = Math.max(a.minX, b.minX);\n const minY = Math.max(a.minY, b.minY);\n const maxX = Math.min(a.maxX, b.maxX);\n const maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n return a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n return b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n return {\n children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n const stack = [left, right];\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n const mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n}\n","import RBush from 'rbush';\nimport type { Box, Item, Outline, Point } from '../core/types';\nimport { contains, containsPoint, flattenItems, itemBounds, type ItemLookup } from './box';\nimport { pointInPolygon, rotatePoint, segmentDistance } from './vec';\nimport { routeConnector, type OutlineResolver } from './router';\ninterface Entry {\n minX: number;\n minY: number;\n maxX: number;\n maxY: number;\n item: Item;\n order: number;\n parents: Item[];\n}\nexport interface PickOptions {\n tolerance?: number;\n enteredGroup?: string;\n includeLocked?: boolean;\n outline?: OutlineResolver;\n ignore?: (item: Item) => boolean;\n}\nexport function hitTest(\n item: Item,\n point: Point,\n tolerance = 4,\n lookup?: ItemLookup,\n outline?: Outline | Outline[] | OutlineResolver,\n): boolean {\n const resolveOutline = typeof outline === 'function' ? outline : undefined;\n if (item.kind === 'group') return containsPoint(itemBounds(item, lookup, resolveOutline), point);\n if (item.kind === 'connector') {\n const points = routeConnector(item, lookup, resolveOutline).points;\n return points\n .slice(1)\n .some(\n (p, i) =>\n segmentDistance(point, points[i], p) <= tolerance + (item.style?.strokeWidth ?? 2) / 2,\n );\n }\n const p = rotatePoint(\n point,\n { x: item.x + item.w / 2, y: item.y + item.h / 2 },\n -(item.rotation ?? 0),\n ),\n x = p.x - item.x,\n y = p.y - item.y,\n stroke = tolerance + (item.style?.strokeWidth ?? 2) / 2;\n const linePoints =\n item.points ??\n (item.kind === 'line'\n ? [\n [0, 0],\n [item.w, item.h],\n ]\n : undefined);\n if ((item.kind === 'line' || item.kind === 'path') && linePoints) {\n const pts = linePoints.map(([px, py]) => ({ x: item.x + px, y: item.y + py }));\n return (\n (item.closed && pointInPolygon(p, pts)) ||\n pts.slice(1).some((pt, i) => segmentDistance(p, pts[i], pt) <= stroke)\n );\n }\n const filled =\n !!item.text?.value ||\n (item.style?.fill !== undefined && item.style.fill !== 'none') ||\n ['note', 'text', 'image', 'video', 'link', 'html', 'group'].includes(item.kind);\n const resolvedOutline = typeof outline === 'function' ? outline(item) : outline;\n if (resolvedOutline) {\n const outlines = Array.isArray(resolvedOutline) ? resolvedOutline : [resolvedOutline],\n local = { x, y };\n return outlines.some((shape) => {\n if (!shape.points.length) return false;\n if (shape.closed && filled && pointInPolygon(local, shape.points)) return true;\n const points = shape.closed ? [...shape.points, shape.points[0]] : shape.points;\n return points.length === 1\n ? segmentDistance(local, points[0], points[0]) <= stroke\n : points\n .slice(1)\n .some((point, index) => segmentDistance(local, points[index], point) <= stroke);\n });\n }\n if (item.kind === 'ellipse') {\n const rx = item.w / 2,\n ry = item.h / 2;\n if (!rx || !ry) return false;\n const d = Math.hypot((x - rx) / rx, (y - ry) / ry),\n edge = stroke / Math.min(rx, ry);\n return filled ? d <= 1 + edge : Math.abs(d - 1) <= edge;\n }\n if (item.kind === 'diamond') {\n const vertices = [\n { x: item.w / 2, y: 0 },\n { x: item.w, y: item.h / 2 },\n { x: item.w / 2, y: item.h },\n { x: 0, y: item.h / 2 },\n ],\n local = { x, y };\n return (\n (filled && pointInPolygon(local, vertices)) ||\n vertices.some((a, i) => segmentDistance(local, a, vertices[(i + 1) % 4]) <= stroke)\n );\n }\n const outer = x >= -stroke && x <= item.w + stroke && y >= -stroke && y <= item.h + stroke;\n return (\n outer && (filled || x <= stroke || x >= item.w - stroke || y <= stroke || y >= item.h - stroke)\n );\n}\nexport class SpatialIndex {\n private tree = new RBush<Entry>();\n private lookup = new Map<string, Item>();\n private entries = new Map<string, Entry>();\n constructor(\n items: Item[] = [],\n private outline?: OutlineResolver,\n ) {\n this.set(items);\n }\n set(items: Item[], outline: OutlineResolver | undefined = this.outline): void {\n this.outline = outline;\n this.tree.clear();\n this.lookup = new Map(flattenItems(items).map((i) => [i.id, i]));\n const entries: Entry[] = [];\n let order = 0;\n const walk = (list: Item[], parents: Item[]) => {\n for (const item of list) {\n const b = itemBounds(item, this.lookup, this.outline);\n entries.push({\n minX: b.x,\n minY: b.y,\n maxX: b.x + b.w,\n maxY: b.y + b.h,\n item,\n order: order++,\n parents,\n });\n if (item.children) walk(item.children, [...parents, item]);\n }\n };\n walk(items, []);\n this.entries = new Map(entries.map((entry) => [entry.item.id, entry]));\n this.tree.load(entries);\n }\n search(box: Box): Item[] {\n return this.tree\n .search({ minX: box.x, minY: box.y, maxX: box.x + box.w, maxY: box.y + box.h })\n .filter((e) => !e.item.hidden && !e.parents.some((p) => p.hidden))\n .sort((a, b) => a.order - b.order)\n .map((e) => e.item);\n }\n enclosed(\n box: Box,\n options: { enteredGroup?: string; ignore?: (item: Item) => boolean } = {},\n ): Item[] {\n const selected = new Map<string, Entry>();\n const candidates = this.tree.search({\n minX: box.x,\n minY: box.y,\n maxX: box.x + box.w,\n maxY: box.y + box.h,\n });\n const visibleBounds = (entry: Entry): Box | undefined => {\n if (\n entry.item.hidden ||\n entry.item.locked ||\n options.ignore?.(entry.item) ||\n entry.parents.some((parent) => parent.hidden || parent.locked || options.ignore?.(parent))\n )\n return;\n return {\n x: entry.minX,\n y: entry.minY,\n w: entry.maxX - entry.minX,\n h: entry.maxY - entry.minY,\n };\n };\n for (const candidate of candidates) {\n const visible = visibleBounds(candidate);\n if (!visible || !contains(box, visible)) continue;\n const groups = candidate.parents.filter((parent) => parent.kind === 'group');\n const entered = groups.findIndex((parent) => parent.id === options.enteredGroup);\n const outer = groups[entered + 1];\n const entry = outer ? this.entries.get(outer.id)! : candidate;\n if (entry.item.id === options.enteredGroup) continue;\n const bounds = entry === candidate ? visible : visibleBounds(entry);\n if (bounds && contains(box, bounds)) selected.set(entry.item.id, entry);\n }\n return [...selected.values()].sort((a, b) => a.order - b.order).map((entry) => entry.item);\n }\n pick(point: Point, options: PickOptions = {}): Item | undefined {\n const tolerance = options.tolerance ?? 6;\n const found = this.tree\n .search({\n minX: point.x - tolerance,\n minY: point.y - tolerance,\n maxX: point.x + tolerance,\n maxY: point.y + tolerance,\n })\n .sort((a, b) => b.order - a.order);\n for (const e of found) {\n if (\n e.item.hidden ||\n options.ignore?.(e.item) ||\n (!options.includeLocked && e.item.locked) ||\n e.parents.some(\n (p) => p.hidden || options.ignore?.(p) || (!options.includeLocked && p.locked),\n )\n )\n continue;\n if (!hitTest(e.item, point, tolerance, this.lookup, options.outline ?? this.outline))\n continue;\n const groups = e.parents.filter((p) => p.kind === 'group');\n const entered = groups.findIndex((p) => p.id === options.enteredGroup);\n const outer = groups[entered + 1];\n return outer ?? e.item;\n }\n return undefined;\n }\n}\n"],"x_google_ignoreList":[0,5,6],"mappings":"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"}
|