@inkandswitch/patchwork-pkg-base 0.0.58 → 0.0.60

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.
Files changed (24) hide show
  1. package/package.json +1 -1
  2. package/packages/account/dist/{AccountPicker-HB6MDLKN.js → AccountPicker-KAKD2EZJ.js} +17 -61
  3. package/packages/account/dist/{AccountPicker-HB6MDLKN.js.map → AccountPicker-KAKD2EZJ.js.map} +2 -2
  4. package/packages/account/dist/index.js +1 -1
  5. package/packages/folder/dist/index.js +1 -1
  6. package/packages/folder/dist/{tool-WZGXLTTD.js → tool-EOCAL24F.js} +3 -4
  7. package/packages/folder/dist/tool-EOCAL24F.js.map +7 -0
  8. package/packages/sideboard/dist/chunk-7V2BKMG7.js +26 -0
  9. package/packages/sideboard/dist/chunk-7V2BKMG7.js.map +7 -0
  10. package/packages/sideboard/dist/document-list-panel-UUH6HOJ3.js +2 -0
  11. package/packages/sideboard/dist/index.css +1 -1
  12. package/packages/sideboard/dist/index.css.map +2 -2
  13. package/packages/sideboard/dist/index.js +1 -1
  14. package/packages/sideboard/dist/sideboard/sideboard.js +1 -1
  15. package/packages/sideboard/package.json +0 -1
  16. package/packages/threepane/dist/PatchworkFrame-RLYJ4GEF.js +2 -0
  17. package/packages/threepane/dist/{PatchworkFrame-II6JKG65.js.map → PatchworkFrame-RLYJ4GEF.js.map} +4 -4
  18. package/packages/threepane/dist/index.js +1 -1
  19. package/packages/folder/dist/tool-WZGXLTTD.js.map +0 -7
  20. package/packages/sideboard/dist/chunk-YCECYDWC.js +0 -26
  21. package/packages/sideboard/dist/chunk-YCECYDWC.js.map +0 -7
  22. package/packages/sideboard/dist/document-list-panel-DZYK3JHP.js +0 -2
  23. package/packages/threepane/dist/PatchworkFrame-II6JKG65.js +0 -2
  24. /package/packages/sideboard/dist/{document-list-panel-DZYK3JHP.js.map → document-list-panel-UUH6HOJ3.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/sideboard/state.ts", "../src/sideboard/document-list/auto-expand.ts", "../src/sideboard/create-new.tsx", "../src/sideboard/icons.tsx", "../src/sideboard/lib/doc-link.ts", "../src/sideboard/lib/solid-plugins.ts", "../node_modules/.pnpm/@solid-primitives+utils@6.3.2_solid-js@1.9.11/node_modules/@solid-primitives/utils/dist/index.js", "../node_modules/.pnpm/@solid-primitives+event-listener@2.4.3_solid-js@1.9.11/node_modules/@solid-primitives/event-listener/dist/eventListener.js", "../node_modules/.pnpm/@solid-primitives+props@3.2.2_solid-js@1.9.11/node_modules/@solid-primitives/props/dist/combineProps.js", "../node_modules/.pnpm/@solid-primitives+refs@1.1.2_solid-js@1.9.11/node_modules/@solid-primitives/refs/dist/index.js", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/array.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/assertion.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/create-generate-id.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/create-global-listeners.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/dom.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/enums.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/platform.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/events.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/external.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/focus-without-scrolling.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/tabbable.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/focus-manager.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/get-scroll-parent.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/is-virtual-event.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/noop.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/number.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/polygon.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/props.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/run-after-transition.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/scroll-into-view.ts", "../node_modules/.pnpm/@kobalte+utils@0.9.1_solid-js@1.9.11/node_modules/@kobalte/utils/src/styles.ts", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/XHJPQEZP.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/6Y7B2NEO.js", "../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs", "../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.mjs", "../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs", "../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/LMWVDFW6.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/JMA2RWU6.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/BLN63FDC.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/H6DSIDEC.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/GLKC2QFF.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/7CVNMTYF.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/ZKYDDHM6.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/ISKHZMHS.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/YA7DCYMB.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/455ZADO2.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/KKN23NY7.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/QEMPLYZX.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/BASJUNIE.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/7LCANGHD.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/ET5T45DO.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/5ZKAE4VZ.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/7OVKXYPU.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/YGDQXQ2B.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/E4R2EMM4.js", "../node_modules/.pnpm/@corvu+utils@0.4.2_solid-js@1.9.11/node_modules/@corvu/utils/dist/chunk/ZV6G25TT.js", "../node_modules/.pnpm/@corvu+utils@0.4.2_solid-js@1.9.11/node_modules/@corvu/utils/dist/chunk/SEUPK2SH.js", "../node_modules/.pnpm/@corvu+utils@0.4.2_solid-js@1.9.11/node_modules/@corvu/utils/dist/create/style.js", "../node_modules/.pnpm/@corvu+utils@0.4.2_solid-js@1.9.11/node_modules/@corvu/utils/dist/scroll/index.js", "../node_modules/.pnpm/solid-prevent-scroll@0.1.10_solid-js@1.9.11/node_modules/solid-prevent-scroll/dist/index.js", "../node_modules/.pnpm/solid-presence@0.1.8_solid-js@1.9.11/node_modules/solid-presence/dist/index.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/46NU5BYI.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/STGRFJHZ.js", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/YJ7Q7MW3.js", "../src/sideboard/dnd/dnd.ts", "../src/sideboard/document-list/document-list.tsx", "../src/sideboard/document-list/folder.tsx", "../src/sideboard/dnd/debug.ts", "../src/sideboard/document-list/file-drop.ts", "../node_modules/.pnpm/@kobalte+core@0.13.11_solid-js@1.9.11/node_modules/@kobalte/core/dist/chunk/H367UGHF.js", "../src/sideboard/document-list/item.tsx", "../src/sideboard/dnd/operations.ts", "../src/sideboard/dnd/payload.ts", "../src/sideboard/document-list/name.tsx", "../src/sideboard/document-list/loading-row.tsx", "../src/sideboard/share-modal.tsx", "../node_modules/.pnpm/@automerge+automerge-repo-solid-primitives@2.5.2_@automerge+automerge@3.2.5_solid-js@1.9.11/node_modules/node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/constants.js", "../node_modules/.pnpm/@automerge+automerge-repo-solid-primitives@2.5.2_@automerge+automerge@3.2.5_solid-js@1.9.11/node_modules/node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/counter.js", "../node_modules/.pnpm/@automerge+automerge-repo-solid-primitives@2.5.2_@automerge+automerge@3.2.5_solid-js@1.9.11/node_modules/node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/immutable_string.js", "../node_modules/.pnpm/@automerge+automerge-repo-solid-primitives@2.5.2_@automerge+automerge@3.2.5_solid-js@1.9.11/node_modules/node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/proxies.js", "../node_modules/.pnpm/@automerge+automerge-repo-solid-primitives@2.5.2_@automerge+automerge@3.2.5_solid-js@1.9.11/node_modules/node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/wasm_bindgen_output/web/automerge_wasm.js", "../node_modules/.pnpm/@automerge+automerge-repo-solid-primitives@2.5.2_@automerge+automerge@3.2.5_solid-js@1.9.11/node_modules/node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/internal_state.js", "../node_modules/.pnpm/@automerge+automerge-repo-solid-primitives@2.5.2_@automerge+automerge@3.2.5_solid-js@1.9.11/node_modules/node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/apply_patches.js", "../node_modules/.pnpm/@automerge+automerge-repo-solid-primitives@2.5.2_@automerge+automerge@3.2.5_solid-js@1.9.11/node_modules/node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/implementation.js", "../node_modules/.pnpm/@automerge+automerge-repo-solid-primitives@2.5.2_@automerge+automerge@3.2.5_solid-js@1.9.11/node_modules/@automerge/automerge-repo-solid-primitives/src/autoproduce.ts", "../node_modules/.pnpm/@automerge+automerge-repo-solid-primitives@2.5.2_@automerge+automerge@3.2.5_solid-js@1.9.11/node_modules/@automerge/automerge-repo-solid-primitives/src/makeDocumentProjection.ts", "../node_modules/.pnpm/@automerge+automerge-repo-solid-primitives@2.5.2_@automerge+automerge@3.2.5_solid-js@1.9.11/node_modules/@automerge/automerge-repo-solid-primitives/src/createDocumentProjection.ts", "../node_modules/.pnpm/@automerge+automerge-repo-solid-primitives@2.5.2_@automerge+automerge@3.2.5_solid-js@1.9.11/node_modules/@automerge/automerge-repo-solid-primitives/src/context.ts", "../node_modules/.pnpm/@automerge+automerge-repo-solid-primitives@2.5.2_@automerge+automerge@3.2.5_solid-js@1.9.11/node_modules/@automerge/automerge-repo-solid-primitives/src/useDocHandle.ts", "../node_modules/.pnpm/@automerge+automerge-repo-solid-primitives@2.5.2_@automerge+automerge@3.2.5_solid-js@1.9.11/node_modules/@automerge/automerge-repo-solid-primitives/src/useDocument.ts", "../node_modules/.pnpm/@automerge+automerge-repo-solid-primitives@2.5.2_@automerge+automerge@3.2.5_solid-js@1.9.11/node_modules/@automerge/automerge-repo-solid-primitives/src/useRepo.ts", "../node_modules/.pnpm/@inkandswitch+patchwork-providers@0.2.1_@automerge+automerge-repo@2.6.0-subduction.12/node_modules/@inkandswitch/patchwork-providers/dist/index.js", "../node_modules/.pnpm/@inkandswitch+patchwork-providers-solid@0.2.1_@automerge+automerge-repo-solid-primitive_dbb94436ebfe543f09ba93836fc4c9dc/node_modules/@inkandswitch/patchwork-providers-solid/dist/index.js", "../src/sideboard/document-list/marquee.ts", "../src/sideboard/document-list-panel.tsx"],
4
- "sourcesContent": ["import { createSignal } from \"solid-js\";\nimport type { AutomergeUrl } from \"@automerge/automerge-repo/slim\";\n\n// A \"new document\" drag (or click) is asking for a doc to be created inside the\n// folder at `containerUrl`, inserted at `index`. The DocumentList whose handle\n// matches `containerUrl` renders a placeholder row + type picker there.\nexport const [pendingNewDoc, setPendingNewDoc] = createSignal<{\n containerUrl: AutomergeUrl;\n index: number;\n} | null>(null);\n\nexport function filterMatches(filter: string, string?: string) {\n const lower = string?.toLowerCase();\n return (\n !!lower &&\n filter\n .split(/\\s+/)\n .filter(Boolean)\n .every((term) => lower.includes(term))\n );\n}\n\nexport const [renaming, setRenaming] = createSignal(\"\");\n\n// The set of folder URLs that lie on the path from the root to a currently\n// selected document. A folder reads this to auto-expand itself so the selected\n// doc is revealed, even when it sits in a deeply nested (and otherwise\n// unmounted) subtree. Computed by the panel whenever the selection changes; see\n// collectExpandedFolders in document-list/auto-expand.ts.\nexport const [autoExpandedFolders, setAutoExpandedFolders] = createSignal<\n Set<AutomergeUrl>\n>(new Set());\n", "import type { AutomergeUrl, Repo } from \"@automerge/automerge-repo/slim\";\nimport type { FolderDoc } from \"@inkandswitch/patchwork-filesystem\";\n\n/**\n * Walk the folder tree from `folderUrl` and collect the URLs of every folder\n * that has a selected document somewhere in its subtree \u2014 i.e. the set of\n * folders that must be expanded for the selection to be visible.\n *\n * This reads folder docs directly (one cached `repo.find` each) rather than\n * relying on mounted components, so it finds the full ancestor chain even for a\n * deeply nested selection whose folders aren't mounted yet. Leaf docs are never\n * loaded \u2014 selection is matched against the urls already present in each\n * folder's docrefs.\n *\n * Returns whether `folderUrl`'s subtree contains a selection; ancestors are\n * accumulated into `result`. `visited` is branched per path so a folder that\n * legitimately appears under two parents is handled, while true cycles stop.\n */\nexport async function collectExpandedFolders(\n repo: Repo,\n folderUrl: AutomergeUrl,\n selected: Set<AutomergeUrl>,\n result: Set<AutomergeUrl>,\n visited: Set<AutomergeUrl>\n): Promise<boolean> {\n if (visited.has(folderUrl)) return false;\n const nextVisited = new Set(visited);\n nextVisited.add(folderUrl);\n\n let doc: FolderDoc | undefined;\n try {\n const handle = await repo.find<FolderDoc>(folderUrl);\n doc = handle.doc();\n } catch {\n return false;\n }\n if (!doc?.docs) return false;\n\n let contains = false;\n for (const child of doc.docs) {\n if (selected.has(child.url)) {\n contains = true;\n }\n if (child.type === \"folder\") {\n const childContains = await collectExpandedFolders(\n repo,\n child.url,\n selected,\n result,\n nextVisited\n );\n if (childContains) contains = true;\n }\n }\n\n if (contains) result.add(folderUrl);\n return contains;\n}\n", "import { template as _$template } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { addEventListener as _$addEventListener } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nimport { use as _$use } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<div class=create-new-filter><input class=create-new-filter__input placeholder=\"Filter or paste automerge url\u2026\">`),\n _tmpl$2 = /*#__PURE__*/_$template(`<span class=create-new-button__text>Create new`),\n _tmpl$3 = /*#__PURE__*/_$template(`<div class=create-new-button-anchor><button type=button class=create-new-button aria-label=\"create new\">`),\n _tmpl$4 = /*#__PURE__*/_$template(`<span class=document-list-item__name>New document`);\nimport { isValidAutomergeUrl } from \"@automerge/automerge-repo/slim\";\nimport { createDocOfDatatype2, getRegistry, isLoadablePlugin, isLoadedPlugin } from \"@inkandswitch/patchwork-plugins\";\nimport { createSignal, For, Show } from \"solid-js\";\nimport { NewDocIcon } from \"./icons.tsx\";\nimport { docLinkFromUrl } from \"./lib/doc-link.ts\";\nimport { useFilteredDatatypes } from \"./lib/solid-plugins\";\nimport { DropdownMenu } from \"@kobalte/core/dropdown-menu\";\nimport { NEW_DOC_DND_TYPE, setNewDocDragging, clearDropTarget } from \"./dnd/dnd.ts\";\nexport async function createNew(repo, datatype, hive) {\n if (isLoadablePlugin(datatype)) {\n const registry = getRegistry(\"patchwork:datatype\");\n await registry.load(datatype.id);\n }\n if (!isLoadedPlugin(datatype)) {\n throw new Error(\"plugin not loaded after loading\");\n }\n const docHandle = await createDocOfDatatype2(datatype, repo);\n if (hive) {\n await hive.addSyncServerPullToDoc(docHandle.url);\n }\n const doc = docHandle.doc();\n const name = datatype.module.getTitle(doc);\n return {\n name,\n type: datatype.id,\n url: docHandle.url\n };\n}\nfunction DatatypeMenuContent(props) {\n const datatypes = useFilteredDatatypes(item => !item.unlisted);\n const [query, setQuery] = createSignal(\"\");\n const [highlightIndex, setHighlightIndex] = createSignal(0);\n const isUrl = () => isValidAutomergeUrl(query().trim());\n const filteredDatatypes = () => {\n const q = query().toLowerCase();\n const matching = q ? datatypes.filter(d => d.name.toLowerCase().includes(q)) : datatypes;\n return [...matching].sort((a, b) => a.name.localeCompare(b.name));\n };\n const itemCount = () => (isUrl() ? 1 : 0) + filteredDatatypes().length;\n function selectHighlighted() {\n const idx = highlightIndex();\n if (isUrl()) {\n if (idx === 0) {\n props.onSubmitUrl(query());\n return;\n }\n const datatype = filteredDatatypes()[idx - 1];\n if (datatype) props.onPickDatatype(datatype);\n } else {\n const datatype = filteredDatatypes()[idx];\n if (datatype) props.onPickDatatype(datatype);\n }\n }\n return _$createComponent(DropdownMenu.Portal, {\n get children() {\n return _$createComponent(DropdownMenu.Content, {\n \"class\": \"popmenu__content create-new-menu__content\",\n get children() {\n return [(() => {\n var _el$ = _tmpl$(),\n _el$2 = _el$.firstChild;\n _$use(el => {\n requestAnimationFrame(() => el.focus());\n }, _el$2);\n _el$2.addEventListener(\"paste\", e => {\n const text = e.clipboardData?.getData(\"text/plain\") ?? \"\";\n if (isValidAutomergeUrl(text.trim())) {\n e.preventDefault();\n setQuery(text.trim());\n setHighlightIndex(0);\n }\n });\n _el$2.$$keydown = e => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n selectHighlighted();\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setHighlightIndex(i => Math.min(i + 1, itemCount() - 1));\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setHighlightIndex(i => Math.max(i - 1, 0));\n } else if (e.key === \"Escape\") {\n return;\n }\n e.stopPropagation();\n };\n _el$2.$$input = e => {\n setQuery(e.target.value);\n setHighlightIndex(0);\n };\n _$effect(() => _el$2.value = query());\n return _el$;\n })(), _$createComponent(Show, {\n get when() {\n return isUrl();\n },\n get children() {\n return _$createComponent(DropdownMenu.Item, {\n \"class\": \"popmenu__item\",\n get classList() {\n return {\n \"popmenu__item--highlighted\": highlightIndex() === 0\n };\n },\n onSelect: () => props.onSubmitUrl(query()),\n onPointerMove: () => setHighlightIndex(0),\n children: \"Add by URL\"\n });\n }\n }), _$createComponent(For, {\n get each() {\n return filteredDatatypes();\n },\n children: (datatype, i) => _$createComponent(DropdownMenu.Item, {\n \"class\": \"popmenu__item\",\n get classList() {\n return {\n \"popmenu__item--highlighted\": highlightIndex() === i() + (isUrl() ? 1 : 0)\n };\n },\n onSelect: () => props.onPickDatatype(datatype),\n onPointerMove: () => setHighlightIndex(i() + (isUrl() ? 1 : 0)),\n get children() {\n return datatype.name;\n }\n })\n })];\n }\n });\n }\n });\n}\nexport default function CreateNew(props) {\n const [open, setOpen] = createSignal(false);\n async function selectDatatype(datatype) {\n const freshy = await createNew(props.repo, datatype, props.hive);\n props.changeFolder(doc => {\n doc.docs.push(freshy);\n });\n props.clearFilter();\n props.open(freshy);\n setOpen(false);\n }\n async function handleUrlSubmit(url) {\n const trimmed = url.trim();\n if (!isValidAutomergeUrl(trimmed)) return;\n const docLink = await docLinkFromUrl(props.repo, trimmed);\n props.changeFolder(doc => {\n doc.docs.push(docLink);\n });\n props.clearFilter();\n props.open(docLink);\n setOpen(false);\n }\n let lastCloseAt = 0;\n function handleDragStart(event) {\n setOpen(false);\n setNewDocDragging(true);\n event.dataTransfer.setData(NEW_DOC_DND_TYPE, \"1\");\n event.dataTransfer.effectAllowed = \"all\";\n const preview = document.createElement(\"div\");\n preview.style.cssText = `\n position: absolute;\n top: -1000px;\n background: var(--document-list-primary);\n padding: 0.5rem 0.75rem;\n border-radius: var(--document-list-radius);\n font-family: inherit;\n font-size: 0.9rem;\n pointer-events: none;\n color: var(--document-list-primary-line);\n box-shadow: 0 2px 8px rgba(0,0,0,0.1);\n `;\n preview.textContent = \"new doc\";\n document.body.appendChild(preview);\n event.dataTransfer.setDragImage(preview, 10, 10);\n setTimeout(() => preview.remove(), 0);\n }\n return _$createComponent(DropdownMenu, {\n get open() {\n return open();\n },\n onOpenChange: isOpen => {\n setOpen(isOpen);\n if (!isOpen) lastCloseAt = performance.now();\n },\n get children() {\n return [(() => {\n var _el$3 = _tmpl$3(),\n _el$4 = _el$3.firstChild;\n _$addEventListener(_el$4, \"dragend\", () => {\n setNewDocDragging(false);\n clearDropTarget();\n });\n _$addEventListener(_el$4, \"dragstart\", props.draggable ? handleDragStart : void 0);\n _el$4.$$click = () => {\n if (performance.now() - lastCloseAt > 200) setOpen(true);\n };\n _$insert(_el$4, _$createComponent(NewDocIcon, {\n \"class\": \"create-new-button__icon\"\n }), null);\n _$insert(_el$4, _$createComponent(Show, {\n get when() {\n return !props.square;\n },\n get children() {\n return [\" \", _tmpl$2()];\n }\n }), null);\n _$insert(_el$3, _$createComponent(DropdownMenu.Trigger, {\n \"class\": \"create-new-button-anchor__trigger\",\n \"aria-hidden\": \"true\",\n tabindex: -1\n }), null);\n _$effect(_p$ => {\n var _v$ = !!props.square,\n _v$2 = props.draggable;\n _v$ !== _p$.e && _el$4.classList.toggle(\"create-new-button--square\", _p$.e = _v$);\n _v$2 !== _p$.t && _$setAttribute(_el$4, \"draggable\", _p$.t = _v$2);\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$3;\n })(), _$createComponent(DatatypeMenuContent, {\n onPickDatatype: selectDatatype,\n onSubmitUrl: handleUrlSubmit\n })];\n }\n });\n}\nexport function NewDocPlaceholder(props) {\n const [open, setOpen] = createSignal(true);\n async function pickDatatype(datatype) {\n const freshy = await createNew(props.repo, datatype, props.hive);\n props.clearFilter();\n props.onCreate(freshy);\n }\n async function submitUrl(url) {\n const trimmed = url.trim();\n if (!isValidAutomergeUrl(trimmed)) return;\n const docLink = await docLinkFromUrl(props.repo, trimmed);\n props.clearFilter();\n props.onCreate(docLink);\n }\n return _$createComponent(DropdownMenu, {\n get open() {\n return open();\n },\n onOpenChange: isOpen => {\n setOpen(isOpen);\n if (!isOpen) props.onDismiss();\n },\n placement: \"bottom-start\",\n flip: false,\n get children() {\n return [_$createComponent(DropdownMenu.Trigger, {\n \"class\": \"document-list-item document-list-placeholder\",\n get children() {\n return _tmpl$4();\n }\n }), _$createComponent(DatatypeMenuContent, {\n onPickDatatype: pickDatatype,\n onSubmitUrl: submitUrl\n })];\n }\n });\n}\n_$delegateEvents([\"input\", \"keydown\", \"click\"]);", "import { template as _$template } from \"solid-js/web\";\nimport { spread as _$spread } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<svg xmlns=http://www.w3.org/2000/svg width=24 height=24 viewBox=\"0 0 24 24\"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round class=search-icon><path d=\"m21 21-4.34-4.34\"></path><circle cx=11 cy=11 r=8>`),\n _tmpl$2 = /*#__PURE__*/_$template(`<svg xmlns=http://www.w3.org/2000/svg width=16 height=16 viewBox=\"0 0 24 24\"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round class=\"plus-icon icon\"><path d=\"M5 12h14\"></path><path d=\"M12 5v14\">`),\n _tmpl$3 = /*#__PURE__*/_$template(`<svg xmlns=http://www.w3.org/2000/svg width=16 height=16 viewBox=\"0 0 24 24\"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round class=\"new-doc-icon icon\"><path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\"></path><path d=\"M14 2v4a2 2 0 0 0 2 2h4\"></path><path d=\"M9 15h6\"></path><path d=\"M12 18v-6\">`),\n _tmpl$4 = /*#__PURE__*/_$template(`<svg xmlns=http://www.w3.org/2000/svg width=16 height=16 viewBox=\"0 0 24 24\"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><path d=\"m9 18 6-6-6-6\">`);\nexport function SearchIcon() {\n return _tmpl$();\n}\nexport function PlusIcon(props) {\n return (() => {\n var _el$2 = _tmpl$2();\n _$spread(_el$2, props, true, true);\n return _el$2;\n })();\n}\nexport function NewDocIcon(props) {\n return (() => {\n var _el$3 = _tmpl$3();\n _$spread(_el$3, props, true, true);\n return _el$3;\n })();\n}\nexport function Chevron(props) {\n return (() => {\n var _el$4 = _tmpl$4();\n _$spread(_el$4, props, true, true);\n return _el$4;\n })();\n}", "import type { AutomergeUrl, Repo } from \"@automerge/automerge-repo/slim\";\nimport { getRegistry, isLoadedPlugin } from \"@inkandswitch/patchwork-plugins\";\nimport type {\n DocLink,\n HasPatchworkMetadata,\n} from \"@inkandswitch/patchwork-filesystem\";\n\n// Resolve a bare automerge url into a DocLink by reading the doc's\n// patchwork metadata and asking its datatype for a title\nexport async function docLinkFromUrl(\n repo: Repo,\n url: AutomergeUrl\n): Promise<DocLink> {\n const handle = await repo.find<Partial<HasPatchworkMetadata>>(url);\n const doc = handle.doc();\n const type = doc?.[\"@patchwork\"]?.type ?? \"\";\n let name = \"Untitled\";\n\n if (type) {\n const registry = getRegistry(\"patchwork:datatype\");\n const datatype = registry.get(type);\n if (datatype) {\n await registry.load(datatype.id);\n if (isLoadedPlugin(datatype)) {\n name = datatype.module.getTitle(doc) || name;\n }\n }\n }\n\n return { name, type, url };\n}\n", "import type {\n ToolDescription,\n DatatypeDescription,\n Plugin,\n} from \"@inkandswitch/patchwork-plugins\";\nimport {\n getRegistry,\n getSupportedToolsForType,\n} from \"@inkandswitch/patchwork-plugins\";\nimport { createEffect, createRoot, onCleanup } from \"solid-js\";\nimport { createStore, reconcile } from \"solid-js/store\";\n\nexport type MaybeAccessor<T> = T | (() => T);\n\n/**\n * Hook to get filtered datatype plugins\n */\nexport function useFilteredDatatypes(\n filter: (item: DatatypeDescription) => boolean\n): Plugin<DatatypeDescription>[] {\n const datatypeRegistry =\n getRegistry<DatatypeDescription>(\"patchwork:datatype\");\n const [plugins, setPlugins] = createStore(datatypeRegistry.filter(filter));\n const dispose = datatypeRegistry.on(\"changed\", () =>\n setPlugins(reconcile(datatypeRegistry.filter(filter)))\n );\n onCleanup(dispose);\n return plugins;\n}\n\n/**\n * Create a ref-counted shared reactive resource keyed by a string.\n * The factory runs once per unique key (inside its own reactive root).\n * When the last consumer unmounts, the root is disposed and the\n * entry is removed from the cache.\n */\nfunction createShared<V>(factory: (key: string) => V): (key: string) => V {\n const cache = new Map<\n string,\n { value: V; refCount: number; dispose: () => void }\n >();\n\n return (key: string) => {\n if (!cache.has(key)) {\n let dispose!: () => void;\n const value = createRoot((d) => {\n dispose = d;\n return factory(key);\n });\n cache.set(key, { value, refCount: 0, dispose });\n }\n\n const entry = cache.get(key)!;\n entry.refCount++;\n onCleanup(() => {\n entry.refCount--;\n if (entry.refCount === 0) {\n entry.dispose();\n cache.delete(key);\n }\n });\n\n return entry.value;\n };\n}\n\nconst useSharedToolsForType = createShared((type) => {\n const toolRegistry = getRegistry<ToolDescription>(\"patchwork:tool\");\n const [plugins, setPlugins] = createStore<Plugin<ToolDescription>[]>([]);\n\n const update = () => {\n const tools = getSupportedToolsForType(type);\n setPlugins(reconcile(tools));\n };\n update();\n\n const dispose = toolRegistry.on(\"changed\", update);\n onCleanup(dispose);\n\n return plugins;\n});\n\n/**\n * Hook to get tools that support a specific data type.\n * Shared across all callers for the same type \u2014 only one\n * store/listener exists per unique type string.\n */\nexport function useSupportedToolsForType(\n type: MaybeAccessor<string>,\n options?: { includeUnlisted?: boolean }\n): Plugin<ToolDescription>[] {\n const key = typeof type === \"function\" ? type() : type;\n const all = useSharedToolsForType(key);\n if (options?.includeUnlisted) return all;\n const [filtered, setFiltered] = createStore<Plugin<ToolDescription>[]>([]);\n createEffect(() => {\n setFiltered(reconcile(all.filter((t) => !t.unlisted)));\n });\n return filtered;\n}\n", "import { getOwner, onCleanup, createSignal, untrack, sharedConfig, onMount, DEV, equalFn, } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nexport * from \"./types.js\";\n//\n// GENERAL HELPERS:\n//\nexport { isServer };\nexport const isClient = !isServer;\nexport const isDev = isClient && !!DEV;\nexport const isProd = !isDev;\n/** no operation */\nexport const noop = (() => void 0);\nexport const trueFn = () => true;\nexport const falseFn = () => false;\n/** @deprecated use {@link equalFn} from \"solid-js\" */\nexport const defaultEquals = equalFn;\nexport const EQUALS_FALSE_OPTIONS = { equals: false };\nexport const INTERNAL_OPTIONS = { internal: true };\n/**\n * Check if the value is an instance of ___\n */\nexport const ofClass = (v, c) => v instanceof c || (v && v.constructor === c);\n/** Check if value is typeof \"object\" or \"function\" */\nexport function isObject(value) {\n return value !== null && (typeof value === \"object\" || typeof value === \"function\");\n}\nexport const isNonNullable = (i) => i != null;\nexport const filterNonNullable = (arr) => arr.filter(isNonNullable);\nexport const compare = (a, b) => (a < b ? -1 : a > b ? 1 : 0);\n/**\n * Check shallow array equality\n */\nexport const arrayEquals = (a, b) => a === b || (a.length === b.length && a.every((e, i) => e === b[i]));\n/**\n * Returns a function that will call all functions in the order they were chained with the same arguments.\n */\nexport function chain(callbacks) {\n return (...args) => {\n for (const callback of callbacks)\n callback && callback(...args);\n };\n}\n/**\n * Returns a function that will call all functions in the reversed order with the same arguments.\n */\nexport function reverseChain(callbacks) {\n return (...args) => {\n for (let i = callbacks.length - 1; i >= 0; i--) {\n const callback = callbacks[i];\n callback && callback(...args);\n }\n };\n}\nexport const clamp = (n, min, max) => Math.min(Math.max(n, min), max);\n/**\n * Accesses the value of a MaybeAccessor\n * @example\n * ```ts\n * access(\"foo\") // => \"foo\"\n * access(() => \"foo\") // => \"foo\"\n * ```\n */\nexport const access = (v) => typeof v === \"function\" && !v.length ? v() : v;\nexport const asArray = (value) => Array.isArray(value) ? value : value ? [value] : [];\n/**\n * Access an array of MaybeAccessors\n * @example\n * const list = [1, 2, () => 3)] // T: MaybeAccessor<number>[]\n * const newList = accessArray(list) // T: number[]\n */\nexport const accessArray = (list) => list.map(v => access(v));\n/**\n * Run the function if the accessed value is not `undefined` nor `null`\n * @param value\n * @param fn\n */\nexport const withAccess = (value, fn) => {\n const _value = access(value);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n typeof _value != null && fn(_value);\n};\nexport const asAccessor = (v) => (typeof v === \"function\" ? v : () => v);\n/** If value is a function \u2013 call it with a given arguments \u2013 otherwise get the value as is */\nexport function accessWith(valueOrFn, ...args) {\n return typeof valueOrFn === \"function\" ? valueOrFn(...args) : valueOrFn;\n}\nexport function defer(deps, fn, initialValue) {\n const isArray = Array.isArray(deps);\n let prevInput;\n let shouldDefer = true;\n return prevValue => {\n let input;\n if (isArray) {\n input = Array(deps.length);\n for (let i = 0; i < deps.length; i++)\n input[i] = deps[i]();\n }\n else\n input = deps();\n if (shouldDefer) {\n shouldDefer = false;\n prevInput = input;\n return initialValue;\n }\n const result = untrack(() => fn(input, prevInput, prevValue));\n prevInput = input;\n return result;\n };\n}\n/**\n * Get entries of an object\n */\nexport const entries = Object.entries;\n/**\n * Get keys of an object\n */\nexport const keys = Object.keys;\n/**\n * Solid's `onCleanup` that doesn't warn in development if used outside of a component.\n */\nexport const tryOnCleanup = isDev\n ? fn => (getOwner() ? onCleanup(fn) : fn)\n : onCleanup;\nexport const createCallbackStack = () => {\n let stack = [];\n const clear = () => (stack = []);\n return {\n push: (...callbacks) => stack.push(...callbacks),\n execute(arg0, arg1, arg2, arg3) {\n stack.forEach(cb => cb(arg0, arg1, arg2, arg3));\n clear();\n },\n clear,\n };\n};\n/**\n * Group synchronous function calls.\n * @param fn\n * @returns `fn`\n */\nexport function createMicrotask(fn) {\n let calls = 0;\n let args;\n onCleanup(() => (calls = 0));\n return (...a) => {\n (args = a), calls++;\n queueMicrotask(() => --calls === 0 && fn(...args));\n };\n}\n/**\n * A hydratable version of the {@link createSignal}. It will use the serverValue on the server and the update function on the client. If initialized during hydration it will use serverValue as the initial value and update it once hydration is complete.\n *\n * @param serverValue initial value of the state on the server\n * @param update called once on the client or on hydration to initialize the value\n * @param options {@link SignalOptions}\n * @returns\n * ```ts\n * [state: Accessor<T>, setState: Setter<T>]\n * ```\n * @see {@link createSignal}\n */\nexport function createHydratableSignal(serverValue, update, options) {\n if (isServer) {\n return createSignal(serverValue, options);\n }\n if (sharedConfig.context) {\n const [state, setState] = createSignal(serverValue, options);\n onMount(() => setState(() => update()));\n return [state, setState];\n }\n return createSignal(update(), options);\n}\n/** @deprecated use {@link createHydratableSignal} instead */\nexport const createHydrateSignal = createHydratableSignal;\n/**\n * Handle items removed and added to the array by diffing it by refference.\n *\n * @param current new array instance\n * @param prev previous array copy\n * @param handleAdded called once for every added item to array\n * @param handleRemoved called once for every removed from array\n */\nexport function handleDiffArray(current, prev, handleAdded, handleRemoved) {\n const currLength = current.length;\n const prevLength = prev.length;\n let i = 0;\n if (!prevLength) {\n for (; i < currLength; i++)\n handleAdded(current[i]);\n return;\n }\n if (!currLength) {\n for (; i < prevLength; i++)\n handleRemoved(prev[i]);\n return;\n }\n for (; i < prevLength; i++) {\n if (prev[i] !== current[i])\n break;\n }\n let prevEl;\n let currEl;\n prev = prev.slice(i);\n current = current.slice(i);\n for (prevEl of prev) {\n if (!current.includes(prevEl))\n handleRemoved(prevEl);\n }\n for (currEl of current) {\n if (!prev.includes(currEl))\n handleAdded(currEl);\n }\n}\n", "import { access, asArray, tryOnCleanup, } from \"@solid-primitives/utils\";\nimport { createEffect, createRenderEffect, createSignal } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nexport function makeEventListener(target, type, handler, options) {\n target.addEventListener(type, handler, options);\n return tryOnCleanup(target.removeEventListener.bind(target, type, handler, options));\n}\nexport function createEventListener(targets, type, handler, options) {\n if (isServer)\n return;\n const attachListeners = () => {\n asArray(access(targets)).forEach(el => {\n if (el)\n asArray(access(type)).forEach(type => makeEventListener(el, type, handler, options));\n });\n };\n // if the target is an accessor the listeners will be added on the first effect (onMount)\n // so that when passed a jsx ref it will be availabe\n if (typeof targets === \"function\")\n createEffect(attachListeners);\n // if the target prop is NOT an accessor, the event listeners can be added right away\n else\n createRenderEffect(attachListeners);\n}\nexport function createEventSignal(target, type, options) {\n if (isServer) {\n return () => undefined;\n }\n const [lastEvent, setLastEvent] = createSignal();\n createEventListener(target, type, setLastEvent, options);\n return lastEvent;\n}\n/**\n * Directive Usage. Creates an event listener, that will be automatically disposed on cleanup.\n *\n * @param props [eventType, handler, options]\n *\n * @example\n * <button use:eventListener={[\"click\", () => {...}]}>Click me!</button>\n */\nexport const eventListener = (target, props) => {\n createEffect(() => {\n const [type, handler, options] = props();\n makeEventListener(target, type, handler, options);\n });\n};\n// // /* TypeCheck */\n// const mouseHandler = (e: MouseEvent) => {};\n// const touchHandler = (e: TouchEvent) => {};\n// const el = document.createElement(\"div\");\n// // dom events\n// createEventListener(window as Window | undefined, \"mousemove\", mouseHandler);\n// createEventListener(document, \"touchstart\", touchHandler);\n// createEventListener(el, \"mousemove\", mouseHandler);\n// createEventListener(() => el, \"touchstart\", touchHandler);\n// const mouseSignal = createEventSignal(window, \"mousemove\");\n// const touchSignal = createEventSignal(() => document, \"touchstart\");\n// // custom events\n// createEventListener<{ test: MouseEvent }>(window, \"test\", mouseHandler);\n// createEventListener<{ test: Event; custom: MouseEvent }, \"custom\">(\n// () => el,\n// \"custom\",\n// mouseHandler\n// );\n// createEventListener<{ test: Event }>(new EventTarget(), \"test\", () => console.log(\"test\"));\n// const testSignal = createEventSignal<{ test: MouseEvent }>(window, \"test\");\n// const customSignal = createEventSignal<{ test: Event; custom: MouseEvent }, \"custom\">(\n// () => document,\n// \"custom\"\n// );\n// // directive\n// eventListener(el, () => [\"mousemove\", mouseHandler, { passive: true }]);\n// eventListener(el, () => [\"custom\", e => {}]);\n", "import { mergeProps } from \"solid-js\";\nimport { access, chain, reverseChain } from \"@solid-primitives/utils\";\nimport { propTraps } from \"./propTraps.js\";\nconst extractCSSregex = /((?:--)?(?:\\w+-?)+)\\s*:\\s*([^;]*)/g;\n/**\n * converts inline string styles to object form\n * @example\n * const styles = stringStyleToObject(\"margin: 24px; border: 1px solid #121212\");\n * styles; // { margin: \"24px\", border: \"1px solid #121212\" }\n * */\nexport function stringStyleToObject(style) {\n const object = {};\n let match;\n while ((match = extractCSSregex.exec(style))) {\n object[match[1]] = match[2];\n }\n return object;\n}\nexport function combineStyle(a, b) {\n if (typeof a === \"string\") {\n if (typeof b === \"string\")\n return `${a};${b}`;\n a = stringStyleToObject(a);\n }\n else if (typeof b === \"string\") {\n b = stringStyleToObject(b);\n }\n return { ...a, ...b };\n}\nconst reduce = (sources, key, calc) => {\n let v = undefined;\n for (const props of sources) {\n const propV = access(props)[key];\n if (!v)\n v = propV;\n else if (propV)\n v = calc(v, propV);\n }\n return v;\n};\nexport function combineProps(...args) {\n const restArgs = Array.isArray(args[0]);\n const sources = (restArgs ? args[0] : args);\n if (sources.length === 1)\n return sources[0];\n const chainFn = restArgs && args[1]?.reverseEventHandlers\n ? reverseChain\n : chain;\n // create a map of event listeners to be chained\n const listeners = {};\n for (const props of sources) {\n const propsObj = access(props);\n for (const key in propsObj) {\n // skip non event listeners\n if (key[0] === \"o\" && key[1] === \"n\" && key[2]) {\n const v = propsObj[key];\n const name = key.toLowerCase();\n const callback = typeof v === \"function\"\n ? v\n : // jsx event handlers can be tuples of [callback, arg]\n Array.isArray(v)\n ? v.length === 1\n ? v[0]\n : v[0].bind(void 0, v[1])\n : void 0;\n if (callback)\n listeners[name] ? listeners[name].push(callback) : (listeners[name] = [callback]);\n else\n delete listeners[name];\n }\n }\n }\n const merge = mergeProps(...sources);\n return new Proxy({\n get(key) {\n if (typeof key !== \"string\")\n return Reflect.get(merge, key);\n // Combine style prop\n if (key === \"style\")\n return reduce(sources, \"style\", combineStyle);\n // chain props.ref assignments\n if (key === \"ref\") {\n const callbacks = [];\n for (const props of sources) {\n const cb = access(props)[key];\n if (typeof cb === \"function\")\n callbacks.push(cb);\n }\n return chainFn(callbacks);\n }\n // Chain event listeners\n if (key[0] === \"o\" && key[1] === \"n\" && key[2]) {\n const callbacks = listeners[key.toLowerCase()];\n return callbacks ? chainFn(callbacks) : Reflect.get(merge, key);\n }\n // Merge classes or classNames\n if (key === \"class\" || key === \"className\")\n return reduce(sources, key, (a, b) => `${a} ${b}`);\n // Merge classList objects, keys in the last object overrides all previous ones.\n if (key === \"classList\")\n return reduce(sources, key, (a, b) => ({ ...a, ...b }));\n return Reflect.get(merge, key);\n },\n has(key) {\n return Reflect.has(merge, key);\n },\n keys() {\n return Object.keys(merge);\n },\n }, propTraps);\n}\n// type check\n// const com = combineProps(\n// {\n// onSomething: 123,\n// onWheel: (e: WheelEvent) => 213,\n// something: \"foo\",\n// style: { margin: \"24px\" },\n// once: true,\n// onMount: (fn: VoidFunction) => undefined\n// },\n// {\n// onSomething: [(n: number, s: string) => \"fo\", 123],\n// once: \"ovv\"\n// },\n// {\n// onWheel: false,\n// onMount: (n: number) => void 0\n// }\n// );\n// com.onSomething; // (s: string) => void;\n// com.once; // string;\n// com.onWheel; // false;\n// com.onMount; // ((fn: VoidFunction) => undefined) & ((n: number) => undefined);\n// com.something; // string;\n// com.style; // string | JSX.CSSProperties;\n", "import { chain, arrayEquals } from \"@solid-primitives/utils\";\nimport { children, createComputed, createMemo, onCleanup, untrack, } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\n/**\n * Utility for chaining multiple `ref` assignments with `props.ref` forwarding.\n * @param refs list of ref setters. Can be a `props.ref` prop for ref forwarding or a setter to a local variable (`el => ref = el`).\n * @example\n * ```tsx\n * interface ButtonProps {\n * ref?: Ref<HTMLButtonElement>\n * }\n * function Button (props: ButtonProps) {\n * let ref: HTMLButtonElement | undefined\n * onMount(() => {\n * // use the local ref\n * })\n * return <button ref={mergeRefs(props.ref, el => ref = el)} />\n * }\n *\n * // in consumer's component:\n * let ref: HTMLButtonElement | undefined\n * <Button ref={ref} />\n * ```\n */\nexport function mergeRefs(...refs) {\n return chain(refs);\n}\n/**\n * Default predicate used in `resolveElements()` and `resolveFirst()` to filter Elements.\n *\n * On the client it uses `instanceof Element` check, on the server it checks for the object with `t` property. (generated by compiling JSX)\n */\nexport const defaultElementPredicate = isServer\n ? (item) => item != null && typeof item === \"object\" && \"t\" in item\n : (item) => item instanceof Element;\n/**\n * Utility for resolving recursively nested JSX children to a single element or an array of elements using a predicate.\n *\n * It does **not** create a computation - should be wrapped in one to repeat the resolution on changes.\n *\n * @param value JSX children\n * @param predicate predicate to filter elements\n * @returns single element or an array of elements or `null` if no elements were found\n */\nexport function getResolvedElements(value, predicate) {\n if (predicate(value))\n return value;\n if (typeof value === \"function\" && !value.length)\n return getResolvedElements(value(), predicate);\n if (Array.isArray(value)) {\n const results = [];\n for (const item of value) {\n const result = getResolvedElements(item, predicate);\n if (result)\n Array.isArray(result) ? results.push.apply(results, result) : results.push(result);\n }\n return results.length ? results : null;\n }\n return null;\n}\nexport function resolveElements(fn, predicate = defaultElementPredicate, serverPredicate = defaultElementPredicate) {\n const children = createMemo(fn);\n const memo = createMemo(() => getResolvedElements(children(), isServer ? serverPredicate : predicate));\n memo.toArray = () => {\n const value = memo();\n return Array.isArray(value) ? value : value ? [value] : [];\n };\n return memo;\n}\n/**\n * Utility for resolving recursively nested JSX children in search of the first element that matches a predicate.\n *\n * It does **not** create a computation - should be wrapped in one to repeat the resolution on changes.\n *\n * @param value JSX children\n * @param predicate predicate to filter elements\n * @returns single found element or `null` if no elements were found\n */\nexport function getFirstChild(value, predicate) {\n if (predicate(value))\n return value;\n if (typeof value === \"function\" && !value.length)\n return getFirstChild(value(), predicate);\n if (Array.isArray(value)) {\n for (const item of value) {\n const result = getFirstChild(item, predicate);\n if (result)\n return result;\n }\n }\n return null;\n}\nexport function resolveFirst(fn, predicate = defaultElementPredicate, serverPredicate = defaultElementPredicate) {\n const children = createMemo(fn);\n return createMemo(() => getFirstChild(children(), isServer ? serverPredicate : predicate));\n}\n/**\n * Get up-to-date references of the multiple children elements.\n * @param ref Getter of current array of elements\n * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/refs#Refs\n * @example\n * ```tsx\n * const [refs, setRefs] = createSignal<Element[]>([]);\n * <Refs ref={setRefs}>\n * {props.children}\n * </Refs>\n * ```\n */\nexport function Refs(props) {\n if (isServer) {\n return props.children;\n }\n const cb = props.ref, resolved = children(() => props.children);\n let prev = [];\n createComputed(() => {\n const els = resolved.toArray().filter(defaultElementPredicate);\n if (!arrayEquals(prev, els))\n untrack(() => cb(els));\n prev = els;\n }, []);\n onCleanup(() => prev.length && cb([]));\n return resolved;\n}\n/**\n * Get up-to-date reference to a single child element.\n * @param ref Getter of current element *(or `undefined` if not mounted)*\n * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/refs#Ref\n * @example\n * ```tsx\n * const [ref, setRef] = createSignal<Element | undefined>();\n * <Ref ref={setRef}>\n * {props.children}\n * </Ref>\n * ```\n */\nexport function Ref(props) {\n if (isServer) {\n return props.children;\n }\n const cb = props.ref, resolved = children(() => props.children);\n let prev;\n createComputed(() => {\n const el = resolved.toArray().find(defaultElementPredicate);\n if (el !== prev)\n untrack(() => cb(el));\n prev = el;\n });\n onCleanup(() => prev && cb(undefined));\n return resolved;\n}\n", "/*\n * Portions of this file are based on code from ariakit.\n * MIT Licensed, Copyright (c) Diego Haz.\n *\n * Credits to the Ariakit team:\n * https://github.com/ariakit/ariakit/blob/da142672eddefa99365773ced72171facc06fdcb/packages/ariakit-utils/src/array.ts\n */\n\n/**\n * Immutably adds an item at the given index to an array.\n */\nexport function addItemToArray<T extends any[]>(\n\tarray: T,\n\titem: T[number],\n\tindex = -1,\n) {\n\tif (!(index in array)) {\n\t\treturn [...array, item] as T;\n\t}\n\treturn [...array.slice(0, index), item, ...array.slice(index)] as T;\n}\n\n/**\n * Immutably removes an item from an array.\n */\nexport function removeItemFromArray<T>(array: T[], item: T) {\n\tconst updatedArray = [...array];\n\tconst index = updatedArray.indexOf(item);\n\n\tif (index !== -1) {\n\t\tupdatedArray.splice(index, 1);\n\t}\n\n\treturn updatedArray;\n}\n", "/*\n * Original code by Chakra UI\n * MIT Licensed, Copyright (c) 2019 Segun Adebayo.\n *\n * Credits to the Chakra UI team:\n * https://github.com/chakra-ui/chakra-ui/blob/main/packages/utils/src/assertion.ts\n */\n\n// Number assertions\nexport function isNumber(value: unknown): value is number {\n\treturn typeof value === \"number\";\n}\n\n// Array assertions\nexport function isArray<T>(value: unknown): value is Array<T> {\n\treturn Array.isArray(value);\n}\n\n// String assertions\nexport function isString(value: unknown): value is string {\n\treturn Object.prototype.toString.call(value) === \"[object String]\";\n}\n\n// Function assertions\nexport function isFunction<T extends Function = Function>(\n\tvalue: unknown,\n): value is T {\n\treturn typeof value === \"function\";\n}\n", "import type { Accessor } from \"solid-js\";\n\n/**\n * Create a function that generate an id from a `baseId` and `suffix`.\n */\nexport function createGenerateId(baseId: Accessor<string>) {\n\treturn (suffix: string) => `${baseId()}-${suffix}`;\n}\n", "/*\n * Portions of this file are based on code from react-spectrum.\n * Apache License Version 2.0, Copyright 2020 Adobe.\n *\n * Credits to the React Spectrum team:\n * https://github.com/solidjs-community/solid-aria/blob/2c5f54feb5cfea514b1ee0a52d0416878f882351/packages/utils/src/createGlobalListeners.ts\n */\n\nimport { onCleanup } from \"solid-js\";\n\ninterface GlobalListeners {\n\taddGlobalListener<K extends keyof DocumentEventMap>(\n\t\tel: EventTarget,\n\t\ttype: K,\n\t\tlistener: (this: Document, ev: DocumentEventMap[K]) => any,\n\t\toptions?: boolean | AddEventListenerOptions,\n\t): void;\n\n\taddGlobalListener(\n\t\tel: EventTarget,\n\t\ttype: string,\n\t\tlistener: EventListenerOrEventListenerObject,\n\t\toptions?: boolean | AddEventListenerOptions,\n\t): void;\n\n\tremoveGlobalListener<K extends keyof DocumentEventMap>(\n\t\tel: EventTarget,\n\t\ttype: K,\n\t\tlistener: (this: Document, ev: DocumentEventMap[K]) => any,\n\t\toptions?: boolean | EventListenerOptions,\n\t): void;\n\n\tremoveGlobalListener(\n\t\tel: EventTarget,\n\t\ttype: string,\n\t\tlistener: EventListenerOrEventListenerObject,\n\t\toptions?: boolean | EventListenerOptions,\n\t): void;\n\n\tremoveAllGlobalListeners(): void;\n}\n\nexport function createGlobalListeners(): GlobalListeners {\n\tconst globalListeners = new Map();\n\n\tconst addGlobalListener = (\n\t\teventTarget: any,\n\t\ttype: any,\n\t\tlistener: any,\n\t\toptions: any,\n\t) => {\n\t\t// Make sure we remove the listener after it is called with the `once` option.\n\t\tconst fn = options?.once\n\t\t\t? (...args: any) => {\n\t\t\t\t\tglobalListeners.delete(listener);\n\t\t\t\t\tlistener(...args);\n\t\t\t\t}\n\t\t\t: listener;\n\t\tglobalListeners.set(listener, { type, eventTarget, fn, options });\n\t\teventTarget.addEventListener(type, listener, options);\n\t};\n\n\tconst removeGlobalListener = (\n\t\teventTarget: any,\n\t\ttype: any,\n\t\tlistener: any,\n\t\toptions: any,\n\t) => {\n\t\tconst fn = globalListeners.get(listener)?.fn || listener;\n\t\teventTarget.removeEventListener(type, fn, options);\n\t\tglobalListeners.delete(listener);\n\t};\n\n\tconst removeAllGlobalListeners = () => {\n\t\tglobalListeners.forEach((value, key) => {\n\t\t\tremoveGlobalListener(value.eventTarget, value.type, key, value.options);\n\t\t});\n\t};\n\n\tonCleanup(() => {\n\t\tremoveAllGlobalListeners();\n\t});\n\n\treturn { addGlobalListener, removeGlobalListener, removeAllGlobalListeners };\n}\n", "/*\n * Portions of this file are based on code from ariakit.\n * MIT Licensed, Copyright (c) Diego Haz.\n *\n * Credits to the Ariakit team:\n * https://github.com/ariakit/ariakit/blob/232bc79018ec20967fec1e097a9474aba3bb5be7/packages/ariakit-utils/src/dom.ts\n */\n\n/**\n * Similar to `Element.prototype.contains`, but a little faster when `element` is the same as `child`.\n */\nexport function contains(parent: Node | undefined, child: Node | null) {\n\tif (!parent) {\n\t\treturn false;\n\t}\n\n\treturn parent === child || parent.contains(child);\n}\n\n/**\n * Returns `element.ownerDocument.activeElement`.\n */\nexport function getActiveElement(\n\tnode?: Node | null,\n\tactiveDescendant = false,\n): HTMLElement | null {\n\tconst { activeElement } = getDocument(node);\n\n\tif (!activeElement?.nodeName) {\n\t\t// In IE11, activeElement might be an empty object if we're interacting\n\t\t// with elements inside an iframe.\n\t\treturn null;\n\t}\n\n\tif (isFrame(activeElement) && activeElement.contentDocument) {\n\t\treturn getActiveElement(\n\t\t\tactiveElement.contentDocument.body,\n\t\t\tactiveDescendant,\n\t\t);\n\t}\n\n\tif (activeDescendant) {\n\t\tconst id = activeElement.getAttribute(\"aria-activedescendant\");\n\n\t\tif (id) {\n\t\t\tconst element = getDocument(activeElement).getElementById(id);\n\n\t\t\tif (element) {\n\t\t\t\treturn element;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn activeElement as HTMLElement | null;\n}\n\n/**\n * Returns `element.ownerDocument.defaultView || window`.\n */\nexport function getWindow(node?: Node | null): Window {\n\treturn getDocument(node).defaultView || window;\n}\n\n/**\n * Returns `element.ownerDocument || document`.\n */\nexport function getDocument(node?: Node | null): Document {\n\treturn node ? node.ownerDocument || (node as Document) : document;\n}\n\n/**\n * Checks whether `element` is a frame element.\n */\nexport function isFrame(element: Element): element is HTMLIFrameElement {\n\treturn element.tagName === \"IFRAME\";\n}\n", "export enum EventKey {\n\tEscape = \"Escape\",\n\tEnter = \"Enter\",\n\tTab = \"Tab\",\n\tSpace = \" \",\n\tArrowDown = \"ArrowDown\",\n\tArrowLeft = \"ArrowLeft\",\n\tArrowRight = \"ArrowRight\",\n\tArrowUp = \"ArrowUp\",\n\tEnd = \"End\",\n\tHome = \"Home\",\n\tPageDown = \"PageDown\",\n\tPageUp = \"PageUp\",\n}\n", "/*\n * Portions of this file are based on code from react-spectrum.\n * Apache License Version 2.0, Copyright 2020 Adobe.\n *\n * Credits to the React Spectrum team:\n * https://github.com/adobe/react-spectrum/blob/cf9ab24f3255be1530d0f584061a01aa1e8180e6/packages/@react-aria/utils/src/platform.ts\n */\n\nfunction testUserAgent(re: RegExp) {\n\tif (typeof window === \"undefined\" || window.navigator == null) {\n\t\treturn false;\n\t}\n\treturn (\n\t\t// @ts-ignore\n\t\twindow.navigator.userAgentData?.brands.some(\n\t\t\t(brand: { brand: string; version: string }) => re.test(brand.brand),\n\t\t) || re.test(window.navigator.userAgent)\n\t);\n}\n\nfunction testPlatform(re: RegExp) {\n\treturn typeof window !== \"undefined\" && window.navigator != null\n\t\t? re.test(\n\t\t\t\t// @ts-ignore\n\t\t\t\twindow.navigator.userAgentData?.platform || window.navigator.platform,\n\t\t\t)\n\t\t: false;\n}\n\nexport function isMac() {\n\treturn testPlatform(/^Mac/i);\n}\n\nexport function isIPhone() {\n\treturn testPlatform(/^iPhone/i);\n}\n\nexport function isIPad() {\n\treturn (\n\t\ttestPlatform(/^iPad/i) ||\n\t\t// iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support.\n\t\t(isMac() && navigator.maxTouchPoints > 1)\n\t);\n}\n\nexport function isIOS() {\n\treturn isIPhone() || isIPad();\n}\n\nexport function isAppleDevice() {\n\treturn isMac() || isIOS();\n}\n\nexport function isWebKit() {\n\treturn testUserAgent(/AppleWebKit/i) && !isChrome();\n}\n\nexport function isChrome() {\n\treturn testUserAgent(/Chrome/i);\n}\n\nexport function isAndroid() {\n\treturn testUserAgent(/Android/i);\n}\n", "import type { JSX } from \"solid-js\";\n\nimport { isFunction } from \"./assertion\";\nimport { isMac } from \"./platform\";\n\n/** Call a JSX.EventHandlerUnion with the event. */\nexport function callHandler<T, E extends Event>(\n\tevent: E & { currentTarget: T; target: Element },\n\thandler: JSX.EventHandlerUnion<T, E> | undefined,\n) {\n\tif (handler) {\n\t\tif (isFunction(handler)) {\n\t\t\thandler(event);\n\t\t} else {\n\t\t\thandler[0](handler[1], event);\n\t\t}\n\t}\n\n\treturn event?.defaultPrevented;\n}\n\n/** Create a new event handler which calls all given handlers in the order they were chained with the same event. */\nexport function composeEventHandlers<T>(\n\thandlers: Array<JSX.EventHandlerUnion<T, any> | undefined>,\n) {\n\treturn (event: any) => {\n\t\tfor (const handler of handlers) {\n\t\t\tcallHandler(event, handler);\n\t\t}\n\t};\n}\n\nexport function isCtrlKey(e: Pick<KeyboardEvent, \"ctrlKey\" | \"metaKey\">) {\n\tif (isMac()) {\n\t\treturn e.metaKey && !e.ctrlKey;\n\t}\n\n\treturn e.ctrlKey && !e.metaKey;\n}\n", "// External libs re-exports\nexport { createEventListener } from \"@solid-primitives/event-listener\";\nexport { Key } from \"@solid-primitives/keyed\";\nexport { ReactiveMap } from \"@solid-primitives/map\";\nexport { createMediaQuery } from \"@solid-primitives/media\";\nexport { combineProps } from \"@solid-primitives/props\";\nexport { mergeRefs } from \"@solid-primitives/refs\";\nexport type { MaybeAccessor } from \"@solid-primitives/utils\";\nexport { access, accessWith, chain } from \"@solid-primitives/utils\";\n", "/*\n * Portions of this file are based on code from react-spectrum.\n * Apache License Version 2.0, Copyright 2020 Adobe.\n *\n * Credits to the React Spectrum team:\n * https://github.com/adobe/react-spectrum/blob/a9dea8a3672179e6c38aafd1429daf44c7ea2ff6/packages/@react-aria/utils/src/focusWithoutScrolling.ts\n */\n\n// This is a polyfill for element.focus({preventScroll: true});\n// Currently necessary for Safari and old Edge:\n// https://caniuse.com/#feat=mdn-api_htmlelement_focus_preventscroll_option\n// See https://bugs.webkit.org/show_bug.cgi?id=178583\n\n// Original licensing for the following methods can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/calvellido/focus-options-polyfill\n\ninterface ScrollableElement {\n\telement: HTMLElement;\n\tscrollTop: number;\n\tscrollLeft: number;\n}\n\nexport function focusWithoutScrolling(element: HTMLElement | null | undefined) {\n\tif (!element) {\n\t\treturn;\n\t}\n\n\tif (supportsPreventScroll()) {\n\t\telement.focus({ preventScroll: true });\n\t} else {\n\t\tconst scrollableElements = getScrollableElements(element);\n\t\telement.focus();\n\t\trestoreScrollPosition(scrollableElements);\n\t}\n}\n\nlet supportsPreventScrollCached: boolean | null = null;\n\nfunction supportsPreventScroll() {\n\tif (supportsPreventScrollCached == null) {\n\t\tsupportsPreventScrollCached = false;\n\t\ttry {\n\t\t\tconst focusElem = document.createElement(\"div\");\n\t\t\tfocusElem.focus({\n\t\t\t\tget preventScroll() {\n\t\t\t\t\tsupportsPreventScrollCached = true;\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t});\n\t\t} catch (e) {\n\t\t\t// Ignore\n\t\t}\n\t}\n\n\treturn supportsPreventScrollCached;\n}\n\nfunction getScrollableElements(element: HTMLElement): ScrollableElement[] {\n\tlet parent = element.parentNode;\n\tconst scrollableElements: ScrollableElement[] = [];\n\tconst rootScrollingElement =\n\t\tdocument.scrollingElement || document.documentElement;\n\n\twhile (parent instanceof HTMLElement && parent !== rootScrollingElement) {\n\t\tif (\n\t\t\tparent.offsetHeight < parent.scrollHeight ||\n\t\t\tparent.offsetWidth < parent.scrollWidth\n\t\t) {\n\t\t\tscrollableElements.push({\n\t\t\t\telement: parent,\n\t\t\t\tscrollTop: parent.scrollTop,\n\t\t\t\tscrollLeft: parent.scrollLeft,\n\t\t\t});\n\t\t}\n\t\tparent = parent.parentNode;\n\t}\n\n\tif (rootScrollingElement instanceof HTMLElement) {\n\t\tscrollableElements.push({\n\t\t\telement: rootScrollingElement,\n\t\t\tscrollTop: rootScrollingElement.scrollTop,\n\t\t\tscrollLeft: rootScrollingElement.scrollLeft,\n\t\t});\n\t}\n\n\treturn scrollableElements;\n}\n\nfunction restoreScrollPosition(scrollableElements: ScrollableElement[]) {\n\tfor (const { element, scrollTop, scrollLeft } of scrollableElements) {\n\t\telement.scrollTop = scrollTop;\n\t\telement.scrollLeft = scrollLeft;\n\t}\n}\n", "/*\n * Portions of this file are based on code from ariakit.\n * MIT Licensed, Copyright (c) Diego Haz.\n *\n * Credits to the Ariakit team:\n * https://github.com/ariakit/ariakit/blob/main/packages/ariakit-utils/src/focus.ts\n *\n * Portions of this file are based on code from react-spectrum.\n * Apache License Version 2.0, Copyright 2020 Adobe.\n *\n * Credits to the React Spectrum team:\n * https://github.com/adobe/react-spectrum/blob/main/packages/%40react-aria/focus/src/isElementVisible.ts\n * https://github.com/adobe/react-spectrum/blob/8f2f2acb3d5850382ebe631f055f88c704aa7d17/packages/@react-aria/focus/src/FocusScope.tsx\n */\n\nimport { contains, getActiveElement, isFrame } from \"./dom\";\n\nconst focusableElements = [\n\t\"input:not([type='hidden']):not([disabled])\",\n\t\"select:not([disabled])\",\n\t\"textarea:not([disabled])\",\n\t\"button:not([disabled])\",\n\t\"a[href]\",\n\t\"area[href]\",\n\t\"[tabindex]\",\n\t\"iframe\",\n\t\"object\",\n\t\"embed\",\n\t\"audio[controls]\",\n\t\"video[controls]\",\n\t\"[contenteditable]:not([contenteditable='false'])\",\n];\n\nconst tabbableElements = [\n\t...focusableElements,\n\t'[tabindex]:not([tabindex=\"-1\"]):not([disabled])',\n];\n\nexport const FOCUSABLE_ELEMENT_SELECTOR = `${focusableElements.join(\n\t\":not([hidden]),\",\n)},[tabindex]:not([disabled]):not([hidden])`;\n\nexport const TABBABLE_ELEMENT_SELECTOR = tabbableElements.join(\n\t':not([hidden]):not([tabindex=\"-1\"]),',\n);\n\n/**\n * Returns all the tabbable elements in `container`.\n */\nexport function getAllTabbableIn(\n\tcontainer: HTMLElement,\n\tincludeContainer?: boolean,\n) {\n\tconst elements = Array.from(\n\t\tcontainer.querySelectorAll<HTMLElement>(FOCUSABLE_ELEMENT_SELECTOR),\n\t);\n\n\tconst tabbableElements = elements.filter(isTabbable);\n\n\tif (includeContainer && isTabbable(container)) {\n\t\ttabbableElements.unshift(container);\n\t}\n\n\ttabbableElements.forEach((element, i) => {\n\t\tif (isFrame(element) && element.contentDocument) {\n\t\t\tconst frameBody = element.contentDocument.body;\n\t\t\tconst allFrameTabbable = getAllTabbableIn(frameBody, false);\n\t\t\ttabbableElements.splice(i, 1, ...allFrameTabbable);\n\t\t}\n\t});\n\n\treturn tabbableElements;\n}\n\n/**\n * Checks whether `element` is tabbable or not.\n * @example\n * isTabbable(document.querySelector(\"input\")); // true\n * isTabbable(document.querySelector(\"input[tabindex='-1']\")); // false\n * isTabbable(document.querySelector(\"input[hidden]\")); // false\n * isTabbable(document.querySelector(\"input:disabled\")); // false\n */\nexport function isTabbable(element: Element): element is HTMLElement {\n\treturn isFocusable(element) && !hasNegativeTabIndex(element);\n}\n\n/**\n * Checks whether `element` is focusable or not.\n * @example\n * isFocusable(document.querySelector(\"input\")); // true\n * isFocusable(document.querySelector(\"input[tabindex='-1']\")); // true\n * isFocusable(document.querySelector(\"input[hidden]\")); // false\n * isFocusable(document.querySelector(\"input:disabled\")); // false\n */\nexport function isFocusable(element: Element): element is HTMLElement {\n\treturn (\n\t\telement.matches(FOCUSABLE_ELEMENT_SELECTOR) && isElementVisible(element)\n\t);\n}\n\nfunction hasNegativeTabIndex(element: Element) {\n\tconst tabIndex = Number.parseInt(element.getAttribute(\"tabindex\") || \"0\", 10);\n\treturn tabIndex < 0;\n}\n\n/**\n * Adapted from https://github.com/testing-library/jest-dom and\n * https://github.com/vuejs/vue-test-utils-next/.\n * Licensed under the MIT License.\n * @param element - Element to evaluate for display or visibility.\n */\nexport function isElementVisible(\n\telement: Element,\n\tchildElement?: Element,\n): boolean {\n\treturn (\n\t\telement.nodeName !== \"#comment\" &&\n\t\tisStyleVisible(element) &&\n\t\tisAttributeVisible(element, childElement) &&\n\t\t(!element.parentElement || isElementVisible(element.parentElement, element))\n\t);\n}\n\nfunction isStyleVisible(element: Element) {\n\tif (!(element instanceof HTMLElement) && !(element instanceof SVGElement)) {\n\t\treturn false;\n\t}\n\n\tconst { display, visibility } = element.style;\n\n\tlet isVisible =\n\t\tdisplay !== \"none\" && visibility !== \"hidden\" && visibility !== \"collapse\";\n\n\tif (isVisible) {\n\t\tif (!element.ownerDocument.defaultView) {\n\t\t\treturn isVisible;\n\t\t}\n\n\t\tconst { getComputedStyle } = element.ownerDocument.defaultView;\n\t\tconst { display: computedDisplay, visibility: computedVisibility } =\n\t\t\tgetComputedStyle(element);\n\n\t\tisVisible =\n\t\t\tcomputedDisplay !== \"none\" &&\n\t\t\tcomputedVisibility !== \"hidden\" &&\n\t\t\tcomputedVisibility !== \"collapse\";\n\t}\n\n\treturn isVisible;\n}\n\nfunction isAttributeVisible(element: Element, childElement?: Element) {\n\treturn (\n\t\t!element.hasAttribute(\"hidden\") &&\n\t\t(element.nodeName === \"DETAILS\" &&\n\t\tchildElement &&\n\t\tchildElement.nodeName !== \"SUMMARY\"\n\t\t\t? element.hasAttribute(\"open\")\n\t\t\t: true)\n\t);\n}\n\n/**\n * Checks if `element` has focus within.\n * Elements that are referenced by `aria-activedescendant` are also considered.\n * @example\n * hasFocusWithin(document.getElementById(\"id\"));\n */\nexport function hasFocusWithin(element: Node | Element) {\n\tconst activeElement = getActiveElement(element);\n\n\tif (!activeElement) {\n\t\treturn false;\n\t}\n\n\tif (!contains(element, activeElement)) {\n\t\tconst activeDescendant = activeElement.getAttribute(\n\t\t\t\"aria-activedescendant\",\n\t\t);\n\t\tif (!activeDescendant) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!(\"id\" in element)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (activeDescendant === element.id) {\n\t\t\treturn true;\n\t\t}\n\t\treturn !!element.querySelector(`#${CSS.escape(activeDescendant)}`);\n\t}\n\treturn true;\n}\n", "/*\n * Portions of this file are based on code from react-spectrum.\n * Apache License Version 2.0, Copyright 2020 Adobe.\n *\n * Credits to the React Spectrum team:\n * https://github.com/adobe/react-spectrum/blob/f6e686fe9d3b983d48650980c1ecfdde320bc62f/packages/@react-aria/focus/src/FocusScope.tsx\n */\n\nimport type { Accessor } from \"solid-js\";\n\nimport { focusWithoutScrolling } from \"./focus-without-scrolling\";\nimport {\n\tFOCUSABLE_ELEMENT_SELECTOR,\n\tTABBABLE_ELEMENT_SELECTOR,\n\tisElementVisible,\n} from \"./tabbable\";\n\nexport interface FocusManager {\n\t/** Moves focus to the next focusable or tabbable element in the focus scope. */\n\tfocusNext(opts?: FocusManagerOptions): HTMLElement | undefined;\n\n\t/** Moves focus to the previous focusable or tabbable element in the focus scope. */\n\tfocusPrevious(opts?: FocusManagerOptions): HTMLElement | undefined;\n\n\t/** Moves focus to the first focusable or tabbable element in the focus scope. */\n\tfocusFirst(opts?: FocusManagerOptions): HTMLElement | undefined;\n\n\t/** Moves focus to the last focusable or tabbable element in the focus scope. */\n\tfocusLast(opts?: FocusManagerOptions): HTMLElement | undefined;\n}\n\nexport interface FocusManagerOptions {\n\t/** The element to start searching from. The currently focused element by default. */\n\tfrom?: Element;\n\n\t/** Whether to only include tabbable elements, or all focusable elements. */\n\ttabbable?: boolean;\n\n\t/** Whether focus should wrap around when it reaches the end of the scope. */\n\twrap?: boolean;\n\n\t/** A callback that determines whether the given element is focused. */\n\taccept?: (node: Element) => boolean;\n}\n\n/**\n * Creates a FocusManager object that can be used to move focus within an element.\n */\nexport function createFocusManager(\n\tref: Accessor<HTMLElement | undefined>,\n\tdefaultOptions: Accessor<FocusManagerOptions> = () => ({}),\n): FocusManager {\n\tconst focusNext = (opts: FocusManagerOptions = {}) => {\n\t\tconst root = ref();\n\n\t\tif (!root) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst {\n\t\t\tfrom = defaultOptions().from || document.activeElement,\n\t\t\ttabbable = defaultOptions().tabbable,\n\t\t\twrap = defaultOptions().wrap,\n\t\t\taccept = defaultOptions().accept,\n\t\t} = opts;\n\n\t\tconst walker = getFocusableTreeWalker(root, { tabbable, accept });\n\n\t\tif (from && root.contains(from)) {\n\t\t\twalker.currentNode = from;\n\t\t}\n\n\t\tlet nextNode = walker.nextNode() as HTMLElement | undefined;\n\n\t\tif (!nextNode && wrap) {\n\t\t\twalker.currentNode = root;\n\t\t\tnextNode = walker.nextNode() as HTMLElement | undefined;\n\t\t}\n\n\t\tif (nextNode) {\n\t\t\tfocusElement(nextNode, true);\n\t\t}\n\n\t\treturn nextNode;\n\t};\n\n\tconst focusPrevious = (opts: FocusManagerOptions = {}) => {\n\t\tconst root = ref();\n\n\t\tif (!root) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst {\n\t\t\tfrom = defaultOptions().from || document.activeElement,\n\t\t\ttabbable = defaultOptions().tabbable,\n\t\t\twrap = defaultOptions().wrap,\n\t\t\taccept = defaultOptions().accept,\n\t\t} = opts;\n\n\t\tconst walker = getFocusableTreeWalker(root, { tabbable, accept });\n\n\t\tif (from && root.contains(from)) {\n\t\t\twalker.currentNode = from;\n\t\t} else {\n\t\t\tconst next = last(walker);\n\t\t\tif (next) {\n\t\t\t\tfocusElement(next, true);\n\t\t\t}\n\t\t\treturn next;\n\t\t}\n\n\t\tlet previousNode = walker.previousNode() as HTMLElement | undefined;\n\n\t\tif (!previousNode && wrap) {\n\t\t\twalker.currentNode = root;\n\t\t\tpreviousNode = last(walker);\n\t\t}\n\n\t\tif (previousNode) {\n\t\t\tfocusElement(previousNode, true);\n\t\t}\n\n\t\treturn previousNode;\n\t};\n\n\tconst focusFirst = (opts: FocusManagerOptions = {}) => {\n\t\tconst root = ref();\n\n\t\tif (!root) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst {\n\t\t\ttabbable = defaultOptions().tabbable,\n\t\t\taccept = defaultOptions().accept,\n\t\t} = opts;\n\n\t\tconst walker = getFocusableTreeWalker(root, { tabbable, accept });\n\t\tconst nextNode = walker.nextNode() as HTMLElement | undefined;\n\n\t\tif (nextNode) {\n\t\t\tfocusElement(nextNode, true);\n\t\t}\n\n\t\treturn nextNode;\n\t};\n\n\tconst focusLast = (opts: FocusManagerOptions = {}) => {\n\t\tconst root = ref();\n\n\t\tif (!root) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst {\n\t\t\ttabbable = defaultOptions().tabbable,\n\t\t\taccept = defaultOptions().accept,\n\t\t} = opts;\n\n\t\tconst walker = getFocusableTreeWalker(root, { tabbable, accept });\n\t\tconst next = last(walker);\n\n\t\tif (next) {\n\t\t\tfocusElement(next, true);\n\t\t}\n\n\t\treturn next;\n\t};\n\n\treturn { focusNext, focusPrevious, focusFirst, focusLast };\n}\n\nfunction focusElement(element: HTMLElement | null, scroll = false) {\n\tif (element != null && !scroll) {\n\t\ttry {\n\t\t\tfocusWithoutScrolling(element);\n\t\t} catch (err) {\n\t\t\t// ignore\n\t\t}\n\t} else if (element != null) {\n\t\ttry {\n\t\t\telement.focus();\n\t\t} catch (err) {\n\t\t\t// ignore\n\t\t}\n\t}\n}\n\nfunction last(walker: TreeWalker) {\n\tlet next: HTMLElement | undefined;\n\tlet last: HTMLElement | undefined;\n\n\tdo {\n\t\tlast = walker.lastChild() as HTMLElement;\n\t\tif (last) {\n\t\t\tnext = last;\n\t\t}\n\t} while (last);\n\n\treturn next;\n}\n\nfunction isElementInScope(element: Element | null, scope: HTMLElement[]) {\n\treturn scope.some((node) => node.contains(element));\n}\n\n/**\n * Create a [TreeWalker]{@link https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker}\n * that matches all focusable/tabbable elements.\n */\nexport function getFocusableTreeWalker(\n\troot: HTMLElement,\n\topts?: FocusManagerOptions,\n\tscope?: HTMLElement[],\n) {\n\tconst selector = opts?.tabbable\n\t\t? TABBABLE_ELEMENT_SELECTOR\n\t\t: FOCUSABLE_ELEMENT_SELECTOR;\n\tconst walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {\n\t\tacceptNode(node) {\n\t\t\t// Skip nodes inside the starting node.\n\t\t\tif (opts?.from?.contains(node)) {\n\t\t\t\treturn NodeFilter.FILTER_REJECT;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t(node as HTMLElement).matches(selector) &&\n\t\t\t\tisElementVisible(node as HTMLElement) &&\n\t\t\t\t(!scope || isElementInScope(node as HTMLElement, scope)) &&\n\t\t\t\t(!opts?.accept || opts.accept(node as Element))\n\t\t\t) {\n\t\t\t\treturn NodeFilter.FILTER_ACCEPT;\n\t\t\t}\n\n\t\t\treturn NodeFilter.FILTER_SKIP;\n\t\t},\n\t});\n\n\tif (opts?.from) {\n\t\twalker.currentNode = opts.from;\n\t}\n\n\treturn walker;\n}\n", "/*\n * Portions of this file are based on code from react-spectrum.\n * Apache License Version 2.0, Copyright 2020 Adobe.\n *\n * Credits to the React Spectrum team:\n * https://github.com/adobe/react-spectrum/blob/a9dea8a3672179e6c38aafd1429daf44c7ea2ff6/packages/@react-aria/utils/src/getScrollParent.ts\n */\n\nexport function getScrollParent(node: Element | null): Element {\n\tlet parentNode = node;\n\twhile (parentNode && !isScrollable(parentNode)) {\n\t\tparentNode = parentNode.parentElement;\n\t}\n\n\treturn parentNode || document.scrollingElement || document.documentElement;\n}\n\nfunction isScrollable(node: Element): boolean {\n\tconst style = window.getComputedStyle(node);\n\treturn /(auto|scroll)/.test(\n\t\tstyle.overflow + style.overflowX + style.overflowY,\n\t);\n}\n", "/*\n * Portions of this file are based on code from react-spectrum.\n * Apache License Version 2.0, Copyright 2020 Adobe.\n *\n * Credits to the React Spectrum team:\n * https://github.com/adobe/react-spectrum/blob/a9dea8a3672179e6c38aafd1429daf44c7ea2ff6/packages/@react-aria/utils/src/isVirtualEvent.ts\n */\n\n// Original licensing for the following method can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/blob/3c713d513195a53788b3f8bb4b70279d68b15bcc/packages/react-interactions/events/src/dom/shared/index.js#L74-L87\n\nimport { isAndroid } from \"./platform\";\n\n// Keyboards, Assistive Technologies, and element.click() all produce a \"virtual\"\n// click event. This is a method of inferring such clicks. Every browser except\n// IE 11 only sets a zero value of \"detail\" for click events that are \"virtual\".\n// However, IE 11 uses a zero value for all click events. For IE 11 we rely on\n// the quirk that it produces click events that are of type PointerEvent, and\n// where only the \"virtual\" click lacks a pointerType field.\n\nexport function isVirtualClick(event: MouseEvent | PointerEvent): boolean {\n\t// JAWS/NVDA with Firefox.\n\tif ((event as any).mozInputSource === 0 && event.isTrusted) {\n\t\treturn true;\n\t}\n\n\t// Android TalkBack's detail value varies depending on the event listener providing the event so we have specific logic here instead\n\t// If pointerType is defined, event is from a click listener. For events from mousedown listener, detail === 0 is a sufficient check\n\t// to detect TalkBack virtual clicks.\n\tif (isAndroid() && (event as PointerEvent).pointerType) {\n\t\treturn event.type === \"click\" && event.buttons === 1;\n\t}\n\n\treturn event.detail === 0 && !(event as PointerEvent).pointerType;\n}\n\nexport function isVirtualPointerEvent(event: PointerEvent) {\n\t// If the pointer size is zero, then we assume it's from a screen reader.\n\t// Android TalkBack double tap will sometimes return a event with width and height of 1\n\t// and pointerType === 'mouse' so we need to check for a specific combination of event attributes.\n\t// Cannot use \"event.pressure === 0\" as the sole check due to Safari pointer events always returning pressure === 0\n\t// instead of .5, see https://bugs.webkit.org/show_bug.cgi?id=206216. event.pointerType === 'mouse' is to distingush\n\t// Talkback double tap from Windows Firefox touch screen press\n\treturn (\n\t\t(event.width === 0 && event.height === 0) ||\n\t\t(event.width === 1 &&\n\t\t\tevent.height === 1 &&\n\t\t\tevent.pressure === 0 &&\n\t\t\tevent.detail === 0 &&\n\t\t\tevent.pointerType === \"mouse\")\n\t);\n}\n", "/** A function that does nothing. */\nexport function noop() {\n\treturn;\n}\n", "/*\n * Portions of this file are based on code from react-spectrum.\n * Apache License Version 2.0, Copyright 2020 Adobe.\n *\n * Credits to the React Spectrum team:\n * https://github.com/adobe/react-spectrum/blob/ff3e690fffc6c54367b8057e28a0e5b9211f37b5/packages/@react-stately/utils/src/number.ts\n */\n\n/**\n * Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.\n */\nexport function clamp(\n\tvalue: number,\n\tmin = Number.NEGATIVE_INFINITY,\n\tmax = Number.POSITIVE_INFINITY,\n): number {\n\treturn Math.min(Math.max(value, min), max);\n}\n\nexport function snapValueToStep(\n\tvalue: number,\n\tmin: number,\n\tmax: number,\n\tstep: number,\n): number {\n\tconst remainder = (value - (Number.isNaN(min) ? 0 : min)) % step;\n\tlet snappedValue =\n\t\tMath.abs(remainder) * 2 >= step\n\t\t\t? value + Math.sign(remainder) * (step - Math.abs(remainder))\n\t\t\t: value - remainder;\n\n\tif (!Number.isNaN(min)) {\n\t\tif (snappedValue < min) {\n\t\t\tsnappedValue = min;\n\t\t} else if (!Number.isNaN(max) && snappedValue > max) {\n\t\t\tsnappedValue = min + Math.floor((max - min) / step) * step;\n\t\t}\n\t} else if (!Number.isNaN(max) && snappedValue > max) {\n\t\tsnappedValue = Math.floor(max / step) * step;\n\t}\n\n\t// correct floating point behavior by rounding to step precision\n\tconst string = step.toString();\n\tconst index = string.indexOf(\".\");\n\tconst precision = index >= 0 ? string.length - index : 0;\n\n\tif (precision > 0) {\n\t\tconst pow = 10 ** precision;\n\t\tsnappedValue = Math.round(snappedValue * pow) / pow;\n\t}\n\n\treturn snappedValue;\n}\n\nexport const getPrecision = (n: number) => {\n\tlet e = 1;\n\tlet precision = 0;\n\twhile (Math.round(n * e) / e !== n) {\n\t\te *= 10;\n\t\tprecision++;\n\t}\n\n\treturn precision;\n};\n", "/*\n * Portions of this file are based on code from ariakit.\n * MIT Licensed, Copyright (c) Diego Haz.\n *\n * Credits to the Ariakit team:\n * https://github.com/ariakit/ariakit/blob/84e97943ad637a582c01c9b56d880cd95f595737/packages/ariakit/src/hovercard/__utils/polygon.ts\n * https://github.com/ariakit/ariakit/blob/f2a96973de523d67e41eec983263936c489ef3e2/packages/ariakit/src/hovercard/__utils/debug-polygon.ts\n */\n\nexport type Point = [number, number];\nexport type Polygon = Point[];\n\nexport function getEventPoint(event: MouseEvent): Point {\n\treturn [event.clientX, event.clientY];\n}\n\n// Based on https://github.com/metafloor/pointinpoly\nexport function isPointInPolygon(point: Point, polygon: Polygon) {\n\tconst [x, y] = point;\n\tlet inside = false;\n\tconst length = polygon.length;\n\tfor (let l = length, i = 0, j = l - 1; i < l; j = i++) {\n\t\tconst [xi, yi] = polygon[i] as Point;\n\t\tconst [xj, yj] = polygon[j] as Point;\n\t\tconst [, vy] = polygon[j === 0 ? l - 1 : j - 1] || [0, 0];\n\t\tconst where = (yi - yj) * (x - xi) - (xi - xj) * (y - yi);\n\t\tif (yj < yi) {\n\t\t\tif (y >= yj && y < yi) {\n\t\t\t\t// point on the line\n\t\t\t\tif (where === 0) return true;\n\t\t\t\tif (where > 0) {\n\t\t\t\t\tif (y === yj) {\n\t\t\t\t\t\t// ray intersects vertex\n\t\t\t\t\t\tif (y > vy) {\n\t\t\t\t\t\t\tinside = !inside;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinside = !inside;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (yi < yj) {\n\t\t\tif (y > yi && y <= yj) {\n\t\t\t\t// point on the line\n\t\t\t\tif (where === 0) return true;\n\t\t\t\tif (where < 0) {\n\t\t\t\t\tif (y === yj) {\n\t\t\t\t\t\t// ray intersects vertex\n\t\t\t\t\t\tif (y < vy) {\n\t\t\t\t\t\t\tinside = !inside;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinside = !inside;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (y === yi && ((x >= xj && x <= xi) || (x >= xi && x <= xj))) {\n\t\t\t// point on horizontal edge\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn inside;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Debug polygon\n * -----------------------------------------------------------------------------------------------*/\n\nfunction getPolygon() {\n\tconst id = \"debug-polygon\";\n\tconst existingPolygon = document.getElementById(id);\n\tif (existingPolygon) {\n\t\treturn existingPolygon;\n\t}\n\tconst svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n\tsvg.style.top = \"0\";\n\tsvg.style.left = \"0\";\n\tsvg.style.width = \"100%\";\n\tsvg.style.height = \"100%\";\n\tsvg.style.fill = \"green\";\n\tsvg.style.opacity = \"0.2\";\n\tsvg.style.position = \"fixed\";\n\tsvg.style.pointerEvents = \"none\";\n\tsvg.style.zIndex = \"999999\";\n\tconst polygon = document.createElementNS(\n\t\t\"http://www.w3.org/2000/svg\",\n\t\t\"polygon\",\n\t);\n\tpolygon.setAttribute(\"id\", id);\n\tpolygon.setAttribute(\"points\", \"0,0 0,0\");\n\tsvg.appendChild(polygon);\n\tdocument.body.appendChild(svg);\n\treturn polygon;\n}\n\nexport function debugPolygon(polygon: Polygon) {\n\tconst polygonElement = getPolygon();\n\tconst points = polygon.map((point) => point.join(\",\")).join(\" \");\n\tpolygonElement.setAttribute(\"points\", points);\n\t// Return SVG element\n\treturn polygonElement.parentElement;\n}\n", "import { type ComponentProps, type ValidComponent, mergeProps } from \"solid-js\";\n\n/**\n * Allows for extending a set of props (`Source`) by an overriding set of props (`Override`),\n * ensuring that any duplicates are overridden by the overriding set of props.\n */\nexport type OverrideProps<Source = {}, Override = {}> = Omit<\n\tSource,\n\tkeyof Override\n> &\n\tOverride;\n\n/**\n * Allows for extending a set of `ComponentProps` by an overriding set of props,\n * ensuring that any duplicates are overridden by the overriding set of props.\n */\nexport type OverrideComponentProps<T extends ValidComponent, P> = OverrideProps<\n\tComponentProps<T>,\n\tP\n>;\n\nexport function mergeDefaultProps<T extends {}, D extends Partial<T>>(\n\tdefaultProps: D,\n\tprops: T,\n): OverrideProps<T, D> {\n\treturn mergeProps(defaultProps, props) as OverrideProps<T, D>;\n}\n", "/*\n * Portions of this file are based on code from react-spectrum.\n * Apache License Version 2.0, Copyright 2020 Adobe.\n *\n * Credits to the React Spectrum team:\n * https://github.com/adobe/react-spectrum/blob/a9dea8a3672179e6c38aafd1429daf44c7ea2ff6/packages/@react-aria/utils/src/runAfterTransition.ts\n */\n\n// We store a global list of elements that are currently transitioning,\n// mapped to a set of CSS properties that are transitioning for that element.\n// This is necessary rather than a simple count of transitions because of browser\n// bugs, e.g. Chrome sometimes fires both transitionend and transitioncancel rather\n// than one or the other. So we need to track what's actually transitioning so that\n// we can ignore these duplicate events.\nconst transitionsByElement = new Map<EventTarget, Set<string>>();\n\n// A list of callbacks to call once there are no transitioning elements.\nconst transitionCallbacks = new Set<() => void>();\n\nfunction setupGlobalEvents() {\n\tif (typeof window === \"undefined\") {\n\t\treturn;\n\t}\n\n\tconst onTransitionStart = (e: TransitionEvent) => {\n\t\tif (!e.target) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Add the transitioning property to the list for this element.\n\t\tlet transitions = transitionsByElement.get(e.target);\n\t\tif (!transitions) {\n\t\t\ttransitions = new Set();\n\t\t\ttransitionsByElement.set(e.target, transitions);\n\n\t\t\t// The transitioncancel event must be registered on the element itself, rather than as a global\n\t\t\t// event. This enables us to handle when the node is deleted from the document while it is transitioning.\n\t\t\t// In that case, the cancel event would have nowhere to bubble to, so we need to handle it directly.\n\t\t\te.target.addEventListener(\n\t\t\t\t\"transitioncancel\",\n\t\t\t\tonTransitionEnd as EventListener,\n\t\t\t);\n\t\t}\n\n\t\ttransitions.add(e.propertyName);\n\t};\n\n\tconst onTransitionEnd = (e: TransitionEvent) => {\n\t\tif (!e.target) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove property from list of transitioning properties.\n\t\tconst properties = transitionsByElement.get(e.target);\n\t\tif (!properties) {\n\t\t\treturn;\n\t\t}\n\n\t\tproperties.delete(e.propertyName);\n\n\t\t// If empty, remove transitioncancel event, and remove the element from the list of transitioning elements.\n\t\tif (properties.size === 0) {\n\t\t\te.target.removeEventListener(\n\t\t\t\t\"transitioncancel\",\n\t\t\t\tonTransitionEnd as EventListener,\n\t\t\t);\n\t\t\ttransitionsByElement.delete(e.target);\n\t\t}\n\n\t\t// If no transitioning elements, call all the queued callbacks.\n\t\tif (transitionsByElement.size === 0) {\n\t\t\tfor (const cb of transitionCallbacks) {\n\t\t\t\tcb();\n\t\t\t}\n\n\t\t\ttransitionCallbacks.clear();\n\t\t}\n\t};\n\n\tdocument.body.addEventListener(\"transitionrun\", onTransitionStart);\n\tdocument.body.addEventListener(\"transitionend\", onTransitionEnd);\n}\n\nif (typeof document !== \"undefined\") {\n\tif (document.readyState !== \"loading\") {\n\t\tsetupGlobalEvents();\n\t} else {\n\t\tdocument.addEventListener(\"DOMContentLoaded\", setupGlobalEvents);\n\t}\n}\n\nexport function runAfterTransition(fn: () => void) {\n\t// Wait one frame to see if an animation starts, e.g. a transition on mount.\n\trequestAnimationFrame(() => {\n\t\t// If no transitions are running, call the function immediately.\n\t\t// Otherwise, add it to a list of callbacks to run at the end of the animation.\n\t\tif (transitionsByElement.size === 0) {\n\t\t\tfn();\n\t\t} else {\n\t\t\ttransitionCallbacks.add(fn);\n\t\t}\n\t});\n}\n", "/*\n * Portions of this file are based on code from react-spectrum.\n * Apache License Version 2.0, Copyright 2020 Adobe.\n *\n * Credits to the React Spectrum team:\n * https://github.com/adobe/react-spectrum/blob/8f2f2acb3d5850382ebe631f055f88c704aa7d17/packages/@react-aria/utils/src/scrollIntoView.ts\n */\n\nimport { getScrollParent } from \"./get-scroll-parent\";\n\ninterface ScrollIntoViewportOpts {\n\t/** The optional containing element of the target to be centered in the viewport. */\n\tcontainingElement?: Element;\n}\n\n/**\n * Scrolls `scrollView` so that `element` is visible.\n * Similar to `element.scrollIntoView({block: 'nearest'})` (not supported in Edge),\n * but doesn't affect parents above `scrollView`.\n */\nexport function scrollIntoView(scrollView: HTMLElement, element: HTMLElement) {\n\tconst offsetX = relativeOffset(scrollView, element, \"left\");\n\tconst offsetY = relativeOffset(scrollView, element, \"top\");\n\tconst width = element.offsetWidth;\n\tconst height = element.offsetHeight;\n\tlet x = scrollView.scrollLeft;\n\tlet y = scrollView.scrollTop;\n\tconst maxX = x + scrollView.offsetWidth;\n\tconst maxY = y + scrollView.offsetHeight;\n\n\tif (offsetX <= x) {\n\t\tx = offsetX;\n\t} else if (offsetX + width > maxX) {\n\t\tx += offsetX + width - maxX;\n\t}\n\tif (offsetY <= y) {\n\t\ty = offsetY;\n\t} else if (offsetY + height > maxY) {\n\t\ty += offsetY + height - maxY;\n\t}\n\n\tscrollView.scrollLeft = x;\n\tscrollView.scrollTop = y;\n}\n\n/**\n * Computes the offset left or top from child to ancestor by accumulating\n * offsetLeft or offsetTop through intervening offsetParents.\n */\nfunction relativeOffset(\n\tancestor: HTMLElement,\n\tchild: HTMLElement,\n\taxis: \"left\" | \"top\",\n) {\n\tconst prop = axis === \"left\" ? \"offsetLeft\" : \"offsetTop\";\n\tlet sum = 0;\n\twhile (child.offsetParent) {\n\t\tsum += child[prop];\n\t\tif (child.offsetParent === ancestor) {\n\t\t\t// Stop once we have found the ancestor we are interested in.\n\t\t\tbreak;\n\t\t}\n\t\tif (child.offsetParent.contains(ancestor)) {\n\t\t\t// If the ancestor is not `position:relative`, then we stop at\n\t\t\t// _its_ offset parent, and we subtract off _its_ offset, so that\n\t\t\t// we end up with the proper offset from child to ancestor.\n\t\t\tsum -= ancestor[prop];\n\t\t\tbreak;\n\t\t}\n\t\t// biome-ignore lint/style/noParameterAssign: used in loop\n\t\tchild = child.offsetParent as HTMLElement;\n\t}\n\treturn sum;\n}\n\n/**\n * Scrolls the `targetElement` so it is visible in the viewport. Accepts an optional `opts.containingElement`\n * that will be centered in the viewport prior to scrolling the targetElement into view. If scrolling is prevented on\n * the body (e.g. targetElement is in a popover), this will only scroll the scroll parents of the targetElement up to but not including the body itself.\n */\nexport function scrollIntoViewport(\n\ttargetElement: Element,\n\topts?: ScrollIntoViewportOpts,\n) {\n\tif (document.contains(targetElement)) {\n\t\tconst root = document.scrollingElement || document.documentElement;\n\t\tconst isScrollPrevented =\n\t\t\twindow.getComputedStyle(root).overflow === \"hidden\";\n\t\t// If scrolling is not currently prevented then we aren’t in a overlay nor is a overlay open, just use element.scrollIntoView to bring the element into view\n\t\tif (!isScrollPrevented) {\n\t\t\tconst { left: originalLeft, top: originalTop } =\n\t\t\t\ttargetElement.getBoundingClientRect();\n\n\t\t\t// use scrollIntoView({block: 'nearest'}) instead of .focus to check if the element is fully in view or not since .focus()\n\t\t\t// won't cause a scroll if the element is already focused and doesn't behave consistently when an element is partially out of view horizontally vs vertically\n\t\t\ttargetElement?.scrollIntoView?.({ block: \"nearest\" });\n\t\t\tconst { left: newLeft, top: newTop } =\n\t\t\t\ttargetElement.getBoundingClientRect();\n\t\t\t// Account for sub pixel differences from rounding\n\t\t\tif (\n\t\t\t\tMath.abs(originalLeft - newLeft) > 1 ||\n\t\t\t\tMath.abs(originalTop - newTop) > 1\n\t\t\t) {\n\t\t\t\topts?.containingElement?.scrollIntoView?.({\n\t\t\t\t\tblock: \"center\",\n\t\t\t\t\tinline: \"center\",\n\t\t\t\t});\n\t\t\t\ttargetElement.scrollIntoView?.({ block: \"nearest\" });\n\t\t\t}\n\t\t} else {\n\t\t\tlet scrollParent = getScrollParent(targetElement);\n\t\t\t// If scrolling is prevented, we don't want to scroll the body since it might move the overlay partially offscreen and the user can't scroll it back into view.\n\t\t\twhile (\n\t\t\t\ttargetElement &&\n\t\t\t\tscrollParent &&\n\t\t\t\ttargetElement !== root &&\n\t\t\t\tscrollParent !== root\n\t\t\t) {\n\t\t\t\tscrollIntoView(\n\t\t\t\t\tscrollParent as HTMLElement,\n\t\t\t\t\ttargetElement as HTMLElement,\n\t\t\t\t);\n\t\t\t\t// biome-ignore lint/style/noParameterAssign: used in loop\n\t\t\t\ttargetElement = scrollParent;\n\t\t\t\tscrollParent = getScrollParent(targetElement);\n\t\t\t}\n\t\t}\n\t}\n}\n", "import type { JSX } from \"solid-js\";\n\nexport const visuallyHiddenStyles: JSX.CSSProperties = {\n\tborder: \"0\",\n\tclip: \"rect(0 0 0 0)\",\n\t\"clip-path\": \"inset(50%)\",\n\theight: \"1px\",\n\tmargin: \"0 -1px -1px 0\",\n\toverflow: \"hidden\",\n\tpadding: \"0\",\n\tposition: \"absolute\",\n\twidth: \"1px\",\n\t\"white-space\": \"nowrap\",\n};\n", "import { createContext, createSignal, createMemo, onMount, onCleanup, useContext } from 'solid-js';\nimport { isServer, createComponent } from 'solid-js/web';\nimport { DateFormatter } from '@internationalized/date';\nimport { access } from '@kobalte/utils';\nimport { NumberFormatter } from '@internationalized/number';\n\n// src/i18n/create-collator.ts\n\n// src/i18n/utils.ts\nvar RTL_SCRIPTS = /* @__PURE__ */ new Set([\n \"Avst\",\n \"Arab\",\n \"Armi\",\n \"Syrc\",\n \"Samr\",\n \"Mand\",\n \"Thaa\",\n \"Mend\",\n \"Nkoo\",\n \"Adlm\",\n \"Rohg\",\n \"Hebr\"\n]);\nvar RTL_LANGS = /* @__PURE__ */ new Set([\n \"ae\",\n \"ar\",\n \"arc\",\n \"bcc\",\n \"bqi\",\n \"ckb\",\n \"dv\",\n \"fa\",\n \"glk\",\n \"he\",\n \"ku\",\n \"mzn\",\n \"nqo\",\n \"pnb\",\n \"ps\",\n \"sd\",\n \"ug\",\n \"ur\",\n \"yi\"\n]);\nfunction isRTL(locale) {\n if (Intl.Locale) {\n const script = new Intl.Locale(locale).maximize().script ?? \"\";\n return RTL_SCRIPTS.has(script);\n }\n const lang = locale.split(\"-\")[0];\n return RTL_LANGS.has(lang);\n}\nfunction getReadingDirection(locale) {\n return isRTL(locale) ? \"rtl\" : \"ltr\";\n}\n\n// src/i18n/create-default-locale.ts\nfunction getDefaultLocale() {\n let locale = typeof navigator !== \"undefined\" && // @ts-ignore\n (navigator.language || navigator.userLanguage) || \"en-US\";\n return {\n locale,\n direction: getReadingDirection(locale)\n };\n}\nvar currentLocale = getDefaultLocale();\nvar listeners = /* @__PURE__ */ new Set();\nfunction updateLocale() {\n currentLocale = getDefaultLocale();\n for (const listener of listeners) {\n listener(currentLocale);\n }\n}\nfunction createDefaultLocale() {\n const defaultSSRLocale = {\n locale: \"en-US\",\n direction: \"ltr\"\n };\n const [defaultClientLocale, setDefaultClientLocale] = createSignal(currentLocale);\n const defaultLocale = createMemo(\n () => isServer ? defaultSSRLocale : defaultClientLocale()\n );\n onMount(() => {\n if (listeners.size === 0) {\n window.addEventListener(\"languagechange\", updateLocale);\n }\n listeners.add(setDefaultClientLocale);\n onCleanup(() => {\n listeners.delete(setDefaultClientLocale);\n if (listeners.size === 0) {\n window.removeEventListener(\"languagechange\", updateLocale);\n }\n });\n });\n return {\n locale: () => defaultLocale().locale,\n direction: () => defaultLocale().direction\n };\n}\n\n// src/i18n/i18n-provider.tsx\nvar I18nContext = createContext();\nfunction I18nProvider(props) {\n const defaultLocale = createDefaultLocale();\n const context = {\n locale: () => props.locale ?? defaultLocale.locale(),\n direction: () => props.locale ? getReadingDirection(props.locale) : defaultLocale.direction()\n };\n return createComponent(I18nContext.Provider, {\n value: context,\n get children() {\n return props.children;\n }\n });\n}\nfunction useLocale() {\n const defaultLocale = createDefaultLocale();\n const context = useContext(I18nContext);\n return context || defaultLocale;\n}\n\n// src/i18n/create-collator.ts\nvar cache = /* @__PURE__ */ new Map();\nfunction createCollator(options) {\n const { locale } = useLocale();\n const cacheKey = createMemo(() => {\n return locale() + (options ? Object.entries(options).sort((a, b) => a[0] < b[0] ? -1 : 1).join() : \"\");\n });\n return createMemo(() => {\n const key = cacheKey();\n let collator;\n if (cache.has(key)) {\n collator = cache.get(key);\n }\n if (!collator) {\n collator = new Intl.Collator(locale(), options);\n cache.set(key, collator);\n }\n return collator;\n });\n}\nfunction createDateFormatter(options) {\n const { locale } = useLocale();\n return createMemo(() => new DateFormatter(locale(), access(options)));\n}\n\n// src/i18n/create-filter.ts\nfunction createFilter(options) {\n const collator = createCollator({\n usage: \"search\",\n ...options\n });\n const startsWith = (str, substr) => {\n if (substr.length === 0) {\n return true;\n }\n const normalizedStr = str.normalize(\"NFC\");\n const normalizedSubstr = substr.normalize(\"NFC\");\n return collator().compare(\n normalizedStr.slice(0, normalizedSubstr.length),\n normalizedSubstr\n ) === 0;\n };\n const endsWith = (str, substr) => {\n if (substr.length === 0) {\n return true;\n }\n const normalizedStr = str.normalize(\"NFC\");\n const normalizedSubstr = substr.normalize(\"NFC\");\n return collator().compare(\n normalizedStr.slice(-normalizedSubstr.length),\n normalizedSubstr\n ) === 0;\n };\n const contains = (str, substr) => {\n if (substr.length === 0) {\n return true;\n }\n const normalizedStr = str.normalize(\"NFC\");\n const normalizedSubstr = substr.normalize(\"NFC\");\n let scan = 0;\n const sliceLen = substr.length;\n for (; scan + sliceLen <= normalizedStr.length; scan++) {\n const slice = normalizedStr.slice(scan, scan + sliceLen);\n if (collator().compare(normalizedSubstr, slice) === 0) {\n return true;\n }\n }\n return false;\n };\n return {\n startsWith,\n endsWith,\n contains\n };\n}\nfunction createNumberFormatter(options) {\n const { locale } = useLocale();\n return createMemo(() => new NumberFormatter(locale(), access(options)));\n}\n\nexport { I18nProvider, RTL_LANGS, createCollator, createDateFormatter, createDefaultLocale, createFilter, createNumberFormatter, getDefaultLocale, getReadingDirection, isRTL, useLocale };\n", "import { createComponent, Dynamic, mergeProps } from 'solid-js/web';\nimport { splitProps } from 'solid-js';\n\n// src/polymorphic/polymorphic.tsx\nfunction Polymorphic(props) {\n const [local, others] = splitProps(props, [\"as\"]);\n if (!local.as) {\n throw new Error(\"[kobalte]: Polymorphic is missing the required `as` prop.\");\n }\n return (\n // @ts-ignore: Props are valid but not worth calculating\n createComponent(Dynamic, mergeProps(others, {\n get component() {\n return local.as;\n }\n }))\n );\n}\n\nexport { Polymorphic };\n", "/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n const firstChar = placement[0];\n return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n const side = getSide(placement);\n return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n", "import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n ...platform,\n detectOverflow\n };\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let resetCount = 0;\n const middlewareData = {};\n for (let i = 0; i < middleware.length; i++) {\n const currentMiddleware = middleware[i];\n if (!currentMiddleware) {\n continue;\n }\n const {\n name,\n fn\n } = currentMiddleware;\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform: platformWithDetectOverflow,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData[name] = {\n ...middlewareData[name],\n ...data\n };\n if (reset && resetCount < MAX_RESET_COUNT) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects,\n platform\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n platform\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element \u2014\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n", "function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n try {\n if (element.matches(':popover-open')) {\n return true;\n }\n } catch (_e) {\n // no-op\n }\n try {\n return element.matches(':modal');\n } catch (_e) {\n return false;\n }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (isWebKitValue == null) {\n isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n }\n return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n } else {\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n }\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n", "import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n let top = firstRect.top;\n let right = firstRect.right;\n let bottom = firstRect.bottom;\n let left = firstRect.left;\n for (let i = 1; i < clippingAncestors.length; i++) {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n top = max(rect.top, top);\n right = min(rect.right, right);\n bottom = min(rect.bottom, bottom);\n left = max(rect.left, left);\n }\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n if (floating) {\n resizeObserver.observe(floating);\n }\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element \u2014\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n", "import { useLocale } from './XHJPQEZP.js';\nimport { Polymorphic } from './6Y7B2NEO.js';\nimport { createComponent, mergeProps, effect, setAttribute, template } from 'solid-js/web';\nimport { mergeDefaultProps, mergeRefs, getWindow } from '@kobalte/utils';\nimport { createContext, useContext, splitProps, createSignal, createEffect, onCleanup } from 'solid-js';\nimport { combineStyle } from '@solid-primitives/props';\nimport { autoUpdate, offset, flip, shift, size, hide, arrow, computePosition, platform } from '@floating-ui/dom';\n\nvar PopperContext = createContext();\nfunction usePopperContext() {\n const context = useContext(PopperContext);\n if (context === void 0) {\n throw new Error(\"[kobalte]: `usePopperContext` must be used within a `Popper` component\");\n }\n return context;\n}\n\n// src/popper/popper-arrow.tsx\nvar _tmpl$ = /* @__PURE__ */ template(`<svg display=\"block\" viewBox=\"0 0 30 30\" style=\"transform:scale(1.02)\"><g><path fill=\"none\" d=\"M23,27.8c1.1,1.2,3.4,2.2,5,2.2h2H0h2c1.7,0,3.9-1,5-2.2l6.6-7.2c0.7-0.8,2-0.8,2.7,0L23,27.8L23,27.8z\"></path><path stroke=\"none\" d=\"M23,27.8c1.1,1.2,3.4,2.2,5,2.2h2H0h2c1.7,0,3.9-1,5-2.2l6.6-7.2c0.7-0.8,2-0.8,2.7,0L23,27.8L23,27.8z\">`);\nvar DEFAULT_SIZE = 30;\nvar HALF_DEFAULT_SIZE = DEFAULT_SIZE / 2;\nvar ROTATION_DEG = {\n top: 180,\n right: -90,\n bottom: 0,\n left: 90\n};\nfunction PopperArrow(props) {\n const context = usePopperContext();\n const mergedProps = mergeDefaultProps({\n size: DEFAULT_SIZE\n }, props);\n const [local, others] = splitProps(mergedProps, [\"ref\", \"style\", \"size\"]);\n const dir = () => context.currentPlacement().split(\"-\")[0];\n const contentStyle = createComputedStyle(context.contentRef);\n const fill = () => contentStyle()?.getPropertyValue(\"background-color\") || \"none\";\n const stroke = () => contentStyle()?.getPropertyValue(`border-${dir()}-color`) || \"none\";\n const borderWidth = () => contentStyle()?.getPropertyValue(`border-${dir()}-width`) || \"0px\";\n const strokeWidth = () => {\n return Number.parseInt(borderWidth()) * 2 * (DEFAULT_SIZE / local.size);\n };\n const rotate = () => {\n return `rotate(${ROTATION_DEG[dir()]} ${HALF_DEFAULT_SIZE} ${HALF_DEFAULT_SIZE}) translate(0 2)`;\n };\n return createComponent(Polymorphic, mergeProps({\n as: \"div\",\n ref(r$) {\n const _ref$ = mergeRefs(context.setArrowRef, local.ref);\n typeof _ref$ === \"function\" && _ref$(r$);\n },\n \"aria-hidden\": \"true\",\n get style() {\n return combineStyle({\n // server side rendering\n position: \"absolute\",\n \"font-size\": `${local.size}px`,\n width: \"1em\",\n height: \"1em\",\n \"pointer-events\": \"none\",\n fill: fill(),\n stroke: stroke(),\n \"stroke-width\": strokeWidth()\n }, local.style);\n }\n }, others, {\n get children() {\n const _el$ = _tmpl$(), _el$2 = _el$.firstChild;\n effect(() => setAttribute(_el$2, \"transform\", rotate()));\n return _el$;\n }\n }));\n}\nfunction createComputedStyle(element) {\n const [style, setStyle] = createSignal();\n createEffect(() => {\n const el = element();\n el && setStyle(getWindow(el).getComputedStyle(el));\n });\n return style;\n}\nfunction PopperPositioner(props) {\n const context = usePopperContext();\n const [local, others] = splitProps(props, [\"ref\", \"style\"]);\n return createComponent(Polymorphic, mergeProps({\n as: \"div\",\n ref(r$) {\n const _ref$ = mergeRefs(context.setPositionerRef, local.ref);\n typeof _ref$ === \"function\" && _ref$(r$);\n },\n \"data-popper-positioner\": \"\",\n get style() {\n return combineStyle({\n position: \"absolute\",\n top: 0,\n left: 0,\n \"min-width\": \"max-content\"\n }, local.style);\n }\n }, others));\n}\n\n// src/popper/utils.ts\nfunction createDOMRect(anchorRect) {\n const { x = 0, y = 0, width = 0, height = 0 } = anchorRect ?? {};\n if (typeof DOMRect === \"function\") {\n return new DOMRect(x, y, width, height);\n }\n const rect = {\n x,\n y,\n width,\n height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x\n };\n return { ...rect, toJSON: () => rect };\n}\nfunction getAnchorElement(anchor, getAnchorRect) {\n const contextElement = anchor;\n return {\n contextElement,\n getBoundingClientRect: () => {\n const anchorRect = getAnchorRect(anchor);\n if (anchorRect) {\n return createDOMRect(anchorRect);\n }\n if (anchor) {\n return anchor.getBoundingClientRect();\n }\n return createDOMRect();\n }\n };\n}\nfunction isValidPlacement(flip2) {\n return /^(?:top|bottom|left|right)(?:-(?:start|end))?$/.test(flip2);\n}\nvar REVERSE_BASE_PLACEMENT = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\"\n};\nfunction getTransformOrigin(placement, readingDirection) {\n const [basePlacement, alignment] = placement.split(\"-\");\n const reversePlacement = REVERSE_BASE_PLACEMENT[basePlacement];\n if (!alignment) {\n return `${reversePlacement} center`;\n }\n if (basePlacement === \"left\" || basePlacement === \"right\") {\n return `${reversePlacement} ${alignment === \"start\" ? \"top\" : \"bottom\"}`;\n }\n if (alignment === \"start\") {\n return `${reversePlacement} ${readingDirection === \"rtl\" ? \"right\" : \"left\"}`;\n }\n return `${reversePlacement} ${readingDirection === \"rtl\" ? \"left\" : \"right\"}`;\n}\n\n// src/popper/popper-root.tsx\nfunction PopperRoot(props) {\n const mergedProps = mergeDefaultProps({\n getAnchorRect: (anchor) => anchor?.getBoundingClientRect(),\n placement: \"bottom\",\n gutter: 0,\n shift: 0,\n flip: true,\n slide: true,\n overlap: false,\n sameWidth: false,\n fitViewport: false,\n hideWhenDetached: false,\n detachedPadding: 0,\n arrowPadding: 4,\n overflowPadding: 8\n }, props);\n const [positionerRef, setPositionerRef] = createSignal();\n const [arrowRef, setArrowRef] = createSignal();\n const [currentPlacement, setCurrentPlacement] = createSignal(mergedProps.placement);\n const anchorRef = () => getAnchorElement(mergedProps.anchorRef?.(), mergedProps.getAnchorRect);\n const {\n direction\n } = useLocale();\n async function updatePosition() {\n const referenceEl = anchorRef();\n const floatingEl = positionerRef();\n const arrowEl = arrowRef();\n if (!referenceEl || !floatingEl) {\n return;\n }\n const arrowOffset = (arrowEl?.clientHeight || 0) / 2;\n const finalGutter = typeof mergedProps.gutter === \"number\" ? mergedProps.gutter + arrowOffset : mergedProps.gutter ?? arrowOffset;\n floatingEl.style.setProperty(\"--kb-popper-content-overflow-padding\", `${mergedProps.overflowPadding}px`);\n referenceEl.getBoundingClientRect();\n const middleware = [\n // https://floating-ui.com/docs/offset\n offset(({\n placement\n }) => {\n const hasAlignment = !!placement.split(\"-\")[1];\n return {\n mainAxis: finalGutter,\n crossAxis: !hasAlignment ? mergedProps.shift : void 0,\n alignmentAxis: mergedProps.shift\n };\n })\n ];\n if (mergedProps.flip !== false) {\n const fallbackPlacements = typeof mergedProps.flip === \"string\" ? mergedProps.flip.split(\" \") : void 0;\n if (fallbackPlacements !== void 0 && !fallbackPlacements.every(isValidPlacement)) {\n throw new Error(\"`flip` expects a spaced-delimited list of placements\");\n }\n middleware.push(flip({\n padding: mergedProps.overflowPadding,\n fallbackPlacements\n }));\n }\n if (mergedProps.slide || mergedProps.overlap) {\n middleware.push(shift({\n mainAxis: mergedProps.slide,\n crossAxis: mergedProps.overlap,\n padding: mergedProps.overflowPadding\n }));\n }\n middleware.push(size({\n padding: mergedProps.overflowPadding,\n apply({\n availableWidth,\n availableHeight,\n rects\n }) {\n const referenceWidth = Math.round(rects.reference.width);\n availableWidth = Math.floor(availableWidth);\n availableHeight = Math.floor(availableHeight);\n floatingEl.style.setProperty(\"--kb-popper-anchor-width\", `${referenceWidth}px`);\n floatingEl.style.setProperty(\"--kb-popper-content-available-width\", `${availableWidth}px`);\n floatingEl.style.setProperty(\"--kb-popper-content-available-height\", `${availableHeight}px`);\n if (mergedProps.sameWidth) {\n floatingEl.style.width = `${referenceWidth}px`;\n }\n if (mergedProps.fitViewport) {\n floatingEl.style.maxWidth = `${availableWidth}px`;\n floatingEl.style.maxHeight = `${availableHeight}px`;\n }\n }\n }));\n if (mergedProps.hideWhenDetached) {\n middleware.push(hide({\n padding: mergedProps.detachedPadding\n }));\n }\n if (arrowEl) {\n middleware.push(arrow({\n element: arrowEl,\n padding: mergedProps.arrowPadding\n }));\n }\n const pos = await computePosition(referenceEl, floatingEl, {\n placement: mergedProps.placement,\n strategy: \"absolute\",\n middleware,\n platform: {\n ...platform,\n isRTL: () => direction() === \"rtl\"\n }\n });\n setCurrentPlacement(pos.placement);\n mergedProps.onCurrentPlacementChange?.(pos.placement);\n if (!floatingEl) {\n return;\n }\n floatingEl.style.setProperty(\"--kb-popper-content-transform-origin\", getTransformOrigin(pos.placement, direction()));\n const x = Math.round(pos.x);\n const y = Math.round(pos.y);\n let visibility;\n if (mergedProps.hideWhenDetached) {\n visibility = pos.middlewareData.hide?.referenceHidden ? \"hidden\" : \"visible\";\n }\n Object.assign(floatingEl.style, {\n top: \"0\",\n left: \"0\",\n transform: `translate3d(${x}px, ${y}px, 0)`,\n visibility\n });\n if (arrowEl && pos.middlewareData.arrow) {\n const {\n x: arrowX,\n y: arrowY\n } = pos.middlewareData.arrow;\n const dir = pos.placement.split(\"-\")[0];\n Object.assign(arrowEl.style, {\n left: arrowX != null ? `${arrowX}px` : \"\",\n top: arrowY != null ? `${arrowY}px` : \"\",\n [dir]: \"100%\"\n });\n }\n }\n createEffect(() => {\n const referenceEl = anchorRef();\n const floatingEl = positionerRef();\n if (!referenceEl || !floatingEl) {\n return;\n }\n const cleanupAutoUpdate = autoUpdate(referenceEl, floatingEl, updatePosition, {\n // JSDOM doesn't support ResizeObserver\n elementResize: typeof ResizeObserver === \"function\"\n });\n onCleanup(cleanupAutoUpdate);\n });\n createEffect(() => {\n const positioner = positionerRef();\n const content = mergedProps.contentRef?.();\n if (!positioner || !content) {\n return;\n }\n queueMicrotask(() => {\n positioner.style.zIndex = getComputedStyle(content).zIndex;\n });\n });\n const context = {\n currentPlacement,\n contentRef: () => mergedProps.contentRef?.(),\n setPositionerRef,\n setArrowRef\n };\n return createComponent(PopperContext.Provider, {\n value: context,\n get children() {\n return mergedProps.children;\n }\n });\n}\n\n// src/popper/index.tsx\nvar Popper = Object.assign(PopperRoot, {\n Arrow: PopperArrow,\n Context: PopperContext,\n usePopperContext,\n Positioner: PopperPositioner\n});\n\nexport { Popper, PopperArrow, PopperContext, PopperPositioner, PopperRoot, usePopperContext };\n", "import { access, isString, isNumber } from '@kobalte/utils';\nimport { createMemo } from 'solid-js';\n\n// src/primitives/create-collection/create-collection.ts\nfunction buildNodes(params) {\n let index = params.startIndex ?? 0;\n const level = params.startLevel ?? 0;\n const nodes = [];\n const getKey = (data) => {\n if (data == null) {\n return \"\";\n }\n const _getKey = params.getKey ?? \"key\";\n const dataKey = isString(_getKey) ? data[_getKey] : _getKey(data);\n return dataKey != null ? String(dataKey) : \"\";\n };\n const getTextValue = (data) => {\n if (data == null) {\n return \"\";\n }\n const _getTextValue = params.getTextValue ?? \"textValue\";\n const dataTextValue = isString(_getTextValue) ? data[_getTextValue] : _getTextValue(data);\n return dataTextValue != null ? String(dataTextValue) : \"\";\n };\n const getDisabled = (data) => {\n if (data == null) {\n return false;\n }\n const _getDisabled = params.getDisabled ?? \"disabled\";\n return (isString(_getDisabled) ? data[_getDisabled] : _getDisabled(data)) ?? false;\n };\n const getSectionChildren = (data) => {\n if (data == null) {\n return void 0;\n }\n if (isString(params.getSectionChildren)) {\n return data[params.getSectionChildren];\n }\n return params.getSectionChildren?.(data);\n };\n for (const data of params.dataSource) {\n if (isString(data) || isNumber(data)) {\n nodes.push({\n type: \"item\",\n rawValue: data,\n key: String(data),\n textValue: String(data),\n disabled: getDisabled(data),\n level,\n index\n });\n index++;\n continue;\n }\n if (getSectionChildren(data) != null) {\n nodes.push({\n type: \"section\",\n rawValue: data,\n key: \"\",\n // not applicable here\n textValue: \"\",\n // not applicable here\n disabled: false,\n // not applicable here\n level,\n index\n });\n index++;\n const sectionChildren = getSectionChildren(data) ?? [];\n if (sectionChildren.length > 0) {\n const childNodes = buildNodes({\n dataSource: sectionChildren,\n getKey: params.getKey,\n getTextValue: params.getTextValue,\n getDisabled: params.getDisabled,\n getSectionChildren: params.getSectionChildren,\n startIndex: index,\n startLevel: level + 1\n });\n nodes.push(...childNodes);\n index += childNodes.length;\n }\n } else {\n nodes.push({\n type: \"item\",\n rawValue: data,\n key: getKey(data),\n textValue: getTextValue(data),\n disabled: getDisabled(data),\n level,\n index\n });\n index++;\n }\n }\n return nodes;\n}\n\n// src/primitives/create-collection/create-collection.ts\nfunction createCollection(props, deps = []) {\n return createMemo(() => {\n const nodes = buildNodes({\n dataSource: access(props.dataSource),\n getKey: access(props.getKey),\n getTextValue: access(props.getTextValue),\n getDisabled: access(props.getDisabled),\n getSectionChildren: access(props.getSectionChildren)\n });\n for (let i = 0; i < deps.length; i++)\n deps[i]();\n return props.factory(nodes);\n });\n}\n\nexport { createCollection };\n", "import { accessWith } from '@kobalte/utils';\nimport { createSignal, createMemo, untrack } from 'solid-js';\n\n// src/primitives/create-controllable-signal/create-controllable-signal.ts\nfunction createControllableSignal(props) {\n const [_value, _setValue] = createSignal(props.defaultValue?.());\n const isControlled = createMemo(() => props.value?.() !== void 0);\n const value = createMemo(() => isControlled() ? props.value?.() : _value());\n const setValue = (next) => {\n untrack(() => {\n const nextValue = accessWith(next, value());\n if (!Object.is(nextValue, value())) {\n if (!isControlled()) {\n _setValue(nextValue);\n }\n props.onChange?.(nextValue);\n }\n return nextValue;\n });\n };\n return [value, setValue];\n}\nfunction createControllableBooleanSignal(props) {\n const [_value, setValue] = createControllableSignal(props);\n const value = () => _value() ?? false;\n return [value, setValue];\n}\nfunction createControllableArraySignal(props) {\n const [_value, setValue] = createControllableSignal(props);\n const value = () => _value() ?? [];\n return [value, setValue];\n}\nfunction createControllableSetSignal(props) {\n const [_value, setValue] = createControllableSignal(props);\n const value = () => _value() ?? /* @__PURE__ */ new Set();\n return [value, setValue];\n}\n\nexport { createControllableArraySignal, createControllableBooleanSignal, createControllableSetSignal, createControllableSignal };\n", "import { createCollection } from './JMA2RWU6.js';\nimport { useLocale } from './XHJPQEZP.js';\nimport { createControllableSignal } from './BLN63FDC.js';\nimport { mergeDefaultProps, access, createEventListener, scrollIntoView, focusWithoutScrolling, callHandler, getFocusableTreeWalker, isAppleDevice, isMac } from '@kobalte/utils';\nimport { createSignal, createMemo, createEffect, mergeProps, onMount, on, createComputed } from 'solid-js';\n\n// src/selection/types.ts\nvar Selection = class _Selection extends Set {\n anchorKey;\n currentKey;\n constructor(keys, anchorKey, currentKey) {\n super(keys);\n if (keys instanceof _Selection) {\n this.anchorKey = anchorKey || keys.anchorKey;\n this.currentKey = currentKey || keys.currentKey;\n } else {\n this.anchorKey = anchorKey;\n this.currentKey = currentKey;\n }\n }\n};\n\n// src/selection/create-controllable-selection-signal.ts\nfunction createControllableSelectionSignal(props) {\n const [_value, setValue] = createControllableSignal(props);\n const value = () => _value() ?? new Selection();\n return [value, setValue];\n}\nfunction isNonContiguousSelectionModifier(e) {\n return isAppleDevice() ? e.altKey : e.ctrlKey;\n}\nfunction isCtrlKeyPressed(e) {\n if (isMac()) {\n return e.metaKey;\n }\n return e.ctrlKey;\n}\nfunction convertSelection(selection) {\n return new Selection(selection);\n}\nfunction isSameSelection(setA, setB) {\n if (setA.size !== setB.size) {\n return false;\n }\n for (const item of setA) {\n if (!setB.has(item)) {\n return false;\n }\n }\n return true;\n}\n\n// src/selection/create-multiple-selection-state.ts\nfunction createMultipleSelectionState(props) {\n const mergedProps = mergeDefaultProps(\n {\n selectionMode: \"none\",\n selectionBehavior: \"toggle\"\n },\n props\n );\n const [isFocused, setFocused] = createSignal(false);\n const [focusedKey, setFocusedKey] = createSignal();\n const selectedKeysProp = createMemo(() => {\n const selection = access(mergedProps.selectedKeys);\n if (selection != null) {\n return convertSelection(selection);\n }\n return selection;\n });\n const defaultSelectedKeys = createMemo(() => {\n const defaultSelection = access(mergedProps.defaultSelectedKeys);\n if (defaultSelection != null) {\n return convertSelection(defaultSelection);\n }\n return new Selection();\n });\n const [selectedKeys, _setSelectedKeys] = createControllableSelectionSignal({\n value: selectedKeysProp,\n defaultValue: defaultSelectedKeys,\n onChange: (value) => mergedProps.onSelectionChange?.(value)\n });\n const [selectionBehavior, setSelectionBehavior] = createSignal(access(mergedProps.selectionBehavior));\n const selectionMode = () => access(mergedProps.selectionMode);\n const disallowEmptySelection = () => access(mergedProps.disallowEmptySelection) ?? false;\n const setSelectedKeys = (keys) => {\n if (access(mergedProps.allowDuplicateSelectionEvents) || !isSameSelection(keys, selectedKeys())) {\n _setSelectedKeys(keys);\n }\n };\n createEffect(() => {\n const selection = selectedKeys();\n if (access(mergedProps.selectionBehavior) === \"replace\" && selectionBehavior() === \"toggle\" && typeof selection === \"object\" && selection.size === 0) {\n setSelectionBehavior(\"replace\");\n }\n });\n createEffect(() => {\n setSelectionBehavior(access(mergedProps.selectionBehavior) ?? \"toggle\");\n });\n return {\n selectionMode,\n disallowEmptySelection,\n selectionBehavior,\n setSelectionBehavior,\n isFocused,\n setFocused,\n focusedKey,\n setFocusedKey,\n selectedKeys,\n setSelectedKeys\n };\n}\nfunction createTypeSelect(props) {\n const [search, setSearch] = createSignal(\"\");\n const [timeoutId, setTimeoutId] = createSignal(-1);\n const onKeyDown = (e) => {\n if (access(props.isDisabled)) {\n return;\n }\n const delegate = access(props.keyboardDelegate);\n const manager = access(props.selectionManager);\n if (!delegate.getKeyForSearch) {\n return;\n }\n const character = getStringForKey(e.key);\n if (!character || e.ctrlKey || e.metaKey) {\n return;\n }\n if (character === \" \" && search().trim().length > 0) {\n e.preventDefault();\n e.stopPropagation();\n }\n let newSearch = setSearch((prev) => prev + character);\n let key = delegate.getKeyForSearch(newSearch, manager.focusedKey()) ?? delegate.getKeyForSearch(newSearch);\n if (key == null && isAllSameLetter(newSearch)) {\n newSearch = newSearch[0];\n key = delegate.getKeyForSearch(newSearch, manager.focusedKey()) ?? delegate.getKeyForSearch(newSearch);\n }\n if (key != null) {\n manager.setFocusedKey(key);\n props.onTypeSelect?.(key);\n }\n clearTimeout(timeoutId());\n setTimeoutId(window.setTimeout(() => setSearch(\"\"), 500));\n };\n return {\n typeSelectHandlers: {\n onKeyDown\n }\n };\n}\nfunction getStringForKey(key) {\n if (key.length === 1 || !/^[A-Z]/i.test(key)) {\n return key;\n }\n return \"\";\n}\nfunction isAllSameLetter(search) {\n return search.split(\"\").every((letter) => letter === search[0]);\n}\nfunction createSelectableCollection(props, ref, scrollRef) {\n const defaultProps = {\n selectOnFocus: () => access(props.selectionManager).selectionBehavior() === \"replace\"\n };\n const mergedProps = mergeProps(defaultProps, props);\n const finalScrollRef = () => scrollRef?.() ?? ref();\n const { direction } = useLocale();\n let scrollPos = { top: 0, left: 0 };\n createEventListener(\n () => !access(mergedProps.isVirtualized) ? finalScrollRef() : void 0,\n \"scroll\",\n () => {\n const scrollEl = finalScrollRef();\n if (!scrollEl) {\n return;\n }\n scrollPos = {\n top: scrollEl.scrollTop,\n left: scrollEl.scrollLeft\n };\n }\n );\n const { typeSelectHandlers } = createTypeSelect({\n isDisabled: () => access(mergedProps.disallowTypeAhead),\n keyboardDelegate: () => access(mergedProps.keyboardDelegate),\n selectionManager: () => access(mergedProps.selectionManager)\n });\n const orientation = () => access(mergedProps.orientation) ?? \"vertical\";\n const onKeyDown = (e) => {\n callHandler(e, typeSelectHandlers.onKeyDown);\n if (e.altKey && e.key === \"Tab\") {\n e.preventDefault();\n }\n const refEl = ref();\n if (!refEl?.contains(e.target)) {\n return;\n }\n const manager = access(mergedProps.selectionManager);\n const selectOnFocus = access(mergedProps.selectOnFocus);\n const navigateToKey = (key) => {\n if (key != null) {\n manager.setFocusedKey(key);\n if (e.shiftKey && manager.selectionMode() === \"multiple\") {\n manager.extendSelection(key);\n } else if (selectOnFocus && !isNonContiguousSelectionModifier(e)) {\n manager.replaceSelection(key);\n }\n }\n };\n const delegate = access(mergedProps.keyboardDelegate);\n const shouldFocusWrap = access(mergedProps.shouldFocusWrap);\n const focusedKey = manager.focusedKey();\n switch (e.key) {\n case (orientation() === \"vertical\" ? \"ArrowDown\" : \"ArrowRight\"): {\n if (delegate.getKeyBelow) {\n e.preventDefault();\n let nextKey;\n if (focusedKey != null) {\n nextKey = delegate.getKeyBelow(focusedKey);\n } else {\n nextKey = delegate.getFirstKey?.();\n }\n if (nextKey == null && shouldFocusWrap) {\n nextKey = delegate.getFirstKey?.(focusedKey);\n }\n navigateToKey(nextKey);\n }\n break;\n }\n case (orientation() === \"vertical\" ? \"ArrowUp\" : \"ArrowLeft\"): {\n if (delegate.getKeyAbove) {\n e.preventDefault();\n let nextKey;\n if (focusedKey != null) {\n nextKey = delegate.getKeyAbove(focusedKey);\n } else {\n nextKey = delegate.getLastKey?.();\n }\n if (nextKey == null && shouldFocusWrap) {\n nextKey = delegate.getLastKey?.(focusedKey);\n }\n navigateToKey(nextKey);\n }\n break;\n }\n case (orientation() === \"vertical\" ? \"ArrowLeft\" : \"ArrowUp\"): {\n if (delegate.getKeyLeftOf) {\n e.preventDefault();\n const isRTL = direction() === \"rtl\";\n let nextKey;\n if (focusedKey != null) {\n nextKey = delegate.getKeyLeftOf(focusedKey);\n } else {\n nextKey = isRTL ? delegate.getFirstKey?.() : delegate.getLastKey?.();\n }\n navigateToKey(nextKey);\n }\n break;\n }\n case (orientation() === \"vertical\" ? \"ArrowRight\" : \"ArrowDown\"): {\n if (delegate.getKeyRightOf) {\n e.preventDefault();\n const isRTL = direction() === \"rtl\";\n let nextKey;\n if (focusedKey != null) {\n nextKey = delegate.getKeyRightOf(focusedKey);\n } else {\n nextKey = isRTL ? delegate.getLastKey?.() : delegate.getFirstKey?.();\n }\n navigateToKey(nextKey);\n }\n break;\n }\n case \"Home\":\n if (delegate.getFirstKey) {\n e.preventDefault();\n const firstKey = delegate.getFirstKey(\n focusedKey,\n isCtrlKeyPressed(e)\n );\n if (firstKey != null) {\n manager.setFocusedKey(firstKey);\n if (isCtrlKeyPressed(e) && e.shiftKey && manager.selectionMode() === \"multiple\") {\n manager.extendSelection(firstKey);\n } else if (selectOnFocus) {\n manager.replaceSelection(firstKey);\n }\n }\n }\n break;\n case \"End\":\n if (delegate.getLastKey) {\n e.preventDefault();\n const lastKey = delegate.getLastKey(focusedKey, isCtrlKeyPressed(e));\n if (lastKey != null) {\n manager.setFocusedKey(lastKey);\n if (isCtrlKeyPressed(e) && e.shiftKey && manager.selectionMode() === \"multiple\") {\n manager.extendSelection(lastKey);\n } else if (selectOnFocus) {\n manager.replaceSelection(lastKey);\n }\n }\n }\n break;\n case \"PageDown\":\n if (delegate.getKeyPageBelow && focusedKey != null) {\n e.preventDefault();\n const nextKey = delegate.getKeyPageBelow(focusedKey);\n navigateToKey(nextKey);\n }\n break;\n case \"PageUp\":\n if (delegate.getKeyPageAbove && focusedKey != null) {\n e.preventDefault();\n const nextKey = delegate.getKeyPageAbove(focusedKey);\n navigateToKey(nextKey);\n }\n break;\n case \"a\":\n if (isCtrlKeyPressed(e) && manager.selectionMode() === \"multiple\" && access(mergedProps.disallowSelectAll) !== true) {\n e.preventDefault();\n manager.selectAll();\n }\n break;\n case \"Escape\":\n if (!e.defaultPrevented) {\n e.preventDefault();\n if (!access(mergedProps.disallowEmptySelection)) {\n manager.clearSelection();\n }\n }\n break;\n case \"Tab\": {\n if (!access(mergedProps.allowsTabNavigation)) {\n if (e.shiftKey) {\n refEl.focus();\n } else {\n const walker = getFocusableTreeWalker(refEl, { tabbable: true });\n let next;\n let last;\n do {\n last = walker.lastChild();\n if (last) {\n next = last;\n }\n } while (last);\n if (next && !next.contains(document.activeElement)) {\n focusWithoutScrolling(next);\n }\n }\n break;\n }\n }\n }\n };\n const onFocusIn = (e) => {\n const manager = access(mergedProps.selectionManager);\n const delegate = access(mergedProps.keyboardDelegate);\n const selectOnFocus = access(mergedProps.selectOnFocus);\n if (manager.isFocused()) {\n if (!e.currentTarget.contains(e.target)) {\n manager.setFocused(false);\n }\n return;\n }\n if (!e.currentTarget.contains(e.target)) {\n return;\n }\n manager.setFocused(true);\n if (manager.focusedKey() == null) {\n const navigateToFirstKey = (key) => {\n if (key == null) {\n return;\n }\n manager.setFocusedKey(key);\n if (selectOnFocus) {\n manager.replaceSelection(key);\n }\n };\n const relatedTarget = e.relatedTarget;\n if (relatedTarget && e.currentTarget.compareDocumentPosition(relatedTarget) & Node.DOCUMENT_POSITION_FOLLOWING) {\n navigateToFirstKey(\n manager.lastSelectedKey() ?? delegate.getLastKey?.()\n );\n } else {\n navigateToFirstKey(\n manager.firstSelectedKey() ?? delegate.getFirstKey?.()\n );\n }\n } else if (!access(mergedProps.isVirtualized)) {\n const scrollEl = finalScrollRef();\n if (scrollEl) {\n scrollEl.scrollTop = scrollPos.top;\n scrollEl.scrollLeft = scrollPos.left;\n const element = scrollEl.querySelector(\n `[data-key=\"${manager.focusedKey()}\"]`\n );\n if (element) {\n focusWithoutScrolling(element);\n scrollIntoView(scrollEl, element);\n }\n }\n }\n };\n const onFocusOut = (e) => {\n const manager = access(mergedProps.selectionManager);\n if (!e.currentTarget.contains(e.relatedTarget)) {\n manager.setFocused(false);\n }\n };\n const onMouseDown = (e) => {\n if (finalScrollRef() === e.target) {\n e.preventDefault();\n }\n };\n const tryAutoFocus = () => {\n const autoFocus = access(mergedProps.autoFocus);\n if (!autoFocus) {\n return;\n }\n const manager = access(mergedProps.selectionManager);\n const delegate = access(mergedProps.keyboardDelegate);\n let focusedKey;\n if (autoFocus === \"first\") {\n focusedKey = delegate.getFirstKey?.();\n }\n if (autoFocus === \"last\") {\n focusedKey = delegate.getLastKey?.();\n }\n const selectedKeys = manager.selectedKeys();\n if (selectedKeys.size) {\n focusedKey = selectedKeys.values().next().value;\n }\n manager.setFocused(true);\n manager.setFocusedKey(focusedKey);\n const refEl = ref();\n if (refEl && focusedKey == null && !access(mergedProps.shouldUseVirtualFocus)) {\n focusWithoutScrolling(refEl);\n }\n };\n onMount(() => {\n if (mergedProps.deferAutoFocus) {\n setTimeout(tryAutoFocus, 0);\n } else {\n tryAutoFocus();\n }\n });\n createEffect(\n on(\n [\n finalScrollRef,\n () => access(mergedProps.isVirtualized),\n () => access(mergedProps.selectionManager).focusedKey()\n ],\n (newValue) => {\n const [scrollEl, isVirtualized, focusedKey] = newValue;\n if (isVirtualized) {\n focusedKey && mergedProps.scrollToKey?.(focusedKey);\n } else {\n if (focusedKey && scrollEl) {\n const element = scrollEl.querySelector(\n `[data-key=\"${focusedKey}\"]`\n );\n if (element) {\n scrollIntoView(scrollEl, element);\n }\n }\n }\n }\n )\n );\n const tabIndex = createMemo(() => {\n if (access(mergedProps.shouldUseVirtualFocus)) {\n return void 0;\n }\n return access(mergedProps.selectionManager).focusedKey() == null ? 0 : -1;\n });\n return {\n tabIndex,\n onKeyDown,\n onMouseDown,\n onFocusIn,\n onFocusOut\n };\n}\nfunction createSelectableItem(props, ref) {\n const manager = () => access(props.selectionManager);\n const key = () => access(props.key);\n const shouldUseVirtualFocus = () => access(props.shouldUseVirtualFocus);\n const onSelect = (e) => {\n if (manager().selectionMode() === \"none\") {\n return;\n }\n if (manager().selectionMode() === \"single\") {\n if (manager().isSelected(key()) && !manager().disallowEmptySelection()) {\n manager().toggleSelection(key());\n } else {\n manager().replaceSelection(key());\n }\n } else if (e?.shiftKey) {\n manager().extendSelection(key());\n } else if (manager().selectionBehavior() === \"toggle\" || isCtrlKeyPressed(e) || \"pointerType\" in e && e.pointerType === \"touch\") {\n manager().toggleSelection(key());\n } else {\n manager().replaceSelection(key());\n }\n };\n const isSelected = () => manager().isSelected(key());\n const isDisabled = () => access(props.disabled) || manager().isDisabled(key());\n const allowsSelection = () => !isDisabled() && manager().canSelectItem(key());\n let pointerDownType = null;\n const onPointerDown = (e) => {\n if (!allowsSelection()) {\n return;\n }\n pointerDownType = e.pointerType;\n if (e.pointerType === \"mouse\" && e.button === 0 && !access(props.shouldSelectOnPressUp)) {\n onSelect(e);\n }\n };\n const onPointerUp = (e) => {\n if (!allowsSelection()) {\n return;\n }\n if (e.pointerType === \"mouse\" && e.button === 0 && access(props.shouldSelectOnPressUp) && access(props.allowsDifferentPressOrigin)) {\n onSelect(e);\n }\n };\n const onClick = (e) => {\n if (!allowsSelection()) {\n return;\n }\n if (access(props.shouldSelectOnPressUp) && !access(props.allowsDifferentPressOrigin) || pointerDownType !== \"mouse\") {\n onSelect(e);\n }\n };\n const onKeyDown = (e) => {\n if (!allowsSelection() || ![\"Enter\", \" \"].includes(e.key)) {\n return;\n }\n if (isNonContiguousSelectionModifier(e)) {\n manager().toggleSelection(key());\n } else {\n onSelect(e);\n }\n };\n const onMouseDown = (e) => {\n if (isDisabled()) {\n e.preventDefault();\n }\n };\n const onFocus = (e) => {\n const refEl = ref();\n if (shouldUseVirtualFocus() || isDisabled() || !refEl) {\n return;\n }\n if (e.target === refEl) {\n manager().setFocusedKey(key());\n }\n };\n const tabIndex = createMemo(() => {\n if (shouldUseVirtualFocus() || isDisabled()) {\n return void 0;\n }\n return key() === manager().focusedKey() ? 0 : -1;\n });\n const dataKey = createMemo(() => {\n return access(props.virtualized) ? void 0 : key();\n });\n createEffect(\n on(\n [\n ref,\n key,\n shouldUseVirtualFocus,\n () => manager().focusedKey(),\n () => manager().isFocused()\n ],\n ([refEl, key2, shouldUseVirtualFocus2, focusedKey, isFocused]) => {\n if (refEl && key2 === focusedKey && isFocused && !shouldUseVirtualFocus2 && document.activeElement !== refEl) {\n if (props.focus) {\n props.focus();\n } else {\n focusWithoutScrolling(refEl);\n }\n }\n }\n )\n );\n return {\n isSelected,\n isDisabled,\n allowsSelection,\n tabIndex,\n dataKey,\n onPointerDown,\n onPointerUp,\n onClick,\n onKeyDown,\n onMouseDown,\n onFocus\n };\n}\n\n// src/selection/selection-manager.ts\nvar SelectionManager = class {\n collection;\n state;\n constructor(collection, state) {\n this.collection = collection;\n this.state = state;\n }\n /** The type of selection that is allowed in the collection. */\n selectionMode() {\n return this.state.selectionMode();\n }\n /** Whether the collection allows empty selection. */\n disallowEmptySelection() {\n return this.state.disallowEmptySelection();\n }\n /** The selection behavior for the collection. */\n selectionBehavior() {\n return this.state.selectionBehavior();\n }\n /** Sets the selection behavior for the collection. */\n setSelectionBehavior(selectionBehavior) {\n this.state.setSelectionBehavior(selectionBehavior);\n }\n /** Whether the collection is currently focused. */\n isFocused() {\n return this.state.isFocused();\n }\n /** Sets whether the collection is focused. */\n setFocused(isFocused) {\n this.state.setFocused(isFocused);\n }\n /** The current focused key in the collection. */\n focusedKey() {\n return this.state.focusedKey();\n }\n /** Sets the focused key. */\n setFocusedKey(key) {\n if (key == null || this.collection().getItem(key)) {\n this.state.setFocusedKey(key);\n }\n }\n /** The currently selected keys in the collection. */\n selectedKeys() {\n return this.state.selectedKeys();\n }\n /** Returns whether a key is selected. */\n isSelected(key) {\n if (this.state.selectionMode() === \"none\") {\n return false;\n }\n const retrievedKey = this.getKey(key);\n if (retrievedKey == null) {\n return false;\n }\n return this.state.selectedKeys().has(retrievedKey);\n }\n /** Whether the selection is empty. */\n isEmpty() {\n return this.state.selectedKeys().size === 0;\n }\n /** Whether all items in the collection are selected. */\n isSelectAll() {\n if (this.isEmpty()) {\n return false;\n }\n const selectedKeys = this.state.selectedKeys();\n return this.getAllSelectableKeys().every((k) => selectedKeys.has(k));\n }\n firstSelectedKey() {\n let first;\n for (const key of this.state.selectedKeys()) {\n const item = this.collection().getItem(key);\n const isItemBeforeFirst = item?.index != null && first?.index != null && item.index < first.index;\n if (!first || isItemBeforeFirst) {\n first = item;\n }\n }\n return first?.key;\n }\n lastSelectedKey() {\n let last;\n for (const key of this.state.selectedKeys()) {\n const item = this.collection().getItem(key);\n const isItemAfterLast = item?.index != null && last?.index != null && item.index > last.index;\n if (!last || isItemAfterLast) {\n last = item;\n }\n }\n return last?.key;\n }\n /** Extends the selection to the given key. */\n extendSelection(toKey) {\n if (this.selectionMode() === \"none\") {\n return;\n }\n if (this.selectionMode() === \"single\") {\n this.replaceSelection(toKey);\n return;\n }\n const retrievedToKey = this.getKey(toKey);\n if (retrievedToKey == null) {\n return;\n }\n const selectedKeys = this.state.selectedKeys();\n const anchorKey = selectedKeys.anchorKey || retrievedToKey;\n const selection = new Selection(selectedKeys, anchorKey, retrievedToKey);\n for (const key of this.getKeyRange(\n anchorKey,\n selectedKeys.currentKey || retrievedToKey\n )) {\n selection.delete(key);\n }\n for (const key of this.getKeyRange(retrievedToKey, anchorKey)) {\n if (this.canSelectItem(key)) {\n selection.add(key);\n }\n }\n this.state.setSelectedKeys(selection);\n }\n getKeyRange(from, to) {\n const fromItem = this.collection().getItem(from);\n const toItem = this.collection().getItem(to);\n if (fromItem && toItem) {\n if (fromItem.index != null && toItem.index != null && fromItem.index <= toItem.index) {\n return this.getKeyRangeInternal(from, to);\n }\n return this.getKeyRangeInternal(to, from);\n }\n return [];\n }\n getKeyRangeInternal(from, to) {\n const keys = [];\n let key = from;\n while (key != null) {\n const item = this.collection().getItem(key);\n if (item && item.type === \"item\") {\n keys.push(key);\n }\n if (key === to) {\n return keys;\n }\n key = this.collection().getKeyAfter(key);\n }\n return [];\n }\n getKey(key) {\n const item = this.collection().getItem(key);\n if (!item) {\n return key;\n }\n if (!item || item.type !== \"item\") {\n return null;\n }\n return item.key;\n }\n /** Toggles whether the given key is selected. */\n toggleSelection(key) {\n if (this.selectionMode() === \"none\") {\n return;\n }\n if (this.selectionMode() === \"single\" && !this.isSelected(key)) {\n this.replaceSelection(key);\n return;\n }\n const retrievedKey = this.getKey(key);\n if (retrievedKey == null) {\n return;\n }\n const keys = new Selection(this.state.selectedKeys());\n if (keys.has(retrievedKey)) {\n keys.delete(retrievedKey);\n } else if (this.canSelectItem(retrievedKey)) {\n keys.add(retrievedKey);\n keys.anchorKey = retrievedKey;\n keys.currentKey = retrievedKey;\n }\n if (this.disallowEmptySelection() && keys.size === 0) {\n return;\n }\n this.state.setSelectedKeys(keys);\n }\n /** Replaces the selection with only the given key. */\n replaceSelection(key) {\n if (this.selectionMode() === \"none\") {\n return;\n }\n const retrievedKey = this.getKey(key);\n if (retrievedKey == null) {\n return;\n }\n const selection = this.canSelectItem(retrievedKey) ? new Selection([retrievedKey], retrievedKey, retrievedKey) : new Selection();\n this.state.setSelectedKeys(selection);\n }\n /** Replaces the selection with the given keys. */\n setSelectedKeys(keys) {\n if (this.selectionMode() === \"none\") {\n return;\n }\n const selection = new Selection();\n for (const key of keys) {\n const retrievedKey = this.getKey(key);\n if (retrievedKey != null) {\n selection.add(retrievedKey);\n if (this.selectionMode() === \"single\") {\n break;\n }\n }\n }\n this.state.setSelectedKeys(selection);\n }\n /** Selects all items in the collection. */\n selectAll() {\n if (this.selectionMode() === \"multiple\") {\n this.state.setSelectedKeys(new Set(this.getAllSelectableKeys()));\n }\n }\n /**\n * Removes all keys from the selection.\n */\n clearSelection() {\n const selectedKeys = this.state.selectedKeys();\n if (!this.disallowEmptySelection() && selectedKeys.size > 0) {\n this.state.setSelectedKeys(new Selection());\n }\n }\n /**\n * Toggles between select all and an empty selection.\n */\n toggleSelectAll() {\n if (this.isSelectAll()) {\n this.clearSelection();\n } else {\n this.selectAll();\n }\n }\n select(key, e) {\n if (this.selectionMode() === \"none\") {\n return;\n }\n if (this.selectionMode() === \"single\") {\n if (this.isSelected(key) && !this.disallowEmptySelection()) {\n this.toggleSelection(key);\n } else {\n this.replaceSelection(key);\n }\n } else if (this.selectionBehavior() === \"toggle\" || e && e.pointerType === \"touch\") {\n this.toggleSelection(key);\n } else {\n this.replaceSelection(key);\n }\n }\n /** Returns whether the current selection is equal to the given selection. */\n isSelectionEqual(selection) {\n if (selection === this.state.selectedKeys()) {\n return true;\n }\n const selectedKeys = this.selectedKeys();\n if (selection.size !== selectedKeys.size) {\n return false;\n }\n for (const key of selection) {\n if (!selectedKeys.has(key)) {\n return false;\n }\n }\n for (const key of selectedKeys) {\n if (!selection.has(key)) {\n return false;\n }\n }\n return true;\n }\n canSelectItem(key) {\n if (this.state.selectionMode() === \"none\") {\n return false;\n }\n const item = this.collection().getItem(key);\n return item != null && !item.disabled;\n }\n isDisabled(key) {\n const item = this.collection().getItem(key);\n return !item || item.disabled;\n }\n getAllSelectableKeys() {\n const keys = [];\n const addKeys = (key) => {\n while (key != null) {\n if (this.canSelectItem(key)) {\n const item = this.collection().getItem(key);\n if (!item) {\n continue;\n }\n if (item.type === \"item\") {\n keys.push(key);\n }\n }\n key = this.collection().getKeyAfter(key);\n }\n };\n addKeys(this.collection().getFirstKey());\n return keys;\n }\n};\n\n// src/list/list-collection.ts\nvar ListCollection = class {\n keyMap = /* @__PURE__ */ new Map();\n iterable;\n firstKey;\n lastKey;\n constructor(nodes) {\n this.iterable = nodes;\n for (const node of nodes) {\n this.keyMap.set(node.key, node);\n }\n if (this.keyMap.size === 0) {\n return;\n }\n let last;\n let index = 0;\n for (const [key, node] of this.keyMap) {\n if (last) {\n last.nextKey = key;\n node.prevKey = last.key;\n } else {\n this.firstKey = key;\n node.prevKey = void 0;\n }\n if (node.type === \"item\") {\n node.index = index++;\n }\n last = node;\n last.nextKey = void 0;\n }\n this.lastKey = last.key;\n }\n *[Symbol.iterator]() {\n yield* this.iterable;\n }\n getSize() {\n return this.keyMap.size;\n }\n getKeys() {\n return this.keyMap.keys();\n }\n getKeyBefore(key) {\n return this.keyMap.get(key)?.prevKey;\n }\n getKeyAfter(key) {\n return this.keyMap.get(key)?.nextKey;\n }\n getFirstKey() {\n return this.firstKey;\n }\n getLastKey() {\n return this.lastKey;\n }\n getItem(key) {\n return this.keyMap.get(key);\n }\n at(idx) {\n const keys = [...this.getKeys()];\n return this.getItem(keys[idx]);\n }\n};\nfunction createListState(props) {\n const selectionState = createMultipleSelectionState(props);\n const factory = (nodes) => {\n return props.filter ? new ListCollection(props.filter(nodes)) : new ListCollection(nodes);\n };\n const collection = createCollection(\n {\n dataSource: () => access(props.dataSource),\n getKey: () => access(props.getKey),\n getTextValue: () => access(props.getTextValue),\n getDisabled: () => access(props.getDisabled),\n getSectionChildren: () => access(props.getSectionChildren),\n factory\n },\n [() => props.filter]\n );\n const selectionManager = new SelectionManager(collection, selectionState);\n createComputed(() => {\n const focusedKey = selectionState.focusedKey();\n if (focusedKey != null && !collection().getItem(focusedKey)) {\n selectionState.setFocusedKey(void 0);\n }\n });\n return {\n collection,\n selectionManager: () => selectionManager\n };\n}\n\nexport { ListCollection, Selection, SelectionManager, createListState, createMultipleSelectionState, createSelectableCollection, createSelectableItem, createTypeSelect, isSameSelection };\n", "import { createSelectableCollection } from './H6DSIDEC.js';\nimport { createCollator } from './XHJPQEZP.js';\nimport { access } from '@kobalte/utils';\nimport { createMemo } from 'solid-js';\n\n// src/list/list-keyboard-delegate.ts\nvar ListKeyboardDelegate = class {\n collection;\n ref;\n collator;\n constructor(collection, ref, collator) {\n this.collection = collection;\n this.ref = ref;\n this.collator = collator;\n }\n getKeyBelow(key) {\n let keyAfter = this.collection().getKeyAfter(key);\n while (keyAfter != null) {\n const item = this.collection().getItem(keyAfter);\n if (item && item.type === \"item\" && !item.disabled) {\n return keyAfter;\n }\n keyAfter = this.collection().getKeyAfter(keyAfter);\n }\n }\n getKeyAbove(key) {\n let keyBefore = this.collection().getKeyBefore(key);\n while (keyBefore != null) {\n const item = this.collection().getItem(keyBefore);\n if (item && item.type === \"item\" && !item.disabled) {\n return keyBefore;\n }\n keyBefore = this.collection().getKeyBefore(keyBefore);\n }\n }\n getFirstKey() {\n let key = this.collection().getFirstKey();\n while (key != null) {\n const item = this.collection().getItem(key);\n if (item && item.type === \"item\" && !item.disabled) {\n return key;\n }\n key = this.collection().getKeyAfter(key);\n }\n }\n getLastKey() {\n let key = this.collection().getLastKey();\n while (key != null) {\n const item = this.collection().getItem(key);\n if (item && item.type === \"item\" && !item.disabled) {\n return key;\n }\n key = this.collection().getKeyBefore(key);\n }\n }\n getItem(key) {\n return this.ref?.()?.querySelector(`[data-key=\"${key}\"]`) ?? null;\n }\n // TODO: not working correctly\n getKeyPageAbove(key) {\n const menu = this.ref?.();\n let item = this.getItem(key);\n if (!menu || !item) {\n return;\n }\n const pageY = Math.max(\n 0,\n item.offsetTop + item.offsetHeight - menu.offsetHeight\n );\n let keyAbove = key;\n while (keyAbove && item && item.offsetTop > pageY) {\n keyAbove = this.getKeyAbove(keyAbove);\n item = keyAbove != null ? this.getItem(keyAbove) : null;\n }\n return keyAbove;\n }\n // TODO: not working correctly\n getKeyPageBelow(key) {\n const menu = this.ref?.();\n let item = this.getItem(key);\n if (!menu || !item) {\n return;\n }\n const pageY = Math.min(\n menu.scrollHeight,\n item.offsetTop - item.offsetHeight + menu.offsetHeight\n );\n let keyBelow = key;\n while (keyBelow && item && item.offsetTop < pageY) {\n keyBelow = this.getKeyBelow(keyBelow);\n item = keyBelow != null ? this.getItem(keyBelow) : null;\n }\n return keyBelow;\n }\n getKeyForSearch(search, fromKey) {\n const collator = this.collator?.();\n if (!collator) {\n return;\n }\n let key = fromKey != null ? this.getKeyBelow(fromKey) : this.getFirstKey();\n while (key != null) {\n const item = this.collection().getItem(key);\n if (item) {\n const substring = item.textValue.slice(0, search.length);\n if (item.textValue && collator.compare(substring, search) === 0) {\n return key;\n }\n }\n key = this.getKeyBelow(key);\n }\n }\n};\nfunction createSelectableList(props, ref, scrollRef) {\n const collator = createCollator({ usage: \"search\", sensitivity: \"base\" });\n const delegate = createMemo(() => {\n const keyboardDelegate = access(props.keyboardDelegate);\n if (keyboardDelegate) {\n return keyboardDelegate;\n }\n return new ListKeyboardDelegate(props.collection, ref, collator);\n });\n return createSelectableCollection(\n {\n selectionManager: () => access(props.selectionManager),\n keyboardDelegate: delegate,\n autoFocus: () => access(props.autoFocus),\n deferAutoFocus: () => access(props.deferAutoFocus),\n shouldFocusWrap: () => access(props.shouldFocusWrap),\n disallowEmptySelection: () => access(props.disallowEmptySelection),\n selectOnFocus: () => access(props.selectOnFocus),\n disallowTypeAhead: () => access(props.disallowTypeAhead),\n shouldUseVirtualFocus: () => access(props.shouldUseVirtualFocus),\n allowsTabNavigation: () => access(props.allowsTabNavigation),\n isVirtualized: () => access(props.isVirtualized),\n scrollToKey: (key) => access(props.scrollToKey)?.(key),\n orientation: () => access(props.orientation)\n },\n ref,\n scrollRef\n );\n}\n\nexport { ListKeyboardDelegate, createSelectableList };\n", "import { createControllableArraySignal } from './BLN63FDC.js';\nimport { access, mergeDefaultProps, getDocument, addItemToArray } from '@kobalte/utils';\nimport { createContext, useContext, createEffect, onCleanup, createComponent } from 'solid-js';\n\nvar DomCollectionContext = createContext();\nfunction useOptionalDomCollectionContext() {\n return useContext(DomCollectionContext);\n}\nfunction useDomCollectionContext() {\n const context = useOptionalDomCollectionContext();\n if (context === void 0) {\n throw new Error(\n \"[kobalte]: `useDomCollectionContext` must be used within a `DomCollectionProvider` component\"\n );\n }\n return context;\n}\nfunction isElementPreceding(a, b) {\n return Boolean(\n b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING\n );\n}\nfunction findDOMIndex(items, item) {\n const itemEl = item.ref();\n if (!itemEl) {\n return -1;\n }\n let length = items.length;\n if (!length) {\n return -1;\n }\n while (length--) {\n const currentItemEl = items[length]?.ref();\n if (!currentItemEl) {\n continue;\n }\n if (isElementPreceding(currentItemEl, itemEl)) {\n return length + 1;\n }\n }\n return 0;\n}\nfunction sortBasedOnDOMPosition(items) {\n const pairs = items.map((item, index) => [index, item]);\n let isOrderDifferent = false;\n pairs.sort(([indexA, a], [indexB, b]) => {\n const elementA = a.ref();\n const elementB = b.ref();\n if (elementA === elementB) {\n return 0;\n }\n if (!elementA || !elementB) {\n return 0;\n }\n if (isElementPreceding(elementA, elementB)) {\n if (indexA > indexB) {\n isOrderDifferent = true;\n }\n return -1;\n }\n if (indexA < indexB) {\n isOrderDifferent = true;\n }\n return 1;\n });\n if (isOrderDifferent) {\n return pairs.map(([_, item]) => item);\n }\n return items;\n}\nfunction setItemsBasedOnDOMPosition(items, setItems) {\n const sortedItems = sortBasedOnDOMPosition(items);\n if (items !== sortedItems) {\n setItems(sortedItems);\n }\n}\nfunction getCommonParent(items) {\n const firstItem = items[0];\n const lastItemEl = items[items.length - 1]?.ref();\n let parentEl = firstItem?.ref()?.parentElement;\n while (parentEl) {\n if (lastItemEl && parentEl.contains(lastItemEl)) {\n return parentEl;\n }\n parentEl = parentEl.parentElement;\n }\n return getDocument(parentEl).body;\n}\nfunction createTimeoutObserver(items, setItems) {\n createEffect(() => {\n const timeout = setTimeout(() => {\n setItemsBasedOnDOMPosition(items(), setItems);\n });\n onCleanup(() => clearTimeout(timeout));\n });\n}\nfunction createSortBasedOnDOMPosition(items, setItems) {\n if (typeof IntersectionObserver !== \"function\") {\n createTimeoutObserver(items, setItems);\n return;\n }\n let previousItems = [];\n createEffect(() => {\n const callback = () => {\n const hasPreviousItems = !!previousItems.length;\n previousItems = items();\n if (!hasPreviousItems) {\n return;\n }\n setItemsBasedOnDOMPosition(items(), setItems);\n };\n const root = getCommonParent(items());\n const observer = new IntersectionObserver(callback, { root });\n for (const item of items()) {\n const itemEl = item.ref();\n if (itemEl) {\n observer.observe(itemEl);\n }\n }\n onCleanup(() => observer.disconnect());\n });\n}\n\n// src/primitives/create-dom-collection/create-dom-collection.ts\nfunction createDomCollection(props = {}) {\n const [items, setItems] = createControllableArraySignal({\n value: () => access(props.items),\n onChange: (value) => props.onItemsChange?.(value)\n });\n createSortBasedOnDOMPosition(items, setItems);\n const registerItem = (item) => {\n setItems((prevItems) => {\n const index = findDOMIndex(prevItems, item);\n return addItemToArray(prevItems, item, index);\n });\n return () => {\n setItems((prevItems) => {\n const nextItems = prevItems.filter(\n (prevItem) => prevItem.ref() !== item.ref()\n );\n if (prevItems.length === nextItems.length) {\n return prevItems;\n }\n return nextItems;\n });\n };\n };\n const DomCollectionProvider = (props2) => {\n return createComponent(DomCollectionContext.Provider, {\n value: { registerItem },\n get children() {\n return props2.children;\n }\n });\n };\n return { DomCollectionProvider };\n}\nfunction createDomCollectionItem(props) {\n const context = useDomCollectionContext();\n const mergedProps = mergeDefaultProps({ shouldRegisterItem: true }, props);\n createEffect(() => {\n if (!mergedProps.shouldRegisterItem) {\n return;\n }\n const unregister = context.registerItem(mergedProps.getItem());\n onCleanup(unregister);\n });\n}\n\nexport { DomCollectionContext, createDomCollection, createDomCollectionItem, useDomCollectionContext, useOptionalDomCollectionContext };\n", "import { getDocument } from '@kobalte/utils';\n\n// src/dismissable-layer/layer-stack.tsx\nvar DATA_TOP_LAYER_ATTR = \"data-kb-top-layer\";\nvar originalBodyPointerEvents;\nvar hasDisabledBodyPointerEvents = false;\nvar layers = [];\nfunction indexOf(node) {\n return layers.findIndex((layer) => layer.node === node);\n}\nfunction find(node) {\n return layers[indexOf(node)];\n}\nfunction isTopMostLayer(node) {\n return layers[layers.length - 1].node === node;\n}\nfunction getPointerBlockingLayers() {\n return layers.filter((layer) => layer.isPointerBlocking);\n}\nfunction getTopMostPointerBlockingLayer() {\n return [...getPointerBlockingLayers()].slice(-1)[0];\n}\nfunction hasPointerBlockingLayer() {\n return getPointerBlockingLayers().length > 0;\n}\nfunction isBelowPointerBlockingLayer(node) {\n const highestBlockingIndex = indexOf(getTopMostPointerBlockingLayer()?.node);\n return indexOf(node) < highestBlockingIndex;\n}\nfunction addLayer(layer) {\n layers.push(layer);\n}\nfunction removeLayer(node) {\n const index = indexOf(node);\n if (index < 0) {\n return;\n }\n layers.splice(index, 1);\n}\nfunction assignPointerEventToLayers() {\n for (const {\n node\n } of layers) {\n node.style.pointerEvents = isBelowPointerBlockingLayer(node) ? \"none\" : \"auto\";\n }\n}\nfunction disableBodyPointerEvents(node) {\n if (hasPointerBlockingLayer() && !hasDisabledBodyPointerEvents) {\n const ownerDocument = getDocument(node);\n originalBodyPointerEvents = document.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = \"none\";\n hasDisabledBodyPointerEvents = true;\n }\n}\nfunction restoreBodyPointerEvents(node) {\n if (hasPointerBlockingLayer()) {\n return;\n }\n const ownerDocument = getDocument(node);\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n if (ownerDocument.body.style.length === 0) {\n ownerDocument.body.removeAttribute(\"style\");\n }\n hasDisabledBodyPointerEvents = false;\n}\nvar layerStack = {\n layers,\n isTopMostLayer,\n hasPointerBlockingLayer,\n isBelowPointerBlockingLayer,\n addLayer,\n removeLayer,\n indexOf,\n find,\n assignPointerEventToLayers,\n disableBodyPointerEvents,\n restoreBodyPointerEvents\n};\n\nexport { DATA_TOP_LAYER_ATTR, layerStack };\n", "import { DATA_TOP_LAYER_ATTR } from './ZKYDDHM6.js';\nimport { getActiveElement, contains, focusWithoutScrolling, access, removeItemFromArray, getDocument, visuallyHiddenStyles, isFocusable, getAllTabbableIn } from '@kobalte/utils';\nimport { createSignal, createEffect, onCleanup } from 'solid-js';\nimport { isServer } from 'solid-js/web';\n\nvar AUTOFOCUS_ON_MOUNT_EVENT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT_EVENT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = {\n bubbles: false,\n cancelable: true\n};\nvar focusScopeStack = {\n /** A stack of focus scopes, with the active one at the top */\n stack: [],\n active() {\n return this.stack[0];\n },\n add(scope) {\n if (scope !== this.active()) {\n this.active()?.pause();\n }\n this.stack = removeItemFromArray(this.stack, scope);\n this.stack.unshift(scope);\n },\n remove(scope) {\n this.stack = removeItemFromArray(this.stack, scope);\n this.active()?.resume();\n }\n};\nfunction createFocusScope(props, ref) {\n const [isPaused, setIsPaused] = createSignal(false);\n const focusScope = {\n pause() {\n setIsPaused(true);\n },\n resume() {\n setIsPaused(false);\n }\n };\n let lastFocusedElement = null;\n const onMountAutoFocus = (e) => props.onMountAutoFocus?.(e);\n const onUnmountAutoFocus = (e) => props.onUnmountAutoFocus?.(e);\n const ownerDocument = () => getDocument(ref());\n const createSentinel = () => {\n const element = ownerDocument().createElement(\"span\");\n element.setAttribute(\"data-focus-trap\", \"\");\n element.tabIndex = 0;\n Object.assign(element.style, visuallyHiddenStyles);\n return element;\n };\n const tabbables = () => {\n const container = ref();\n if (!container) {\n return [];\n }\n return getAllTabbableIn(container, true).filter((el) => !el.hasAttribute(\"data-focus-trap\"));\n };\n const firstTabbable = () => {\n const items = tabbables();\n return items.length > 0 ? items[0] : null;\n };\n const lastTabbable = () => {\n const items = tabbables();\n return items.length > 0 ? items[items.length - 1] : null;\n };\n const shouldPreventUnmountAutoFocus = () => {\n const container = ref();\n if (!container) {\n return false;\n }\n const activeElement = getActiveElement(container);\n if (!activeElement) {\n return false;\n }\n if (contains(container, activeElement)) {\n return false;\n }\n return isFocusable(activeElement);\n };\n createEffect(() => {\n if (isServer) {\n return;\n }\n const container = ref();\n if (!container) {\n return;\n }\n focusScopeStack.add(focusScope);\n const previouslyFocusedElement = getActiveElement(container);\n const hasFocusedCandidate = contains(container, previouslyFocusedElement);\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT_EVENT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT_EVENT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n setTimeout(() => {\n focusWithoutScrolling(firstTabbable());\n if (getActiveElement(container) === previouslyFocusedElement) {\n focusWithoutScrolling(container);\n }\n }, 0);\n }\n }\n onCleanup(() => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT_EVENT, onMountAutoFocus);\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT_EVENT, EVENT_OPTIONS);\n if (shouldPreventUnmountAutoFocus()) {\n unmountEvent.preventDefault();\n }\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT_EVENT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focusWithoutScrolling(previouslyFocusedElement ?? ownerDocument().body);\n }\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT_EVENT, onUnmountAutoFocus);\n focusScopeStack.remove(focusScope);\n }, 0);\n });\n });\n createEffect(() => {\n if (isServer) {\n return;\n }\n const container = ref();\n if (!container || !access(props.trapFocus) || isPaused()) {\n return;\n }\n const onFocusIn = (event) => {\n const target = event.target;\n if (target?.closest(`[${DATA_TOP_LAYER_ATTR}]`)) {\n return;\n }\n if (contains(container, target)) {\n lastFocusedElement = target;\n } else {\n focusWithoutScrolling(lastFocusedElement);\n }\n };\n const onFocusOut = (event) => {\n const relatedTarget = event.relatedTarget;\n const target = relatedTarget ?? getActiveElement(container);\n if (target?.closest(`[${DATA_TOP_LAYER_ATTR}]`)) {\n return;\n }\n if (!contains(container, target)) {\n focusWithoutScrolling(lastFocusedElement);\n }\n };\n ownerDocument().addEventListener(\"focusin\", onFocusIn);\n ownerDocument().addEventListener(\"focusout\", onFocusOut);\n onCleanup(() => {\n ownerDocument().removeEventListener(\"focusin\", onFocusIn);\n ownerDocument().removeEventListener(\"focusout\", onFocusOut);\n });\n });\n createEffect(() => {\n if (isServer) {\n return;\n }\n const container = ref();\n if (!container || !access(props.trapFocus) || isPaused()) {\n return;\n }\n const startSentinel = createSentinel();\n container.insertAdjacentElement(\"afterbegin\", startSentinel);\n const endSentinel = createSentinel();\n container.insertAdjacentElement(\"beforeend\", endSentinel);\n function onFocus(event) {\n const first = firstTabbable();\n const last = lastTabbable();\n if (event.relatedTarget === first) {\n focusWithoutScrolling(last);\n } else {\n focusWithoutScrolling(first);\n }\n }\n startSentinel.addEventListener(\"focusin\", onFocus);\n endSentinel.addEventListener(\"focusin\", onFocus);\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.previousSibling === endSentinel) {\n endSentinel.remove();\n container.insertAdjacentElement(\"beforeend\", endSentinel);\n }\n if (mutation.nextSibling === startSentinel) {\n startSentinel.remove();\n container.insertAdjacentElement(\"afterbegin\", startSentinel);\n }\n }\n });\n observer.observe(container, {\n childList: true,\n subtree: false\n });\n onCleanup(() => {\n startSentinel.removeEventListener(\"focusin\", onFocus);\n endSentinel.removeEventListener(\"focusin\", onFocus);\n startSentinel.remove();\n endSentinel.remove();\n observer.disconnect();\n });\n });\n}\n\nexport { createFocusScope };\n", "import { visuallyHiddenStyles } from '@kobalte/utils';\n\n// src/live-announcer/live-announcer.tsx\nvar LIVEREGION_TIMEOUT_DELAY = 7e3;\nvar liveAnnouncer = null;\nvar DATA_LIVE_ANNOUNCER_ATTR = \"data-live-announcer\";\nfunction announce(message, assertiveness = \"assertive\", timeout = LIVEREGION_TIMEOUT_DELAY) {\n if (!liveAnnouncer) {\n liveAnnouncer = new LiveAnnouncer();\n }\n liveAnnouncer.announce(message, assertiveness, timeout);\n}\nfunction clearAnnouncer(assertiveness) {\n if (liveAnnouncer) {\n liveAnnouncer.clear(assertiveness);\n }\n}\nfunction destroyAnnouncer() {\n if (liveAnnouncer) {\n liveAnnouncer.destroy();\n liveAnnouncer = null;\n }\n}\nvar LiveAnnouncer = class {\n constructor() {\n this.node = document.createElement(\"div\");\n this.node.dataset.liveAnnouncer = \"true\";\n Object.assign(this.node.style, visuallyHiddenStyles);\n this.assertiveLog = this.createLog(\"assertive\");\n this.node.appendChild(this.assertiveLog);\n this.politeLog = this.createLog(\"polite\");\n this.node.appendChild(this.politeLog);\n document.body.prepend(this.node);\n }\n createLog(ariaLive) {\n const node = document.createElement(\"div\");\n node.setAttribute(\"role\", \"log\");\n node.setAttribute(\"aria-live\", ariaLive);\n node.setAttribute(\"aria-relevant\", \"additions\");\n return node;\n }\n destroy() {\n if (!this.node) {\n return;\n }\n document.body.removeChild(this.node);\n this.node = null;\n }\n announce(message, assertiveness = \"assertive\", timeout = LIVEREGION_TIMEOUT_DELAY) {\n if (!this.node) {\n return;\n }\n const node = document.createElement(\"div\");\n node.textContent = message;\n if (assertiveness === \"assertive\") {\n this.assertiveLog.appendChild(node);\n } else {\n this.politeLog.appendChild(node);\n }\n if (message !== \"\") {\n setTimeout(() => {\n node.remove();\n }, timeout);\n }\n }\n clear(assertiveness) {\n if (!this.node) {\n return;\n }\n if (!assertiveness || assertiveness === \"assertive\") {\n this.assertiveLog.innerHTML = \"\";\n }\n if (!assertiveness || assertiveness === \"polite\") {\n this.politeLog.innerHTML = \"\";\n }\n }\n};\n\nexport { DATA_LIVE_ANNOUNCER_ATTR, announce, clearAnnouncer, destroyAnnouncer };\n", "import { DATA_TOP_LAYER_ATTR } from './ZKYDDHM6.js';\nimport { DATA_LIVE_ANNOUNCER_ATTR } from './YA7DCYMB.js';\nimport { access } from '@kobalte/utils';\nimport { createEffect, onCleanup } from 'solid-js';\n\nfunction createHideOutside(props) {\n createEffect(() => {\n if (access(props.isDisabled)) {\n return;\n }\n onCleanup(ariaHideOutside(access(props.targets), access(props.root)));\n });\n}\nvar refCountMap = /* @__PURE__ */ new WeakMap();\nvar observerStack = [];\nfunction ariaHideOutside(targets, root = document.body) {\n const visibleNodes = new Set(targets);\n const hiddenNodes = /* @__PURE__ */ new Set();\n const walk = (root2) => {\n for (const element of root2.querySelectorAll(\n `[${DATA_LIVE_ANNOUNCER_ATTR}], [${DATA_TOP_LAYER_ATTR}]`\n )) {\n visibleNodes.add(element);\n }\n const acceptNode = (node) => {\n if (visibleNodes.has(node) || node.parentElement && hiddenNodes.has(node.parentElement) && node.parentElement.getAttribute(\"role\") !== \"row\") {\n return NodeFilter.FILTER_REJECT;\n }\n for (const target of visibleNodes) {\n if (node.contains(target)) {\n return NodeFilter.FILTER_SKIP;\n }\n }\n return NodeFilter.FILTER_ACCEPT;\n };\n const walker = document.createTreeWalker(root2, NodeFilter.SHOW_ELEMENT, {\n acceptNode\n });\n const acceptRoot = acceptNode(root2);\n if (acceptRoot === NodeFilter.FILTER_ACCEPT) {\n hide(root2);\n }\n if (acceptRoot !== NodeFilter.FILTER_REJECT) {\n let node = walker.nextNode();\n while (node != null) {\n hide(node);\n node = walker.nextNode();\n }\n }\n };\n const hide = (node) => {\n const refCount = refCountMap.get(node) ?? 0;\n if (node.getAttribute(\"aria-hidden\") === \"true\" && refCount === 0) {\n return;\n }\n if (refCount === 0) {\n node.setAttribute(\"aria-hidden\", \"true\");\n }\n hiddenNodes.add(node);\n refCountMap.set(node, refCount + 1);\n };\n if (observerStack.length) {\n observerStack[observerStack.length - 1].disconnect();\n }\n walk(root);\n const observer = new MutationObserver((changes) => {\n for (const change of changes) {\n if (change.type !== \"childList\" || change.addedNodes.length === 0) {\n continue;\n }\n if (![...visibleNodes, ...hiddenNodes].some(\n (node) => node.contains(change.target)\n )) {\n for (const node of change.removedNodes) {\n if (node instanceof Element) {\n visibleNodes.delete(node);\n hiddenNodes.delete(node);\n }\n }\n for (const node of change.addedNodes) {\n if ((node instanceof HTMLElement || node instanceof SVGElement) && (node.dataset.liveAnnouncer === \"true\" || node.dataset.reactAriaTopLayer === \"true\")) {\n visibleNodes.add(node);\n } else if (node instanceof Element) {\n walk(node);\n }\n }\n }\n }\n });\n observer.observe(root, { childList: true, subtree: true });\n const observerWrapper = {\n observe() {\n observer.observe(root, { childList: true, subtree: true });\n },\n disconnect() {\n observer.disconnect();\n }\n };\n observerStack.push(observerWrapper);\n return () => {\n observer.disconnect();\n for (const node of hiddenNodes) {\n const count = refCountMap.get(node);\n if (count == null) {\n return;\n }\n if (count === 1) {\n node.removeAttribute(\"aria-hidden\");\n refCountMap.delete(node);\n } else {\n refCountMap.set(node, count - 1);\n }\n }\n if (observerWrapper === observerStack[observerStack.length - 1]) {\n observerStack.pop();\n if (observerStack.length) {\n observerStack[observerStack.length - 1].observe();\n }\n } else {\n observerStack.splice(observerStack.indexOf(observerWrapper), 1);\n }\n };\n}\n\nexport { ariaHideOutside, createHideOutside };\n", "import { DATA_TOP_LAYER_ATTR } from './ZKYDDHM6.js';\nimport { access, noop, getDocument, composeEventHandlers, contains, isCtrlKey } from '@kobalte/utils';\nimport { createEffect, onCleanup } from 'solid-js';\nimport { isServer } from 'solid-js/web';\n\nvar POINTER_DOWN_OUTSIDE_EVENT = \"interactOutside.pointerDownOutside\";\nvar FOCUS_OUTSIDE_EVENT = \"interactOutside.focusOutside\";\nfunction createInteractOutside(props, ref) {\n let pointerDownTimeoutId;\n let clickHandler = noop;\n const ownerDocument = () => getDocument(ref());\n const onPointerDownOutside = (e) => props.onPointerDownOutside?.(e);\n const onFocusOutside = (e) => props.onFocusOutside?.(e);\n const onInteractOutside = (e) => props.onInteractOutside?.(e);\n const isEventOutside = (e) => {\n const target = e.target;\n if (!(target instanceof Element)) {\n return false;\n }\n if (target.closest(`[${DATA_TOP_LAYER_ATTR}]`)) {\n return false;\n }\n if (!contains(ownerDocument(), target)) {\n return false;\n }\n if (contains(ref(), target)) {\n return false;\n }\n return !props.shouldExcludeElement?.(target);\n };\n const onPointerDown = (e) => {\n function handler() {\n const container = ref();\n const target = e.target;\n if (!container || !target || !isEventOutside(e)) {\n return;\n }\n const handler2 = composeEventHandlers([\n onPointerDownOutside,\n onInteractOutside\n ]);\n target.addEventListener(POINTER_DOWN_OUTSIDE_EVENT, handler2, {\n once: true\n });\n const pointerDownOutsideEvent = new CustomEvent(\n POINTER_DOWN_OUTSIDE_EVENT,\n {\n bubbles: false,\n cancelable: true,\n detail: {\n originalEvent: e,\n isContextMenu: e.button === 2 || isCtrlKey(e) && e.button === 0\n }\n }\n );\n target.dispatchEvent(pointerDownOutsideEvent);\n }\n if (e.pointerType === \"touch\") {\n ownerDocument().removeEventListener(\"click\", handler);\n clickHandler = handler;\n ownerDocument().addEventListener(\"click\", handler, { once: true });\n } else {\n handler();\n }\n };\n const onFocusIn = (e) => {\n const container = ref();\n const target = e.target;\n if (!container || !target || !isEventOutside(e)) {\n return;\n }\n const handler = composeEventHandlers([\n onFocusOutside,\n onInteractOutside\n ]);\n target.addEventListener(FOCUS_OUTSIDE_EVENT, handler, { once: true });\n const focusOutsideEvent = new CustomEvent(FOCUS_OUTSIDE_EVENT, {\n bubbles: false,\n cancelable: true,\n detail: {\n originalEvent: e,\n isContextMenu: false\n }\n });\n target.dispatchEvent(focusOutsideEvent);\n };\n createEffect(() => {\n if (isServer) {\n return;\n }\n if (access(props.isDisabled)) {\n return;\n }\n pointerDownTimeoutId = window.setTimeout(() => {\n ownerDocument().addEventListener(\"pointerdown\", onPointerDown, true);\n }, 0);\n ownerDocument().addEventListener(\"focusin\", onFocusIn, true);\n onCleanup(() => {\n window.clearTimeout(pointerDownTimeoutId);\n ownerDocument().removeEventListener(\"click\", clickHandler);\n ownerDocument().removeEventListener(\"pointerdown\", onPointerDown, true);\n ownerDocument().removeEventListener(\"focusin\", onFocusIn, true);\n });\n });\n}\n\nexport { createInteractOutside };\n", "import { access, getDocument, EventKey } from '@kobalte/utils';\nimport { createEffect, onCleanup } from 'solid-js';\nimport { isServer } from 'solid-js/web';\n\n// src/primitives/create-escape-key-down/create-escape-key-down.ts\nfunction createEscapeKeyDown(props) {\n const handleKeyDown = (event) => {\n if (event.key === EventKey.Escape) {\n props.onEscapeKeyDown?.(event);\n }\n };\n createEffect(() => {\n if (isServer) {\n return;\n }\n if (access(props.isDisabled)) {\n return;\n }\n const document = props.ownerDocument?.() ?? getDocument();\n document.addEventListener(\"keydown\", handleKeyDown);\n onCleanup(() => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n });\n });\n}\n\nexport { createEscapeKeyDown };\n", "import { createInteractOutside } from './KKN23NY7.js';\nimport { createEscapeKeyDown } from './QEMPLYZX.js';\nimport { layerStack } from './ZKYDDHM6.js';\nimport { Polymorphic } from './6Y7B2NEO.js';\nimport { createComponent, mergeProps } from 'solid-js/web';\nimport { getDocument, mergeRefs, contains } from '@kobalte/utils';\nimport { createContext, splitProps, onMount, createEffect, on, onCleanup, useContext } from 'solid-js';\n\nvar DismissableLayerContext = createContext();\nfunction useOptionalDismissableLayerContext() {\n return useContext(DismissableLayerContext);\n}\n\n// src/dismissable-layer/dismissable-layer.tsx\nfunction DismissableLayer(props) {\n let ref;\n const parentContext = useOptionalDismissableLayerContext();\n const [local, others] = splitProps(props, [\"ref\", \"disableOutsidePointerEvents\", \"excludedElements\", \"onEscapeKeyDown\", \"onPointerDownOutside\", \"onFocusOutside\", \"onInteractOutside\", \"onDismiss\", \"bypassTopMostLayerCheck\"]);\n const nestedLayers = /* @__PURE__ */ new Set([]);\n const registerNestedLayer = (element) => {\n nestedLayers.add(element);\n const parentUnregister = parentContext?.registerNestedLayer(element);\n return () => {\n nestedLayers.delete(element);\n parentUnregister?.();\n };\n };\n const shouldExcludeElement = (element) => {\n if (!ref) {\n return false;\n }\n return local.excludedElements?.some((node) => contains(node(), element)) || [...nestedLayers].some((layer) => contains(layer, element));\n };\n const onPointerDownOutside = (e) => {\n if (!ref || layerStack.isBelowPointerBlockingLayer(ref)) {\n return;\n }\n if (!local.bypassTopMostLayerCheck && !layerStack.isTopMostLayer(ref)) {\n return;\n }\n local.onPointerDownOutside?.(e);\n local.onInteractOutside?.(e);\n if (!e.defaultPrevented) {\n local.onDismiss?.();\n }\n };\n const onFocusOutside = (e) => {\n local.onFocusOutside?.(e);\n local.onInteractOutside?.(e);\n if (!e.defaultPrevented) {\n local.onDismiss?.();\n }\n };\n createInteractOutside({\n shouldExcludeElement,\n onPointerDownOutside,\n onFocusOutside\n }, () => ref);\n createEscapeKeyDown({\n ownerDocument: () => getDocument(ref),\n onEscapeKeyDown: (e) => {\n if (!ref || !layerStack.isTopMostLayer(ref)) {\n return;\n }\n local.onEscapeKeyDown?.(e);\n if (!e.defaultPrevented && local.onDismiss) {\n e.preventDefault();\n local.onDismiss();\n }\n }\n });\n onMount(() => {\n if (!ref) {\n return;\n }\n layerStack.addLayer({\n node: ref,\n isPointerBlocking: local.disableOutsidePointerEvents,\n dismiss: local.onDismiss\n });\n const unregisterFromParentLayer = parentContext?.registerNestedLayer(ref);\n layerStack.assignPointerEventToLayers();\n layerStack.disableBodyPointerEvents(ref);\n onCleanup(() => {\n if (!ref) {\n return;\n }\n layerStack.removeLayer(ref);\n unregisterFromParentLayer?.();\n layerStack.assignPointerEventToLayers();\n layerStack.restoreBodyPointerEvents(ref);\n });\n });\n createEffect(on([() => ref, () => local.disableOutsidePointerEvents], ([ref2, disableOutsidePointerEvents]) => {\n if (!ref2) {\n return;\n }\n const layer = layerStack.find(ref2);\n if (layer && layer.isPointerBlocking !== disableOutsidePointerEvents) {\n layer.isPointerBlocking = disableOutsidePointerEvents;\n layerStack.assignPointerEventToLayers();\n }\n if (disableOutsidePointerEvents) {\n layerStack.disableBodyPointerEvents(ref2);\n }\n onCleanup(() => {\n layerStack.restoreBodyPointerEvents(ref2);\n });\n }, {\n defer: true\n }));\n const context = {\n registerNestedLayer\n };\n return createComponent(DismissableLayerContext.Provider, {\n value: context,\n get children() {\n return createComponent(Polymorphic, mergeProps({\n as: \"div\",\n ref(r$) {\n const _ref$ = mergeRefs((el) => ref = el, local.ref);\n typeof _ref$ === \"function\" && _ref$(r$);\n }\n }, others));\n }\n });\n}\n\nexport { DismissableLayer };\n", "import { createControllableBooleanSignal } from './BLN63FDC.js';\nimport { access } from '@kobalte/utils';\n\nfunction createDisclosureState(props = {}) {\n const [isOpen, setIsOpen] = createControllableBooleanSignal({\n value: () => access(props.open),\n defaultValue: () => !!access(props.defaultOpen),\n onChange: (value) => props.onOpenChange?.(value)\n });\n const open = () => {\n setIsOpen(true);\n };\n const close = () => {\n setIsOpen(false);\n };\n const toggle = () => {\n isOpen() ? close() : open();\n };\n return {\n isOpen,\n setIsOpen,\n open,\n close,\n toggle\n };\n}\n\nexport { createDisclosureState };\n", "import { isString } from '@kobalte/utils';\nimport { createSignal, createEffect } from 'solid-js';\n\n// src/primitives/create-tag-name/create-tag-name.ts\nfunction createTagName(ref, fallback) {\n const [tagName, setTagName] = createSignal(stringOrUndefined(fallback?.()));\n createEffect(() => {\n setTagName(ref()?.tagName.toLowerCase() || stringOrUndefined(fallback?.()));\n });\n return tagName;\n}\nfunction stringOrUndefined(value) {\n return isString(value) ? value : void 0;\n}\n\nexport { createTagName };\n", "var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\nexport { __export };\n", "import { createTagName } from './ET5T45DO.js';\nimport { Polymorphic } from './6Y7B2NEO.js';\nimport { __export } from './5ZKAE4VZ.js';\nimport { createComponent, mergeProps } from 'solid-js/web';\nimport { mergeDefaultProps, mergeRefs } from '@kobalte/utils';\nimport { splitProps, createMemo } from 'solid-js';\n\n// src/button/index.tsx\nvar button_exports = {};\n__export(button_exports, {\n Button: () => Button,\n Root: () => ButtonRoot\n});\n\n// src/button/is-button.ts\nvar BUTTON_INPUT_TYPES = [\n \"button\",\n \"color\",\n \"file\",\n \"image\",\n \"reset\",\n \"submit\"\n];\nfunction isButton(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName === \"button\") {\n return true;\n }\n if (tagName === \"input\" && element.type) {\n return BUTTON_INPUT_TYPES.indexOf(element.type) !== -1;\n }\n return false;\n}\n\n// src/button/button-root.tsx\nfunction ButtonRoot(props) {\n let ref;\n const mergedProps = mergeDefaultProps({\n type: \"button\"\n }, props);\n const [local, others] = splitProps(mergedProps, [\"ref\", \"type\", \"disabled\"]);\n const tagName = createTagName(() => ref, () => \"button\");\n const isNativeButton = createMemo(() => {\n const elementTagName = tagName();\n if (elementTagName == null) {\n return false;\n }\n return isButton({\n tagName: elementTagName,\n type: local.type\n });\n });\n const isNativeInput = createMemo(() => {\n return tagName() === \"input\";\n });\n const isNativeLink = createMemo(() => {\n return tagName() === \"a\" && ref?.getAttribute(\"href\") != null;\n });\n return createComponent(Polymorphic, mergeProps({\n as: \"button\",\n ref(r$) {\n const _ref$ = mergeRefs((el) => ref = el, local.ref);\n typeof _ref$ === \"function\" && _ref$(r$);\n },\n get type() {\n return isNativeButton() || isNativeInput() ? local.type : void 0;\n },\n get role() {\n return !isNativeButton() && !isNativeLink() ? \"button\" : void 0;\n },\n get tabIndex() {\n return !isNativeButton() && !isNativeLink() && !local.disabled ? 0 : void 0;\n },\n get disabled() {\n return isNativeButton() || isNativeInput() ? local.disabled : void 0;\n },\n get [\"aria-disabled\"]() {\n return !isNativeButton() && !isNativeInput() && local.disabled ? true : void 0;\n },\n get [\"data-disabled\"]() {\n return local.disabled ? \"\" : void 0;\n }\n }, others));\n}\n\n// src/button/index.tsx\nvar Button = ButtonRoot;\n\nexport { Button, ButtonRoot, button_exports };\n", "import { createControllableBooleanSignal } from './BLN63FDC.js';\nimport { access } from '@kobalte/utils';\n\nfunction createToggleState(props = {}) {\n const [isSelected, _setIsSelected] = createControllableBooleanSignal({\n value: () => access(props.isSelected),\n defaultValue: () => !!access(props.defaultIsSelected),\n onChange: (value) => props.onSelectedChange?.(value)\n });\n const setIsSelected = (value) => {\n if (!access(props.isReadOnly) && !access(props.isDisabled)) {\n _setIsSelected(value);\n }\n };\n const toggle = () => {\n if (!access(props.isReadOnly) && !access(props.isDisabled)) {\n _setIsSelected(!isSelected());\n }\n };\n return {\n isSelected,\n setIsSelected,\n toggle\n };\n}\n\nexport { createToggleState };\n", "// src/primitives/create-register-id/create-register-id.ts\nfunction createRegisterId(setter) {\n return (id) => {\n setter(id);\n return () => setter(void 0);\n };\n}\n\nexport { createRegisterId };\n", "// src/reactivity/lib.ts\nvar access = (v) => typeof v === \"function\" ? v() : v;\nvar chain = (callbacks) => {\n return (...args) => {\n for (const callback of callbacks) callback && callback(...args);\n };\n};\nvar mergeRefs = (...refs) => {\n return chain(refs);\n};\nvar some = (...signals) => {\n return signals.some((signal) => !!signal());\n};\n\nexport { access, chain, mergeRefs, some };\n", "// src/dom/lib.ts\nvar extractCSSregex = /((?:--)?(?:\\w+-?)+)\\s*:\\s*([^;]*)/g;\nfunction stringStyleToObject(style) {\n const object = {};\n let match;\n while (match = extractCSSregex.exec(style)) {\n object[match[1]] = match[2];\n }\n return object;\n}\nfunction combineStyle(a, b) {\n if (typeof b === \"string\") {\n b = stringStyleToObject(b);\n }\n return { ...a, ...b };\n}\nvar afterPaint = (fn) => requestAnimationFrame(() => requestAnimationFrame(fn));\nvar callEventHandler = (eventHandler, event) => {\n if (eventHandler) {\n if (typeof eventHandler === \"function\") {\n eventHandler(event);\n } else {\n eventHandler[0](eventHandler[1], event);\n }\n }\n return event.defaultPrevented;\n};\nvar contains = (wrapper, target) => {\n if (wrapper.contains(target)) return true;\n let currentElement = target;\n while (currentElement) {\n if (currentElement === wrapper) return true;\n currentElement = currentElement._$host ?? currentElement.parentElement;\n }\n return false;\n};\nvar sortByDocumentPosition = (a, b) => {\n const relativePosition = a.compareDocumentPosition(b);\n if (relativePosition & Node.DOCUMENT_POSITION_PRECEDING || relativePosition & Node.DOCUMENT_POSITION_CONTAINS) {\n return 1;\n }\n if (relativePosition & Node.DOCUMENT_POSITION_FOLLOWING || relativePosition & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n return -1;\n }\n return 0;\n};\n\nexport { afterPaint, callEventHandler, combineStyle, contains, sortByDocumentPosition };\n", "import { access } from '../chunk/ZV6G25TT.js';\nimport { createEffect, onCleanup } from 'solid-js';\n\nvar activeStyles = /* @__PURE__ */ new Map();\nvar createStyle = (props) => {\n createEffect(() => {\n const style = access(props.style) ?? {};\n const properties = access(props.properties) ?? [];\n const originalStyles = {};\n for (const key in style) {\n originalStyles[key] = props.element.style[key];\n }\n const activeStyle = activeStyles.get(props.key);\n if (activeStyle) {\n activeStyle.activeCount++;\n } else {\n activeStyles.set(props.key, {\n activeCount: 1,\n originalStyles,\n properties: properties.map((property) => property.key)\n });\n }\n Object.assign(props.element.style, props.style);\n for (const property of properties) {\n props.element.style.setProperty(property.key, property.value);\n }\n onCleanup(() => {\n const activeStyle2 = activeStyles.get(props.key);\n if (!activeStyle2) return;\n if (activeStyle2.activeCount !== 1) {\n activeStyle2.activeCount--;\n return;\n }\n activeStyles.delete(props.key);\n for (const [key, value] of Object.entries(activeStyle2.originalStyles)) {\n props.element.style[key] = value;\n }\n for (const property of activeStyle2.properties) {\n props.element.style.removeProperty(property);\n }\n if (props.element.style.length === 0) {\n props.element.removeAttribute(\"style\");\n }\n props.cleanup?.();\n });\n });\n};\nvar style_default = createStyle;\n\nexport { style_default as default };\n", "// src/scroll/lib.ts\nvar getScrollDimensions = (element, axis) => {\n switch (axis) {\n case \"x\":\n return [element.clientWidth, element.scrollLeft, element.scrollWidth];\n case \"y\":\n return [element.clientHeight, element.scrollTop, element.scrollHeight];\n }\n};\nvar isScrollContainer = (element, axis) => {\n const styles = getComputedStyle(element);\n const overflow = axis === \"x\" ? styles.overflowX : styles.overflowY;\n return overflow === \"auto\" || overflow === \"scroll\" || // The HTML element is a scroll container if it has overflow visible\n element.tagName === \"HTML\" && overflow === \"visible\";\n};\nvar getScrollAtLocation = (location, axis, stopAt) => {\n const directionFactor = axis === \"x\" && window.getComputedStyle(location).direction === \"rtl\" ? -1 : 1;\n let currentElement = location;\n let availableScroll = 0;\n let availableScrollTop = 0;\n let wrapperReached = false;\n do {\n const [clientSize, scrollOffset, scrollSize] = getScrollDimensions(\n currentElement,\n axis\n );\n const scrolled = scrollSize - clientSize - directionFactor * scrollOffset;\n if ((scrollOffset !== 0 || scrolled !== 0) && isScrollContainer(currentElement, axis)) {\n availableScroll += scrolled;\n availableScrollTop += scrollOffset;\n }\n if (currentElement === (stopAt ?? document.documentElement)) {\n wrapperReached = true;\n } else {\n currentElement = currentElement._$host ?? currentElement.parentElement;\n }\n } while (currentElement && !wrapperReached);\n return [availableScroll, availableScrollTop];\n};\n\nexport { getScrollAtLocation };\n", "import { access } from '@corvu/utils/reactivity';\nimport { createSignal, mergeProps, createUniqueId, createEffect, onCleanup } from 'solid-js';\nimport { contains } from '@corvu/utils/dom';\nimport createStyle from '@corvu/utils/create/style';\nimport { getScrollAtLocation } from '@corvu/utils/scroll';\n\n// src/preventScroll.ts\nvar [preventScrollStack, setPreventScrollStack] = createSignal([]);\nvar isActive = (id) => preventScrollStack().indexOf(id) === preventScrollStack().length - 1;\nvar createPreventScroll = (props) => {\n const defaultedProps = mergeProps(\n {\n element: null,\n enabled: true,\n hideScrollbar: true,\n preventScrollbarShift: true,\n preventScrollbarShiftMode: \"padding\",\n restoreScrollPosition: true,\n allowPinchZoom: false\n },\n props\n );\n const preventScrollId = createUniqueId();\n let currentTouchStart = [0, 0];\n let currentTouchStartAxis = null;\n let currentTouchStartDelta = null;\n createEffect(() => {\n if (!access(defaultedProps.enabled)) return;\n setPreventScrollStack((stack) => [...stack, preventScrollId]);\n onCleanup(() => {\n setPreventScrollStack(\n (stack) => stack.filter((id) => id !== preventScrollId)\n );\n });\n });\n createEffect(() => {\n if (!access(defaultedProps.enabled) || !access(defaultedProps.hideScrollbar))\n return;\n const { body } = document;\n const scrollbarWidth = window.innerWidth - body.offsetWidth;\n if (access(defaultedProps.preventScrollbarShift)) {\n const style = { overflow: \"hidden\" };\n const properties = [];\n if (scrollbarWidth > 0) {\n if (access(defaultedProps.preventScrollbarShiftMode) === \"padding\") {\n style.paddingRight = `calc(${window.getComputedStyle(body).paddingRight} + ${scrollbarWidth}px)`;\n } else {\n style.marginRight = `calc(${window.getComputedStyle(body).marginRight} + ${scrollbarWidth}px)`;\n }\n properties.push({\n key: \"--scrollbar-width\",\n value: `${scrollbarWidth}px`\n });\n }\n const offsetTop = window.scrollY;\n const offsetLeft = window.scrollX;\n createStyle({\n key: \"prevent-scroll\",\n element: body,\n style,\n properties,\n cleanup: () => {\n if (access(defaultedProps.restoreScrollPosition) && scrollbarWidth > 0) {\n window.scrollTo(offsetLeft, offsetTop);\n }\n }\n });\n } else {\n createStyle({\n key: \"prevent-scroll\",\n element: body,\n style: {\n overflow: \"hidden\"\n }\n });\n }\n });\n createEffect(() => {\n if (!isActive(preventScrollId) || !access(defaultedProps.enabled)) return;\n document.addEventListener(\"wheel\", maybePreventWheel, {\n passive: false\n });\n document.addEventListener(\"touchstart\", logTouchStart, {\n passive: false\n });\n document.addEventListener(\"touchmove\", maybePreventTouch, {\n passive: false\n });\n onCleanup(() => {\n document.removeEventListener(\"wheel\", maybePreventWheel);\n document.removeEventListener(\"touchstart\", logTouchStart);\n document.removeEventListener(\"touchmove\", maybePreventTouch);\n });\n });\n const logTouchStart = (event) => {\n currentTouchStart = getTouchXY(event);\n currentTouchStartAxis = null;\n currentTouchStartDelta = null;\n };\n const maybePreventWheel = (event) => {\n const target = event.target;\n const wrapper = access(defaultedProps.element);\n const delta = getDeltaXY(event);\n const axis = Math.abs(delta[0]) > Math.abs(delta[1]) ? \"x\" : \"y\";\n const axisDelta = axis === \"x\" ? delta[0] : delta[1];\n const resultsInScroll = wouldScroll(target, axis, axisDelta, wrapper);\n let shouldCancel;\n if (wrapper && contains(wrapper, target)) {\n shouldCancel = !resultsInScroll;\n } else {\n shouldCancel = true;\n }\n if (shouldCancel && event.cancelable) {\n event.preventDefault();\n }\n };\n const maybePreventTouch = (event) => {\n const wrapper = access(defaultedProps.element);\n const target = event.target;\n let shouldCancel;\n if (event.touches.length === 2) {\n shouldCancel = !access(defaultedProps.allowPinchZoom);\n } else {\n if (currentTouchStartAxis == null || currentTouchStartDelta === null) {\n const delta = getTouchXY(event).map(\n (touch, i) => currentTouchStart[i] - touch\n );\n const axis = Math.abs(delta[0]) > Math.abs(delta[1]) ? \"x\" : \"y\";\n currentTouchStartAxis = axis;\n currentTouchStartDelta = axis === \"x\" ? delta[0] : delta[1];\n }\n if (target.type === \"range\") {\n shouldCancel = false;\n } else {\n const wouldResultInScroll = wouldScroll(\n target,\n currentTouchStartAxis,\n currentTouchStartDelta,\n wrapper\n );\n if (wrapper && contains(wrapper, target)) {\n shouldCancel = !wouldResultInScroll;\n } else {\n shouldCancel = true;\n }\n }\n }\n if (shouldCancel && event.cancelable) {\n event.preventDefault();\n }\n };\n};\nvar getDeltaXY = (event) => [\n event.deltaX,\n event.deltaY\n];\nvar getTouchXY = (event) => event.changedTouches[0] ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\nvar wouldScroll = (target, axis, delta, wrapper) => {\n const targetInWrapper = wrapper !== null && contains(wrapper, target);\n const [availableScroll, availableScrollTop] = getScrollAtLocation(\n target,\n axis,\n targetInWrapper ? wrapper : void 0\n );\n if (delta > 0 && Math.abs(availableScroll) <= 1) {\n return false;\n }\n if (delta < 0 && Math.abs(availableScrollTop) < 1) {\n return false;\n }\n return true;\n};\nvar preventScroll_default = createPreventScroll;\n\n// src/index.ts\nvar src_default = preventScroll_default;\n\nexport { src_default as default };\n", "import { access } from '@corvu/utils/reactivity';\nimport { createMemo, createSignal, createEffect, untrack, onCleanup } from 'solid-js';\n\n// src/presence.ts\nvar createPresence = (props) => {\n const refStyles = createMemo(() => {\n const element = access(props.element);\n if (!element) return;\n return getComputedStyle(element);\n });\n const getAnimationName = () => {\n return refStyles()?.animationName ?? \"none\";\n };\n const [presentState, setPresentState] = createSignal(access(props.show) ? \"present\" : \"hidden\");\n let animationName = \"none\";\n createEffect((prevShow) => {\n const show = access(props.show);\n untrack(() => {\n if (prevShow === show) return show;\n const prevAnimationName = animationName;\n const currentAnimationName = getAnimationName();\n if (show) {\n setPresentState(\"present\");\n } else if (currentAnimationName === \"none\" || refStyles()?.display === \"none\") {\n setPresentState(\"hidden\");\n } else {\n const isAnimating = prevAnimationName !== currentAnimationName;\n if (prevShow === true && isAnimating) {\n setPresentState(\"hiding\");\n } else {\n setPresentState(\"hidden\");\n }\n }\n });\n return show;\n });\n createEffect(() => {\n const element = access(props.element);\n if (!element) return;\n const handleAnimationStart = (event) => {\n if (event.target === element) {\n animationName = getAnimationName();\n }\n };\n const handleAnimationEnd = (event) => {\n const currentAnimationName = getAnimationName();\n const isCurrentAnimation = currentAnimationName.includes(\n event.animationName\n );\n if (event.target === element && isCurrentAnimation && presentState() === \"hiding\") {\n setPresentState(\"hidden\");\n }\n };\n element.addEventListener(\"animationstart\", handleAnimationStart);\n element.addEventListener(\"animationcancel\", handleAnimationEnd);\n element.addEventListener(\"animationend\", handleAnimationEnd);\n onCleanup(() => {\n element.removeEventListener(\"animationstart\", handleAnimationStart);\n element.removeEventListener(\"animationcancel\", handleAnimationEnd);\n element.removeEventListener(\"animationend\", handleAnimationEnd);\n });\n });\n return {\n present: () => presentState() === \"present\" || presentState() === \"hiding\",\n state: presentState,\n setState: setPresentState\n };\n};\nvar presence_default = createPresence;\n\n// src/index.ts\nvar src_default = presence_default;\n\nexport { src_default as default };\n", "import { Popper } from './LMWVDFW6.js';\nimport { createSelectableList } from './GLKC2QFF.js';\nimport { createSelectableItem, createListState } from './H6DSIDEC.js';\nimport { createDomCollectionItem, useOptionalDomCollectionContext, createDomCollection } from './7CVNMTYF.js';\nimport { useLocale } from './XHJPQEZP.js';\nimport { createFocusScope } from './ISKHZMHS.js';\nimport { createHideOutside } from './455ZADO2.js';\nimport { DismissableLayer } from './BASJUNIE.js';\nimport { createDisclosureState } from './7LCANGHD.js';\nimport { ButtonRoot } from './7OVKXYPU.js';\nimport { createToggleState } from './YGDQXQ2B.js';\nimport { createRegisterId } from './E4R2EMM4.js';\nimport { createControllableSignal } from './BLN63FDC.js';\nimport { createTagName } from './ET5T45DO.js';\nimport { Polymorphic } from './6Y7B2NEO.js';\nimport { createContext, useContext, splitProps, createMemo, createEffect, on, onCleanup, createUniqueId, createSignal, Show } from 'solid-js';\nimport { createComponent, mergeProps, memo, Portal, isServer } from 'solid-js/web';\nimport { mergeDefaultProps, mergeRefs, createGenerateId, composeEventHandlers, callHandler, scrollIntoViewport, contains, focusWithoutScrolling, removeItemFromArray, isPointInPolygon } from '@kobalte/utils';\nimport createPreventScroll from 'solid-prevent-scroll';\nimport { combineStyle } from '@solid-primitives/props';\nimport createPresence from 'solid-presence';\n\nvar MenubarContext = createContext();\nfunction useOptionalMenubarContext() {\n return useContext(MenubarContext);\n}\nfunction useMenubarContext() {\n const context = useOptionalMenubarContext();\n if (context === void 0) {\n throw new Error(\"[kobalte]: `useMenubarContext` must be used within a `Menubar` component\");\n }\n return context;\n}\nvar NavigationMenuContext = createContext();\nfunction useOptionalNavigationMenuContext() {\n return useContext(NavigationMenuContext);\n}\nfunction useNavigationMenuContext() {\n const context = useOptionalNavigationMenuContext();\n if (context === void 0) {\n throw new Error(\"[kobalte]: `useNavigationMenuContext` must be used within a `NavigationMenu` component\");\n }\n return context;\n}\nvar MenuContext = createContext();\nfunction useOptionalMenuContext() {\n return useContext(MenuContext);\n}\nfunction useMenuContext() {\n const context = useOptionalMenuContext();\n if (context === void 0) {\n throw new Error(\"[kobalte]: `useMenuContext` must be used within a `Menu` component\");\n }\n return context;\n}\nvar MenuItemContext = createContext();\nfunction useMenuItemContext() {\n const context = useContext(MenuItemContext);\n if (context === void 0) {\n throw new Error(\"[kobalte]: `useMenuItemContext` must be used within a `Menu.Item` component\");\n }\n return context;\n}\nvar MenuRootContext = createContext();\nfunction useMenuRootContext() {\n const context = useContext(MenuRootContext);\n if (context === void 0) {\n throw new Error(\"[kobalte]: `useMenuRootContext` must be used within a `MenuRoot` component\");\n }\n return context;\n}\n\n// src/menu/menu-item-base.tsx\nfunction MenuItemBase(props) {\n let ref;\n const rootContext = useMenuRootContext();\n const menuContext = useMenuContext();\n const mergedProps = mergeDefaultProps({\n id: rootContext.generateId(`item-${createUniqueId()}`)\n }, props);\n const [local, others] = splitProps(mergedProps, [\"ref\", \"textValue\", \"disabled\", \"closeOnSelect\", \"checked\", \"indeterminate\", \"onSelect\", \"onPointerMove\", \"onPointerLeave\", \"onPointerDown\", \"onPointerUp\", \"onClick\", \"onKeyDown\", \"onMouseDown\", \"onFocus\"]);\n const [labelId, setLabelId] = createSignal();\n const [descriptionId, setDescriptionId] = createSignal();\n const [labelRef, setLabelRef] = createSignal();\n const selectionManager = () => menuContext.listState().selectionManager();\n const key = () => others.id;\n const isHighlighted = () => selectionManager().focusedKey() === key();\n const onSelect = () => {\n local.onSelect?.();\n if (local.closeOnSelect) {\n setTimeout(() => {\n menuContext.close(true);\n });\n }\n };\n createDomCollectionItem({\n getItem: () => ({\n ref: () => ref,\n type: \"item\",\n key: key(),\n textValue: local.textValue ?? labelRef()?.textContent ?? ref?.textContent ?? \"\",\n disabled: local.disabled ?? false\n })\n });\n const selectableItem = createSelectableItem({\n key,\n selectionManager,\n shouldSelectOnPressUp: true,\n allowsDifferentPressOrigin: true,\n disabled: () => local.disabled\n }, () => ref);\n const onPointerMove = (e) => {\n callHandler(e, local.onPointerMove);\n if (e.pointerType !== \"mouse\") {\n return;\n }\n if (local.disabled) {\n menuContext.onItemLeave(e);\n } else {\n menuContext.onItemEnter(e);\n if (!e.defaultPrevented) {\n focusWithoutScrolling(e.currentTarget);\n menuContext.listState().selectionManager().setFocused(true);\n menuContext.listState().selectionManager().setFocusedKey(key());\n }\n }\n };\n const onPointerLeave = (e) => {\n callHandler(e, local.onPointerLeave);\n if (e.pointerType !== \"mouse\") {\n return;\n }\n menuContext.onItemLeave(e);\n };\n const onPointerUp = (e) => {\n callHandler(e, local.onPointerUp);\n if (!local.disabled && e.button === 0) {\n onSelect();\n }\n };\n const onKeyDown = (e) => {\n callHandler(e, local.onKeyDown);\n if (e.repeat) {\n return;\n }\n if (local.disabled) {\n return;\n }\n switch (e.key) {\n case \"Enter\":\n case \" \":\n onSelect();\n break;\n }\n };\n const ariaChecked = createMemo(() => {\n if (local.indeterminate) {\n return \"mixed\";\n }\n if (local.checked == null) {\n return void 0;\n }\n return local.checked;\n });\n const dataset = createMemo(() => ({\n \"data-indeterminate\": local.indeterminate ? \"\" : void 0,\n \"data-checked\": local.checked && !local.indeterminate ? \"\" : void 0,\n \"data-disabled\": local.disabled ? \"\" : void 0,\n \"data-highlighted\": isHighlighted() ? \"\" : void 0\n }));\n const context = {\n isChecked: () => local.checked,\n dataset,\n setLabelRef,\n generateId: createGenerateId(() => others.id),\n registerLabel: createRegisterId(setLabelId),\n registerDescription: createRegisterId(setDescriptionId)\n };\n return createComponent(MenuItemContext.Provider, {\n value: context,\n get children() {\n return createComponent(Polymorphic, mergeProps({\n as: \"div\",\n ref(r$) {\n const _ref$ = mergeRefs((el) => ref = el, local.ref);\n typeof _ref$ === \"function\" && _ref$(r$);\n },\n get tabIndex() {\n return selectableItem.tabIndex();\n },\n get [\"aria-checked\"]() {\n return ariaChecked();\n },\n get [\"aria-disabled\"]() {\n return local.disabled;\n },\n get [\"aria-labelledby\"]() {\n return labelId();\n },\n get [\"aria-describedby\"]() {\n return descriptionId();\n },\n get [\"data-key\"]() {\n return selectableItem.dataKey();\n },\n get onPointerDown() {\n return composeEventHandlers([local.onPointerDown, selectableItem.onPointerDown]);\n },\n get onPointerUp() {\n return composeEventHandlers([onPointerUp, selectableItem.onPointerUp]);\n },\n get onClick() {\n return composeEventHandlers([local.onClick, selectableItem.onClick]);\n },\n get onKeyDown() {\n return composeEventHandlers([onKeyDown, selectableItem.onKeyDown]);\n },\n get onMouseDown() {\n return composeEventHandlers([local.onMouseDown, selectableItem.onMouseDown]);\n },\n get onFocus() {\n return composeEventHandlers([local.onFocus, selectableItem.onFocus]);\n },\n onPointerMove,\n onPointerLeave\n }, dataset, others));\n }\n });\n}\n\n// src/menu/menu-checkbox-item.tsx\nfunction MenuCheckboxItem(props) {\n const mergedProps = mergeDefaultProps({\n closeOnSelect: false\n }, props);\n const [local, others] = splitProps(mergedProps, [\"checked\", \"defaultChecked\", \"onChange\", \"onSelect\"]);\n const state = createToggleState({\n isSelected: () => local.checked,\n defaultIsSelected: () => local.defaultChecked,\n onSelectedChange: (checked) => local.onChange?.(checked),\n isDisabled: () => others.disabled\n });\n const onSelect = () => {\n local.onSelect?.();\n state.toggle();\n };\n return createComponent(MenuItemBase, mergeProps({\n role: \"menuitemcheckbox\",\n get checked() {\n return state.isSelected();\n },\n onSelect\n }, others));\n}\nvar MENUBAR_KEYS = {\n next: (dir, orientation) => dir === \"ltr\" ? orientation === \"horizontal\" ? \"ArrowRight\" : \"ArrowDown\" : orientation === \"horizontal\" ? \"ArrowLeft\" : \"ArrowUp\",\n previous: (dir, orientation) => MENUBAR_KEYS.next(dir === \"ltr\" ? \"rtl\" : \"ltr\", orientation)\n};\nvar MENU_KEYS = {\n first: (orientation) => orientation === \"horizontal\" ? \"ArrowDown\" : \"ArrowRight\",\n last: (orientation) => orientation === \"horizontal\" ? \"ArrowUp\" : \"ArrowLeft\"\n};\nfunction MenuTrigger(props) {\n const rootContext = useMenuRootContext();\n const context = useMenuContext();\n const optionalMenubarContext = useOptionalMenubarContext();\n const {\n direction\n } = useLocale();\n const mergedProps = mergeDefaultProps({\n id: rootContext.generateId(\"trigger\")\n }, props);\n const [local, others] = splitProps(mergedProps, [\"ref\", \"id\", \"disabled\", \"onPointerDown\", \"onClick\", \"onKeyDown\", \"onMouseOver\", \"onFocus\"]);\n let key = () => rootContext.value();\n if (optionalMenubarContext !== void 0) {\n key = () => rootContext.value() ?? local.id;\n if (optionalMenubarContext.lastValue() === void 0)\n optionalMenubarContext.setLastValue(key);\n }\n const tagName = createTagName(() => context.triggerRef(), () => \"button\");\n const isNativeLink = createMemo(() => {\n return tagName() === \"a\" && context.triggerRef()?.getAttribute(\"href\") != null;\n });\n createEffect(on(() => optionalMenubarContext?.value(), (value) => {\n if (!isNativeLink())\n return;\n if (value === key())\n context.triggerRef()?.focus();\n }));\n const handleClick = () => {\n if (optionalMenubarContext !== void 0) {\n if (!context.isOpen()) {\n if (!optionalMenubarContext.autoFocusMenu()) {\n optionalMenubarContext.setAutoFocusMenu(true);\n }\n context.open(false);\n } else {\n if (optionalMenubarContext.value() === key())\n optionalMenubarContext.closeMenu();\n }\n } else\n context.toggle(true);\n };\n const onPointerDown = (e) => {\n callHandler(e, local.onPointerDown);\n e.currentTarget.dataset.pointerType = e.pointerType;\n if (!local.disabled && e.pointerType !== \"touch\" && e.button === 0) {\n handleClick();\n }\n };\n const onClick = (e) => {\n callHandler(e, local.onClick);\n if (!local.disabled) {\n if (e.currentTarget.dataset.pointerType === \"touch\")\n handleClick();\n }\n };\n const onKeyDown = (e) => {\n callHandler(e, local.onKeyDown);\n if (local.disabled) {\n return;\n }\n if (isNativeLink()) {\n switch (e.key) {\n case \"Enter\":\n case \" \":\n return;\n }\n }\n switch (e.key) {\n case \"Enter\":\n case \" \":\n case MENU_KEYS.first(rootContext.orientation()):\n e.stopPropagation();\n e.preventDefault();\n scrollIntoViewport(e.currentTarget);\n context.open(\"first\");\n optionalMenubarContext?.setAutoFocusMenu(true);\n optionalMenubarContext?.setValue(key);\n break;\n case MENU_KEYS.last(rootContext.orientation()):\n e.stopPropagation();\n e.preventDefault();\n context.open(\"last\");\n break;\n case MENUBAR_KEYS.next(direction(), rootContext.orientation()):\n if (optionalMenubarContext === void 0)\n break;\n e.stopPropagation();\n e.preventDefault();\n optionalMenubarContext.nextMenu();\n break;\n case MENUBAR_KEYS.previous(direction(), rootContext.orientation()):\n if (optionalMenubarContext === void 0)\n break;\n e.stopPropagation();\n e.preventDefault();\n optionalMenubarContext.previousMenu();\n break;\n }\n };\n const onMouseOver = (e) => {\n callHandler(e, local.onMouseOver);\n if (context.triggerRef()?.dataset.pointerType === \"touch\")\n return;\n if (!local.disabled && optionalMenubarContext !== void 0 && optionalMenubarContext.value() !== void 0) {\n optionalMenubarContext.setValue(key);\n }\n };\n const onFocus = (e) => {\n callHandler(e, local.onFocus);\n if (optionalMenubarContext !== void 0 && e.currentTarget.dataset.pointerType !== \"touch\")\n optionalMenubarContext.setValue(key);\n };\n createEffect(() => onCleanup(context.registerTriggerId(local.id)));\n return createComponent(ButtonRoot, mergeProps({\n ref(r$) {\n const _ref$ = mergeRefs(context.setTriggerRef, local.ref);\n typeof _ref$ === \"function\" && _ref$(r$);\n },\n get [\"data-kb-menu-value-trigger\"]() {\n return rootContext.value();\n },\n get id() {\n return local.id;\n },\n get disabled() {\n return local.disabled;\n },\n \"aria-haspopup\": \"true\",\n get [\"aria-expanded\"]() {\n return context.isOpen();\n },\n get [\"aria-controls\"]() {\n return memo(() => !!context.isOpen())() ? context.contentId() : void 0;\n },\n get [\"data-highlighted\"]() {\n return key() !== void 0 && optionalMenubarContext?.value() === key() ? true : void 0;\n },\n get tabIndex() {\n return optionalMenubarContext !== void 0 ? optionalMenubarContext.value() === key() || optionalMenubarContext.lastValue() === key() ? 0 : -1 : void 0;\n },\n onPointerDown,\n onMouseOver,\n onClick,\n onKeyDown,\n onFocus,\n role: optionalMenubarContext !== void 0 ? \"menuitem\" : void 0\n }, () => context.dataset(), others));\n}\nfunction MenuContentBase(props) {\n let ref;\n const rootContext = useMenuRootContext();\n const context = useMenuContext();\n const optionalMenubarContext = useOptionalMenubarContext();\n const optionalNavigationMenuContext = useOptionalNavigationMenuContext();\n const {\n direction\n } = useLocale();\n const mergedProps = mergeDefaultProps({\n id: rootContext.generateId(`content-${createUniqueId()}`)\n }, props);\n const [local, others] = splitProps(mergedProps, [\"ref\", \"id\", \"style\", \"onOpenAutoFocus\", \"onCloseAutoFocus\", \"onEscapeKeyDown\", \"onFocusOutside\", \"onPointerEnter\", \"onPointerMove\", \"onKeyDown\", \"onMouseDown\", \"onFocusIn\", \"onFocusOut\"]);\n let lastPointerX = 0;\n const isRootModalContent = () => {\n return context.parentMenuContext() == null && optionalMenubarContext === void 0 && rootContext.isModal();\n };\n const selectableList = createSelectableList({\n selectionManager: context.listState().selectionManager,\n collection: context.listState().collection,\n autoFocus: context.autoFocus,\n deferAutoFocus: true,\n // ensure all menu items are mounted and collection is not empty before trying to autofocus.\n shouldFocusWrap: true,\n disallowTypeAhead: () => !context.listState().selectionManager().isFocused(),\n orientation: () => rootContext.orientation() === \"horizontal\" ? \"vertical\" : \"horizontal\"\n }, () => ref);\n createFocusScope({\n trapFocus: () => isRootModalContent() && context.isOpen(),\n onMountAutoFocus: (event) => {\n if (optionalMenubarContext === void 0)\n local.onOpenAutoFocus?.(event);\n },\n onUnmountAutoFocus: local.onCloseAutoFocus\n }, () => ref);\n const onKeyDown = (e) => {\n if (!contains(e.currentTarget, e.target)) {\n return;\n }\n if (e.key === \"Tab\" && context.isOpen()) {\n e.preventDefault();\n }\n if (optionalMenubarContext !== void 0) {\n if (e.currentTarget.getAttribute(\"aria-haspopup\") !== \"true\")\n switch (e.key) {\n case MENUBAR_KEYS.next(direction(), rootContext.orientation()):\n e.stopPropagation();\n e.preventDefault();\n context.close(true);\n optionalMenubarContext.setAutoFocusMenu(true);\n optionalMenubarContext.nextMenu();\n break;\n case MENUBAR_KEYS.previous(direction(), rootContext.orientation()):\n if (e.currentTarget.hasAttribute(\"data-closed\"))\n break;\n e.stopPropagation();\n e.preventDefault();\n context.close(true);\n optionalMenubarContext.setAutoFocusMenu(true);\n optionalMenubarContext.previousMenu();\n break;\n }\n }\n };\n const onEscapeKeyDown = (e) => {\n local.onEscapeKeyDown?.(e);\n optionalMenubarContext?.setAutoFocusMenu(false);\n context.close(true);\n };\n const onFocusOutside = (e) => {\n local.onFocusOutside?.(e);\n if (rootContext.isModal()) {\n e.preventDefault();\n }\n };\n const onPointerEnter = (e) => {\n callHandler(e, local.onPointerEnter);\n if (!context.isOpen()) {\n return;\n }\n context.parentMenuContext()?.listState().selectionManager().setFocused(false);\n context.parentMenuContext()?.listState().selectionManager().setFocusedKey(void 0);\n };\n const onPointerMove = (e) => {\n callHandler(e, local.onPointerMove);\n if (e.pointerType !== \"mouse\") {\n return;\n }\n const target = e.target;\n const pointerXHasChanged = lastPointerX !== e.clientX;\n if (contains(e.currentTarget, target) && pointerXHasChanged) {\n context.setPointerDir(e.clientX > lastPointerX ? \"right\" : \"left\");\n lastPointerX = e.clientX;\n }\n };\n createEffect(() => onCleanup(context.registerContentId(local.id)));\n onCleanup(() => context.setContentRef(void 0));\n const commonAttributes = {\n ref: mergeRefs((el) => {\n context.setContentRef(el);\n ref = el;\n }, local.ref),\n role: \"menu\",\n get id() {\n return local.id;\n },\n get tabIndex() {\n return selectableList.tabIndex();\n },\n get \"aria-labelledby\"() {\n return context.triggerId();\n },\n onKeyDown: composeEventHandlers([local.onKeyDown, selectableList.onKeyDown, onKeyDown]),\n onMouseDown: composeEventHandlers([local.onMouseDown, selectableList.onMouseDown]),\n onFocusIn: composeEventHandlers([local.onFocusIn, selectableList.onFocusIn]),\n onFocusOut: composeEventHandlers([local.onFocusOut, selectableList.onFocusOut]),\n onPointerEnter,\n onPointerMove,\n get \"data-orientation\"() {\n return rootContext.orientation();\n }\n };\n return createComponent(Show, {\n get when() {\n return context.contentPresent();\n },\n get children() {\n return createComponent(Show, {\n get when() {\n return optionalNavigationMenuContext === void 0 || context.parentMenuContext() != null;\n },\n get fallback() {\n return createComponent(Polymorphic, mergeProps({\n as: \"div\"\n }, () => context.dataset(), commonAttributes, others));\n },\n get children() {\n return createComponent(Popper.Positioner, {\n get children() {\n return createComponent(DismissableLayer, mergeProps({\n get disableOutsidePointerEvents() {\n return memo(() => !!isRootModalContent())() && context.isOpen();\n },\n get excludedElements() {\n return [context.triggerRef];\n },\n bypassTopMostLayerCheck: true,\n get style() {\n return combineStyle({\n \"--kb-menu-content-transform-origin\": \"var(--kb-popper-content-transform-origin)\",\n position: \"relative\"\n }, local.style);\n },\n onEscapeKeyDown,\n onFocusOutside,\n get onDismiss() {\n return context.close;\n }\n }, () => context.dataset(), commonAttributes, others));\n }\n });\n }\n });\n }\n });\n}\n\n// src/menu/menu-content.tsx\nfunction MenuContent(props) {\n let ref;\n const rootContext = useMenuRootContext();\n const context = useMenuContext();\n const [local, others] = splitProps(props, [\"ref\"]);\n createPreventScroll({\n element: () => ref ?? null,\n enabled: () => context.contentPresent() && rootContext.preventScroll()\n });\n return createComponent(MenuContentBase, mergeProps({\n ref(r$) {\n const _ref$ = mergeRefs((el) => {\n ref = el;\n }, local.ref);\n typeof _ref$ === \"function\" && _ref$(r$);\n }\n }, others));\n}\nvar MenuGroupContext = createContext();\nfunction useMenuGroupContext() {\n const context = useContext(MenuGroupContext);\n if (context === void 0) {\n throw new Error(\"[kobalte]: `useMenuGroupContext` must be used within a `Menu.Group` component\");\n }\n return context;\n}\n\n// src/menu/menu-group.tsx\nfunction MenuGroup(props) {\n const rootContext = useMenuRootContext();\n const mergedProps = mergeDefaultProps({\n id: rootContext.generateId(`group-${createUniqueId()}`)\n }, props);\n const [labelId, setLabelId] = createSignal();\n const context = {\n generateId: createGenerateId(() => mergedProps.id),\n registerLabelId: createRegisterId(setLabelId)\n };\n return createComponent(MenuGroupContext.Provider, {\n value: context,\n get children() {\n return createComponent(Polymorphic, mergeProps({\n as: \"div\",\n role: \"group\",\n get [\"aria-labelledby\"]() {\n return labelId();\n }\n }, mergedProps));\n }\n });\n}\nfunction MenuGroupLabel(props) {\n const context = useMenuGroupContext();\n const mergedProps = mergeDefaultProps({\n id: context.generateId(\"label\")\n }, props);\n const [local, others] = splitProps(mergedProps, [\"id\"]);\n createEffect(() => onCleanup(context.registerLabelId(local.id)));\n return createComponent(Polymorphic, mergeProps({\n as: \"span\",\n get id() {\n return local.id;\n },\n \"aria-hidden\": \"true\"\n }, others));\n}\nfunction MenuIcon(props) {\n const context = useMenuContext();\n const mergedProps = mergeDefaultProps({\n children: \"\\u25BC\"\n }, props);\n return createComponent(Polymorphic, mergeProps({\n as: \"span\",\n \"aria-hidden\": \"true\"\n }, () => context.dataset(), mergedProps));\n}\nfunction MenuItem(props) {\n return createComponent(MenuItemBase, mergeProps({\n role: \"menuitem\",\n closeOnSelect: true\n }, props));\n}\nfunction MenuItemDescription(props) {\n const context = useMenuItemContext();\n const mergedProps = mergeDefaultProps({\n id: context.generateId(\"description\")\n }, props);\n const [local, others] = splitProps(mergedProps, [\"id\"]);\n createEffect(() => onCleanup(context.registerDescription(local.id)));\n return createComponent(Polymorphic, mergeProps({\n as: \"div\",\n get id() {\n return local.id;\n }\n }, () => context.dataset(), others));\n}\nfunction MenuItemIndicator(props) {\n const context = useMenuItemContext();\n const mergedProps = mergeDefaultProps({\n id: context.generateId(\"indicator\")\n }, props);\n const [local, others] = splitProps(mergedProps, [\"forceMount\"]);\n return createComponent(Show, {\n get when() {\n return local.forceMount || context.isChecked();\n },\n get children() {\n return createComponent(Polymorphic, mergeProps({\n as: \"div\"\n }, () => context.dataset(), others));\n }\n });\n}\nfunction MenuItemLabel(props) {\n const context = useMenuItemContext();\n const mergedProps = mergeDefaultProps({\n id: context.generateId(\"label\")\n }, props);\n const [local, others] = splitProps(mergedProps, [\"ref\", \"id\"]);\n createEffect(() => onCleanup(context.registerLabel(local.id)));\n return createComponent(Polymorphic, mergeProps({\n as: \"div\",\n ref(r$) {\n const _ref$ = mergeRefs(context.setLabelRef, local.ref);\n typeof _ref$ === \"function\" && _ref$(r$);\n },\n get id() {\n return local.id;\n }\n }, () => context.dataset(), others));\n}\nfunction MenuPortal(props) {\n const context = useMenuContext();\n return createComponent(Show, {\n get when() {\n return context.contentPresent();\n },\n get children() {\n return createComponent(Portal, props);\n }\n });\n}\nvar MenuRadioGroupContext = createContext();\nfunction useMenuRadioGroupContext() {\n const context = useContext(MenuRadioGroupContext);\n if (context === void 0) {\n throw new Error(\"[kobalte]: `useMenuRadioGroupContext` must be used within a `Menu.RadioGroup` component\");\n }\n return context;\n}\n\n// src/menu/menu-radio-group.tsx\nfunction MenuRadioGroup(props) {\n const rootContext = useMenuRootContext();\n const defaultId = rootContext.generateId(`radiogroup-${createUniqueId()}`);\n const mergedProps = mergeDefaultProps({\n id: defaultId\n }, props);\n const [local, others] = splitProps(mergedProps, [\"value\", \"defaultValue\", \"onChange\", \"disabled\"]);\n const [selected, setSelected] = createControllableSignal({\n value: () => local.value,\n defaultValue: () => local.defaultValue,\n onChange: (value) => local.onChange?.(value)\n });\n const context = {\n isDisabled: () => local.disabled,\n isSelectedValue: (value) => value === selected(),\n setSelectedValue: (value) => setSelected(value)\n };\n return createComponent(MenuRadioGroupContext.Provider, {\n value: context,\n get children() {\n return createComponent(MenuGroup, others);\n }\n });\n}\nfunction MenuRadioItem(props) {\n const context = useMenuRadioGroupContext();\n const mergedProps = mergeDefaultProps({\n closeOnSelect: false\n }, props);\n const [local, others] = splitProps(mergedProps, [\"value\", \"onSelect\"]);\n const onSelect = () => {\n local.onSelect?.();\n context.setSelectedValue(local.value);\n };\n return createComponent(MenuItemBase, mergeProps({\n role: \"menuitemradio\",\n get checked() {\n return context.isSelectedValue(local.value);\n },\n onSelect\n }, others));\n}\nfunction getPointerGraceArea(placement, event, contentEl) {\n const basePlacement = placement.split(\"-\")[0];\n const contentRect = contentEl.getBoundingClientRect();\n const polygon = [];\n const pointerX = event.clientX;\n const pointerY = event.clientY;\n switch (basePlacement) {\n case \"top\":\n polygon.push([pointerX, pointerY + 5]);\n polygon.push([contentRect.left, contentRect.bottom]);\n polygon.push([contentRect.left, contentRect.top]);\n polygon.push([contentRect.right, contentRect.top]);\n polygon.push([contentRect.right, contentRect.bottom]);\n break;\n case \"right\":\n polygon.push([pointerX - 5, pointerY]);\n polygon.push([contentRect.left, contentRect.top]);\n polygon.push([contentRect.right, contentRect.top]);\n polygon.push([contentRect.right, contentRect.bottom]);\n polygon.push([contentRect.left, contentRect.bottom]);\n break;\n case \"bottom\":\n polygon.push([pointerX, pointerY - 5]);\n polygon.push([contentRect.right, contentRect.top]);\n polygon.push([contentRect.right, contentRect.bottom]);\n polygon.push([contentRect.left, contentRect.bottom]);\n polygon.push([contentRect.left, contentRect.top]);\n break;\n case \"left\":\n polygon.push([pointerX + 5, pointerY]);\n polygon.push([contentRect.right, contentRect.bottom]);\n polygon.push([contentRect.left, contentRect.bottom]);\n polygon.push([contentRect.left, contentRect.top]);\n polygon.push([contentRect.right, contentRect.top]);\n break;\n }\n return polygon;\n}\nfunction isPointerInGraceArea(event, area) {\n if (!area) {\n return false;\n }\n return isPointInPolygon([event.clientX, event.clientY], area);\n}\n\n// src/menu/menu.tsx\nfunction Menu(props) {\n const rootContext = useMenuRootContext();\n const parentDomCollectionContext = useOptionalDomCollectionContext();\n const parentMenuContext = useOptionalMenuContext();\n const optionalMenubarContext = useOptionalMenubarContext();\n const optionalNavigationMenuContext = useOptionalNavigationMenuContext();\n const mergedProps = mergeDefaultProps({\n placement: rootContext.orientation() === \"horizontal\" ? \"bottom-start\" : \"right-start\"\n }, props);\n const [local, others] = splitProps(mergedProps, [\"open\", \"defaultOpen\", \"onOpenChange\"]);\n let pointerGraceTimeoutId = 0;\n let pointerGraceIntent = null;\n let pointerDir = \"right\";\n const [triggerId, setTriggerId] = createSignal();\n const [contentId, setContentId] = createSignal();\n const [triggerRef, setTriggerRef] = createSignal();\n const [contentRef, setContentRef] = createSignal();\n const [focusStrategy, setFocusStrategy] = createSignal(true);\n const [currentPlacement, setCurrentPlacement] = createSignal(others.placement);\n const [nestedMenus, setNestedMenus] = createSignal([]);\n const [items, setItems] = createSignal([]);\n const {\n DomCollectionProvider\n } = createDomCollection({\n items,\n onItemsChange: setItems\n });\n const disclosureState = createDisclosureState({\n open: () => local.open,\n defaultOpen: () => local.defaultOpen,\n onOpenChange: (isOpen) => local.onOpenChange?.(isOpen)\n });\n const {\n present: contentPresent\n } = createPresence({\n show: () => rootContext.forceMount() || disclosureState.isOpen(),\n element: () => contentRef() ?? null\n });\n const listState = createListState({\n selectionMode: \"none\",\n dataSource: items\n });\n const open = (focusStrategy2) => {\n setFocusStrategy(focusStrategy2);\n disclosureState.open();\n };\n const close = (recursively = false) => {\n disclosureState.close();\n if (recursively && parentMenuContext) {\n parentMenuContext.close(true);\n }\n };\n const toggle = (focusStrategy2) => {\n setFocusStrategy(focusStrategy2);\n disclosureState.toggle();\n };\n const _focusContent = () => {\n const content = contentRef();\n if (content) {\n focusWithoutScrolling(content);\n listState.selectionManager().setFocused(true);\n listState.selectionManager().setFocusedKey(void 0);\n }\n };\n const focusContent = () => {\n if (optionalNavigationMenuContext != null)\n setTimeout(() => _focusContent());\n else\n _focusContent();\n };\n const registerNestedMenu = (element) => {\n setNestedMenus((prev) => [...prev, element]);\n const parentUnregister = parentMenuContext?.registerNestedMenu(element);\n return () => {\n setNestedMenus((prev) => removeItemFromArray(prev, element));\n parentUnregister?.();\n };\n };\n const isPointerMovingToSubmenu = (e) => {\n const isMovingTowards = pointerDir === pointerGraceIntent?.side;\n return isMovingTowards && isPointerInGraceArea(e, pointerGraceIntent?.area);\n };\n const onItemEnter = (e) => {\n if (isPointerMovingToSubmenu(e)) {\n e.preventDefault();\n }\n };\n const onItemLeave = (e) => {\n if (isPointerMovingToSubmenu(e)) {\n return;\n }\n focusContent();\n };\n const onTriggerLeave = (e) => {\n if (isPointerMovingToSubmenu(e)) {\n e.preventDefault();\n }\n };\n createHideOutside({\n isDisabled: () => {\n return !(parentMenuContext == null && disclosureState.isOpen() && rootContext.isModal());\n },\n targets: () => [contentRef(), ...nestedMenus()].filter(Boolean)\n });\n createEffect(() => {\n const contentEl = contentRef();\n if (!contentEl || !parentMenuContext) {\n return;\n }\n const parentUnregister = parentMenuContext.registerNestedMenu(contentEl);\n onCleanup(() => {\n parentUnregister();\n });\n });\n createEffect(() => {\n if (parentMenuContext !== void 0)\n return;\n optionalMenubarContext?.registerMenu(rootContext.value(), [contentRef(), ...nestedMenus()]);\n });\n createEffect(() => {\n if (parentMenuContext !== void 0 || optionalMenubarContext === void 0)\n return;\n if (optionalMenubarContext.value() === rootContext.value()) {\n triggerRef()?.focus();\n if (optionalMenubarContext.autoFocusMenu())\n open(true);\n } else\n close();\n });\n createEffect(() => {\n if (parentMenuContext !== void 0 || optionalMenubarContext === void 0)\n return;\n if (disclosureState.isOpen())\n optionalMenubarContext.setValue(rootContext.value());\n });\n onCleanup(() => {\n if (parentMenuContext !== void 0)\n return;\n optionalMenubarContext?.unregisterMenu(rootContext.value());\n });\n const dataset = createMemo(() => ({\n \"data-expanded\": disclosureState.isOpen() ? \"\" : void 0,\n \"data-closed\": !disclosureState.isOpen() ? \"\" : void 0\n }));\n const context = {\n dataset,\n isOpen: disclosureState.isOpen,\n contentPresent,\n nestedMenus,\n currentPlacement,\n pointerGraceTimeoutId: () => pointerGraceTimeoutId,\n autoFocus: focusStrategy,\n listState: () => listState,\n parentMenuContext: () => parentMenuContext,\n triggerRef,\n contentRef,\n triggerId,\n contentId,\n setTriggerRef,\n setContentRef,\n open,\n close,\n toggle,\n focusContent,\n onItemEnter,\n onItemLeave,\n onTriggerLeave,\n setPointerDir: (dir) => pointerDir = dir,\n setPointerGraceTimeoutId: (id) => pointerGraceTimeoutId = id,\n setPointerGraceIntent: (intent) => pointerGraceIntent = intent,\n registerNestedMenu,\n registerItemToParentDomCollection: parentDomCollectionContext?.registerItem,\n registerTriggerId: createRegisterId(setTriggerId),\n registerContentId: createRegisterId(setContentId)\n };\n return createComponent(DomCollectionProvider, {\n get children() {\n return createComponent(MenuContext.Provider, {\n value: context,\n get children() {\n return createComponent(Show, {\n when: optionalNavigationMenuContext === void 0,\n get fallback() {\n return others.children;\n },\n get children() {\n return createComponent(Popper, mergeProps({\n anchorRef: triggerRef,\n contentRef,\n onCurrentPlacementChange: setCurrentPlacement\n }, others));\n }\n });\n }\n });\n }\n });\n}\n\n// src/menu/menu-sub.tsx\nfunction MenuSub(props) {\n const {\n direction\n } = useLocale();\n return createComponent(Menu, mergeProps({\n get placement() {\n return direction() === \"rtl\" ? \"left-start\" : \"right-start\";\n },\n flip: true\n }, props));\n}\nvar SUB_CLOSE_KEYS = {\n close: (dir, orientation) => {\n if (dir === \"ltr\") {\n return [orientation === \"horizontal\" ? \"ArrowLeft\" : \"ArrowUp\"];\n }\n return [orientation === \"horizontal\" ? \"ArrowRight\" : \"ArrowDown\"];\n }\n};\nfunction MenuSubContent(props) {\n const context = useMenuContext();\n const rootContext = useMenuRootContext();\n const [local, others] = splitProps(props, [\"onFocusOutside\", \"onKeyDown\"]);\n const {\n direction\n } = useLocale();\n const onOpenAutoFocus = (e) => {\n e.preventDefault();\n };\n const onCloseAutoFocus = (e) => {\n e.preventDefault();\n };\n const onFocusOutside = (e) => {\n local.onFocusOutside?.(e);\n const target = e.target;\n if (!contains(context.triggerRef(), target)) {\n context.close();\n }\n };\n const onKeyDown = (e) => {\n callHandler(e, local.onKeyDown);\n const isKeyDownInside = contains(e.currentTarget, e.target);\n const isCloseKey = SUB_CLOSE_KEYS.close(direction(), rootContext.orientation()).includes(e.key);\n const isSubMenu = context.parentMenuContext() != null;\n if (isKeyDownInside && isCloseKey && isSubMenu) {\n context.close();\n focusWithoutScrolling(context.triggerRef());\n }\n };\n return createComponent(MenuContentBase, mergeProps({\n onOpenAutoFocus,\n onCloseAutoFocus,\n onFocusOutside,\n onKeyDown\n }, others));\n}\nvar SELECTION_KEYS = [\"Enter\", \" \"];\nvar SUB_OPEN_KEYS = {\n open: (dir, orientation) => {\n if (dir === \"ltr\") {\n return [...SELECTION_KEYS, orientation === \"horizontal\" ? \"ArrowRight\" : \"ArrowDown\"];\n }\n return [...SELECTION_KEYS, orientation === \"horizontal\" ? \"ArrowLeft\" : \"ArrowUp\"];\n }\n};\nfunction MenuSubTrigger(props) {\n let ref;\n const rootContext = useMenuRootContext();\n const context = useMenuContext();\n const mergedProps = mergeDefaultProps({\n id: rootContext.generateId(`sub-trigger-${createUniqueId()}`)\n }, props);\n const [local, others] = splitProps(mergedProps, [\"ref\", \"id\", \"textValue\", \"disabled\", \"onPointerMove\", \"onPointerLeave\", \"onPointerDown\", \"onPointerUp\", \"onClick\", \"onKeyDown\", \"onMouseDown\", \"onFocus\"]);\n let openTimeoutId = null;\n const clearOpenTimeout = () => {\n if (isServer) {\n return;\n }\n if (openTimeoutId) {\n window.clearTimeout(openTimeoutId);\n }\n openTimeoutId = null;\n };\n const {\n direction\n } = useLocale();\n const key = () => local.id;\n const parentSelectionManager = () => {\n const parentMenuContext = context.parentMenuContext();\n if (parentMenuContext == null) {\n throw new Error(\"[kobalte]: `Menu.SubTrigger` must be used within a `Menu.Sub` component\");\n }\n return parentMenuContext.listState().selectionManager();\n };\n const collection = () => context.listState().collection();\n const isHighlighted = () => parentSelectionManager().focusedKey() === key();\n const selectableItem = createSelectableItem({\n key,\n selectionManager: parentSelectionManager,\n shouldSelectOnPressUp: true,\n allowsDifferentPressOrigin: true,\n disabled: () => local.disabled\n }, () => ref);\n const onClick = (e) => {\n callHandler(e, local.onClick);\n if (!context.isOpen() && !local.disabled) {\n context.open(true);\n }\n };\n const onPointerMove = (e) => {\n callHandler(e, local.onPointerMove);\n if (e.pointerType !== \"mouse\") {\n return;\n }\n const parentMenuContext = context.parentMenuContext();\n parentMenuContext?.onItemEnter(e);\n if (e.defaultPrevented) {\n return;\n }\n if (local.disabled) {\n parentMenuContext?.onItemLeave(e);\n return;\n }\n if (!context.isOpen() && !openTimeoutId) {\n context.parentMenuContext()?.setPointerGraceIntent(null);\n openTimeoutId = window.setTimeout(() => {\n context.open(false);\n clearOpenTimeout();\n }, 100);\n }\n parentMenuContext?.onItemEnter(e);\n if (!e.defaultPrevented) {\n if (context.listState().selectionManager().isFocused()) {\n context.listState().selectionManager().setFocused(false);\n context.listState().selectionManager().setFocusedKey(void 0);\n }\n focusWithoutScrolling(e.currentTarget);\n parentMenuContext?.listState().selectionManager().setFocused(true);\n parentMenuContext?.listState().selectionManager().setFocusedKey(key());\n }\n };\n const onPointerLeave = (e) => {\n callHandler(e, local.onPointerLeave);\n if (e.pointerType !== \"mouse\") {\n return;\n }\n clearOpenTimeout();\n const parentMenuContext = context.parentMenuContext();\n const contentEl = context.contentRef();\n if (contentEl) {\n parentMenuContext?.setPointerGraceIntent({\n area: getPointerGraceArea(context.currentPlacement(), e, contentEl),\n // Safe because sub menu always open \"left\" or \"right\".\n side: context.currentPlacement().split(\"-\")[0]\n });\n window.clearTimeout(parentMenuContext?.pointerGraceTimeoutId());\n const pointerGraceTimeoutId = window.setTimeout(() => {\n parentMenuContext?.setPointerGraceIntent(null);\n }, 300);\n parentMenuContext?.setPointerGraceTimeoutId(pointerGraceTimeoutId);\n } else {\n parentMenuContext?.onTriggerLeave(e);\n if (e.defaultPrevented) {\n return;\n }\n parentMenuContext?.setPointerGraceIntent(null);\n }\n parentMenuContext?.onItemLeave(e);\n };\n const onKeyDown = (e) => {\n callHandler(e, local.onKeyDown);\n if (e.repeat) {\n return;\n }\n if (local.disabled) {\n return;\n }\n if (SUB_OPEN_KEYS.open(direction(), rootContext.orientation()).includes(e.key)) {\n e.stopPropagation();\n e.preventDefault();\n parentSelectionManager().setFocused(false);\n parentSelectionManager().setFocusedKey(void 0);\n if (!context.isOpen()) {\n context.open(\"first\");\n }\n context.focusContent();\n context.listState().selectionManager().setFocused(true);\n context.listState().selectionManager().setFocusedKey(collection().getFirstKey());\n }\n };\n createEffect(() => {\n if (context.registerItemToParentDomCollection == null) {\n throw new Error(\"[kobalte]: `Menu.SubTrigger` must be used within a `Menu.Sub` component\");\n }\n const unregister = context.registerItemToParentDomCollection({\n ref: () => ref,\n type: \"item\",\n key: key(),\n textValue: local.textValue ?? ref?.textContent ?? \"\",\n disabled: local.disabled ?? false\n });\n onCleanup(unregister);\n });\n createEffect(on(() => context.parentMenuContext()?.pointerGraceTimeoutId(), (pointerGraceTimer) => {\n onCleanup(() => {\n window.clearTimeout(pointerGraceTimer);\n context.parentMenuContext()?.setPointerGraceIntent(null);\n });\n }));\n createEffect(() => onCleanup(context.registerTriggerId(local.id)));\n onCleanup(() => {\n clearOpenTimeout();\n });\n return createComponent(Polymorphic, mergeProps({\n as: \"div\",\n ref(r$) {\n const _ref$ = mergeRefs((el) => {\n context.setTriggerRef(el);\n ref = el;\n }, local.ref);\n typeof _ref$ === \"function\" && _ref$(r$);\n },\n get id() {\n return local.id;\n },\n role: \"menuitem\",\n get tabIndex() {\n return selectableItem.tabIndex();\n },\n \"aria-haspopup\": \"true\",\n get [\"aria-expanded\"]() {\n return context.isOpen();\n },\n get [\"aria-controls\"]() {\n return memo(() => !!context.isOpen())() ? context.contentId() : void 0;\n },\n get [\"aria-disabled\"]() {\n return local.disabled;\n },\n get [\"data-key\"]() {\n return selectableItem.dataKey();\n },\n get [\"data-highlighted\"]() {\n return isHighlighted() ? \"\" : void 0;\n },\n get [\"data-disabled\"]() {\n return local.disabled ? \"\" : void 0;\n },\n get onPointerDown() {\n return composeEventHandlers([local.onPointerDown, selectableItem.onPointerDown]);\n },\n get onPointerUp() {\n return composeEventHandlers([local.onPointerUp, selectableItem.onPointerUp]);\n },\n get onClick() {\n return composeEventHandlers([onClick, selectableItem.onClick]);\n },\n get onKeyDown() {\n return composeEventHandlers([onKeyDown, selectableItem.onKeyDown]);\n },\n get onMouseDown() {\n return composeEventHandlers([local.onMouseDown, selectableItem.onMouseDown]);\n },\n get onFocus() {\n return composeEventHandlers([local.onFocus, selectableItem.onFocus]);\n },\n onPointerMove,\n onPointerLeave\n }, () => context.dataset(), others));\n}\nfunction MenuRoot(props) {\n const optionalMenubarContext = useOptionalMenubarContext();\n const defaultId = `menu-${createUniqueId()}`;\n const mergedProps = mergeDefaultProps({\n id: defaultId,\n modal: true\n }, props);\n const [local, others] = splitProps(mergedProps, [\"id\", \"modal\", \"preventScroll\", \"forceMount\", \"open\", \"defaultOpen\", \"onOpenChange\", \"value\", \"orientation\"]);\n const disclosureState = createDisclosureState({\n open: () => local.open,\n defaultOpen: () => local.defaultOpen,\n onOpenChange: (isOpen) => local.onOpenChange?.(isOpen)\n });\n const context = {\n isModal: () => local.modal ?? true,\n preventScroll: () => local.preventScroll ?? context.isModal(),\n forceMount: () => local.forceMount ?? false,\n generateId: createGenerateId(() => local.id),\n value: () => local.value,\n orientation: () => local.orientation ?? optionalMenubarContext?.orientation() ?? \"horizontal\"\n };\n return createComponent(MenuRootContext.Provider, {\n value: context,\n get children() {\n return createComponent(Menu, mergeProps({\n get open() {\n return disclosureState.isOpen();\n },\n get onOpenChange() {\n return disclosureState.setIsOpen;\n }\n }, others));\n }\n });\n}\n\nexport { MenuCheckboxItem, MenuContent, MenuGroup, MenuGroupLabel, MenuIcon, MenuItem, MenuItemDescription, MenuItemIndicator, MenuItemLabel, MenuPortal, MenuRadioGroup, MenuRadioItem, MenuRoot, MenuSub, MenuSubContent, MenuSubTrigger, MenuTrigger, MenubarContext, NavigationMenuContext, useMenuContext, useMenuRootContext, useMenubarContext, useNavigationMenuContext, useOptionalMenuContext };\n", "import { createTagName } from './ET5T45DO.js';\nimport { Polymorphic } from './6Y7B2NEO.js';\nimport { __export } from './5ZKAE4VZ.js';\nimport { createComponent, mergeProps } from 'solid-js/web';\nimport { mergeDefaultProps, mergeRefs } from '@kobalte/utils';\nimport { splitProps } from 'solid-js';\n\n// src/separator/index.tsx\nvar separator_exports = {};\n__export(separator_exports, {\n Root: () => SeparatorRoot,\n Separator: () => Separator\n});\nfunction SeparatorRoot(props) {\n let ref;\n const mergedProps = mergeDefaultProps({\n orientation: \"horizontal\"\n }, props);\n const [local, others] = splitProps(mergedProps, [\"ref\", \"orientation\"]);\n const tagName = createTagName(() => ref, () => \"hr\");\n return createComponent(Polymorphic, mergeProps({\n as: \"hr\",\n ref(r$) {\n const _ref$ = mergeRefs((el) => ref = el, local.ref);\n typeof _ref$ === \"function\" && _ref$(r$);\n },\n get role() {\n return tagName() !== \"hr\" ? \"separator\" : void 0;\n },\n get [\"aria-orientation\"]() {\n return local.orientation === \"vertical\" ? \"vertical\" : void 0;\n },\n get [\"data-orientation\"]() {\n return local.orientation;\n }\n }, others));\n}\n\n// src/separator/index.tsx\nvar Separator = SeparatorRoot;\n\nexport { Separator, SeparatorRoot, separator_exports };\n", "import { MenuCheckboxItem, MenuGroup, MenuGroupLabel, MenuIcon, MenuItem, MenuItemDescription, MenuItemIndicator, MenuItemLabel, MenuPortal, MenuRadioGroup, MenuRadioItem, MenuSub, MenuSubContent, MenuSubTrigger, MenuTrigger, useMenuRootContext, useMenuContext, MenuContent, MenuRoot } from './46NU5BYI.js';\nimport { SeparatorRoot } from './STGRFJHZ.js';\nimport { PopperArrow } from './LMWVDFW6.js';\nimport { __export } from './5ZKAE4VZ.js';\nimport { createComponent, mergeProps } from 'solid-js/web';\nimport { mergeDefaultProps, focusWithoutScrolling } from '@kobalte/utils';\nimport { splitProps, createUniqueId } from 'solid-js';\n\n// src/dropdown-menu/index.tsx\nvar dropdown_menu_exports = {};\n__export(dropdown_menu_exports, {\n Arrow: () => PopperArrow,\n CheckboxItem: () => MenuCheckboxItem,\n Content: () => DropdownMenuContent,\n DropdownMenu: () => DropdownMenu,\n Group: () => MenuGroup,\n GroupLabel: () => MenuGroupLabel,\n Icon: () => MenuIcon,\n Item: () => MenuItem,\n ItemDescription: () => MenuItemDescription,\n ItemIndicator: () => MenuItemIndicator,\n ItemLabel: () => MenuItemLabel,\n Portal: () => MenuPortal,\n RadioGroup: () => MenuRadioGroup,\n RadioItem: () => MenuRadioItem,\n Root: () => DropdownMenuRoot,\n Separator: () => SeparatorRoot,\n Sub: () => MenuSub,\n SubContent: () => MenuSubContent,\n SubTrigger: () => MenuSubTrigger,\n Trigger: () => MenuTrigger\n});\nfunction DropdownMenuContent(props) {\n const rootContext = useMenuRootContext();\n const context = useMenuContext();\n const [local, others] = splitProps(props, [\"onCloseAutoFocus\", \"onInteractOutside\"]);\n let hasInteractedOutside = false;\n const onCloseAutoFocus = (e) => {\n local.onCloseAutoFocus?.(e);\n if (!hasInteractedOutside) {\n focusWithoutScrolling(context.triggerRef());\n }\n hasInteractedOutside = false;\n e.preventDefault();\n };\n const onInteractOutside = (e) => {\n local.onInteractOutside?.(e);\n if (!rootContext.isModal() || e.detail.isContextMenu) {\n hasInteractedOutside = true;\n }\n };\n return createComponent(MenuContent, mergeProps({\n onCloseAutoFocus,\n onInteractOutside\n }, others));\n}\nfunction DropdownMenuRoot(props) {\n const defaultId = `dropdownmenu-${createUniqueId()}`;\n const mergedProps = mergeDefaultProps({\n id: defaultId\n }, props);\n return createComponent(MenuRoot, mergedProps);\n}\n\n// src/dropdown-menu/index.tsx\nvar DropdownMenu = Object.assign(DropdownMenuRoot, {\n Arrow: PopperArrow,\n CheckboxItem: MenuCheckboxItem,\n Content: DropdownMenuContent,\n Group: MenuGroup,\n GroupLabel: MenuGroupLabel,\n Icon: MenuIcon,\n Item: MenuItem,\n ItemDescription: MenuItemDescription,\n ItemIndicator: MenuItemIndicator,\n ItemLabel: MenuItemLabel,\n Portal: MenuPortal,\n RadioGroup: MenuRadioGroup,\n RadioItem: MenuRadioItem,\n Separator: SeparatorRoot,\n Sub: MenuSub,\n SubContent: MenuSubContent,\n SubTrigger: MenuSubTrigger,\n Trigger: MenuTrigger\n});\n\nexport { DropdownMenu, DropdownMenuContent, DropdownMenuRoot, dropdown_menu_exports };\n", "import { createSignal } from \"solid-js\";\nimport type { AutomergeUrl } from \"@automerge/automerge-repo/slim\";\n\nexport const [dragging, setDragging] = createSignal(false);\nexport const [copyMode, setCopyMode] = createSignal(false);\n\n// Dragging the \"new document\" button. Carries no document \u2014 on drop it asks the\n// list to open a pending-doc placeholder at the drop location instead of moving\n// anything.\nexport const NEW_DOC_DND_TYPE = \"application/x-patchwork-new-doc\";\nexport const [newDocDragging, setNewDocDragging] = createSignal(false);\n\nexport function isNewDocDrag(event: DragEvent) {\n return event.dataTransfer?.types.includes(NEW_DOC_DND_TYPE) ?? false;\n}\n\nexport type DropPosition = \"above\" | \"below\" | \"inside\" | null;\n\n// Drop target is a plain variable \u2014 not a SolidJS signal.\n// Visual state is updated via direct DOM manipulation to avoid\n// O(n) reactive updates across all items on every dragover.\nlet currentDropTarget: { id: string; position: DropPosition } | null = null;\n\nexport function getDropTarget() {\n return currentDropTarget;\n}\n\nfunction updateDropTargetDOM(\n oldTarget: { id: string; position: DropPosition } | null,\n newTarget: { id: string; position: DropPosition } | null\n) {\n if (oldTarget) {\n const item = document.querySelector(\n `[data-dnd-item=\"${CSS.escape(oldTarget.id)}\"]`\n );\n if (item) item.removeAttribute(\"data-dnd-droplist-state\");\n const container = document.querySelector(\n `[data-dnd-container=\"${CSS.escape(oldTarget.id)}\"]`\n );\n if (container) container.removeAttribute(\"data-drop-state\");\n }\n if (newTarget) {\n const item = document.querySelector(\n `[data-dnd-item=\"${CSS.escape(newTarget.id)}\"]`\n );\n if (item)\n item.setAttribute(\"data-dnd-droplist-state\", newTarget.position ?? \"\");\n if (newTarget.position === \"inside\") {\n const container = document.querySelector(\n `[data-dnd-container=\"${CSS.escape(newTarget.id)}\"]`\n );\n if (container) container.setAttribute(\"data-drop-state\", \"inside\");\n }\n }\n}\n\n// Identity for the \"did this drag start and end in the same view?\" question.\n// The answer decides move (\u2192 in-view) vs add-link (\u2192 cross-view or external).\n//\n// The tool id can't answer it: the sideboard is shown through patchwork-view's\n// *fallback* path, which never sets the `tool-id` attribute, so element.toolId\n// is null \u2014 and even when set it names the tool *type*, not the instance, so\n// two side-by-side views would collide. The <patchwork-view> element itself is\n// the instance identity. We're single-context on the web (dragstart and drop\n// run in the same window), so plain reference equality is all we need: remember\n// the origin element on dragstart, compare it on drop, clear it on dragend.\nlet dragOriginView: object | null = null;\nexport function setDragOriginView(element: object | null) {\n dragOriginView = element;\n}\nexport function isSameDragOriginView(element: object): boolean {\n return dragOriginView != null && dragOriginView === element;\n}\n\nexport type SideboardDragAndDropItem = {\n id: string;\n url: AutomergeUrl;\n type: string;\n name: string;\n source: string;\n};\n\n// Plain Map \u2014 not reactive. aria-checked is updated via DOM manipulation\n// to avoid O(n) reactive updates when selection changes.\nexport const dragstack = new Map<string, SideboardDragAndDropItem>();\n\nfunction setDragChecked(id: string, checked: boolean) {\n const el = document.querySelector(`[data-dnd-item=\"${CSS.escape(id)}\"]`);\n if (el) {\n if (checked) {\n el.setAttribute(\"aria-checked\", \"true\");\n } else {\n el.removeAttribute(\"aria-checked\");\n }\n }\n}\n\nexport function addToDragstack(id: string, item: SideboardDragAndDropItem) {\n dragstack.set(id, item);\n setDragChecked(id, true);\n}\n\nexport function removeFromDragstack(id: string) {\n dragstack.delete(id);\n setDragChecked(id, false);\n}\n\nexport function clearDragstack() {\n for (const id of dragstack.keys()) {\n setDragChecked(id, false);\n }\n dragstack.clear();\n}\n\nexport function setDragSourceItems(ids: string[]) {\n for (const id of ids) {\n const el = document.querySelector(`[data-dnd-item=\"${CSS.escape(id)}\"]`);\n if (el) el.setAttribute(\"data-dnd-dragging\", \"\");\n }\n}\n\nexport function clearDragSourceItems() {\n for (const el of document.querySelectorAll(\"[data-dnd-dragging]\")) {\n el.removeAttribute(\"data-dnd-dragging\");\n }\n}\n\nexport function isAbove(clientY: number, element: Element) {\n const rect = element.getBoundingClientRect();\n const offset = clientY - rect.top;\n return offset < rect.height / 2;\n}\n\nexport function clearDropTarget() {\n updateDropTargetDOM(currentDropTarget, null);\n currentDropTarget = null;\n}\n\nexport function setDropTarget(\n target: { id: string; position: DropPosition } | null\n) {\n // Only update if actually changed\n const current = currentDropTarget;\n if (!current && !target) return;\n if (\n current &&\n target &&\n current.id === target.id &&\n current.position === target.position\n ) {\n return;\n }\n\n updateDropTargetDOM(current, target);\n currentDropTarget = target;\n}\n", "import { template as _$template } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { memo as _$memo } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<div class=\"document-list__item document-list__item--visible\">`),\n _tmpl$2 = /*#__PURE__*/_$template(`<span class=document-list-item__unprotected>[insecure]`),\n _tmpl$3 = /*#__PURE__*/_$template(`<div class=document-list__item>`),\n _tmpl$4 = /*#__PURE__*/_$template(`<div class=document-list-folder__circular-ref style=\"padding-left:calc(var(--depth) * 1rem)\"><span> (i contain myself eventually)`);\nimport { deleteAt, updateText } from \"@automerge/automerge-repo/slim\";\nimport { docIdFromAutomergeUrl, Access, ContactCard } from \"@automerge/automerge-repo-keyhive\";\nimport { getRegistry, isLoadedPlugin } from \"@inkandswitch/patchwork-plugins\";\nimport { createEffect, createSignal, For, Match, onCleanup, Show, Suspense, Switch } from \"solid-js\";\nimport { filterMatches, setRenaming, pendingNewDoc, setPendingNewDoc } from \"../state.ts\";\nimport Folder from \"./folder.tsx\";\nimport Item from \"./item.tsx\";\nimport { ItemName } from \"./name.tsx\";\nimport { LoadingRow } from \"./loading-row.tsx\";\nimport { NewDocPlaceholder } from \"../create-new.tsx\";\nimport { ShareModal } from \"../share-modal.tsx\";\nconst MAKE_SECURE_COPY_ENABLED = false;\nfunction isKeyhiveProtected(url) {\n try {\n docIdFromAutomergeUrl(url);\n return true;\n } catch {\n return false;\n }\n}\nexport function DocumentList(props) {\n const [shareModalUrl, setShareModalUrl] = createSignal(null);\n const visitedFolders = props.visitedFolders ?? /* @__PURE__ */new Set();\n function removeItem(index) {\n props.handle.change(folder => deleteAt(folder.docs, index));\n }\n const pendingHere = () => !!props.handle && pendingNewDoc()?.containerUrl === props.handle.url;\n const commitPending = docLink => {\n const target = pendingNewDoc();\n if (!target) return;\n const index = target.index;\n setPendingNewDoc(null);\n props.handle.change(folder => folder.docs.splice(index, 0, docLink));\n props.open(docLink);\n setRenaming(props.handle.url + \"/\" + index);\n };\n const placeholder = () => (() => {\n var _el$ = _tmpl$();\n _$insert(_el$, _$createComponent(NewDocPlaceholder, {\n get repo() {\n return props.repo;\n },\n get hive() {\n return props.hive;\n },\n onCreate: commitPending,\n onDismiss: () => setPendingNewDoc(null),\n get clearFilter() {\n return props.clearFilter;\n }\n }));\n return _el$;\n })();\n async function makeSecureCopy(docLink) {\n if (!props.hive) return;\n const oldHandle = await props.repo.find(docLink.url);\n const oldDoc = oldHandle.doc();\n const newHandle = await props.repo.create2(structuredClone(oldDoc));\n if (props.hive.syncServer) {\n try {\n const serverContactCard = ContactCard.fromJson(props.hive.syncServer.contactCard.toJson());\n if (serverContactCard) {\n const relayAccess = Access.tryFromString(\"relay\");\n if (relayAccess) {\n await props.hive.addMemberToDoc(newHandle.url, serverContactCard, relayAccess);\n }\n }\n } catch (err) {\n console.error(\"[DocumentList] Failed to add sync server to secure copy:\", err);\n }\n }\n props.handle.change(folder => {\n folder.docs.unshift({\n name: docLink.name + \" (secure)\",\n type: docLink.type,\n url: newHandle.url\n });\n });\n props.open({\n url: newHandle.url,\n title: docLink.name + \" (secure)\",\n type: docLink.type\n });\n }\n return [_$createComponent(For, {\n get each() {\n return props.docs;\n },\n children: (doc, index) => {\n const visible = () => !props.filter.length || filterMatches(props.filter, doc.name);\n const remove = () => removeItem(index());\n const relid = () => props.handle.url + \"/\" + index();\n const rename = name => {\n props.handle.change(doc2 => {\n updateText(doc2, [\"docs\", index(), \"name\"], name);\n });\n const datatypes = getRegistry(\"patchwork:datatype\");\n props.repo.find(doc.url).then(async handle => {\n const {\n \"@patchwork\": metadata\n } = handle.doc();\n if (metadata) {\n const datatype = datatypes.get(metadata.type);\n if (datatype) {\n await datatypes.load(datatype.id);\n handle.change(doc2 => datatype.module.setTitle?.(doc2, name));\n }\n }\n });\n };\n createEffect(() => {\n if (!props.selectedDocUrls.includes(doc.url)) return;\n let cancelled = false;\n let removeListener;\n props.repo.find(doc.url).then(async docHandle => {\n if (cancelled) return;\n const datatypes = getRegistry(\"patchwork:datatype\");\n async function syncTitle() {\n const docData = docHandle.doc();\n if (!docData) return;\n const metadata = docData[\"@patchwork\"];\n if (!metadata?.type) return;\n const datatype = datatypes.get(metadata.type);\n if (!datatype) return;\n await datatypes.load(datatype.id);\n if (cancelled) return;\n if (!isLoadedPlugin(datatype)) return;\n const title = datatype.module.getTitle(docData);\n if (!title) return;\n const currentFolder = props.handle.doc();\n const currentName = currentFolder?.docs?.[index()]?.name;\n if (currentName !== title) {\n props.handle.change(folder => {\n updateText(folder, [\"docs\", index(), \"name\"], title);\n });\n }\n if (metadata.title !== title) {\n docHandle.change(d => {\n if (d[\"@patchwork\"]) {\n d[\"@patchwork\"].title = title;\n }\n });\n }\n }\n await syncTitle();\n if (cancelled) return;\n const onChange = () => syncTitle();\n docHandle.on(\"change\", onChange);\n removeListener = () => docHandle.off(\"change\", onChange);\n });\n onCleanup(() => {\n cancelled = true;\n removeListener?.();\n });\n });\n return [_$createComponent(Show, {\n get when() {\n return _$memo(() => !!pendingHere())() && pendingNewDoc().index === index();\n },\n get children() {\n return placeholder();\n }\n }), (() => {\n var _el$2 = _tmpl$3();\n _$insert(_el$2, _$createComponent(Suspense, {\n get fallback() {\n return _$createComponent(LoadingRow, {\n get depth() {\n return props.depth;\n }\n });\n },\n get children() {\n return _$createComponent(Switch, {\n get children() {\n return [_$createComponent(Match, {\n get when() {\n return doc.type == \"folder\";\n },\n get children() {\n return _$createComponent(Show, {\n get when() {\n return !visitedFolders.has(doc.url);\n },\n get fallback() {\n return (() => {\n var _el$4 = _tmpl$4(),\n _el$5 = _el$4.firstChild,\n _el$6 = _el$5.firstChild;\n _$insert(_el$5, () => doc.name, _el$6);\n return _el$4;\n })();\n },\n get children() {\n return _$createComponent(Folder, {\n get url() {\n return doc.url;\n },\n get depth() {\n return props.depth;\n },\n get repo() {\n return props.repo;\n },\n removeFromParent: remove,\n get parentFolderHandle() {\n return props.handle;\n },\n get itemIndex() {\n return index();\n },\n get open() {\n return props.open;\n },\n get name() {\n return doc.name;\n },\n get hive() {\n return props.hive;\n },\n get selectedDocUrls() {\n return props.selectedDocUrls;\n },\n visitedFolders: visitedFolders,\n get element() {\n return props.element;\n },\n get rootFolderHandle() {\n return props.rootFolderHandle;\n },\n get filter() {\n return props.filter;\n },\n get clearFilter() {\n return props.clearFilter;\n }\n });\n }\n });\n }\n }), _$createComponent(Match, {\n get when() {\n return doc.type != \"folder\";\n },\n get children() {\n return _$createComponent(Item, {\n get [\"aria-label\"]() {\n return doc.name;\n },\n get url() {\n return doc.url;\n },\n get name() {\n return doc.name;\n },\n get id() {\n return relid();\n },\n startRenaming: () => setRenaming(relid()),\n remove: remove,\n get pressed() {\n return props.selectedDocUrls.includes(doc.url);\n },\n get type() {\n return doc.type;\n },\n get element() {\n return props.element;\n },\n get repo() {\n return props.repo;\n },\n get rootFolderHandle() {\n return props.rootFolderHandle;\n },\n get parentFolderHandle() {\n return props.handle;\n },\n get itemIndex() {\n return index();\n },\n openWith: toolId => props.open({\n url: doc.url,\n toolId,\n title: doc.name,\n type: doc.type\n }),\n get share() {\n return props.hive ? () => setShareModalUrl(doc.url) : void 0;\n },\n get shareDisabled() {\n return _$memo(() => !!props.hive)() ? !isKeyhiveProtected(doc.url) : false;\n },\n get makeSecureCopy() {\n return MAKE_SECURE_COPY_ENABLED && props.hive && !isKeyhiveProtected(doc.url) ? () => makeSecureCopy(doc) : void 0;\n },\n get children() {\n return [_$createComponent(ItemName, {\n get name() {\n return doc.name;\n },\n get id() {\n return relid();\n },\n rename: rename\n }), _$createComponent(Show, {\n get when() {\n return _$memo(() => !!props.hive)() && !isKeyhiveProtected(doc.url);\n },\n get children() {\n return _tmpl$2();\n }\n })];\n }\n });\n }\n })];\n }\n });\n }\n }));\n _$effect(_p$ => {\n var _v$ = !!visible(),\n _v$2 = !visible();\n _v$ !== _p$.e && _el$2.classList.toggle(\"document-list__item--visible\", _p$.e = _v$);\n _v$2 !== _p$.t && _el$2.classList.toggle(\"document-list__item--invisible\", _p$.t = _v$2);\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$2;\n })()];\n }\n }), _$createComponent(Show, {\n get when() {\n return _$memo(() => !!pendingHere())() && pendingNewDoc().index >= (props.docs?.length ?? 0);\n },\n get children() {\n return placeholder();\n }\n }), _$createComponent(Show, {\n get when() {\n return _$memo(() => !!shareModalUrl())() && props.hive;\n },\n get children() {\n return _$createComponent(ShareModal, {\n get isOpen() {\n return !!shareModalUrl();\n },\n get docUrl() {\n return shareModalUrl();\n },\n get hive() {\n return props.hive;\n },\n onClose: () => setShareModalUrl(null)\n });\n }\n })];\n}", "import { template as _$template } from \"solid-js/web\";\nimport { style as _$style } from \"solid-js/web\";\nimport { setAttribute as _$setAttribute } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nimport { addEventListener as _$addEventListener } from \"solid-js/web\";\nimport { memo as _$memo } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<button class=document-list-folder__toggle>`),\n _tmpl$2 = /*#__PURE__*/_$template(`<div class=document-list-folder role=group><div class=document-list-folder__contents>`);\nimport { updateText } from \"@automerge/automerge-repo/slim\";\nimport { useDocument } from \"solid-automerge\";\nimport { handleFilesDrop } from \"./file-drop.ts\";\nimport { createEffect, createSignal, onCleanup, Show, Suspense } from \"solid-js\";\nimport { filterMatches, setRenaming, setPendingNewDoc, autoExpandedFolders } from \"../state.ts\";\nimport { DocumentList } from \"./document-list.tsx\";\nimport Item from \"./item.tsx\";\nimport { ItemName } from \"./name.tsx\";\nimport { LoadingRow } from \"./loading-row.tsx\";\nimport { createNew } from \"../create-new.tsx\";\nimport { Chevron } from \"../icons.tsx\";\nimport { getDropTarget, setDropTarget, clearDropTarget, copyMode, isNewDocDrag, isSameDragOriginView } from \"../dnd/dnd.ts\";\nimport { executeDrop } from \"../dnd/operations.ts\";\nimport { getDndPayload } from \"../dnd/payload.ts\";\nimport { log } from \"../dnd/debug.ts\";\nexport default function Folder(props) {\n const [expanded, setExpanded] = createSignal(false);\n const [folder, handle] = useDocument(() => props.url, props);\n const nextVisitedFolders = new Set(props.visitedFolders ?? []);\n nextVisitedFolders.add(props.url);\n const depth = () => props.depth ?? 1;\n const depthStyle = () => ({\n \"--depth\": depth() + 1\n });\n const folderDepthStyle = () => ({\n \"--depth\": depth()\n });\n createEffect(last => {\n if (!last && props.filter && filterMatches(props.filter, folder()?.title ?? props.name)) {\n setExpanded(true);\n }\n return props.filter;\n });\n createEffect(() => {\n if (autoExpandedFolders().has(props.url)) setExpanded(true);\n });\n let dragToggleTimer = null;\n let dragAutoCommitted = false;\n function startDragAutoToggle() {\n if (dragToggleTimer || dragAutoCommitted) return;\n dragToggleTimer = setTimeout(() => {\n setExpanded(v => !v);\n dragAutoCommitted = true;\n dragToggleTimer = null;\n }, 1e3);\n }\n function stopDragAutoToggle() {\n if (dragToggleTimer) {\n clearTimeout(dragToggleTimer);\n dragToggleTimer = null;\n }\n dragAutoCommitted = false;\n }\n onCleanup(stopDragAutoToggle);\n function rename(name) {\n handle()?.change(doc => updateText(doc, [\"title\"], name));\n }\n async function createInside(datatype) {\n const h = handle();\n if (!h) return;\n const freshy = await createNew(props.repo, datatype, props.hive);\n let newIndex = 0;\n h.change(folder2 => {\n folder2.docs.push(freshy);\n newIndex = folder2.docs.length - 1;\n });\n props.clearFilter();\n setExpanded(true);\n props.open(freshy);\n setRenaming(h.url + \"/\" + newIndex);\n }\n async function handleDropIntoFolder(event) {\n log(\"Folder drop handler called for:\", props.url);\n if (event.dataTransfer?.files && event.dataTransfer.files.length > 0) {\n await handleFilesDrop(event.dataTransfer.files, handle(), props.repo, \"inside\", 0);\n return;\n }\n const payload = getDndPayload(event);\n if (!payload) {\n log(\"No dnd data in drop event. types:\", event.dataTransfer?.types);\n return;\n }\n const {\n source,\n items\n } = payload;\n log(\"Drop data:\", {\n source,\n items,\n folderUrl: props.url\n });\n executeDrop({\n draggedIds: items.map(i => i.id),\n draggedUrls: items.map(i => i.url),\n draggedItems: items,\n targetId: props.url,\n position: \"inside\",\n sourceToolId: source,\n copyMode: copyMode()\n }, props.repo, props.rootFolderHandle, isSameDragOriginView(props.element));\n }\n return (() => {\n var _el$ = _tmpl$2(),\n _el$3 = _el$.firstChild;\n _el$.addEventListener(\"drop\", event => {\n stopDragAutoToggle();\n log(\"Folder ondrop event fired\", props.url);\n event.preventDefault();\n event.stopPropagation();\n const target = getDropTarget();\n if (target?.position === \"inside\") {\n if (isNewDocDrag(event)) {\n const h = handle();\n if (h) {\n setExpanded(true);\n setPendingNewDoc({\n containerUrl: h.url,\n index: 0\n });\n }\n } else {\n handleDropIntoFolder(event);\n }\n }\n clearDropTarget();\n });\n _el$.addEventListener(\"dragleave\", event => {\n const related = event.relatedTarget;\n if (!related || !event.currentTarget.contains(related)) {\n stopDragAutoToggle();\n clearDropTarget();\n }\n });\n _el$.addEventListener(\"dragover\", event => {\n event.preventDefault();\n event.stopPropagation();\n const effect = copyMode() ? \"copy\" : \"move\";\n event.dataTransfer.dropEffect = effect;\n const target = event.target;\n const isOverItem = target.closest(\".document-list-item\");\n if (!isOverItem) {\n setDropTarget({\n id: props.url,\n position: \"inside\"\n });\n }\n const overItem = event.target.closest(\".document-list-item\");\n if (overItem?.getAttribute(\"data-dnd-item\") === props.url) {\n startDragAutoToggle();\n }\n });\n _$insert(_el$, _$createComponent(Item, {\n get [\"aria-label\"]() {\n return folder()?.title ?? props.name ?? \"\";\n },\n startRenaming: () => {\n setRenaming(props.url);\n },\n get remove() {\n return props.removeFromParent;\n },\n get id() {\n return props.url;\n },\n get url() {\n return props.url;\n },\n get name() {\n return folder()?.title ?? props.name ?? \"\";\n },\n get pressed() {\n return props.selectedDocUrls.includes(props.url);\n },\n type: \"folder\",\n get element() {\n return props.element;\n },\n get repo() {\n return props.repo;\n },\n get rootFolderHandle() {\n return props.rootFolderHandle;\n },\n get parentFolderHandle() {\n return props.parentFolderHandle;\n },\n get itemIndex() {\n return props.itemIndex;\n },\n get isExpanded() {\n return expanded();\n },\n onToggleExpand: () => setExpanded(yn => !yn),\n createInside: createInside,\n openWith: toolId => {\n props.open({\n url: props.url,\n toolId,\n title: folder()?.title ?? props.name,\n type: \"folder\"\n });\n },\n get children() {\n return [(() => {\n var _el$2 = _tmpl$();\n _$addEventListener(_el$2, \"click\", event => {\n event.stopImmediatePropagation();\n setExpanded(yn => !yn);\n });\n _$insert(_el$2, _$createComponent(Show, {\n get when() {\n return expanded();\n },\n get fallback() {\n return _$createComponent(Chevron, {});\n },\n get children() {\n return _$createComponent(Chevron, {\n style: {\n rotate: \"90deg\"\n }\n });\n }\n }));\n _$effect(() => _$setAttribute(_el$2, \"aria-label\", (expanded() ? \"collapse\" : \"expand\") + \" \" + (folder()?.title ?? props.name)));\n return _el$2;\n })(), _$createComponent(ItemName, {\n get name() {\n return folder()?.title ?? props.name;\n },\n get id() {\n return props.url;\n },\n rename: rename\n })];\n }\n }), _el$3);\n _$insert(_el$3, _$createComponent(Show, {\n get when() {\n return expanded() || !!props.filter;\n },\n get children() {\n return _$createComponent(Suspense, {\n get fallback() {\n return _$createComponent(LoadingRow, {\n get depth() {\n return depth() + 1;\n }\n });\n },\n get children() {\n return _$createComponent(DocumentList, {\n get docs() {\n return folder()?.docs;\n },\n get repo() {\n return props.repo;\n },\n get depth() {\n return depth() + 1;\n },\n get handle() {\n return handle.latest;\n },\n get open() {\n return props.open;\n },\n get hive() {\n return props.hive;\n },\n get selectedDocUrls() {\n return props.selectedDocUrls;\n },\n visitedFolders: nextVisitedFolders,\n get element() {\n return props.element;\n },\n get rootFolderHandle() {\n return props.rootFolderHandle;\n },\n get filter() {\n return props.filter;\n },\n get clearFilter() {\n return props.clearFilter;\n }\n });\n }\n });\n }\n }));\n _$effect(_p$ => {\n var _v$ = depth(),\n _v$2 = folderDepthStyle(),\n _v$3 = expanded(),\n _v$4 = props.url,\n _v$5 = !!(!expanded() && !props.filter),\n _v$6 = depth(),\n _v$7 = depthStyle();\n _v$ !== _p$.e && _$setAttribute(_el$, \"data-depth\", _p$.e = _v$);\n _p$.t = _$style(_el$, _v$2, _p$.t);\n _v$3 !== _p$.a && _$setAttribute(_el$, \"aria-expanded\", _p$.a = _v$3);\n _v$4 !== _p$.o && _$setAttribute(_el$, \"data-dnd-container\", _p$.o = _v$4);\n _v$5 !== _p$.i && _el$3.classList.toggle(\"document-list-folder__contents--hidden\", _p$.i = _v$5);\n _v$6 !== _p$.n && _$setAttribute(_el$3, \"data-depth\", _p$.n = _v$6);\n _p$.s = _$style(_el$3, _v$7, _p$.s);\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined,\n i: undefined,\n n: undefined,\n s: undefined\n });\n return _el$;\n })();\n}", "import debug from \"debug\";\n\nexport const log = debug(\"patchwork:sideboard:dnd\");\n", "import type { Repo, DocHandle } from \"@automerge/automerge-repo/slim\";\nimport type {\n FolderDoc,\n HasPatchworkMetadata,\n UnixFileEntry,\n} from \"@inkandswitch/patchwork-filesystem\";\nimport { log } from \"../dnd/debug.ts\";\n\n/**\n * Handles file drops from the operating system by creating UnixFileEntry documents\n * and adding them to the specified folder.\n */\nexport async function handleFilesDrop(\n files: FileList,\n folderHandle: DocHandle<FolderDoc>,\n repo: Repo,\n position: \"above\" | \"below\" | \"inside\",\n targetIndex: number\n): Promise<void> {\n for (const file of Array.from(files)) {\n try {\n // Read file content\n const arrayBuffer = await file.arrayBuffer();\n const content = new Uint8Array(arrayBuffer);\n\n // Extract extension from filename\n const nameParts = file.name.split(\".\");\n const extension = nameParts.length > 1 ? nameParts.pop()! : \"\";\n const nameWithoutExt = nameParts.join(\".\");\n\n // Create UnixFileEntry document\n const handle = await repo.create2<UnixFileEntry & HasPatchworkMetadata>({\n \"@patchwork\": {\n type: \"file\",\n },\n content,\n extension,\n mimeType: file.type || \"application/octet-stream\",\n name: nameWithoutExt,\n });\n\n // Calculate insertion index based on position\n const insertIndex =\n position === \"above\"\n ? targetIndex\n : position === \"below\"\n ? targetIndex + 1\n : 0; // \"inside\" means at the beginning of the folder\n\n // Add to folder at the correct position\n folderHandle.change((folder) => {\n folder.docs.splice(insertIndex, 0, {\n url: handle.url,\n name: file.name,\n type: \"file\",\n });\n });\n\n log(\"FileDrop: Created file document:\", file.name, handle.url);\n } catch (error) {\n log(\"FileDrop: Failed to create file document:\", error);\n }\n }\n}\n", "import { MenuCheckboxItem, MenuGroup, MenuGroupLabel, MenuIcon, MenuItem, MenuItemDescription, MenuItemIndicator, MenuItemLabel, MenuPortal, MenuRadioGroup, MenuRadioItem, MenuSub, MenuSubContent, MenuSubTrigger, useMenuRootContext, MenuContent, MenuRoot, useMenuContext } from './46NU5BYI.js';\nimport { SeparatorRoot } from './STGRFJHZ.js';\nimport { PopperArrow } from './LMWVDFW6.js';\nimport { useLocale } from './XHJPQEZP.js';\nimport { createDisclosureState } from './7LCANGHD.js';\nimport { Polymorphic } from './6Y7B2NEO.js';\nimport { __export } from './5ZKAE4VZ.js';\nimport { createComponent, mergeProps, isServer } from 'solid-js/web';\nimport { splitProps, createContext, createUniqueId, createSignal, onCleanup, useContext } from 'solid-js';\nimport { mergeDefaultProps, mergeRefs, callHandler } from '@kobalte/utils';\nimport { combineStyle } from '@solid-primitives/props';\n\n// src/context-menu/index.tsx\nvar context_menu_exports = {};\n__export(context_menu_exports, {\n Arrow: () => PopperArrow,\n CheckboxItem: () => MenuCheckboxItem,\n Content: () => ContextMenuContent,\n ContextMenu: () => ContextMenu,\n Group: () => MenuGroup,\n GroupLabel: () => MenuGroupLabel,\n Icon: () => MenuIcon,\n Item: () => MenuItem,\n ItemDescription: () => MenuItemDescription,\n ItemIndicator: () => MenuItemIndicator,\n ItemLabel: () => MenuItemLabel,\n Portal: () => MenuPortal,\n RadioGroup: () => MenuRadioGroup,\n RadioItem: () => MenuRadioItem,\n Root: () => ContextMenuRoot,\n Separator: () => SeparatorRoot,\n Sub: () => MenuSub,\n SubContent: () => MenuSubContent,\n SubTrigger: () => MenuSubTrigger,\n Trigger: () => ContextMenuTrigger,\n useContextMenuContext: () => useContextMenuContext\n});\nfunction ContextMenuContent(props) {\n const rootContext = useMenuRootContext();\n const [local, others] = splitProps(props, [\"onCloseAutoFocus\", \"onInteractOutside\"]);\n let hasInteractedOutside = false;\n const onCloseAutoFocus = (e) => {\n local.onCloseAutoFocus?.(e);\n if (!e.defaultPrevented && hasInteractedOutside) {\n e.preventDefault();\n }\n hasInteractedOutside = false;\n };\n const onInteractOutside = (e) => {\n local.onInteractOutside?.(e);\n if (!e.defaultPrevented && !rootContext.isModal()) {\n hasInteractedOutside = true;\n }\n };\n return createComponent(MenuContent, mergeProps({\n onCloseAutoFocus,\n onInteractOutside\n }, others));\n}\nvar ContextMenuContext = createContext();\nfunction useOptionalContextMenuContext() {\n return useContext(ContextMenuContext);\n}\nfunction useContextMenuContext() {\n const context = useOptionalContextMenuContext();\n if (context === void 0) {\n throw new Error(\"[kobalte]: `useContextMenuContext` must be used within a `ContextMenu` component\");\n }\n return context;\n}\n\n// src/context-menu/context-menu-root.tsx\nfunction ContextMenuRoot(props) {\n const defaultId = `contextmenu-${createUniqueId()}`;\n const {\n direction\n } = useLocale();\n const mergedProps = mergeDefaultProps({\n id: defaultId,\n placement: direction() === \"rtl\" ? \"left-start\" : \"right-start\",\n gutter: 2,\n shift: 2\n }, props);\n const [local, others] = splitProps(mergedProps, [\"onOpenChange\"]);\n const [anchorRect, setAnchorRect] = createSignal({\n x: 0,\n y: 0\n });\n const disclosureState = createDisclosureState({\n defaultOpen: false,\n onOpenChange: (isOpen) => local.onOpenChange?.(isOpen)\n });\n const context = {\n setAnchorRect\n };\n return createComponent(ContextMenuContext.Provider, {\n value: context,\n get children() {\n return createComponent(MenuRoot, mergeProps({\n get open() {\n return disclosureState.isOpen();\n },\n get onOpenChange() {\n return disclosureState.setIsOpen;\n },\n getAnchorRect: anchorRect\n }, others));\n }\n });\n}\nfunction ContextMenuTrigger(props) {\n const rootContext = useMenuRootContext();\n const menuContext = useMenuContext();\n const context = useContextMenuContext();\n const mergedProps = mergeDefaultProps({\n id: rootContext.generateId(\"trigger\")\n }, props);\n const [local, others] = splitProps(mergedProps, [\"ref\", \"style\", \"disabled\", \"onContextMenu\", \"onPointerDown\", \"onPointerMove\", \"onPointerCancel\", \"onPointerUp\"]);\n let longPressTimoutId = 0;\n const clearLongPressTimeout = () => {\n if (isServer) {\n return;\n }\n window.clearTimeout(longPressTimoutId);\n };\n onCleanup(() => {\n clearLongPressTimeout();\n });\n const onContextMenu = (e) => {\n if (local.disabled) {\n callHandler(e, local.onContextMenu);\n return;\n }\n clearLongPressTimeout();\n e.preventDefault();\n e.stopPropagation();\n context.setAnchorRect({\n x: e.clientX,\n y: e.clientY\n });\n if (menuContext.isOpen()) {\n menuContext.focusContent();\n } else {\n menuContext.open(true);\n }\n };\n const isTouchOrPen = (e) => e.pointerType === \"touch\" || e.pointerType === \"pen\";\n const onPointerDown = (e) => {\n callHandler(e, local.onPointerDown);\n if (!local.disabled && isTouchOrPen(e)) {\n clearLongPressTimeout();\n context.setAnchorRect({\n x: e.clientX,\n y: e.clientY\n });\n longPressTimoutId = window.setTimeout(() => menuContext.open(false), 700);\n }\n };\n const onPointerMove = (e) => {\n callHandler(e, local.onPointerMove);\n if (!local.disabled && isTouchOrPen(e)) {\n clearLongPressTimeout();\n }\n };\n const onPointerCancel = (e) => {\n callHandler(e, local.onPointerCancel);\n if (!local.disabled && isTouchOrPen(e)) {\n clearLongPressTimeout();\n }\n };\n const onPointerUp = (e) => {\n callHandler(e, local.onPointerUp);\n if (!local.disabled && isTouchOrPen(e)) {\n clearLongPressTimeout();\n }\n };\n return createComponent(Polymorphic, mergeProps({\n as: \"div\",\n ref(r$) {\n const _ref$ = mergeRefs(menuContext.setTriggerRef, local.ref);\n typeof _ref$ === \"function\" && _ref$(r$);\n },\n get style() {\n return combineStyle({\n // prevent iOS context menu from appearing\n \"-webkit-touch-callout\": \"none\"\n }, local.style);\n },\n get [\"data-disabled\"]() {\n return local.disabled ? \"\" : void 0;\n },\n onContextMenu,\n onPointerDown,\n onPointerMove,\n onPointerCancel,\n onPointerUp\n }, () => menuContext.dataset(), others));\n}\n\n// src/context-menu/index.tsx\nvar ContextMenu = Object.assign(ContextMenuRoot, {\n Arrow: PopperArrow,\n CheckboxItem: MenuCheckboxItem,\n Content: ContextMenuContent,\n Group: MenuGroup,\n GroupLabel: MenuGroupLabel,\n Icon: MenuIcon,\n Item: MenuItem,\n ItemDescription: MenuItemDescription,\n ItemIndicator: MenuItemIndicator,\n ItemLabel: MenuItemLabel,\n Portal: MenuPortal,\n RadioGroup: MenuRadioGroup,\n RadioItem: MenuRadioItem,\n Separator: SeparatorRoot,\n Sub: MenuSub,\n SubContent: MenuSubContent,\n SubTrigger: MenuSubTrigger,\n Trigger: ContextMenuTrigger\n});\n\nexport { ContextMenu, ContextMenuContent, ContextMenuRoot, ContextMenuTrigger, context_menu_exports, useContextMenuContext };\n", "import { createComponent as _$createComponent } from \"solid-js/web\";\nimport { memo as _$memo } from \"solid-js/web\";\nimport { ContextMenu } from \"@kobalte/core/context-menu\";\nimport { createEffect, createSignal, For, onCleanup, Show, untrack } from \"solid-js\";\nimport { useSupportedToolsForType, useFilteredDatatypes } from \"../lib/solid-plugins\";\nimport { dragstack, addToDragstack, removeFromDragstack, clearDragstack, setDragging, setDragSourceItems, clearDragSourceItems, getDropTarget, setDropTarget, isAbove, clearDropTarget, copyMode, setCopyMode, isNewDocDrag, setDragOriginView, isSameDragOriginView } from \"../dnd/dnd.ts\";\nimport { setPendingNewDoc } from \"../state.ts\";\nimport { parseAutomergeUrl } from \"@automerge/automerge-repo/slim\";\nimport { getImportableUrlFromAutomergeUrl } from \"@inkandswitch/patchwork-filesystem\";\nimport { executeDrop, removeItemsByUrl } from \"../dnd/operations.ts\";\nimport { getDndPayload } from \"../dnd/payload.ts\";\nimport { handleFilesDrop } from \"./file-drop.ts\";\nimport { log } from \"../dnd/debug.ts\";\nconst EXT_MIME = {\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n avif: \"image/avif\",\n bmp: \"image/bmp\",\n tiff: \"image/tiff\",\n svg: \"image/svg+xml\",\n pdf: \"application/pdf\",\n mp4: \"video/mp4\",\n webm: \"video/webm\",\n mov: \"video/quicktime\",\n mp3: \"audio/mpeg\",\n wav: \"audio/wav\",\n ogg: \"audio/ogg\",\n txt: \"text/plain\",\n md: \"text/markdown\",\n csv: \"text/csv\",\n json: \"application/json\",\n html: \"text/html\",\n zip: \"application/zip\"\n};\nfunction mimeForName(name) {\n const ext = name.includes(\".\") ? name.split(\".\").pop().toLowerCase() : \"\";\n return ext ? EXT_MIME[ext] : void 0;\n}\nfunction scrollParent(el) {\n for (let p = el.parentElement; p; p = p.parentElement) {\n const overflow = getComputedStyle(p).overflowY;\n if ((overflow === \"auto\" || overflow === \"scroll\") && p.scrollHeight > p.clientHeight) {\n return p;\n }\n }\n return document.scrollingElement ?? document.body;\n}\nfunction selectedItemIsVisible(el) {\n const container = scrollParent(el);\n const box = container.getBoundingClientRect();\n const selected = container.querySelectorAll('.document-list-item[aria-selected=\"true\"]');\n for (const item of selected) {\n const rect = item.getBoundingClientRect();\n if (rect.top >= box.top && rect.bottom <= box.bottom) return true;\n }\n return false;\n}\nexport default function Item(props) {\n const tools = useSupportedToolsForType(props.type);\n const datatypes = useFilteredDatatypes(item => !item.unlisted);\n const [trigger, setTrigger] = createSignal();\n const [fileMeta, setFileMeta] = createSignal(null);\n let filePrefetched = false;\n function prefetchFileMeta() {\n if (filePrefetched || props.type !== \"file\") return;\n filePrefetched = true;\n props.repo.find(props.url).then(handle => {\n const doc = handle?.doc();\n if (!doc) return;\n const base = String(doc.name ?? props.name ?? \"file\");\n const ext = doc.extension ? `.${String(doc.extension).replace(/^\\.+/, \"\")}` : \"\";\n const filename = ext && !base.endsWith(ext) ? `${base}${ext}` : base;\n const mime = String(doc.mimeType || mimeForName(filename) || \"application/octet-stream\");\n setFileMeta({\n mime,\n filename\n });\n }).catch(() => {});\n }\n createEffect(prev => {\n if (props.pressed && !prev) {\n const el = untrack(trigger);\n if (el && !selectedItemIsVisible(el)) {\n el.scrollIntoViewIfNeeded?.();\n }\n }\n return props.pressed;\n });\n const dnd = () => ({\n id: props.id,\n type: props.type,\n url: props.url,\n name: props.name,\n source: props.element.toolId\n });\n const SPRING_LOAD_MS = 1500;\n let springTimer = null;\n let springCommitted = false;\n function startSpringLoad(target) {\n if (props.type === \"folder\" || dragstack.has(props.id)) return;\n if (springTimer || springCommitted) return;\n target.setAttribute(\"data-dnd-springload\", \"\");\n springTimer = setTimeout(() => {\n springTimer = null;\n springCommitted = true;\n target.removeAttribute(\"data-dnd-springload\");\n props.openWith();\n }, SPRING_LOAD_MS);\n }\n function stopSpringLoad() {\n if (springTimer) {\n clearTimeout(springTimer);\n springTimer = null;\n }\n springCommitted = false;\n trigger()?.removeAttribute(\"data-dnd-springload\");\n }\n onCleanup(stopSpringLoad);\n async function handleRemove() {\n const multi = dragstack.has(props.id) && dragstack.size > 1;\n if (!multi) {\n props.remove();\n return;\n }\n const urls = [...dragstack.values()].map(item => item.url);\n if (!confirm(`Remove ${urls.length} items from the sidebar?`)) return;\n clearDragstack();\n await removeItemsByUrl(props.repo, props.rootFolderHandle, urls);\n }\n async function handleDrop(event, targetId, position) {\n log(\"Item drop handler called for:\", targetId, position);\n if (event.dataTransfer?.files && event.dataTransfer.files.length > 0) {\n const folderHandle = position === \"inside\" && props.type === \"folder\" ? await props.repo.find(props.url) : props.parentFolderHandle ?? props.rootFolderHandle;\n await handleFilesDrop(event.dataTransfer.files, folderHandle, props.repo, position, position === \"inside\" ? 0 : props.itemIndex ?? 0);\n return;\n }\n const payload = getDndPayload(event);\n if (!payload) {\n log(\"No dnd data in drop event. types:\", event.dataTransfer?.types);\n return;\n }\n const {\n source,\n items\n } = payload;\n log(\"Drop data:\", {\n source,\n items,\n targetId,\n position\n });\n executeDrop({\n draggedIds: items.map(i => i.id),\n draggedUrls: items.map(i => i.url),\n draggedItems: items,\n targetId,\n position,\n sourceToolId: source,\n copyMode: copyMode()\n }, props.repo, props.rootFolderHandle, isSameDragOriginView(props.element));\n }\n return _$createComponent(ContextMenu, {\n get children() {\n return [_$createComponent(ContextMenu.Trigger, {\n ref: setTrigger,\n ondragstart: event => {\n if (!dragstack.has(props.id)) {\n clearDragstack();\n addToDragstack(props.id, dnd());\n }\n const items = dragstack.values();\n const urls = [];\n const ids = [];\n setCopyMode(event.altKey);\n event.dataTransfer.effectAllowed = \"all\";\n for (const item of items) {\n urls.push(item.url);\n ids.push(item.id);\n }\n const urlList = urls.map(url => location.protocol + \"//\" + location.host + `/#doc=${parseAutomergeUrl(url).documentId}`).join(\"\\r\\n\") + \"\\r\\n\";\n event.dataTransfer?.items.add(urlList, \"text/uri-list\");\n event.dataTransfer?.items.add(JSON.stringify(ids), \"text/x-sideboard-ids\");\n event.dataTransfer?.items.add(JSON.stringify(urls), \"text/x-patchwork-urls\");\n event.dataTransfer?.items.add(JSON.stringify({\n source: props.element.toolId,\n items: [...dragstack.values()]\n }), \"text/x-patchwork-dnd\");\n if (dragstack.size === 1 && props.type === \"file\") {\n const meta = fileMeta();\n const filename = meta?.filename ?? props.name;\n const mime = meta?.mime ?? mimeForName(filename) ?? \"application/octet-stream\";\n try {\n const swUrl = new URL(getImportableUrlFromAutomergeUrl(props.url), location.origin).href;\n event.dataTransfer?.setData(\"DownloadURL\", `${mime}:${filename}:${swUrl}`);\n } catch {}\n }\n const preview = document.createElement(\"div\");\n preview.style.cssText = `\n position: absolute;\n top: -1000px;\n background: var(--document-list-primary);\n padding: 0.5rem 0.75rem;\n border-radius: var(--document-list-radius);\n font-family: inherit;\n font-size: 0.9rem;\n pointer-events: none;\n color: var(--document-list-primary-line);\n box-shadow: 0 2px 8px rgba(0,0,0,0.1);\n `;\n const count = dragstack.size;\n const modeText = event.altKey ? \" (copy)\" : \"\";\n preview.textContent = count === 1 ? props.name + modeText : `${count} items${modeText}`;\n document.body.appendChild(preview);\n event.dataTransfer.setDragImage(preview, 10, 10);\n setTimeout(() => preview.remove(), 0);\n setDragSourceItems([...dragstack.keys()]);\n setDragOriginView(props.element);\n setDragging(true);\n },\n ondrag: event => {\n if (event.altKey !== copyMode()) {\n setCopyMode(event.altKey);\n }\n },\n ondragend: event => {\n stopSpringLoad();\n clearDragSourceItems();\n clearDragstack();\n setCopyMode(false);\n setDragOriginView(null);\n setDragging(false);\n },\n ondragover: event => {\n event.preventDefault();\n event.dataTransfer.dropEffect = copyMode() ? \"copy\" : \"move\";\n let position;\n if (props.type === \"folder\") {\n const rect = event.currentTarget.getBoundingClientRect();\n const offset = event.clientY - rect.top;\n const relativePosition = offset / rect.height;\n if (relativePosition < 0.25) {\n position = \"above\";\n } else if (relativePosition > 0.75) {\n position = \"below\";\n } else {\n position = \"inside\";\n }\n if (position !== \"inside\") {\n event.stopPropagation();\n }\n } else {\n position = isAbove(event.clientY, event.currentTarget) ? \"above\" : \"below\";\n event.stopPropagation();\n }\n setDropTarget({\n id: props.id,\n position\n });\n startSpringLoad(event.currentTarget);\n },\n ondragleave: event => {\n const related = event.relatedTarget;\n if (!related || !event.currentTarget.contains(related)) {\n stopSpringLoad();\n clearDropTarget();\n }\n },\n ondrop: event => {\n stopSpringLoad();\n const target = getDropTarget();\n console.log(\"[DnD] Item ondrop event fired\", props.id, \"type:\", props.type, \"target:\", target);\n if (props.type === \"folder\" && target?.position === \"inside\") {\n event.preventDefault();\n event.stopPropagation();\n if (isNewDocDrag(event)) {\n setPendingNewDoc({\n containerUrl: props.url,\n index: 0\n });\n clearDropTarget();\n return;\n }\n handleDrop(event, target.id, \"inside\");\n clearDropTarget();\n return;\n }\n log(\"Item handling drop itself\");\n event.preventDefault();\n event.stopPropagation();\n if (!target) {\n log(\"No drop target set\");\n return;\n }\n if (isNewDocDrag(event)) {\n if (props.parentFolderHandle && props.itemIndex != null) {\n const index = target.position === \"above\" ? props.itemIndex : props.itemIndex + 1;\n setPendingNewDoc({\n containerUrl: props.parentFolderHandle.url,\n index\n });\n }\n clearDropTarget();\n return;\n }\n handleDrop(event, target.id, target.position);\n clearDropTarget();\n },\n draggable: true,\n get [\"data-dnd-item\"]() {\n return props.id;\n },\n get [\"data-doc-url\"]() {\n return props.url;\n },\n get [\"data-doc-type\"]() {\n return props.type;\n },\n get [\"aria-label\"]() {\n return props[\"aria-label\"];\n },\n \"aria-haspopup\": \"menu\",\n as: \"button\",\n \"class\": \"popmenu__trigger document-list-item\",\n role: \"treeitem\",\n get [\"aria-selected\"]() {\n return props.pressed ? \"true\" : void 0;\n },\n onMouseDown: event => {\n prefetchFileMeta();\n if (event.ctrlKey || event.metaKey) {\n if (dragstack.has(props.id)) {\n removeFromDragstack(props.id);\n } else {\n addToDragstack(props.id, dnd());\n }\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n } else if (!dragstack.has(props.id)) {\n clearDragstack();\n }\n },\n \"on:click\": event => {\n if (event.ctrlKey || event.metaKey) {\n return;\n }\n const target = event.target;\n if (target.closest(\".document-list-folder__toggle, .create-new-button\")) {\n return;\n }\n clearDragstack();\n props.openWith();\n },\n \"on:dblclick\": () => {\n props.startRenaming();\n },\n onkeydown: event => {\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n const current = event.currentTarget;\n const allItems = Array.from(document.querySelectorAll(\"[data-dnd-item]\")).filter(item => item.offsetParent !== null);\n const currentIndex = allItems.indexOf(current);\n if (event.key === \"ArrowDown\" && currentIndex < allItems.length - 1) {\n allItems[currentIndex + 1]?.focus();\n } else if (event.key === \"ArrowUp\" && currentIndex > 0) {\n allItems[currentIndex - 1]?.focus();\n }\n return;\n }\n if (props.type === \"folder\" && props.onToggleExpand) {\n if (event.key === \"ArrowRight\" && !props.isExpanded) {\n event.preventDefault();\n props.onToggleExpand();\n return;\n } else if (event.key === \"ArrowLeft\" && props.isExpanded) {\n event.preventDefault();\n props.onToggleExpand();\n return;\n }\n }\n if (event.key == \"Enter\" && event.ctrlKey && !(+event.altKey | +event.shiftKey | +event.metaKey)) {\n if (trigger()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n event.stopPropagation();\n const el = event.target;\n const box = el.getBoundingClientRect();\n trigger().dispatchEvent(new MouseEvent(\"contextmenu\", {\n bubbles: true,\n clientX: box.x + 10,\n clientY: box.y + box.height - 10\n }));\n }\n }\n },\n get children() {\n return props.children;\n }\n }), _$createComponent(ContextMenu.Portal, {\n get children() {\n return _$createComponent(ContextMenu.Content, {\n \"class\": \"popmenu__content\",\n get children() {\n return [_$createComponent(Show, {\n get when() {\n return props.createInside;\n },\n get children() {\n return _$createComponent(ContextMenu.Sub, {\n get children() {\n return [_$createComponent(ContextMenu.SubTrigger, {\n \"class\": \"popmenu__sub-trigger\",\n children: \"Create\"\n }), _$createComponent(ContextMenu.Portal, {\n get children() {\n return _$createComponent(ContextMenu.SubContent, {\n \"class\": \"popmenu__sub-content\",\n get children() {\n return _$createComponent(For, {\n each: datatypes,\n children: datatype => _$createComponent(ContextMenu.Item, {\n \"class\": \"popmenu__item\",\n onSelect: () => props.createInside(datatype),\n get children() {\n return datatype.name;\n }\n })\n });\n }\n });\n }\n })];\n }\n });\n }\n }), _$createComponent(Show, {\n get when() {\n return tools.length;\n },\n get children() {\n return _$createComponent(ContextMenu.Sub, {\n get children() {\n return [_$createComponent(ContextMenu.SubTrigger, {\n \"class\": \"popmenu__sub-trigger\",\n children: \"Open with...\"\n }), _$createComponent(ContextMenu.Portal, {\n get children() {\n return _$createComponent(ContextMenu.SubContent, {\n \"class\": \"popmenu__sub-content\",\n get children() {\n return _$createComponent(For, {\n each: tools,\n children: tool => {\n return _$createComponent(ContextMenu.Item, {\n \"class\": \"popmenu__item\",\n onSelect: () => props.openWith(tool.id),\n get children() {\n return tool.name;\n }\n });\n }\n });\n }\n });\n }\n })];\n }\n });\n }\n }), _$createComponent(ContextMenu.Sub, {\n get children() {\n return [_$createComponent(ContextMenu.SubTrigger, {\n \"class\": \"popmenu__sub-trigger\",\n children: \"Copy\"\n }), _$createComponent(ContextMenu.Portal, {\n get children() {\n return _$createComponent(ContextMenu.SubContent, {\n \"class\": \"popmenu__sub-content\",\n get children() {\n return [_$createComponent(ContextMenu.Item, {\n \"class\": \"popmenu__item\",\n onSelect: () => navigator.clipboard.writeText(props.url),\n children: \"Automerge url\"\n }), _$createComponent(ContextMenu.Item, {\n \"class\": \"popmenu__item\",\n onSelect: () => navigator.clipboard.writeText(`${location.protocol}//${location.host}/#doc=${parseAutomergeUrl(props.url).documentId}`),\n children: \"Patchwork url\"\n }), _$createComponent(Show, {\n get when() {\n return tools.length;\n },\n get children() {\n return _$createComponent(ContextMenu.Sub, {\n get children() {\n return [_$createComponent(ContextMenu.SubTrigger, {\n \"class\": \"popmenu__sub-trigger\",\n children: \"Patchwork url with...\"\n }), _$createComponent(ContextMenu.Portal, {\n get children() {\n return _$createComponent(ContextMenu.SubContent, {\n \"class\": \"popmenu__sub-content\",\n get children() {\n return _$createComponent(For, {\n each: tools,\n children: tool => _$createComponent(ContextMenu.Item, {\n \"class\": \"popmenu__item\",\n onSelect: () => navigator.clipboard.writeText(`${location.protocol}//${location.host}/#doc=${parseAutomergeUrl(props.url).documentId}&tool=${tool.id}`),\n get children() {\n return tool.name;\n }\n })\n });\n }\n });\n }\n })];\n }\n });\n }\n })];\n }\n });\n }\n })];\n }\n }), _$createComponent(ContextMenu.Item, {\n \"class\": \"popmenu__item\",\n onSelect: () => props.startRenaming(),\n children: \"Rename\"\n }), _$createComponent(ContextMenu.Item, {\n \"class\": \"popmenu__item\",\n onSelect: () => handleRemove(),\n get children() {\n return _$memo(() => !!(dragstack.has(props.id) && dragstack.size > 1))() ? `Remove ${dragstack.size} items` : \"Remove\";\n }\n }), _$createComponent(Show, {\n get when() {\n return props.share;\n },\n get children() {\n return _$createComponent(ContextMenu.Item, {\n \"class\": \"popmenu__item\",\n onSelect: () => props.share?.(),\n get disabled() {\n return props.shareDisabled;\n },\n children: \"Share\"\n });\n }\n }), _$createComponent(Show, {\n get when() {\n return props.makeSecureCopy;\n },\n get children() {\n return _$createComponent(ContextMenu.Item, {\n \"class\": \"popmenu__item\",\n onSelect: () => props.makeSecureCopy?.(),\n children: \"Duplicate (unshared)\"\n });\n }\n })];\n }\n });\n }\n })];\n }\n });\n}", "import type { DocHandle, Repo, AutomergeUrl } from \"@automerge/automerge-repo/slim\";\nimport type { FolderDoc, DocLink } from \"@inkandswitch/patchwork-filesystem\";\nimport { deleteAt } from \"@automerge/automerge-repo/slim\";\nimport { log } from \"./debug.ts\";\nimport { docLinkFromUrl } from \"../lib/doc-link.ts\";\n\n// Track loaded folders to prevent memory leaks\nconst folderCache = new Map<AutomergeUrl, DocHandle<FolderDoc>>();\n\n// Maximum folder nesting depth to prevent stack overflow\nconst MAX_FOLDER_DEPTH = 20;\n\n// Helper to extract plain data from Automerge proxy objects\n// structuredClone doesn't work with Automerge proxies - they contain\n// internal symbols and proxies that cannot be cloned\nfunction extractPlainDocLink(docLink: DocLink): DocLink {\n // Explicitly copy only the serializable properties\n const plain: DocLink = {\n url: docLink.url,\n name: docLink.name,\n type: docLink.type,\n };\n return plain;\n}\n\nexport interface DropOperation {\n draggedIds: string[];\n draggedUrls: AutomergeUrl[];\n // Full payload items, used to add links when the dragged docs\n // aren't part of this sideboard's folder tree\n draggedItems?: Array<{ url: AutomergeUrl; name?: string; type?: string }>;\n targetId: string;\n position: \"above\" | \"below\" | \"inside\";\n sourceToolId: string;\n copyMode: boolean;\n}\n\ninterface ItemLocation {\n url: AutomergeUrl;\n folderUrl: AutomergeUrl;\n folderPath: number[];\n index: number;\n item: DocLink;\n}\n\ninterface ItemLocations {\n sourceItems: ItemLocation[];\n targetFolder: AutomergeUrl;\n targetFolderPath: number[];\n targetIndex: number;\n}\n\nexport async function executeDrop(\n operation: DropOperation,\n repo: Repo,\n rootFolderHandle: DocHandle<FolderDoc>,\n // True when the drop lands in the same <patchwork-view> the drag started in.\n // Only then can items be moved; see step 3.\n sameOriginView: boolean\n) {\n log(\"executeDrop called with:\", {\n draggedIds: operation.draggedIds,\n targetId: operation.targetId,\n position: operation.position,\n copyMode: operation.copyMode,\n sourceToolId: operation.sourceToolId,\n });\n\n // 1. Validate we have items to drop\n if (operation.draggedUrls.length === 0) {\n log(\"No items to drop\");\n return;\n }\n\n log(\"Starting location finding...\");\n\n // 2. Find source and target locations\n const locations = await findItemLocations(\n rootFolderHandle,\n operation.draggedUrls,\n operation.targetId,\n repo,\n operation.position\n );\n\n if (!locations) {\n log(\"Could not find target location. Target:\", operation.targetId);\n return;\n }\n\n // 3. Move only when the drag started inside *this same* <patchwork-view> and\n // the dragged docs are actually in this tree. A drag from another view, or an\n // external / bare-url drop (neither sets the origin view), is added to the\n // target folder as a link instead. Identity is the view element itself \u2014 not\n // the tool id, which is null for the fallback-mounted sideboard and was what\n // made the old check send every in-view drag down this add-link path,\n // duplicating instead of moving.\n if (!sameOriginView || locations.sourceItems.length === 0) {\n log(\n \"Cross-view/external drop, adding links. sameOriginView:\",\n sameOriginView\n );\n await performAdd(repo, rootFolderHandle, locations, operation);\n return;\n }\n\n log(\"Locations found:\", {\n sourceItemsCount: locations.sourceItems.length,\n targetFolder: locations.targetFolder,\n targetIndex: locations.targetIndex,\n });\n\n // 4. Validate drop is legal (no circular references, etc)\n log(\"Validating drop...\");\n const validationError = getDropValidationError(locations, operation);\n if (validationError) {\n log(\"Invalid drop operation:\", validationError);\n return;\n }\n\n log(\"Validation passed, executing operation...\");\n\n // 5. Execute the move or copy\n if (operation.copyMode) {\n await performCopy(rootFolderHandle, locations, operation, repo);\n } else {\n await performMove(rootFolderHandle, locations, operation);\n }\n\n log(\"Operation complete!\");\n}\n\n// Remove every doc-link matching one of `urls` from the sideboard's folder\n// tree, wherever it lives. Used by the context menu to remove a multi-selection\n// in one shot. Deletes are batched per folder and applied high-index-first so\n// earlier removals don't shift the indices of later ones.\nexport async function removeItemsByUrl(\n repo: Repo,\n rootFolderHandle: DocHandle<FolderDoc>,\n urls: AutomergeUrl[]\n): Promise<void> {\n const targets = new Set(urls);\n if (targets.size === 0) return;\n\n const removalsByFolder = new Map<DocHandle<FolderDoc>, number[]>();\n const visited = new Set<AutomergeUrl>();\n\n async function traverse(\n handle: DocHandle<FolderDoc>,\n depth: number\n ): Promise<void> {\n if (depth >= MAX_FOLDER_DEPTH) return;\n const doc = handle.doc();\n if (!doc?.docs) return;\n visited.add(handle.url);\n\n for (let i = 0; i < doc.docs.length; i++) {\n const child = doc.docs[i];\n\n if (targets.has(child.url)) {\n const indices = removalsByFolder.get(handle) ?? [];\n indices.push(i);\n removalsByFolder.set(handle, indices);\n }\n\n if (\n child.type === \"folder\" &&\n child.url &&\n child.url !== handle.url &&\n !visited.has(child.url)\n ) {\n let nested = folderCache.get(child.url);\n if (!nested) {\n try {\n nested = await repo.find<FolderDoc>(child.url);\n folderCache.set(child.url, nested);\n } catch (error) {\n log(\"Failed to load folder while removing:\", child.url, error);\n continue;\n }\n }\n await traverse(nested, depth + 1);\n }\n }\n }\n\n await traverse(rootFolderHandle, 0);\n\n for (const [handle, indices] of removalsByFolder) {\n const sorted = [...indices].sort((a, b) => b - a);\n handle.change((doc) => {\n for (const index of sorted) deleteAt(doc.docs, index);\n });\n }\n}\n\nasync function findItemLocations(\n rootFolderHandle: DocHandle<FolderDoc>,\n draggedUrls: AutomergeUrl[],\n targetId: string,\n repo: Repo,\n position: \"above\" | \"below\" | \"inside\"\n): Promise<ItemLocations | null> {\n const rootFolder = rootFolderHandle.doc();\n if (!rootFolder) return null;\n\n const sourceItems: ItemLocation[] = [];\n let targetFolder: AutomergeUrl | null = null;\n let targetFolderPath: number[] | null = null;\n let targetIndex = 0;\n\n // Track visited folders to prevent infinite recursion\n const visitedFolders = new Set<AutomergeUrl>();\n\n // Helper to traverse folder tree recursively\n async function traverse(\n folderUrl: AutomergeUrl,\n docs: DocLink[] | undefined,\n path: number[],\n depth: number = 0\n ): Promise<void> {\n if (!docs) return;\n\n // Prevent infinite recursion with depth limit\n if (depth >= MAX_FOLDER_DEPTH) {\n log(`Max folder depth (${MAX_FOLDER_DEPTH}) reached, stopping traversal`);\n return;\n }\n\n // Mark this folder as visited\n visitedFolders.add(folderUrl);\n\n for (let i = 0; i < docs.length; i++) {\n const doc = docs[i];\n\n // Check if this is a dragged item\n if (draggedUrls.includes(doc.url)) {\n sourceItems.push({\n url: doc.url,\n folderUrl,\n folderPath: [...path],\n index: i,\n item: doc,\n });\n }\n\n // Check if this is the target\n const itemId = folderUrl + \"/\" + i;\n if (itemId === targetId) {\n targetFolder = folderUrl;\n targetFolderPath = [...path];\n targetIndex = i;\n }\n\n // Check if folder URL matches targetId for above/below/inside positions\n if (doc.type === \"folder\" && doc.url === targetId) {\n if (position === \"above\" || position === \"below\") {\n // Dropping above or below the folder - target is the parent folder\n targetFolder = folderUrl;\n targetFolderPath = [...path];\n targetIndex = i;\n } else if (position === \"inside\") {\n // Dropping inside the folder - target is the folder itself\n targetFolder = doc.url;\n targetFolderPath = [...path, i];\n targetIndex = 0; // Drop at start of folder\n }\n }\n\n // Recurse into folders to find nested items\n if (doc.type === \"folder\" && doc.url) {\n // Skip if folder references itself (only skip recursion, not target matching above)\n if (doc.url === folderUrl) {\n log(\"Skipping self-referencing folder:\", doc.url);\n continue;\n }\n\n // Skip if we've already visited this folder (prevent circular refs)\n if (visitedFolders.has(doc.url)) {\n log(\"Skipping already visited folder:\", doc.url);\n continue;\n }\n\n const nestedPath = [...path, i];\n\n // Load the nested folder if not cached\n let nestedHandle = folderCache.get(doc.url);\n if (!nestedHandle) {\n try {\n nestedHandle = await repo.find<FolderDoc>(doc.url);\n folderCache.set(doc.url, nestedHandle);\n } catch (error) {\n log(\"Failed to load folder:\", doc.url, error);\n continue;\n }\n }\n\n const nestedFolder = nestedHandle?.doc();\n if (nestedFolder?.docs) {\n await traverse(doc.url, nestedFolder.docs, nestedPath, depth + 1);\n }\n }\n }\n }\n\n // Start traversal from root\n if (rootFolder.docs) {\n await traverse(rootFolderHandle.url, rootFolder.docs, [], 0);\n }\n\n // If target is the root folder URL (dropping inside root), set target to root\n if (targetId === rootFolderHandle.url && position === \"inside\") {\n targetFolder = rootFolderHandle.url;\n targetFolderPath = [];\n targetIndex = 0;\n }\n\n if (!targetFolder || !targetFolderPath) {\n return null;\n }\n\n return {\n sourceItems,\n targetFolder,\n targetFolderPath,\n targetIndex,\n };\n}\n\nfunction getDropValidationError(\n locations: ItemLocations,\n operation: DropOperation\n): string | null {\n // Check if dropping onto itself\n for (const sourceItem of locations.sourceItems) {\n const sourceId = sourceItem.folderUrl + \"/\" + sourceItem.index;\n\n // Prevent dropping item onto itself\n if (\n sourceId === operation.targetId ||\n sourceItem.url === operation.targetId\n ) {\n return `Cannot drop item onto itself (${sourceItem.item.name})`;\n }\n\n // Prevent dropping item into its current position\n if (\n sourceItem.folderUrl === locations.targetFolder &&\n operation.position === \"inside\" &&\n !operation.copyMode\n ) {\n return `Item is already in this folder (${sourceItem.item.name})`;\n }\n\n // Check if trying to drop folder into itself\n if (\n sourceItem.item.type === \"folder\" &&\n sourceItem.url === locations.targetFolder\n ) {\n return `Cannot drop folder into itself (${sourceItem.item.name})`;\n }\n\n // Check if dropping folder into its descendants (circular reference prevention)\n if (sourceItem.item.type === \"folder\") {\n const isDescendant = isDescendantFolder(\n sourceItem.url,\n locations.targetFolder\n );\n if (isDescendant) {\n return `Cannot drop folder into its own descendant (${sourceItem.item.name})`;\n }\n }\n }\n\n return null;\n}\n\n// Helper to check if targetFolder is a descendant of potentialAncestor\nfunction isDescendantFolder(\n potentialAncestor: AutomergeUrl,\n targetFolder: AutomergeUrl\n): boolean {\n if (potentialAncestor === targetFolder) {\n return true;\n }\n\n // Check cached folder for descendants\n const ancestorHandle = folderCache.get(potentialAncestor);\n if (!ancestorHandle) return false;\n\n const ancestorDoc = ancestorHandle.doc();\n if (!ancestorDoc?.docs) return false;\n\n // Recursively check all subfolders\n for (const doc of ancestorDoc.docs) {\n if (doc.type === \"folder\" && doc.url) {\n if (doc.url === targetFolder) {\n return true;\n }\n if (isDescendantFolder(doc.url, targetFolder)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nasync function performMove(\n rootFolderHandle: DocHandle<FolderDoc>,\n locations: ItemLocations,\n operation: DropOperation\n) {\n log(\n `Moving ${locations.sourceItems.length} item(s) to position:`,\n operation.position\n );\n\n // Group sources by folder for efficient removal\n const sourcesByFolder = new Map<AutomergeUrl, ItemLocation[]>();\n for (const source of locations.sourceItems) {\n const sources = sourcesByFolder.get(source.folderUrl) || [];\n sources.push(source);\n sourcesByFolder.set(source.folderUrl, sources);\n }\n\n // Remove items from source folders (process each folder once)\n const removedItems: DocLink[] = [];\n for (const [folderUrl, sources] of sourcesByFolder) {\n // Sort by index descending to remove from end first (preserves indices)\n const sorted = [...sources].sort((a, b) => b.index - a.index);\n\n if (folderUrl === rootFolderHandle.url) {\n // Root level - can modify directly\n rootFolderHandle.change((doc) => {\n for (const source of sorted) {\n const item = extractPlainDocLink(doc.docs[source.index]);\n removedItems.unshift(item);\n deleteAt(doc.docs, source.index);\n }\n });\n } else {\n // Nested folder - need to load and modify\n const folderHandle = folderCache.get(folderUrl);\n if (folderHandle) {\n folderHandle.change((doc) => {\n for (const source of sorted) {\n const item = extractPlainDocLink(doc.docs[source.index]);\n removedItems.unshift(item);\n deleteAt(doc.docs, source.index);\n }\n });\n }\n }\n }\n\n // Calculate target index (adjust if moving within same folder)\n let finalTargetIndex = locations.targetIndex;\n\n const sourcesInTargetFolder = sourcesByFolder.get(locations.targetFolder);\n if (sourcesInTargetFolder) {\n // Moving within same folder - adjust for removed items\n const removedBefore = sourcesInTargetFolder.filter(\n (s) => s.index < locations.targetIndex\n ).length;\n finalTargetIndex -= removedBefore;\n }\n\n // Adjust based on position\n if (operation.position === \"above\") {\n // Insert before target\n } else if (operation.position === \"below\") {\n // Insert after target\n finalTargetIndex++;\n } else if (operation.position === \"inside\") {\n // Insert at beginning of folder\n finalTargetIndex = 0;\n }\n\n // Insert items at target location\n if (locations.targetFolder === rootFolderHandle.url) {\n // Root level\n rootFolderHandle.change((doc) => {\n doc.docs.splice(finalTargetIndex, 0, ...removedItems);\n });\n } else {\n // Nested folder\n const targetHandle = folderCache.get(locations.targetFolder);\n if (targetHandle) {\n targetHandle.change((doc) => {\n doc.docs.splice(finalTargetIndex, 0, ...removedItems);\n });\n }\n }\n}\n\n// Add links for docs dragged in from outside this sideboard's folder tree\nasync function performAdd(\n repo: Repo,\n rootFolderHandle: DocHandle<FolderDoc>,\n locations: ItemLocations,\n operation: DropOperation\n) {\n const candidates = (operation.draggedItems ?? []).filter(\n (item) => item.url && item.url !== locations.targetFolder\n );\n\n // Don't add items that are already present in the target folder -\n // dropping a doc into a folder it's already in shouldn't duplicate it.\n const targetDocs =\n locations.targetFolder === rootFolderHandle.url\n ? rootFolderHandle.doc()?.docs\n : folderCache.get(locations.targetFolder)?.doc()?.docs;\n const existingUrls = new Set(targetDocs?.map((doc) => doc.url) ?? []);\n\n const links = (\n await Promise.all(\n candidates\n .filter((item) => !existingUrls.has(item.url))\n .map(async (item): Promise<DocLink | null> => {\n if (item.name && item.type) {\n return { url: item.url, name: item.name, type: item.type };\n }\n // Bare url (e.g. dragged link text) - resolve name/type from the doc\n try {\n return await docLinkFromUrl(repo, item.url);\n } catch (error) {\n log(\"Failed to resolve dropped doc:\", item.url, error);\n return null;\n }\n })\n )\n ).filter((link): link is DocLink => link !== null);\n\n if (links.length === 0) {\n log(\"No addable items in external drop (already present or unresolvable)\");\n return;\n }\n\n let finalTargetIndex = locations.targetIndex;\n if (operation.position === \"below\") {\n finalTargetIndex++;\n } else if (operation.position === \"inside\") {\n finalTargetIndex = 0;\n }\n\n log(`Adding ${links.length} link(s) at index:`, finalTargetIndex);\n\n if (locations.targetFolder === rootFolderHandle.url) {\n rootFolderHandle.change((doc) => {\n doc.docs.splice(finalTargetIndex, 0, ...links);\n });\n } else {\n const targetHandle = folderCache.get(locations.targetFolder);\n if (targetHandle) {\n targetHandle.change((doc) => {\n doc.docs.splice(finalTargetIndex, 0, ...links);\n });\n }\n }\n}\n\nasync function performCopy(\n rootFolderHandle: DocHandle<FolderDoc>,\n locations: ItemLocations,\n operation: DropOperation,\n _repo: Repo\n) {\n log(\n `Copying ${locations.sourceItems.length} item(s) to position:`,\n operation.position\n );\n\n // Collect items to copy from their source folders\n const itemsToCopy: DocLink[] = [];\n\n for (const source of locations.sourceItems) {\n let item: DocLink | undefined;\n\n if (source.folderUrl === rootFolderHandle.url) {\n // Root level\n const doc = rootFolderHandle.doc();\n if (doc?.docs) {\n item = doc.docs[source.index];\n }\n } else {\n // Nested folder\n const folderHandle = folderCache.get(source.folderUrl);\n const doc = folderHandle?.doc();\n if (doc?.docs) {\n item = doc.docs[source.index];\n }\n }\n\n if (item) {\n const clonedItem = extractPlainDocLink(item);\n clonedItem.name = item.name;\n itemsToCopy.push(clonedItem);\n }\n }\n\n // Calculate target index\n let finalTargetIndex = locations.targetIndex;\n\n if (operation.position === \"above\") {\n // Insert before target\n } else if (operation.position === \"below\") {\n // Insert after target\n finalTargetIndex++;\n } else if (operation.position === \"inside\") {\n // Insert at beginning of folder\n finalTargetIndex = 0;\n }\n\n // Insert copied items at target location\n if (locations.targetFolder === rootFolderHandle.url) {\n // Root level\n rootFolderHandle.change((doc) => {\n doc.docs.splice(finalTargetIndex, 0, ...itemsToCopy);\n });\n } else {\n // Nested folder\n const targetHandle = folderCache.get(locations.targetFolder);\n if (targetHandle) {\n targetHandle.change((doc) => {\n doc.docs.splice(finalTargetIndex, 0, ...itemsToCopy);\n });\n }\n }\n}\n", "import {\n isValidAutomergeUrl,\n type AutomergeUrl,\n} from \"@automerge/automerge-repo/slim\";\n\nexport type DndPayloadItem = {\n id?: string;\n url: AutomergeUrl;\n name?: string;\n type?: string;\n};\n\nexport type DndPayload = {\n source: string;\n items: DndPayloadItem[];\n};\n\n// MIME types we can extract document drags from, in order of preference\nexport const DND_DATA_TYPES = [\n \"text/x-patchwork-dnd\",\n \"text/x-patchwork-urls\",\n \"text/uri-list\",\n \"text/plain\",\n];\n\nexport function hasDocumentDrag(dataTransfer: DataTransfer | null) {\n return Boolean(\n dataTransfer &&\n DND_DATA_TYPES.some((type) => dataTransfer.types.includes(type))\n );\n}\n\nfunction urlFromText(text: string): AutomergeUrl | null {\n const trimmed = text.trim();\n if (isValidAutomergeUrl(trimmed)) return trimmed;\n // patchwork web links carry the document id in the fragment: #doc=<documentId>\n const docId = trimmed.match(/#doc=([^&\\s]+)/)?.[1];\n if (docId && isValidAutomergeUrl(`automerge:${docId}`)) {\n return `automerge:${docId}` as AutomergeUrl;\n }\n return null;\n}\n\nexport function getDndPayload(event: DragEvent): DndPayload | null {\n const data = event.dataTransfer;\n if (!data) return null;\n\n const dndData = data.getData(\"text/x-patchwork-dnd\");\n if (dndData) {\n try {\n const parsed = JSON.parse(dndData);\n if (Array.isArray(parsed?.items) && parsed.items.length > 0) {\n return { source: parsed.source ?? \"\", items: parsed.items };\n }\n } catch {\n // fall through to the other types\n }\n }\n\n const urlData = data.getData(\"text/x-patchwork-urls\");\n if (urlData) {\n try {\n const urls: unknown = JSON.parse(urlData);\n const items = (Array.isArray(urls) ? urls : [])\n .filter((url): url is AutomergeUrl => isValidAutomergeUrl(url))\n .map((url) => ({ url }));\n if (items.length > 0) return { source: \"\", items };\n } catch {\n // fall through to the other types\n }\n }\n\n const text = data.getData(\"text/uri-list\") || data.getData(\"text/plain\");\n const items = text\n .split(/\\r?\\n/)\n .map(urlFromText)\n .filter((url): url is AutomergeUrl => url !== null)\n .map((url) => ({ url }));\n if (items.length > 0) return { source: \"\", items };\n\n return null;\n}\n", "import { template as _$template } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { use as _$use } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<form style=display:contents><input autofocus class=document-list-item__name>`),\n _tmpl$2 = /*#__PURE__*/_$template(`<span class=document-list-item__name>`);\nimport { createSelector, createSignal, Match, Switch } from \"solid-js\";\nimport { renaming, setRenaming } from \"../state.ts\";\nexport function ItemName(props) {\n const isBeingRenamed = createSelector(renaming);\n const [next, setNext] = createSignal(props.name);\n function blur() {\n props.rename(next() ?? \"\");\n if (isBeingRenamed(props.id)) setRenaming(\"\");\n }\n return _$createComponent(Switch, {\n get children() {\n return [_$createComponent(Match, {\n get when() {\n return isBeingRenamed(props.id);\n },\n get children() {\n var _el$ = _tmpl$(),\n _el$2 = _el$.firstChild;\n _el$.addEventListener(\"submit\", event => {\n event.preventDefault();\n blur();\n });\n _el$2.$$input = event => setNext(event.target.value);\n _el$2.$$keydown = event => {\n if (event.key == \"Escape\" || event.key == \"g\" && event.ctrlKey) {\n blur();\n }\n };\n _el$2.addEventListener(\"blur\", blur);\n _$use(el => {\n setNext(props.name);\n setTimeout(() => {\n el.focus();\n el.select();\n }, 80);\n }, _el$2);\n _$effect(() => _el$2.value = next());\n return _el$;\n }\n }), _$createComponent(Match, {\n get when() {\n return !isBeingRenamed(props.id);\n },\n get children() {\n var _el$3 = _tmpl$2();\n _$insert(_el$3, () => props.name);\n return _el$3;\n }\n })];\n }\n });\n}\n_$delegateEvents([\"keydown\", \"input\"]);", "import { template as _$template } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nimport { setStyleProperty as _$setStyleProperty } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<div class=\"document-list-item document-list-item--loading\"aria-hidden=true><span class=document-list-item__skeleton>`),\n _tmpl$2 = /*#__PURE__*/_$template(`<div class=document-list__loading aria-busy=true aria-label=\"Loading documents\">`);\nimport { For } from \"solid-js\";\nexport function LoadingRow(props) {\n return (() => {\n var _el$ = _tmpl$();\n _$effect(_$p => _$setStyleProperty(_el$, \"--depth\", props.depth ?? 0));\n return _el$;\n })();\n}\nconst SKELETON_WIDTHS = [\"11rem\", \"7rem\", \"9.5rem\", \"6rem\", \"10rem\", \"8rem\"];\nexport function LoadingRows(props) {\n const rows = () => Array.from({\n length: props.count ?? 5\n }, (_, i) => i);\n return (() => {\n var _el$2 = _tmpl$2();\n _$insert(_el$2, _$createComponent(For, {\n get each() {\n return rows();\n },\n children: i => (() => {\n var _el$3 = _tmpl$(),\n _el$4 = _el$3.firstChild;\n _$effect(_p$ => {\n var _v$ = props.depth ?? 0,\n _v$2 = SKELETON_WIDTHS[i % SKELETON_WIDTHS.length];\n _v$ !== _p$.e && _$setStyleProperty(_el$3, \"--depth\", _p$.e = _v$);\n _v$2 !== _p$.t && _$setStyleProperty(_el$4, \"width\", _p$.t = _v$2);\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$3;\n })()\n }));\n return _el$2;\n })();\n}", "import { template as _$template } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents } from \"solid-js/web\";\nimport { memo as _$memo } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<span class=share-modal__public-status>This document is <strong>public`),\n _tmpl$2 = /*#__PURE__*/_$template(`<button class=share-modal__add-button>Revoke Public Access`),\n _tmpl$3 = /*#__PURE__*/_$template(`<button class=share-modal__add-button>Make Public`),\n _tmpl$4 = /*#__PURE__*/_$template(`<div class=share-modal__public-actions>`),\n _tmpl$5 = /*#__PURE__*/_$template(`<hr class=share-modal__divider>`),\n _tmpl$6 = /*#__PURE__*/_$template(`<form class=share-modal__form><textarea class=share-modal__input placeholder=\"Paste ContactCard JSON...\"rows=3></textarea><div class=share-modal__form-actions><button type=submit class=share-modal__add-button>`),\n _tmpl$7 = /*#__PURE__*/_$template(`<p class=share-modal__loading>Loading...`),\n _tmpl$8 = /*#__PURE__*/_$template(`<p class=share-modal__empty>No users have access yet`),\n _tmpl$9 = /*#__PURE__*/_$template(`<div class=share-modal__member-list>`),\n _tmpl$0 = /*#__PURE__*/_$template(`<div class=share-modal__overlay><div class=share-modal__content><header class=share-modal__header><h2>Share this document</h2><button class=share-modal__close aria-label=\"Close modal\">&times;</button></header><div class=share-modal__body><section class=share-modal__public-section><h3 class=share-modal__section-title>Public Access</h3><div class=share-modal__public-controls></div></section><section><h3 class=share-modal__section-title>Current Access`),\n _tmpl$1 = /*#__PURE__*/_$template(`<button class=share-modal__remove-button aria-label=\"Remove member\"><svg width=16 height=16 viewBox=\"0 0 24 24\"fill=none stroke=currentColor stroke-width=2><path d=\"M6 18L18 6M6 6l12 12\">`),\n _tmpl$10 = /*#__PURE__*/_$template(`<div class=share-modal__member><div class=share-modal__member-info><span class=share-modal__member-id></span><span class=share-modal__member-access>`);\nimport { createSignal, createEffect, Show, For, onCleanup, createMemo } from \"solid-js\";\nimport { Access, ContactCard, docIdFromAutomergeUrl, Identifier, uint8ArrayToHex } from \"@automerge/automerge-repo-keyhive\";\nconst ACCESS_LEVELS = [\"Relay\", \"Read\", \"Edit\", \"Admin\"];\nasync function fetchAccessList(hive, docUrl) {\n const keyhiveDocId = docIdFromAutomergeUrl(docUrl);\n const accessList = {};\n const members = await hive.docMemberCapabilities(keyhiveDocId);\n members.forEach(capability => {\n const hexId = uint8ArrayToHex(capability.who.id.toBytes());\n accessList[hexId] = capability.can.toString();\n });\n return accessList;\n}\nexport function ShareModal(props) {\n const [contactCardInput, setContactCardInput] = createSignal(\"\");\n const [docAccessList, setDocAccessList] = createSignal({});\n const [isLoadingAccessList, setIsLoadingAccessList] = createSignal(true);\n const [currentUserAccess, setCurrentUserAccess] = createSignal(void 0);\n const [isSubmitting, setIsSubmitting] = createSignal(false);\n const keyhiveDocId = createMemo(() => docIdFromAutomergeUrl(props.docUrl));\n const currentUserHexId = createMemo(() => {\n const id = props.hive.active.individual.id;\n return id ? uint8ArrayToHex(id.toBytes()) : null;\n });\n const syncServerHexId = createMemo(() => {\n const syncServer = props.hive.syncServer;\n if (!syncServer) return null;\n const contactCard = ContactCard.fromJson(syncServer.contactCard.toJson());\n if (!contactCard) return null;\n return uint8ArrayToHex(contactCard.individualId.bytes);\n });\n const publicHexId = createMemo(() => {\n const publicId = Identifier.publicId();\n return uint8ArrayToHex(publicId.toBytes());\n });\n const currentPublicAccess = createMemo(() => {\n const accessList = docAccessList();\n const pubHexId = publicHexId();\n return accessList[pubHexId] || null;\n });\n const isAdmin = createMemo(() => currentUserAccess() === \"Admin\");\n createEffect(() => {\n if (!props.isOpen) return;\n let cancelled = false;\n async function fetchCurrentUserAccess() {\n const id = props.hive.active.individual.id;\n if (!id) {\n if (!cancelled) setCurrentUserAccess(void 0);\n return;\n }\n try {\n const access = await props.hive.accessForDoc(id, keyhiveDocId());\n if (!cancelled) {\n setCurrentUserAccess(access ? access.toString() : void 0);\n }\n } catch (err) {\n if (!cancelled) {\n console.error(\"[ShareModal] Error checking access level:\", err);\n setCurrentUserAccess(void 0);\n }\n }\n }\n fetchCurrentUserAccess();\n onCleanup(() => {\n cancelled = true;\n });\n });\n createEffect(() => {\n if (!props.isOpen) return;\n let cancelled = false;\n async function loadAccessList() {\n if (!cancelled) setIsLoadingAccessList(true);\n try {\n const accessList = await fetchAccessList(props.hive, props.docUrl);\n if (!cancelled) {\n setDocAccessList(accessList);\n setIsLoadingAccessList(false);\n }\n } catch (err) {\n if (!cancelled) {\n console.error(\"[ShareModal] Error loading access list:\", err);\n setDocAccessList({});\n setIsLoadingAccessList(false);\n }\n }\n }\n loadAccessList();\n onCleanup(() => {\n cancelled = true;\n });\n });\n createEffect(() => {\n if (!props.isOpen) return;\n const handleEscape = e => {\n if (e.key === \"Escape\") {\n props.onClose();\n }\n };\n document.addEventListener(\"keydown\", handleEscape);\n onCleanup(() => {\n document.removeEventListener(\"keydown\", handleEscape);\n });\n });\n const handleAddMember = async e => {\n e.preventDefault();\n const input = contactCardInput().trim();\n if (!input) return;\n setIsSubmitting(true);\n try {\n const contactCard = ContactCard.fromJson(input);\n if (!contactCard) {\n throw new Error(\"Invalid ContactCard JSON\");\n }\n const access = Access.tryFromString(\"edit\");\n if (!access) {\n throw new Error(\"Invalid access level\");\n }\n await props.hive.addMemberToDoc(props.docUrl, contactCard, access);\n setContactCardInput(\"\");\n } catch (err) {\n console.error(\"[ShareModal]\", err);\n } finally {\n const accessList = await fetchAccessList(props.hive, props.docUrl);\n setDocAccessList(accessList);\n setIsSubmitting(false);\n }\n };\n const handleRemoveMember = async hexId => {\n try {\n await props.hive.revokeMemberFromDoc(props.docUrl, hexId);\n } catch (err) {\n console.error(\"[ShareModal]\", err);\n } finally {\n const accessList = await fetchAccessList(props.hive, props.docUrl);\n setDocAccessList(accessList);\n }\n };\n const handleMakePublic = async () => {\n try {\n const access = Access.tryFromString(\"edit\");\n if (!access) {\n throw new Error(\"Invalid access level\");\n }\n await props.hive.setPublicAccess(props.docUrl, access);\n } catch (err) {\n console.error(\"[ShareModal]\", err);\n } finally {\n const accessList = await fetchAccessList(props.hive, props.docUrl);\n setDocAccessList(accessList);\n }\n };\n const handleMakePrivate = async () => {\n try {\n await props.hive.revokeMemberFromDoc(props.docUrl, publicHexId());\n } catch (err) {\n console.error(\"[ShareModal]\", err);\n } finally {\n const accessList = await fetchAccessList(props.hive, props.docUrl);\n setDocAccessList(accessList);\n }\n };\n const handleBackdropClick = e => {\n if (e.target === e.currentTarget) {\n props.onClose();\n }\n };\n const formatHexId = hexId => `0x${hexId.slice(0, 12)}...`;\n const sortedMembers = createMemo(() => {\n return Object.entries(docAccessList()).sort(([a], [b]) => a.localeCompare(b));\n });\n return _$createComponent(Show, {\n get when() {\n return props.isOpen;\n },\n get children() {\n var _el$ = _tmpl$0(),\n _el$2 = _el$.firstChild,\n _el$3 = _el$2.firstChild,\n _el$4 = _el$3.firstChild,\n _el$5 = _el$4.nextSibling,\n _el$6 = _el$3.nextSibling,\n _el$7 = _el$6.firstChild,\n _el$8 = _el$7.firstChild,\n _el$9 = _el$8.nextSibling,\n _el$18 = _el$7.nextSibling,\n _el$19 = _el$18.firstChild;\n _el$.$$click = handleBackdropClick;\n _el$2.$$click = e => e.stopPropagation();\n _el$5.$$click = () => props.onClose();\n _$insert(_el$9, _$createComponent(Show, {\n get when() {\n return currentPublicAccess();\n },\n get children() {\n return _tmpl$();\n }\n }), null);\n _$insert(_el$9, _$createComponent(Show, {\n get when() {\n return isAdmin();\n },\n get children() {\n var _el$1 = _tmpl$4();\n _$insert(_el$1, _$createComponent(Show, {\n get when() {\n return currentPublicAccess();\n },\n get children() {\n var _el$10 = _tmpl$2();\n _el$10.$$click = handleMakePrivate;\n return _el$10;\n }\n }), null);\n _$insert(_el$1, _$createComponent(Show, {\n get when() {\n return !currentPublicAccess();\n },\n get children() {\n var _el$11 = _tmpl$3();\n _el$11.$$click = handleMakePublic;\n return _el$11;\n }\n }), null);\n return _el$1;\n }\n }), null);\n _$insert(_el$6, _$createComponent(Show, {\n get when() {\n return isAdmin();\n },\n get children() {\n return [_tmpl$5(), (() => {\n var _el$13 = _tmpl$6(),\n _el$14 = _el$13.firstChild,\n _el$15 = _el$14.nextSibling,\n _el$16 = _el$15.firstChild;\n _el$13.addEventListener(\"submit\", handleAddMember);\n _el$14.$$input = e => setContactCardInput(e.currentTarget.value);\n _$insert(_el$16, () => isSubmitting() ? \"Adding...\" : \"Add\");\n _$effect(() => _el$16.disabled = isSubmitting() || !contactCardInput().trim());\n _$effect(() => _el$14.value = contactCardInput());\n return _el$13;\n })(), _tmpl$5()];\n }\n }), _el$18);\n _$insert(_el$18, _$createComponent(Show, {\n get when() {\n return isLoadingAccessList();\n },\n get children() {\n return _tmpl$7();\n }\n }), null);\n _$insert(_el$18, _$createComponent(Show, {\n get when() {\n return _$memo(() => !!!isLoadingAccessList())() && sortedMembers().length === 0;\n },\n get children() {\n return _tmpl$8();\n }\n }), null);\n _$insert(_el$18, _$createComponent(Show, {\n get when() {\n return _$memo(() => !!!isLoadingAccessList())() && sortedMembers().length > 0;\n },\n get children() {\n var _el$22 = _tmpl$9();\n _$insert(_el$22, _$createComponent(For, {\n get each() {\n return sortedMembers();\n },\n children: ([hexId, access]) => {\n const isCurrentUser = hexId === currentUserHexId();\n const isSyncServer = hexId === syncServerHexId();\n const isPublic = hexId === publicHexId();\n const myAccessIdx = ACCESS_LEVELS.indexOf(currentUserAccess());\n const memberAccessIdx = ACCESS_LEVELS.indexOf(access);\n const canRemove = myAccessIdx >= 0 && memberAccessIdx >= 0 && memberAccessIdx <= myAccessIdx && !isCurrentUser && !isSyncServer;\n const displayName = () => {\n if (isCurrentUser) return \"You\";\n if (isSyncServer) return \"Sync Server\";\n if (isPublic) return \"Public\";\n return formatHexId(hexId);\n };\n return (() => {\n var _el$23 = _tmpl$10(),\n _el$24 = _el$23.firstChild,\n _el$25 = _el$24.firstChild,\n _el$26 = _el$25.nextSibling;\n _el$25.classList.toggle(\"share-modal__member-id--you\", !!isCurrentUser);\n _el$25.classList.toggle(\"share-modal__member-id--public\", !!isPublic);\n _$insert(_el$25, displayName);\n _$insert(_el$26, access);\n _$insert(_el$23, _$createComponent(Show, {\n when: canRemove,\n get children() {\n var _el$27 = _tmpl$1();\n _el$27.$$click = () => handleRemoveMember(hexId);\n return _el$27;\n }\n }), null);\n return _el$23;\n })();\n }\n }));\n return _el$22;\n }\n }), null);\n return _el$;\n }\n });\n}\n_$delegateEvents([\"click\", \"input\"]);", "// Properties of the document root object\nexport const STATE = Symbol.for(\"_am_meta\"); // symbol used to hide application metadata on automerge objects\nexport const TRACE = Symbol.for(\"_am_trace\"); // used for debugging\nexport const OBJECT_ID = Symbol.for(\"_am_objectId\"); // symbol used to hide the object id on automerge objects\nexport const IS_PROXY = Symbol.for(\"_am_isProxy\"); // symbol used to test if the document is a proxy object\nexport const CLEAR_CACHE = Symbol.for(\"_am_clearCache\"); // symbol used to tell a proxy object to clear its cache\nexport const UINT = Symbol.for(\"_am_uint\");\nexport const INT = Symbol.for(\"_am_int\");\nexport const F64 = Symbol.for(\"_am_f64\");\nexport const COUNTER = Symbol.for(\"_am_counter\");\nexport const TEXT = Symbol.for(\"_am_text\");\nexport const IMMUTABLE_STRING = Symbol.for(\"_am_immutableString\");\n", "import { COUNTER } from \"./constants.js\";\n/**\n * The most basic CRDT: an integer value that can be changed only by\n * incrementing and decrementing. Since addition of integers is commutative,\n * the value trivially converges.\n */\nexport class Counter {\n constructor(value) {\n this.value = value || 0;\n Reflect.defineProperty(this, COUNTER, { value: true });\n }\n /**\n * A peculiar JavaScript language feature from its early days: if the object\n * `x` has a `valueOf()` method that returns a number, you can use numerical\n * operators on the object `x` directly, such as `x + 1` or `x < 4`.\n * This method is also called when coercing a value to a string by\n * concatenating it with another string, as in `x + ''`.\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf\n */\n valueOf() {\n return this.value;\n }\n /**\n * Returns the counter value as a decimal string. If `x` is a counter object,\n * this method is called e.g. when you do `['value: ', x].join('')` or when\n * you use string interpolation: `value: ${x}`.\n */\n toString() {\n return this.valueOf().toString();\n }\n /**\n * Returns the counter value, so that a JSON serialization of an Automerge\n * document represents the counter simply as an integer.\n */\n toJSON() {\n return this.value;\n }\n /**\n * Increases the value of the counter by `delta`. If `delta` is not given,\n * increases the value of the counter by 1.\n *\n * Will throw an error if used outside of a change callback.\n */\n increment(_delta) {\n throw new Error(\"Counters should not be incremented outside of a change callback\");\n }\n /**\n * Decreases the value of the counter by `delta`. If `delta` is not given,\n * decreases the value of the counter by 1.\n *\n * Will throw an error if used outside of a change callback.\n */\n decrement(_delta) {\n throw new Error(\"Counters should not be decremented outside of a change callback\");\n }\n}\n/**\n * An instance of this class is used when a counter is accessed within a change\n * callback.\n */\nclass WriteableCounter extends Counter {\n constructor(value, context, path, objectId, key) {\n super(value);\n this.context = context;\n this.path = path;\n this.objectId = objectId;\n this.key = key;\n }\n /**\n * Increases the value of the counter by `delta`. If `delta` is not given,\n * increases the value of the counter by 1.\n */\n increment(delta) {\n delta = typeof delta === \"number\" ? delta : 1;\n this.context.increment(this.objectId, this.key, delta);\n this.value += delta;\n return this.value;\n }\n /**\n * Decreases the value of the counter by `delta`. If `delta` is not given,\n * decreases the value of the counter by 1.\n */\n decrement(delta) {\n return this.increment(typeof delta === \"number\" ? -delta : -1);\n }\n}\n/**\n * Returns an instance of `WriteableCounter` for use in a change callback.\n * `context` is the proxy context that keeps track of the mutations.\n * `objectId` is the ID of the object containing the counter, and `key` is\n * the property name (key in map, or index in list) where the counter is\n * located.\n */\nexport function getWriteableCounter(value, context, path, objectId, key) {\n return new WriteableCounter(value, context, path, objectId, key);\n}\n//module.exports = { Counter, getWriteableCounter }\n", "var _a;\nimport { IMMUTABLE_STRING } from \"./constants.js\";\nexport class ImmutableString {\n constructor(val) {\n // Used to detect whether a value is a ImmutableString object rather than using an instanceof check\n this[_a] = true;\n this.val = val;\n }\n /**\n * Returns the content of the ImmutableString object as a simple string\n */\n toString() {\n return this.val;\n }\n toJSON() {\n return this.val;\n }\n}\n_a = IMMUTABLE_STRING;\n", "import { getWriteableCounter } from \"./counter.js\";\nimport { STATE, TRACE, IS_PROXY, OBJECT_ID, CLEAR_CACHE, COUNTER, INT, UINT, F64, IMMUTABLE_STRING, TEXT, } from \"./constants.js\";\nimport { ImmutableString } from \"./immutable_string.js\";\nfunction parseListIndex(key) {\n if (typeof key === \"string\" && /^[0-9]+$/.test(key))\n key = parseInt(key, 10);\n if (typeof key !== \"number\") {\n return key;\n }\n if (key < 0 || isNaN(key) || key === Infinity || key === -Infinity) {\n throw new RangeError(\"A list index must be positive, but you passed \" + key);\n }\n return key;\n}\nfunction valueAt(target, prop) {\n const { context, objectId, path } = target;\n const value = context.getWithType(objectId, prop);\n if (value === null) {\n return;\n }\n const datatype = value[0];\n const val = value[1];\n switch (datatype) {\n case undefined:\n return;\n case \"map\":\n return mapProxy(context, val, [...path, prop]);\n case \"list\":\n return listProxy(context, val, [...path, prop]);\n case \"text\":\n return context.text(val);\n case \"str\":\n return new ImmutableString(val);\n case \"uint\":\n return val;\n case \"int\":\n return val;\n case \"f64\":\n return val;\n case \"boolean\":\n return val;\n case \"null\":\n return null;\n case \"bytes\":\n return val;\n case \"timestamp\":\n return val;\n case \"counter\": {\n const counter = getWriteableCounter(val, context, path, objectId, prop);\n return counter;\n }\n default:\n throw RangeError(`datatype ${datatype} unimplemented`);\n }\n}\nfunction import_value(value, path, context) {\n const type = typeof value;\n switch (type) {\n case \"object\":\n if (value == null) {\n return [null, \"null\"];\n }\n else if (value[UINT]) {\n return [value.value, \"uint\"];\n }\n else if (value[INT]) {\n return [value.value, \"int\"];\n }\n else if (value[F64]) {\n return [value.value, \"f64\"];\n }\n else if (value[COUNTER]) {\n return [value.value, \"counter\"];\n }\n else if (value instanceof Date) {\n return [value.getTime(), \"timestamp\"];\n }\n else if (isImmutableString(value)) {\n return [value.toString(), \"str\"];\n }\n else if (value instanceof Uint8Array) {\n return [value, \"bytes\"];\n }\n else if (value instanceof Array) {\n return [value, \"list\"];\n }\n else if (Object.prototype.toString.call(value) === \"[object Object]\") {\n return [value, \"map\"];\n }\n else if (isSameDocument(value, context)) {\n throw new RangeError(\"Cannot create a reference to an existing document object\");\n }\n else {\n throw new RangeError(`Cannot assign unknown object: ${value}`);\n }\n case \"boolean\":\n return [value, \"boolean\"];\n case \"number\":\n if (Number.isInteger(value)) {\n return [value, \"int\"];\n }\n else {\n return [value, \"f64\"];\n }\n case \"string\":\n return [value, \"text\"];\n case \"undefined\":\n throw new RangeError([\n `Cannot assign undefined value at ${printPath(path)}, `,\n \"because `undefined` is not a valid JSON data type. \",\n \"You might consider setting the property's value to `null`, \",\n \"or using `delete` to remove it altogether.\",\n ].join(\"\"));\n default:\n throw new RangeError([\n `Cannot assign ${type} value at ${printPath(path)}. `,\n `All JSON primitive datatypes (object, array, string, number, boolean, null) `,\n `are supported in an Automerge document; ${type} values are not. `,\n ].join(\"\"));\n }\n}\n// When we assign a value to a property in a proxy we recursively walk through\n// the value we are assigning and copy it into the document. This is generally\n// desirable behaviour. However, a very common bug is to accidentally assign a\n// value which is already in the document to another key within the same\n// document, this often leads to surprising behaviour where users expected to\n// _move_ the object, but it is instead copied. To avoid this we check if the\n// value is from the same document and if it is we throw an error, this means\n// we require an explicit Object.assign call to copy the object, thus avoiding\n// the footgun\nfunction isSameDocument(val, context) {\n var _b, _c;\n // Date is technically an object, but immutable, so allowing people to assign\n // a date from one place in the document to another place in the document is\n // not likely to be a bug\n if (val instanceof Date) {\n return false;\n }\n // this depends on __wbg_ptr being the wasm pointer\n // a new version of wasm-bindgen will break this\n // but the tests should expose the break\n if (val && ((_c = (_b = val[STATE]) === null || _b === void 0 ? void 0 : _b.handle) === null || _c === void 0 ? void 0 : _c.__wbg_ptr) === context.__wbg_ptr) {\n return true;\n }\n return false;\n}\nconst MapHandler = {\n get(target, key) {\n const { context, objectId, cache } = target;\n if (key === Symbol.toStringTag) {\n return target[Symbol.toStringTag];\n }\n if (key === OBJECT_ID)\n return objectId;\n if (key === IS_PROXY)\n return true;\n if (key === TRACE)\n return target.trace;\n if (key === STATE)\n return { handle: context };\n if (!cache[key]) {\n cache[key] = valueAt(target, key);\n }\n return cache[key];\n },\n set(target, key, val) {\n const { context, objectId, path } = target;\n target.cache = {}; // reset cache on set\n if (isSameDocument(val, context)) {\n throw new RangeError(\"Cannot create a reference to an existing document object\");\n }\n if (key === TRACE) {\n target.trace = val;\n return true;\n }\n if (key === CLEAR_CACHE) {\n return true;\n }\n const [value, datatype] = import_value(val, [...path, key], context);\n switch (datatype) {\n case \"list\": {\n const list = context.putObject(objectId, key, []);\n const proxyList = listProxy(context, list, [...path, key]);\n for (let i = 0; i < value.length; i++) {\n proxyList[i] = value[i];\n }\n break;\n }\n case \"text\": {\n context.putObject(objectId, key, value);\n break;\n }\n case \"map\": {\n const map = context.putObject(objectId, key, {});\n const proxyMap = mapProxy(context, map, [...path, key]);\n for (const key in value) {\n proxyMap[key] = value[key];\n }\n break;\n }\n default:\n context.put(objectId, key, value, datatype);\n }\n return true;\n },\n deleteProperty(target, key) {\n const { context, objectId } = target;\n target.cache = {}; // reset cache on delete\n context.delete(objectId, key);\n return true;\n },\n has(target, key) {\n const value = this.get(target, key);\n return value !== undefined;\n },\n getOwnPropertyDescriptor(target, key) {\n // const { context, objectId } = target\n const value = this.get(target, key);\n if (typeof value !== \"undefined\") {\n return {\n configurable: true,\n enumerable: true,\n value,\n };\n }\n },\n ownKeys(target) {\n const { context, objectId } = target;\n // FIXME - this is a tmp workaround until fix the dupe key bug in keys()\n const keys = context.keys(objectId);\n return [...new Set(keys)];\n },\n};\nconst ListHandler = {\n get(target, index) {\n const { context, objectId } = target;\n index = parseListIndex(index);\n if (index === Symbol.hasInstance) {\n return (instance) => {\n return Array.isArray(instance);\n };\n }\n if (index === Symbol.toStringTag) {\n return target[Symbol.toStringTag];\n }\n if (index === OBJECT_ID)\n return objectId;\n if (index === IS_PROXY)\n return true;\n if (index === TRACE)\n return target.trace;\n if (index === STATE)\n return { handle: context };\n if (index === \"length\")\n return context.length(objectId);\n if (typeof index === \"number\") {\n return valueAt(target, index);\n }\n else {\n return listMethods(target)[index];\n }\n },\n set(target, index, val) {\n const { context, objectId, path } = target;\n index = parseListIndex(index);\n if (isSameDocument(val, context)) {\n throw new RangeError(\"Cannot create a reference to an existing document object\");\n }\n if (index === CLEAR_CACHE) {\n return true;\n }\n if (index === TRACE) {\n target.trace = val;\n return true;\n }\n if (typeof index == \"string\") {\n throw new RangeError(\"list index must be a number\");\n }\n const [value, datatype] = import_value(val, [...path, index], context);\n switch (datatype) {\n case \"list\": {\n let list;\n if (index >= context.length(objectId)) {\n list = context.insertObject(objectId, index, []);\n }\n else {\n list = context.putObject(objectId, index, []);\n }\n const proxyList = listProxy(context, list, [...path, index]);\n proxyList.splice(0, 0, ...value);\n break;\n }\n case \"text\": {\n if (index >= context.length(objectId)) {\n context.insertObject(objectId, index, value);\n }\n else {\n context.putObject(objectId, index, value);\n }\n break;\n }\n case \"map\": {\n let map;\n if (index >= context.length(objectId)) {\n map = context.insertObject(objectId, index, {});\n }\n else {\n map = context.putObject(objectId, index, {});\n }\n const proxyMap = mapProxy(context, map, [...path, index]);\n for (const key in value) {\n proxyMap[key] = value[key];\n }\n break;\n }\n default:\n if (index >= context.length(objectId)) {\n context.insert(objectId, index, value, datatype);\n }\n else {\n context.put(objectId, index, value, datatype);\n }\n }\n return true;\n },\n deleteProperty(target, index) {\n const { context, objectId } = target;\n index = parseListIndex(index);\n const elem = context.get(objectId, index);\n if (elem != null && elem[0] == \"counter\") {\n throw new TypeError(\"Unsupported operation: deleting a counter from a list\");\n }\n context.delete(objectId, index);\n return true;\n },\n has(target, index) {\n const { context, objectId } = target;\n index = parseListIndex(index);\n if (typeof index === \"number\") {\n return index < context.length(objectId);\n }\n return index === \"length\";\n },\n getOwnPropertyDescriptor(target, index) {\n const { context, objectId } = target;\n if (index === \"length\")\n return { writable: true, value: context.length(objectId) };\n if (index === OBJECT_ID)\n return { configurable: false, enumerable: false, value: objectId };\n index = parseListIndex(index);\n const value = valueAt(target, index);\n return { configurable: true, enumerable: true, value };\n },\n getPrototypeOf(target) {\n return Object.getPrototypeOf(target);\n },\n ownKeys( /*target*/) {\n const keys = [];\n // uncommenting this causes assert.deepEqual() to fail when comparing to a pojo array\n // but not uncommenting it causes for (i in list) {} to not enumerate values properly\n //const {context, objectId } = target\n //for (let i = 0; i < target.context.length(objectId); i++) { keys.push(i.toString()) }\n keys.push(\"length\");\n return keys;\n },\n};\nconst TextHandler = Object.assign({}, ListHandler, {\n get(target, index) {\n const { context, objectId } = target;\n index = parseListIndex(index);\n if (index === Symbol.hasInstance) {\n return (instance) => {\n return Array.isArray(instance);\n };\n }\n if (index === Symbol.toStringTag) {\n return target[Symbol.toStringTag];\n }\n if (index === OBJECT_ID)\n return objectId;\n if (index === IS_PROXY)\n return true;\n if (index === TRACE)\n return target.trace;\n if (index === STATE)\n return { handle: context };\n if (index === \"length\")\n return context.length(objectId);\n if (typeof index === \"number\") {\n return valueAt(target, index);\n }\n else {\n return textMethods(target)[index] || listMethods(target)[index];\n }\n },\n getPrototypeOf( /*target*/) {\n return Object.getPrototypeOf(new Text());\n },\n});\nexport function mapProxy(context, objectId, path) {\n const target = {\n context,\n objectId,\n path: path || [],\n cache: {},\n };\n const proxied = {};\n Object.assign(proxied, target);\n const result = new Proxy(proxied, MapHandler);\n // conversion through unknown is necessary because the types are so different\n return result;\n}\nexport function listProxy(context, objectId, path) {\n const target = {\n context,\n objectId,\n path: path || [],\n cache: {},\n };\n const proxied = [];\n Object.assign(proxied, target);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return new Proxy(proxied, ListHandler);\n}\nexport function textProxy(context, objectId, path) {\n const target = {\n context,\n objectId,\n path: path || [],\n cache: {},\n };\n const proxied = {};\n Object.assign(proxied, target);\n return new Proxy(proxied, TextHandler);\n}\nexport function rootProxy(context) {\n /* eslint-disable-next-line */\n return mapProxy(context, \"_root\", []);\n}\nfunction listMethods(target) {\n const { context, objectId, path } = target;\n const methods = {\n at(index) {\n return valueAt(target, index);\n },\n deleteAt(index, numDelete) {\n if (typeof numDelete === \"number\") {\n context.splice(objectId, index, numDelete);\n }\n else {\n context.delete(objectId, index);\n }\n return this;\n },\n fill(val, start, end) {\n const [value, datatype] = import_value(val, [...path, start], context);\n const length = context.length(objectId);\n start = parseListIndex(start || 0);\n end = parseListIndex(end || length);\n for (let i = start; i < Math.min(end, length); i++) {\n if (datatype === \"list\" || datatype === \"map\") {\n context.putObject(objectId, i, value);\n }\n else if (datatype === \"text\") {\n context.putObject(objectId, i, value);\n }\n else {\n context.put(objectId, i, value, datatype);\n }\n }\n return this;\n },\n indexOf(searchElement, start = 0) {\n const length = context.length(objectId);\n for (let i = start; i < length; i++) {\n const valueWithType = context.getWithType(objectId, i);\n if (!valueWithType) {\n continue;\n }\n const [valType, value] = valueWithType;\n // Either the target element is an object, and we return if we have found\n // the same object or it is a primitive value and we return if it matches\n // the current value\n const isObject = [\"map\", \"list\", \"text\"].includes(valType);\n if (!isObject) {\n // If the element is not an object, then check if the value is equal to the target\n if (value === searchElement) {\n return i;\n }\n else {\n continue;\n }\n }\n // if it's an object, but the type of the search element is a string, then we\n // need to check if the object is a text object with the same value as the search element\n if (valType === \"text\" && typeof searchElement === \"string\") {\n if (searchElement === valueAt(target, i)) {\n return i;\n }\n }\n // The only possible match now is if the searchElement is an object already in the\n // automerge document with the same object ID as the value\n if (searchElement[OBJECT_ID] === value) {\n return i;\n }\n }\n return -1;\n },\n insertAt(index, ...values) {\n this.splice(index, 0, ...values);\n return this;\n },\n pop() {\n const length = context.length(objectId);\n if (length == 0) {\n return undefined;\n }\n const last = valueAt(target, length - 1);\n context.delete(objectId, length - 1);\n return last;\n },\n push(...values) {\n const len = context.length(objectId);\n this.splice(len, 0, ...values);\n return context.length(objectId);\n },\n shift() {\n if (context.length(objectId) == 0)\n return;\n const first = valueAt(target, 0);\n context.delete(objectId, 0);\n return first;\n },\n splice(index, del, ...vals) {\n index = parseListIndex(index);\n // if del is undefined, delete until the end of the list\n if (typeof del !== \"number\") {\n del = context.length(objectId) - index;\n }\n del = parseListIndex(del);\n for (const val of vals) {\n if (isSameDocument(val, context)) {\n throw new RangeError(\"Cannot create a reference to an existing document object\");\n }\n }\n const result = [];\n for (let i = 0; i < del; i++) {\n const value = valueAt(target, index);\n if (value !== undefined) {\n result.push(value);\n }\n context.delete(objectId, index);\n }\n const values = vals.map((val, index) => {\n try {\n return import_value(val, [...path], context);\n }\n catch (e) {\n if (e instanceof RangeError) {\n throw new RangeError(`${e.message} (at index ${index} in the input)`);\n }\n else {\n throw e;\n }\n }\n });\n for (const [value, datatype] of values) {\n switch (datatype) {\n case \"list\": {\n const list = context.insertObject(objectId, index, []);\n const proxyList = listProxy(context, list, [...path, index]);\n proxyList.splice(0, 0, ...value);\n break;\n }\n case \"text\": {\n context.insertObject(objectId, index, value);\n break;\n }\n case \"map\": {\n const map = context.insertObject(objectId, index, {});\n const proxyMap = mapProxy(context, map, [...path, index]);\n for (const key in value) {\n proxyMap[key] = value[key];\n }\n break;\n }\n default:\n context.insert(objectId, index, value, datatype);\n }\n index += 1;\n }\n return result;\n },\n unshift(...values) {\n this.splice(0, 0, ...values);\n return context.length(objectId);\n },\n entries() {\n let i = 0;\n const iterator = {\n next: () => {\n const value = valueAt(target, i);\n if (value === undefined) {\n return { value: undefined, done: true };\n }\n else {\n return { value: [i++, value], done: false };\n }\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n },\n keys() {\n let i = 0;\n const len = context.length(objectId);\n const iterator = {\n next: () => {\n if (i < len) {\n return { value: i++, done: false };\n }\n return { value: undefined, done: true };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n },\n values() {\n let i = 0;\n const iterator = {\n next: () => {\n const value = valueAt(target, i++);\n if (value === undefined) {\n return { value: undefined, done: true };\n }\n else {\n return { value, done: false };\n }\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n },\n toArray() {\n const list = [];\n let value;\n do {\n value = valueAt(target, list.length);\n if (value !== undefined) {\n list.push(value);\n }\n } while (value !== undefined);\n return list;\n },\n map(f) {\n return this.toArray().map(f);\n },\n toString() {\n return this.toArray().toString();\n },\n toLocaleString() {\n return this.toArray().toLocaleString();\n },\n forEach(f) {\n return this.toArray().forEach(f);\n },\n // todo: real concat function is different\n concat(other) {\n return this.toArray().concat(other);\n },\n every(f) {\n return this.toArray().every(f);\n },\n filter(f) {\n return this.toArray().filter(f);\n },\n find(f) {\n let index = 0;\n for (const v of this) {\n if (f(v, index)) {\n return v;\n }\n index += 1;\n }\n },\n findIndex(f) {\n let index = 0;\n for (const v of this) {\n if (f(v, index)) {\n return index;\n }\n index += 1;\n }\n return -1;\n },\n includes(elem) {\n return this.find(e => e === elem) !== undefined;\n },\n join(sep) {\n return this.toArray().join(sep);\n },\n reduce(f, initialValue) {\n return this.toArray().reduce(f, initialValue);\n },\n reduceRight(f, initialValue) {\n return this.toArray().reduceRight(f, initialValue);\n },\n lastIndexOf(search, fromIndex = +Infinity) {\n // this can be faster\n return this.toArray().lastIndexOf(search, fromIndex);\n },\n slice(index, num) {\n return this.toArray().slice(index, num);\n },\n some(f) {\n let index = 0;\n for (const v of this) {\n if (f(v, index)) {\n return true;\n }\n index += 1;\n }\n return false;\n },\n [Symbol.iterator]: function* () {\n let i = 0;\n let value = valueAt(target, i);\n while (value !== undefined) {\n yield value;\n i += 1;\n value = valueAt(target, i);\n }\n },\n };\n return methods;\n}\nfunction textMethods(target) {\n const { context, objectId } = target;\n const methods = {\n set(index, value) {\n return (this[index] = value);\n },\n get(index) {\n return this[index];\n },\n toString() {\n return context.text(objectId).replace(//g, \"\");\n },\n toSpans() {\n const spans = [];\n let chars = \"\";\n const length = context.length(objectId);\n for (let i = 0; i < length; i++) {\n const value = this[i];\n if (typeof value === \"string\") {\n chars += value;\n }\n else {\n if (chars.length > 0) {\n spans.push(chars);\n chars = \"\";\n }\n spans.push(value);\n }\n }\n if (chars.length > 0) {\n spans.push(chars);\n }\n return spans;\n },\n toJSON() {\n return this.toString();\n },\n indexOf(o, start = 0) {\n const text = context.text(objectId);\n return text.indexOf(o, start);\n },\n insertAt(index, ...values) {\n if (values.every(v => typeof v === \"string\")) {\n context.splice(objectId, index, 0, values.join(\"\"));\n }\n else {\n listMethods(target).insertAt(index, ...values);\n }\n },\n };\n return methods;\n}\nfunction printPath(path) {\n // print the path as a json pointer\n const jsonPointerComponents = path.map(component => {\n // if its a number just turn it into a string\n if (typeof component === \"number\") {\n return component.toString();\n }\n else if (typeof component === \"string\") {\n // otherwise we have to escape `/` and `~` characters\n return component.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n }\n });\n if (path.length === 0) {\n return \"\";\n }\n else {\n return \"/\" + jsonPointerComponents.join(\"/\");\n }\n}\n/*\n * Check if an object is a {@link ImmutableString}\n */\nexport function isImmutableString(obj) {\n // We used to determine whether something was a ImmutableString by doing an instanceof check, but\n // this doesn't work if the automerge module is loaded twice somehow. Instead, use the presence\n // of a symbol to determine if something is a ImmutableString\n return (typeof obj === \"object\" &&\n obj !== null &&\n Object.prototype.hasOwnProperty.call(obj, IMMUTABLE_STRING));\n}\nexport function isCounter(obj) {\n // We used to determine whether something was a Counter by doing an instanceof check, but\n // this doesn't work if the automerge module is loaded twice somehow. Instead, use the presence\n // of a symbol to determine if something is a Counter\n return (typeof obj === \"object\" &&\n obj !== null &&\n Object.prototype.hasOwnProperty.call(obj, COUNTER));\n}\n/*\n * Check if an object is a {@link Text}\n */\nexport function isText(obj) {\n // We used to determine whether something was a Text by doing an instanceof check, but\n // this doesn't work if the automerge module is loaded twice somehow. Instead, use the presence\n // of a symbol to determine if something is a TEXT\n return (typeof obj === \"object\" &&\n obj !== null &&\n Object.prototype.hasOwnProperty.call(obj, TEXT));\n}\n", "let wasm;\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachedUint8ArrayMemory0 = null;\n\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nconst cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } );\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachedDataViewMemory0 = null;\n\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_export_4.set(idx, obj);\n return idx;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n const idx = addToExternrefTable0(e);\n wasm.__wbindgen_exn_store(idx);\n }\n}\n\nconst cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } );\n\nif (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); };\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_export_4.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nfunction _assertClass(instance, klass) {\n if (!(instance instanceof klass)) {\n throw new Error(`expected instance of ${klass.name}`);\n }\n}\n/**\n * @param {any} options\n * @returns {Automerge}\n */\nexport function create(options) {\n const ret = wasm.create(options);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return Automerge.__wrap(ret[0]);\n}\n\n/**\n * @param {Uint8Array} data\n * @param {any} options\n * @returns {Automerge}\n */\nexport function load(data, options) {\n const ret = wasm.load(data, options);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return Automerge.__wrap(ret[0]);\n}\n\n/**\n * @param {any} change\n * @returns {Uint8Array}\n */\nexport function encodeChange(change) {\n const ret = wasm.encodeChange(change);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * @param {Uint8Array} change\n * @returns {DecodedChange}\n */\nexport function decodeChange(change) {\n const ret = wasm.decodeChange(change);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * @returns {SyncState}\n */\nexport function initSyncState() {\n const ret = wasm.initSyncState();\n return SyncState.__wrap(ret);\n}\n\n/**\n * @param {any} state\n * @returns {SyncState}\n */\nexport function importSyncState(state) {\n const ret = wasm.importSyncState(state);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return SyncState.__wrap(ret[0]);\n}\n\n/**\n * @param {SyncState} state\n * @returns {JsSyncState}\n */\nexport function exportSyncState(state) {\n _assertClass(state, SyncState);\n const ret = wasm.exportSyncState(state.__wbg_ptr);\n return ret;\n}\n\n/**\n * @param {any} message\n * @returns {SyncMessage}\n */\nexport function encodeSyncMessage(message) {\n const ret = wasm.encodeSyncMessage(message);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * @param {Uint8Array} msg\n * @returns {DecodedSyncMessage}\n */\nexport function decodeSyncMessage(msg) {\n const ret = wasm.decodeSyncMessage(msg);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * @param {SyncState} state\n * @returns {Uint8Array}\n */\nexport function encodeSyncState(state) {\n _assertClass(state, SyncState);\n const ret = wasm.encodeSyncState(state.__wbg_ptr);\n return ret;\n}\n\n/**\n * @param {Uint8Array} data\n * @returns {SyncState}\n */\nexport function decodeSyncState(data) {\n const ret = wasm.decodeSyncState(data);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return SyncState.__wrap(ret[0]);\n}\n\nconst AutomergeFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_automerge_free(ptr >>> 0, 1));\n\nexport class Automerge {\n\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(Automerge.prototype);\n obj.__wbg_ptr = ptr;\n AutomergeFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n AutomergeFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_automerge_free(ptr, 0);\n }\n /**\n * @param {string | null} [actor]\n * @returns {Automerge}\n */\n static new(actor) {\n var ptr0 = isLikeNone(actor) ? 0 : passStringToWasm0(actor, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.automerge_new(ptr0, len0);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return Automerge.__wrap(ret[0]);\n }\n /**\n * @param {string | null} [actor]\n * @returns {Automerge}\n */\n clone(actor) {\n var ptr0 = isLikeNone(actor) ? 0 : passStringToWasm0(actor, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.automerge_clone(this.__wbg_ptr, ptr0, len0);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return Automerge.__wrap(ret[0]);\n }\n /**\n * @param {string | null | undefined} actor\n * @param {any} heads\n * @returns {Automerge}\n */\n fork(actor, heads) {\n var ptr0 = isLikeNone(actor) ? 0 : passStringToWasm0(actor, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.automerge_fork(this.__wbg_ptr, ptr0, len0, heads);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return Automerge.__wrap(ret[0]);\n }\n /**\n * @returns {number}\n */\n pendingOps() {\n const ret = wasm.automerge_pendingOps(this.__wbg_ptr);\n return ret;\n }\n /**\n * @param {string | null} [message]\n * @param {number | null} [time]\n * @returns {Hash | null}\n */\n commit(message, time) {\n var ptr0 = isLikeNone(message) ? 0 : passStringToWasm0(message, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.automerge_commit(this.__wbg_ptr, ptr0, len0, !isLikeNone(time), isLikeNone(time) ? 0 : time);\n return ret;\n }\n /**\n * @param {Automerge} other\n * @returns {Heads}\n */\n merge(other) {\n _assertClass(other, Automerge);\n const ret = wasm.automerge_merge(this.__wbg_ptr, other.__wbg_ptr);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @returns {number}\n */\n rollback() {\n const ret = wasm.automerge_rollback(this.__wbg_ptr);\n return ret;\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {Array<any>}\n */\n keys(obj, heads) {\n const ret = wasm.automerge_keys(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {string}\n */\n text(obj, heads) {\n let deferred2_0;\n let deferred2_1;\n try {\n const ret = wasm.automerge_text(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n var ptr1 = ret[0];\n var len1 = ret[1];\n if (ret[3]) {\n ptr1 = 0; len1 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {Array<any>}\n */\n spans(obj, heads) {\n const ret = wasm.automerge_spans(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {number} start\n * @param {number} delete_count\n * @param {any} text\n */\n splice(obj, start, delete_count, text) {\n const ret = wasm.automerge_splice(this.__wbg_ptr, obj, start, delete_count, text);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {string} new_text\n */\n updateText(obj, new_text) {\n const ret = wasm.automerge_updateText(this.__wbg_ptr, obj, new_text);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {Span[]} args\n */\n updateSpans(obj, args) {\n const ret = wasm.automerge_updateSpans(this.__wbg_ptr, obj, args);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {any} obj\n * @param {any} value\n * @param {any} datatype\n */\n push(obj, value, datatype) {\n const ret = wasm.automerge_push(this.__wbg_ptr, obj, value, datatype);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {ObjType} value\n * @returns {ObjID}\n */\n pushObject(obj, value) {\n let deferred2_0;\n let deferred2_1;\n try {\n const ret = wasm.automerge_pushObject(this.__wbg_ptr, obj, value);\n var ptr1 = ret[0];\n var len1 = ret[1];\n if (ret[3]) {\n ptr1 = 0; len1 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {any} obj\n * @param {number} index\n * @param {any} value\n * @param {any} datatype\n */\n insert(obj, index, value, datatype) {\n const ret = wasm.automerge_insert(this.__wbg_ptr, obj, index, value, datatype);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {number} index\n * @param {{[key: string]: MaterializeValue}} block\n */\n splitBlock(obj, index, block) {\n const ret = wasm.automerge_splitBlock(this.__wbg_ptr, obj, index, block);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {number} index\n */\n joinBlock(obj, index) {\n const ret = wasm.automerge_joinBlock(this.__wbg_ptr, obj, index);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {number} index\n * @param {{[key: string]: MaterializeValue}} block\n */\n updateBlock(obj, index, block) {\n const ret = wasm.automerge_updateBlock(this.__wbg_ptr, obj, index, block);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {any} text\n * @param {number} index\n * @param {Array<any> | null} [heads]\n * @returns {any}\n */\n getBlock(text, index, heads) {\n const ret = wasm.automerge_getBlock(this.__wbg_ptr, text, index, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {ObjID} obj\n * @param {number} index\n * @param {ObjType} value\n * @returns {ObjID}\n */\n insertObject(obj, index, value) {\n let deferred2_0;\n let deferred2_1;\n try {\n const ret = wasm.automerge_insertObject(this.__wbg_ptr, obj, index, value);\n var ptr1 = ret[0];\n var len1 = ret[1];\n if (ret[3]) {\n ptr1 = 0; len1 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {any} obj\n * @param {any} prop\n * @param {any} value\n * @param {any} datatype\n */\n put(obj, prop, value, datatype) {\n const ret = wasm.automerge_put(this.__wbg_ptr, obj, prop, value, datatype);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {Prop} prop\n * @param {ObjType} value\n * @returns {ObjID}\n */\n putObject(obj, prop, value) {\n const ret = wasm.automerge_putObject(this.__wbg_ptr, obj, prop, value);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {ObjID} obj\n * @param {Prop} prop\n * @param {number} value\n */\n increment(obj, prop, value) {\n const ret = wasm.automerge_increment(this.__wbg_ptr, obj, prop, value);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {any} obj\n * @param {any} prop\n * @param {Array<any> | null} [heads]\n * @returns {any}\n */\n get(obj, prop, heads) {\n const ret = wasm.automerge_get(this.__wbg_ptr, obj, prop, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {any} prop\n * @param {Array<any> | null} [heads]\n * @returns {any}\n */\n getWithType(obj, prop, heads) {\n const ret = wasm.automerge_getWithType(this.__wbg_ptr, obj, prop, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {object}\n */\n objInfo(obj, heads) {\n const ret = wasm.automerge_objInfo(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {any} arg\n * @param {Array<any> | null} [heads]\n * @returns {Array<any>}\n */\n getAll(obj, arg, heads) {\n const ret = wasm.automerge_getAll(this.__wbg_ptr, obj, arg, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {boolean} enable\n * @returns {boolean}\n */\n enableFreeze(enable) {\n const ret = wasm.automerge_enableFreeze(this.__wbg_ptr, enable);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0] !== 0;\n }\n /**\n * @param {string} datatype\n * @param {Function} construct\n * @param {(arg: any) => any | undefined} deconstruct\n */\n registerDatatype(datatype, construct, deconstruct) {\n const ret = wasm.automerge_registerDatatype(this.__wbg_ptr, datatype, construct, deconstruct);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {any} object\n * @param {any} meta\n * @returns {any}\n */\n applyPatches(object, meta) {\n const ret = wasm.automerge_applyPatches(this.__wbg_ptr, object, meta);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} object\n * @param {any} meta\n * @returns {any}\n */\n applyAndReturnPatches(object, meta) {\n const ret = wasm.automerge_applyAndReturnPatches(this.__wbg_ptr, object, meta);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @returns {Patch[]}\n */\n diffIncremental() {\n const ret = wasm.automerge_diffIncremental(this.__wbg_ptr);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n updateDiffCursor() {\n wasm.automerge_updateDiffCursor(this.__wbg_ptr);\n }\n resetDiffCursor() {\n wasm.automerge_resetDiffCursor(this.__wbg_ptr);\n }\n /**\n * @param {Heads} before\n * @param {Heads} after\n * @returns {Patch[]}\n */\n diff(before, after) {\n const ret = wasm.automerge_diff(this.__wbg_ptr, before, after);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Heads} heads\n */\n isolate(heads) {\n const ret = wasm.automerge_isolate(this.__wbg_ptr, heads);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n integrate() {\n wasm.automerge_integrate(this.__wbg_ptr);\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {number}\n */\n length(obj, heads) {\n const ret = wasm.automerge_length(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0];\n }\n /**\n * @param {ObjID} obj\n * @param {Prop} prop\n */\n delete(obj, prop) {\n const ret = wasm.automerge_delete(this.__wbg_ptr, obj, prop);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @returns {Uint8Array}\n */\n save() {\n const ret = wasm.automerge_save(this.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Uint8Array}\n */\n saveIncremental() {\n const ret = wasm.automerge_saveIncremental(this.__wbg_ptr);\n return ret;\n }\n /**\n * @param {Heads} heads\n * @returns {Uint8Array}\n */\n saveSince(heads) {\n const ret = wasm.automerge_saveSince(this.__wbg_ptr, heads);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @returns {Uint8Array}\n */\n saveNoCompress() {\n const ret = wasm.automerge_saveNoCompress(this.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Uint8Array}\n */\n saveAndVerify() {\n const ret = wasm.automerge_saveAndVerify(this.__wbg_ptr);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Uint8Array} data\n * @returns {number}\n */\n loadIncremental(data) {\n const ret = wasm.automerge_loadIncremental(this.__wbg_ptr, data);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0];\n }\n /**\n * @param {Change[]} changes\n */\n applyChanges(changes) {\n const ret = wasm.automerge_applyChanges(this.__wbg_ptr, changes);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {Heads} have_deps\n * @returns {Change[]}\n */\n getChanges(have_deps) {\n const ret = wasm.automerge_getChanges(this.__wbg_ptr, have_deps);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Heads} have_deps\n * @returns {ChangeMetadata[]}\n */\n getChangesMeta(have_deps) {\n const ret = wasm.automerge_getChangesMeta(this.__wbg_ptr, have_deps);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Hash} hash\n * @returns {Change | null}\n */\n getChangeByHash(hash) {\n const ret = wasm.automerge_getChangeByHash(this.__wbg_ptr, hash);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Hash} hash\n * @returns {ChangeMetadata | null}\n */\n getChangeMetaByHash(hash) {\n const ret = wasm.automerge_getChangeMetaByHash(this.__wbg_ptr, hash);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Hash} hash\n * @returns {DecodedChange | null}\n */\n getDecodedChangeByHash(hash) {\n const ret = wasm.automerge_getDecodedChangeByHash(this.__wbg_ptr, hash);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Automerge} other\n * @returns {Change[]}\n */\n getChangesAdded(other) {\n _assertClass(other, Automerge);\n const ret = wasm.automerge_getChangesAdded(this.__wbg_ptr, other.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Heads}\n */\n getHeads() {\n const ret = wasm.automerge_getHeads(this.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Actor}\n */\n getActorId() {\n let deferred1_0;\n let deferred1_1;\n try {\n const ret = wasm.automerge_getActorId(this.__wbg_ptr);\n deferred1_0 = ret[0];\n deferred1_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);\n }\n }\n /**\n * @returns {Change | null}\n */\n getLastLocalChange() {\n const ret = wasm.automerge_getLastLocalChange(this.__wbg_ptr);\n return ret;\n }\n dump() {\n wasm.automerge_dump(this.__wbg_ptr);\n }\n /**\n * @param {Array<any> | null} [heads]\n * @returns {Array<any>}\n */\n getMissingDeps(heads) {\n const ret = wasm.automerge_getMissingDeps(this.__wbg_ptr, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {SyncState} state\n * @param {SyncMessage} message\n */\n receiveSyncMessage(state, message) {\n _assertClass(state, SyncState);\n const ret = wasm.automerge_receiveSyncMessage(this.__wbg_ptr, state.__wbg_ptr, message);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {SyncState} state\n * @returns {SyncMessage | null}\n */\n generateSyncMessage(state) {\n _assertClass(state, SyncState);\n const ret = wasm.automerge_generateSyncMessage(this.__wbg_ptr, state.__wbg_ptr);\n return ret;\n }\n /**\n * @param {any} meta\n * @returns {MaterializeValue}\n */\n toJS(meta) {\n const ret = wasm.automerge_toJS(this.__wbg_ptr, meta);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null | undefined} heads\n * @param {any} meta\n * @returns {any}\n */\n materialize(obj, heads, meta) {\n const ret = wasm.automerge_materialize(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads), meta);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {any} position\n * @param {Array<any> | null | undefined} heads\n * @param {any} move_cursor\n * @returns {string}\n */\n getCursor(obj, position, heads, move_cursor) {\n let deferred2_0;\n let deferred2_1;\n try {\n const ret = wasm.automerge_getCursor(this.__wbg_ptr, obj, position, isLikeNone(heads) ? 0 : addToExternrefTable0(heads), move_cursor);\n var ptr1 = ret[0];\n var len1 = ret[1];\n if (ret[3]) {\n ptr1 = 0; len1 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {any} obj\n * @param {any} cursor\n * @param {Array<any> | null} [heads]\n * @returns {number}\n */\n getCursorPosition(obj, cursor, heads) {\n const ret = wasm.automerge_getCursorPosition(this.__wbg_ptr, obj, cursor, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0];\n }\n /**\n * @param {string | null} [message]\n * @param {number | null} [time]\n * @returns {Hash}\n */\n emptyChange(message, time) {\n var ptr0 = isLikeNone(message) ? 0 : passStringToWasm0(message, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.automerge_emptyChange(this.__wbg_ptr, ptr0, len0, !isLikeNone(time), isLikeNone(time) ? 0 : time);\n return ret;\n }\n /**\n * @param {any} obj\n * @param {any} range\n * @param {any} name\n * @param {any} value\n * @param {any} datatype\n */\n mark(obj, range, name, value, datatype) {\n const ret = wasm.automerge_mark(this.__wbg_ptr, obj, range, name, value, datatype);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {MarkRange} range\n * @param {string} name\n */\n unmark(obj, range, name) {\n const ret = wasm.automerge_unmark(this.__wbg_ptr, obj, range, name);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {any}\n */\n marks(obj, heads) {\n const ret = wasm.automerge_marks(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {number} index\n * @param {Array<any> | null} [heads]\n * @returns {object}\n */\n marksAt(obj, index, heads) {\n const ret = wasm.automerge_marksAt(this.__wbg_ptr, obj, index, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {SyncState} state\n * @returns {boolean}\n */\n hasOurChanges(state) {\n _assertClass(state, SyncState);\n const ret = wasm.automerge_hasOurChanges(this.__wbg_ptr, state.__wbg_ptr);\n return ret !== 0;\n }\n /**\n * @returns {Hash[]}\n */\n topoHistoryTraversal() {\n const ret = wasm.automerge_topoHistoryTraversal(this.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Stats}\n */\n stats() {\n const ret = wasm.automerge_stats(this.__wbg_ptr);\n return ret;\n }\n}\n\nconst SyncStateFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_syncstate_free(ptr >>> 0, 1));\n\nexport class SyncState {\n\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(SyncState.prototype);\n obj.__wbg_ptr = ptr;\n SyncStateFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n SyncStateFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_syncstate_free(ptr, 0);\n }\n /**\n * @returns {Heads}\n */\n get sharedHeads() {\n const ret = wasm.syncstate_sharedHeads(this.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Heads}\n */\n get lastSentHeads() {\n const ret = wasm.syncstate_lastSentHeads(this.__wbg_ptr);\n return ret;\n }\n /**\n * @param {Heads} heads\n */\n set lastSentHeads(heads) {\n const ret = wasm.syncstate_set_lastSentHeads(this.__wbg_ptr, heads);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {Heads} hashes\n */\n set sentHashes(hashes) {\n const ret = wasm.syncstate_set_sentHashes(this.__wbg_ptr, hashes);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @returns {SyncState}\n */\n clone() {\n const ret = wasm.syncstate_clone(this.__wbg_ptr);\n return SyncState.__wrap(ret);\n }\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n\n } catch (e) {\n if (module.headers.get('Content-Type') != 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n\n } else {\n return instance;\n }\n }\n}\n\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbg_String_8f0eb39a4a4c2f66 = function(arg0, arg1) {\n const ret = String(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg_apply_eb9e9b97497f91e4 = function() { return handleError(function (arg0, arg1, arg2) {\n const ret = Reflect.apply(arg0, arg1, arg2);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_assign_3627b8559449930a = function(arg0, arg1) {\n const ret = Object.assign(arg0, arg1);\n return ret;\n };\n imports.wbg.__wbg_buffer_609cc3eee51ed158 = function(arg0) {\n const ret = arg0.buffer;\n return ret;\n };\n imports.wbg.__wbg_call_672a4d21634d4a24 = function() { return handleError(function (arg0, arg1) {\n const ret = arg0.call(arg1);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_call_7cccdd69e0791ae2 = function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.call(arg1, arg2);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_concat_9de968491c4340cf = function(arg0, arg1) {\n const ret = arg0.concat(arg1);\n return ret;\n };\n imports.wbg.__wbg_crypto_574e78ad8b13b65f = function(arg0) {\n const ret = arg0.crypto;\n return ret;\n };\n imports.wbg.__wbg_defineProperty_a3ddad9901e2d29e = function(arg0, arg1, arg2) {\n const ret = Object.defineProperty(arg0, arg1, arg2);\n return ret;\n };\n imports.wbg.__wbg_deleteProperty_96363d4a1d977c97 = function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.deleteProperty(arg0, arg1);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_done_769e5ede4b31c67b = function(arg0) {\n const ret = arg0.done;\n return ret;\n };\n imports.wbg.__wbg_entries_3265d4158b33e5dc = function(arg0) {\n const ret = Object.entries(arg0);\n return ret;\n };\n imports.wbg.__wbg_error_7534b8e9a36f1ab4 = function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);\n }\n };\n imports.wbg.__wbg_for_4ff07bddd743c5e7 = function(arg0, arg1) {\n const ret = Symbol.for(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbg_freeze_ef6d70cf38e8d948 = function(arg0) {\n const ret = Object.freeze(arg0);\n return ret;\n };\n imports.wbg.__wbg_from_2a5d3e218e67aa85 = function(arg0) {\n const ret = Array.from(arg0);\n return ret;\n };\n imports.wbg.__wbg_getRandomValues_b8f5dbd5f3995a9e = function() { return handleError(function (arg0, arg1) {\n arg0.getRandomValues(arg1);\n }, arguments) };\n imports.wbg.__wbg_getTime_46267b1c24877e30 = function(arg0) {\n const ret = arg0.getTime();\n return ret;\n };\n imports.wbg.__wbg_get_67b2ba62fc30de12 = function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.get(arg0, arg1);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_get_b9b93047fe3cf45b = function(arg0, arg1) {\n const ret = arg0[arg1 >>> 0];\n return ret;\n };\n imports.wbg.__wbg_instanceof_ArrayBuffer_e14585432e3737fc = function(arg0) {\n let result;\n try {\n result = arg0 instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_Date_e9a9be8b9cea7890 = function(arg0) {\n let result;\n try {\n result = arg0 instanceof Date;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_Object_7f2dcef8f78644a4 = function(arg0) {\n let result;\n try {\n result = arg0 instanceof Object;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_Uint8Array_17156bcf118086a9 = function(arg0) {\n let result;\n try {\n result = arg0 instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_isArray_a1eab7e0d067391b = function(arg0) {\n const ret = Array.isArray(arg0);\n return ret;\n };\n imports.wbg.__wbg_iterator_9a24c88df860dc65 = function() {\n const ret = Symbol.iterator;\n return ret;\n };\n imports.wbg.__wbg_keys_5c77a08ddc2fb8a6 = function(arg0) {\n const ret = Object.keys(arg0);\n return ret;\n };\n imports.wbg.__wbg_length_a446193dc22c12f8 = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_length_d56737991078581b = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_length_e2d2a49132c1b256 = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_log_1ae1e9f741096e91 = function(arg0, arg1) {\n console.log(arg0, arg1);\n };\n imports.wbg.__wbg_log_c222819a41e063d3 = function(arg0) {\n console.log(arg0);\n };\n imports.wbg.__wbg_msCrypto_a61aeb35a24c1329 = function(arg0) {\n const ret = arg0.msCrypto;\n return ret;\n };\n imports.wbg.__wbg_new_1ab78df5e132f715 = function(arg0, arg1) {\n const ret = new RangeError(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbg_new_31a97dac4f10fab7 = function(arg0) {\n const ret = new Date(arg0);\n return ret;\n };\n imports.wbg.__wbg_new_405e22f390576ce2 = function() {\n const ret = new Object();\n return ret;\n };\n imports.wbg.__wbg_new_78feb108b6472713 = function() {\n const ret = new Array();\n return ret;\n };\n imports.wbg.__wbg_new_8a6f238a6ece86ea = function() {\n const ret = new Error();\n return ret;\n };\n imports.wbg.__wbg_new_a12002a7f91c75be = function(arg0) {\n const ret = new Uint8Array(arg0);\n return ret;\n };\n imports.wbg.__wbg_new_c68d7209be747379 = function(arg0, arg1) {\n const ret = new Error(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbg_newnoargs_105ed471475aaf50 = function(arg0, arg1) {\n const ret = new Function(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_d97e637ebe145a9a = function(arg0, arg1, arg2) {\n const ret = new Uint8Array(arg0, arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_newwithlength_a381634e90c276d4 = function(arg0) {\n const ret = new Uint8Array(arg0 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_next_25feadfc0913fea9 = function(arg0) {\n const ret = arg0.next;\n return ret;\n };\n imports.wbg.__wbg_next_6574e1a8a62d1055 = function() { return handleError(function (arg0) {\n const ret = arg0.next();\n return ret;\n }, arguments) };\n imports.wbg.__wbg_node_905d3e251edff8a2 = function(arg0) {\n const ret = arg0.node;\n return ret;\n };\n imports.wbg.__wbg_ownKeys_3930041068756f1f = function() { return handleError(function (arg0) {\n const ret = Reflect.ownKeys(arg0);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_process_dc0fbacc7c1c06f7 = function(arg0) {\n const ret = arg0.process;\n return ret;\n };\n imports.wbg.__wbg_push_737cfc8c1432c2c6 = function(arg0, arg1) {\n const ret = arg0.push(arg1);\n return ret;\n };\n imports.wbg.__wbg_randomFillSync_ac0988aba3254290 = function() { return handleError(function (arg0, arg1) {\n arg0.randomFillSync(arg1);\n }, arguments) };\n imports.wbg.__wbg_require_60cc747a6bc5215a = function() { return handleError(function () {\n const ret = module.require;\n return ret;\n }, arguments) };\n imports.wbg.__wbg_set_37837023f3d740e8 = function(arg0, arg1, arg2) {\n arg0[arg1 >>> 0] = arg2;\n };\n imports.wbg.__wbg_set_3f1d0b984ed272ed = function(arg0, arg1, arg2) {\n arg0[arg1] = arg2;\n };\n imports.wbg.__wbg_set_65595bdd868b3009 = function(arg0, arg1, arg2) {\n arg0.set(arg1, arg2 >>> 0);\n };\n imports.wbg.__wbg_set_bb8cecf6a62b9f46 = function() { return handleError(function (arg0, arg1, arg2) {\n const ret = Reflect.set(arg0, arg1, arg2);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_slice_972c243648c9fd2e = function(arg0, arg1, arg2) {\n const ret = arg0.slice(arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_stack_0ed75d68575b0f3c = function(arg0, arg1) {\n const ret = arg1.stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg_static_accessor_GLOBAL_88a902d13a557d07 = function() {\n const ret = typeof global === 'undefined' ? null : global;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_GLOBAL_THIS_56578be7e9f832b0 = function() {\n const ret = typeof globalThis === 'undefined' ? null : globalThis;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_SELF_37c5d418e4bf5819 = function() {\n const ret = typeof self === 'undefined' ? null : self;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_WINDOW_5de37043a91a9c40 = function() {\n const ret = typeof window === 'undefined' ? null : window;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_subarray_aa9065fa9dc5df96 = function(arg0, arg1, arg2) {\n const ret = arg0.subarray(arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_toString_66ab719c2a98bdf1 = function(arg0) {\n const ret = arg0.toString();\n return ret;\n };\n imports.wbg.__wbg_unshift_c290010f73f04fb1 = function(arg0, arg1) {\n const ret = arg0.unshift(arg1);\n return ret;\n };\n imports.wbg.__wbg_value_cd1ffa7b1ab794f1 = function(arg0) {\n const ret = arg0.value;\n return ret;\n };\n imports.wbg.__wbg_values_fcb8ba8c0aad8b58 = function(arg0) {\n const ret = Object.values(arg0);\n return ret;\n };\n imports.wbg.__wbg_versions_c01dfd4722a88165 = function(arg0) {\n const ret = arg0.versions;\n return ret;\n };\n imports.wbg.__wbindgen_bigint_from_i64 = function(arg0) {\n const ret = arg0;\n return ret;\n };\n imports.wbg.__wbindgen_bigint_from_u64 = function(arg0) {\n const ret = BigInt.asUintN(64, arg0);\n return ret;\n };\n imports.wbg.__wbindgen_boolean_get = function(arg0) {\n const v = arg0;\n const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2;\n return ret;\n };\n imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {\n const ret = debugString(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbindgen_error_new = function(arg0, arg1) {\n const ret = new Error(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbindgen_init_externref_table = function() {\n const table = wasm.__wbindgen_export_4;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n ;\n };\n imports.wbg.__wbindgen_is_array = function(arg0) {\n const ret = Array.isArray(arg0);\n return ret;\n };\n imports.wbg.__wbindgen_is_function = function(arg0) {\n const ret = typeof(arg0) === 'function';\n return ret;\n };\n imports.wbg.__wbindgen_is_null = function(arg0) {\n const ret = arg0 === null;\n return ret;\n };\n imports.wbg.__wbindgen_is_object = function(arg0) {\n const val = arg0;\n const ret = typeof(val) === 'object' && val !== null;\n return ret;\n };\n imports.wbg.__wbindgen_is_string = function(arg0) {\n const ret = typeof(arg0) === 'string';\n return ret;\n };\n imports.wbg.__wbindgen_is_undefined = function(arg0) {\n const ret = arg0 === undefined;\n return ret;\n };\n imports.wbg.__wbindgen_json_serialize = function(arg0, arg1) {\n const obj = arg1;\n const ret = JSON.stringify(obj === undefined ? null : obj);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbindgen_jsval_loose_eq = function(arg0, arg1) {\n const ret = arg0 == arg1;\n return ret;\n };\n imports.wbg.__wbindgen_memory = function() {\n const ret = wasm.memory;\n return ret;\n };\n imports.wbg.__wbindgen_number_get = function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'number' ? obj : undefined;\n getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n };\n imports.wbg.__wbindgen_number_new = function(arg0) {\n const ret = arg0;\n return ret;\n };\n imports.wbg.__wbindgen_string_get = function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbindgen_string_new = function(arg0, arg1) {\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n };\n imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n\n return imports;\n}\n\nfunction __wbg_init_memory(imports, memory) {\n\n}\n\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n\n\n wasm.__wbindgen_start();\n return wasm;\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module !== 'undefined') {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n\n __wbg_init_memory(imports);\n\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n\n const instance = new WebAssembly.Instance(module, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module_or_path !== 'undefined') {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (typeof module_or_path === 'undefined') {\n module_or_path = new /* @vite-ignore */ URL('automerge_wasm_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n __wbg_init_memory(imports);\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync };\nexport default __wbg_init;\n", "import { CLEAR_CACHE, IS_PROXY, OBJECT_ID, STATE, TRACE } from \"./constants.js\";\nexport function _state(doc, checkroot = true) {\n if (typeof doc !== \"object\") {\n throw new RangeError(\"must be the document root\");\n }\n const state = Reflect.get(doc, STATE);\n if (state === undefined ||\n state == null ||\n (checkroot && _obj(doc) !== \"_root\")) {\n throw new RangeError(\"must be the document root\");\n }\n return state;\n}\nexport function _clear_cache(doc) {\n Reflect.set(doc, CLEAR_CACHE, true);\n}\nexport function _trace(doc) {\n return Reflect.get(doc, TRACE);\n}\nexport function _obj(doc) {\n if (!(typeof doc === \"object\") || doc === null) {\n return null;\n }\n return Reflect.get(doc, OBJECT_ID);\n}\nexport function _is_proxy(doc) {\n return !!Reflect.get(doc, IS_PROXY);\n}\n", "import { isAutomerge, isCounter, mark, splice, unmark, } from \"./implementation.js\";\nexport function applyPatch(doc, patch) {\n let path = resolvePath(doc, patch.path);\n if (patch.action === \"put\") {\n applyPutPatch(doc, path, patch);\n }\n else if (patch.action === \"insert\") {\n applyInsertPatch(doc, path, patch);\n }\n else if (patch.action === \"del\") {\n applyDelPatch(doc, path, patch);\n }\n else if (patch.action === \"splice\") {\n applySplicePatch(doc, path, patch);\n }\n else if (patch.action === \"inc\") {\n applyIncPatch(doc, path, patch);\n }\n else if (patch.action === \"mark\") {\n applyMarkPatch(doc, path, patch);\n }\n else if (patch.action === \"unmark\") {\n applyUnmarkPatch(doc, path, patch);\n }\n else if (patch.action === \"conflict\") {\n // Ignore conflict patches\n }\n else {\n throw new RangeError(`unsupported patch: ${patch}`);\n }\n}\nfunction applyPutPatch(doc, path, patch) {\n let { obj: parent, prop } = pathElemAt(path, -1);\n parent[prop] = patch.value;\n}\nfunction applyInsertPatch(doc, path, patch) {\n let { obj: parent, prop } = pathElemAt(path, -1);\n if (!Array.isArray(parent)) {\n throw new RangeError(`target is not an array for patch`);\n }\n if (!(typeof prop === \"number\")) {\n throw new RangeError(`index is not a number for patch`);\n }\n parent.splice(prop, 0, ...patch.values);\n}\nfunction applyDelPatch(doc, path, patch) {\n let { obj: parent, prop, parentPath } = pathElemAt(path, -1);\n if (!(typeof prop === \"number\")) {\n throw new RangeError(`index is not a number for patch`);\n }\n if (Array.isArray(parent)) {\n parent.splice(prop, patch.length || 1);\n }\n else if (typeof parent === \"string\") {\n if (isAutomerge(doc)) {\n splice(doc, parentPath, prop, patch.length || 1);\n }\n else {\n let { obj: grandParent, prop: grandParentProp } = pathElemAt(path, -2);\n if (typeof prop !== \"number\") {\n throw new RangeError(`index is not a number for patch`);\n }\n let target = grandParent[grandParentProp];\n if (target == null || typeof target !== \"string\") {\n throw new RangeError(`target is not a string for patch`);\n }\n let newString = target.slice(0, prop) + target.slice(prop + (patch.length || 1));\n grandParent[grandParentProp] = newString;\n }\n }\n else {\n throw new RangeError(`target is not an array or string for patch`);\n }\n}\nfunction applySplicePatch(doc, path, patch) {\n if (isAutomerge(doc)) {\n let { obj: parent, prop, parentPath } = pathElemAt(path, -1);\n if (!(typeof prop === \"number\")) {\n throw new RangeError(`index is not a number for patch`);\n }\n splice(doc, parentPath, prop, 0, patch.value);\n }\n else {\n let { obj: parent, prop } = pathElemAt(path, -1);\n let { obj: grandParent, prop: grandParentProp } = pathElemAt(path, -2);\n if (typeof prop !== \"number\") {\n throw new RangeError(`index is not a number for patch`);\n }\n let target = grandParent[grandParentProp];\n if (target == null || typeof target !== \"string\") {\n throw new RangeError(`target is not a string for patch`);\n }\n let newString = target.slice(0, prop) + patch.value + target.slice(prop);\n grandParent[grandParentProp] = newString;\n }\n}\nfunction applyIncPatch(doc, path, patch) {\n let { obj: parent, prop } = pathElemAt(path, -1);\n const counter = parent[prop];\n if (isAutomerge(doc)) {\n if (!isCounter(counter)) {\n throw new RangeError(`target is not a counter for patch`);\n }\n counter.increment(patch.value);\n }\n else {\n if (!(typeof counter === \"number\")) {\n throw new RangeError(`target is not a number for patch`);\n }\n parent[prop] = counter + patch.value;\n }\n}\nfunction applyMarkPatch(doc, path, patch) {\n let { obj: parent, prop } = pathElemAt(path, -1);\n if (!isAutomerge(doc)) {\n return;\n }\n for (const markSpec of patch.marks) {\n mark(doc, patch.path, \n // TODO: add mark expansion to patches. This will require emitting\n // the expand values in patches.\n { start: markSpec.start, end: markSpec.end, expand: \"none\" }, markSpec.name, markSpec.value);\n }\n}\nfunction applyUnmarkPatch(doc, path, patch) {\n if (!isAutomerge(doc)) {\n return;\n }\n unmark(doc, patch.path, { start: patch.start, end: patch.end, expand: \"none\" }, patch.name);\n}\nexport function applyPatches(doc, patches) {\n for (const patch of patches) {\n applyPatch(doc, patch);\n }\n}\n/**\n * Walk through a path with an object and for each element in the path return a resolved path element.\n *\n * A resolved path element looks like this:\n *\n * ```typescript\n * {\n * obj: any, // The object that this element in the path is a property of\n * prop: Prop, // The property within `obj` that this path element points at\n * parentPath: Prop[] // The path to `obj` within the original `doc` passed to `resolvePath`\n * }\n * ````\n *\n * For example, given an object like this:\n *\n * ```typescript\n * {\n * todos: [{ task: \"remember the milk\"}]\n * }\n * ```\n *\n * Then `resolvePath(doc, [\"todos\", 0, \"task\"])` would return:\n *\n * ```typescript\n * [\n * { obj: { todos: [{ task: \"remember the milk\"}] }, prop: \"todos\", parentPath: [] },\n * { obj: [{ task: \"remember the milk\"}], prop: 0, parentPath: [\"todos\"] },\n * { obj: { task: \"remember the milk\" }, prop: \"task\", parentPath: [\"todos\", 0] }\n * ]\n * ```\n */\nfunction resolvePath(doc, path) {\n const result = [];\n let current = doc;\n let currentPath = [];\n for (const [index, prop] of path.entries()) {\n result.push({ obj: current, prop, parentPath: currentPath.slice() });\n currentPath.push(prop);\n if (index !== path.length - 1) {\n if (current == null || typeof current != \"object\") {\n // If we're not the last item in the path then we need the current\n // object to be an object so we can access it in the next iteration\n throw new Error(`Invalid path: ${path}`);\n }\n current = current[prop];\n }\n else {\n break;\n }\n }\n return result;\n}\n/**\n * Get an element from a resolved path, throwing an exception if the element does not exist\n *\n * @param resolved - The path to lookup in\n * @param index - The index of the element to lookup, negative indices search backwards\n */\nfunction pathElemAt(resolved, index) {\n let result = resolved.at(index);\n if (result == undefined) {\n throw new Error(\"invalid path\");\n }\n return result;\n}\nfunction reversed(array) {\n return array.slice().reverse();\n}\n", "var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { isImmutableString, rootProxy } from \"./proxies.js\";\nexport { isImmutableString, isCounter } from \"./proxies.js\";\nimport { STATE } from \"./constants.js\";\nimport { Counter, } from \"./types.js\";\nexport { Counter, Int, Uint, Float64, } from \"./types.js\";\nconst _SyncStateSymbol = Symbol(\"_syncstate\");\nimport { ApiHandler, UseApi } from \"./low_level.js\";\nexport { initializeWasm, initializeBase64Wasm, wasmInitialized, isWasmInitialized, } from \"./low_level.js\";\nimport { ImmutableString } from \"./immutable_string.js\";\nexport { ImmutableString } from \"./immutable_string.js\";\nimport { _state, _is_proxy, _clear_cache, _trace, _obj, } from \"./internal_state.js\";\nexport { applyPatch, applyPatches } from \"./apply_patches.js\";\nimport { conflictAt } from \"./conflicts.js\";\n/**\n * Function for use in {@link change} which inserts values into a list at a given index\n * @param list\n * @param index\n * @param values\n */\nexport function insertAt(list, index, ...values) {\n if (!_is_proxy(list)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n //eslint-disable-next-line no-extra-semi\n ;\n list.insertAt(index, ...values);\n}\n/**\n * Function for use in {@link change} which deletes values from a list at a given index\n * @param list\n * @param index\n * @param numDelete\n */\nexport function deleteAt(list, index, numDelete) {\n if (!_is_proxy(list)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n //eslint-disable-next-line no-extra-semi\n ;\n list.deleteAt(index, numDelete);\n}\n/** @hidden **/\nexport function use(api) {\n UseApi(api);\n}\n/** @hidden */\nexport function getBackend(doc) {\n return _state(doc).handle;\n}\nfunction importOpts(_actor) {\n if (typeof _actor === \"object\") {\n return _actor;\n }\n else {\n return { actor: _actor };\n }\n}\nexport function getChangesSince(state, heads) {\n const n = _state(state);\n return n.handle.getChanges(heads);\n}\nexport function getChangesMetaSince(state, heads) {\n const n = _state(state);\n return n.handle.getChangesMeta(heads);\n}\nfunction cursorToIndex(state, value, index) {\n if (typeof index == \"string\") {\n if (/^-?[0-9]+@[0-9a-zA-Z]+$|^[se]$/.test(index)) {\n return state.handle.getCursorPosition(value, index);\n }\n else {\n throw new RangeError(\"index must be a number or cursor\");\n }\n }\n else {\n return index;\n }\n}\n/**\n * Create a new automerge document\n *\n * @typeParam T - The type of value contained in the document. This will be the\n * type that is passed to the change closure in {@link change}\n * @param _opts - Either an actorId or an {@link InitOptions} (which may\n * contain an actorId). If this is null the document will be initialised with a\n * random actor ID\n */\nexport function init(_opts) {\n const opts = importOpts(_opts);\n const freeze = !!opts.freeze;\n const patchCallback = opts.patchCallback;\n const actor = opts.actor;\n const handle = ApiHandler.create({ actor });\n handle.enableFreeze(!!opts.freeze);\n registerDatatypes(handle);\n const doc = handle.materialize(\"/\", undefined, {\n handle,\n heads: undefined,\n freeze,\n patchCallback,\n });\n return doc;\n}\n/**\n * Make an immutable view of an automerge document as at `heads`\n *\n * @remarks\n * The document returned from this function cannot be passed to {@link change}.\n * This is because it shares the same underlying memory as `doc`, but it is\n * consequently a very cheap copy.\n *\n * Note that this function will throw an error if any of the hashes in `heads`\n * are not in the document.\n *\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to create a view of\n * @param heads - The hashes of the heads to create a view at\n */\nexport function view(doc, heads) {\n const state = _state(doc);\n const handle = state.handle;\n return state.handle.materialize(\"/\", heads, Object.assign(Object.assign({}, state), { handle,\n heads }));\n}\n/**\n * Make a full writable copy of an automerge document\n *\n * @remarks\n * Unlike {@link view} this function makes a full copy of the memory backing\n * the document and can thus be passed to {@link change}. It also generates a\n * new actor ID so that changes made in the new document do not create duplicate\n * sequence numbers with respect to the old document. If you need control over\n * the actor ID which is generated you can pass the actor ID as the second\n * argument\n *\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to clone\n * @param _opts - Either an actor ID to use for the new doc or an {@link InitOptions}\n */\nexport function clone(doc, _opts) {\n const state = _state(doc);\n const heads = state.heads;\n const opts = importOpts(_opts);\n const handle = state.handle.fork(opts.actor, heads);\n handle.updateDiffCursor();\n // `change` uses the presence of state.heads to determine if we are in a view\n // set it to undefined to indicate that this is a full fat document\n const { heads: _oldHeads } = state, stateSansHeads = __rest(state, [\"heads\"]);\n stateSansHeads.patchCallback = opts.patchCallback;\n return handle.applyPatches(doc, Object.assign(Object.assign({}, stateSansHeads), { handle }));\n}\n/** Explicity free the memory backing a document. Note that this is note\n * necessary in environments which support\n * [`FinalizationRegistry`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry)\n */\nexport function free(doc) {\n return _state(doc).handle.free();\n}\n/**\n * Create an automerge document from a POJO\n *\n * @param initialState - The initial state which will be copied into the document\n * @typeParam T - The type of the value passed to `from` _and_ the type the resulting document will contain\n * @typeParam actor - The actor ID of the resulting document, if this is null a random actor ID will be used\n *\n * @example\n * ```\n * const doc = automerge.from({\n * tasks: [\n * {description: \"feed dogs\", done: false}\n * ]\n * })\n * ```\n */\nexport function from(initialState, _opts) {\n return _change(init(_opts), \"from\", {}, d => Object.assign(d, initialState))\n .newDoc;\n}\n/**\n * Update the contents of an automerge document\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to update\n * @param options - Either a message, an {@link ChangeOptions}, or a {@link ChangeFn}\n * @param callback - A `ChangeFn` to be used if `options` was a `string`\n *\n * Note that if the second argument is a function it will be used as the `ChangeFn` regardless of what the third argument is.\n *\n * @example A simple change\n * ```\n * let doc1 = automerge.init()\n * doc1 = automerge.change(doc1, d => {\n * d.key = \"value\"\n * })\n * assert.equal(doc1.key, \"value\")\n * ```\n *\n * @example A change with a message\n *\n * ```\n * doc1 = automerge.change(doc1, \"add another value\", d => {\n * d.key2 = \"value2\"\n * })\n * ```\n *\n * @example A change with a message and a timestamp\n *\n * ```\n * doc1 = automerge.change(doc1, {message: \"add another value\", time: 1640995200}, d => {\n * d.key2 = \"value2\"\n * })\n * ```\n *\n * @example responding to a patch callback\n * ```\n * let patchedPath\n * let patchCallback = patch => {\n * patchedPath = patch.path\n * }\n * doc1 = automerge.change(doc1, {message: \"add another value\", time: 1640995200, patchCallback}, d => {\n * d.key2 = \"value2\"\n * })\n * assert.equal(patchedPath, [\"key2\"])\n * ```\n */\nexport function change(doc, options, callback) {\n if (typeof options === \"function\") {\n return _change(doc, \"change\", {}, options).newDoc;\n }\n else if (typeof callback === \"function\") {\n if (typeof options === \"string\") {\n options = { message: options };\n }\n return _change(doc, \"change\", options, callback).newDoc;\n }\n else {\n throw RangeError(\"Invalid args for change\");\n }\n}\n/**\n * Make a change to the document as it was at a particular point in history\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to update\n * @param scope - The heads representing the point in history to make the change\n * @param options - Either a message or a {@link ChangeOptions} for the new change\n * @param callback - A `ChangeFn` to be used if `options` was a `string`\n *\n * @remarks\n * This function is similar to {@link change} but allows you to make changes to\n * the document as if it were at a particular point in time. To understand this\n * imagine a document created with the following history:\n *\n * ```ts\n * let doc = automerge.from({..})\n * doc = automerge.change(doc, () => {...})\n *\n * const heads = automerge.getHeads(doc)\n *\n * // fork the document make a change\n * let fork = automerge.fork(doc)\n * fork = automerge.change(fork, () => {...})\n * const headsOnFork = automerge.getHeads(fork)\n *\n * // make a change on the original doc\n * doc = automerge.change(doc, () => {...})\n * const headsOnOriginal = automerge.getHeads(doc)\n *\n * // now merge the changes back to the original document\n * doc = automerge.merge(doc, fork)\n *\n * // The heads of the document will now be (headsOnFork, headsOnOriginal)\n * ```\n *\n * {@link ChangeAt} produces an equivalent history, but without having to\n * create a fork of the document. In particular the `newHeads` field of the\n * returned {@link ChangeAtResult} will be the same as `headsOnFork`.\n *\n * Why would you want this? It's typically used in conjunction with {@link diff}\n * to reconcile state which is managed concurrently with the document. For\n * example, if you have a text editor component which the user is modifying\n * and you can't send the changes to the document synchronously you might follow\n * a workflow like this:\n *\n * * On initialization save the current heads of the document in the text editor state\n * * Every time the user makes a change record the change in the text editor state\n *\n * Now from time to time reconcile the editor state and the document\n * * Load the last saved heads from the text editor state, call them `oldHeads`\n * * Apply all the unreconciled changes to the document using `changeAt(doc, oldHeads, ...)`\n * * Get the diff from the resulting document to the current document using {@link diff}\n * passing the {@link ChangeAtResult.newHeads} as the `before` argument and the\n * heads of the entire document as the `after` argument.\n * * Apply the diff to the text editor state\n * * Save the current heads of the document in the text editor state\n */\nexport function changeAt(doc, scope, options, callback) {\n if (typeof options === \"function\") {\n return _change(doc, \"changeAt\", {}, options, scope);\n }\n else if (typeof callback === \"function\") {\n if (typeof options === \"string\") {\n options = { message: options };\n }\n return _change(doc, \"changeAt\", options, callback, scope);\n }\n else {\n throw RangeError(\"Invalid args for changeAt\");\n }\n}\nfunction progressDocument(doc, source, heads, callback) {\n if (heads == null) {\n return doc;\n }\n const state = _state(doc);\n const nextState = Object.assign(Object.assign({}, state), { heads: undefined });\n const { value: nextDoc, patches } = state.handle.applyAndReturnPatches(doc, nextState);\n if (patches.length > 0) {\n if (callback != null) {\n callback(patches, { before: doc, after: nextDoc, source });\n }\n const newState = _state(nextDoc);\n newState.mostRecentPatch = {\n before: _state(doc).heads,\n after: newState.handle.getHeads(),\n patches,\n };\n }\n state.heads = heads;\n return nextDoc;\n}\nfunction _change(doc, source, options, callback, scope) {\n if (typeof callback !== \"function\") {\n throw new RangeError(\"invalid change function\");\n }\n const state = _state(doc);\n if (doc === undefined || state === undefined) {\n throw new RangeError(\"must be the document root\");\n }\n if (state.heads) {\n throw new RangeError(\"Attempting to change an outdated document. Use Automerge.clone() if you wish to make a writable copy.\");\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n let heads = state.handle.getHeads();\n if (scope && headsEqual(scope, heads)) {\n scope = undefined;\n }\n if (scope) {\n state.handle.isolate(scope);\n heads = scope;\n }\n if (!(\"time\" in options)) {\n options.time = Math.floor(Date.now() / 1000);\n }\n try {\n state.heads = heads;\n const root = rootProxy(state.handle);\n callback(root);\n if (state.handle.pendingOps() === 0) {\n state.heads = undefined;\n if (scope) {\n state.handle.integrate();\n }\n return {\n newDoc: doc,\n newHeads: null,\n };\n }\n else {\n const newHead = state.handle.commit(options.message, options.time);\n state.handle.integrate();\n return {\n newDoc: progressDocument(doc, source, heads, options.patchCallback || state.patchCallback),\n newHeads: newHead != null ? [newHead] : null,\n };\n }\n }\n catch (e) {\n state.heads = undefined;\n state.handle.rollback();\n throw e;\n }\n}\n/**\n * Make a change to a document which does not modify the document\n *\n * @param doc - The doc to add the empty change to\n * @param options - Either a message or a {@link ChangeOptions} for the new change\n *\n * Why would you want to do this? One reason might be that you have merged\n * changes from some other peers and you want to generate a change which\n * depends on those merged changes so that you can sign the new change with all\n * of the merged changes as part of the new change.\n */\nexport function emptyChange(doc, options) {\n if (options === undefined) {\n options = {};\n }\n if (typeof options === \"string\") {\n options = { message: options };\n }\n if (!(\"time\" in options)) {\n options.time = Math.floor(Date.now() / 1000);\n }\n const state = _state(doc);\n if (state.heads) {\n throw new RangeError(\"Attempting to change an outdated document. Use Automerge.clone() if you wish to make a writable copy.\");\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n const heads = state.handle.getHeads();\n state.handle.emptyChange(options.message, options.time);\n return progressDocument(doc, \"emptyChange\", heads);\n}\n/**\n * Load an automerge document from a compressed document produce by {@link save}\n *\n * @typeParam T - The type of the value which is contained in the document.\n * Note that no validation is done to make sure this type is in\n * fact the type of the contained value so be a bit careful\n * @param data - The compressed document\n * @param _opts - Either an actor ID or some {@link InitOptions}, if the actor\n * ID is null a random actor ID will be created\n *\n * Note that `load` will throw an error if passed incomplete content (for\n * example if you are receiving content over the network and don't know if you\n * have the complete document yet). If you need to handle incomplete content use\n * {@link init} followed by {@link loadIncremental}.\n */\nexport function load(data, _opts) {\n const opts = importOpts(_opts);\n if (opts.patchCallback) {\n return loadIncremental(init(opts), data);\n }\n const actor = opts.actor;\n const patchCallback = opts.patchCallback;\n const unchecked = opts.unchecked || false;\n const allowMissingDeps = opts.allowMissingChanges || false;\n const convertImmutableStringsToText = opts.convertImmutableStringsToText || false;\n const handle = ApiHandler.load(data, {\n actor,\n unchecked,\n allowMissingDeps,\n convertImmutableStringsToText,\n });\n handle.enableFreeze(!!opts.freeze);\n registerDatatypes(handle);\n const doc = handle.materialize(\"/\", undefined, {\n handle,\n heads: undefined,\n patchCallback,\n });\n return doc;\n}\n/**\n * Load changes produced by {@link saveIncremental}, or partial changes\n *\n * @typeParam T - The type of the value which is contained in the document.\n * Note that no validation is done to make sure this type is in\n * fact the type of the contained value so be a bit careful\n * @param data - The compressedchanges\n * @param opts - an {@link ApplyOptions}\n *\n * This function is useful when staying up to date with a connected peer.\n * Perhaps the other end sent you a full compresed document which you loaded\n * with {@link load} and they're sending you the result of\n * {@link getLastLocalChange} every time they make a change.\n *\n * Note that this function will succesfully load the results of {@link save} as\n * well as {@link getLastLocalChange} or any other incremental change.\n */\nexport function loadIncremental(doc, data, opts) {\n if (!opts) {\n opts = {};\n }\n const state = _state(doc);\n if (state.heads) {\n throw new RangeError(\"Attempting to change an out of date document - set at: \" + _trace(doc));\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n const heads = state.handle.getHeads();\n state.handle.loadIncremental(data);\n return progressDocument(doc, \"loadIncremental\", heads, opts.patchCallback || state.patchCallback);\n}\n/**\n * Create binary save data to be appended to a save file or fed into {@link loadIncremental}\n *\n * @typeParam T - The type of the value which is contained in the document.\n * Note that no validation is done to make sure this type is in\n * fact the type of the contained value so be a bit careful\n *\n * This function is useful for incrementally saving state. The data can be appended to a\n * automerge save file, or passed to a document replicating its state.\n *\n */\nexport function saveIncremental(doc) {\n const state = _state(doc);\n if (state.heads) {\n throw new RangeError(\"Attempting to change an out of date document - set at: \" + _trace(doc));\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n return state.handle.saveIncremental();\n}\n/**\n * Export the contents of a document to a compressed format\n *\n * @param doc - The doc to save\n *\n * The returned bytes can be passed to {@link load} or {@link loadIncremental}\n */\nexport function save(doc) {\n return _state(doc).handle.save();\n}\n/**\n * Merge `remote` into `local`\n * @typeParam T - The type of values contained in each document\n * @param local - The document to merge changes into\n * @param remote - The document to merge changes from\n *\n * @returns - The merged document\n *\n * Often when you are merging documents you will also need to clone them. Both\n * arguments to `merge` are frozen after the call so you can no longer call\n * mutating methods (such as {@link change}) on them. The symtom of this will be\n * an error which says \"Attempting to change an out of date document\". To\n * overcome this call {@link clone} on the argument before passing it to {@link\n * merge}.\n */\nexport function merge(local, remote) {\n const localState = _state(local);\n if (localState.heads) {\n throw new RangeError(\"Attempting to change an out of date document - set at: \" + _trace(local));\n }\n const heads = localState.handle.getHeads();\n const remoteState = _state(remote);\n const changes = localState.handle.getChangesAdded(remoteState.handle);\n localState.handle.applyChanges(changes);\n return progressDocument(local, \"merge\", heads, localState.patchCallback);\n}\n/**\n * Get the actor ID associated with the document\n */\nexport function getActorId(doc) {\n const state = _state(doc);\n return state.handle.getActorId();\n}\n/**\n * Get the conflicts associated with a property\n *\n * The values of properties in a map in automerge can be conflicted if there\n * are concurrent \"put\" operations to the same key. Automerge chooses one value\n * arbitrarily (but deterministically, any two nodes who have the same set of\n * changes will choose the same value) from the set of conflicting values to\n * present as the value of the key.\n *\n * Sometimes you may want to examine these conflicts, in this case you can use\n * {@link getConflicts} to get the conflicts for the key.\n *\n * @example\n * ```\n * import * as automerge from \"@automerge/automerge\"\n *\n * type Profile = {\n * pets: Array<{name: string, type: string}>\n * }\n *\n * let doc1 = automerge.init<Profile>(\"aaaa\")\n * doc1 = automerge.change(doc1, d => {\n * d.pets = [{name: \"Lassie\", type: \"dog\"}]\n * })\n * let doc2 = automerge.init<Profile>(\"bbbb\")\n * doc2 = automerge.merge(doc2, automerge.clone(doc1))\n *\n * doc2 = automerge.change(doc2, d => {\n * d.pets[0].name = \"Beethoven\"\n * })\n *\n * doc1 = automerge.change(doc1, d => {\n * d.pets[0].name = \"Babe\"\n * })\n *\n * const doc3 = automerge.merge(doc1, doc2)\n *\n * // Note that here we pass `doc3.pets`, not `doc3`\n * let conflicts = automerge.getConflicts(doc3.pets[0], \"name\")\n *\n * // The two conflicting values are the keys of the conflicts object\n * assert.deepEqual(Object.values(conflicts), [\"Babe\", Beethoven\"])\n * ```\n */\nexport function getConflicts(doc, prop) {\n const state = _state(doc, false);\n const objectId = _obj(doc);\n if (objectId != null) {\n const withinChangeCallback = _is_proxy(doc);\n return conflictAt(state.handle, objectId, prop, withinChangeCallback);\n }\n else {\n return undefined;\n }\n}\n/**\n * Get the binary representation of the last change which was made to this doc\n *\n * This is most useful when staying in sync with other peers, every time you\n * make a change locally via {@link change} you immediately call {@link\n * getLastLocalChange} and send the result over the network to other peers.\n */\nexport function getLastLocalChange(doc) {\n const state = _state(doc);\n return state.handle.getLastLocalChange() || undefined;\n}\n/**\n * Return the object ID of an arbitrary javascript value\n *\n * This is useful to determine if something is actually an automerge document,\n * if `doc` is not an automerge document this will return null.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getObjectId(doc, prop) {\n if (prop) {\n const state = _state(doc, false);\n const objectId = _obj(doc);\n if (!state || !objectId) {\n return null;\n }\n return state.handle.get(objectId, prop);\n }\n else {\n return _obj(doc);\n }\n}\n/**\n * Get the changes which are in `newState` but not in `oldState`. The returned\n * changes can be loaded in `oldState` via {@link applyChanges}.\n *\n * Note that this will crash if there are changes in `oldState` which are not in `newState`.\n */\nexport function getChanges(oldState, newState) {\n const n = _state(newState);\n return n.handle.getChanges(getHeads(oldState));\n}\n/**\n * Get all the changes in a document\n *\n * This is different to {@link save} because the output is an array of changes\n * which can be individually applied via {@link applyChanges}`\n *\n */\nexport function getAllChanges(doc) {\n const state = _state(doc);\n return state.handle.getChanges([]);\n}\n/**\n * Apply changes received from another document\n *\n * `doc` will be updated to reflect the `changes`. If there are changes which\n * we do not have dependencies for yet those will be stored in the document and\n * applied when the depended on changes arrive.\n *\n * You can use the {@link ApplyOptions} to pass a patchcallback which will be\n * informed of any changes which occur as a result of applying the changes\n *\n */\nexport function applyChanges(doc, changes, opts) {\n const state = _state(doc);\n if (!opts) {\n opts = {};\n }\n if (state.heads) {\n throw new RangeError(\"Attempting to change an outdated document. Use Automerge.clone() if you wish to make a writable copy.\");\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n const heads = state.handle.getHeads();\n state.handle.applyChanges(changes);\n state.heads = heads;\n return [\n progressDocument(doc, \"applyChanges\", heads, opts.patchCallback || state.patchCallback),\n ];\n}\n/** @hidden */\nexport function getHistory(doc) {\n const history = getAllChanges(doc);\n return history.map((change, index) => ({\n get change() {\n return decodeChange(change);\n },\n get snapshot() {\n const [state] = applyChanges(init(), history.slice(0, index + 1));\n return state;\n },\n }));\n}\n/**\n * Create a set of patches representing the change from one set of heads to another\n *\n * If either of the heads are missing from the document the returned set of patches will be empty\n */\nexport function diff(doc, before, after) {\n checkHeads(before, \"before\");\n checkHeads(after, \"after\");\n const state = _state(doc);\n if (state.mostRecentPatch &&\n equals(state.mostRecentPatch.before, before) &&\n equals(state.mostRecentPatch.after, after)) {\n return state.mostRecentPatch.patches;\n }\n return state.handle.diff(before, after);\n}\nfunction headsEqual(heads1, heads2) {\n if (heads1.length !== heads2.length) {\n return false;\n }\n for (let i = 0; i < heads1.length; i++) {\n if (heads1[i] !== heads2[i]) {\n return false;\n }\n }\n return true;\n}\nfunction checkHeads(heads, fieldname) {\n if (!Array.isArray(heads)) {\n throw new Error(`${fieldname} must be an array`);\n }\n}\n/** @hidden */\n// FIXME : no tests\n// FIXME can we just use deep equals now?\nexport function equals(val1, val2) {\n if (!isObject(val1) || !isObject(val2))\n return val1 === val2;\n const keys1 = Object.keys(val1).sort(), keys2 = Object.keys(val2).sort();\n if (keys1.length !== keys2.length)\n return false;\n for (let i = 0; i < keys1.length; i++) {\n if (keys1[i] !== keys2[i])\n return false;\n if (!equals(val1[keys1[i]], val2[keys2[i]]))\n return false;\n }\n return true;\n}\n/**\n * encode a {@link SyncState} into binary to send over the network\n *\n * @group sync\n * */\nexport function encodeSyncState(state) {\n const sync = ApiHandler.importSyncState(state);\n const result = ApiHandler.encodeSyncState(sync);\n sync.free();\n return result;\n}\n/**\n * Decode some binary data into a {@link SyncState}\n *\n * @group sync\n */\nexport function decodeSyncState(state) {\n const sync = ApiHandler.decodeSyncState(state);\n const result = ApiHandler.exportSyncState(sync);\n sync.free();\n return result;\n}\n/**\n * Generate a sync message to send to the peer represented by `inState`\n * @param doc - The doc to generate messages about\n * @param inState - The {@link SyncState} representing the peer we are talking to\n *\n * @group sync\n *\n * @returns An array of `[newSyncState, syncMessage | null]` where\n * `newSyncState` should replace `inState` and `syncMessage` should be sent to\n * the peer if it is not null. If `syncMessage` is null then we are up to date.\n */\nexport function generateSyncMessage(doc, inState) {\n const state = _state(doc);\n const syncState = ApiHandler.importSyncState(inState);\n const message = state.handle.generateSyncMessage(syncState);\n const outState = ApiHandler.exportSyncState(syncState);\n return [outState, message];\n}\n/**\n * Update a document and our sync state on receiving a sync message\n *\n * @group sync\n *\n * @param doc - The doc the sync message is about\n * @param inState - The {@link SyncState} for the peer we are communicating with\n * @param message - The message which was received\n * @param opts - Any {@link ApplyOption}s, used for passing a\n * {@link PatchCallback} which will be informed of any changes\n * in `doc` which occur because of the received sync message.\n *\n * @returns An array of `[newDoc, newSyncState, null]` where\n * `newDoc` is the updated state of `doc`, `newSyncState` should replace\n * `inState`.\n *\n * @remarks Note that this function has three return values for legacy reasons.\n * The third value used to be a sync message to send back but this is now\n * always null and you should instead call `generateSyncMessage` after calling\n * `receiveSyncMessage` to see if there are new messages to send.\n */\nexport function receiveSyncMessage(doc, inState, message, opts) {\n const syncState = ApiHandler.importSyncState(inState);\n if (!opts) {\n opts = {};\n }\n const state = _state(doc);\n if (state.heads) {\n throw new RangeError(\"Attempting to change an outdated document. Use Automerge.clone() if you wish to make a writable copy.\");\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n const heads = state.handle.getHeads();\n state.handle.receiveSyncMessage(syncState, message);\n const outSyncState = ApiHandler.exportSyncState(syncState);\n return [\n progressDocument(doc, \"receiveSyncMessage\", heads, opts.patchCallback || state.patchCallback),\n outSyncState,\n null,\n ];\n}\n/**\n * Check whether the replica represented by `remoteState` has all our changes\n *\n * @param doc - The doc to check whether the remote has changes for\n * @param remoteState - The {@link SyncState} representing the peer we are talking to\n *\n * @group sync\n *\n * @returns true if the remote has all of our changes\n */\nexport function hasOurChanges(doc, remoteState) {\n const state = _state(doc);\n const syncState = ApiHandler.importSyncState(remoteState);\n return state.handle.hasOurChanges(syncState);\n}\n/**\n * Create a new, blank {@link SyncState}\n *\n * When communicating with a peer for the first time use this to generate a new\n * {@link SyncState} for them\n *\n * @group sync\n */\nexport function initSyncState() {\n return ApiHandler.exportSyncState(ApiHandler.initSyncState());\n}\n/** @hidden */\nexport function encodeChange(change) {\n return ApiHandler.encodeChange(change);\n}\n/** @hidden */\nexport function decodeChange(data) {\n return ApiHandler.decodeChange(data);\n}\n/** @hidden */\nexport function encodeSyncMessage(message) {\n return ApiHandler.encodeSyncMessage(message);\n}\n/** @hidden */\nexport function decodeSyncMessage(message) {\n return ApiHandler.decodeSyncMessage(message);\n}\n/**\n * Get any changes in `doc` which are not dependencies of `heads`\n */\nexport function getMissingDeps(doc, heads) {\n const state = _state(doc);\n return state.handle.getMissingDeps(heads);\n}\n/**\n * Get the hashes of the heads of this document\n */\nexport function getHeads(doc) {\n const state = _state(doc);\n return state.heads || state.handle.getHeads();\n}\n/** @hidden */\nexport function dump(doc) {\n const state = _state(doc);\n state.handle.dump();\n}\n/** @hidden */\nexport function toJS(doc) {\n const state = _state(doc);\n const enabled = state.handle.enableFreeze(false);\n const result = state.handle.materialize(\"/\", state.heads);\n state.handle.enableFreeze(enabled);\n return result;\n}\nexport function isAutomerge(doc) {\n if (typeof doc == \"object\" && doc !== null) {\n return getObjectId(doc) === \"_root\" && !!Reflect.get(doc, STATE);\n }\n else {\n return false;\n }\n}\nfunction isObject(obj) {\n return typeof obj === \"object\" && obj !== null;\n}\nexport function saveSince(doc, heads) {\n const state = _state(doc);\n const result = state.handle.saveSince(heads);\n return result;\n}\n/**\n * Returns true if the document has all of the given heads somewhere in its history\n */\nexport function hasHeads(doc, heads) {\n const state = _state(doc);\n for (const hash of heads) {\n if (!state.handle.getChangeByHash(hash)) {\n return false;\n }\n }\n return true;\n}\nfunction registerDatatypes(handle) {\n handle.registerDatatype(\"counter\", (n) => new Counter(n), n => {\n if (n instanceof Counter) {\n return n.value;\n }\n });\n handle.registerDatatype(\"str\", (n) => {\n return new ImmutableString(n);\n }, s => {\n if (isImmutableString(s)) {\n return s.val;\n }\n });\n}\n/**\n * @hidden\n */\nexport function topoHistoryTraversal(doc) {\n const state = _state(doc);\n return state.handle.topoHistoryTraversal();\n}\n/**\n * Decode a change hash into the details of this change\n *\n * This should be considered a semi-stable API. We try not to change the\n * encoding in backwards incompatible ways but we won't bump a major version if\n * we do have to change it\n */\nexport function inspectChange(doc, changeHash) {\n const state = _state(doc);\n return state.handle.getDecodedChangeByHash(changeHash);\n}\n/**\n * Return some internal statistics about the document\n */\nexport function stats(doc) {\n const state = _state(doc);\n return state.handle.stats();\n}\n/**\n * Modify a string\n *\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to modify\n * @param path - The path to the string to modify\n * @param index - The position (as a {@link Cursor} or index) to edit.\n * If a cursor is used then the edit happens such that the cursor will\n * now point to the end of the newText, so you can continue to reuse\n * the same cursor for multiple calls to splice.\n * @param del - The number of code units to delete, a positive number\n * deletes N characters after the cursor, a negative number deletes\n * N characters before the cursor.\n * @param newText - The string to insert (if any).\n */\nexport function splice(doc, path, index, del, newText) {\n const objPath = absoluteObjPath(doc, path, \"splice\");\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const state = _state(doc, false);\n _clear_cache(doc);\n index = cursorToIndex(state, objPath, index);\n try {\n return state.handle.splice(objPath, index, del, newText);\n }\n catch (e) {\n throw new RangeError(`Cannot splice: ${e}`);\n }\n}\n/**\n * Update the value of a string\n *\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to modify\n * @param path - The path to the string to modify\n * @param newText - The new text to update the value to\n *\n * @remarks\n * This will calculate a diff between the current value and the new value and\n * then convert that diff into calls to {@link splice}. This will produce results\n * which don't merge as well as directly capturing the user input actions, but\n * sometimes it's not possible to capture user input and this is the best you\n * can do.\n *\n * This is an experimental API and may change in the future.\n *\n * @beta\n */\nexport function updateText(doc, path, newText) {\n const objPath = absoluteObjPath(doc, path, \"updateText\");\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const state = _state(doc, false);\n _clear_cache(doc);\n try {\n return state.handle.updateText(objPath, newText);\n }\n catch (e) {\n throw new RangeError(`Cannot updateText: ${e}`);\n }\n}\n/**\n * Return the text + block markers at a given path\n *\n * @remarks\n * Rich text in automerge is represented as a sequence of characters with block\n * markers appearing inline with the text, and inline formatting spans overlaid\n * on the whole sequence. Block markers are normal automerge maps, but they are\n * only visible via either the {@link block} function or the {@link spans}\n * function. This function returns the current state of the spans\n */\nexport function spans(doc, path) {\n const state = _state(doc, false);\n const objPath = absoluteObjPath(doc, path, \"spans\");\n try {\n return state.handle.spans(objPath, state.heads);\n }\n catch (e) {\n throw new RangeError(`Cannot splice: ${e}`);\n }\n}\n/**\n * Get the block marker at the given index\n */\nexport function block(doc, path, index) {\n const objPath = absoluteObjPath(doc, path, \"splitBlock\");\n const state = _state(doc, false);\n index = cursorToIndex(state, objPath, index);\n try {\n return state.handle.getBlock(objPath, index);\n }\n catch (e) {\n throw new RangeError(`Cannot get block: ${e}`);\n }\n}\n/**\n * Insert a new block marker at the given index\n */\nexport function splitBlock(doc, path, index, block) {\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const objPath = absoluteObjPath(doc, path, \"splitBlock\");\n const state = _state(doc, false);\n _clear_cache(doc);\n index = cursorToIndex(state, objPath, index);\n try {\n state.handle.splitBlock(objPath, index, block);\n }\n catch (e) {\n throw new RangeError(`Cannot splice: ${e}`);\n }\n}\n/**\n * Delete the block marker at the given index\n */\nexport function joinBlock(doc, path, index) {\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const objPath = absoluteObjPath(doc, path, \"joinBlock\");\n const state = _state(doc, false);\n _clear_cache(doc);\n index = cursorToIndex(state, objPath, index);\n try {\n state.handle.joinBlock(objPath, index);\n }\n catch (e) {\n throw new RangeError(`Cannot joinBlock: ${e}`);\n }\n}\n/**\n * Update the block marker at the given index\n */\nexport function updateBlock(doc, path, index, block) {\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const objPath = absoluteObjPath(doc, path, \"updateBlock\");\n const state = _state(doc, false);\n _clear_cache(doc);\n index = cursorToIndex(state, objPath, index);\n try {\n state.handle.updateBlock(objPath, index, block);\n }\n catch (e) {\n throw new RangeError(`Cannot updateBlock: ${e}`);\n }\n}\n/**\n * Update the spans at the given path\n *\n * @remarks\n * Like {@link updateText} this will diff `newSpans` against the current state\n * of the text at `path` and perform a reasonably minimal number of operations\n * required to update the spans to the new state.\n */\nexport function updateSpans(doc, path, newSpans) {\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const objPath = absoluteObjPath(doc, path, \"updateSpans\");\n const state = _state(doc, false);\n _clear_cache(doc);\n try {\n state.handle.updateSpans(objPath, newSpans);\n }\n catch (e) {\n throw new RangeError(`Cannot updateBlock: ${e}`);\n }\n}\n/**\n * Returns a cursor for the given position in a string.\n *\n * @remarks\n * A cursor represents a relative position, \"before character X\",\n * rather than an absolute position. As the document is edited, the\n * cursor remains stable relative to its context, just as you'd expect\n * from a cursor in a concurrent text editor.\n *\n * The string representation is shareable, and so you can use this both\n * to edit the document yourself (using {@link splice}) or to share multiple\n * collaborator's current cursor positions over the network.\n *\n * The cursor's `position` can be an index in the string, `'start'` or `'end'`.\n * - `'start'` ensures this cursor always resolves to `0`\n * - `'end'` ensures this cursor always resolves to `string.length`\n *\n * Start cursors can be created by passing any negative number in `position`.\n *\n * End cursors can be created by passing a number `>= string.length` in `position`.\n *\n * `move` determines the position the cursor resolves to if the character at\n * `index` is removed:\n * - `'after'` causes the cursor to resolve towards `string.length`\n * - `'before'` causes the cursor to resolve towards `0`\n *\n * `move` is `'after'` by default.\n *\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document\n * @param path - The path to the string\n * @param position - The position of the cursor, either an index, `'start'` or `'end'`\n * @param move - The direction the cursor should resolve to, defaults to 'after'\n */\nexport function getCursor(doc, path, position, move) {\n const objPath = absoluteObjPath(doc, path, \"getCursor\");\n const state = _state(doc, false);\n try {\n return state.handle.getCursor(objPath, position, state.heads, move);\n }\n catch (e) {\n throw new RangeError(`Cannot getCursor: ${e}`);\n }\n}\n/**\n * Returns the current index of the cursor.\n *\n * @typeParam T - The type of the value contained in the document\n *\n * @param doc - The document\n * @param path - The path to the string\n * @param index - The cursor\n */\nexport function getCursorPosition(doc, path, cursor) {\n const objPath = absoluteObjPath(doc, path, \"getCursorPosition\");\n const state = _state(doc, false);\n try {\n return state.handle.getCursorPosition(objPath, cursor, state.heads);\n }\n catch (e) {\n throw new RangeError(`Cannot getCursorPosition: ${e}`);\n }\n}\nexport function mark(doc, path, range, name, value) {\n const objPath = absoluteObjPath(doc, path, \"mark\");\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const state = _state(doc, false);\n try {\n return state.handle.mark(objPath, range, name, value);\n }\n catch (e) {\n throw new RangeError(`Cannot mark: ${e}`);\n }\n}\nexport function unmark(doc, path, range, name) {\n const objPath = absoluteObjPath(doc, path, \"unmark\");\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const state = _state(doc, false);\n try {\n return state.handle.unmark(objPath, range, name);\n }\n catch (e) {\n throw new RangeError(`Cannot unmark: ${e}`);\n }\n}\nexport function marks(doc, path) {\n const objPath = absoluteObjPath(doc, path, \"marks\");\n const state = _state(doc, false);\n try {\n return state.handle.marks(objPath);\n }\n catch (e) {\n throw new RangeError(`Cannot call marks(): ${e}`);\n }\n}\nexport function marksAt(doc, path, index) {\n const objPath = absoluteObjPath(doc, path, \"marksAt\");\n const state = _state(doc, false);\n try {\n return state.handle.marksAt(objPath, index);\n }\n catch (e) {\n throw new RangeError(`Cannot call marksAt(): ${e}`);\n }\n}\nfunction absoluteObjPath(doc, path, functionName) {\n path = path.slice();\n const objectId = _obj(doc);\n if (!objectId) {\n throw new RangeError(`invalid object for ${functionName}`);\n }\n path.unshift(objectId);\n return path.join(\"/\");\n}\n/**\n * @deprecated This method has been renamed to {@link isImmutableString}\n */\nexport const isRawString = isImmutableString;\n/**\n * @deprecated This type has been renamed to {@link ImmutableString}\n */\nexport const RawString = ImmutableString;\n", "import type { DocHandleChangePayload } from \"@automerge/automerge-repo/slim\"\nimport { applyPatches } from \"@automerge/automerge/slim\"\n\n/**\n * convert automerge patches to solid producer operations\n * @param payload the\n * [DocHandleChangePayload](https://automerge.org/automerge-repo/interfaces/_automerge_automerge_repo.DocHandleChangePayload.html)\n * from the handle.on(\"change\n * @returns a callback for an immer-like function. e.g.\n * [produce](https://docs.solidjs.com/reference/store-utilities/produce) for\n * [Solid\n * Stores](https://docs.solidjs.com/reference/store-utilities/create-store)\n */\nexport default function autoproduce<T>(\n payload: DocHandleChangePayload<T>\n): (doc: T) => void {\n return (doc: T) => applyPatches(doc, payload.patches)\n}\n", "import { onCleanup } from \"solid-js\"\nimport type {\n Doc,\n DocHandle,\n DocHandleChangePayload,\n} from \"@automerge/automerge-repo/slim\"\nimport autoproduce from \"./autoproduce.js\"\nimport { createStore, produce, reconcile, type Store } from \"solid-js/store\"\nimport { applyPatches, diff, getHeads } from \"@automerge/automerge/slim\"\n\nconst cache = new WeakMap<\n DocHandle<unknown>,\n {\n refs: number\n store: Store<Doc<unknown>>\n cleanup(): void\n }\n>()\n\nfunction initial<T>(handle: DocHandle<T>): T {\n const template = {} as T\n applyPatches(template, diff(handle.doc(), [], getHeads(handle.doc())))\n return template\n}\n\n/**\n * make a fine-grained live view of a document from its handle.\n * @param handle an Automerge\n * [DocHandle](https://automerge.org/automerge-repo/classes/_automerge_automerge_repo.DocHandle.html)\n */\nexport default function makeDocumentProjection<T extends object>(\n handle: DocHandle<T>\n): Doc<T> {\n onCleanup(() => {\n const item = cache.get(handle)!\n if (!item) return\n if (!item.refs--) {\n item.cleanup()\n }\n })\n\n if (cache.has(handle)) {\n const item = cache.get(handle)!\n item.refs++\n return item.store as T\n }\n\n const [doc, set] = createStore<T>(initial(handle))\n\n cache.set(handle, {\n refs: 0,\n store: doc,\n cleanup() {\n handle.off(\"change\", patch)\n handle.off(\"delete\", ondelete)\n // https://github.com/chee/solid-automerge/pull/5\n cache.delete(handle)\n },\n })\n\n function patch(payload: DocHandleChangePayload<T>) {\n set(produce(autoproduce(payload)))\n }\n\n function ondelete() {\n set(reconcile({} as T))\n }\n\n handle.on(\"change\", patch)\n handle.on(\"delete\", ondelete)\n\n return doc\n}\n", "import { createMemo, type Accessor } from \"solid-js\"\nimport { type DocHandle, type Doc } from \"@automerge/automerge-repo/slim\"\nimport makeDocumentProjection from \"./makeDocumentProjection.js\"\n\n/**\n * get a fine-grained live view of a document from a handle. works with\n * {@link useDocHandle}.\n * @param handle an accessor (signal/resource) of a\n * [DocHandle](https://automerge.org/automerge-repo/classes/_automerge_automerge_repo.DocHandle.html)\n */\nexport default function createDocumentProjection<T extends object>(\n handle: Accessor<DocHandle<T> | undefined>\n): Accessor<Doc<T> | undefined> {\n const projection = createMemo<Doc<T> | undefined>(() => {\n const unwrappedHandle = typeof handle == \"function\" ? handle() : handle\n return unwrappedHandle && makeDocumentProjection<T>(unwrappedHandle)\n })\n return projection\n}\n", "import type { Repo } from \"@automerge/automerge-repo/slim\"\nimport { createContext, type Context } from \"solid-js\"\n\n/**\n * a [context](https://docs.solidjs.com/concepts/context) that provides access\n * to an Automerge Repo. you don't need this, you can pass the repo in the\n * second arg to the functions that need it.\n */\nexport const RepoContext: Context<Repo | null> = createContext<Repo | null>(\n null\n)\n", "import type {\n AutomergeUrl,\n DocHandle,\n DocumentId,\n HandleState,\n} from \"@automerge/automerge-repo/slim\"\nimport {\n createEffect,\n createResource,\n useContext,\n type Resource,\n} from \"solid-js\"\nimport { RepoContext } from \"./context.js\"\nimport type { MaybeAccessor, UseDocHandleOptions } from \"./types.js\"\nconst readyStates = [\"ready\", \"deleted\", \"unavailable\"] as HandleState[]\nconst badStates = [\"deleted\", \"unavailable\"] as HandleState[]\n\n/**\n * get a\n * [DocHandle](https://automerge.org/automerge-repo/classes/_automerge_automerge_repo.DocHandle.html)\n * from an\n * [AutomergeUrl](https://automerge.org/automerge-repo/types/_automerge_automerge_repo.AutomergeUrl.html)\n * as a\n * [Resource](https://docs.solidjs.com/reference/basic-reactivity/create-resource).\n * Waits for the handle to be\n * [ready](https://automerge.org/automerge-repo/variables/_automerge_automerge_repo.HandleState-1.html).\n */\nexport default function useDocHandle<T>(\n url: MaybeAccessor<AutomergeUrl | undefined>,\n options?: UseDocHandleOptions\n): Resource<DocHandle<T> | undefined> {\n const contextRepo = useContext(RepoContext)\n\n if (!options?.repo && !contextRepo) {\n throw new Error(\"use outside <RepoContext> requires options.repo\")\n }\n\n const repo = (options?.repo || contextRepo)!\n\n function getExistingHandle() {\n if (options?.[\"~skipInitialValue\"]) return undefined\n const unwrappedURL = typeof url == \"function\" ? url() : url\n if (!unwrappedURL) return undefined\n try {\n const documentId = new URL(unwrappedURL).pathname as DocumentId\n const existingHandle = repo.handles[documentId]\n if (existingHandle?.isReady()) {\n return existingHandle as DocHandle<T>\n }\n } catch (error) {\n console.error(\"Error parsing URL:\", error)\n }\n }\n\n const [handle, { mutate }] = createResource(\n url,\n async url => {\n const handle = await repo.find<T>(url, {\n allowableStates: readyStates,\n })\n const reject = (state: HandleState) =>\n Promise.reject(new Error(`document not available: [${state}]`))\n\n if (handle.isReady()) {\n return handle\n } else if (handle.inState(badStates)) {\n return reject(handle.state)\n }\n\n return handle.whenReady(readyStates).then(() => {\n if (handle.isReady()) {\n return handle\n }\n return reject(handle.state)\n })\n },\n {\n initialValue: getExistingHandle(),\n }\n )\n\n createEffect(() => {\n const unwrappedURL = typeof url == \"function\" ? url() : url\n if (!unwrappedURL) {\n mutate()\n }\n })\n\n return handle\n}\n", "import type {\n AutomergeUrl,\n Doc,\n DocHandle,\n} from \"@automerge/automerge-repo/slim\"\nimport createDocumentProjection from \"./createDocumentProjection.js\"\nimport useDocHandle from \"./useDocHandle.js\"\nimport type { MaybeAccessor, UseDocHandleOptions } from \"./types.js\"\nimport type { Accessor, Resource } from \"solid-js\"\n\n/**\n * get a fine-grained live view of a document, and its handle, from a URL.\n * @param url a function that returns a url\n */\nexport default function useDocument<T extends object>(\n url: MaybeAccessor<AutomergeUrl | undefined>,\n options?: UseDocHandleOptions\n): [Accessor<Doc<T> | undefined>, Resource<DocHandle<T> | undefined>] {\n const handle = useDocHandle<T>(url, options)\n return [createDocumentProjection<T>(handle), handle] as const\n}\n", "import type { Repo } from \"@automerge/automerge-repo/slim\"\nimport { RepoContext } from \"./context.js\"\nimport { useContext } from \"solid-js\"\n\n/** grab the repo from the {@link RepoContext} */\nexport default function useRepo(): Repo {\n const repo = useContext(RepoContext)\n if (!repo) throw new Error(\"Please wrap me in a <RepoContext value={repo}>\")\n return repo\n}\n", "/**\n * Open a streaming subscription. Dispatches a `patchwork:subscribe` for the\n * given `selector` carrying a fresh `MessageChannel` port; the answering\n * provider pushes values back over that channel for as long as the\n * subscription is live. `listener` is invoked once per emission (the first\n * delivery is always async because `MessagePort.postMessage` queues a task).\n *\n * The event is dispatched from the nearest enclosing `<patchwork-view>` so\n * callers can pass any node inside a provider subtree. An unclaimed\n * subscription is never settled: if no provider answers, `listener` simply\n * never fires.\n *\n * Returns an unsubscribe function. Calling it tells the provider to tear down\n * (via an `unsubscribe` message) and closes the consumer's port; any values\n * the provider emits after that are dropped.\n */\nexport function subscribe(element, selector, listener) {\n const view = element.closest(\"patchwork-view\");\n const dispatchEl = view ?? element;\n const channel = new MessageChannel();\n const port = channel.port2;\n const controller = new AbortController();\n const { signal } = controller;\n port.addEventListener(\"message\", (event) => {\n if (event.data?.type === \"change\")\n listener(event.data.value);\n }, { signal });\n // addEventListener (unlike assigning onmessage) does not implicitly start\n // the port, so message delivery has to be kicked off explicitly.\n port.start();\n const detail = {\n selector,\n port: channel.port1,\n };\n dispatchEl.dispatchEvent(new CustomEvent(\"patchwork:subscribe\", {\n detail,\n bubbles: true,\n composed: true,\n }));\n return () => {\n if (signal.aborted)\n return;\n controller.abort();\n port.postMessage({ type: \"unsubscribe\" });\n port.close();\n };\n}\n/**\n * Answer a `patchwork:subscribe`. The `producer` receives a `respond`\n * callback it can call any number of times to push values to the consumer,\n * and may return a teardown that runs when the consumer unsubscribes. Stops\n * propagation so ancestor providers don't double-answer. Values emitted after\n * the consumer unsubscribes are dropped.\n */\nexport function accept(event, producer) {\n event.stopPropagation();\n const port = event.detail.port;\n let alive = true;\n const respond = (value) => {\n if (!alive)\n return;\n port.postMessage({ type: \"change\", value });\n };\n let teardown;\n try {\n teardown = producer(respond);\n }\n catch (err) {\n console.error(\"[patchwork-providers] subscribe producer threw:\", err);\n }\n const stop = () => {\n if (!alive)\n return;\n alive = false;\n try {\n teardown?.();\n }\n catch (err) {\n console.error(\"[patchwork-providers] subscribe teardown threw:\", err);\n }\n port.close();\n };\n port.onmessage = (event) => {\n if (event.data?.type === \"unsubscribe\")\n stop();\n };\n}\n/**\n * One-shot convenience wrapper over {@link subscribe}: opens a subscription\n * for `selector`, resolves with the first value a provider emits, then\n * immediately unsubscribes. Because there is no fallback provider, an\n * unclaimed selector never resolves \u2014 use `subscribe` directly if you need to\n * handle the \"no provider\" case.\n */\nexport function request(element, selector) {\n return new Promise((resolve) => {\n const unsubscribe = subscribe(element, selector, (value) => {\n // The first emission is always async (postMessage queues a task), so\n // `unsubscribe` is assigned by the time this fires.\n unsubscribe();\n resolve(value);\n });\n });\n}\nexport { registerRepoProviderElement, } from \"./repo-provider.js\";\n", "import { createSignal, onCleanup, onMount } from \"solid-js\";\nimport { createStore, reconcile } from \"solid-js/store\";\nimport { createDocumentProjection } from \"@automerge/automerge-repo-solid-primitives\";\nimport * as Providers from \"@inkandswitch/patchwork-providers\";\n/**\n * Generic reactive request. Resolves the first value a provider emits for\n * `selector` (via the one-shot `request` helper) and returns an accessor that\n * reads `undefined` until then. `T` is the response type.\n */\nexport function request(element, selector) {\n const [value, setValue] = createSignal(undefined);\n onMount(() => {\n Providers.request(element, selector).then((v) => {\n if (v == null)\n return;\n setValue(() => v);\n });\n });\n return value;\n}\nexport function subscribe(element, selector, initialValue) {\n const [value, setValue] = createSignal(initialValue);\n onMount(() => {\n const unsubscribe = Providers.subscribe(element, selector, setValue);\n onCleanup(unsubscribe);\n });\n return value;\n}\n/**\n * Store-backed subscription. Use this when a consumer wants Solid's\n * fine-grained nested reactivity for incoming JSON object or array snapshots.\n * Requires an initial object/array so the store has a stable root.\n *\n * `reconcile` preserves stable object/array identity where possible, so this\n * helper is not a good fit when the top-level value is used as an identity key\n * for resources or memos.\n */\nexport function subscribeReconciled(element, selector, initialValue) {\n const [store, setStore] = createStore(initialValue);\n onMount(() => {\n const unsubscribe = Providers.subscribe(element, selector, (v) => {\n setStore(reconcile(v));\n });\n onCleanup(unsubscribe);\n });\n return store;\n}\n/**\n * Handle-specialized subscription. Use when the answering provider emits an\n * `AutomergeUrl`. The handle is recovered locally from the global repo\n * (`window.repo`), so it stays fully live \u2014 reads project reactively and writes go\n * straight back to the same repo. Returns `[doc, handle]` matching the shape\n * of solid-primitives' `useDocument`; both read `undefined` until the first\n * url arrives. `T` is the doc shape inside the handle.\n */\nexport function subscribeDoc(element, selector) {\n const [handle, setHandle] = createSignal(undefined);\n onMount(() => {\n let canceled = false;\n const unsubscribe = Providers.subscribe(element, selector, (url) => {\n if (!url)\n return;\n const repo = \"repo\" in window ? window.repo : undefined;\n if (!repo)\n return;\n void Promise.resolve(repo.find(url)).then((h) => {\n if (canceled)\n return;\n setHandle(() => h);\n });\n });\n onCleanup(() => {\n canceled = true;\n unsubscribe();\n });\n });\n const doc = createDocumentProjection(handle);\n return [doc, handle];\n}\n", "import type { AutomergeUrl } from \"@automerge/automerge-repo/slim\";\nimport {\n dragstack,\n addToDragstack,\n removeFromDragstack,\n type SideboardDragAndDropItem,\n} from \"../dnd/dnd.ts\";\n\n/**\n * A cmd/ctrl-drag rubber-band selection over the document list. Attach the\n * returned `onMouseDown` to the list container.\n *\n * Rows whose bounding boxes intersect the band are added to the drag selection\n * (the `dragstack`); rows the band leaves are removed again, so the selection\n * tracks the band live. Any selection the user made before starting the band\n * (via cmd-click) is left untouched \u2014 the band only manages the rows it adds.\n */\nexport function createMarquee(opts: {\n container: () => HTMLElement | undefined;\n source: () => string;\n}) {\n let startX = 0;\n let startY = 0;\n let active = false;\n // Selection present before the band started \u2014 never touched by the band.\n let preexisting = new Set<string>();\n // Rows the band itself added, so it can release them as it shrinks.\n let owned = new Set<string>();\n\n function itemFromEl(el: Element): SideboardDragAndDropItem {\n return {\n id: el.getAttribute(\"data-dnd-item\")!,\n url: el.getAttribute(\"data-doc-url\") as AutomergeUrl,\n type: el.getAttribute(\"data-doc-type\") ?? \"\",\n name: (el.textContent ?? \"\").trim(),\n source: opts.source(),\n };\n }\n\n function onMouseMove(event: MouseEvent) {\n const dx = event.clientX - startX;\n const dy = event.clientY - startY;\n if (!active) {\n // Small threshold so a plain cmd-click still toggles a single item.\n if (Math.hypot(dx, dy) < 5) return;\n active = true;\n }\n event.preventDefault();\n\n const left = Math.min(startX, event.clientX);\n const top = Math.min(startY, event.clientY);\n const right = Math.max(startX, event.clientX);\n const bottom = Math.max(startY, event.clientY);\n\n const container = opts.container();\n if (!container) return;\n\n const nextOwned = new Set<string>();\n for (const el of container.querySelectorAll(\"[data-dnd-item]\")) {\n if ((el as HTMLElement).offsetParent === null) continue; // hidden row\n const id = el.getAttribute(\"data-dnd-item\");\n if (!id || preexisting.has(id)) continue;\n const r = el.getBoundingClientRect();\n const hit = !(\n r.right < left ||\n r.left > right ||\n r.bottom < top ||\n r.top > bottom\n );\n if (!hit) continue;\n nextOwned.add(id);\n if (!dragstack.has(id)) addToDragstack(id, itemFromEl(el));\n }\n for (const id of owned) {\n if (!nextOwned.has(id)) removeFromDragstack(id);\n }\n owned = nextOwned;\n }\n\n function onMouseUp() {\n window.removeEventListener(\"mousemove\", onMouseMove, true);\n window.removeEventListener(\"mouseup\", onMouseUp, true);\n active = false;\n owned = new Set();\n preexisting = new Set();\n }\n\n function onMouseDown(event: MouseEvent) {\n if (event.button !== 0 || !(event.metaKey || event.ctrlKey)) return;\n // Don't start a band from the toolbar (filter input / create button).\n if ((event.target as Element).closest(\".document-list__toolbar\")) return;\n startX = event.clientX;\n startY = event.clientY;\n active = false;\n owned = new Set();\n preexisting = new Set(dragstack.keys());\n window.addEventListener(\"mousemove\", onMouseMove, true);\n window.addEventListener(\"mouseup\", onMouseUp, true);\n }\n\n return { onMouseDown };\n}\n", "import { template as _$template } from \"solid-js/web\";\nimport { delegateEvents as _$delegateEvents } from \"solid-js/web\";\nimport { insert as _$insert } from \"solid-js/web\";\nimport { effect as _$effect } from \"solid-js/web\";\nimport { createComponent as _$createComponent } from \"solid-js/web\";\nimport { use as _$use } from \"solid-js/web\";\nvar _tmpl$ = /*#__PURE__*/_$template(`<aside class=document-list><nav class=\"document-list__doclist document-list-widget\"role=tree aria-multiselectable=true><div class=document-list__toolbar><div class=document-list__filter-container><input name=filter class=document-list__filter placeholder=\"Filter by title\">`);\nimport { useDocument } from \"solid-automerge\";\nimport { createEffect, createSignal, onCleanup, Show, Suspense } from \"solid-js\";\nimport { render } from \"solid-js/web\";\nimport { setPendingNewDoc, setAutoExpandedFolders } from \"./state.ts\";\nimport { collectExpandedFolders } from \"./document-list/auto-expand.ts\";\nimport CreateNew from \"./create-new.tsx\";\nimport { createOpenEvent } from \"./events.ts\";\nimport { SearchIcon } from \"./icons.tsx\";\nimport { DocumentList } from \"./document-list/document-list.tsx\";\nimport { LoadingRows } from \"./document-list/loading-row.tsx\";\nimport { subscribe } from \"@inkandswitch/patchwork-providers-solid\";\nimport { handleFilesDrop } from \"./document-list/file-drop.ts\";\nimport { copyMode, isNewDocDrag, isSameDragOriginView } from \"./dnd/dnd.ts\";\nimport { executeDrop } from \"./dnd/operations.ts\";\nimport { getDndPayload, hasDocumentDrag } from \"./dnd/payload.ts\";\nimport { createMarquee } from \"./document-list/marquee.ts\";\nexport function DocumentListPanel(props) {\n const [folder, folderHandle] = useDocument(() => props.folderUrl, {\n repo: props.repo\n });\n const [filter, setFilter] = createSignal(\"\");\n const folderReady = () => folderHandle.state === \"ready\" || folderHandle.state === \"refreshing\";\n const selectedDocUrls = subscribe(props.element, {\n type: \"patchwork:selected-doc\"\n }, []);\n createEffect(() => {\n if (!folderReady()) return;\n const selected = selectedDocUrls();\n if (!selected.length) {\n setAutoExpandedFolders(/* @__PURE__ */new Set());\n return;\n }\n let cancelled = false;\n const result = /* @__PURE__ */new Set();\n collectExpandedFolders(props.repo, props.folderUrl, new Set(selected), result, /* @__PURE__ */new Set()).then(() => {\n if (!cancelled) setAutoExpandedFolders(result);\n });\n onCleanup(() => {\n cancelled = true;\n });\n });\n function open(detail) {\n props.element.dispatchEvent(createOpenEvent(detail));\n }\n const [isDraggingFile, setIsDraggingFile] = createSignal(false);\n let navEl;\n const marquee = createMarquee({\n container: () => navEl,\n source: () => props.element.toolId ?? \"\"\n });\n const attachMarquee = el => {\n navEl = el;\n el.addEventListener(\"mousedown\", marquee.onMouseDown, true);\n onCleanup(() => el.removeEventListener(\"mousedown\", marquee.onMouseDown, true));\n };\n return (() => {\n var _el$ = _tmpl$(),\n _el$2 = _el$.firstChild,\n _el$3 = _el$2.firstChild,\n _el$4 = _el$3.firstChild,\n _el$5 = _el$4.firstChild;\n _el$2.addEventListener(\"drop\", event => {\n event.preventDefault();\n setIsDraggingFile(false);\n if (isNewDocDrag(event)) {\n const h = folderHandle();\n if (h) {\n const len = h.doc()?.docs?.length ?? 0;\n setPendingNewDoc({\n containerUrl: h.url,\n index: len\n });\n }\n return;\n }\n const files = event.dataTransfer?.files;\n if (files && files.length > 0 && folderHandle()) {\n const folderDoc = folderHandle().doc();\n const insertIndex = folderDoc?.docs?.length || 0;\n handleFilesDrop(files, folderHandle(), props.repo, \"inside\", insertIndex);\n return;\n }\n const payload = getDndPayload(event);\n if (!payload || !folderHandle()) return;\n const {\n source,\n items\n } = payload;\n const rootUrl = folderHandle().url;\n const docsLength = folderHandle().doc()?.docs?.length ?? 0;\n executeDrop({\n draggedIds: items.map(i => i.id),\n draggedUrls: items.map(i => i.url),\n draggedItems: items,\n // Append after the last root item; \"inside\" root if empty\n targetId: docsLength > 0 ? `${rootUrl}/${docsLength - 1}` : rootUrl,\n position: docsLength > 0 ? \"below\" : \"inside\",\n sourceToolId: source,\n copyMode: copyMode()\n }, props.repo, folderHandle.latest, isSameDragOriginView(props.element));\n });\n _el$2.addEventListener(\"dragleave\", event => {\n const related = event.relatedTarget;\n if (!related || !event.currentTarget.contains(related)) {\n setIsDraggingFile(false);\n }\n });\n _el$2.addEventListener(\"dragover\", event => {\n if (event.dataTransfer?.types.includes(\"Files\")) {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"copy\";\n setIsDraggingFile(true);\n return;\n }\n if (hasDocumentDrag(event.dataTransfer) || isNewDocDrag(event)) {\n event.preventDefault();\n event.dataTransfer.dropEffect = copyMode() ? \"copy\" : \"move\";\n }\n });\n _$use(attachMarquee, _el$2);\n _$insert(_el$3, _$createComponent(CreateNew, {\n square: true,\n draggable: true,\n clearFilter: () => setFilter(\"\"),\n changeFolder: fn => folderHandle()?.change(fn),\n get repo() {\n return props.repo;\n },\n get hive() {\n return props.element.hive;\n },\n open: open\n }), _el$4);\n _$insert(_el$4, _$createComponent(SearchIcon, {}), _el$5);\n _el$5.$$input = event => setFilter(event.target.value.toLowerCase());\n _$insert(_el$2, _$createComponent(Show, {\n get when() {\n return folderReady();\n },\n get fallback() {\n return _$createComponent(LoadingRows, {\n depth: 0\n });\n },\n get children() {\n return _$createComponent(Suspense, {\n get fallback() {\n return _$createComponent(LoadingRows, {\n depth: 0\n });\n },\n get children() {\n return _$createComponent(DocumentList, {\n depth: 0,\n get repo() {\n return props.repo;\n },\n get docs() {\n return folder()?.docs;\n },\n get handle() {\n return folderHandle.latest;\n },\n open: open,\n get hive() {\n return props.element.hive;\n },\n get selectedDocUrls() {\n return selectedDocUrls();\n },\n get element() {\n return props.element;\n },\n get rootFolderHandle() {\n return folderHandle.latest;\n },\n get filter() {\n return filter();\n },\n clearFilter: () => setFilter(\"\")\n });\n }\n });\n }\n }), null);\n _$effect(() => _el$2.classList.toggle(\"document-list__doclist--drag-over\", !!isDraggingFile()));\n _$effect(() => _el$5.value = filter());\n return _el$;\n })();\n}\nexport function renderDocumentListPanel(folderUrl, element) {\n return render(() => _$createComponent(DocumentListPanel, {\n folderUrl: folderUrl,\n get repo() {\n return element.repo;\n },\n element: element\n }), element);\n}\n_$delegateEvents([\"input\"]);"],
5
- "mappings": "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",
6
- "names": ["pendingNewDoc", "setPendingNewDoc", "createSignal", "filterMatches", "filter", "string", "lower", "term", "renaming", "setRenaming", "autoExpandedFolders", "setAutoExpandedFolders", "collectExpandedFolders", "repo", "folderUrl", "selected", "result", "visited", "nextVisited", "doc", "contains", "child", "isValidAutomergeUrl", "createDocOfDatatype2", "getRegistry", "isLoadablePlugin", "isLoadedPlugin", "_tmpl$", "template", "_tmpl$3", "template", "_tmpl$4", "SearchIcon", "_tmpl$", "NewDocIcon", "props", "_el$3", "_tmpl$3", "spread", "Chevron", "_el$4", "_tmpl$4", "getRegistry", "isLoadedPlugin", "docLinkFromUrl", "repo", "url", "doc", "type", "name", "registry", "datatype", "getRegistry", "getSupportedToolsForType", "useFilteredDatatypes", "filter", "datatypeRegistry", "getRegistry", "plugins", "setPlugins", "createStore", "dispose", "reconcile", "onCleanup", "createShared", "factory", "cache", "key", "value", "createRoot", "d", "entry", "useSharedToolsForType", "type", "toolRegistry", "update", "tools", "getSupportedToolsForType", "useSupportedToolsForType", "options", "all", "filtered", "setFiltered", "createEffect", "t", "isClient", "isServer", "isDev", "DEV", "chain", "callbacks", "args", "callback", "access", "v", "asArray", "value", "accessWith", "valueOrFn", "args", "tryOnCleanup", "isDev", "fn", "getOwner", "onCleanup", "makeEventListener", "target", "type", "handler", "options", "tryOnCleanup", "createEventListener", "targets", "isServer", "attachListeners", "asArray", "access", "el", "createEffect", "createRenderEffect", "extractCSSregex", "stringStyleToObject", "style", "object", "match", "combineStyle", "a", "b", "mergeRefs", "refs", "chain", "addItemToArray", "array", "item", "index", "updatedArray", "isNumber", "value", "isString", "value", "createGenerateId", "baseId", "suffix", "contains", "parent", "child", "getActiveElement", "node", "activeDescendant", "activeElement", "getDocument", "isFrame", "id", "element", "getWindow", "EventKey", "EventKey2", "testPlatform", "re", "isMac", "isIPhone", "isIPad", "isIOS", "isAppleDevice", "callHandler", "event", "handler", "isFunction", "composeEventHandlers", "handlers", "focusWithoutScrolling", "element", "supportsPreventScroll", "scrollableElements", "getScrollableElements", "restoreScrollPosition", "supportsPreventScrollCached", "parent", "rootScrollingElement", "scrollTop", "scrollLeft", "focusableElements", "tabbableElements", "FOCUSABLE_ELEMENT_SELECTOR", "TABBABLE_ELEMENT_SELECTOR", "getAllTabbableIn", "container", "includeContainer", "tabbableElements2", "isTabbable", "frameBody", "allFrameTabbable", "isFocusable", "isElementVisible", "hasNegativeTabIndex", "childElement", "isStyleVisible", "isAttributeVisible", "display", "visibility", "isVisible", "getComputedStyle", "computedDisplay", "computedVisibility", "isElementInScope", "last", "scope", "node", "element", "getFocusableTreeWalker", "root", "opts", "selector", "TABBABLE_ELEMENT_SELECTOR", "FOCUSABLE_ELEMENT_SELECTOR", "walker", "isElementVisible", "getScrollParent", "parentNode", "isScrollable", "style", "noop", "isPointInPolygon", "point", "polygon", "x", "y", "inside", "length", "l", "i", "j", "xi", "yi", "xj", "yj", "vy", "where", "mergeDefaultProps", "defaultProps", "props", "mergeProps", "transitionsByElement", "transitionCallbacks", "setupGlobalEvents", "onTransitionStart", "e", "transitions", "onTransitionEnd", "properties", "cb", "scrollIntoView", "scrollView", "element", "offsetX", "relativeOffset", "offsetY", "width", "y", "maxX", "x", "maxY", "height", "ancestor", "child", "axis", "prop", "sum", "scrollIntoViewport", "targetElement", "opts", "root", "scrollParent", "getScrollParent", "originalLeft", "originalTop", "newLeft", "newTop", "visuallyHiddenStyles", "RTL_SCRIPTS", "RTL_LANGS", "isRTL", "locale", "script", "lang", "getReadingDirection", "getDefaultLocale", "currentLocale", "listeners", "updateLocale", "listener", "createDefaultLocale", "defaultSSRLocale", "defaultClientLocale", "setDefaultClientLocale", "createSignal", "defaultLocale", "createMemo", "isServer", "onMount", "onCleanup", "I18nContext", "createContext", "useLocale", "defaultLocale", "createDefaultLocale", "useContext", "I18nContext", "cache", "createCollator", "options", "locale", "cacheKey", "createMemo", "a", "b", "key", "collator", "Polymorphic", "props", "local", "others", "splitProps", "createComponent", "Dynamic", "mergeProps", "sides", "min", "max", "round", "floor", "createCoords", "v", "oppositeSideMap", "clamp", "start", "value", "end", "evaluate", "param", "getSide", "placement", "getAlignment", "getOppositeAxis", "axis", "getAxisLength", "getSideAxis", "firstChar", "getAlignmentAxis", "getAlignmentSides", "rects", "rtl", "alignment", "alignmentAxis", "length", "mainAlignmentSide", "getOppositePlacement", "getExpandedPlacements", "oppositePlacement", "getOppositeAlignmentPlacement", "lrPlacement", "rlPlacement", "tbPlacement", "btPlacement", "getSideList", "side", "isStart", "getOppositeAxisPlacements", "flipAlignment", "direction", "list", "expandPaddingObject", "padding", "getPaddingObject", "rectToClientRect", "rect", "x", "y", "width", "height", "computeCoordsFromPlacement", "_ref", "placement", "rtl", "reference", "floating", "sideAxis", "getSideAxis", "alignmentAxis", "getAlignmentAxis", "alignLength", "getAxisLength", "side", "getSide", "isVertical", "commonX", "commonY", "commonAlign", "coords", "getAlignment", "detectOverflow", "state", "options", "_await$platform$isEle", "x", "y", "platform", "rects", "elements", "strategy", "boundary", "rootBoundary", "elementContext", "altBoundary", "padding", "evaluate", "paddingObject", "getPaddingObject", "element", "clippingClientRect", "rectToClientRect", "rect", "offsetParent", "offsetScale", "elementClientRect", "MAX_RESET_COUNT", "computePosition", "config", "middleware", "platformWithDetectOverflow", "statefulPlacement", "resetCount", "middlewareData", "i", "currentMiddleware", "name", "fn", "nextX", "nextY", "data", "reset", "arrow", "axis", "length", "arrowDimensions", "isYAxis", "minProp", "maxProp", "clientProp", "endDiff", "startDiff", "arrowOffsetParent", "clientSize", "centerToReference", "largestPossiblePadding", "minPadding", "min", "maxPadding", "min$1", "max", "center", "offset", "clamp", "shouldAddOffset", "alignmentOffset", "flip", "options", "state", "_middlewareData$arrow", "_middlewareData$flip", "placement", "middlewareData", "rects", "initialPlacement", "platform", "elements", "checkMainAxis", "checkCrossAxis", "specifiedFallbackPlacements", "fallbackStrategy", "fallbackAxisSideDirection", "flipAlignment", "detectOverflowOptions", "evaluate", "side", "getSide", "initialSideAxis", "getSideAxis", "isBasePlacement", "rtl", "fallbackPlacements", "getOppositePlacement", "getExpandedPlacements", "hasFallbackAxisSideDirection", "getOppositeAxisPlacements", "placements", "overflow", "overflows", "overflowsData", "sides", "getAlignmentSides", "_middlewareData$flip2", "_overflowsData$filter", "nextIndex", "nextPlacement", "d", "resetPlacement", "a", "b", "_overflowsData$filter2", "currentSideAxis", "acc", "getSideOffsets", "rect", "isAnySideFullyClipped", "hide", "strategy", "offsets", "originSides", "convertValueToCoords", "state", "options", "placement", "platform", "elements", "rtl", "side", "getSide", "alignment", "getAlignment", "isVertical", "getSideAxis", "mainAxisMulti", "crossAxisMulti", "rawValue", "evaluate", "mainAxis", "crossAxis", "alignmentAxis", "offset", "_middlewareData$offse", "_middlewareData$arrow", "x", "y", "middlewareData", "diffCoords", "shift", "checkMainAxis", "checkCrossAxis", "limiter", "_ref", "detectOverflowOptions", "coords", "overflow", "getOppositeAxis", "mainAxisCoord", "crossAxisCoord", "minSide", "maxSide", "min", "max", "clamp", "limitedCoords", "size", "options", "state", "_state$middlewareData", "_state$middlewareData2", "placement", "rects", "platform", "elements", "apply", "detectOverflowOptions", "evaluate", "overflow", "side", "getSide", "alignment", "getAlignment", "isYAxis", "getSideAxis", "width", "height", "heightSide", "widthSide", "maximumClippingHeight", "maximumClippingWidth", "overflowAvailableHeight", "min", "overflowAvailableWidth", "noShift", "availableHeight", "availableWidth", "xMin", "max", "xMax", "yMin", "yMax", "nextDimensions", "hasWindow", "getNodeName", "node", "isNode", "getWindow", "_node$ownerDocument", "getDocumentElement", "_ref", "value", "isElement", "isHTMLElement", "isShadowRoot", "isOverflowElement", "element", "overflow", "overflowX", "overflowY", "display", "getComputedStyle", "isTableElement", "isTopLayer", "willChangeRe", "containRe", "isNotNone", "isWebKitValue", "isContainingBlock", "elementOrCss", "css", "isWebKit", "getContainingBlock", "currentNode", "getParentNode", "isLastTraversableNode", "getNodeScroll", "result", "getNearestOverflowAncestor", "parentNode", "getOverflowAncestors", "list", "traverseIframes", "_node$ownerDocument2", "scrollableAncestor", "isBody", "win", "frameElement", "getFrameElement", "getCssDimensions", "element", "css", "getComputedStyle", "width", "height", "hasOffset", "isHTMLElement", "offsetWidth", "offsetHeight", "shouldFallback", "round", "unwrapElement", "isElement", "getScale", "domElement", "createCoords", "rect", "$", "x", "y", "noOffsets", "getVisualOffsets", "win", "getWindow", "isWebKit", "shouldAddVisualOffsets", "isFixed", "floatingOffsetParent", "getBoundingClientRect", "includeScale", "isFixedStrategy", "offsetParent", "clientRect", "scale", "visualOffsets", "offsetWin", "currentWin", "currentIFrame", "getFrameElement", "iframeScale", "iframeRect", "left", "top", "rectToClientRect", "getWindowScrollBarX", "leftScroll", "getNodeScroll", "getDocumentElement", "getHTMLOffset", "documentElement", "scroll", "htmlRect", "convertOffsetParentRelativeRectToViewportRelativeRect", "_ref", "elements", "strategy", "topLayer", "isTopLayer", "offsets", "isOffsetParentAnElement", "getNodeName", "isOverflowElement", "offsetRect", "htmlOffset", "getClientRects", "getDocumentRect", "html", "body", "max", "SCROLLBAR_MAX", "getViewportRect", "visualViewport", "visualViewportBased", "windowScrollbarX", "doc", "bodyStyles", "bodyMarginInline", "clippingStableScrollbarWidth", "getInnerBoundingClientRect", "getClientRectFromClippingAncestor", "clippingAncestor", "hasFixedPositionAncestor", "stopNode", "parentNode", "getParentNode", "isLastTraversableNode", "getClippingElementAncestors", "cache", "cachedResult", "result", "getOverflowAncestors", "el", "currentContainingBlockComputedStyle", "elementIsFixed", "currentNode", "computedStyle", "currentNodeIsContaining", "isContainingBlock", "ancestor", "getClippingRect", "boundary", "rootBoundary", "clippingAncestors", "firstRect", "right", "bottom", "i", "min", "getDimensions", "getRectRelativeToOffsetParent", "setLeftRTLScrollbarOffset", "isStaticPositioned", "getTrueOffsetParent", "polyfill", "rawOffsetParent", "getOffsetParent", "svgOffsetParent", "isTableElement", "getContainingBlock", "getElementRects", "data", "getOffsetParentFn", "getDimensionsFn", "floatingDimensions", "isRTL", "platform", "rectsAreEqual", "a", "b", "observeMove", "onMove", "io", "timeoutId", "root", "cleanup", "_io", "refresh", "skip", "threshold", "elementRectForRootMargin", "insetTop", "floor", "insetRight", "insetBottom", "insetLeft", "options", "isFirstUpdate", "handleObserve", "entries", "ratio", "autoUpdate", "reference", "floating", "update", "ancestorScroll", "ancestorResize", "elementResize", "layoutShift", "animationFrame", "referenceEl", "ancestors", "cleanupIo", "reobserveFrame", "resizeObserver", "firstEntry", "_resizeObserver", "frameId", "prevRefRect", "frameLoop", "nextRefRect", "_resizeObserver2", "offset", "shift", "flip", "size", "hide", "arrow", "computePosition", "reference", "floating", "options", "cache", "mergedOptions", "platform", "platformWithCache", "PopperContext", "createContext", "usePopperContext", "context", "useContext", "_tmpl$", "template", "DEFAULT_SIZE", "HALF_DEFAULT_SIZE", "ROTATION_DEG", "PopperArrow", "props", "mergedProps", "mergeDefaultProps", "local", "others", "splitProps", "dir", "contentStyle", "createComputedStyle", "fill", "stroke", "borderWidth", "strokeWidth", "rotate", "createComponent", "Polymorphic", "mergeProps", "r$", "_ref$", "mergeRefs", "combineStyle", "_el$", "_el$2", "createRenderEffect", "setAttribute", "element", "style", "setStyle", "createSignal", "createEffect", "el", "getWindow", "PopperPositioner", "createDOMRect", "anchorRect", "x", "y", "width", "height", "rect", "getAnchorElement", "anchor", "getAnchorRect", "isValidPlacement", "flip2", "REVERSE_BASE_PLACEMENT", "getTransformOrigin", "placement", "readingDirection", "basePlacement", "alignment", "reversePlacement", "PopperRoot", "positionerRef", "setPositionerRef", "arrowRef", "setArrowRef", "currentPlacement", "setCurrentPlacement", "anchorRef", "direction", "useLocale", "updatePosition", "referenceEl", "floatingEl", "arrowEl", "arrowOffset", "finalGutter", "middleware", "offset", "hasAlignment", "fallbackPlacements", "flip", "shift", "size", "availableWidth", "availableHeight", "rects", "referenceWidth", "hide", "arrow", "pos", "computePosition", "platform", "visibility", "arrowX", "arrowY", "cleanupAutoUpdate", "autoUpdate", "onCleanup", "positioner", "content", "Popper", "buildNodes", "params", "index", "level", "nodes", "getKey", "data", "_getKey", "dataKey", "isString", "getTextValue", "_getTextValue", "dataTextValue", "getDisabled", "_getDisabled", "getSectionChildren", "isNumber", "sectionChildren", "childNodes", "createCollection", "props", "deps", "createMemo", "access", "i", "createControllableSignal", "props", "_value", "_setValue", "createSignal", "isControlled", "createMemo", "value", "next", "untrack", "nextValue", "accessWith", "createControllableBooleanSignal", "setValue", "createControllableArraySignal", "Selection", "_Selection", "keys", "anchorKey", "currentKey", "createControllableSelectionSignal", "props", "_value", "setValue", "createControllableSignal", "isNonContiguousSelectionModifier", "isAppleDevice", "isCtrlKeyPressed", "isMac", "convertSelection", "selection", "isSameSelection", "setA", "setB", "item", "createMultipleSelectionState", "mergedProps", "mergeDefaultProps", "isFocused", "setFocused", "createSignal", "focusedKey", "setFocusedKey", "selectedKeysProp", "createMemo", "access", "defaultSelectedKeys", "defaultSelection", "selectedKeys", "_setSelectedKeys", "value", "selectionBehavior", "setSelectionBehavior", "selectionMode", "disallowEmptySelection", "setSelectedKeys", "createEffect", "createTypeSelect", "search", "setSearch", "timeoutId", "setTimeoutId", "e", "delegate", "manager", "character", "getStringForKey", "newSearch", "prev", "key", "isAllSameLetter", "letter", "createSelectableCollection", "ref", "scrollRef", "mergeProps", "finalScrollRef", "direction", "useLocale", "scrollPos", "createEventListener", "scrollEl", "typeSelectHandlers", "orientation", "onKeyDown", "callHandler", "refEl", "selectOnFocus", "navigateToKey", "shouldFocusWrap", "nextKey", "isRTL", "firstKey", "lastKey", "walker", "getFocusableTreeWalker", "next", "last", "focusWithoutScrolling", "onFocusIn", "navigateToFirstKey", "relatedTarget", "element", "scrollIntoView", "onFocusOut", "onMouseDown", "tryAutoFocus", "autoFocus", "onMount", "on", "newValue", "isVirtualized", "createSelectableItem", "shouldUseVirtualFocus", "onSelect", "isSelected", "isDisabled", "allowsSelection", "pointerDownType", "onPointerDown", "onPointerUp", "onClick", "onFocus", "tabIndex", "dataKey", "key2", "shouldUseVirtualFocus2", "SelectionManager", "collection", "state", "retrievedKey", "k", "first", "isItemBeforeFirst", "isItemAfterLast", "toKey", "retrievedToKey", "from", "to", "fromItem", "toItem", "ListCollection", "nodes", "node", "index", "idx", "createListState", "selectionState", "createCollection", "selectionManager", "createComputed", "ListKeyboardDelegate", "collection", "ref", "collator", "key", "keyAfter", "item", "keyBefore", "menu", "pageY", "keyAbove", "keyBelow", "search", "fromKey", "substring", "createSelectableList", "props", "scrollRef", "createCollator", "delegate", "createMemo", "keyboardDelegate", "access", "createSelectableCollection", "DomCollectionContext", "createContext", "useOptionalDomCollectionContext", "useContext", "useDomCollectionContext", "context", "isElementPreceding", "a", "b", "findDOMIndex", "items", "item", "itemEl", "length", "currentItemEl", "sortBasedOnDOMPosition", "pairs", "index", "isOrderDifferent", "indexA", "indexB", "elementA", "elementB", "_", "setItemsBasedOnDOMPosition", "setItems", "sortedItems", "getCommonParent", "firstItem", "lastItemEl", "parentEl", "getDocument", "createTimeoutObserver", "createEffect", "timeout", "onCleanup", "createSortBasedOnDOMPosition", "previousItems", "callback", "hasPreviousItems", "root", "observer", "createDomCollection", "props", "createControllableArraySignal", "access", "value", "registerItem", "prevItems", "addItemToArray", "nextItems", "prevItem", "props2", "createComponent", "createDomCollectionItem", "mergedProps", "mergeDefaultProps", "unregister", "DATA_TOP_LAYER_ATTR", "originalBodyPointerEvents", "hasDisabledBodyPointerEvents", "layers", "indexOf", "node", "layer", "find", "isTopMostLayer", "getPointerBlockingLayers", "getTopMostPointerBlockingLayer", "hasPointerBlockingLayer", "isBelowPointerBlockingLayer", "highestBlockingIndex", "addLayer", "removeLayer", "index", "assignPointerEventToLayers", "disableBodyPointerEvents", "ownerDocument", "getDocument", "restoreBodyPointerEvents", "layerStack", "AUTOFOCUS_ON_MOUNT_EVENT", "AUTOFOCUS_ON_UNMOUNT_EVENT", "EVENT_OPTIONS", "focusScopeStack", "scope", "removeItemFromArray", "createFocusScope", "props", "ref", "isPaused", "setIsPaused", "createSignal", "focusScope", "lastFocusedElement", "onMountAutoFocus", "e", "onUnmountAutoFocus", "ownerDocument", "getDocument", "createSentinel", "element", "visuallyHiddenStyles", "tabbables", "container", "getAllTabbableIn", "el", "firstTabbable", "items", "lastTabbable", "shouldPreventUnmountAutoFocus", "activeElement", "getActiveElement", "contains", "isFocusable", "createEffect", "isServer", "previouslyFocusedElement", "mountEvent", "focusWithoutScrolling", "onCleanup", "unmountEvent", "access", "onFocusIn", "event", "target", "DATA_TOP_LAYER_ATTR", "onFocusOut", "startSentinel", "endSentinel", "onFocus", "first", "last", "observer", "mutations", "mutation", "DATA_LIVE_ANNOUNCER_ATTR", "createHideOutside", "props", "createEffect", "access", "onCleanup", "ariaHideOutside", "refCountMap", "observerStack", "targets", "root", "visibleNodes", "hiddenNodes", "walk", "root2", "element", "DATA_LIVE_ANNOUNCER_ATTR", "DATA_TOP_LAYER_ATTR", "acceptNode", "node", "target", "walker", "acceptRoot", "hide", "refCount", "observer", "changes", "change", "observerWrapper", "count", "POINTER_DOWN_OUTSIDE_EVENT", "FOCUS_OUTSIDE_EVENT", "createInteractOutside", "props", "ref", "pointerDownTimeoutId", "clickHandler", "noop", "ownerDocument", "getDocument", "onPointerDownOutside", "e", "onFocusOutside", "onInteractOutside", "isEventOutside", "target", "DATA_TOP_LAYER_ATTR", "contains", "onPointerDown", "handler", "container", "handler2", "composeEventHandlers", "pointerDownOutsideEvent", "isCtrlKey", "onFocusIn", "focusOutsideEvent", "createEffect", "isServer", "access", "onCleanup", "createEscapeKeyDown", "props", "handleKeyDown", "event", "EventKey", "createEffect", "isServer", "access", "document", "getDocument", "onCleanup", "DismissableLayerContext", "createContext", "useOptionalDismissableLayerContext", "useContext", "DismissableLayer", "props", "ref", "parentContext", "local", "others", "splitProps", "nestedLayers", "registerNestedLayer", "element", "parentUnregister", "createInteractOutside", "node", "contains", "layer", "e", "layerStack", "createEscapeKeyDown", "getDocument", "onMount", "unregisterFromParentLayer", "onCleanup", "createEffect", "on", "ref2", "disableOutsidePointerEvents", "context", "createComponent", "Polymorphic", "mergeProps", "r$", "_ref$", "mergeRefs", "el", "createDisclosureState", "props", "isOpen", "setIsOpen", "createControllableBooleanSignal", "access", "value", "open", "close", "createTagName", "ref", "fallback", "tagName", "setTagName", "createSignal", "stringOrUndefined", "createEffect", "value", "isString", "__defProp", "__export", "target", "all", "name", "button_exports", "__export", "Button", "ButtonRoot", "BUTTON_INPUT_TYPES", "isButton", "element", "tagName", "props", "ref", "mergedProps", "mergeDefaultProps", "local", "others", "splitProps", "createTagName", "isNativeButton", "createMemo", "elementTagName", "isNativeInput", "isNativeLink", "createComponent", "Polymorphic", "mergeProps", "r$", "_ref$", "mergeRefs", "el", "createToggleState", "props", "isSelected", "_setIsSelected", "createControllableBooleanSignal", "access", "value", "createRegisterId", "setter", "id", "access", "v", "contains", "wrapper", "target", "currentElement", "activeStyles", "createStyle", "props", "createEffect", "style", "access", "properties", "originalStyles", "key", "activeStyle", "property", "onCleanup", "activeStyle2", "value", "style_default", "getScrollDimensions", "element", "axis", "isScrollContainer", "styles", "overflow", "getScrollAtLocation", "location", "stopAt", "directionFactor", "currentElement", "availableScroll", "availableScrollTop", "wrapperReached", "clientSize", "scrollOffset", "scrollSize", "scrolled", "preventScrollStack", "setPreventScrollStack", "createSignal", "isActive", "id", "createPreventScroll", "props", "defaultedProps", "mergeProps", "preventScrollId", "createUniqueId", "currentTouchStart", "currentTouchStartAxis", "currentTouchStartDelta", "createEffect", "access", "stack", "onCleanup", "body", "scrollbarWidth", "style", "properties", "offsetTop", "offsetLeft", "style_default", "maybePreventWheel", "logTouchStart", "maybePreventTouch", "event", "getTouchXY", "target", "wrapper", "delta", "getDeltaXY", "axis", "axisDelta", "resultsInScroll", "wouldScroll", "shouldCancel", "contains", "touch", "i", "wouldResultInScroll", "targetInWrapper", "availableScroll", "availableScrollTop", "getScrollAtLocation", "preventScroll_default", "src_default", "createPresence", "props", "refStyles", "createMemo", "element", "access", "getAnimationName", "presentState", "setPresentState", "createSignal", "animationName", "createEffect", "prevShow", "show", "untrack", "prevAnimationName", "currentAnimationName", "handleAnimationStart", "event", "handleAnimationEnd", "isCurrentAnimation", "onCleanup", "presence_default", "src_default", "MenubarContext", "createContext", "useOptionalMenubarContext", "useContext", "NavigationMenuContext", "createContext", "useOptionalNavigationMenuContext", "useContext", "MenuContext", "createContext", "useOptionalMenuContext", "useContext", "useMenuContext", "context", "MenuItemContext", "useMenuItemContext", "MenuRootContext", "useMenuRootContext", "MenuItemBase", "props", "ref", "rootContext", "menuContext", "mergedProps", "mergeDefaultProps", "createUniqueId", "local", "others", "splitProps", "labelId", "setLabelId", "createSignal", "descriptionId", "setDescriptionId", "labelRef", "setLabelRef", "selectionManager", "key", "isHighlighted", "onSelect", "createDomCollectionItem", "selectableItem", "createSelectableItem", "onPointerMove", "e", "callHandler", "focusWithoutScrolling", "onPointerLeave", "onPointerUp", "onKeyDown", "ariaChecked", "createMemo", "dataset", "createGenerateId", "createRegisterId", "createComponent", "Polymorphic", "mergeProps", "r$", "_ref$", "mergeRefs", "el", "composeEventHandlers", "MenuCheckboxItem", "state", "createToggleState", "checked", "MENUBAR_KEYS", "dir", "orientation", "MENU_KEYS", "MenuTrigger", "optionalMenubarContext", "useOptionalMenubarContext", "direction", "useLocale", "tagName", "createTagName", "isNativeLink", "createEffect", "on", "value", "handleClick", "onPointerDown", "onClick", "scrollIntoViewport", "onMouseOver", "onFocus", "onCleanup", "ButtonRoot", "memo", "MenuContentBase", "optionalNavigationMenuContext", "useOptionalNavigationMenuContext", "lastPointerX", "isRootModalContent", "selectableList", "createSelectableList", "createFocusScope", "event", "contains", "onEscapeKeyDown", "onFocusOutside", "onPointerEnter", "target", "pointerXHasChanged", "commonAttributes", "Show", "Popper", "DismissableLayer", "combineStyle", "MenuContent", "src_default", "MenuGroupContext", "useMenuGroupContext", "MenuGroup", "MenuGroupLabel", "MenuIcon", "MenuItem", "MenuItemDescription", "MenuItemIndicator", "MenuItemLabel", "MenuPortal", "Portal", "MenuRadioGroupContext", "useMenuRadioGroupContext", "MenuRadioGroup", "defaultId", "selected", "setSelected", "createControllableSignal", "MenuRadioItem", "getPointerGraceArea", "placement", "contentEl", "basePlacement", "contentRect", "polygon", "pointerX", "pointerY", "isPointerInGraceArea", "area", "isPointInPolygon", "Menu", "parentDomCollectionContext", "useOptionalDomCollectionContext", "parentMenuContext", "pointerGraceTimeoutId", "pointerGraceIntent", "pointerDir", "triggerId", "setTriggerId", "contentId", "setContentId", "triggerRef", "setTriggerRef", "contentRef", "setContentRef", "focusStrategy", "setFocusStrategy", "currentPlacement", "setCurrentPlacement", "nestedMenus", "setNestedMenus", "items", "setItems", "DomCollectionProvider", "createDomCollection", "disclosureState", "createDisclosureState", "isOpen", "contentPresent", "listState", "createListState", "open", "focusStrategy2", "close", "recursively", "toggle", "_focusContent", "content", "focusContent", "registerNestedMenu", "element", "prev", "parentUnregister", "removeItemFromArray", "isPointerMovingToSubmenu", "onItemEnter", "onItemLeave", "onTriggerLeave", "createHideOutside", "id", "intent", "MenuSub", "SUB_CLOSE_KEYS", "MenuSubContent", "isKeyDownInside", "isCloseKey", "isSubMenu", "SELECTION_KEYS", "SUB_OPEN_KEYS", "MenuSubTrigger", "openTimeoutId", "clearOpenTimeout", "isServer", "parentSelectionManager", "collection", "unregister", "pointerGraceTimer", "MenuRoot", "separator_exports", "__export", "SeparatorRoot", "Separator", "props", "ref", "mergedProps", "mergeDefaultProps", "local", "others", "splitProps", "tagName", "createTagName", "createComponent", "Polymorphic", "mergeProps", "r$", "_ref$", "mergeRefs", "el", "dropdown_menu_exports", "__export", "PopperArrow", "MenuCheckboxItem", "DropdownMenuContent", "DropdownMenu", "MenuGroup", "MenuGroupLabel", "MenuIcon", "MenuItem", "MenuItemDescription", "MenuItemIndicator", "MenuItemLabel", "MenuPortal", "MenuRadioGroup", "MenuRadioItem", "DropdownMenuRoot", "SeparatorRoot", "MenuSub", "MenuSubContent", "MenuSubTrigger", "MenuTrigger", "props", "rootContext", "useMenuRootContext", "context", "useMenuContext", "local", "others", "splitProps", "hasInteractedOutside", "createComponent", "MenuContent", "mergeProps", "e", "focusWithoutScrolling", "defaultId", "createUniqueId", "mergedProps", "mergeDefaultProps", "MenuRoot", "dragging", "setDragging", "createSignal", "copyMode", "setCopyMode", "NEW_DOC_DND_TYPE", "newDocDragging", "setNewDocDragging", "isNewDocDrag", "event", "currentDropTarget", "getDropTarget", "updateDropTargetDOM", "oldTarget", "newTarget", "item", "container", "dragOriginView", "setDragOriginView", "element", "isSameDragOriginView", "dragstack", "setDragChecked", "id", "checked", "el", "addToDragstack", "removeFromDragstack", "clearDragstack", "setDragSourceItems", "ids", "clearDragSourceItems", "isAbove", "clientY", "rect", "clearDropTarget", "setDropTarget", "target", "current", "_tmpl$", "template", "_tmpl$2", "_tmpl$3", "_tmpl$4", "createNew", "repo", "datatype", "hive", "isLoadablePlugin", "getRegistry", "isLoadedPlugin", "docHandle", "createDocOfDatatype2", "doc", "DatatypeMenuContent", "props", "datatypes", "useFilteredDatatypes", "item", "query", "setQuery", "createSignal", "highlightIndex", "setHighlightIndex", "isUrl", "isValidAutomergeUrl", "filteredDatatypes", "q", "d", "a", "b", "itemCount", "selectHighlighted", "idx", "createComponent", "DropdownMenu", "_el$", "_el$2", "use", "el", "e", "text", "i", "createRenderEffect", "Show", "For", "CreateNew", "open", "setOpen", "selectDatatype", "freshy", "handleUrlSubmit", "url", "trimmed", "docLink", "docLinkFromUrl", "lastCloseAt", "handleDragStart", "event", "setNewDocDragging", "NEW_DOC_DND_TYPE", "preview", "isOpen", "_el$3", "_el$4", "addEventListener", "clearDropTarget", "insert", "NewDocIcon", "_p$", "_v$", "_v$2", "setAttribute", "NewDocPlaceholder", "pickDatatype", "submitUrl", "delegateEvents", "deleteAt", "updateText", "docIdFromAutomergeUrl", "Access", "ContactCard", "getRegistry", "isLoadedPlugin", "updateText", "import_debug", "log", "debug", "handleFilesDrop", "files", "folderHandle", "repo", "position", "targetIndex", "file", "arrayBuffer", "content", "nameParts", "extension", "nameWithoutExt", "handle", "insertIndex", "folder", "log", "error", "context_menu_exports", "__export", "PopperArrow", "MenuCheckboxItem", "ContextMenuContent", "ContextMenu", "MenuGroup", "MenuGroupLabel", "MenuIcon", "MenuItem", "MenuItemDescription", "MenuItemIndicator", "MenuItemLabel", "MenuPortal", "MenuRadioGroup", "MenuRadioItem", "ContextMenuRoot", "SeparatorRoot", "MenuSub", "MenuSubContent", "MenuSubTrigger", "ContextMenuTrigger", "useContextMenuContext", "props", "rootContext", "useMenuRootContext", "local", "others", "splitProps", "hasInteractedOutside", "createComponent", "MenuContent", "mergeProps", "e", "ContextMenuContext", "createContext", "useOptionalContextMenuContext", "useContext", "context", "defaultId", "createUniqueId", "direction", "useLocale", "mergedProps", "mergeDefaultProps", "anchorRect", "setAnchorRect", "createSignal", "disclosureState", "createDisclosureState", "isOpen", "MenuRoot", "menuContext", "useMenuContext", "longPressTimoutId", "clearLongPressTimeout", "isServer", "onCleanup", "onContextMenu", "callHandler", "isTouchOrPen", "Polymorphic", "r$", "_ref$", "mergeRefs", "combineStyle", "parseAutomergeUrl", "getImportableUrlFromAutomergeUrl", "deleteAt", "folderCache", "MAX_FOLDER_DEPTH", "extractPlainDocLink", "docLink", "executeDrop", "operation", "repo", "rootFolderHandle", "sameOriginView", "log", "locations", "findItemLocations", "performAdd", "validationError", "getDropValidationError", "performCopy", "performMove", "removeItemsByUrl", "urls", "targets", "removalsByFolder", "visited", "traverse", "handle", "depth", "doc", "i", "child", "indices", "nested", "error", "sorted", "a", "b", "index", "deleteAt", "draggedUrls", "targetId", "position", "rootFolder", "sourceItems", "targetFolder", "targetFolderPath", "targetIndex", "visitedFolders", "folderUrl", "docs", "path", "nestedPath", "nestedHandle", "nestedFolder", "sourceItem", "isDescendantFolder", "potentialAncestor", "ancestorHandle", "ancestorDoc", "sourcesByFolder", "source", "sources", "removedItems", "item", "folderHandle", "finalTargetIndex", "sourcesInTargetFolder", "removedBefore", "s", "targetHandle", "candidates", "targetDocs", "existingUrls", "links", "docLinkFromUrl", "link", "_repo", "itemsToCopy", "clonedItem", "isValidAutomergeUrl", "DND_DATA_TYPES", "hasDocumentDrag", "dataTransfer", "type", "urlFromText", "text", "trimmed", "docId", "getDndPayload", "event", "data", "dndData", "parsed", "urlData", "urls", "items", "url", "EXT_MIME", "mimeForName", "name", "ext", "scrollParent", "el", "p", "overflow", "selectedItemIsVisible", "container", "box", "selected", "item", "rect", "Item", "props", "tools", "useSupportedToolsForType", "datatypes", "useFilteredDatatypes", "trigger", "setTrigger", "createSignal", "fileMeta", "setFileMeta", "filePrefetched", "prefetchFileMeta", "handle", "doc", "base", "filename", "mime", "createEffect", "prev", "untrack", "dnd", "SPRING_LOAD_MS", "springTimer", "springCommitted", "startSpringLoad", "target", "dragstack", "stopSpringLoad", "onCleanup", "handleRemove", "urls", "clearDragstack", "removeItemsByUrl", "handleDrop", "event", "targetId", "position", "log", "folderHandle", "handleFilesDrop", "payload", "getDndPayload", "source", "items", "executeDrop", "i", "copyMode", "isSameDragOriginView", "createComponent", "ContextMenu", "addToDragstack", "ids", "setCopyMode", "urlList", "url", "parseAutomergeUrl", "meta", "swUrl", "getImportableUrlFromAutomergeUrl", "preview", "count", "modeText", "setDragSourceItems", "setDragOriginView", "setDragging", "clearDragSourceItems", "relativePosition", "isAbove", "setDropTarget", "related", "clearDropTarget", "getDropTarget", "isNewDocDrag", "setPendingNewDoc", "index", "removeFromDragstack", "current", "allItems", "currentIndex", "Show", "For", "datatype", "tool", "memo", "_tmpl$", "template", "_tmpl$2", "ItemName", "props", "isBeingRenamed", "createSelector", "renaming", "next", "setNext", "createSignal", "blur", "setRenaming", "createComponent", "Switch", "Match", "_el$", "_el$2", "event", "use", "el", "createRenderEffect", "_el$3", "insert", "delegateEvents", "_tmpl$", "template", "_tmpl$2", "LoadingRow", "props", "_el$", "createRenderEffect", "_$p", "setStyleProperty", "SKELETON_WIDTHS", "LoadingRows", "rows", "_", "i", "_el$2", "insert", "createComponent", "For", "_el$3", "_el$4", "_p$", "_v$", "_v$2", "_tmpl$", "template", "_tmpl$2", "Folder", "props", "expanded", "setExpanded", "createSignal", "folder", "handle", "useDocument", "nextVisitedFolders", "depth", "depthStyle", "folderDepthStyle", "createEffect", "last", "filterMatches", "autoExpandedFolders", "dragToggleTimer", "dragAutoCommitted", "startDragAutoToggle", "v", "stopDragAutoToggle", "onCleanup", "rename", "name", "doc", "updateText", "createInside", "datatype", "h", "freshy", "createNew", "newIndex", "folder2", "setRenaming", "handleDropIntoFolder", "event", "log", "handleFilesDrop", "payload", "getDndPayload", "source", "items", "executeDrop", "i", "copyMode", "isSameDragOriginView", "_el$", "_el$3", "getDropTarget", "isNewDocDrag", "setPendingNewDoc", "clearDropTarget", "related", "effect", "setDropTarget", "insert", "createComponent", "Item", "yn", "toolId", "_el$2", "addEventListener", "Show", "Chevron", "createRenderEffect", "setAttribute", "ItemName", "Suspense", "LoadingRow", "DocumentList", "_p$", "_v$", "_v$2", "_v$3", "_v$4", "_v$5", "_v$6", "_v$7", "style", "Access", "ContactCard", "docIdFromAutomergeUrl", "Identifier", "uint8ArrayToHex", "_tmpl$", "template", "_tmpl$2", "_tmpl$3", "_tmpl$4", "_tmpl$5", "_tmpl$6", "_tmpl$7", "_tmpl$8", "_tmpl$9", "_tmpl$0", "_tmpl$1", "_tmpl$10", "ACCESS_LEVELS", "fetchAccessList", "hive", "docUrl", "keyhiveDocId", "accessList", "capability", "hexId", "ShareModal", "props", "contactCardInput", "setContactCardInput", "createSignal", "docAccessList", "setDocAccessList", "isLoadingAccessList", "setIsLoadingAccessList", "currentUserAccess", "setCurrentUserAccess", "isSubmitting", "setIsSubmitting", "createMemo", "currentUserHexId", "id", "syncServerHexId", "syncServer", "contactCard", "publicHexId", "publicId", "currentPublicAccess", "pubHexId", "isAdmin", "createEffect", "cancelled", "fetchCurrentUserAccess", "access", "err", "onCleanup", "loadAccessList", "handleEscape", "e", "handleAddMember", "input", "handleRemoveMember", "handleMakePublic", "handleMakePrivate", "handleBackdropClick", "formatHexId", "sortedMembers", "a", "b", "createComponent", "Show", "_el$", "_el$2", "_el$3", "_el$4", "_el$5", "_el$6", "_el$7", "_el$8", "_el$9", "_el$18", "_el$19", "insert", "_el$1", "_el$10", "_el$11", "_el$13", "_el$14", "_el$15", "_el$16", "createRenderEffect", "memo", "_el$22", "For", "isCurrentUser", "isSyncServer", "isPublic", "myAccessIdx", "memberAccessIdx", "canRemove", "displayName", "_el$23", "_el$24", "_el$25", "_el$26", "_el$27", "delegateEvents", "_tmpl$", "template", "_tmpl$2", "_tmpl$3", "_tmpl$4", "MAKE_SECURE_COPY_ENABLED", "isKeyhiveProtected", "url", "docIdFromAutomergeUrl", "DocumentList", "props", "shareModalUrl", "setShareModalUrl", "createSignal", "visitedFolders", "removeItem", "index", "folder", "deleteAt", "pendingHere", "pendingNewDoc", "commitPending", "docLink", "target", "setPendingNewDoc", "setRenaming", "placeholder", "_el$", "insert", "createComponent", "NewDocPlaceholder", "makeSecureCopy", "oldDoc", "newHandle", "serverContactCard", "ContactCard", "relayAccess", "Access", "err", "For", "doc", "visible", "filterMatches", "remove", "relid", "rename", "name", "doc2", "updateText", "datatypes", "getRegistry", "handle", "metadata", "datatype", "createEffect", "cancelled", "removeListener", "docHandle", "syncTitle", "docData", "isLoadedPlugin", "title", "d", "onChange", "onCleanup", "Show", "memo", "_el$2", "Suspense", "LoadingRow", "Switch", "Match", "_el$4", "_el$5", "_el$6", "Folder", "Item", "toolId", "ItemName", "createRenderEffect", "_p$", "_v$", "_v$2", "ShareModal", "STATE", "TRACE", "OBJECT_ID", "IS_PROXY", "CLEAR_CACHE", "UINT", "INT", "F64", "COUNTER", "IMMUTABLE_STRING", "Counter", "value", "_delta", "WriteableCounter", "context", "path", "objectId", "key", "delta", "getWriteableCounter", "_a", "ImmutableString", "val", "parseListIndex", "valueAt", "target", "prop", "datatype", "mapProxy", "listProxy", "import_value", "type", "isImmutableString", "isSameDocument", "printPath", "_b", "_c", "MapHandler", "cache", "list", "proxyList", "i", "map", "proxyMap", "keys", "ListHandler", "index", "instance", "listMethods", "elem", "textMethods", "proxied", "numDelete", "start", "end", "length", "searchElement", "valueWithType", "valType", "values", "last", "len", "first", "del", "vals", "result", "e", "f", "other", "v", "sep", "initialValue", "search", "fromIndex", "num", "spans", "chars", "jsonPointerComponents", "component", "obj", "wasm", "cachedTextEncoder", "cachedTextDecoder", "ptr", "RepoContext", "createContext", "subscribe", "element", "selector", "listener", "dispatchEl", "channel", "port", "controller", "signal", "event", "detail", "subscribe", "element", "selector", "initialValue", "value", "setValue", "createSignal", "onMount", "unsubscribe", "onCleanup", "createMarquee", "opts", "startX", "startY", "active", "preexisting", "owned", "itemFromEl", "el", "onMouseMove", "event", "dx", "dy", "left", "top", "right", "bottom", "container", "nextOwned", "id", "r", "dragstack", "addToDragstack", "removeFromDragstack", "onMouseUp", "onMouseDown", "_tmpl$", "template", "DocumentListPanel", "props", "folder", "folderHandle", "useDocument", "filter", "setFilter", "createSignal", "folderReady", "selectedDocUrls", "subscribe", "createEffect", "selected", "setAutoExpandedFolders", "cancelled", "result", "collectExpandedFolders", "onCleanup", "open", "detail", "createOpenEvent", "isDraggingFile", "setIsDraggingFile", "navEl", "marquee", "createMarquee", "attachMarquee", "el", "_el$", "_el$2", "_el$3", "_el$4", "_el$5", "event", "isNewDocDrag", "h", "len", "setPendingNewDoc", "files", "insertIndex", "handleFilesDrop", "payload", "getDndPayload", "source", "items", "rootUrl", "docsLength", "executeDrop", "i", "copyMode", "isSameDragOriginView", "related", "hasDocumentDrag", "use", "insert", "createComponent", "CreateNew", "fn", "SearchIcon", "Show", "LoadingRows", "Suspense", "DocumentList", "createRenderEffect", "renderDocumentListPanel", "folderUrl", "element", "render", "delegateEvents"]
7
- }