@powerhousedao/powerhouse-vetra-packages 6.1.0-dev.2 → 6.1.0-dev.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/{connect-CKdlDSUw.js → connect-CC9vv60v.js} +3 -3
- package/dist/browser/connect-CC9vv60v.js.map +1 -0
- package/dist/browser/{dist-DQgJ8n4d.js → dist-BQwm3GFs.js} +16 -2
- package/dist/browser/dist-BQwm3GFs.js.map +1 -0
- package/dist/browser/{dist-CC1E3l2O.js → dist-Bm9PpE_c.js} +2 -2
- package/dist/browser/{dist-CC1E3l2O.js.map → dist-Bm9PpE_c.js.map} +1 -1
- package/dist/browser/document-models/index.js +1 -1
- package/dist/browser/{editor-Dm_73jiz.js → editor-C8LadHFD.js} +4 -4
- package/dist/browser/{editor-Dm_73jiz.js.map → editor-C8LadHFD.js.map} +1 -1
- package/dist/browser/{editor-B3yz7YdR.js → editor-DIIPXStL.js} +3 -3
- package/dist/browser/{editor-B3yz7YdR.js.map → editor-DIIPXStL.js.map} +1 -1
- package/dist/browser/editors/document-model-editor/module.js +1 -1
- package/dist/browser/editors/generic-drive-explorer/index.js +3 -3
- package/dist/browser/editors/generic-drive-explorer/module.js +1 -1
- package/dist/browser/{folder-view-H2ov-zId.js → folder-view-nRGUuSXj.js} +2 -2
- package/dist/browser/{folder-view-H2ov-zId.js.map → folder-view-nRGUuSXj.js.map} +1 -1
- package/dist/browser/index.js +2 -2
- package/dist/node/{connect-SGvLzr5K.mjs → connect-DVqUHW6V.mjs} +3 -3
- package/dist/node/connect-DVqUHW6V.mjs.map +1 -0
- package/dist/node/{dist-Cay1iRRr.mjs → dist-DtoYJBC4.mjs} +2 -2
- package/dist/node/{dist-Cay1iRRr.mjs.map → dist-DtoYJBC4.mjs.map} +1 -1
- package/dist/node/{dist-Bz4SgEHs.mjs → dist-Nf3PORaD.mjs} +16 -2
- package/dist/node/dist-Nf3PORaD.mjs.map +1 -0
- package/dist/node/document-models/index.mjs +1 -1
- package/dist/node/{editor-W8QOlGXD.mjs → editor-BQRXHT3Q.mjs} +3 -3
- package/dist/node/{editor-W8QOlGXD.mjs.map → editor-BQRXHT3Q.mjs.map} +1 -1
- package/dist/node/{editor-BaXuDsby.mjs → editor-Dv6pju3N.mjs} +4 -4
- package/dist/node/{editor-BaXuDsby.mjs.map → editor-Dv6pju3N.mjs.map} +1 -1
- package/dist/node/editors/document-model-editor/module.mjs +1 -1
- package/dist/node/editors/generic-drive-explorer/index.mjs +3 -3
- package/dist/node/editors/generic-drive-explorer/module.mjs +1 -1
- package/dist/node/{folder-view-B0FNXbc0.mjs → folder-view-DCLHOhS5.mjs} +2 -2
- package/dist/node/{folder-view-B0FNXbc0.mjs.map → folder-view-DCLHOhS5.mjs.map} +1 -1
- package/dist/node/index.mjs +2 -2
- package/package.json +6 -6
- package/dist/browser/connect-CKdlDSUw.js.map +0 -1
- package/dist/browser/dist-DQgJ8n4d.js.map +0 -1
- package/dist/node/connect-SGvLzr5K.mjs.map +0 -1
- package/dist/node/dist-Bz4SgEHs.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-CC9vv60v.js","names":["e","t","e","t","e","n","t","e","n","e","t","r","n","e","t","e","n","e","t","n","r","t","r","i","n","e","t","e","n","t","e","n","e","r","t","e","t","n","e","e","e","e","t","e","n","e","e","t","e","t","e","e","t","e","isPlainObject","isPlainObj","conditional","isNot","isDefined","constant","isStrictEqual","funnel","isTruthy","allPass","isString","once","hasAtLeast","lzString","driveCollectionId$1","useIsomorphicLayoutEffect","useIsomorphicLayoutEffect","initialState","Context","reducer","initialState","Context","reducer","initialState","Context","reducer","_excluded","initialState","Context","reducer","initialState","Context","reducer","_excluded","_excluded2","_excluded3","_excluded4","_excluded5","_excluded6","_excluded7","_excluded8","_excluded9","Quote","ValueQuote","Colon","Arrow","_excluded","_excluded2","ValueQuote","_excluded","_excluded","_excluded2","_excluded","_excluded2","Copied","Quote","Colon","Copied","_excluded","_excluded2","_excluded","_excluded","Arrow","Copied","_excluded","Date","Map","Set","Date","Map","Set","memo","memo","React","pipe","prop","defaultTo","values","filter","isTruthy","hasAtLeast","isDefined","keys","isIncludedIn","map","isArray","entries","addProp"],"sources":["../../../reactor-browser/dist/make-ph-event-functions-Cr4GqOTT.js","../../../reactor-browser/dist/document-by-id-DuujBqAQ.js","../../../reactor-browser/dist/client-D7hUM13i.js","../../../reactor-browser/dist/renown-s0H1puU4.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/lazyDataLastImpl-DtF3cihj.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/purry.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/addProp.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/allPass.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/conditional-CTEJD5TX.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/constant.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/defaultTo.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/utilityEvaluators-Cb8x6-JZ.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/pipe.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/hasAtLeast.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/entries.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/filter.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/funnel.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/isArray.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/isDefined.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/isIncludedIn.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/isNot.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/isStrictEqual.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/isString.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/isTruthy.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/keys.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/map.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/once.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/prop.js","../../../../node_modules/.pnpm/remeda@2.33.7/node_modules/remeda/dist/values.js","../../../../node_modules/.pnpm/slug@11.0.1/node_modules/slug/slug.js","../../../../node_modules/.pnpm/normalize-exception@4.0.1/node_modules/normalize-exception/build/src/descriptors.js","../../../../node_modules/.pnpm/normalize-exception@4.0.1/node_modules/normalize-exception/build/src/aggregate.js","../../../../node_modules/.pnpm/normalize-exception@4.0.1/node_modules/normalize-exception/build/src/cause.js","../../../../node_modules/.pnpm/is-error-instance@3.0.1/node_modules/is-error-instance/build/src/main.js","../../../../node_modules/.pnpm/is-plain-obj@4.1.0/node_modules/is-plain-obj/index.js","../../../../node_modules/.pnpm/normalize-exception@4.0.1/node_modules/normalize-exception/build/src/create/modifiable.js","../../../../node_modules/.pnpm/normalize-exception@4.0.1/node_modules/normalize-exception/build/src/stack.js","../../../../node_modules/.pnpm/normalize-exception@4.0.1/node_modules/normalize-exception/build/src/create/copy.js","../../../../node_modules/.pnpm/normalize-exception@4.0.1/node_modules/normalize-exception/build/src/create/object.js","../../../../node_modules/.pnpm/normalize-exception@4.0.1/node_modules/normalize-exception/build/src/create/string.js","../../../../node_modules/.pnpm/normalize-exception@4.0.1/node_modules/normalize-exception/build/src/create/main.js","../../../../node_modules/.pnpm/normalize-exception@4.0.1/node_modules/normalize-exception/build/src/main.js","../../../../node_modules/.pnpm/lz-string@1.5.0/node_modules/lz-string/libs/lz-string.js","../../../reactor-browser/dist/index.js","../../../../node_modules/.pnpm/react-hook-form@7.71.2_react@19.2.6/node_modules/react-hook-form/dist/index.esm.mjs","../../../../node_modules/.pnpm/lodash.debounce@4.0.8/node_modules/lodash.debounce/index.js","../../../../node_modules/.pnpm/usehooks-ts@3.1.1_react@19.2.6/node_modules/usehooks-ts/dist/index.js","../../../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/extends.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/store/ShowTools.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/store/Expands.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/store/Types.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/arrow/TriangleArrow.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/store/Symbols.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/store/Section.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/store.js","../../../../node_modules/.pnpm/@babel+runtime@7.29.2/node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/symbol/index.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/comps/NestedClose.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/types/index.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/comps/Value.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/utils/useRender.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/section/KeyName.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/section/Row.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/utils/useHighlight.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/comps/Copied.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/comps/useIdCompat.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/comps/KeyValues.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/section/CountInfoExtra.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/section/CountInfo.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/section/Ellipsis.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/comps/NestedOpen.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/Container.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/symbol/BraceLeft.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/symbol/BraceRight.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/symbol/BracketsLeft.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/symbol/BracketsRight.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/symbol/Arrow.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/symbol/Colon.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/symbol/Quote.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/symbol/ValueQuote.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/types/Bigint.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/types/Date.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/types/False.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/types/Float.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/types/Int.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/types/Map.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/types/Nan.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/types/Null.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/types/Set.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/types/String.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/types/True.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/types/Undefined.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/types/Url.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/section/Copied.js","../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.42_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/index.js","../../../../node_modules/.pnpm/@tanstack+virtual-core@3.13.19/node_modules/@tanstack/virtual-core/dist/esm/utils.js","../../../../node_modules/.pnpm/@tanstack+virtual-core@3.13.19/node_modules/@tanstack/virtual-core/dist/esm/index.js","../../../../node_modules/.pnpm/@tanstack+react-virtual@3.13.19_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@tanstack/react-virtual/dist/esm/index.js","../../../design-system/dist/connect/index.js"],"sourcesContent":["import { useSyncExternalStore } from \"react\";\nimport { capitalCase } from \"change-case\";\n//#region src/hooks/make-ph-event-functions.ts\nconst isServer = typeof window === \"undefined\";\nfunction makePHEventFunctions(key) {\n\tconst setEventName = `ph:set${capitalCase(key)}`;\n\tconst updateEventName = `ph:${key}Updated`;\n\tfunction setValue(value) {\n\t\tif (isServer) return;\n\t\tconst event = new CustomEvent(setEventName, { detail: { [key]: value } });\n\t\twindow.dispatchEvent(event);\n\t}\n\tfunction dispatchUpdatedEvent() {\n\t\tif (isServer) return;\n\t\tconst event = new CustomEvent(updateEventName);\n\t\twindow.dispatchEvent(event);\n\t}\n\tfunction handleSetValueEvent(event) {\n\t\tif (isServer) return;\n\t\tconst value = event.detail[key];\n\t\tif (!window.ph) window.ph = {};\n\t\twindow.ph[key] = value;\n\t\tdispatchUpdatedEvent();\n\t}\n\tfunction addEventHandler() {\n\t\tif (isServer) return;\n\t\twindow.addEventListener(setEventName, handleSetValueEvent);\n\t}\n\tfunction subscribeToValue(onStoreChange) {\n\t\tif (isServer) return () => {};\n\t\twindow.addEventListener(updateEventName, onStoreChange);\n\t\treturn () => {\n\t\t\twindow.removeEventListener(updateEventName, onStoreChange);\n\t\t};\n\t}\n\tfunction getSnapshot() {\n\t\tif (isServer) return;\n\t\tif (!window.ph) {\n\t\t\tconsole.warn(`ph global store is not initialized. Did you call set${capitalCase(key)}?`);\n\t\t\treturn;\n\t\t}\n\t\treturn window.ph[key];\n\t}\n\tfunction getServerSnapshot() {}\n\tfunction useValue() {\n\t\treturn useSyncExternalStore(subscribeToValue, getSnapshot, getServerSnapshot);\n\t}\n\treturn {\n\t\tuseValue,\n\t\tsetValue,\n\t\taddEventHandler\n\t};\n}\n//#endregion\nexport { makePHEventFunctions as t };\n\n//# sourceMappingURL=make-ph-event-functions-Cr4GqOTT.js.map","import { t as makePHEventFunctions } from \"./make-ph-event-functions-Cr4GqOTT.js\";\nimport { logger } from \"document-model\";\nimport { buildSignedAction } from \"@powerhousedao/shared/document-model\";\nimport { DocumentChangeType } from \"@powerhousedao/reactor\";\nimport { BrowserAnalyticsStore } from \"@powerhousedao/analytics-engine-browser\";\nimport { AnalyticsQueryEngine } from \"@powerhousedao/analytics-engine-core\";\nimport { use, useCallback, useSyncExternalStore } from \"react\";\n//#region src/actions/queue.ts\nasync function queueActions(document, actionOrActions) {\n\tif (!document) throw new Error(\"No document provided\");\n\tif (!actionOrActions) throw new Error(\"No actions provided\");\n\tconst actions = Array.isArray(actionOrActions) ? actionOrActions : [actionOrActions];\n\tif (actions.length === 0) throw new Error(\"No actions provided\");\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\treturn await reactorClient.execute(document.header.id, \"main\", actions);\n}\nasync function queueOperations(documentId, operationOrOperations) {\n\tif (!documentId) throw new Error(\"No documentId provided\");\n\tif (!operationOrOperations) throw new Error(\"No operations provided\");\n\tconst operations = Array.isArray(operationOrOperations) ? operationOrOperations : [operationOrOperations];\n\tif (operations.length === 0) throw new Error(\"No operations provided\");\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\tconst actions = operations.map((op) => op.action);\n\treturn await reactorClient.execute(documentId, \"main\", actions);\n}\nasync function uploadOperations(documentId, allOperations, pushOperations, options) {\n\tconst operationsLimit = options?.operationsLimit || 50;\n\tconst onProgress = options?.onProgress;\n\tlogger.verbose(`uploadDocumentOperations(documentId:${documentId}, ops: ${Object.keys(allOperations).join(\",\")}, limit:${operationsLimit})`);\n\tconst allOperationsArray = Object.values(allOperations).filter((ops) => ops !== void 0);\n\tconst totalOperations = allOperationsArray.reduce((total, operations) => total + operations.length, 0);\n\tlet uploadedOperations = 0;\n\tfor (const operations of allOperationsArray) for (let i = 0; i < operations.length; i += operationsLimit) {\n\t\tlogger.verbose(`uploadDocumentOperations:for(i:${i}, ops:${operations.length}, limit:${operationsLimit}): START`);\n\t\tconst chunk = operations.slice(i, i + operationsLimit);\n\t\tconst operation = chunk.at(-1);\n\t\tif (!operation) break;\n\t\tconst scope = operation.action.scope;\n\t\tawait pushOperations(documentId, chunk);\n\t\tuploadedOperations += chunk.length;\n\t\tif (onProgress) onProgress({\n\t\t\tstage: \"uploading\",\n\t\t\tprogress: Math.round(uploadedOperations / totalOperations * 100),\n\t\t\ttotalOperations,\n\t\t\tuploadedOperations\n\t\t});\n\t\tlogger.verbose(`uploadDocumentOperations:for:waitForUpdate(${documentId}:${scope} rev ${operation.index}): NEXT`);\n\t}\n\tlogger.verbose(`uploadDocumentOperations:for:waitForUpdate(${documentId}): END`);\n}\n//#endregion\n//#region src/actions/sign.ts\nasync function signAction(action, document) {\n\tconst reactor = window.ph?.reactorClient;\n\tif (!reactor) return action;\n\tconst reducer = (await reactor.getDocumentModelModule(document.header.documentType)).reducer;\n\tconst renown = window.ph?.renown;\n\tif (!renown?.user) return action;\n\tif (!action.context?.signer) return action;\n\tconst actionSigner = action.context.signer;\n\treturn await buildSignedAction(action, reducer, document, actionSigner, renown.crypto.sign);\n}\nfunction addActionContext(action) {\n\tconst renown = window.ph?.renown;\n\tif (!renown?.user) return action;\n\treturn {\n\t\tcontext: { signer: {\n\t\t\tapp: {\n\t\t\t\tname: \"Connect\",\n\t\t\t\tkey: renown.did\n\t\t\t},\n\t\t\tuser: {\n\t\t\t\taddress: renown.user.address,\n\t\t\t\tnetworkId: renown.user.networkId,\n\t\t\t\tchainId: renown.user.chainId\n\t\t\t},\n\t\t\tsignatures: []\n\t\t} },\n\t\t...action\n\t};\n}\nasync function makeSignedActionWithContext(action, document) {\n\tif (!action) {\n\t\tlogger.error(\"No action found\");\n\t\treturn;\n\t}\n\tif (!document) {\n\t\tlogger.error(\"No document found\");\n\t\treturn;\n\t}\n\treturn addActionContext(await signAction(action, document));\n}\nasync function makeSignedActionsWithContext(actionOrActions, document) {\n\tif (!actionOrActions) {\n\t\tlogger.error(\"No actions found\");\n\t\treturn;\n\t}\n\tconst actions = Array.isArray(actionOrActions) ? actionOrActions : [actionOrActions];\n\treturn (await Promise.all(actions.map((action) => makeSignedActionWithContext(action, document)))).filter((a) => a !== void 0);\n}\n//#endregion\n//#region src/actions/dispatch.ts\nasync function getDocument(documentId) {\n\ttry {\n\t\treturn await window.ph?.reactorClient?.get(documentId);\n\t} catch (error) {\n\t\tlogger.debug(`Failed to get document with id ${documentId}:`, error);\n\t\treturn;\n\t}\n}\nfunction getActionErrors(result, actions) {\n\treturn actions.reduce((errors, a) => {\n\t\tconst scopeOperations = result.operations[a.scope];\n\t\tif (!scopeOperations) return errors;\n\t\tconst op = scopeOperations.findLast((op) => op.action.id === a.id);\n\t\tif (op?.error) errors.push(new Error(op.error));\n\t\treturn errors;\n\t}, new Array());\n}\nasync function dispatchActions(actionOrActions, documentOrDocumentId, onErrors, onSuccess) {\n\tconst document = typeof documentOrDocumentId === \"string\" ? await getDocument(documentOrDocumentId) : documentOrDocumentId;\n\tif (!document) {\n\t\tlogger.error(`Document with id ${JSON.stringify(documentOrDocumentId)} not found`);\n\t\treturn;\n\t}\n\tconst signedActionsWithContext = await makeSignedActionsWithContext(actionOrActions, document);\n\tif (!signedActionsWithContext) {\n\t\tlogger.error(\"No signed actions with context found\");\n\t\treturn;\n\t}\n\tconst result = await queueActions(document, signedActionsWithContext);\n\tif (onErrors && result) {\n\t\tconst errors = getActionErrors(result, signedActionsWithContext);\n\t\tif (errors.length) onErrors(errors);\n\t}\n\tif (onSuccess && result) onSuccess(result);\n\treturn result;\n}\n//#endregion\n//#region src/global/core.ts\nfunction getGlobal(namespace) {\n\tif (typeof window === \"undefined\") return void 0;\n\treturn window.powerhouse?.[namespace];\n}\nfunction setGlobal(namespace, value) {\n\tif (typeof window === \"undefined\") return;\n\twindow.powerhouse = window.powerhouse || {};\n\twindow.powerhouse[namespace] = value;\n}\nfunction clearGlobal(namespace) {\n\tif (typeof window === \"undefined\") return;\n\tif (window.powerhouse?.[namespace]) {\n\t\tdelete window.powerhouse[namespace];\n\t\tif (Object.keys(window.powerhouse).length === 0) delete window.powerhouse;\n\t}\n}\n//#endregion\n//#region src/analytics/store.ts\nasync function createAnalyticsStore(options) {\n\tconst store = new BrowserAnalyticsStore(options);\n\tawait store.init();\n\treturn {\n\t\tstore,\n\t\tengine: new AnalyticsQueryEngine(store),\n\t\toptions\n\t};\n}\nasync function getAnalyticsStore() {\n\treturn (await getGlobal(\"analytics\"))?.store ?? null;\n}\n//#endregion\n//#region src/document-cache.ts\nfunction addPromiseState(promise) {\n\tif (\"status\" in promise) return promise;\n\tconst promiseWithState = promise;\n\tpromiseWithState.status = \"pending\";\n\tpromiseWithState.then((value) => {\n\t\tpromiseWithState.status = \"fulfilled\";\n\t\tpromiseWithState.value = value;\n\t}, (reason) => {\n\t\tpromiseWithState.status = \"rejected\";\n\t\tpromiseWithState.reason = reason;\n\t\tthrow reason;\n\t});\n\treturn promiseWithState;\n}\nfunction readPromiseState(promise) {\n\treturn \"status\" in promise ? promise : { status: \"pending\" };\n}\n/**\n* Resolves an array of document promises using `Promise.allSettled`,\n* returning only the fulfilled values. A single missing/rejected\n* document does not poison the whole batch. Rejected entries are\n* logged at warn level so developers can see dangling references.\n*/\nfunction fulfilledOnly(promises) {\n\treturn Promise.allSettled(promises).then((results) => {\n\t\tconst documents = [];\n\t\tfor (const result of results) if (result.status === \"fulfilled\") documents.push(result.value);\n\t\telse console.warn(\"[DocumentCache] Skipped unavailable document:\", result.reason);\n\t\treturn documents;\n\t});\n}\n/**\n* Document cache implementation that uses the new ReactorClient API.\n*\n* This cache subscribes to document change events via IReactorClient.subscribe()\n* and automatically updates the cache when documents are created, updated, or deleted.\n*/\nvar DocumentCache = class {\n\tdocuments = /* @__PURE__ */ new Map();\n\tbatchPromises = /* @__PURE__ */ new Map();\n\tlisteners = /* @__PURE__ */ new Map();\n\tunsubscribe = null;\n\tconstructor(client) {\n\t\tthis.client = client;\n\t\tthis.unsubscribe = client.subscribe({}, (event) => {\n\t\t\tthis.handleDocumentChange(event);\n\t\t});\n\t}\n\thandleDocumentChange(event) {\n\t\tif (event.type === DocumentChangeType.Deleted) {\n\t\t\tconst documentId = event.context?.childId;\n\t\t\tif (documentId) this.handleDocumentDeleted(documentId);\n\t\t} else if (event.type === DocumentChangeType.Updated) for (const doc of event.documents) this.handleDocumentUpdated(doc.header.id).catch(console.warn);\n\t}\n\thandleDocumentDeleted(documentId) {\n\t\tconst listeners = this.listeners.get(documentId);\n\t\tthis.documents.delete(documentId);\n\t\tthis.invalidateBatchesContaining(documentId);\n\t\tif (listeners) listeners.forEach((listener) => listener());\n\t\tthis.listeners.delete(documentId);\n\t}\n\tasync handleDocumentUpdated(documentId) {\n\t\tif (this.documents.has(documentId)) {\n\t\t\tawait this.get(documentId, true);\n\t\t\tconst listeners = this.listeners.get(documentId);\n\t\t\tif (listeners) listeners.forEach((listener) => listener());\n\t\t}\n\t}\n\tinvalidateBatchesContaining(documentId) {\n\t\tfor (const key of this.batchPromises.keys()) if (key.split(\",\").includes(documentId)) this.batchPromises.delete(key);\n\t}\n\tget(id, refetch) {\n\t\tconst currentData = this.documents.get(id);\n\t\tif (currentData) {\n\t\t\tif (currentData.status === \"pending\") return currentData;\n\t\t\tif (!refetch) return currentData;\n\t\t}\n\t\tconst documentPromise = this.client.get(id);\n\t\tthis.documents.set(id, addPromiseState(documentPromise));\n\t\treturn documentPromise;\n\t}\n\tgetBatch(ids) {\n\t\tconst key = ids.join(\",\");\n\t\tconst cached = this.batchPromises.get(key);\n\t\tconst hasDeletedDocuments = ids.some((id) => !this.documents.has(id));\n\t\tconst currentPromises = ids.map((id) => this.get(id));\n\t\tif (hasDeletedDocuments) {\n\t\t\tconst batchPromise = fulfilledOnly(currentPromises);\n\t\t\tthis.batchPromises.set(key, {\n\t\t\t\tpromises: currentPromises,\n\t\t\t\tpromise: batchPromise\n\t\t\t});\n\t\t\treturn batchPromise;\n\t\t}\n\t\tif (cached) {\n\t\t\tif (currentPromises.every((p, i) => p === cached.promises[i])) return cached.promise;\n\t\t}\n\t\tconst states = currentPromises.map((p) => readPromiseState(p));\n\t\tif (states.every((s) => s.status !== \"pending\")) {\n\t\t\tconst values = states.filter((s) => s.status === \"fulfilled\").map((s) => s.value);\n\t\t\tconst batchPromise = Promise.resolve(values);\n\t\t\tbatchPromise.status = \"fulfilled\";\n\t\t\tbatchPromise.value = values;\n\t\t\tthis.batchPromises.set(key, {\n\t\t\t\tpromises: currentPromises,\n\t\t\t\tpromise: batchPromise\n\t\t\t});\n\t\t\treturn batchPromise;\n\t\t}\n\t\tif (cached) return cached.promise;\n\t\tconst batchPromise = fulfilledOnly(currentPromises);\n\t\tthis.batchPromises.set(key, {\n\t\t\tpromises: currentPromises,\n\t\t\tpromise: batchPromise\n\t\t});\n\t\treturn batchPromise;\n\t}\n\tsubscribe(id, callback) {\n\t\tconst ids = Array.isArray(id) ? id : [id];\n\t\tfor (const docId of ids) {\n\t\t\tconst listeners = this.listeners.get(docId) ?? [];\n\t\t\tthis.listeners.set(docId, [...listeners, callback]);\n\t\t}\n\t\treturn () => {\n\t\t\tfor (const docId of ids) {\n\t\t\t\tconst listeners = this.listeners.get(docId) ?? [];\n\t\t\t\tthis.listeners.set(docId, listeners.filter((listener) => listener !== callback));\n\t\t\t}\n\t\t};\n\t}\n\t/**\n\t* Disposes of the cache and unsubscribes from document change events.\n\t*/\n\tdispose() {\n\t\tif (this.unsubscribe) {\n\t\t\tthis.unsubscribe();\n\t\t\tthis.unsubscribe = null;\n\t\t}\n\t}\n};\n//#endregion\n//#region src/hooks/document-cache.ts\nconst documentEventFunctions = makePHEventFunctions(\"documentCache\");\n/** Returns all documents in the reactor. */\nconst useDocumentCache = documentEventFunctions.useValue;\n/** Sets all of the documents in the reactor. */\nconst setDocumentCache = documentEventFunctions.setValue;\n/** Adds an event handler for all of the documents in the reactor. */\nconst addDocumentCacheEventHandler = documentEventFunctions.addEventHandler;\n/**\n* Reads the state of a document promise and converts it to a query state object.\n* @param promise - The document promise to read\n* @returns An object containing the status, data, error, and isPending flag\n*/\nfunction getDocumentQueryState(promise) {\n\tconst state = readPromiseState(promise);\n\tswitch (state.status) {\n\t\tcase \"pending\": return {\n\t\t\tstatus: \"pending\",\n\t\t\tisPending: true,\n\t\t\terror: void 0,\n\t\t\tdata: void 0\n\t\t};\n\t\tcase \"fulfilled\": return {\n\t\t\tstatus: \"success\",\n\t\t\tisPending: false,\n\t\t\terror: void 0,\n\t\t\tdata: state.value\n\t\t};\n\t\tcase \"rejected\": return {\n\t\t\tstatus: \"error\",\n\t\t\tisPending: false,\n\t\t\terror: state.reason,\n\t\t\tdata: void 0\n\t\t};\n\t}\n}\n/**\n* Retrieves a document from the reactor and subscribes to changes using React Suspense.\n* This hook will suspend rendering while the document is loading.\n* @param id - The document ID to retrieve, or null/undefined to skip retrieval\n* @returns The document if found, or undefined if id is null/undefined\n*/\nfunction useDocument(id) {\n\tconst documentCache = useDocumentCache();\n\tconst document = useSyncExternalStore((cb) => id && documentCache ? documentCache.subscribe(id, cb) : () => {}, () => id ? documentCache?.get(id) : void 0);\n\treturn document ? use(document) : void 0;\n}\n/**\n* Retrieves a document from the reactor and subscribes to changes without\n* suspending or throwing. Use this when the ID might be stale (e.g., a\n* previously selected node that has since been deleted) and the consumer\n* wants to render a placeholder instead of crashing.\n*\n* Unlike {@link useGetDocumentAsync}, this hook subscribes to cache\n* updates, so the returned state stays in sync with reactor changes.\n*\n* @param id - The document ID to retrieve, or null/undefined to skip retrieval\n* @returns An object containing:\n* - status: \"initial\" | \"pending\" | \"success\" | \"error\"\n* - data: The document if successfully loaded\n* - isPending: Whether the document is currently loading\n* - error: Any error that occurred during loading (e.g., document not found)\n* - reload: Function to force a refetch, or undefined when no id is supplied\n*/\nfunction useDocumentSafe(id) {\n\tconst documentCache = useDocumentCache();\n\tconst promise = useSyncExternalStore((cb) => id && documentCache ? documentCache.subscribe(id, cb) : () => {}, () => id ? documentCache?.get(id) : void 0);\n\tif (!promise || !documentCache || !id) return {\n\t\tstatus: \"initial\",\n\t\tisPending: false,\n\t\terror: void 0,\n\t\tdata: void 0,\n\t\treload: void 0\n\t};\n\treturn {\n\t\t...getDocumentQueryState(promise),\n\t\treload: () => documentCache.get(id, true)\n\t};\n}\n/**\n* Retrieves multiple documents from the reactor using React Suspense.\n* This hook will suspend rendering while any of the documents are loading.\n*\n* Uses getBatch from the document cache which handles promise caching internally,\n* ensuring stable references for useSyncExternalStore.\n*\n* @param ids - Array of document IDs to retrieve, or null/undefined to skip retrieval\n* @returns An array of documents if found, or empty array if ids is null/undefined\n*/\nfunction useDocuments(ids) {\n\tconst documentCache = useDocumentCache();\n\tconst documents = useSyncExternalStore((cb) => ids?.length && documentCache ? documentCache.subscribe(ids, cb) : () => {}, () => ids?.length && documentCache ? documentCache.getBatch(ids) : void 0);\n\treturn documents ? use(documents) : [];\n}\n/**\n* Returns a function to retrieve a document from the cache.\n* The returned function fetches and returns a document by ID.\n* @returns A function that takes a document ID and returns a Promise of the document\n*/\nfunction useGetDocument() {\n\tconst documentCache = useDocumentCache();\n\treturn useCallback((id) => {\n\t\tif (!documentCache) return Promise.reject(/* @__PURE__ */ new Error(\"Document cache not initialized\"));\n\t\treturn documentCache.get(id);\n\t}, [documentCache]);\n}\n/**\n* Returns a function to retrieve multiple documents from the cache.\n* The returned function fetches and returns documents by their IDs.\n* @returns A function that takes an array of document IDs and returns a Promise of the documents\n*/\nfunction useGetDocuments() {\n\tconst documentCache = useDocumentCache();\n\treturn useCallback((ids) => {\n\t\tif (!documentCache) return Promise.reject(/* @__PURE__ */ new Error(\"Document cache not initialized\"));\n\t\treturn documentCache.getBatch(ids);\n\t}, [documentCache]);\n}\n/**\n* Retrieves a document from the reactor without suspending rendering.\n* Returns the current state of the document loading operation.\n* @param id - The document ID to retrieve, or null/undefined to skip retrieval\n* @returns An object containing:\n* - status: \"initial\" | \"pending\" | \"success\" | \"error\"\n* - data: The document if successfully loaded\n* - isPending: Boolean indicating if the document is currently loading\n* - error: Any error that occurred during loading\n* - reload: Function to force reload the document from cache\n*/\nfunction useGetDocumentAsync(id) {\n\tconst documentCache = useDocumentCache();\n\tif (!id || !documentCache) return {\n\t\tstatus: \"initial\",\n\t\tdata: void 0,\n\t\tisPending: false,\n\t\terror: void 0,\n\t\treload: void 0\n\t};\n\treturn {\n\t\t...getDocumentQueryState(documentCache.get(id)),\n\t\treload: () => documentCache.get(id, true)\n\t};\n}\n//#endregion\n//#region src/hooks/dispatch.ts\nfunction useDispatch(document) {\n\t/**\n\t* Dispatches actions to the document.\n\t* @param actionOrActions - The action or actions to dispatch.\n\t* @param onErrors - Callback invoked with any errors that occurred during action execution.\n\t*/\n\tfunction dispatch(actionOrActions, onErrors, onSuccess) {\n\t\tdispatchActions(actionOrActions, document, onErrors, onSuccess).catch(logger.error);\n\t}\n\treturn [document, dispatch];\n}\n//#endregion\n//#region src/hooks/document-by-id.ts\n/** Returns a document by id. */\nfunction useDocumentById(id) {\n\tconst document = useDocument(id);\n\tconst [, dispatch] = useDispatch(document);\n\treturn [document, dispatch];\n}\n/** Returns documents by ids. */\nfunction useDocumentsByIds(ids) {\n\treturn useDocuments(ids);\n}\n//#endregion\nexport { queueOperations as C, queueActions as S, getAnalyticsStore as _, setDocumentCache as a, setGlobal as b, useDocumentSafe as c, useGetDocumentAsync as d, useGetDocuments as f, createAnalyticsStore as g, readPromiseState as h, addDocumentCacheEventHandler as i, useDocuments as l, addPromiseState as m, useDocumentsByIds as n, useDocument as o, DocumentCache as p, useDispatch as r, useDocumentCache as s, useDocumentById as t, useGetDocument as u, clearGlobal as v, uploadOperations as w, dispatchActions as x, getGlobal as y };\n\n//# sourceMappingURL=document-by-id-DuujBqAQ.js.map","import { GraphQLClient } from \"graphql-request\";\nimport { gql } from \"graphql-tag\";\n//#region src/graphql/gen/schema.ts\nlet PropagationMode = /* @__PURE__ */ function(PropagationMode) {\n\tPropagationMode[\"Cascade\"] = \"CASCADE\";\n\tPropagationMode[\"Orphan\"] = \"ORPHAN\";\n\treturn PropagationMode;\n}({});\nconst PhDocumentFieldsFragmentDoc = gql`\n fragment PHDocumentFields on PHDocument {\n id\n slug\n name\n documentType\n state\n revisionsList {\n scope\n revision\n }\n createdAtUtcIso\n lastModifiedAtUtcIso\n }\n`;\nconst GetDocumentModelsDocument = gql`\n query GetDocumentModels($namespace: String, $paging: PagingInput) {\n documentModels(namespace: $namespace, paging: $paging) {\n items {\n id\n name\n namespace\n version\n specification\n }\n totalCount\n hasNextPage\n hasPreviousPage\n cursor\n }\n }\n`;\nconst GetDocumentDocument = gql`\n query GetDocument($identifier: String!, $view: ViewFilterInput) {\n document(identifier: $identifier, view: $view) {\n document {\n ...PHDocumentFields\n }\n childIds\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nconst GetDocumentWithOperationsDocument = gql`\n query GetDocumentWithOperations(\n $identifier: String!\n $view: ViewFilterInput\n $operationsFilter: DocumentOperationsFilterInput\n $operationsPaging: PagingInput\n ) {\n document(identifier: $identifier, view: $view) {\n document {\n ...PHDocumentFields\n operations(filter: $operationsFilter, paging: $operationsPaging) {\n items {\n index\n timestampUtcMs\n hash\n skip\n error\n id\n action {\n id\n type\n timestampUtcMs\n input\n scope\n attachments {\n data\n mimeType\n hash\n extension\n fileName\n }\n context {\n signer {\n user {\n address\n networkId\n chainId\n }\n app {\n name\n key\n }\n signatures\n }\n }\n }\n }\n totalCount\n hasNextPage\n hasPreviousPage\n cursor\n }\n }\n childIds\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nconst GetDocumentOutgoingRelationshipsDocument = gql`\n query GetDocumentOutgoingRelationships(\n $sourceIdentifier: String!\n $relationshipType: String!\n $view: ViewFilterInput\n $paging: PagingInput\n ) {\n documentOutgoingRelationships(\n sourceIdentifier: $sourceIdentifier\n relationshipType: $relationshipType\n view: $view\n paging: $paging\n ) {\n items {\n ...PHDocumentFields\n }\n totalCount\n hasNextPage\n hasPreviousPage\n cursor\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nconst GetDocumentIncomingRelationshipsDocument = gql`\n query GetDocumentIncomingRelationships(\n $targetIdentifier: String!\n $relationshipType: String!\n $view: ViewFilterInput\n $paging: PagingInput\n ) {\n documentIncomingRelationships(\n targetIdentifier: $targetIdentifier\n relationshipType: $relationshipType\n view: $view\n paging: $paging\n ) {\n items {\n ...PHDocumentFields\n }\n totalCount\n hasNextPage\n hasPreviousPage\n cursor\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nconst FindDocumentsDocument = gql`\n query FindDocuments(\n $search: SearchFilterInput\n $view: ViewFilterInput\n $paging: PagingInput\n ) {\n findDocuments(search: $search, view: $view, paging: $paging) {\n items {\n ...PHDocumentFields\n }\n totalCount\n hasNextPage\n hasPreviousPage\n cursor\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nconst GetDocumentOperationsDocument = gql`\n query GetDocumentOperations(\n $filter: OperationsFilterInput!\n $paging: PagingInput\n ) {\n documentOperations(filter: $filter, paging: $paging) {\n items {\n index\n timestampUtcMs\n hash\n skip\n error\n id\n action {\n id\n type\n timestampUtcMs\n input\n scope\n attachments {\n data\n mimeType\n hash\n extension\n fileName\n }\n context {\n signer {\n user {\n address\n networkId\n chainId\n }\n app {\n name\n key\n }\n signatures\n }\n }\n }\n }\n totalCount\n hasNextPage\n hasPreviousPage\n cursor\n }\n }\n`;\nconst GetJobStatusDocument = gql`\n query GetJobStatus($jobId: String!) {\n jobStatus(jobId: $jobId) {\n id\n status\n result\n error\n createdAt\n completedAt\n }\n }\n`;\nconst CreateDocumentDocument = gql`\n mutation CreateDocument($document: JSONObject!, $parentIdentifier: String) {\n createDocument(document: $document, parentIdentifier: $parentIdentifier) {\n ...PHDocumentFields\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nconst CreateEmptyDocumentDocument = gql`\n mutation CreateEmptyDocument(\n $documentType: String!\n $parentIdentifier: String\n ) {\n createEmptyDocument(\n documentType: $documentType\n parentIdentifier: $parentIdentifier\n ) {\n ...PHDocumentFields\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nconst MutateDocumentDocument = gql`\n mutation MutateDocument(\n $documentIdentifier: String!\n $actions: [JSONObject!]!\n $view: ViewFilterInput\n ) {\n mutateDocument(\n documentIdentifier: $documentIdentifier\n actions: $actions\n view: $view\n ) {\n ...PHDocumentFields\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nconst MutateDocumentAsyncDocument = gql`\n mutation MutateDocumentAsync(\n $documentIdentifier: String!\n $actions: [JSONObject!]!\n $view: ViewFilterInput\n ) {\n mutateDocumentAsync(\n documentIdentifier: $documentIdentifier\n actions: $actions\n view: $view\n )\n }\n`;\nconst RenameDocumentDocument = gql`\n mutation RenameDocument(\n $documentIdentifier: String!\n $name: String!\n $branch: String\n ) {\n renameDocument(\n documentIdentifier: $documentIdentifier\n name: $name\n branch: $branch\n ) {\n ...PHDocumentFields\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nconst SetPreferredEditorDocument = gql`\n mutation SetPreferredEditor(\n $documentIdentifier: String!\n $preferredEditor: String\n $branch: String\n ) {\n setPreferredEditor(\n documentIdentifier: $documentIdentifier\n preferredEditor: $preferredEditor\n branch: $branch\n ) {\n ...PHDocumentFields\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nconst AddRelationshipDocument = gql`\n mutation AddRelationship(\n $sourceIdentifier: String!\n $targetIdentifier: String!\n $relationshipType: String!\n $branch: String\n ) {\n addRelationship(\n sourceIdentifier: $sourceIdentifier\n targetIdentifier: $targetIdentifier\n relationshipType: $relationshipType\n branch: $branch\n ) {\n ...PHDocumentFields\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nconst RemoveRelationshipDocument = gql`\n mutation RemoveRelationship(\n $sourceIdentifier: String!\n $targetIdentifier: String!\n $relationshipType: String!\n $branch: String\n ) {\n removeRelationship(\n sourceIdentifier: $sourceIdentifier\n targetIdentifier: $targetIdentifier\n relationshipType: $relationshipType\n branch: $branch\n ) {\n ...PHDocumentFields\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nconst MoveRelationshipDocument = gql`\n mutation MoveRelationship(\n $sourceParentIdentifier: String!\n $targetParentIdentifier: String!\n $targetIdentifier: String!\n $relationshipType: String!\n $branch: String\n ) {\n moveRelationship(\n sourceParentIdentifier: $sourceParentIdentifier\n targetParentIdentifier: $targetParentIdentifier\n targetIdentifier: $targetIdentifier\n relationshipType: $relationshipType\n branch: $branch\n ) {\n source {\n ...PHDocumentFields\n }\n target {\n ...PHDocumentFields\n }\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nconst DeleteDocumentDocument = gql`\n mutation DeleteDocument($identifier: String!, $propagate: PropagationMode) {\n deleteDocument(identifier: $identifier, propagate: $propagate)\n }\n`;\nconst DeleteDocumentsDocument = gql`\n mutation DeleteDocuments(\n $identifiers: [String!]!\n $propagate: PropagationMode\n ) {\n deleteDocuments(identifiers: $identifiers, propagate: $propagate)\n }\n`;\nconst DocumentChangesDocument = gql`\n subscription DocumentChanges(\n $search: SearchFilterInput\n $view: ViewFilterInput\n ) {\n documentChanges(search: $search, view: $view) {\n type\n documents {\n ...PHDocumentFields\n }\n context {\n parentId\n childId\n }\n }\n }\n ${PhDocumentFieldsFragmentDoc}\n`;\nconst JobChangesDocument = gql`\n subscription JobChanges($jobId: String!) {\n jobChanges(jobId: $jobId) {\n jobId\n status\n result\n error\n }\n }\n`;\nconst PollSyncEnvelopesDocument = gql`\n query PollSyncEnvelopes(\n $channelId: String!\n $outboxAck: Int!\n $outboxLatest: Int!\n ) {\n pollSyncEnvelopes(\n channelId: $channelId\n outboxAck: $outboxAck\n outboxLatest: $outboxLatest\n ) {\n envelopes {\n type\n channelMeta {\n id\n }\n operations {\n operation {\n index\n timestampUtcMs\n hash\n skip\n error\n id\n action {\n id\n type\n timestampUtcMs\n input\n scope\n attachments {\n data\n mimeType\n hash\n extension\n fileName\n }\n context {\n signer {\n user {\n address\n networkId\n chainId\n }\n app {\n name\n key\n }\n signatures\n }\n }\n }\n }\n context {\n documentId\n documentType\n scope\n branch\n }\n }\n cursor {\n remoteName\n cursorOrdinal\n lastSyncedAtUtcMs\n }\n key\n dependsOn\n }\n ackOrdinal\n deadLetters {\n documentId\n error\n }\n hasMore\n }\n }\n`;\nconst TouchChannelDocument = gql`\n mutation TouchChannel($input: TouchChannelInput!) {\n touchChannel(input: $input) {\n success\n ackOrdinal\n }\n }\n`;\nconst PushSyncEnvelopesDocument = gql`\n mutation PushSyncEnvelopes($envelopes: [SyncEnvelopeInput!]!) {\n pushSyncEnvelopes(envelopes: $envelopes)\n }\n`;\nconst defaultWrapper = (action, _operationName, _operationType, _variables) => action();\nfunction getSdk(client, withWrapper = defaultWrapper) {\n\treturn {\n\t\tGetDocumentModels(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: GetDocumentModelsDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"GetDocumentModels\", \"query\", variables);\n\t\t},\n\t\tGetDocument(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: GetDocumentDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"GetDocument\", \"query\", variables);\n\t\t},\n\t\tGetDocumentWithOperations(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: GetDocumentWithOperationsDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"GetDocumentWithOperations\", \"query\", variables);\n\t\t},\n\t\tGetDocumentOutgoingRelationships(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: GetDocumentOutgoingRelationshipsDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"GetDocumentOutgoingRelationships\", \"query\", variables);\n\t\t},\n\t\tGetDocumentIncomingRelationships(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: GetDocumentIncomingRelationshipsDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"GetDocumentIncomingRelationships\", \"query\", variables);\n\t\t},\n\t\tFindDocuments(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: FindDocumentsDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"FindDocuments\", \"query\", variables);\n\t\t},\n\t\tGetDocumentOperations(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: GetDocumentOperationsDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"GetDocumentOperations\", \"query\", variables);\n\t\t},\n\t\tGetJobStatus(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: GetJobStatusDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"GetJobStatus\", \"query\", variables);\n\t\t},\n\t\tCreateDocument(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: CreateDocumentDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"CreateDocument\", \"mutation\", variables);\n\t\t},\n\t\tCreateEmptyDocument(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: CreateEmptyDocumentDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"CreateEmptyDocument\", \"mutation\", variables);\n\t\t},\n\t\tMutateDocument(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: MutateDocumentDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"MutateDocument\", \"mutation\", variables);\n\t\t},\n\t\tMutateDocumentAsync(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: MutateDocumentAsyncDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"MutateDocumentAsync\", \"mutation\", variables);\n\t\t},\n\t\tRenameDocument(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: RenameDocumentDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"RenameDocument\", \"mutation\", variables);\n\t\t},\n\t\tSetPreferredEditor(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: SetPreferredEditorDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"SetPreferredEditor\", \"mutation\", variables);\n\t\t},\n\t\tAddRelationship(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: AddRelationshipDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"AddRelationship\", \"mutation\", variables);\n\t\t},\n\t\tRemoveRelationship(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: RemoveRelationshipDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"RemoveRelationship\", \"mutation\", variables);\n\t\t},\n\t\tMoveRelationship(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: MoveRelationshipDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"MoveRelationship\", \"mutation\", variables);\n\t\t},\n\t\tDeleteDocument(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: DeleteDocumentDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"DeleteDocument\", \"mutation\", variables);\n\t\t},\n\t\tDeleteDocuments(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: DeleteDocumentsDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"DeleteDocuments\", \"mutation\", variables);\n\t\t},\n\t\tDocumentChanges(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: DocumentChangesDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"DocumentChanges\", \"subscription\", variables);\n\t\t},\n\t\tJobChanges(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: JobChangesDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"JobChanges\", \"subscription\", variables);\n\t\t},\n\t\tPollSyncEnvelopes(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: PollSyncEnvelopesDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"PollSyncEnvelopes\", \"query\", variables);\n\t\t},\n\t\tTouchChannel(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: TouchChannelDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"TouchChannel\", \"mutation\", variables);\n\t\t},\n\t\tPushSyncEnvelopes(variables, requestHeaders, signal) {\n\t\t\treturn withWrapper((wrappedRequestHeaders) => client.request({\n\t\t\t\tdocument: PushSyncEnvelopesDocument,\n\t\t\t\tvariables,\n\t\t\t\trequestHeaders: {\n\t\t\t\t\t...requestHeaders,\n\t\t\t\t\t...wrappedRequestHeaders\n\t\t\t\t},\n\t\t\t\tsignal\n\t\t\t}), \"PushSyncEnvelopes\", \"mutation\", variables);\n\t\t}\n\t};\n}\n//#endregion\n//#region src/graphql/batch-queries.ts\n/** Get the source string from a GraphQL document (string or DocumentNode). */\nfunction getDocumentSource(doc) {\n\treturn typeof doc === \"string\" ? doc : doc.loc?.source.body ?? \"\";\n}\n/**\n* Extract the inner selection set of a named field from a GraphQL document source.\n* Returns the `{ ... }` block including braces.\n*/\nfunction extractSelectionSet(doc, fieldName, fallback) {\n\tconst source = getDocumentSource(doc);\n\treturn new RegExp(`${fieldName}\\\\([^)]*\\\\)\\\\s*(\\\\{[\\\\s\\\\S]*\\\\})\\\\s*\\\\}`).exec(source)?.[1] ?? fallback;\n}\n/**\n* Extract the query body and any fragment definitions from a GraphQL document.\n* Returns { body, fragments } where body is the content inside the query `{ ... }`\n* and fragments are any trailing fragment definitions.\n*/\nfunction extractQueryParts(doc, fallbackBody) {\n\tconst source = getDocumentSource(doc);\n\tconst queryMatch = /^[^{]*\\{([\\s\\S]*?)\\}\\s*(fragment[\\s\\S]*)?$/.exec(source);\n\treturn {\n\t\tbody: queryMatch?.[1]?.trim() ?? fallbackBody,\n\t\tfragments: queryMatch?.[2]?.trim() ?? \"\"\n\t};\n}\nconst operationsSelectionSet = extractSelectionSet(GetDocumentOperationsDocument, \"documentOperations\", \"{ items { index } }\");\nconst documentParts = extractQueryParts(GetDocumentDocument, \"document(identifier: $identifier) { document { id name documentType state revisionsList { scope revision } createdAtUtcIso lastModifiedAtUtcIso } childIds }\");\n/**\n* Build a single GraphQL query that fetches documentOperations for\n* multiple filters using aliases. Each filter gets its own alias\n* (`scope_0`, `scope_1`, …) so all scopes are fetched in one HTTP request.\n*/\nfunction buildBatchOperationsQuery(filters, pagings) {\n\tconst query = `query BatchGetDocumentOperations(${filters.flatMap((_, i) => [`$filter_${i}: OperationsFilterInput!`, `$paging_${i}: PagingInput`]).join(\", \")}) {\n ${filters.map((_, i) => `scope_${i}: documentOperations(filter: $filter_${i}, paging: $paging_${i}) ${operationsSelectionSet}`).join(\"\\n \")}\n }`;\n\tconst variables = {};\n\tfor (let i = 0; i < filters.length; i++) {\n\t\tvariables[`filter_${i}`] = filters[i];\n\t\tvariables[`paging_${i}`] = pagings[i] ?? null;\n\t}\n\treturn {\n\t\tquery,\n\t\tvariables\n\t};\n}\n/**\n* Build a single GraphQL query that fetches a document AND\n* documentOperations for multiple filters, all in one HTTP request.\n*/\nfunction buildBatchDocumentWithOperationsQuery(identifier, view, filters, pagings) {\n\tconst docVarDefs = \"$identifier: String!, $view: ViewFilterInput\";\n\tconst opsVarDefs = filters.flatMap((_, i) => [`$filter_${i}: OperationsFilterInput!`, `$paging_${i}: PagingInput`]).join(\", \");\n\tconst opsFields = filters.map((_, i) => `scope_${i}: documentOperations(filter: $filter_${i}, paging: $paging_${i}) ${operationsSelectionSet}`).join(\"\\n \");\n\tconst query = `query BatchGetDocumentWithOperations(${docVarDefs}, ${opsVarDefs}) {\n ${documentParts.body}\n ${opsFields}\n }\n ${documentParts.fragments}`;\n\tconst variables = {\n\t\tidentifier,\n\t\tview: view ?? null\n\t};\n\tfor (let i = 0; i < filters.length; i++) {\n\t\tvariables[`filter_${i}`] = filters[i];\n\t\tvariables[`paging_${i}`] = pagings[i] ?? null;\n\t}\n\treturn {\n\t\tquery,\n\t\tvariables\n\t};\n}\n//#endregion\n//#region src/graphql/client.ts\n/**\n* Creates a GraphQL client for the Reactor Subgraph API.\n* @param urlOrGQLClient The URL of the GraphQL API or a GraphQL client instance.\n* @param middleware An optional middleware function to wrap the GraphQL client calls.\n* @returns A GraphQL client for the Reactor Subgraph API.\n*/\nfunction createClient(urlOrGQLClient, middleware) {\n\tconst client = typeof urlOrGQLClient === \"string\" ? new GraphQLClient(urlOrGQLClient) : urlOrGQLClient;\n\tconst runWithMiddleware = async (operationName, run) => {\n\t\tif (!middleware) return run();\n\t\treturn middleware(run, operationName, \"query\");\n\t};\n\treturn {\n\t\t...getSdk(client, middleware),\n\t\tasync BatchGetDocumentOperations(filters, pagings) {\n\t\t\tconst { query, variables } = buildBatchOperationsQuery(filters, pagings);\n\t\t\tconst data = await runWithMiddleware(\"BatchGetDocumentOperations\", (requestHeaders) => client.request(query, variables, requestHeaders));\n\t\t\treturn filters.map((_, i) => data[`scope_${i}`]);\n\t\t},\n\t\tasync BatchGetDocumentWithOperations(identifier, view, filters, pagings) {\n\t\t\tconst { query, variables } = buildBatchDocumentWithOperationsQuery(identifier, view, filters, pagings);\n\t\t\tconst data = await runWithMiddleware(\"BatchGetDocumentWithOperations\", (requestHeaders) => client.request(query, variables, requestHeaders));\n\t\t\treturn {\n\t\t\t\tdocument: data.document ?? null,\n\t\t\t\toperations: filters.map((_, i) => data[`scope_${i}`])\n\t\t\t};\n\t\t}\n\t};\n}\n//#endregion\nexport { GetDocumentWithOperationsDocument as n, PropagationMode as r, createClient as t };\n\n//# sourceMappingURL=client-D7hUM13i.js.map","import { t as makePHEventFunctions } from \"./make-ph-event-functions-Cr4GqOTT.js\";\nimport { logger } from \"document-model\";\nimport { Children, cloneElement, forwardRef, isValidElement, useCallback, useEffect, useRef, useState, useSyncExternalStore } from \"react\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nimport { BrowserKeyStorage, RenownBuilder, RenownCryptoBuilder } from \"@renown/sdk\";\n//#region src/hooks/loading.ts\nconst { useValue: useLoading, setValue: setLoading, addEventHandler: addLoadingEventHandler } = makePHEventFunctions(\"loading\");\nconst loading = null;\n//#endregion\n//#region src/hooks/renown.ts\nconst renownEventFunctions = makePHEventFunctions(\"renown\");\n/** Adds an event handler for the renown instance */\nconst addRenownEventHandler = renownEventFunctions.addEventHandler;\n/** Returns the renown instance */\nconst useRenown = renownEventFunctions.useValue;\n/** Sets the renown instance */\nconst setRenown = renownEventFunctions.setValue;\n/** Returns the DID from the renown instance */\nfunction useDid() {\n\treturn useRenown()?.did;\n}\n/** Returns the current user from the renown instance, subscribing to user events */\nfunction useUser() {\n\tconst renown = useRenown();\n\tconst [user, setUser] = useState(renown?.user);\n\tuseEffect(() => {\n\t\tsetUser(renown?.user);\n\t\tif (!renown) return;\n\t\treturn renown.on(\"user\", setUser);\n\t}, [renown]);\n\treturn user;\n}\n/** Returns the login status, subscribing to renown status events */\nfunction useLoginStatus() {\n\tconst renown = useRenown();\n\treturn useSyncExternalStore((cb) => {\n\t\tif (!renown) return () => {};\n\t\treturn renown.on(\"status\", cb);\n\t}, () => renown === null ? \"loading\" : renown?.status, () => void 0);\n}\n//#endregion\n//#region src/renown/constants.ts\nconst RENOWN_URL = \"https://www.renown.id\";\nconst RENOWN_NETWORK_ID = \"eip155\";\nconst RENOWN_CHAIN_ID = \"1\";\nconst DOMAIN_TYPE = [\n\t{\n\t\tname: \"name\",\n\t\ttype: \"string\"\n\t},\n\t{\n\t\tname: \"version\",\n\t\ttype: \"string\"\n\t},\n\t{\n\t\tname: \"chainId\",\n\t\ttype: \"uint256\"\n\t},\n\t{\n\t\tname: \"verifyingContract\",\n\t\ttype: \"address\"\n\t}\n];\nconst VERIFIABLE_CREDENTIAL_EIP712_TYPE = [\n\t{\n\t\tname: \"@context\",\n\t\ttype: \"string[]\"\n\t},\n\t{\n\t\tname: \"type\",\n\t\ttype: \"string[]\"\n\t},\n\t{\n\t\tname: \"id\",\n\t\ttype: \"string\"\n\t},\n\t{\n\t\tname: \"issuer\",\n\t\ttype: \"Issuer\"\n\t},\n\t{\n\t\tname: \"credentialSubject\",\n\t\ttype: \"CredentialSubject\"\n\t},\n\t{\n\t\tname: \"credentialSchema\",\n\t\ttype: \"CredentialSchema\"\n\t},\n\t{\n\t\tname: \"issuanceDate\",\n\t\ttype: \"string\"\n\t},\n\t{\n\t\tname: \"expirationDate\",\n\t\ttype: \"string\"\n\t}\n];\nconst CREDENTIAL_SCHEMA_EIP712_TYPE = [{\n\tname: \"id\",\n\ttype: \"string\"\n}, {\n\tname: \"type\",\n\ttype: \"string\"\n}];\nconst CREDENTIAL_SUBJECT_TYPE = [\n\t{\n\t\tname: \"app\",\n\t\ttype: \"string\"\n\t},\n\t{\n\t\tname: \"id\",\n\t\ttype: \"string\"\n\t},\n\t{\n\t\tname: \"name\",\n\t\ttype: \"string\"\n\t}\n];\nconst ISSUER_TYPE = [{\n\tname: \"id\",\n\ttype: \"string\"\n}, {\n\tname: \"ethereumAddress\",\n\ttype: \"string\"\n}];\nconst CREDENTIAL_TYPES = {\n\tEIP712Domain: DOMAIN_TYPE,\n\tVerifiableCredential: VERIFIABLE_CREDENTIAL_EIP712_TYPE,\n\tCredentialSchema: CREDENTIAL_SCHEMA_EIP712_TYPE,\n\tCredentialSubject: CREDENTIAL_SUBJECT_TYPE,\n\tIssuer: ISSUER_TYPE\n};\n//#endregion\n//#region src/renown/utils.ts\nfunction openRenown(documentId) {\n\tconst renown = window.ph?.renown;\n\tlet renownUrl = renown?.baseUrl;\n\tif (!renownUrl) {\n\t\tlogger.warn(\"Renown instance not found, falling back to: @url\", RENOWN_URL);\n\t\trenownUrl = RENOWN_URL;\n\t}\n\tif (documentId) {\n\t\twindow.open(`${renownUrl}/profile/${documentId}`, \"_blank\")?.focus();\n\t\treturn;\n\t}\n\tconst url = new URL(renownUrl);\n\turl.searchParams.set(\"app\", renown?.did ?? \"\");\n\turl.searchParams.set(\"connect\", renown?.did ?? \"\");\n\turl.searchParams.set(\"network\", RENOWN_NETWORK_ID);\n\turl.searchParams.set(\"chain\", \"1\");\n\tconst returnUrl = new URL(window.location.pathname, window.location.origin);\n\turl.searchParams.set(\"returnUrl\", returnUrl.toJSON());\n\twindow.open(url, \"_self\")?.focus();\n}\n/**\n* Reads the `?user=` DID from the URL if present.\n* Returns the DID and cleans up the URL parameter.\n*/\nfunction consumeDidFromUrl() {\n\tif (typeof window === \"undefined\") return;\n\tconst userParam = new URLSearchParams(window.location.search).get(\"user\");\n\tif (!userParam) return;\n\tconst userDid = decodeURIComponent(userParam);\n\tconst cleanUrl = new URL(window.location.href);\n\tcleanUrl.searchParams.delete(\"user\");\n\twindow.history.replaceState({}, \"\", cleanUrl.toString());\n\treturn userDid;\n}\n/**\n* Log in the user. Resolves the user DID from (in order):\n* 1. Explicit `userDid` argument\n* 2. `?user=` URL parameter (from Renown portal redirect)\n* 3. Previously stored session in the Renown instance\n*/\nasync function login(userDid, renown) {\n\tif (!renown) return;\n\tconst did = userDid ?? consumeDidFromUrl();\n\ttry {\n\t\tconst user = renown.user;\n\t\tif (user?.did && (user.did === did || !did)) return user;\n\t\tif (!did) return;\n\t\treturn await renown.login(did);\n\t} catch (error) {\n\t\tlogger.error(error instanceof Error ? error.message : JSON.stringify(error));\n\t}\n}\nasync function logout() {\n\tawait (window.ph?.renown)?.logout();\n\tconst url = new URL(window.location.href);\n\tif (url.searchParams.has(\"user\")) {\n\t\turl.searchParams.delete(\"user\");\n\t\twindow.history.replaceState(null, \"\", url.toString());\n\t}\n}\n//#endregion\n//#region src/renown/use-renown-auth.ts\nfunction truncateAddress$1(address) {\n\tif (address.length <= 13) return address;\n\treturn `${address.slice(0, 7)}...${address.slice(-5)}`;\n}\nfunction toRenownAuthStatus(loginStatus, user) {\n\tif (loginStatus === \"authorized\") return user ? \"authorized\" : \"checking\";\n\treturn loginStatus;\n}\nfunction useRenownAuth() {\n\tconst user = useUser();\n\tconst status = toRenownAuthStatus(useLoginStatus(), user);\n\tconst address = user?.address;\n\tconst ensName = user?.ens?.name;\n\tconst avatarUrl = user?.profile?.userImage ?? user?.ens?.avatarUrl;\n\tconst profileId = user?.profile?.documentId;\n\treturn {\n\t\tstatus,\n\t\tuser,\n\t\taddress,\n\t\tensName,\n\t\tavatarUrl,\n\t\tprofileId,\n\t\tdisplayName: ensName ?? user?.profile?.username ?? void 0,\n\t\tdisplayAddress: address ? truncateAddress$1(address) : void 0,\n\t\tlogin: useCallback(() => {\n\t\t\topenRenown();\n\t\t}, []),\n\t\tlogout: useCallback(async () => {\n\t\t\tawait logout();\n\t\t}, []),\n\t\topenProfile: useCallback(() => {\n\t\t\tif (profileId) openRenown(profileId);\n\t\t}, [profileId])\n\t};\n}\n//#endregion\n//#region src/renown/components/icons.tsx\nfunction RenownLogo({ width = 71, height = 19, hovered = false, color = \"currentColor\", className }) {\n\treturn /* @__PURE__ */ jsxs(\"svg\", {\n\t\twidth,\n\t\theight,\n\t\tviewBox: \"0 0 71 19\",\n\t\tfill: color,\n\t\txmlns: \"http://www.w3.org/2000/svg\",\n\t\tclassName,\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(\"path\", { d: \"M53.6211 18.4887V9.0342H56.435V10.8096H56.4923C56.7377 10.181 57.1085 9.70244 57.6047 9.37398C58.101 9.03986 58.6981 8.8728 59.3962 8.8728C60.4105 8.8728 61.2039 9.1871 61.7765 9.8157C62.3546 10.4443 62.6436 11.3164 62.6436 12.432V18.4887H59.7397V13.0776C59.7397 12.5283 59.6007 12.1007 59.3225 11.7949C59.0499 11.4835 58.6654 11.3277 58.1692 11.3277C57.6784 11.3277 57.2803 11.4976 56.9749 11.8374C56.6695 12.1772 56.5168 12.6161 56.5168 13.1541V18.4887H53.6211Z\" }),\n\t\t\t/* @__PURE__ */ jsx(\"path\", { d: \"M53.097 9.03394L50.7412 18.4884H47.6164L46.1522 12.075H46.0949L44.6389 18.4884H41.5632L39.1992 9.03394H42.1195L43.3056 15.7532H43.3628L44.7861 9.03394H47.551L48.9906 15.7532H49.0479L50.234 9.03394H53.097Z\" }),\n\t\t\t/* @__PURE__ */ jsx(\"path\", { d: \"M37.8661 17.3926C37.0427 18.2591 35.9084 18.6923 34.4632 18.6923C33.0181 18.6923 31.8838 18.2591 31.0604 17.3926C30.2369 16.5205 29.8252 15.3086 29.8252 13.7569C29.8252 12.2336 30.2424 11.033 31.0767 10.1552C31.9111 9.2718 33.0399 8.83008 34.4632 8.83008C35.892 8.83008 37.0208 9.26896 37.8497 10.1467C38.6841 11.0188 39.1013 12.2222 39.1013 13.7569C39.1013 15.3143 38.6896 16.5262 37.8661 17.3926ZM33.2117 15.7702C33.5116 16.2402 33.9288 16.4752 34.4632 16.4752C34.9977 16.4752 35.4148 16.2402 35.7148 15.7702C36.0147 15.2945 36.1647 14.6234 36.1647 13.7569C36.1647 12.9131 36.012 12.2506 35.7066 11.7692C35.4012 11.2878 34.9868 11.0472 34.4632 11.0472C33.9343 11.0472 33.5171 11.2878 33.2117 11.7692C32.9118 12.2449 32.7618 12.9075 32.7618 13.7569C32.7618 14.6234 32.9118 15.2945 33.2117 15.7702Z\" }),\n\t\t\t/* @__PURE__ */ jsx(\"path\", { d: \"M20.0088 18.4887V9.0342H22.8227V10.8096H22.88C23.1254 10.181 23.4962 9.70244 23.9924 9.37398C24.4887 9.03986 25.0858 8.8728 25.7838 8.8728C26.7982 8.8728 27.5916 9.1871 28.1642 9.8157C28.7423 10.4443 29.0313 11.3164 29.0313 12.432V18.4887H26.1274V13.0776C26.1274 12.5283 25.9883 12.1007 25.7102 11.7949C25.4376 11.4835 25.0531 11.3277 24.5569 11.3277C24.0661 11.3277 23.668 11.4976 23.3626 11.8374C23.0572 12.1772 22.9045 12.6161 22.9045 13.1541V18.4887H20.0088Z\" }),\n\t\t\t/* @__PURE__ */ jsx(\"path\", { d: \"M14.7486 10.9707C14.2851 10.9707 13.8952 11.1321 13.5789 11.4549C13.2626 11.7777 13.0854 12.1911 13.0472 12.6951H16.4337C16.4064 12.1741 16.2374 11.7579 15.9265 11.4464C15.6212 11.1293 15.2285 10.9707 14.7486 10.9707ZM16.4991 15.5153H19.1167C18.9749 16.4837 18.5141 17.2567 17.7343 17.8343C16.9599 18.4063 15.9838 18.6923 14.8059 18.6923C13.3662 18.6923 12.2374 18.2591 11.4194 17.3926C10.6014 16.5262 10.1924 15.3313 10.1924 13.8079C10.1924 12.2845 10.5987 11.0755 11.4112 10.1807C12.2237 9.28029 13.3226 8.83008 14.7077 8.83008C16.0656 8.83008 17.1481 9.26047 17.9552 10.1213C18.7677 10.9764 19.174 12.1231 19.174 13.5616V14.4195H13.0145V14.6064C13.0145 15.184 13.1835 15.6541 13.5216 16.0165C13.8597 16.3733 14.3015 16.5517 14.8468 16.5517C15.2503 16.5517 15.5993 16.461 15.8938 16.2798C16.1883 16.0929 16.3901 15.8381 16.4991 15.5153Z\" }),\n\t\t\t/* @__PURE__ */ jsx(\"path\", { d: \"M3.00205 8.58396V12.0667H4.7771C5.32789 12.0667 5.7587 11.911 6.06954 11.5995C6.38038 11.2881 6.5358 10.8662 6.5358 10.3338C6.5358 9.80718 6.37492 9.38528 6.05318 9.06815C5.73143 8.74535 5.30335 8.58396 4.76892 8.58396H3.00205ZM3.00205 14.1989V18.4886H0V6.23096H5.07158C6.53307 6.23096 7.65373 6.5849 8.43355 7.29278C9.21337 8.00066 9.60328 8.99453 9.60328 10.2744C9.60328 11.0446 9.42605 11.7439 9.07159 12.3725C8.71712 12.9955 8.2236 13.4514 7.59101 13.7402L9.94684 18.4886H6.5767L4.55624 14.1989H3.00205Z\" }),\n\t\t\t/* @__PURE__ */ jsx(\"path\", {\n\t\t\t\td: \"M65.7255 0.211478C65.0841 2.46724 63.3737 4.2455 61.2041 4.90969C60.932 4.99366 60.932 5.39096 61.2041 5.47492C63.3725 6.13912 65.0841 7.91738 65.7255 10.1731C65.8056 10.4551 66.1932 10.4551 66.2745 10.1731C66.9159 7.91738 68.6263 6.13912 70.7959 5.47492C71.068 5.39096 71.068 4.99366 70.7959 4.90969C68.6276 4.2455 66.9159 2.46724 66.2745 0.211478C66.1944 -0.0704925 65.8068 -0.0704925 65.7255 0.211478Z\",\n\t\t\t\tfill: hovered ? \"#21FFB4\" : color\n\t\t\t})\n\t\t]\n\t});\n}\nfunction CopyIcon({ size = 14, color = \"#9EA0A1\" }) {\n\treturn /* @__PURE__ */ jsxs(\"svg\", {\n\t\twidth: size,\n\t\theight: size,\n\t\tviewBox: \"0 0 16 16\",\n\t\tfill: \"none\",\n\t\txmlns: \"http://www.w3.org/2000/svg\",\n\t\tchildren: [/* @__PURE__ */ jsx(\"rect\", {\n\t\t\tx: \"5\",\n\t\t\ty: \"5\",\n\t\t\twidth: \"9\",\n\t\t\theight: \"9\",\n\t\t\trx: \"1\",\n\t\t\tstroke: color,\n\t\t\tstrokeWidth: \"1.5\"\n\t\t}), /* @__PURE__ */ jsx(\"path\", {\n\t\t\td: \"M11 5V3C11 2.44772 10.5523 2 10 2H3C2.44772 2 2 2.44772 2 3V10C2 10.5523 2.44772 11 3 11H5\",\n\t\t\tstroke: color,\n\t\t\tstrokeWidth: \"1.5\"\n\t\t})]\n\t});\n}\nfunction DisconnectIcon({ size = 14, color = \"#EA4335\" }) {\n\treturn /* @__PURE__ */ jsxs(\"svg\", {\n\t\twidth: size,\n\t\theight: size,\n\t\tviewBox: \"0 0 16 16\",\n\t\tfill: \"none\",\n\t\txmlns: \"http://www.w3.org/2000/svg\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(\"path\", {\n\t\t\t\td: \"M6 14H3.33333C2.97971 14 2.64057 13.8595 2.39052 13.6095C2.14048 13.3594 2 13.0203 2 12.6667V3.33333C2 2.97971 2.14048 2.64057 2.39052 2.39052C2.64057 2.14048 2.97971 2 3.33333 2H6\",\n\t\t\t\tstroke: color,\n\t\t\t\tstrokeWidth: \"1.5\",\n\t\t\t\tstrokeLinecap: \"round\",\n\t\t\t\tstrokeLinejoin: \"round\"\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"path\", {\n\t\t\t\td: \"M10.6667 11.3333L14 8L10.6667 4.66667\",\n\t\t\t\tstroke: color,\n\t\t\t\tstrokeWidth: \"1.5\",\n\t\t\t\tstrokeLinecap: \"round\",\n\t\t\t\tstrokeLinejoin: \"round\"\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"path\", {\n\t\t\t\td: \"M14 8H6\",\n\t\t\t\tstroke: color,\n\t\t\t\tstrokeWidth: \"1.5\",\n\t\t\t\tstrokeLinecap: \"round\",\n\t\t\t\tstrokeLinejoin: \"round\"\n\t\t\t})\n\t\t]\n\t});\n}\nfunction SpinnerIcon({ size = 14, color = \"currentColor\" }) {\n\treturn /* @__PURE__ */ jsxs(\"svg\", {\n\t\twidth: size,\n\t\theight: size,\n\t\tviewBox: \"0 0 16 16\",\n\t\tfill: \"none\",\n\t\txmlns: \"http://www.w3.org/2000/svg\",\n\t\tstyle: { animation: \"spin 1s linear infinite\" },\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(\"style\", { children: `@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }` }),\n\t\t\t/* @__PURE__ */ jsx(\"path\", {\n\t\t\t\td: \"M8 1V4\",\n\t\t\t\tstroke: color,\n\t\t\t\tstrokeWidth: \"1.5\",\n\t\t\t\tstrokeLinecap: \"round\"\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"path\", {\n\t\t\t\td: \"M8 12V15\",\n\t\t\t\tstroke: color,\n\t\t\t\tstrokeWidth: \"1.5\",\n\t\t\t\tstrokeLinecap: \"round\",\n\t\t\t\topacity: \"0.3\"\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"path\", {\n\t\t\t\td: \"M3.05 3.05L5.17 5.17\",\n\t\t\t\tstroke: color,\n\t\t\t\tstrokeWidth: \"1.5\",\n\t\t\t\tstrokeLinecap: \"round\",\n\t\t\t\topacity: \"0.9\"\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"path\", {\n\t\t\t\td: \"M10.83 10.83L12.95 12.95\",\n\t\t\t\tstroke: color,\n\t\t\t\tstrokeWidth: \"1.5\",\n\t\t\t\tstrokeLinecap: \"round\",\n\t\t\t\topacity: \"0.4\"\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"path\", {\n\t\t\t\td: \"M1 8H4\",\n\t\t\t\tstroke: color,\n\t\t\t\tstrokeWidth: \"1.5\",\n\t\t\t\tstrokeLinecap: \"round\",\n\t\t\t\topacity: \"0.8\"\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"path\", {\n\t\t\t\td: \"M12 8H15\",\n\t\t\t\tstroke: color,\n\t\t\t\tstrokeWidth: \"1.5\",\n\t\t\t\tstrokeLinecap: \"round\",\n\t\t\t\topacity: \"0.5\"\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"path\", {\n\t\t\t\td: \"M3.05 12.95L5.17 10.83\",\n\t\t\t\tstroke: color,\n\t\t\t\tstrokeWidth: \"1.5\",\n\t\t\t\tstrokeLinecap: \"round\",\n\t\t\t\topacity: \"0.7\"\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"path\", {\n\t\t\t\td: \"M10.83 5.17L12.95 3.05\",\n\t\t\t\tstroke: color,\n\t\t\t\tstrokeWidth: \"1.5\",\n\t\t\t\tstrokeLinecap: \"round\",\n\t\t\t\topacity: \"0.6\"\n\t\t\t})\n\t\t]\n\t});\n}\nfunction ChevronDownIcon({ size = 14, color = \"currentColor\", style }) {\n\treturn /* @__PURE__ */ jsx(\"svg\", {\n\t\twidth: size,\n\t\theight: size,\n\t\tviewBox: \"0 0 16 16\",\n\t\tfill: \"none\",\n\t\txmlns: \"http://www.w3.org/2000/svg\",\n\t\tstyle,\n\t\tchildren: /* @__PURE__ */ jsx(\"path\", {\n\t\t\td: \"M4 6L8 10L12 6\",\n\t\t\tstroke: color,\n\t\t\tstrokeWidth: \"1.5\",\n\t\t\tstrokeLinecap: \"round\",\n\t\t\tstrokeLinejoin: \"round\"\n\t\t})\n\t});\n}\nfunction UserIcon({ size = 24, color = \"#6366f1\" }) {\n\treturn /* @__PURE__ */ jsxs(\"svg\", {\n\t\twidth: size,\n\t\theight: size,\n\t\tviewBox: \"0 0 24 24\",\n\t\tfill: \"none\",\n\t\txmlns: \"http://www.w3.org/2000/svg\",\n\t\tchildren: [/* @__PURE__ */ jsx(\"circle\", {\n\t\t\tcx: \"12\",\n\t\t\tcy: \"8\",\n\t\t\tr: \"4\",\n\t\t\tstroke: color,\n\t\t\tstrokeWidth: \"2\"\n\t\t}), /* @__PURE__ */ jsx(\"path\", {\n\t\t\td: \"M4 20C4 16.6863 7.58172 14 12 14C16.4183 14 20 16.6863 20 20\",\n\t\t\tstroke: color,\n\t\t\tstrokeWidth: \"2\",\n\t\t\tstrokeLinecap: \"round\"\n\t\t})]\n\t});\n}\n//#endregion\n//#region src/renown/components/slot.tsx\nfunction mergeProps(parentProps, childProps) {\n\tconst merged = { ...parentProps };\n\tfor (const key of Object.keys(childProps)) {\n\t\tconst parentValue = parentProps[key];\n\t\tconst childValue = childProps[key];\n\t\tif (key === \"style\") merged[key] = {\n\t\t\t...parentValue,\n\t\t\t...childValue\n\t\t};\n\t\telse if (key === \"className\") merged[key] = [parentValue, childValue].filter(Boolean).join(\" \");\n\t\telse if (typeof parentValue === \"function\" && typeof childValue === \"function\") merged[key] = (...args) => {\n\t\t\tchildValue(...args);\n\t\t\tparentValue(...args);\n\t\t};\n\t\telse if (childValue !== void 0) merged[key] = childValue;\n\t}\n\treturn merged;\n}\nconst Slot = forwardRef(({ children, ...props }, ref) => {\n\tconst child = Children.only(children);\n\tif (!isValidElement(child)) return null;\n\tconst childElement = child;\n\tconst mergedProps = mergeProps(props, childElement.props);\n\tif (ref) mergedProps.ref = ref;\n\treturn cloneElement(childElement, mergedProps);\n});\nSlot.displayName = \"Slot\";\n//#endregion\n//#region src/renown/components/RenownLoginButton.tsx\nconst lightStyles = {\n\ttrigger: {\n\t\tbackgroundColor: \"#ffffff\",\n\t\tborderWidth: \"1px\",\n\t\tborderStyle: \"solid\",\n\t\tborderColor: \"#d1d5db\",\n\t\tcolor: \"#111827\"\n\t},\n\ttriggerHover: {\n\t\tbackgroundColor: \"#ecf3f8\",\n\t\tborderColor: \"#9ca3af\"\n\t}\n};\nconst darkStyles = {\n\ttrigger: {\n\t\tbackgroundColor: \"#1f2937\",\n\t\tborderWidth: \"1px\",\n\t\tborderStyle: \"solid\",\n\t\tborderColor: \"#4b5563\",\n\t\tcolor: \"#ecf3f8\"\n\t},\n\ttriggerHover: {\n\t\tbackgroundColor: \"#374151\",\n\t\tborderColor: \"#6b7280\"\n\t}\n};\nconst styles$1 = {\n\twrapper: {\n\t\tposition: \"relative\",\n\t\tdisplay: \"inline-block\"\n\t},\n\ttrigger: {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: \"8px\",\n\t\tpadding: \"8px 32px\",\n\t\tborderRadius: \"8px\",\n\t\tcursor: \"pointer\",\n\t\tfontSize: \"14px\",\n\t\tfontWeight: 500,\n\t\tfontFamily: \"inherit\",\n\t\tlineHeight: \"20px\",\n\t\ttransition: \"background-color 150ms, border-color 150ms\"\n\t}\n};\nfunction RenownLoginButton({ onLogin: onLoginProp, darkMode = false, style, className, asChild = false, children }) {\n\tconst onLogin = onLoginProp ?? (() => openRenown());\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [isHovered, setIsHovered] = useState(false);\n\tconst handleMouseEnter = useCallback(() => setIsHovered(true), []);\n\tconst handleMouseLeave = useCallback(() => setIsHovered(false), []);\n\tconst handleClick = () => {\n\t\tif (!isLoading) {\n\t\t\tsetIsLoading(true);\n\t\t\tonLogin();\n\t\t}\n\t};\n\tconst themeStyles = darkMode ? darkStyles : lightStyles;\n\tconst triggerStyle = {\n\t\t...styles$1.trigger,\n\t\t...themeStyles.trigger,\n\t\t...isHovered && !isLoading ? themeStyles.triggerHover : {},\n\t\tcursor: isLoading ? \"wait\" : \"pointer\",\n\t\t...style\n\t};\n\tconst triggerElement = asChild ? /* @__PURE__ */ jsx(Slot, {\n\t\tonClick: handleClick,\n\t\t\"data-renown-state\": \"login\",\n\t\t...isLoading ? { \"data-loading\": \"\" } : {},\n\t\tchildren\n\t}) : /* @__PURE__ */ jsx(\"button\", {\n\t\ttype: \"button\",\n\t\tstyle: triggerStyle,\n\t\t\"aria-label\": \"Log in with Renown\",\n\t\tonClick: handleClick,\n\t\t\"data-renown-state\": \"login\",\n\t\t...isLoading ? { \"data-loading\": \"\" } : {},\n\t\tchildren: isLoading ? /* @__PURE__ */ jsx(SpinnerIcon, { size: 16 }) : /* @__PURE__ */ jsx(\"span\", { children: \"Log in\" })\n\t});\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tstyle: styles$1.wrapper,\n\t\tclassName,\n\t\tonMouseEnter: handleMouseEnter,\n\t\tonMouseLeave: handleMouseLeave,\n\t\tchildren: triggerElement\n\t});\n}\n//#endregion\n//#region src/renown/components/RenownUserButton.tsx\nconst POPOVER_GAP = 4;\nconst POPOVER_HEIGHT = 150;\nconst styles = {\n\twrapper: {\n\t\tposition: \"relative\",\n\t\tdisplay: \"inline-block\"\n\t},\n\ttrigger: {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tgap: \"8px\",\n\t\tpadding: \"6px 12px\",\n\t\tborderWidth: \"1px\",\n\t\tborderStyle: \"solid\",\n\t\tborderColor: \"#e5e7eb\",\n\t\tbackgroundColor: \"#ffffff\",\n\t\tcursor: \"pointer\",\n\t\tborderRadius: \"8px\",\n\t\tfontSize: \"12px\",\n\t\tfontWeight: 500,\n\t\tfontFamily: \"inherit\",\n\t\tcolor: \"#111827\",\n\t\ttransition: \"background-color 150ms, border-color 150ms\"\n\t},\n\ttriggerHover: {\n\t\tbackgroundColor: \"#f9fafb\",\n\t\tborderColor: \"#9ca3af\"\n\t},\n\tavatar: {\n\t\twidth: \"28px\",\n\t\theight: \"28px\",\n\t\tborderRadius: \"50%\",\n\t\tobjectFit: \"cover\",\n\t\tflexShrink: 0\n\t},\n\tavatarPlaceholder: {\n\t\twidth: \"28px\",\n\t\theight: \"28px\",\n\t\tborderRadius: \"50%\",\n\t\tbackground: \"linear-gradient(135deg, #8b5cf6, #3b82f6)\",\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tflexShrink: 0\n\t},\n\tavatarInitial: {\n\t\tfontSize: \"12px\",\n\t\tfontWeight: 700,\n\t\tcolor: \"#ffffff\",\n\t\tlineHeight: 1\n\t},\n\tdisplayName: {\n\t\tmaxWidth: \"120px\",\n\t\toverflow: \"hidden\",\n\t\ttextOverflow: \"ellipsis\",\n\t\twhiteSpace: \"nowrap\"\n\t},\n\tchevron: {\n\t\tflexShrink: 0,\n\t\ttransition: \"transform 150ms\",\n\t\tcolor: \"#6b7280\"\n\t},\n\tchevronOpen: { transform: \"rotate(180deg)\" },\n\tpopoverBase: {\n\t\tposition: \"absolute\",\n\t\tright: 0,\n\t\tbackgroundColor: \"#ffffff\",\n\t\tborderRadius: \"8px\",\n\t\tboxShadow: \"0 4px 12px rgba(0, 0, 0, 0.12), 0 1px 3px rgba(0, 0, 0, 0.08)\",\n\t\twidth: \"100%\",\n\t\tzIndex: 1e3,\n\t\tcolor: \"#111827\",\n\t\tborderWidth: \"1px\",\n\t\tborderStyle: \"solid\",\n\t\tborderColor: \"#e5e7eb\",\n\t\toverflow: \"hidden\"\n\t},\n\theader: {\n\t\tpadding: \"12px 16px\",\n\t\tborderBottom: \"1px solid #e5e7eb\"\n\t},\n\theaderUsername: {\n\t\tfontSize: \"14px\",\n\t\tfontWeight: 600,\n\t\tcolor: \"#111827\",\n\t\tmargin: 0\n\t},\n\taddressRow: {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tgap: \"4px\",\n\t\tmarginTop: \"4px\"\n\t},\n\taddressButton: {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tgap: \"4px\",\n\t\tpadding: 0,\n\t\tborder: \"none\",\n\t\tbackgroundColor: \"transparent\",\n\t\tcursor: \"pointer\",\n\t\tfontSize: \"12px\",\n\t\tcolor: \"#6b7280\",\n\t\tfontFamily: \"inherit\",\n\t\tposition: \"relative\",\n\t\twidth: \"100%\"\n\t},\n\tcopiedText: {\n\t\tfontSize: \"12px\",\n\t\tcolor: \"#059669\",\n\t\tposition: \"absolute\",\n\t\tleft: 0,\n\t\ttransition: \"opacity 150ms\",\n\t\tfontWeight: 500\n\t},\n\taddressText: {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tgap: \"4px\",\n\t\ttransition: \"opacity 150ms\"\n\t},\n\tmenuSection: { padding: \"4px 0\" },\n\tmenuItem: {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tgap: \"8px\",\n\t\twidth: \"100%\",\n\t\tpadding: \"8px 16px\",\n\t\tborder: \"none\",\n\t\tbackgroundColor: \"transparent\",\n\t\tcursor: \"pointer\",\n\t\tfontSize: \"14px\",\n\t\tcolor: \"#374151\",\n\t\ttextDecoration: \"none\",\n\t\tfontFamily: \"inherit\",\n\t\ttransition: \"background-color 150ms\"\n\t},\n\tmenuItemHover: { backgroundColor: \"#f3f4f6\" },\n\tdisconnectItem: { color: \"#dc2626\" },\n\tseparator: {\n\t\theight: \"1px\",\n\t\tbackgroundColor: \"#e5e7eb\",\n\t\tmargin: 0,\n\t\tborder: \"none\"\n\t}\n};\nfunction truncateAddress(address) {\n\tif (address.length <= 13) return address;\n\treturn `${address.slice(0, 7)}...${address.slice(-5)}`;\n}\nfunction RenownUserButton({ address: addressProp, username: usernameProp, avatarUrl: avatarUrlProp, userId: userIdProp, onDisconnect: onDisconnectProp, style, className, asChild = false, children, menuItems }) {\n\tconst user = useUser();\n\tconst address = addressProp ?? user?.address ?? \"\";\n\tconst username = usernameProp ?? user?.profile?.username ?? user?.ens?.name;\n\tconst avatarUrl = avatarUrlProp ?? user?.profile?.userImage ?? user?.ens?.avatarUrl;\n\tconst userId = userIdProp ?? user?.profile?.documentId;\n\tconst onDisconnect = onDisconnectProp ?? (() => void logout());\n\tconst displayName = username ?? (address ? truncateAddress(address) : \"Account\");\n\tconst profileId = userId ?? address;\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [isHovered, setIsHovered] = useState(false);\n\tconst [isCopied, setIsCopied] = useState(false);\n\tconst [showAbove, setShowAbove] = useState(true);\n\tconst [hoveredItem, setHoveredItem] = useState(null);\n\tconst wrapperRef = useRef(null);\n\tconst closeTimeoutRef = useRef(null);\n\tconst calculatePosition = useCallback(() => {\n\t\tif (!wrapperRef.current) return;\n\t\tconst spaceAbove = wrapperRef.current.getBoundingClientRect().top;\n\t\tsetShowAbove(spaceAbove >= POPOVER_HEIGHT + POPOVER_GAP);\n\t}, []);\n\tconst handleMouseEnter = useCallback(() => {\n\t\tsetIsHovered(true);\n\t\tif (closeTimeoutRef.current) {\n\t\t\tclearTimeout(closeTimeoutRef.current);\n\t\t\tcloseTimeoutRef.current = null;\n\t\t}\n\t\tcalculatePosition();\n\t\tsetIsOpen(true);\n\t}, [calculatePosition]);\n\tconst handleMouseLeave = useCallback(() => {\n\t\tcloseTimeoutRef.current = setTimeout(() => {\n\t\t\tsetIsOpen(false);\n\t\t\tsetIsHovered(false);\n\t\t\tsetHoveredItem(null);\n\t\t}, 150);\n\t}, []);\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (closeTimeoutRef.current) clearTimeout(closeTimeoutRef.current);\n\t\t};\n\t}, []);\n\tconst copyToClipboard = useCallback(async () => {\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(address);\n\t\t\tsetIsCopied(true);\n\t\t\tsetTimeout(() => setIsCopied(false), 2e3);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"Failed to copy address:\", err);\n\t\t}\n\t}, [address]);\n\tconst triggerElement = asChild ? /* @__PURE__ */ jsx(Slot, {\n\t\t\"data-renown-state\": \"authenticated\",\n\t\tchildren\n\t}) : /* @__PURE__ */ jsxs(\"button\", {\n\t\ttype: \"button\",\n\t\tstyle: {\n\t\t\t...styles.trigger,\n\t\t\t...isHovered ? styles.triggerHover : {},\n\t\t\t...style\n\t\t},\n\t\t\"aria-label\": \"Open account menu\",\n\t\t\"data-renown-state\": \"authenticated\",\n\t\tchildren: [\n\t\t\tavatarUrl ? /* @__PURE__ */ jsx(\"img\", {\n\t\t\t\tsrc: avatarUrl,\n\t\t\t\talt: \"Avatar\",\n\t\t\t\tstyle: styles.avatar\n\t\t\t}) : /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tstyle: styles.avatarPlaceholder,\n\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\tstyle: styles.avatarInitial,\n\t\t\t\t\tchildren: (displayName || \"U\")[0].toUpperCase()\n\t\t\t\t})\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\tstyle: styles.displayName,\n\t\t\t\tchildren: displayName\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(ChevronDownIcon, {\n\t\t\t\tsize: 14,\n\t\t\t\tstyle: {\n\t\t\t\t\t...styles.chevron,\n\t\t\t\t\t...isOpen ? styles.chevronOpen : {}\n\t\t\t\t}\n\t\t\t})\n\t\t]\n\t});\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tref: wrapperRef,\n\t\tstyle: styles.wrapper,\n\t\tclassName,\n\t\tonMouseEnter: handleMouseEnter,\n\t\tonMouseLeave: handleMouseLeave,\n\t\tchildren: [triggerElement, isOpen && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tstyle: {\n\t\t\t\t...styles.popoverBase,\n\t\t\t\t...showAbove ? { bottom: `calc(100% + ${POPOVER_GAP}px)` } : { top: `calc(100% + ${POPOVER_GAP}px)` }\n\t\t\t},\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tstyle: styles.header,\n\t\t\t\t\tchildren: [username && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\tstyle: styles.headerUsername,\n\t\t\t\t\t\tchildren: username\n\t\t\t\t\t}), address && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\tstyle: styles.addressRow,\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\tonClick: () => void copyToClipboard(),\n\t\t\t\t\t\t\tstyle: styles.addressButton,\n\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\tgap: \"4px\",\n\t\t\t\t\t\t\t\t\twidth: \"100%\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t...styles.addressText,\n\t\t\t\t\t\t\t\t\t\topacity: isCopied ? 0 : 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", { children: truncateAddress(address) }), /* @__PURE__ */ jsx(CopyIcon, {\n\t\t\t\t\t\t\t\t\t\tsize: 12,\n\t\t\t\t\t\t\t\t\t\tcolor: \"#9ca3af\"\n\t\t\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t\t\t}), /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t...styles.copiedText,\n\t\t\t\t\t\t\t\t\t\topacity: isCopied ? 1 : 0\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tchildren: \"Copied!\"\n\t\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t})]\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tstyle: styles.menuSection,\n\t\t\t\t\tchildren: [profileId && /* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tonClick: () => openRenown(profileId),\n\t\t\t\t\t\tonMouseEnter: () => setHoveredItem(\"profile\"),\n\t\t\t\t\t\tonMouseLeave: () => setHoveredItem(null),\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t...styles.menuItem,\n\t\t\t\t\t\t\t...hoveredItem === \"profile\" ? styles.menuItemHover : {}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(UserIcon, {\n\t\t\t\t\t\t\tsize: 14,\n\t\t\t\t\t\t\tcolor: \"#6b7280\"\n\t\t\t\t\t\t}), \"View Profile\"]\n\t\t\t\t\t}), menuItems?.map((item) => /* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tonClick: item.onClick,\n\t\t\t\t\t\tonMouseEnter: () => setHoveredItem(item.label),\n\t\t\t\t\t\tonMouseLeave: () => setHoveredItem(null),\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t...styles.menuItem,\n\t\t\t\t\t\t\t...hoveredItem === item.label ? styles.menuItemHover : {},\n\t\t\t\t\t\t\t...item.style\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildren: [item.icon, item.label]\n\t\t\t\t\t}, item.label))]\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(\"hr\", { style: styles.separator }),\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tstyle: styles.menuSection,\n\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tonClick: onDisconnect,\n\t\t\t\t\t\tonMouseEnter: () => setHoveredItem(\"disconnect\"),\n\t\t\t\t\t\tonMouseLeave: () => setHoveredItem(null),\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t...styles.menuItem,\n\t\t\t\t\t\t\t...styles.disconnectItem,\n\t\t\t\t\t\t\t...hoveredItem === \"disconnect\" ? styles.menuItemHover : {}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(DisconnectIcon, {\n\t\t\t\t\t\t\tsize: 14,\n\t\t\t\t\t\t\tcolor: \"#dc2626\"\n\t\t\t\t\t\t}), \"Log out\"]\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t]\n\t\t})]\n\t});\n}\n//#endregion\n//#region src/renown/components/RenownAuthButton.tsx\nfunction RenownAuthButton({ className = \"\", darkMode, loginContent, userContent, loadingContent, children }) {\n\tconst auth = useRenownAuth();\n\tif (children) return /* @__PURE__ */ jsx(Fragment, { children: children(auth) });\n\tif (auth.status === \"loading\" || auth.status === \"checking\") {\n\t\tif (loadingContent) return /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName,\n\t\t\tchildren: loadingContent\n\t\t});\n\t\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName,\n\t\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tstyle: {\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tgap: \"8px\",\n\t\t\t\t\tpadding: \"6px 12px\",\n\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\tborder: \"1px solid #e5e7eb\",\n\t\t\t\t\tanimation: \"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite\"\n\t\t\t\t},\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"div\", { style: {\n\t\t\t\t\twidth: \"28px\",\n\t\t\t\t\theight: \"28px\",\n\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\tbackgroundColor: \"#e5e7eb\"\n\t\t\t\t} }), /* @__PURE__ */ jsx(\"div\", { style: {\n\t\t\t\t\twidth: \"80px\",\n\t\t\t\t\theight: \"14px\",\n\t\t\t\t\tborderRadius: \"4px\",\n\t\t\t\t\tbackgroundColor: \"#e5e7eb\"\n\t\t\t\t} })]\n\t\t\t}), /* @__PURE__ */ jsx(\"style\", { children: `@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }` })]\n\t\t});\n\t}\n\tif (auth.status === \"authorized\") {\n\t\tif (userContent) return /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName,\n\t\t\tchildren: userContent\n\t\t});\n\t\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName,\n\t\t\tchildren: /* @__PURE__ */ jsx(RenownUserButton, {})\n\t\t});\n\t}\n\tif (loginContent) return /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName,\n\t\tchildren: loginContent\n\t});\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName,\n\t\tchildren: /* @__PURE__ */ jsx(RenownLoginButton, { darkMode })\n\t});\n}\n//#endregion\n//#region src/renown/crypto.ts\n/**\n* @deprecated Use {@link initRenownCrypto} instead\n*\n* Initialize ConnectCrypto\n* @returns ConnectCrypto instance\n*/\nasync function initConnectCrypto() {\n\treturn initRenownCrypto();\n}\n/**\n* Initialize RenownCrypto\n* @returns RenownCrypto instance\n*/\nasync function initRenownCrypto() {\n\tconst keyStorage = await BrowserKeyStorage.create();\n\treturn await new RenownCryptoBuilder().withKeyPairStorage(keyStorage).build();\n}\n//#endregion\n//#region src/renown/use-renown-init.ts\nasync function initRenown(appName, namespace, url) {\n\taddRenownEventHandler();\n\tsetRenown(null);\n\tconst renown = await new RenownBuilder(appName, {\n\t\tbasename: namespace,\n\t\tbaseUrl: url\n\t}).build();\n\tsetRenown(renown);\n\tawait login(void 0, renown);\n\treturn renown;\n}\n/**\n* Hook that initializes the Renown SDK.\n* Call once at the top of your app. Options are read only on first mount.\n* Returns a promise that resolves with the Renown instance.\n*\n* @example\n* ```tsx\n* function App() {\n* const renownPromise = useRenownInit({ appName: \"my-app\" });\n* return <MyApp />;\n* }\n* ```\n*/\nfunction useRenownInit({ appName, namespace, url }) {\n\tconst promiseRef = useRef(Promise.withResolvers());\n\tconst initRef = useRef(false);\n\tif (typeof window === \"undefined\") {\n\t\tpromiseRef.current.reject(/* @__PURE__ */ new Error(\"window is undefined\"));\n\t\treturn promiseRef.current.promise;\n\t}\n\tif (initRef.current) return promiseRef.current.promise;\n\tinitRef.current = true;\n\tinitRenown(appName, namespace, url).then(promiseRef.current.resolve).catch(promiseRef.current.reject);\n\treturn promiseRef.current.promise;\n}\n//#endregion\n//#region src/renown/renown-init.tsx\n/**\n* Side-effect component that initializes the Renown SDK.\n* Renders nothing — place it alongside your app tree.\n*\n* @example\n* ```tsx\n* function App() {\n* return (\n* <>\n* <Renown appName=\"my-app\" onError={console.error} />\n* <MyApp />\n* </>\n* );\n* }\n* ```\n*/\nfunction Renown({ onError, ...initOptions }) {\n\tuseRenownInit(initOptions).catch(onError ?? console.error);\n\treturn null;\n}\n//#endregion\nexport { useLoginStatus as A, RENOWN_CHAIN_ID as C, addRenownEventHandler as D, VERIFIABLE_CREDENTIAL_EIP712_TYPE as E, setLoading as F, useLoading as I, useUser as M, addLoadingEventHandler as N, setRenown as O, loading as P, ISSUER_TYPE as S, RENOWN_URL as T, openRenown as _, RenownAuthButton as a, CREDENTIAL_TYPES as b, ChevronDownIcon as c, RenownLogo as d, SpinnerIcon as f, logout as g, login as h, initRenownCrypto as i, useRenown as j, useDid as k, CopyIcon as l, useRenownAuth as m, useRenownInit as n, RenownUserButton as o, UserIcon as p, initConnectCrypto as r, RenownLoginButton as s, Renown as t, DisconnectIcon as u, CREDENTIAL_SCHEMA_EIP712_TYPE as v, RENOWN_NETWORK_ID as w, DOMAIN_TYPE as x, CREDENTIAL_SUBJECT_TYPE as y };\n\n//# sourceMappingURL=renown-s0H1puU4.js.map","function e(e,t,n){let r=n=>e(n,...t);return n===void 0?r:Object.assign(r,{lazy:n,lazyArgs:t})}export{e as t};\n//# sourceMappingURL=lazyDataLastImpl-DtF3cihj.js.map","import{t as e}from\"./lazyDataLastImpl-DtF3cihj.js\";function t(t,n,r){let i=t.length-n.length;if(i===0)return t(...n);if(i===1)return e(t,n,r);throw Error(`Wrong number of arguments`)}export{t as purry};\n//# sourceMappingURL=purry.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}const n=(e,t,n)=>({...e,[t]:n});export{t as addProp};\n//# sourceMappingURL=addProp.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}const n=(e,t)=>t.every(t=>t(e));export{t as allPass};\n//# sourceMappingURL=allPass.js.map","function e(e,t,n){return e(n[0])?e=>t(e,...n):t(...n)}function t(...t){return e(r,n,t)}function n(e,...t){for(let n of t){if(typeof n==`function`)return n(e);let[t,r]=n;if(t(e))return r(e)}throw Error(`conditional: data failed for all cases`)}function r(e){if(!Array.isArray(e))return!1;let[t,n,...r]=e;return typeof t==`function`&&t.length<=1&&typeof n==`function`&&n.length<=1&&r.length===0}export{t};\n//# sourceMappingURL=conditional-CTEJD5TX.js.map","function e(e){return()=>e}export{e as constant};\n//# sourceMappingURL=constant.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}const n=(e,t)=>e??t;export{t as defaultTo};\n//# sourceMappingURL=defaultTo.js.map","const e={done:!0,hasNext:!1},t={done:!1,hasNext:!1},n=()=>e,r=e=>({hasNext:!0,next:e,done:!1});export{n,r,t};\n//# sourceMappingURL=utilityEvaluators-Cb8x6-JZ.js.map","import{t as e}from\"./utilityEvaluators-Cb8x6-JZ.js\";function t(e,...t){let a=e,o=t.map(e=>`lazy`in e?r(e):void 0),s=0;for(;s<t.length;){if(o[s]===void 0||!i(a)){let e=t[s];a=e(a),s+=1;continue}let e=[];for(let n=s;n<t.length;n++){let t=o[n];if(t===void 0||(e.push(t),t.isSingle))break}let r=[];for(let t of a)if(n(t,r,e))break;let{isSingle:c}=e.at(-1);a=c?r[0]:r,s+=e.length}return a}function n(t,r,i){if(i.length===0)return r.push(t),!1;let a=t,o=e,s=!1;for(let[e,t]of i.entries()){let{index:c,items:l}=t;if(l.push(a),o=t(a,c,l),t.index+=1,o.hasNext){if(o.hasMany??!1){for(let t of o.next)if(n(t,r,i.slice(e+1)))return!0;return s}a=o.next}if(!o.hasNext)break;o.done&&(s=!0)}return o.hasNext&&r.push(a),s}function r(e){let{lazy:t,lazyArgs:n}=e,r=t(...n);return Object.assign(r,{isSingle:t.single??!1,index:0,items:[]})}function i(e){return typeof e==`string`||typeof e==`object`&&!!e&&Symbol.iterator in e}export{t as pipe};\n//# sourceMappingURL=pipe.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}const n=(e,t)=>e.length>=t;export{t as hasAtLeast};\n//# sourceMappingURL=hasAtLeast.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(Object.entries,t)}export{t as entries};\n//# sourceMappingURL=entries.js.map","import{purry as e}from\"./purry.js\";import{t}from\"./utilityEvaluators-Cb8x6-JZ.js\";function n(...t){return e(r,t,i)}const r=(e,t)=>e.filter(t),i=e=>(n,r,i)=>e(n,r,i)?{done:!1,hasNext:!0,next:n}:t;export{n as filter};\n//# sourceMappingURL=filter.js.map","const e=Symbol(`funnel/voidReducer`),t=()=>e;function n(n,{triggerAt:r=`end`,minQuietPeriodMs:i,maxBurstDurationMs:a,minGapMs:o,reducer:s=t}){let c,l,u,d,f=()=>{let t=u;t!==void 0&&(u=void 0,t===e?n():n(t),o!==void 0&&(l=setTimeout(p,o)))},p=()=>{clearTimeout(l),l=void 0,c===void 0&&f()},m=()=>{clearTimeout(c),c=void 0,d=void 0,l===void 0&&f()};return{call:(...e)=>{let t=c===void 0&&l===void 0;if((r!==`start`||t)&&(u=s(u,...e)),!(c===void 0&&!t)){if(i!==void 0||a!==void 0||o===void 0){clearTimeout(c);let e=Date.now();d??=e;let t=a===void 0?i??0:Math.min(i??a,Math.max(0,a-(e-d)));c=setTimeout(m,t)}r!==`end`&&t&&f()}},cancel:()=>{clearTimeout(c),c=void 0,d=void 0,clearTimeout(l),l=void 0,u=void 0},flush:()=>{m(),p()},get isIdle(){return c===void 0&&l===void 0}}}export{n as funnel};\n//# sourceMappingURL=funnel.js.map","function e(e){return Array.isArray(e)}export{e as isArray};\n//# sourceMappingURL=isArray.js.map","function e(e){return e!==void 0}export{e as isDefined};\n//# sourceMappingURL=isDefined.js.map","function e(e,t){if(t===void 0){let t=new Set(e);return e=>t.has(e)}return t.includes(e)}export{e as isIncludedIn};\n//# sourceMappingURL=isIncludedIn.js.map","function e(e){return t=>!e(t)}export{e as isNot};\n//# sourceMappingURL=isNot.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t)}const n=(e,t)=>e===t||Object.is(e,t);export{t as isStrictEqual};\n//# sourceMappingURL=isStrictEqual.js.map","function e(e){return typeof e==`string`}export{e as isString};\n//# sourceMappingURL=isString.js.map","function e(e){return!!e}export{e as isTruthy};\n//# sourceMappingURL=isTruthy.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(Object.keys,t)}export{t as keys};\n//# sourceMappingURL=keys.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(n,t,r)}const n=(e,t)=>e.map(t),r=e=>(t,n,r)=>({done:!1,hasNext:!0,next:e(t,n,r)});export{t as map};\n//# sourceMappingURL=map.js.map","function e(e){let t=!1,n;return()=>(t||=(n=e(),!0),n)}export{e as once};\n//# sourceMappingURL=once.js.map","function e(e,...n){return typeof e==`string`||typeof e==`number`||typeof e==`symbol`?r=>t(r,e,...n):t(e,...n)}function t(e,...t){let n=e;for(let e of t){if(n==null)return;n=n[e]}return n}export{e as prop};\n//# sourceMappingURL=prop.js.map","import{purry as e}from\"./purry.js\";function t(...t){return e(Object.values,t)}export{t as values};\n//# sourceMappingURL=values.js.map","/* global btoa */\nlet base64\n\nif (typeof window !== 'undefined') {\n if (window.btoa) {\n base64 = function (input) {\n return btoa(unescape(encodeURIComponent(input)))\n }\n } else {\n // Polyfill for environments that don't have btoa or Buffer class (notably, React Native).\n // Based on https://github.com/davidchambers/Base64.js/blob/a121f75bb10c8dd5d557886c4b1069b31258d230/base64.js\n base64 = function (input) {\n const str = unescape(encodeURIComponent(input + ''))\n let output = ''\n for (\n let block, charCode, idx = 0, map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n str.charAt(idx | 0) || (map = '=', idx % 1);\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n ) {\n charCode = str.charCodeAt(idx += 3 / 4)\n // This is a coherence check. The result of unescape(encodeURIComponent()) should always be\n // characters with code points that fit into two bytes.\n /* c8 ignore next 3 */\n if (charCode > 0xFF) {\n throw new Error(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\")\n }\n block = block << 8 | charCode\n }\n return output\n }\n }\n} else {\n base64 = function (input) {\n return Buffer.from(input).toString('base64')\n }\n}\n\nfunction slug (string, opts) {\n let result = slugify(string, opts)\n const fallback = opts && opts.fallback !== undefined ? opts.fallback : slug.defaults.fallback\n // If output is an empty string, try slug for base64 of string.\n if (fallback === true && result === '') {\n result = slugify(base64(string), opts)\n }\n return result\n}\n\nconst locales = {\n // http://www.eki.ee/wgrs/rom1_bg.pdf\n bg: { Й: 'Y', й: 'y', X: 'H', x: 'h', Ц: 'Ts', ц: 'ts', Щ: 'Sht', щ: 'sht', Ъ: 'A', ъ: 'a', Ь: 'Y', ь: 'y' },\n // Need a reference URL for German, although this is pretty well-known.\n de: { Ä: 'AE', ä: 'ae', Ö: 'OE', ö: 'oe', Ü: 'UE', ü: 'ue' },\n // Need a reference URL for Serbian.\n sr: { đ: 'dj', Đ: 'DJ' },\n // https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/864314/ROMANIZATION_OF_UKRAINIAN.pdf\n uk: { И: 'Y', и: 'y', Й: 'Y', й: 'y', Ц: 'Ts', ц: 'ts', Х: 'Kh', х: 'kh', Щ: 'Shch', щ: 'shch', Г: 'H', г: 'h' }\n}\n\nlet defaultLocale = {}\n\nfunction slugify (string, opts) {\n if (typeof string !== 'string') {\n throw new Error('slug() requires a string argument, received ' + typeof string)\n }\n if (!string.isWellFormed()) {\n throw new Error('slug() received a malformed string with lone surrogates')\n }\n if (typeof opts === 'string') { opts = { replacement: opts } }\n opts = opts ? Object.assign({}, opts) : {}\n opts.mode = opts.mode || slug.defaults.mode\n const defaults = slug.defaults.modes[opts.mode]\n const keys = ['replacement', 'multicharmap', 'charmap', 'remove', 'lower', 'trim']\n for (let key, i = 0, l = keys.length; i < l; i++) {\n key = keys[i]\n opts[key] = (key in opts) ? opts[key] : defaults[key]\n }\n const localeMap = locales[opts.locale] || defaultLocale\n\n let lengths = []\n for (const key in opts.multicharmap) {\n if (!Object.prototype.hasOwnProperty.call(opts.multicharmap, key)) { continue }\n\n const len = key.length\n if (lengths.indexOf(len) === -1) { lengths.push(len) }\n }\n\n // We want to match the longest string if there are multiple matches, so\n // sort lengths in descending order.\n lengths = lengths.sort(function (a, b) { return b - a })\n\n const disallowedChars = opts.mode === 'rfc3986' ? /[^\\w\\s\\-.~]/ : /[^A-Za-z0-9\\s]/\n\n let result = ''\n for (let char, i = 0, l = string.length; i < l; i++) {\n char = string[i]\n let matchedMultichar = false\n for (let j = 0; j < lengths.length; j++) {\n const len = lengths[j]\n const str = string.substr(i, len)\n if (opts.multicharmap[str]) {\n i += len - 1\n char = opts.multicharmap[str]\n matchedMultichar = true\n break\n }\n }\n if (!matchedMultichar) {\n if (localeMap[char]) {\n char = localeMap[char]\n } else if (opts.charmap[char]) {\n char = opts.charmap[char].replace(opts.replacement, ' ')\n } else if (char.includes(opts.replacement)) {\n // preserve the replacement character in case it is excluded by disallowedChars\n char = char.replace(opts.replacement, ' ')\n } else {\n char = char.replace(disallowedChars, '')\n }\n }\n result += char\n }\n\n if (opts.remove) {\n result = result.replace(opts.remove, '')\n }\n if (opts.trim) {\n result = result.trim()\n }\n result = result.replace(/\\s+/g, opts.replacement) // convert spaces\n if (opts.lower) {\n result = result.toLowerCase()\n }\n return result\n}\n\nconst initialMulticharmap = {\n // multibyte devanagari characters (hindi, sanskrit, etc.)\n फ़: 'Fi',\n ग़: 'Ghi',\n ख़: 'Khi',\n क़: 'Qi',\n ड़: 'ugDha',\n ढ़: 'ugDhha',\n य़: 'Yi',\n ज़: 'Za',\n // hebrew\n // Refs: http://www.eki.ee/wgrs/rom1_he.pdf\n // Refs: https://en.wikipedia.org/wiki/Niqqud\n בִי: 'i',\n בֵ: 'e',\n בֵי: 'e',\n בֶ: 'e',\n בַ: 'a',\n בָ: 'a',\n בֹ: 'o',\n וֹ: 'o',\n בֻ: 'u',\n וּ: 'u',\n בּ: 'b',\n כּ: 'k',\n ךּ: 'k',\n פּ: 'p',\n שׁ: 'sh',\n שׂ: 's',\n בְ: 'e',\n חֱ: 'e',\n חֲ: 'a',\n חֳ: 'o',\n בִ: 'i'\n}\n\n// https://github.com/django/django/blob/master/django/contrib/admin/static/admin/js/urlify.js\nconst initialCharmap = {\n // latin\n À: 'A',\n Á: 'A',\n Â: 'A',\n Ã: 'A',\n Ä: 'A',\n Å: 'A',\n Æ: 'AE',\n Ç: 'C',\n È: 'E',\n É: 'E',\n Ê: 'E',\n Ë: 'E',\n Ì: 'I',\n Í: 'I',\n Î: 'I',\n Ï: 'I',\n Ð: 'D',\n Ñ: 'N',\n Ò: 'O',\n Ó: 'O',\n Ô: 'O',\n Õ: 'O',\n Ö: 'O',\n Ő: 'O',\n Ø: 'O',\n Ō: 'O',\n Ù: 'U',\n Ú: 'U',\n Û: 'U',\n Ü: 'U',\n Ű: 'U',\n Ý: 'Y',\n Þ: 'TH',\n ß: 'ss',\n à: 'a',\n á: 'a',\n â: 'a',\n ã: 'a',\n ä: 'a',\n å: 'a',\n æ: 'ae',\n ç: 'c',\n è: 'e',\n é: 'e',\n ê: 'e',\n ë: 'e',\n ì: 'i',\n í: 'i',\n î: 'i',\n ï: 'i',\n ð: 'd',\n ñ: 'n',\n ò: 'o',\n ó: 'o',\n ô: 'o',\n õ: 'o',\n ö: 'o',\n ő: 'o',\n ø: 'o',\n ō: 'o',\n Œ: 'OE',\n œ: 'oe',\n ù: 'u',\n ú: 'u',\n û: 'u',\n ü: 'u',\n ű: 'u',\n ý: 'y',\n þ: 'th',\n ÿ: 'y',\n ẞ: 'SS',\n // greek\n α: 'a',\n β: 'b',\n γ: 'g',\n δ: 'd',\n ε: 'e',\n ζ: 'z',\n η: 'h',\n θ: 'th',\n ι: 'i',\n κ: 'k',\n λ: 'l',\n μ: 'm',\n ν: 'n',\n ξ: '3',\n ο: 'o',\n π: 'p',\n ρ: 'r',\n σ: 's',\n τ: 't',\n υ: 'y',\n φ: 'f',\n χ: 'x',\n ψ: 'ps',\n ω: 'w',\n ά: 'a',\n έ: 'e',\n ί: 'i',\n ό: 'o',\n ύ: 'y',\n ή: 'h',\n ώ: 'w',\n ς: 's',\n ϊ: 'i',\n ΰ: 'y',\n ϋ: 'y',\n ΐ: 'i',\n Α: 'A',\n Β: 'B',\n Γ: 'G',\n Δ: 'D',\n Ε: 'E',\n Ζ: 'Z',\n Η: 'H',\n Θ: 'Th',\n Ι: 'I',\n Κ: 'K',\n Λ: 'L',\n Μ: 'M',\n Ν: 'N',\n Ξ: '3',\n Ο: 'O',\n Π: 'P',\n Ρ: 'R',\n Σ: 'S',\n Τ: 'T',\n Υ: 'Y',\n Φ: 'F',\n Χ: 'X',\n Ψ: 'PS',\n Ω: 'W',\n Ά: 'A',\n Έ: 'E',\n Ί: 'I',\n Ό: 'O',\n Ύ: 'Y',\n Ή: 'H',\n Ώ: 'W',\n Ϊ: 'I',\n Ϋ: 'Y',\n // turkish\n ş: 's',\n Ş: 'S',\n ı: 'i',\n İ: 'I',\n ğ: 'g',\n Ğ: 'G',\n // russian\n а: 'a',\n б: 'b',\n в: 'v',\n г: 'g',\n д: 'd',\n е: 'e',\n ё: 'yo',\n ж: 'zh',\n з: 'z',\n и: 'i',\n й: 'j',\n к: 'k',\n л: 'l',\n м: 'm',\n н: 'n',\n о: 'o',\n п: 'p',\n р: 'r',\n с: 's',\n т: 't',\n у: 'u',\n ф: 'f',\n х: 'h',\n ц: 'c',\n ч: 'ch',\n ш: 'sh',\n щ: 'sh',\n ъ: 'u',\n ы: 'y',\n ь: '',\n э: 'e',\n ю: 'yu',\n я: 'ya',\n А: 'A',\n Б: 'B',\n В: 'V',\n Г: 'G',\n Д: 'D',\n Е: 'E',\n Ё: 'Yo',\n Ж: 'Zh',\n З: 'Z',\n И: 'I',\n Й: 'J',\n К: 'K',\n Л: 'L',\n М: 'M',\n Н: 'N',\n О: 'O',\n П: 'P',\n Р: 'R',\n С: 'S',\n Т: 'T',\n У: 'U',\n Ф: 'F',\n Х: 'H',\n Ц: 'C',\n Ч: 'Ch',\n Ш: 'Sh',\n Щ: 'Sh',\n Ъ: 'U',\n Ы: 'Y',\n Ь: '',\n Э: 'E',\n Ю: 'Yu',\n Я: 'Ya',\n // ukranian\n Є: 'Ye',\n І: 'I',\n Ї: 'Yi',\n Ґ: 'G',\n є: 'ye',\n і: 'i',\n ї: 'yi',\n ґ: 'g',\n // czech\n č: 'c',\n ď: 'd',\n ě: 'e',\n ň: 'n',\n ř: 'r',\n š: 's',\n ť: 't',\n ů: 'u',\n ž: 'z',\n Č: 'C',\n Ď: 'D',\n Ě: 'E',\n Ň: 'N',\n Ř: 'R',\n Š: 'S',\n Ť: 'T',\n Ů: 'U',\n Ž: 'Z',\n // slovak\n ľ: 'l',\n ĺ: 'l',\n ŕ: 'r',\n Ľ: 'L',\n Ĺ: 'L',\n Ŕ: 'R',\n // polish\n ą: 'a',\n ć: 'c',\n ę: 'e',\n ł: 'l',\n ń: 'n',\n ś: 's',\n ź: 'z',\n ż: 'z',\n Ą: 'A',\n Ć: 'C',\n Ę: 'E',\n Ł: 'L',\n Ń: 'N',\n Ś: 'S',\n Ź: 'Z',\n Ż: 'Z',\n // latvian\n ā: 'a',\n ē: 'e',\n ģ: 'g',\n ī: 'i',\n ķ: 'k',\n ļ: 'l',\n ņ: 'n',\n ū: 'u',\n Ā: 'A',\n Ē: 'E',\n Ģ: 'G',\n Ī: 'I',\n Ķ: 'K',\n Ļ: 'L',\n Ņ: 'N',\n Ū: 'U',\n // arabic\n أ: 'a',\n إ: 'i',\n ب: 'b',\n ت: 't',\n ث: 'th',\n ج: 'g',\n ح: 'h',\n خ: 'kh',\n د: 'd',\n ذ: 'th',\n ر: 'r',\n ز: 'z',\n س: 's',\n ش: 'sh',\n ص: 's',\n ض: 'd',\n ط: 't',\n ظ: 'th',\n ع: 'aa',\n غ: 'gh',\n ف: 'f',\n ق: 'k',\n ك: 'k',\n ل: 'l',\n م: 'm',\n ن: 'n',\n ه: 'h',\n و: 'o',\n ي: 'y',\n ء: 'aa',\n ة: 'a',\n // farsi\n آ: 'a',\n ا: 'a',\n پ: 'p',\n ژ: 'zh',\n گ: 'g',\n چ: 'ch',\n ک: 'k',\n ی: 'i',\n // lithuanian\n ė: 'e',\n į: 'i',\n ų: 'u',\n Ė: 'E',\n Į: 'I',\n Ų: 'U',\n // romanian\n ț: 't',\n Ț: 'T',\n ţ: 't',\n Ţ: 'T',\n ș: 's',\n Ș: 'S',\n ă: 'a',\n Ă: 'A',\n // vietnamese\n Ạ: 'A',\n Ả: 'A',\n Ầ: 'A',\n Ấ: 'A',\n Ậ: 'A',\n Ẩ: 'A',\n Ẫ: 'A',\n Ằ: 'A',\n Ắ: 'A',\n Ặ: 'A',\n Ẳ: 'A',\n Ẵ: 'A',\n Ẹ: 'E',\n Ẻ: 'E',\n Ẽ: 'E',\n Ề: 'E',\n Ế: 'E',\n Ệ: 'E',\n Ể: 'E',\n Ễ: 'E',\n Ị: 'I',\n Ỉ: 'I',\n Ĩ: 'I',\n Ọ: 'O',\n Ỏ: 'O',\n Ồ: 'O',\n Ố: 'O',\n Ộ: 'O',\n Ổ: 'O',\n Ỗ: 'O',\n Ơ: 'O',\n Ờ: 'O',\n Ớ: 'O',\n Ợ: 'O',\n Ở: 'O',\n Ỡ: 'O',\n Ụ: 'U',\n Ủ: 'U',\n Ũ: 'U',\n Ư: 'U',\n Ừ: 'U',\n Ứ: 'U',\n Ự: 'U',\n Ử: 'U',\n Ữ: 'U',\n Ỳ: 'Y',\n Ỵ: 'Y',\n Ỷ: 'Y',\n Ỹ: 'Y',\n Đ: 'D',\n ạ: 'a',\n ả: 'a',\n ầ: 'a',\n ấ: 'a',\n ậ: 'a',\n ẩ: 'a',\n ẫ: 'a',\n ằ: 'a',\n ắ: 'a',\n ặ: 'a',\n ẳ: 'a',\n ẵ: 'a',\n ẹ: 'e',\n ẻ: 'e',\n ẽ: 'e',\n ề: 'e',\n ế: 'e',\n ệ: 'e',\n ể: 'e',\n ễ: 'e',\n ị: 'i',\n ỉ: 'i',\n ĩ: 'i',\n ọ: 'o',\n ỏ: 'o',\n ồ: 'o',\n ố: 'o',\n ộ: 'o',\n ổ: 'o',\n ỗ: 'o',\n ơ: 'o',\n ờ: 'o',\n ớ: 'o',\n ợ: 'o',\n ở: 'o',\n ỡ: 'o',\n ụ: 'u',\n ủ: 'u',\n ũ: 'u',\n ư: 'u',\n ừ: 'u',\n ứ: 'u',\n ự: 'u',\n ử: 'u',\n ữ: 'u',\n ỳ: 'y',\n ỵ: 'y',\n ỷ: 'y',\n ỹ: 'y',\n đ: 'd',\n // kazakh\n Ә: 'AE',\n ә: 'ae',\n Ғ: 'GH',\n ғ: 'gh',\n Қ: 'KH',\n қ: 'kh',\n Ң: 'NG',\n ң: 'ng',\n Ү: 'UE',\n ү: 'ue',\n Ұ: 'U',\n ұ: 'u',\n Һ: 'H',\n һ: 'h',\n Ө: 'OE',\n ө: 'oe',\n // serbian\n ђ: 'dj',\n ј: 'j',\n љ: 'lj',\n њ: 'nj',\n ћ: 'c',\n џ: 'dz',\n Ђ: 'Dj',\n Ј: 'j',\n Љ: 'Lj',\n Њ: 'Nj',\n Ћ: 'C',\n Џ: 'Dz',\n nj: 'nj',\n lj: 'lj',\n Nj: 'NJ',\n Lj: 'LJ',\n // hindi\n अ: 'a',\n आ: 'aa',\n ए: 'e',\n ई: 'ii',\n ऍ: 'ei',\n ऎ: 'ae',\n ऐ: 'ai',\n इ: 'i',\n ओ: 'o',\n ऑ: 'oi',\n ऒ: 'oii',\n ऊ: 'uu',\n औ: 'ou',\n उ: 'u',\n ब: 'B',\n भ: 'Bha',\n च: 'Ca',\n छ: 'Chha',\n ड: 'Da',\n ढ: 'Dha',\n फ: 'Fa',\n ग: 'Ga',\n घ: 'Gha',\n ग़: 'Ghi',\n ह: 'Ha',\n ज: 'Ja',\n झ: 'Jha',\n क: 'Ka',\n ख: 'Kha',\n ख़: 'Khi',\n ल: 'L',\n ळ: 'Li',\n ऌ: 'Li',\n ऴ: 'Lii',\n ॡ: 'Lii',\n म: 'Ma',\n न: 'Na',\n ङ: 'Na',\n ञ: 'Nia',\n ण: 'Nae',\n ऩ: 'Ni',\n ॐ: 'oms',\n प: 'Pa',\n क़: 'Qi',\n र: 'Ra',\n ऋ: 'Ri',\n ॠ: 'Ri',\n ऱ: 'Ri',\n स: 'Sa',\n श: 'Sha',\n ष: 'Shha',\n ट: 'Ta',\n त: 'Ta',\n ठ: 'Tha',\n द: 'Tha',\n थ: 'Tha',\n ध: 'Thha',\n ड़: 'ugDha',\n ढ़: 'ugDhha',\n व: 'Va',\n य: 'Ya',\n य़: 'Yi',\n ज़: 'Za',\n // azerbaijani\n ə: 'e',\n Ə: 'E',\n // georgian\n ა: 'a',\n ბ: 'b',\n გ: 'g',\n დ: 'd',\n ე: 'e',\n ვ: 'v',\n ზ: 'z',\n თ: 't',\n ი: 'i',\n კ: 'k',\n ლ: 'l',\n მ: 'm',\n ნ: 'n',\n ო: 'o',\n პ: 'p',\n ჟ: 'zh',\n რ: 'r',\n ს: 's',\n ტ: 't',\n უ: 'u',\n ფ: 'p',\n ქ: 'k',\n ღ: 'gh',\n ყ: 'q',\n შ: 'sh',\n ჩ: 'ch',\n ც: 'ts',\n ძ: 'dz',\n წ: 'ts',\n ჭ: 'ch',\n ხ: 'kh',\n ჯ: 'j',\n ჰ: 'h',\n // hebrew\n ב: 'v',\n גּ: 'g',\n ג: 'g',\n ד: 'd',\n דּ: 'd',\n ה: 'h',\n ו: 'v',\n ז: 'z',\n ח: 'h',\n ט: 't',\n י: 'y',\n כ: 'kh',\n ך: 'kh',\n ל: 'l',\n מ: 'm',\n ם: 'm',\n נ: 'n',\n ן: 'n',\n ס: 's',\n פ: 'f',\n ף: 'f',\n ץ: 'ts',\n צ: 'ts',\n ק: 'k',\n ר: 'r',\n תּ: 't',\n ת: 't'\n}\n\nslug.charmap = Object.assign({}, initialCharmap)\nslug.multicharmap = Object.assign({}, initialMulticharmap)\nslug.defaults = {\n charmap: slug.charmap,\n mode: 'pretty',\n modes: {\n rfc3986: {\n replacement: '-',\n remove: null,\n lower: true,\n charmap: slug.charmap,\n multicharmap: slug.multicharmap,\n trim: true\n },\n pretty: {\n replacement: '-',\n remove: null,\n lower: true,\n charmap: slug.charmap,\n multicharmap: slug.multicharmap,\n trim: true\n }\n },\n multicharmap: slug.multicharmap,\n fallback: true\n}\n\nslug.reset = function () {\n slug.defaults.modes.rfc3986.charmap = slug.defaults.modes.pretty.charmap = slug.charmap = slug.defaults.charmap = Object.assign({}, initialCharmap)\n slug.defaults.modes.rfc3986.multicharmap = slug.defaults.modes.pretty.multicharmap = slug.multicharmap = slug.defaults.multicharmap = Object.assign({}, initialMulticharmap)\n defaultLocale = ''\n}\n\nslug.extend = function (customMap) {\n const keys = Object.keys(customMap)\n const multi = {}\n const single = {}\n for (let i = 0; i < keys.length; i++) {\n if (keys[i].length > 1) {\n multi[keys[i]] = customMap[keys[i]]\n } else {\n single[keys[i]] = customMap[keys[i]]\n }\n }\n Object.assign(slug.charmap, single)\n Object.assign(slug.multicharmap, multi)\n}\n\nslug.setLocale = function (locale) {\n defaultLocale = locales[locale] || {}\n}\n\nexport default slug\n","\nexport const normalizeDescriptors=(error)=>{\nCORE_ERROR_PROPS.forEach((propName)=>{\nnormalizeDescriptor(error,propName)\n})\n};\n\nexport const CORE_ERROR_PROPS=[\"name\",\"message\",\"stack\",\"cause\",\"errors\"];\n\nconst normalizeDescriptor=(error,propName)=>{\nconst descriptor=getDescriptor(error,propName);\n\nif(descriptor===undefined){\nreturn\n}\n\nif(isReadonlyGetter(descriptor)){\nsetErrorProperty(error,propName,error[propName]);\nreturn\n}\n\nif(isInvalidDescriptor(descriptor)){\nsetErrorDescriptor(error,propName,descriptor)\n}\n};\n\n\nexport const getDescriptor=(value,propName)=>{\nconst descriptor=Object.getOwnPropertyDescriptor(value,propName);\n\nif(descriptor!==undefined){\nreturn descriptor\n}\n\nconst prototype=Object.getPrototypeOf(value);\nreturn prototype===null?undefined:getDescriptor(prototype,propName)\n};\n\n\nconst isReadonlyGetter=({get,set})=>\nget!==undefined&&set===undefined;\n\nconst isInvalidDescriptor=({enumerable,writable})=>\nenumerable||!writable;\n\n\nexport const setErrorProperty=(error,propName,value)=>{\nsetErrorDescriptor(error,propName,{value})\n};\n\n\nconst setErrorDescriptor=(error,propName,descriptor)=>{\n\nObject.defineProperty(error,propName,{\n...descriptor,\n...(\"get\"in descriptor||\"set\"in descriptor?{}:{writable:true}),\nenumerable:false,\nconfigurable:true\n})\n};","import{setErrorProperty}from\"./descriptors.js\";\n\n\n\n\n\n\nexport const normalizeAggregate=(error,recurse)=>{\nif(Array.isArray(error.errors)){\nconst aggregateErrors=error.errors.\nfilter(isDefined).\nmap(recurse).\nfilter(Boolean);\nsetErrorProperty(error,\"errors\",aggregateErrors)\n}else if(isAggregateError(error)){\nsetErrorProperty(error,\"errors\",[])\n}else if(error.errors!==undefined){\ndeleteAggregateErrors(error)\n}\n};\n\nconst isDefined=(error)=>error!==undefined;\n\nconst isAggregateError=(error)=>\n\"AggregateError\"in globalThis&&(\nerror.name===\"AggregateError\"||error instanceof AggregateError);\n\nconst deleteAggregateErrors=(error)=>{\n\ndelete error.errors;\n\nif(error.errors!==undefined){\nsetErrorProperty(error,\"errors\",[])\n}\n};","import{setErrorProperty}from\"./descriptors.js\";\n\n\n\n\n\n\n\n\n\n\n\n\nexport const normalizeCause=(error,recurse)=>{\nif(!(\"cause\"in error)){\nreturn\n}\n\nconst cause=error.cause===undefined?error.cause:recurse(error.cause);\n\nif(cause===undefined){\n\ndelete error.cause\n}else{\nsetErrorProperty(error,\"cause\",cause)\n}\n};","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst isErrorInstance=(value)=>\nisInstanceOfError(value)||hasErrorTag(value);\n\nexport default isErrorInstance;\n\n\n\nconst isInstanceOfError=(value)=>{\ntry{\nreturn value instanceof Error\n}catch{\nreturn false\n}\n};\n\nconst hasErrorTag=(value)=>{\ntry{\nreturn ERROR_TAGS.has(Object.prototype.toString.call(value))\n}catch{\nreturn false\n}\n};\n\nconst ERROR_TAGS=new Set([\n\n\"[object Error]\",\n\n\"[object DOMException]\",\n\n\"[object DOMError]\",\n\n\"[object Exception]\"]\n);","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","import{CORE_ERROR_PROPS}from\"../descriptors.js\";\n\n\nexport const isNonModifiableError=(error)=>\n!Object.isExtensible(error)||\nCORE_ERROR_PROPS.some(\n(propName)=>\nisNonConfigurableProp(error,propName)||isThrowingProp(error,propName)\n);\n\n\n\nconst isNonConfigurableProp=(error,propName)=>{\nconst descriptor=Object.getOwnPropertyDescriptor(error,propName);\nreturn descriptor!==undefined&&!descriptor.configurable\n};\n\n\nconst isThrowingProp=(error,propName)=>{\ntry{\n\nerror[propName];\nreturn false\n}catch{\nreturn true\n}\n};","import{setErrorProperty}from\"./descriptors.js\";\n\n\n\n\n\n\n\n\n\n\nexport const setStack=(error)=>{\nconst stack=getStack(error.message,error.name);\nsetErrorProperty(error,\"stack\",stack)\n};\n\n\n\n\n\n\n\nconst getStack=(message=\"\",name=\"Error\")=>{\nconst StackError=getErrorClass(name);\nconst{stack}=new StackError(message);\nreturn typeof stack===\"string\"&&stack!==\"\"?\nstack:\n`${name}: ${message}`\n};\n\n\n\n\n\nconst getErrorClass=(name)=>{\nconst descriptor={\nvalue:name,\nenumerable:false,\nwritable:true,\nconfigurable:true\n};\n\nconst StackError=Object.defineProperty(\nclass extends Error{},\n\"name\",\ndescriptor\n);\n\nObject.defineProperty(StackError.prototype,\"name\",descriptor);\nreturn StackError\n};","import{CORE_ERROR_PROPS,getDescriptor}from\"../descriptors.js\";\n\n\n\n\nexport const copyObject=(object)=>{\nconst objectCopy={};\n\n\nfor(const propName of getPropsToCopy(object)){\n\ntry{\nconst value=object[propName];\nconst{\nenumerable,\nconfigurable,\nwritable=true\n}=getDescriptor(object,propName);\n\nObject.defineProperty(objectCopy,propName,{\nvalue,\nenumerable,\nconfigurable,\nwritable\n})\n}catch{}\n}\n\nreturn objectCopy\n};\n\n\n\n\n\nconst getPropsToCopy=(object)=>{\nconst propNames=getOwnKeys(object);\n\n\nfor(const propName of CORE_ERROR_PROPS){\n\nif(isInheritedProp(object,propName)){\n\npropNames.push(propName)\n}\n}\n\nreturn propNames\n};\n\n\nconst getOwnKeys=(object)=>{\ntry{\nreturn Reflect.ownKeys(object)\n}catch{\nreturn[]\n}\n};\n\n\nconst isInheritedProp=(object,propName)=>{\ntry{\nreturn propName in object&&!Object.hasOwn(object,propName)\n}catch{\nreturn false\n}\n};","import{setErrorProperty}from\"../descriptors.js\";\nimport{setStack}from\"../stack.js\";\n\nimport{copyObject}from\"./copy.js\";\n\n\nexport const objectifyError=(object)=>{\nconst{name,message,stack,cause,errors,...objectA}=copyObject(object);\nconst messageA=getMessage(message,objectA);\nconst error=newError(name,messageA);\n\nif(message===messageA){\nassignObjectProps(error,objectA)\n}\n\nObject.entries({name,stack,cause,errors}).forEach(\n([propName,propValue])=>{\nsetNewErrorProperty(error,propName,propValue)\n}\n);\n\nif(stack===undefined){\nsetStack(error)\n}\n\nreturn error\n};\n\n\nconst getMessage=(message,object)=>\ntypeof message===\"string\"&&message!==\"\"?\nmessage:\ntruncateMessage(safeJsonStringify(object));\n\nconst safeJsonStringify=(object)=>{\ntry{\nreturn JSON.stringify(object)\n}catch{\nreturn safeStringify(object)\n}\n};\n\nconst safeStringify=(object)=>{\ntry{\nreturn String(object)\n}catch{\nreturn\"Invalid error\"\n}\n};\n\nconst truncateMessage=(message)=>\nmessage.length<MESSAGE_MAX_SIZE?\nmessage:\n`${message.slice(0,MESSAGE_MAX_SIZE)}...`;\n\nconst MESSAGE_MAX_SIZE=1e3;\n\nconst newError=(name,message)=>{\nif(name===\"AggregateError\"&&\"AggregateError\"in globalThis){\nreturn new AggregateError([],message)\n}\n\nif(name in NATIVE_ERRORS){\nreturn new NATIVE_ERRORS[name](message)\n}\n\nreturn new Error(message)\n};\n\nconst NATIVE_ERRORS={\nError,\nReferenceError,\nTypeError,\nSyntaxError,\nRangeError,\nURIError,\nEvalError\n};\n\n\nconst assignObjectProps=(error,object)=>{\n\nfor(const propName in object){\n\nif(!(propName in error)){\nerror[propName]=object[propName]\n}\n}\n};\n\nconst setNewErrorProperty=(error,propName,propValue)=>{\nif(propValue!==undefined){\nsetErrorProperty(error,propName,propValue)\n}\n};","import{setStack}from\"../stack.js\";\n\n\nexport const stringifyError=(value)=>{\ntry{\nconst error=new Error(String(value));\nsetStack(error);\nreturn error\n}catch(error_){\nreturn error_\n}\n};","import isErrorInstance from\"is-error-instance\";\nimport isPlainObj from\"is-plain-obj\";\n\nimport{isNonModifiableError}from\"./modifiable.js\";\nimport{objectifyError}from\"./object.js\";\nimport{stringifyError}from\"./string.js\";\n\nconst{toString:objectToString}=Object.prototype;\n\n\nexport const createError=(value)=>{\nif(isErrorPlainObj(value)){\nreturn objectifyError(value)\n}\n\nif(!isErrorInstance(value)){\nreturn stringifyError(value)\n}\n\nif(isInvalidError(value)){\nreturn objectifyError(value)\n}\n\nreturn value\n};\n\n\nconst isErrorPlainObj=(value)=>{\ntry{\nreturn isPlainObj(value)\n}catch{\nreturn false\n}\n};\n\nconst isInvalidError=(value)=>\nisProxy(value)||isNonModifiableError(value)||hasInvalidConstructor(value);\n\n\n\n\nconst isProxy=(value)=>{\ntry{\nreturn objectToString.call(value)===\"[object Object]\"\n}catch{\nreturn true\n}\n};\n\n\n\nconst hasInvalidConstructor=(error)=>\ntypeof error.constructor!==\"function\"||\ntypeof error.constructor.name!==\"string\"||\nerror.constructor.name===\"\"||\nerror.constructor.prototype!==Object.getPrototypeOf(error);","import{normalizeAggregate}from\"./aggregate.js\";\nimport{normalizeCause}from\"./cause.js\";\nimport{createError}from\"./create/main.js\";\nimport{normalizeDescriptors,setErrorProperty}from\"./descriptors.js\";\nimport{setStack}from\"./stack.js\";\n\n\nconst normalizeException=(error,{shallow=false}={})=>\nrecurseException(error,[],shallow);\n\nexport default normalizeException;\n\nconst recurseException=(error,parents,shallow)=>{\nif(parents.includes(error)){\nreturn\n}\n\nconst recurse=shallow?\nidentity:\n(innerError)=>recurseException(innerError,[...parents,error],shallow);\n\nconst errorA=createError(error);\nnormalizeProps(errorA,recurse);\nreturn errorA\n};\n\nconst identity=(error)=>error;\n\nconst normalizeProps=(error,recurse)=>{\nnormalizeName(error);\nnormalizeMessage(error);\nnormalizeStack(error);\nnormalizeCause(error,recurse);\nnormalizeAggregate(error,recurse);\nnormalizeDescriptors(error)\n};\n\n\n\n\n\n\nconst normalizeName=(error)=>{\nif(isDefinedString(error.name)){\nreturn\n}\n\nconst prototypeName=Object.getPrototypeOf(error).name;\nconst name=isDefinedString(prototypeName)?\nprototypeName:\nerror.constructor.name;\nsetErrorProperty(error,\"name\",name)\n};\n\n\nconst normalizeMessage=(error)=>{\nif(!isDefinedString(error.message)){\nsetErrorProperty(error,\"message\",\"\")\n}\n};\n\n\nconst normalizeStack=(error)=>{\nif(!isDefinedString(error.stack)){\nsetStack(error)\n}\n};\n\nconst isDefinedString=(value)=>typeof value===\"string\"&&value!==\"\";","// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.5\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i<alphabet.length ; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i;\n }\n }\n return baseReverseDic[alphabet][character];\n}\n\nvar LZString = {\n compressToBase64 : function (input) {\n if (input == null) return \"\";\n var res = LZString._compress(input, 6, function(a){return keyStrBase64.charAt(a);});\n switch (res.length % 4) { // To produce valid Base64\n default: // When could this happen ?\n case 0 : return res;\n case 1 : return res+\"===\";\n case 2 : return res+\"==\";\n case 3 : return res+\"=\";\n }\n },\n\n decompressFromBase64 : function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrBase64, input.charAt(index)); });\n },\n\n compressToUTF16 : function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 15, function(a){return f(a+32);}) + \" \";\n },\n\n decompressFromUTF16: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 16384, function(index) { return compressed.charCodeAt(index) - 32; });\n },\n\n //compress into uint8array (UCS-2 big endian format)\n compressToUint8Array: function (uncompressed) {\n var compressed = LZString.compress(uncompressed);\n var buf=new Uint8Array(compressed.length*2); // 2 bytes per character\n\n for (var i=0, TotalLen=compressed.length; i<TotalLen; i++) {\n var current_value = compressed.charCodeAt(i);\n buf[i*2] = current_value >>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i<TotalLen; i++) {\n buf[i]=compressed[i*2]*256+compressed[i*2+1];\n }\n\n var result = [];\n buf.forEach(function (c) {\n result.push(f(c));\n });\n return LZString.decompress(result.join(''));\n\n }\n\n },\n\n\n //compress into a string that is already URI encoded\n compressToEncodedURIComponent: function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 6, function(a){return keyStrUriSafe.charAt(a);});\n },\n\n //decompress from an output of compressToEncodedURIComponent\n decompressFromEncodedURIComponent:function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n input = input.replace(/ /g, \"+\");\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrUriSafe, input.charAt(index)); });\n },\n\n compress: function (uncompressed) {\n return LZString._compress(uncompressed, 16, function(a){return f(a);});\n },\n _compress: function (uncompressed, bitsPerChar, getCharFromInt) {\n if (uncompressed == null) return \"\";\n var i, value,\n context_dictionary= {},\n context_dictionaryToCreate= {},\n context_c=\"\",\n context_wc=\"\",\n context_w=\"\",\n context_enlargeIn= 2, // Compensate for the first entry which should not count\n context_dictSize= 3,\n context_numBits= 2,\n context_data=[],\n context_data_val=0,\n context_data_position=0,\n ii;\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii);\n if (!Object.prototype.hasOwnProperty.call(context_dictionary,context_c)) {\n context_dictionary[context_c] = context_dictSize++;\n context_dictionaryToCreate[context_c] = true;\n }\n\n context_wc = context_w + context_c;\n if (Object.prototype.hasOwnProperty.call(context_dictionary,context_wc)) {\n context_w = context_wc;\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position ==bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n} else if( typeof angular !== 'undefined' && angular != null ) {\n angular.module('LZString', [])\n .factory('LZString', function () {\n return LZString;\n });\n}\n","import { C as queueOperations, S as queueActions, _ as getAnalyticsStore, a as setDocumentCache, b as setGlobal, c as useDocumentSafe, d as useGetDocumentAsync, f as useGetDocuments, g as createAnalyticsStore, h as readPromiseState, i as addDocumentCacheEventHandler, l as useDocuments, m as addPromiseState, n as useDocumentsByIds, o as useDocument, p as DocumentCache, r as useDispatch, s as useDocumentCache, t as useDocumentById, u as useGetDocument, v as clearGlobal, w as uploadOperations, x as dispatchActions, y as getGlobal } from \"./document-by-id-DuujBqAQ.js\";\nimport { n as GetDocumentWithOperationsDocument, r as PropagationMode, t as createClient } from \"./client-D7hUM13i.js\";\nimport { t as makePHEventFunctions } from \"./make-ph-event-functions-Cr4GqOTT.js\";\nimport { A as useLoginStatus, C as RENOWN_CHAIN_ID, D as addRenownEventHandler, E as VERIFIABLE_CREDENTIAL_EIP712_TYPE, F as setLoading, I as useLoading, M as useUser, N as addLoadingEventHandler, O as setRenown, P as loading, S as ISSUER_TYPE, T as RENOWN_URL, _ as openRenown, a as RenownAuthButton, b as CREDENTIAL_TYPES, c as ChevronDownIcon, d as RenownLogo, f as SpinnerIcon, g as logout, h as login, i as initRenownCrypto, j as useRenown, k as useDid, l as CopyIcon, m as useRenownAuth, n as useRenownInit, o as RenownUserButton, p as UserIcon, r as initConnectCrypto, s as RenownLoginButton, t as Renown, u as DisconnectIcon, v as CREDENTIAL_SCHEMA_EIP712_TYPE, w as RENOWN_NETWORK_ID, x as DOMAIN_TYPE, y as CREDENTIAL_SUBJECT_TYPE } from \"./renown-s0H1puU4.js\";\nimport { n as useRelationalQuery, r as useRelationalDb, t as createProcessorQuery } from \"./relational-jwreqDwz.js\";\nimport { documentModelDocumentModelModule, logger } from \"document-model\";\nimport { baseLoadFromInput, baseSaveToFileHandle, createPresignedHeader, createZip, documentModelDocumentType, generateId, replayDocument, setName, validateInitialState, validateModules, validateStateSchemaName } from \"@powerhousedao/shared/document-model\";\nimport { DriveDocumentSchema, addFolder as addFolder$1, copyNode, driveCreateDocument, driveDocumentModelModule, generateNodesCopy, handleTargetNameCollisions, isFileNode, isFolderNode, moveNode, setAvailableOffline, setSharingType, updateNode } from \"@powerhousedao/shared/document-drive\";\nimport { allPass, conditional, constant, filter, find, forEach, forEachObj, funnel, hasAtLeast, isArray, isDefined, isIncludedIn, isNot, isStrictEqual, isString, isTruthy, last, map, mapToObj, once, pipe, prop, split, unique } from \"remeda\";\nimport { ChannelScheme, DocumentChangeType, DocumentChangeType as DocumentChangeType$1, DocumentIntegrityService, DuplicateManifestError, DuplicateModuleError, GqlRequestChannel, InMemoryQueue, IntervalPollTimer, ModuleNotFoundError, PollBehavior, PropagationMode as PropagationMode$1, REACTOR_SCHEMA, REACTOR_SCHEMA as REACTOR_SCHEMA$1, ReactorBuilder, ReactorClientBuilder, RelationalDbProcessor, SyncOperationStatus, SyncStatus, driveCollectionId, driveCollectionId as driveCollectionId$1, driveIdFromUrl, parseDriveUrl } from \"@powerhousedao/reactor\";\nimport { reactorDriveDocumentModelModule } from \"@powerhousedao/reactor-drive\";\nimport { z } from \"zod\";\nimport { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from \"react\";\nimport slug from \"slug\";\nimport normalizeException from \"normalize-exception\";\nimport * as lzString from \"lz-string\";\n//#region src/errors.ts\nvar UnsupportedDocumentTypeError = class extends Error {\n\tconstructor(documentType) {\n\t\tsuper(`Document type ${documentType} is not supported`);\n\t\tthis.name = \"UnsupportedDocumentTypeError\";\n\t}\n\tstatic isError(error) {\n\t\treturn Error.isError(error) && error.name === \"UnsupportedDocumentTypeError\";\n\t}\n};\nvar DocumentModelNotFoundError = class extends Error {\n\tdocumentType;\n\tname = \"DocumentModelNotFoundError\";\n\tconstructor(documentType) {\n\t\tsuper(`Document model module for type ${documentType} not found`);\n\t\tthis.documentType = documentType;\n\t}\n\tstatic isError(error) {\n\t\treturn Error.isError(error) && error.name === \"DocumentModelNotFoundError\";\n\t}\n};\nvar DocumentTypeMismatchError = class extends Error {\n\tconstructor(documentId, expectedType, actualType) {\n\t\tsuper(`Document ${documentId} is not of type ${expectedType}. Actual type: ${actualType}`);\n\t}\n};\nvar NoSelectedDocumentError = class extends Error {\n\tconstructor() {\n\t\tsuper(\"There is no selected document. Did you mean to call 'useSelectedDocumentSafe' instead?\");\n\t}\n};\n//#endregion\n//#region src/utils/documents.ts\nfunction isDocumentTypeSupported(documentType, supportedDocuments) {\n\tif (!supportedDocuments?.length) return true;\n\treturn supportedDocuments.some((pattern) => {\n\t\tif (pattern.endsWith(\"/*\")) {\n\t\t\tconst prefix = pattern.slice(0, -2);\n\t\t\treturn documentType.startsWith(prefix + \"/\");\n\t\t}\n\t\tif (pattern.endsWith(\"*\") && !pattern.endsWith(\"/*\")) {\n\t\t\tconst prefix = pattern.slice(0, -1);\n\t\t\treturn documentType.startsWith(prefix);\n\t\t}\n\t\treturn pattern === documentType;\n\t});\n}\n//#endregion\n//#region src/utils/user.ts\nfunction getUserPermissions() {\n\tconst user = window.ph?.renown?.user;\n\tconst allowList = window.ph?.allowList;\n\tif (!allowList) return {\n\t\tisAllowedToCreateDocuments: true,\n\t\tisAllowedToEditDocuments: true\n\t};\n\treturn {\n\t\tisAllowedToCreateDocuments: allowList.includes(user?.address ?? \"\"),\n\t\tisAllowedToEditDocuments: allowList.includes(user?.address ?? \"\")\n\t};\n}\n//#endregion\n//#region src/actions/document.ts\nconst BASE_STATE_KEYS = new Set([\"auth\"]);\nconst NON_DOMAIN_SCOPES = new Set([\"auth\", \"document\"]);\nasync function isDocumentInLocation(document, driveId, parentFolder) {\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) return { isDuplicate: false };\n\tlet drive;\n\ttry {\n\t\tdrive = await reactorClient.get(driveId);\n\t} catch {\n\t\treturn { isDuplicate: false };\n\t}\n\tconst nodeById = drive.state.global.nodes.find((node) => node.id === document.header.id);\n\tif (nodeById && nodeById.parentFolder === (parentFolder ?? null)) return {\n\t\tisDuplicate: true,\n\t\tduplicateType: \"id\",\n\t\tnodeId: nodeById.id\n\t};\n\tconst nodeByNameAndType = drive.state.global.nodes.find((node) => isFileNode(node) && node.name === document.header.name && node.documentType === document.header.documentType && node.parentFolder === (parentFolder ?? null));\n\tif (nodeByNameAndType) return {\n\t\tisDuplicate: true,\n\t\tduplicateType: \"name\",\n\t\tnodeId: nodeByNameAndType.id\n\t};\n\treturn { isDuplicate: false };\n}\nfunction getDocumentTypeIcon(document) {\n\tswitch (document.header.documentType) {\n\t\tcase \"powerhouse/document-model\": return \"document-model\";\n\t\tcase \"powerhouse/app\": return \"app\";\n\t\tcase \"powerhouse/document-editor\": return \"editor\";\n\t\tcase \"powerhouse/subgraph\": return \"subgraph\";\n\t\tcase \"powerhouse/package\": return \"package\";\n\t\tcase \"powerhouse/processor\": {\n\t\t\tconst processorType = document.state.global?.type;\n\t\t\tif (processorType === \"analytics\") return \"analytics-processor\";\n\t\t\tif (processorType === \"relational\") return \"relational-processor\";\n\t\t\tif (processorType === \"codegen\") return \"codegen-processor\";\n\t\t\treturn;\n\t\t}\n\t\tdefault: return;\n\t}\n}\nasync function downloadFile(document, fileName) {\n\ttry {\n\t\tconst data = await createZip(document);\n\t\tconst blob = new Blob([new Uint8Array(data)], { type: \"application/zip\" });\n\t\tconst link = window.document.createElement(\"a\");\n\t\tlink.style.display = \"none\";\n\t\tlink.href = URL.createObjectURL(blob);\n\t\tlink.download = fileName;\n\t\twindow.document.body.appendChild(link);\n\t\tlink.click();\n\t\twindow.document.body.removeChild(link);\n\t} catch (e) {\n\t\tlogger.error(e instanceof Error ? e.message : String(e));\n\t}\n}\nasync function getDocumentExtension(document) {\n\tconst documentType = document.header.documentType;\n\tlet rawExtension;\n\tif (documentType === documentModelDocumentType) rawExtension = document.state.global?.extension;\n\telse {\n\t\tconst reactorClient = window.ph?.reactorClient;\n\t\tif (reactorClient) {\n\t\t\tconst { results: documentModelModules } = await reactorClient.getDocumentModelModules();\n\t\t\trawExtension = documentModelModules.find((m) => m.documentModel.global.id === documentType)?.utils.fileExtension;\n\t\t}\n\t}\n\treturn (rawExtension ?? \"\").replace(/^\\.+|\\.+$/g, \"\");\n}\n/**\n* Fetches all operations for a document using cursor-based pagination.\n* The reactor client handles multi-scope cursors transparently via\n* composite cursors, so all scopes are fetched in a single paginated stream.\n*/\nasync function fetchDocumentOperations(reactorClient, document, pageSize = 100) {\n\tconst scopes = Object.keys(document.state).filter((k) => !BASE_STATE_KEYS.has(k));\n\tconst operations = {};\n\tfor (const scope of scopes) operations[scope] = [];\n\tlet cursor = \"\";\n\tdo {\n\t\tconst page = await reactorClient.getOperations(document.header.id, { scopes }, void 0, {\n\t\t\tcursor,\n\t\t\tlimit: pageSize\n\t\t});\n\t\tfor (const op of page.results) {\n\t\t\tconst scope = op.action.scope ?? \"global\";\n\t\t\tif (operations[scope]) operations[scope].push(op);\n\t\t}\n\t\tcursor = page.nextCursor ?? \"\";\n\t} while (cursor);\n\treturn operations;\n}\nfunction extractInitialState(documentScopeOps) {\n\tconst upgradeOp = documentScopeOps.find((op) => op.action.type === \"UPGRADE_DOCUMENT\");\n\tif (!upgradeOp) throw new Error(\"No UPGRADE_DOCUMENT operation found — document is invalid\");\n\tconst input = upgradeOp.action.input;\n\tconst initialState = input.initialState ?? input.state;\n\tif (!initialState) throw new Error(\"UPGRADE_DOCUMENT operation has no initialState — document is invalid\");\n\treturn initialState;\n}\nfunction filterDomainOperations(operations) {\n\treturn Object.fromEntries(Object.entries(operations).filter(([scope]) => !NON_DOMAIN_SCOPES.has(scope)));\n}\nasync function exportFile(document, suggestedName) {\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\tconst operations = await fetchDocumentOperations(reactorClient, document);\n\tconst initialState = extractInitialState(operations[\"document\"] ?? []);\n\tconst documentWithOps = {\n\t\t...document,\n\t\toperations,\n\t\tinitialState\n\t};\n\tconst extension = await getDocumentExtension(documentWithOps);\n\tconst baseName = suggestedName || documentWithOps.header.name || \"Untitled\";\n\tconst name = extension ? `${baseName}.${extension}.phd` : `${baseName}.phd`;\n\tif (!window.showSaveFilePicker) return await downloadFile(documentWithOps, name);\n\ttry {\n\t\tconst fileHandle = await window.showSaveFilePicker({ suggestedName: name });\n\t\tawait baseSaveToFileHandle(documentWithOps, fileHandle);\n\t\treturn fileHandle;\n\t} catch (e) {\n\t\tif (!(e instanceof DOMException && e.name === \"AbortError\")) throw e;\n\t}\n}\nasync function loadFile(path) {\n\tconst baseDocument = await baseLoadFromInput(path, (state) => state, { checkHashes: true });\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\tconst { results: documentModelModules } = await reactorClient.getDocumentModelModules();\n\tconst documentModelModule = documentModelModules.find((module) => module.documentModel.global.id === baseDocument.header.documentType);\n\tif (!documentModelModule) throw new DocumentModelNotFoundError(baseDocument.header.documentType);\n\treturn documentModelModule.utils.loadFromInput(path);\n}\nasync function addDocument(driveId, name, documentType, parentFolder, document, id, preferredEditor) {\n\tconst { isAllowedToCreateDocuments } = getUserPermissions();\n\tif (!isAllowedToCreateDocuments) throw new Error(\"User is not allowed to create documents\");\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\tconst documentModelModule = await reactorClient.getDocumentModelModule(documentType);\n\tconst newDocument = document ?? documentModelModule.utils.createDocument();\n\tnewDocument.header.name = name;\n\tif (preferredEditor) newDocument.header.meta = {\n\t\t...newDocument.header.meta,\n\t\tpreferredEditor\n\t};\n\tlet newDoc;\n\ttry {\n\t\tnewDoc = await reactorClient.drives.addFile(driveId, newDocument, parentFolder);\n\t} catch (e) {\n\t\tlogger.error(\"Error adding document: @error\", e);\n\t\tthrow new Error(\"There was an error adding document\", { cause: e });\n\t}\n\treturn {\n\t\tid: newDoc.header.id,\n\t\tname: newDoc.header.name,\n\t\tdocumentType,\n\t\tparentFolder: parentFolder ?? null,\n\t\tkind: \"file\"\n\t};\n}\nasync function addFile(file, driveId, name, parentFolder) {\n\tlogger.verbose(`addFile(drive: ${driveId}, name: ${name}, folder: ${parentFolder})`);\n\tconst { isAllowedToCreateDocuments } = getUserPermissions();\n\tif (!isAllowedToCreateDocuments) throw new Error(\"User is not allowed to create files\");\n\tconst document = await loadFile(file);\n\tlet duplicateId = false;\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\ttry {\n\t\tawait reactorClient.get(document.header.id);\n\t\tduplicateId = true;\n\t} catch {}\n\tconst documentId = duplicateId ? generateId() : document.header.id;\n\tconst header = createPresignedHeader(documentId, document.header.documentType);\n\theader.lastModifiedAtUtcIso = document.header.createdAtUtcIso;\n\theader.meta = document.header.meta;\n\theader.name = name || document.header.name;\n\tconst initialDocument = {\n\t\t...document,\n\t\theader,\n\t\tstate: document.initialState,\n\t\toperations: Object.keys(document.operations).reduce((acc, key) => {\n\t\t\tacc[key] = [];\n\t\t\treturn acc;\n\t\t}, {})\n\t};\n\tawait addDocument(driveId, name || document.header.name, document.header.documentType, parentFolder, initialDocument, documentId, document.header.meta?.preferredEditor);\n\tawait uploadOperations(documentId, filterDomainOperations(document.operations), queueOperations);\n}\nasync function addFileWithProgress(file, driveId, name, parentFolder, onProgress, documentTypes, resolveConflict) {\n\tlogger.verbose(`addFileWithProgress(drive: ${driveId}, name: ${name}, folder: ${parentFolder})`);\n\tconst reactor = window.ph?.reactorClient;\n\tif (!reactor) return;\n\tconst { isAllowedToCreateDocuments } = getUserPermissions();\n\tif (!isAllowedToCreateDocuments) throw new Error(\"User is not allowed to create files\");\n\ttry {\n\t\tonProgress?.({\n\t\t\tstage: \"loading\",\n\t\t\tprogress: 0\n\t\t});\n\t\tlet document;\n\t\ttry {\n\t\t\tdocument = await loadFile(file);\n\t\t} catch (loadError) {\n\t\t\tconst discoveryService = window.ph?.packageDiscoveryService;\n\t\t\tif (discoveryService && DocumentModelNotFoundError.isError(loadError)) {\n\t\t\t\tretryAfterDiscovery(discoveryService, loadError.documentType, file, driveId, name, parentFolder, onProgress, documentTypes, resolveConflict);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthrow loadError;\n\t\t}\n\t\tconst duplicateCheck = await isDocumentInLocation(document, driveId, parentFolder);\n\t\tif (duplicateCheck.isDuplicate && !resolveConflict) {\n\t\t\tonProgress?.({\n\t\t\t\tstage: \"conflict\",\n\t\t\t\tprogress: 0,\n\t\t\t\tduplicateType: duplicateCheck.duplicateType\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst documentType = getDocumentTypeIcon(document);\n\t\tif (documentType) onProgress?.({\n\t\t\tstage: \"loading\",\n\t\t\tprogress: 10,\n\t\t\tdocumentType\n\t\t});\n\t\telse onProgress?.({\n\t\t\tstage: \"loading\",\n\t\t\tprogress: 10\n\t\t});\n\t\tif (!isDocumentTypeSupported(document.header.documentType, documentTypes)) {\n\t\t\tonProgress?.({\n\t\t\t\tstage: \"unsupported-document-type\",\n\t\t\t\tprogress: 100,\n\t\t\t\terror: `Document type ${document.header.documentType} is not supported`\n\t\t\t});\n\t\t\tthrow new UnsupportedDocumentTypeError(document.header.documentType);\n\t\t}\n\t\tawait reactor.getDocumentModelModule(document.header.documentType);\n\t\tonProgress?.({\n\t\t\tstage: \"initializing\",\n\t\t\tprogress: 10\n\t\t});\n\t\tlet duplicateId = false;\n\t\ttry {\n\t\t\tawait reactor.get(document.header.id);\n\t\t\tduplicateId = true;\n\t\t} catch {}\n\t\tconst documentId = duplicateId ? generateId() : document.header.id;\n\t\tconst header = createPresignedHeader(documentId, document.header.documentType);\n\t\theader.lastModifiedAtUtcIso = document.header.createdAtUtcIso;\n\t\theader.meta = document.header.meta;\n\t\theader.name = name || document.header.name;\n\t\tconst initialDocument = {\n\t\t\t...document,\n\t\t\theader,\n\t\t\tstate: document.initialState,\n\t\t\toperations: Object.keys(document.operations).reduce((acc, key) => {\n\t\t\t\tacc[key] = [];\n\t\t\t\treturn acc;\n\t\t\t}, {})\n\t\t};\n\t\tconst fileNode = await addDocument(driveId, name || document.header.name, document.header.documentType, parentFolder, initialDocument, documentId, document.header.meta?.preferredEditor);\n\t\tif (!fileNode) throw new Error(\"There was an error adding file\");\n\t\tonProgress?.({\n\t\t\tstage: \"initializing\",\n\t\t\tprogress: 20\n\t\t});\n\t\tawait reactor.get(documentId);\n\t\tconsole.log(\"Document created, starting upload of operations\");\n\t\tawait uploadOperations(documentId, filterDomainOperations(document.operations), queueOperations, { onProgress: (uploadProgress) => {\n\t\t\tif (uploadProgress.totalOperations && uploadProgress.uploadedOperations !== void 0) {\n\t\t\t\tconst uploadPercent = uploadProgress.totalOperations > 0 ? uploadProgress.uploadedOperations / uploadProgress.totalOperations : 0;\n\t\t\t\tconst overallProgress = 20 + Math.round(uploadPercent * 80);\n\t\t\t\tonProgress?.({\n\t\t\t\t\tstage: \"uploading\",\n\t\t\t\t\tprogress: overallProgress,\n\t\t\t\t\ttotalOperations: uploadProgress.totalOperations,\n\t\t\t\t\tuploadedOperations: uploadProgress.uploadedOperations\n\t\t\t\t});\n\t\t\t}\n\t\t} });\n\t\tonProgress?.({\n\t\t\tstage: \"complete\",\n\t\t\tprogress: 100,\n\t\t\tfileNode\n\t\t});\n\t\treturn fileNode;\n\t} catch (error) {\n\t\tif (!UnsupportedDocumentTypeError.isError(error)) {\n\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\tonProgress?.({\n\t\t\t\tstage: \"failed\",\n\t\t\t\tprogress: 100,\n\t\t\t\terror: errorMessage\n\t\t\t});\n\t\t}\n\t\tthrow error;\n\t}\n}\nasync function retryAfterDiscovery(discoveryService, documentType, file, driveId, name, parentFolder, onProgress, documentTypes, resolveConflict) {\n\tif (!discoveryService) return;\n\ttry {\n\t\tawait discoveryService.load(documentType);\n\t} catch {\n\t\tonProgress?.({\n\t\t\tstage: \"unsupported-document-type\",\n\t\t\tprogress: 100,\n\t\t\terror: `Document type ${documentType} is not supported`\n\t\t});\n\t\treturn;\n\t}\n\tawait addFileWithProgress(file, driveId, name, parentFolder, onProgress, documentTypes, resolveConflict);\n}\nasync function addFolder(driveId, name, parentFolder) {\n\tconst { isAllowedToCreateDocuments } = getUserPermissions();\n\tif (!isAllowedToCreateDocuments) throw new Error(\"User is not allowed to create folders\");\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\tawait reactorClient.get(driveId);\n\tconst folderId = generateId();\n\tconst node = (await reactorClient.execute(driveId, \"main\", [addFolder$1({\n\t\tid: folderId,\n\t\tname,\n\t\tparentFolder\n\t})])).state.global.nodes.find((node) => node.id === folderId);\n\tif (!node || !isFolderNode(node)) throw new Error(\"There was an error adding folder\");\n\treturn node;\n}\nasync function deleteNode(driveId, nodeId) {\n\tconst { isAllowedToCreateDocuments } = getUserPermissions();\n\tif (!isAllowedToCreateDocuments) throw new Error(\"User is not allowed to delete documents\");\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\tawait reactorClient.drives.removeNode(driveId, nodeId);\n}\nasync function renameNode(driveId, nodeId, name) {\n\tconst { isAllowedToCreateDocuments } = getUserPermissions();\n\tif (!isAllowedToCreateDocuments) throw new Error(\"User is not allowed to rename documents\");\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\tif ((await reactorClient.execute(nodeId, \"main\", [setName({ name })])).header.name !== name) throw new Error(\"There was an error renaming the node\");\n\tconst node = (await reactorClient.execute(driveId, \"main\", [updateNode({\n\t\tid: nodeId,\n\t\tname\n\t})])).state.global.nodes.find((n) => n.id === nodeId);\n\tif (!node) throw new Error(\"There was an error renaming node in the drive\");\n\treturn node;\n}\nasync function renameDriveNode(driveId, nodeId, name) {\n\tconst { isAllowedToCreateDocuments } = getUserPermissions();\n\tif (!isAllowedToCreateDocuments) throw new Error(\"User is not allowed to rename documents\");\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\tif ((await reactorClient.execute(nodeId, \"main\", [setName({ name })])).header.name !== name) throw new Error(\"There was an error renaming the node\");\n\tawait reactorClient.execute(driveId, \"main\", [updateNode({\n\t\tid: nodeId,\n\t\tname\n\t})]);\n\treturn (await reactorClient.get(driveId)).state.global.nodes.find((n) => n.id === nodeId);\n}\nasync function moveNodeById(args) {\n\tconst { driveId, srcId, targetId } = args;\n\tif (!driveId || !srcId) return;\n\tconst { isAllowedToCreateDocuments } = getUserPermissions();\n\tif (!isAllowedToCreateDocuments) throw new Error(\"User is not allowed to move documents\");\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\tconst targetParentFolder = conditional(targetId, [isNot(isDefined), constant(void 0)], [isStrictEqual(driveId), constant(void 0)], constant(targetId));\n\tif (isStrictEqual(targetParentFolder, srcId)) return;\n\treturn await reactorClient.execute(driveId, \"main\", [moveNode({\n\t\tsrcFolder: srcId,\n\t\ttargetParentFolder\n\t})]);\n}\nasync function moveNode$1(driveId, src, target) {\n\tconst { isAllowedToCreateDocuments } = getUserPermissions();\n\tif (!isAllowedToCreateDocuments) throw new Error(\"User is not allowed to move documents\");\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\treturn await reactorClient.execute(driveId, \"main\", [moveNode({\n\t\tsrcFolder: src.id,\n\t\ttargetParentFolder: target?.id\n\t})]);\n}\nasync function _duplicateDocument(reactor, document, newId = generateId()) {\n\tconst documentModule = await reactor.getDocumentModelModule(document.header.documentType);\n\treturn replayDocument(document.initialState, document.operations, documentModule.reducer, createPresignedHeader(newId, document.header.documentType));\n}\nasync function copyNode$1(driveId, src, target) {\n\tconst reactor = window.ph?.reactorClient;\n\tif (!reactor) return;\n\tconst { isAllowedToCreateDocuments } = getUserPermissions();\n\tif (!isAllowedToCreateDocuments) throw new Error(\"User is not allowed to copy documents\");\n\tconst drive = await reactor.get(driveId);\n\tconst copyNodesInput = generateNodesCopy({\n\t\tsrcId: src.id,\n\t\ttargetParentFolder: target?.id,\n\t\ttargetName: src.name\n\t}, () => generateId(), drive.state.global.nodes);\n\tconst resolvedNamesMap = /* @__PURE__ */ new Map();\n\tfor (const copyNodeInput of copyNodesInput) {\n\t\tconst node = drive.state.global.nodes.find((n) => n.id === copyNodeInput.srcId);\n\t\tif (node) {\n\t\t\tconst resolvedName = handleTargetNameCollisions({\n\t\t\t\tnodes: drive.state.global.nodes,\n\t\t\t\tsrcName: copyNodeInput.targetName || node.name,\n\t\t\t\tsrcKind: isFileNode(node) ? \"file\" : \"folder\",\n\t\t\t\ttargetParentFolder: copyNodeInput.targetParentFolder || null\n\t\t\t});\n\t\t\tresolvedNamesMap.set(copyNodeInput.targetId, resolvedName);\n\t\t}\n\t}\n\tconst fileNodesToCopy = copyNodesInput.filter((copyNodeInput) => {\n\t\tconst node = drive.state.global.nodes.find((node) => node.id === copyNodeInput.srcId);\n\t\treturn node !== void 0 && isFileNode(node);\n\t});\n\tfor (const fileNodeToCopy of fileNodesToCopy) try {\n\t\tconst duplicatedDocument = await _duplicateDocument(reactor, await reactor.get(fileNodeToCopy.srcId), fileNodeToCopy.targetId);\n\t\tconst resolvedName = resolvedNamesMap.get(fileNodeToCopy.targetId);\n\t\tif (resolvedName) duplicatedDocument.header.name = resolvedName;\n\t\tawait reactor.drives.addFile(driveId, duplicatedDocument, target?.id);\n\t} catch (e) {\n\t\tlogger.error(`Error copying document ${fileNodeToCopy.srcId}: ${String(e)}`);\n\t}\n\treturn await queueActions(drive, copyNodesInput.map((copyNodeInput) => copyNode(copyNodeInput)));\n}\n//#endregion\n//#region src/actions/drive.ts\nconst DEFAULT_INITIAL_SYNC_TIMEOUT_MS = 3e4;\n/**\n* Resolves once a document with the given id is queryable through the\n* reactor client. Subscribes to Created events filtered by id and\n* short-circuits if the document already exists.\n*/\nasync function waitForDocumentReady(reactorClient, documentId, options) {\n\tconst timeoutMs = options?.timeoutMs ?? DEFAULT_INITIAL_SYNC_TIMEOUT_MS;\n\tconst signal = options?.signal;\n\treturn new Promise((resolve, reject) => {\n\t\tlet settled = false;\n\t\tlet unsubscribe;\n\t\tlet timer;\n\t\tlet abortHandler;\n\t\tconst settle = (action) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tunsubscribe?.();\n\t\t\tif (timer) clearTimeout(timer);\n\t\t\tif (abortHandler && signal) signal.removeEventListener(\"abort\", abortHandler);\n\t\t\taction();\n\t\t};\n\t\tunsubscribe = reactorClient.subscribe({ ids: [documentId] }, (event) => {\n\t\t\tif (event.type === DocumentChangeType$1.Created) settle(() => resolve());\n\t\t});\n\t\treactorClient.find({ ids: [documentId] }).then((existing) => {\n\t\t\tif (existing.results.length > 0) settle(() => resolve());\n\t\t}).catch(() => {});\n\t\tif (signal) {\n\t\t\tif (signal.aborted) {\n\t\t\t\tsettle(() => reject(new DOMException(\"Aborted\", \"AbortError\")));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tabortHandler = () => {\n\t\t\t\tsettle(() => reject(new DOMException(\"Aborted\", \"AbortError\")));\n\t\t\t};\n\t\t\tsignal.addEventListener(\"abort\", abortHandler);\n\t\t}\n\t\ttimer = setTimeout(() => {\n\t\t\tsettle(() => reject(/* @__PURE__ */ new Error(`Timed out after ${timeoutMs}ms waiting for document ${documentId}`)));\n\t\t}, timeoutMs);\n\t});\n}\nasync function addDrive(input, preferredEditor) {\n\tconst { isAllowedToCreateDocuments } = getUserPermissions();\n\tif (!isAllowedToCreateDocuments) throw new Error(\"User is not allowed to create drives\");\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\tconst driveDoc = driveCreateDocument({ global: {\n\t\tname: input.global.name || \"\",\n\t\ticon: input.global.icon ?? null,\n\t\tnodes: []\n\t} });\n\tif (preferredEditor) driveDoc.header.meta = { preferredEditor };\n\treturn await reactorClient.create(driveDoc);\n}\nasync function addRemoteDrive(url, driveId, options) {\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\tconst sync = window.ph?.reactorClientModule?.reactorModule?.syncModule?.syncManager;\n\tif (!sync) throw new Error(\"Sync not initialized\");\n\tconst response = await fetch(url);\n\tif (!response.ok) throw new Error(`Failed to resolve drive info from ${url}`);\n\tconst driveInfo = await response.json();\n\tconst resolvedDriveId = driveId ?? driveInfo.id;\n\tconst collectionId = driveCollectionId$1(\"main\", resolvedDriveId);\n\tif (!sync.list().find((remote) => remote.collectionId === collectionId)) {\n\t\tconst remoteName = crypto.randomUUID();\n\t\tawait sync.add(remoteName, collectionId, {\n\t\t\ttype: \"gql\",\n\t\t\tparameters: { url: driveInfo.graphqlEndpoint }\n\t\t}, void 0, options?.pollBehavior ? { pollBehavior: options.pollBehavior } : void 0);\n\t}\n\tif (options?.awaitInitialSync) await waitForDocumentReady(reactorClient, resolvedDriveId, {\n\t\ttimeoutMs: options.initialSyncTimeoutMs,\n\t\tsignal: options.signal\n\t});\n\treturn resolvedDriveId;\n}\nasync function deleteDrive(driveId) {\n\tconst { isAllowedToCreateDocuments } = getUserPermissions();\n\tif (!isAllowedToCreateDocuments) throw new Error(\"User is not allowed to delete drives\");\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\tconst sync = window.ph?.reactorClientModule?.reactorModule?.syncModule?.syncManager;\n\tif (sync) {\n\t\tconst collectionId = driveCollectionId$1(\"main\", driveId);\n\t\tconst remotes = sync.list().filter((remote) => remote.collectionId === collectionId);\n\t\tfor (const remote of remotes) await sync.remove(remote.name);\n\t}\n\tawait reactorClient.deleteDocument(driveId, PropagationMode$1.Cascade);\n}\nasync function renameDrive(driveId, name) {\n\tconst { isAllowedToCreateDocuments } = getUserPermissions();\n\tif (!isAllowedToCreateDocuments) throw new Error(\"User is not allowed to rename drives\");\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\treturn await reactorClient.rename(driveId, name);\n}\nasync function setDriveAvailableOffline(driveId, availableOffline) {\n\tconst { isAllowedToCreateDocuments } = getUserPermissions();\n\tif (!isAllowedToCreateDocuments) throw new Error(\"User is not allowed to change drive availability\");\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\treturn await reactorClient.execute(driveId, \"main\", [setAvailableOffline({ availableOffline })]);\n}\nasync function setDriveSharingType(driveId, sharingType) {\n\tconst { isAllowedToCreateDocuments } = getUserPermissions();\n\tif (!isAllowedToCreateDocuments) throw new Error(\"User is not allowed to change drive sharing type\");\n\tconst reactorClient = window.ph?.reactorClient;\n\tif (!reactorClient) throw new Error(\"ReactorClient not initialized\");\n\treturn await reactorClient.execute(driveId, \"main\", [setSharingType({ type: sharingType })]);\n}\n//#endregion\n//#region src/constants.ts\nconst DEFAULT_DRIVE_EDITOR_ID = \"powerhouse/generic-drive-explorer\";\nconst COMMON_PACKAGE_ID = \"powerhouse/common\";\n//#endregion\n//#region src/document-model.ts\nconst baseDocumentModelsMap = {\n\tDocumentModel: documentModelDocumentModelModule,\n\tDocumentDrive: driveDocumentModelModule,\n\tReactorDrive: reactorDriveDocumentModelModule\n};\nconst baseDocumentModels = Object.values(baseDocumentModelsMap);\n//#endregion\n//#region src/graphql/adapters.ts\nfunction phDocumentFromQuery(document, documentSchema) {\n\tconst phDocument = {\n\t\theader: phDocumentHeaderFromQuery(document),\n\t\tstate: phDocumentStateFromQuery(document),\n\t\tinitialState: phDocumentStateFromQuery(document),\n\t\toperations: phDocumentOperationsFromGetDocumentWithOperationsQuery(document),\n\t\tclipboard: []\n\t};\n\tif (documentSchema !== void 0) documentSchema.parse(phDocument);\n\treturn phDocument;\n}\nfunction phDocumentsFromQuery(items, documentSchema) {\n\treturn pipe(items, map((document) => phDocumentFromQuery(document, documentSchema)));\n}\nfunction phDocumentHeaderFromQuery(queryDocument) {\n\treturn {\n\t\tbranch: \"main\",\n\t\tid: queryDocument.id,\n\t\tname: queryDocument.name,\n\t\tdocumentType: queryDocument.documentType,\n\t\tcreatedAtUtcIso: queryDocument.createdAtUtcIso instanceof Date ? queryDocument.createdAtUtcIso.toUTCString() : queryDocument.createdAtUtcIso,\n\t\tlastModifiedAtUtcIso: queryDocument.lastModifiedAtUtcIso instanceof Date ? queryDocument.lastModifiedAtUtcIso.toUTCString() : queryDocument.lastModifiedAtUtcIso,\n\t\tslug: queryDocument.slug ?? \"\"\n\t};\n}\nfunction phDocumentStateFromQuery(queryDocument, documentSchema) {\n\tif (documentSchema !== void 0) return documentSchema.shape.state.parse(queryDocument.state);\n\treturn queryDocument.state;\n}\nfunction phDocumentOperationsFromGetDocumentWithOperationsQuery(queryDocument) {\n\tif (queryDocument.operations === null || queryDocument.operations === void 0) return { global: [] };\n\treturn { global: [...queryDocument.operations.items] };\n}\nfunction identifierFromMutateDocumentOperationVariables(variables) {\n\treturn z.object({ documentIdentifier: z.string() }).parse(variables).documentIdentifier;\n}\n//#endregion\n//#region src/graphql/constants.ts\nconst DEFAULT_DRIVE_ID = \"powerhouse\";\nconst DEFAULT_SWITCHBOARD_URL = \"http://localhost:4001/graphql\";\nconst graphqlEventsToSyncDrive = [\n\t\"CreateEmptyDocument\",\n\t\"CreateDocument\",\n\t\"AddChildren\",\n\t\"RemoveChildren\",\n\t\"MoveChildren\",\n\t\"DeleteDocument\",\n\t\"DeleteDocuments\"\n];\nconst graphqlDocumentEvents = [\n\t\"MutateDocument\",\n\t\"MutateDocumentAsync\",\n\t\"DeleteDocument\"\n];\nconst graphqlDocumentsEvents = [\"DeleteDocuments\"];\n//#endregion\n//#region src/graphql/fetchers.ts\nasync function reactorGraphqlFetchDocument(identifier, documentSchema) {\n\tconst client = window.ph?.reactorGraphQLClient;\n\tif (!client) throw new Error(\"Please call `useInitReactorGraphqlClient` to use its functions\");\n\ttry {\n\t\tconst document = (await client.GetDocument({ identifier })).document?.document;\n\t\tif (!document) return void 0;\n\t\treturn phDocumentFromQuery(document, documentSchema);\n\t} catch (error) {\n\t\treturn;\n\t}\n}\nasync function reactorGraphqlBatchFetchDocuments(identifiers) {\n\tif (!window.ph?.reactorGraphQLClient) throw new Error(\"Please call `useInitReactorGraphqlClient` to use its functions\");\n\tconst promises = map(identifiers, (identifier) => reactorGraphqlFetchDocument(identifier));\n\treturn await Promise.all(promises);\n}\n//#endregion\n//#region src/graphql/batch.ts\n/**\n* A reference implementation for an async batching utility function built on\n* top of the `funnel` general purpose execution utility function. It will\n* accumulate all params passed to an async `call` method within the defined\n* burst duration and then use an async executor to process them in one\n* invocation. It then extracts an individual result for each call which is\n* used to resolve the original call.\n*\n* This allows synchronizing multiple async calls while keeping each call site\n* isolated from the rest (for example, as react components).\n*\n* This reference implementation can be copied into your project as-is, or you\n* can use it as the basis for a more complex implementation with additional\n* features.\n*\n* @param callback - The main function that takes a batch and returns an\n* aggregated response. The typing for the it's parameters will derive the\n* typing for the extractor and the `call` method.\n* @param extractor - A function that takes the aggregated response and extracts\n* from it the result for each individual call. The function is called with both\n* the index in the batch, and the params passed to the `call` method. This\n* allows handling APIs that return batch results as both objects and arrays.\n* @param maxBurstDurationMs - The period of time where the batcher would\n* collect params before triggering the executor. When set to 0 the batcher\n* does not incur any additional delays to the execution and would trigger at\n* the next tick, just like a regular async function would. This is also the\n* default value.\n* @returns A Funnel object with the `call` method augmented to support async\n* response.\n*/\nfunction batch(callback, extractor, maxBurstDurationMs = 0) {\n\tconst batchFunnel = funnel((requests) => {\n\t\tcallback(requests.map(({ params }) => params)).then((response) => {\n\t\t\tfor (const [index, { params, promiseCallbacks: [resolve, reject] }] of requests.entries()) try {\n\t\t\t\tresolve(extractor(response, index, ...params));\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\t\t}).catch((error) => {\n\t\t\tfor (const { promiseCallbacks: [, reject] } of requests) reject(error);\n\t\t});\n\t}, {\n\t\treducer: (requests, request) => [...requests ?? [], request],\n\t\tmaxBurstDurationMs,\n\t\ttriggerAt: \"end\"\n\t});\n\treturn {\n\t\t...batchFunnel,\n\t\tcall: (...params) => new Promise((...promiseCallbacks) => {\n\t\t\tbatchFunnel.call({\n\t\t\t\tpromiseCallbacks,\n\t\t\t\tparams\n\t\t\t});\n\t\t})\n\t};\n}\n//#endregion\n//#region src/graphql/document-fetcher.ts\nfunction makeDocumentsById(documents = []) {\n\treturn pipe(documents, filter(isTruthy), mapToObj((document) => [document.header.id, document]));\n}\nvar DocumentFetcher = class {\n\tbatchGetDocuments;\n\tconstructor() {\n\t\tthis.batchGetDocuments = batch(async (requests) => {\n\t\t\treturn makeDocumentsById(await reactorGraphqlBatchFetchDocuments(unique(map(requests, ([id]) => id))));\n\t\t}, (documentsById, _, id) => {\n\t\t\treturn prop(documentsById, id);\n\t\t});\n\t}\n\tget(id) {\n\t\treturn this.batchGetDocuments.call(id);\n\t}\n\tgetBatch(ids) {\n\t\treturn Promise.all(map(ids, (id) => this.get(id)));\n\t}\n};\n//#endregion\n//#region src/graphql/graphql-client-document-cache.ts\nvar GraphQLClientDocumentCache = class {\n\tfetcher;\n\tdocuments = /* @__PURE__ */ new Map();\n\tbatchPromises = /* @__PURE__ */ new Map();\n\tlisteners = /* @__PURE__ */ new Map();\n\tconstructor() {\n\t\tthis.fetcher = new DocumentFetcher();\n\t\twindow.addEventListener(\"MutateDocument\", (event) => {\n\t\t\tthis.handleDocumentMutated(event.detail.identifier).catch(console.error);\n\t\t});\n\t\twindow.addEventListener(\"MutateDocumentAsync\", (event) => {\n\t\t\tthis.handleDocumentMutated(event.detail.identifier).catch(console.error);\n\t\t});\n\t}\n\tget(id, refetch) {\n\t\tconst current = this.documents.get(id);\n\t\tif (current) {\n\t\t\tif (current.status === \"pending\") return current;\n\t\t\tif (!refetch) return current;\n\t\t}\n\t\tconst promise = addPromiseState(this.fetcher.get(id).then((document) => {\n\t\t\tthis.invalidateBatchesContaining(id);\n\t\t\treturn document;\n\t\t}));\n\t\tthis.documents.set(id, promise);\n\t\treturn promise;\n\t}\n\tgetBatch(ids) {\n\t\tconst key = ids.join(\",\");\n\t\tconst cached = this.batchPromises.get(key);\n\t\tconst currentPromises = ids.map((id) => this.get(id));\n\t\tif (cached) {\n\t\t\tif (currentPromises.every((promise, index) => promise === cached.promises[index])) return cached.promise;\n\t\t}\n\t\tconst states = currentPromises.map((promise) => readPromiseState(promise));\n\t\tif (states.every((state) => state.status !== \"pending\")) {\n\t\t\tconst values = states.filter((state) => state.status === \"fulfilled\").map((state) => state.value);\n\t\t\tconst batchPromise = Promise.resolve(values);\n\t\t\tbatchPromise.status = \"fulfilled\";\n\t\t\tbatchPromise.value = values;\n\t\t\tthis.batchPromises.set(key, {\n\t\t\t\tpromises: currentPromises,\n\t\t\t\tpromise: batchPromise\n\t\t\t});\n\t\t\treturn batchPromise;\n\t\t}\n\t\tconst batchPromise = addPromiseState(Promise.allSettled(currentPromises).then((results) => {\n\t\t\tconst documents = [];\n\t\t\tfor (const result of results) if (result.status === \"fulfilled\") documents.push(result.value);\n\t\t\telse console.warn(\"[GraphQLClientDocumentCache] Skipped unavailable document:\", result.reason);\n\t\t\treturn documents;\n\t\t}));\n\t\tthis.batchPromises.set(key, {\n\t\t\tpromises: currentPromises,\n\t\t\tpromise: batchPromise\n\t\t});\n\t\treturn batchPromise;\n\t}\n\tinvalidateBatchesContaining(documentId) {\n\t\tfor (const key of this.batchPromises.keys()) if (key.split(\",\").includes(documentId)) this.batchPromises.delete(key);\n\t}\n\tsubscribe(id, callback) {\n\t\tconst ids = Array.isArray(id) ? id : [id];\n\t\tfor (const documentId of ids) {\n\t\t\tconst listeners = this.listeners.get(documentId) ?? [];\n\t\t\tthis.listeners.set(documentId, [...listeners, callback]);\n\t\t}\n\t\treturn () => {\n\t\t\tfor (const documentId of ids) {\n\t\t\t\tconst listeners = this.listeners.get(documentId) ?? [];\n\t\t\t\tthis.listeners.set(documentId, listeners.filter((listener) => listener !== callback));\n\t\t\t}\n\t\t};\n\t}\n\tnotify(id) {\n\t\tconst listeners = this.listeners.get(id) ?? [];\n\t\tfor (const listener of listeners) listener();\n\t}\n\tasync handleDocumentMutated(id) {\n\t\tthis.invalidateBatchesContaining(id);\n\t\tawait this.get(id);\n\t\tthis.notify(id);\n\t}\n\thandleDocumentDeleted(id) {\n\t\tthis.documents.delete(id);\n\t\tthis.invalidateBatchesContaining(id);\n\t\tthis.notify(id);\n\t}\n\thandleDocumentsDeleted(ids) {\n\t\tforEach(ids, (id) => this.handleDocumentDeleted(id));\n\t}\n};\n//#endregion\n//#region src/graphql/mutators.ts\nasync function reactorGraphqlCreateDocument(document, parentIdentifier = DEFAULT_DRIVE_ID) {\n\tconst client = window.ph?.reactorGraphQLClient;\n\tif (!client) throw new Error(\"Please call `useInitReactorGraphqlClient` to use its functions\");\n\treturn await client.CreateDocument({\n\t\tdocument,\n\t\tparentIdentifier\n\t});\n}\nasync function reactorGraphqlDeleteDocument(identifier) {\n\tconst client = window.ph?.reactorGraphQLClient;\n\tif (!client) throw new Error(\"Please call `useInitReactorGraphqlClient` to use its functions\");\n\treturn await client.DeleteDocument({ identifier });\n}\nasync function reactorGraphqlDeleteDocuments(identifiers) {\n\tconst client = window.ph?.reactorGraphQLClient;\n\tif (!client) throw new Error(\"Please call `useInitReactorGraphqlClient` to use its functions\");\n\treturn await client.DeleteDocuments({ identifiers });\n}\nasync function reactorGraphqlMutateDocument(documentIdentifier, ...actions) {\n\tconst client = window.ph?.reactorGraphQLClient;\n\tif (!client) throw new Error(\"Please call `useInitReactorGraphqlClient` to use its functions\");\n\treturn await client.MutateDocument({\n\t\tdocumentIdentifier,\n\t\tactions\n\t});\n}\n//#endregion\n//#region src/hooks/config/editor.ts\nconst isExternalControlsEnabledEventFunctions = makePHEventFunctions(\"isExternalControlsEnabled\");\n/** Sets whether external controls are enabled for a given editor. */\nconst setIsExternalControlsEnabled = isExternalControlsEnabledEventFunctions.setValue;\n/** Gets whether external controls are enabled for a given editor. */\nconst useIsExternalControlsEnabled = isExternalControlsEnabledEventFunctions.useValue;\n/** Adds an event handler for when the external controls enabled state changes. */\nconst addIsExternalControlsEnabledEventHandler = isExternalControlsEnabledEventFunctions.addEventHandler;\nconst isDragAndDropEnabledEventFunctions = makePHEventFunctions(\"isDragAndDropEnabled\");\n/** Sets whether drag and drop is enabled for a given app. */\nconst setIsDragAndDropEnabled = isDragAndDropEnabledEventFunctions.setValue;\n/** Gets whether drag and drop is enabled for a given app. */\nconst useIsDragAndDropEnabled = isDragAndDropEnabledEventFunctions.useValue;\n/** Adds an event handler for when the drag and drop enabled state changes. */\nconst addIsDragAndDropEnabledEventHandler = isDragAndDropEnabledEventFunctions.addEventHandler;\nconst allowedDocumentTypesEventFunctions = makePHEventFunctions(\"allowedDocumentTypes\");\n/** Sets the allowed document types for a given app. */\nconst setAllowedDocumentTypes = allowedDocumentTypesEventFunctions.setValue;\n/** Defines the document types a drive supports.\n*\n* Defaults to all of the document types registered in the reactor.\n*/\nfunction useAllowedDocumentTypes() {\n\treturn allowedDocumentTypesEventFunctions.useValue();\n}\n/** Adds an event handler for when the allowed document types for a given app changes. */\nconst addAllowedDocumentTypesEventHandler = allowedDocumentTypesEventFunctions.addEventHandler;\nconst phAppConfigSetters = {\n\tallowedDocumentTypes: setAllowedDocumentTypes,\n\tisDragAndDropEnabled: setIsDragAndDropEnabled\n};\nconst phDocumentEditorConfigSetters = { isExternalControlsEnabled: setIsExternalControlsEnabled };\nconst phAppConfigHooks = {\n\tallowedDocumentTypes: useAllowedDocumentTypes,\n\tisDragAndDropEnabled: useIsDragAndDropEnabled\n};\nconst phDocumentEditorConfigHooks = { isExternalControlsEnabled: useIsExternalControlsEnabled };\n//#endregion\n//#region src/hooks/config/connect.ts\nconst { useValue: useRouterBasename, setValue: setRouterBasename, addEventHandler: addRouterBasenameEventHandler } = makePHEventFunctions(\"routerBasename\");\nconst { useValue: useVersion, setValue: setVersion, addEventHandler: addVersionEventHandler } = makePHEventFunctions(\"version\");\nconst { useValue: useRequiresHardRefresh, setValue: setRequiresHardRefresh, addEventHandler: addRequiresHardRefreshEventHandler } = makePHEventFunctions(\"requiresHardRefresh\");\nconst { useValue: useWarnOutdatedApp, setValue: setWarnOutdatedApp, addEventHandler: addWarnOutdatedAppEventHandler } = makePHEventFunctions(\"warnOutdatedApp\");\nconst { useValue: useStudioMode, setValue: setStudioMode, addEventHandler: addStudioModeEventHandler } = makePHEventFunctions(\"studioMode\");\nconst { useValue: useBasePath, setValue: setBasePath, addEventHandler: addBasePathEventHandler } = makePHEventFunctions(\"basePath\");\nconst { useValue: useVersionCheckInterval, setValue: setVersionCheckInterval, addEventHandler: addVersionCheckIntervalEventHandler } = makePHEventFunctions(\"versionCheckInterval\");\nconst { useValue: useCliVersion, setValue: setCliVersion, addEventHandler: addCliVersionEventHandler } = makePHEventFunctions(\"cliVersion\");\nconst { useValue: useFileUploadOperationsChunkSize, setValue: setFileUploadOperationsChunkSize, addEventHandler: addFileUploadOperationsChunkSizeEventHandler } = makePHEventFunctions(\"fileUploadOperationsChunkSize\");\nconst { useValue: useIsDocumentModelSelectionSettingsEnabled, setValue: setIsDocumentModelSelectionSettingsEnabled, addEventHandler: addIsDocumentModelSelectionSettingsEnabledEventHandler } = makePHEventFunctions(\"isDocumentModelSelectionSettingsEnabled\");\nconst { useValue: useGaTrackingId, setValue: setGaTrackingId, addEventHandler: addGaTrackingIdEventHandler } = makePHEventFunctions(\"gaTrackingId\");\nconst { useValue: useDefaultDrivesUrl, setValue: setDefaultDrivesUrl, addEventHandler: addDefaultDrivesUrlEventHandler } = makePHEventFunctions(\"defaultDrivesUrl\");\nconst { useValue: useDrivesPreserveStrategy, setValue: setDrivesPreserveStrategy, addEventHandler: addDrivesPreserveStrategyEventHandler } = makePHEventFunctions(\"drivesPreserveStrategy\");\nconst { useValue: useIsLocalDrivesEnabled, setValue: setIsLocalDrivesEnabled, addEventHandler: addIsLocalDrivesEnabledEventHandler } = makePHEventFunctions(\"isLocalDrivesEnabled\");\nconst { useValue: useIsAddDriveEnabled, setValue: setIsAddDriveEnabled, addEventHandler: addIsAddDriveEnabledEventHandler } = makePHEventFunctions(\"isAddDriveEnabled\");\nconst { useValue: useIsPublicDrivesEnabled, setValue: setIsPublicDrivesEnabled, addEventHandler: addIsPublicDrivesEnabledEventHandler } = makePHEventFunctions(\"isPublicDrivesEnabled\");\nconst { useValue: useIsAddPublicDrivesEnabled, setValue: setIsAddPublicDrivesEnabled, addEventHandler: addIsAddPublicDrivesEnabledEventHandler } = makePHEventFunctions(\"isAddPublicDrivesEnabled\");\nconst { useValue: useIsDeletePublicDrivesEnabled, setValue: setIsDeletePublicDrivesEnabled, addEventHandler: addIsDeletePublicDrivesEnabledEventHandler } = makePHEventFunctions(\"isDeletePublicDrivesEnabled\");\nconst { useValue: useIsCloudDrivesEnabled, setValue: setIsCloudDrivesEnabled, addEventHandler: addIsCloudDrivesEnabledEventHandler } = makePHEventFunctions(\"isCloudDrivesEnabled\");\nconst { useValue: useIsAddCloudDrivesEnabled, setValue: setIsAddCloudDrivesEnabled, addEventHandler: addIsAddCloudDrivesEnabledEventHandler } = makePHEventFunctions(\"isAddCloudDrivesEnabled\");\nconst { useValue: useIsDeleteCloudDrivesEnabled, setValue: setIsDeleteCloudDrivesEnabled, addEventHandler: addIsDeleteCloudDrivesEnabledEventHandler } = makePHEventFunctions(\"isDeleteCloudDrivesEnabled\");\nconst { useValue: useLocalDrivesEnabled, setValue: setLocalDrivesEnabled, addEventHandler: addLocalDrivesEnabledEventHandler } = makePHEventFunctions(\"isLocalDrivesEnabled\");\nconst { useValue: useIsAddLocalDrivesEnabled, setValue: setIsAddLocalDrivesEnabled, addEventHandler: addIsAddLocalDrivesEnabledEventHandler } = makePHEventFunctions(\"isAddLocalDrivesEnabled\");\nconst { useValue: useIsDeleteLocalDrivesEnabled, setValue: setIsDeleteLocalDrivesEnabled, addEventHandler: addIsDeleteLocalDrivesEnabledEventHandler } = makePHEventFunctions(\"isDeleteLocalDrivesEnabled\");\nconst { useValue: useIsEditorDebugModeEnabled, setValue: setIsEditorDebugModeEnabled, addEventHandler: addIsEditorDebugModeEnabledEventHandler } = makePHEventFunctions(\"isEditorDebugModeEnabled\");\nconst { useValue: useIsEditorReadModeEnabled, setValue: setIsEditorReadModeEnabled, addEventHandler: addIsEditorReadModeEnabledEventHandler } = makePHEventFunctions(\"isEditorReadModeEnabled\");\nconst { useValue: useIsAnalyticsDatabaseWorkerEnabled, setValue: setIsAnalyticsDatabaseWorkerEnabled, addEventHandler: addIsAnalyticsDatabaseWorkerEnabledEventHandler } = makePHEventFunctions(\"isAnalyticsDatabaseWorkerEnabled\");\nconst { useValue: useIsDiffAnalyticsEnabled, setValue: setIsDiffAnalyticsEnabled, addEventHandler: addIsDiffAnalyticsEnabledEventHandler } = makePHEventFunctions(\"isDiffAnalyticsEnabled\");\nconst { useValue: useIsDriveAnalyticsEnabled, setValue: setIsDriveAnalyticsEnabled, addEventHandler: addIsDriveAnalyticsEnabledEventHandler } = makePHEventFunctions(\"isDriveAnalyticsEnabled\");\nconst { useValue: useRenownUrl, setValue: setRenownUrl, addEventHandler: addRenownUrlEventHandler } = makePHEventFunctions(\"renownUrl\");\nconst { useValue: useRenownNetworkId, setValue: setRenownNetworkId, addEventHandler: addRenownNetworkIdEventHandler } = makePHEventFunctions(\"renownNetworkId\");\nconst { useValue: useRenownChainId, setValue: setRenownChainId, addEventHandler: addRenownChainIdEventHandler } = makePHEventFunctions(\"renownChainId\");\nconst { useValue: useSentryRelease, setValue: setSentryRelease, addEventHandler: addSentryReleaseEventHandler } = makePHEventFunctions(\"sentryRelease\");\nconst { useValue: useSentryDsn, setValue: setSentryDsn, addEventHandler: addSentryDsnEventHandler } = makePHEventFunctions(\"sentryDsn\");\nconst { useValue: useSentryEnv, setValue: setSentryEnv, addEventHandler: addSentryEnvEventHandler } = makePHEventFunctions(\"sentryEnv\");\nconst { useValue: useIsSentryTracingEnabled, setValue: setIsSentryTracingEnabled, addEventHandler: addIsSentryTracingEnabledEventHandler } = makePHEventFunctions(\"isSentryTracingEnabled\");\nconst { useValue: useIsExternalProcessorsEnabled, setValue: setIsExternalProcessorsEnabled, addEventHandler: addIsExternalProcessorsEnabledEventHandler } = makePHEventFunctions(\"isExternalProcessorsEnabled\");\nconst { useValue: useIsExternalPackagesEnabled, setValue: setIsExternalPackagesEnabled, addEventHandler: addIsExternalPackagesEnabledEventHandler } = makePHEventFunctions(\"isExternalPackagesEnabled\");\nconst enabledEditorsEventFunctions = makePHEventFunctions(\"enabledEditors\");\n/** Sets the enabled editors for Connect. */\nconst setEnabledEditors = enabledEditorsEventFunctions.setValue;\n/** Gets the enabled editors for Connect. */\nconst useEnabledEditors = enabledEditorsEventFunctions.useValue;\n/** Adds an event handler for when the enabled editors for Connect changes. */\nconst addEnabledEditorsEventHandler = enabledEditorsEventFunctions.addEventHandler;\nconst disabledEditorsEventFunctions = makePHEventFunctions(\"disabledEditors\");\n/** Sets the disabled editors for Connect. */\nconst setDisabledEditors = disabledEditorsEventFunctions.setValue;\n/** Gets the disabled editors for Connect. */\nconst useDisabledEditors = disabledEditorsEventFunctions.useValue;\n/** Adds an event handler for when the disabled editors for Connect changes. */\nconst addDisabledEditorsEventHandler = disabledEditorsEventFunctions.addEventHandler;\nconst isRelationalProcessorsEnabled = makePHEventFunctions(\"isRelationalProcessorsEnabled\");\n/** Sets the isRelationalProcessorsEnabled for Connect. */\nconst setIsRelationalProcessorsEnabled = isRelationalProcessorsEnabled.setValue;\n/** Gets the isRelationalProcessorsEnabled for Connect. */\nconst useIsRelationalProcessorsEnabled = isRelationalProcessorsEnabled.useValue;\n/** Adds an event handler for when the isRelationalProcessorsEnabled for Connect changes. */\nconst addIsRelationalProcessorsEnabledEventHandler = isRelationalProcessorsEnabled.addEventHandler;\nconst isExternalRelationalProcessorsEnabled = makePHEventFunctions(\"isExternalRelationalProcessorsEnabled\");\n/** Sets the isExternalRelationalProcessorsEnabled for Connect. */\nconst setIsExternalRelationalProcessorsEnabled = isExternalRelationalProcessorsEnabled.setValue;\n/** Gets the isExternalRelationalProcessorsEnabled for Connect. */\nconst useIsExternalRelationalProcessorsEnabled = isExternalRelationalProcessorsEnabled.useValue;\n/** Adds an event handler for when the isExternalRelationalProcessorsEnabled for Connect changes. */\nconst addIsExternalRelationalProcessorsEnabledEventHandler = isExternalRelationalProcessorsEnabled.addEventHandler;\nconst isAnalyticsEnabledEventFunctions = makePHEventFunctions(\"isAnalyticsEnabled\");\n/** Sets the isAnalyticsEnabled for Connect. */\nconst setIsAnalyticsEnabled = isAnalyticsEnabledEventFunctions.setValue;\n/** Gets the isAnalyticsEnabled for Connect. */\nconst useIsAnalyticsEnabled = isAnalyticsEnabledEventFunctions.useValue;\n/** Adds an event handler for when the isAnalyticsEnabled for Connect changes. */\nconst addIsAnalyticsEnabledEventHandler = isAnalyticsEnabledEventFunctions.addEventHandler;\nconst isAnalyticsExternalProcessorsEnabled = makePHEventFunctions(\"isAnalyticsExternalProcessorsEnabled\");\n/** Sets the isAnalyticsExternalProcessorsEnabled for Connect. */\nconst setIsAnalyticsExternalProcessorsEnabled = isAnalyticsExternalProcessorsEnabled.setValue;\n/** Gets the isAnalyticsExternalProcessorsEnabled for Connect. */\nconst useIsAnalyticsExternalProcessorsEnabled = isAnalyticsExternalProcessorsEnabled.useValue;\n/** Adds an event handler for when the isAnalyticsExternalProcessorsEnabled for Connect changes. */\nconst addIsAnalyticsExternalProcessorsEnabledEventHandler = isAnalyticsExternalProcessorsEnabled.addEventHandler;\nconst analyticsDatabaseNameEventFunctions = makePHEventFunctions(\"analyticsDatabaseName\");\n/** Sets the analytics database name for Connect. */\nconst setAnalyticsDatabaseName = analyticsDatabaseNameEventFunctions.setValue;\n/** Gets the analytics database name for Connect. */\nconst useAnalyticsDatabaseName = analyticsDatabaseNameEventFunctions.useValue;\n/** Adds an event handler for when the analytics database name for Connect changes. */\nconst addAnalyticsDatabaseNameEventHandler = analyticsDatabaseNameEventFunctions.addEventHandler;\nconst logLevelEventFunctions = makePHEventFunctions(\"logLevel\");\n/** Sets the log level for Connect. */\nconst setLogLevel = logLevelEventFunctions.setValue;\n/** Gets the log level for Connect. */\nconst useLogLevel = logLevelEventFunctions.useValue;\n/** Adds an event handler for when the log level for Connect changes. */\nconst addLogLevelEventHandler = logLevelEventFunctions.addEventHandler;\nconst allowListEventFunctions = makePHEventFunctions(\"allowList\");\n/** Sets the allow list for Connect. */\nconst setAllowList = allowListEventFunctions.setValue;\n/** Gets the allow list for Connect. */\nconst useAllowList = allowListEventFunctions.useValue;\n/** Adds an event handler for when the allow list for Connect changes. */\nconst addAllowListEventHandler = allowListEventFunctions.addEventHandler;\nconst nonUserConfigSetters = {\n\trouterBasename: setRouterBasename,\n\tversion: setVersion,\n\trequiresHardRefresh: setRequiresHardRefresh,\n\twarnOutdatedApp: setWarnOutdatedApp,\n\tstudioMode: setStudioMode,\n\tbasePath: setBasePath,\n\tversionCheckInterval: setVersionCheckInterval,\n\tcliVersion: setCliVersion,\n\tfileUploadOperationsChunkSize: setFileUploadOperationsChunkSize,\n\tisDocumentModelSelectionSettingsEnabled: setIsDocumentModelSelectionSettingsEnabled,\n\tgaTrackingId: setGaTrackingId,\n\tdefaultDrivesUrl: setDefaultDrivesUrl,\n\tdrivesPreserveStrategy: setDrivesPreserveStrategy,\n\tisLocalDrivesEnabled: setIsLocalDrivesEnabled,\n\tisAddDriveEnabled: setIsAddDriveEnabled,\n\tisPublicDrivesEnabled: setIsPublicDrivesEnabled,\n\tisAddPublicDrivesEnabled: setIsAddPublicDrivesEnabled,\n\tisDeletePublicDrivesEnabled: setIsDeletePublicDrivesEnabled,\n\tisCloudDrivesEnabled: setIsCloudDrivesEnabled,\n\tisAddCloudDrivesEnabled: setIsAddCloudDrivesEnabled,\n\tisDeleteCloudDrivesEnabled: setIsDeleteCloudDrivesEnabled,\n\tisAddLocalDrivesEnabled: setIsAddLocalDrivesEnabled,\n\tisDeleteLocalDrivesEnabled: setIsDeleteLocalDrivesEnabled,\n\tisEditorDebugModeEnabled: setIsEditorDebugModeEnabled,\n\tisEditorReadModeEnabled: setIsEditorReadModeEnabled,\n\tisRelationalProcessorsEnabled: setIsRelationalProcessorsEnabled,\n\tisExternalRelationalProcessorsEnabled: setIsExternalRelationalProcessorsEnabled,\n\tisAnalyticsEnabled: setIsAnalyticsEnabled,\n\tanalyticsDatabaseName: setAnalyticsDatabaseName,\n\tisAnalyticsExternalProcessorsEnabled: setIsAnalyticsExternalProcessorsEnabled,\n\tisAnalyticsDatabaseWorkerEnabled: setIsAnalyticsDatabaseWorkerEnabled,\n\tisDiffAnalyticsEnabled: setIsDiffAnalyticsEnabled,\n\tisDriveAnalyticsEnabled: setIsDriveAnalyticsEnabled,\n\trenownUrl: setRenownUrl,\n\trenownNetworkId: setRenownNetworkId,\n\trenownChainId: setRenownChainId,\n\tsentryRelease: setSentryRelease,\n\tsentryDsn: setSentryDsn,\n\tsentryEnv: setSentryEnv,\n\tisSentryTracingEnabled: setIsSentryTracingEnabled,\n\tisExternalProcessorsEnabled: setIsExternalProcessorsEnabled,\n\tisExternalPackagesEnabled: setIsExternalPackagesEnabled,\n\tallowList: setAllowList,\n\tlogLevel: setLogLevel,\n\tdisabledEditors: setDisabledEditors,\n\tenabledEditors: setEnabledEditors\n};\nconst phGlobalConfigSetters = {\n\t...phAppConfigSetters,\n\t...phDocumentEditorConfigSetters,\n\t...nonUserConfigSetters\n};\nconst nonUserConfigHooks = {\n\trouterBasename: useRouterBasename,\n\tversion: useVersion,\n\trequiresHardRefresh: useRequiresHardRefresh,\n\twarnOutdatedApp: useWarnOutdatedApp,\n\tstudioMode: useStudioMode,\n\tbasePath: useBasePath,\n\tversionCheckInterval: useVersionCheckInterval,\n\tcliVersion: useCliVersion,\n\tfileUploadOperationsChunkSize: useFileUploadOperationsChunkSize,\n\tisDocumentModelSelectionSettingsEnabled: useIsDocumentModelSelectionSettingsEnabled,\n\tgaTrackingId: useGaTrackingId,\n\tdefaultDrivesUrl: useDefaultDrivesUrl,\n\tdrivesPreserveStrategy: useDrivesPreserveStrategy,\n\tisAddDriveEnabled: useIsAddDriveEnabled,\n\tisPublicDrivesEnabled: useIsPublicDrivesEnabled,\n\tisAddPublicDrivesEnabled: useIsAddPublicDrivesEnabled,\n\tisDeletePublicDrivesEnabled: useIsDeletePublicDrivesEnabled,\n\tisCloudDrivesEnabled: useIsCloudDrivesEnabled,\n\tisAddCloudDrivesEnabled: useIsAddCloudDrivesEnabled,\n\tisDeleteCloudDrivesEnabled: useIsDeleteCloudDrivesEnabled,\n\tisLocalDrivesEnabled: useIsLocalDrivesEnabled,\n\tisAddLocalDrivesEnabled: useIsAddLocalDrivesEnabled,\n\tisDeleteLocalDrivesEnabled: useIsDeleteLocalDrivesEnabled,\n\tisEditorDebugModeEnabled: useIsEditorDebugModeEnabled,\n\tisEditorReadModeEnabled: useIsEditorReadModeEnabled,\n\tisAnalyticsDatabaseWorkerEnabled: useIsAnalyticsDatabaseWorkerEnabled,\n\tisDiffAnalyticsEnabled: useIsDiffAnalyticsEnabled,\n\tisDriveAnalyticsEnabled: useIsDriveAnalyticsEnabled,\n\trenownUrl: useRenownUrl,\n\trenownNetworkId: useRenownNetworkId,\n\trenownChainId: useRenownChainId,\n\tsentryRelease: useSentryRelease,\n\tsentryDsn: useSentryDsn,\n\tsentryEnv: useSentryEnv,\n\tisSentryTracingEnabled: useIsSentryTracingEnabled,\n\tisExternalProcessorsEnabled: useIsExternalProcessorsEnabled,\n\tisExternalPackagesEnabled: useIsExternalPackagesEnabled,\n\tallowList: useAllowList,\n\tisAnalyticsEnabled: useIsAnalyticsEnabled,\n\tisAnalyticsExternalProcessorsEnabled: useIsAnalyticsExternalProcessorsEnabled,\n\tisRelationalProcessorsEnabled: useIsRelationalProcessorsEnabled,\n\tisExternalRelationalProcessorsEnabled: useIsExternalRelationalProcessorsEnabled,\n\tanalyticsDatabaseName: useAnalyticsDatabaseName,\n\tlogLevel: useLogLevel,\n\tdisabledEditors: useDisabledEditors,\n\tenabledEditors: useEnabledEditors\n};\nconst phGlobalConfigHooks = {\n\t...phAppConfigHooks,\n\t...phDocumentEditorConfigHooks,\n\t...nonUserConfigHooks\n};\n//#endregion\n//#region src/hooks/features.ts\nconst featuresEventFunctions = makePHEventFunctions(\"features\");\nconst useFeatures = featuresEventFunctions.useValue;\nconst setFeatures = featuresEventFunctions.setValue;\nconst addFeaturesEventHandler = featuresEventFunctions.addEventHandler;\n//#endregion\n//#region src/utils/url.ts\nfunction resolveUrlPathname(path) {\n\treturn new URL(path.replace(/^\\/+/, \"\"), window.location.origin + (window.ph?.basePath ?? \"/\")).pathname;\n}\n/** Returns the current path without the base path */\nfunction getPathWithoutBase(path) {\n\tconst basePath = window.ph?.basePath ?? \"/\";\n\treturn path.replace(basePath, basePath.endsWith(\"/\") ? \"/\" : \"\");\n}\n/** Makes a URL component for a drive. */\nfunction makeDriveUrlComponent(drive) {\n\tif (!drive) return \"\";\n\treturn `/d/${slug(drive.header.slug)}`;\n}\n/** Makes a URL component for a node. */\nfunction makeNodeSlug(node) {\n\tif (!node) return \"\";\n\tconst nodeName = node.name;\n\tif (!nodeName) return slug(node.id);\n\treturn slug(`${nodeName}-${node.id}`);\n}\n/** Extracts the node slug from a path.\n*\n* The path is expected to be in the format `/d/<drive-slug>/<node-slug>`.\n*/\nfunction extractNodeSlugFromPath(path) {\n\tconst currentPath = getPathWithoutBase(path);\n\treturn /^\\/d\\/[^/]+\\/([^/]+)$/.exec(currentPath)?.[1];\n}\n/** Finds a UUID in a string, used for extracting node ids from node slugs in the URL. */\nfunction findUuid(input) {\n\tif (!input) return void 0;\n\treturn /\\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\\b/.exec(input)?.[0];\n}\nfunction extractNodeIdFromSlug(nodeSlug) {\n\treturn findUuid(nodeSlug);\n}\nfunction extractNodeIdFromPath(path) {\n\treturn extractNodeIdFromSlug(extractNodeSlugFromPath(path));\n}\n/** Extracts the drive slug from a path.\n* Used for extracting drive ids from drive slugs in the URL.\n* Expects the path to be in the format `/d/<drive-slug>`.\n*/\nfunction extractDriveSlugFromPath(path) {\n\tconst currentPath = getPathWithoutBase(path);\n\treturn /^\\/d\\/([^/]+)/.exec(currentPath)?.[1] ?? \"\";\n}\nfunction extractDriveIdFromSlug(driveSlug) {\n\treturn findUuid(driveSlug);\n}\nfunction extractDriveIdFromPath(path) {\n\treturn extractDriveIdFromSlug(extractDriveSlugFromPath(path));\n}\n/**\n* Creates a URL string with the given pathname while preserving existing query parameters.\n*/\nfunction createUrlWithPreservedParams(pathname) {\n\tconst search = window.location.search;\n\treturn search ? `${pathname}${search}` : pathname;\n}\n//#endregion\n//#region src/hooks/drives.ts\nconst drivesEventFunctions = makePHEventFunctions(\"drives\");\n/** Returns all of the drives in the reactor */\nconst useDrives = drivesEventFunctions.useValue;\n/** Sets the drives in the reactor */\nconst setDrives = drivesEventFunctions.setValue;\n/** Adds an event handler for the drives */\nconst addDrivesEventHandler = drivesEventFunctions.addEventHandler;\n//#endregion\n//#region src/hooks/selected-drive.ts\nconst selectedDriveIdEventFunctions = makePHEventFunctions(\"selectedDriveId\");\n/** Returns the selected drive id */\nconst useSelectedDriveId = selectedDriveIdEventFunctions.useValue;\n/** Sets the selected drive id */\nconst setSelectedDriveId = selectedDriveIdEventFunctions.setValue;\n/** Adds an event handler for the selected drive id */\nconst addSelectedDriveIdEventHandler = selectedDriveIdEventFunctions.addEventHandler;\n/** Returns the selected drive */\nfunction useSelectedDrive() {\n\tconst drive = useSelectedDriveSafe();\n\tif (!drive[0]) throw new Error(\"There is no drive selected. Did you mean to call 'useSelectedDriveSafe'?\");\n\treturn drive;\n}\n/** Returns the selected drive, or undefined if no drive is selected */\nfunction useSelectedDriveSafe() {\n\tconst selectedDriveId = useSelectedDriveId();\n\tconst selectedDrive = useDrives()?.find((drive) => drive.header.id === selectedDriveId);\n\tconst [drive, dispatch] = useDispatch(selectedDrive);\n\tif (!selectedDrive) return [void 0, void 0];\n\treturn [drive, dispatch];\n}\nfunction setSelectedDrive(driveOrDriveSlug) {\n\tconst driveSlug = typeof driveOrDriveSlug === \"string\" ? driveOrDriveSlug : driveOrDriveSlug?.header.slug;\n\tconst driveId = (window.ph?.drives?.find((d) => d.header.slug === driveSlug))?.header.id;\n\tsetSelectedDriveId(driveId);\n\tif (!driveId) {\n\t\tconst pathname = resolveUrlPathname(\"/\");\n\t\tif (pathname === window.location.pathname) return;\n\t\twindow.history.pushState(null, \"\", createUrlWithPreservedParams(pathname));\n\t\treturn;\n\t}\n\tconst pathname = resolveUrlPathname(`/d/${driveSlug}`);\n\tif (pathname === window.location.pathname) return;\n\twindow.history.pushState(null, \"\", createUrlWithPreservedParams(pathname));\n}\nfunction addSetSelectedDriveOnPopStateEventHandler() {\n\twindow.addEventListener(\"popstate\", () => {\n\t\tconst pathname = window.location.pathname;\n\t\tconst driveId = extractDriveIdFromPath(pathname);\n\t\tif (driveId !== window.ph?.selectedDriveId) setSelectedDrive(driveId);\n\t});\n}\n//#endregion\n//#region src/hooks/use-drop-target.ts\nfunction useDropTarget() {\n\tconst [isDropTarget, setIsDropTarget] = useState(false);\n\tconst isDragAndDropEnabled = useIsDragAndDropEnabled();\n\tconst targetSetter = funnel(() => setIsDropTarget(true), {\n\t\ttriggerAt: \"start\",\n\t\tminQuietPeriodMs: 100\n\t});\n\tconst targetUnsetter = funnel(() => setIsDropTarget(false), {\n\t\ttriggerAt: \"start\",\n\t\tminQuietPeriodMs: 100\n\t});\n\tfunction setTarget() {\n\t\tif (!isDragAndDropEnabled) return;\n\t\ttargetUnsetter.cancel();\n\t\ttargetSetter.call();\n\t}\n\tfunction unsetTarget() {\n\t\tif (!isDragAndDropEnabled) return;\n\t\ttargetSetter.cancel();\n\t\ttargetUnsetter.call();\n\t}\n\treturn {\n\t\tisDropTarget,\n\t\tsetTarget,\n\t\tunsetTarget\n\t};\n}\n//#endregion\n//#region src/hooks/node-drag-and-drop.ts\nconst draggingNodeEventFunctions = makePHEventFunctions(\"draggingNode\");\nconst useDraggingNode = draggingNodeEventFunctions.useValue;\nconst setDraggingNode = draggingNodeEventFunctions.setValue;\nconst addDraggingNodeEventHandler = draggingNodeEventFunctions.addEventHandler;\nconst draggingNodeSetter = funnel((node) => setDraggingNode(node), {\n\treducer: (_, newNode) => newNode,\n\ttriggerAt: \"start\",\n\tminQuietPeriodMs: 100\n});\nconst draggingNodeUnsetter = funnel(() => setDraggingNode(void 0), {\n\ttriggerAt: \"start\",\n\tminQuietPeriodMs: 100\n});\nfunction setDragging(node) {\n\tdraggingNodeUnsetter.cancel();\n\tdraggingNodeSetter.call(node);\n}\nfunction unsetDragging() {\n\tdraggingNodeSetter.cancel();\n\tdraggingNodeUnsetter.call();\n}\nconst isNodeDrag = (params) => conditional(params, [({ srcId }) => isNot(isTruthy)(srcId), constant(false)], [({ driveId }) => isNot(isTruthy)(driveId), constant(false)], [({ driveId, srcId }) => isStrictEqual(driveId, srcId), constant(false)], constant(true));\nfunction useDragNode(args) {\n\tconst { srcId, parentId } = args;\n\tconst driveId = useSelectedDriveId();\n\tconst draggingNodeId = useDraggingNode()?.srcId;\n\tconst params = {\n\t\tdriveId,\n\t\tsrcId,\n\t\tparentId\n\t};\n\tconst draggable = isNodeDrag(params);\n\tconst isDragging = allPass({\n\t\tsrcId,\n\t\tdraggingNodeId\n\t}, [\n\t\t() => draggable,\n\t\t({ srcId }) => isString(srcId),\n\t\t({ draggingNodeId }) => isString(draggingNodeId),\n\t\t({ srcId, draggingNodeId }) => isStrictEqual(srcId, draggingNodeId)\n\t]);\n\tconst onDragStart = () => {\n\t\tif (!draggable) return;\n\t\tsetDragging(params);\n\t};\n\tconst onDragEnd = () => {\n\t\tif (!draggable) return;\n\t\tunsetDragging();\n\t};\n\treturn {\n\t\tisDragging,\n\t\tdraggable,\n\t\tonDragStart,\n\t\tonDragEnd\n\t};\n}\nconst isNodeDrop = (params) => conditional(params, [({ srcId }) => isNot(isTruthy)(srcId), constant(false)], [({ driveId }) => isNot(isDefined)(driveId), constant(false)], [({ srcId, targetId }) => isStrictEqual(srcId, targetId), constant(false)], [({ driveId, parentId, targetId }) => isNot(isTruthy)(parentId) && isStrictEqual(targetId, driveId), constant(false)], [({ targetId, parentId }) => isStrictEqual(targetId, parentId), constant(false)], constant(true));\nfunction useDropNode(targetId) {\n\tconst driveId = useSelectedDriveId();\n\tconst { srcId, parentId } = useDraggingNode() ?? {};\n\tconst { isDropTarget, setTarget, unsetTarget } = useDropTarget();\n\tconst params = {\n\t\tdriveId,\n\t\tparentId,\n\t\ttargetId,\n\t\tsrcId\n\t};\n\tfunction handleNodeDrop(event, cb) {\n\t\tif (!isNodeDrop(params)) return;\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tcb?.();\n\t}\n\tconst onDragEnter = (event) => handleNodeDrop(event);\n\tconst onDragOver = (event) => handleNodeDrop(event, once(setTarget));\n\tconst onDragLeave = (event) => handleNodeDrop(event, once(unsetTarget));\n\tconst onDrop = (event) => handleNodeDrop(event, once(() => {\n\t\tunsetDragging();\n\t\tunsetTarget();\n\t\tmoveNodeById(params).catch(console.error);\n\t}));\n\treturn {\n\t\tisDropTarget,\n\t\tonDragEnter,\n\t\tonDragOver,\n\t\tonDragLeave,\n\t\tonDrop\n\t};\n}\n//#endregion\n//#region src/hooks/graphql-reactor-client.ts\nconst graphQLReactorClientEventFunctions = makePHEventFunctions(\"reactorGraphQLClient\");\nconst useGraphQLReactorClient = graphQLReactorClientEventFunctions.useValue;\nconst setGraphQLReactorClient = graphQLReactorClientEventFunctions.setValue;\nconst addGraphQLReactorClientEventHandler = graphQLReactorClientEventFunctions.addEventHandler;\n//#endregion\n//#region src/hooks/modals.ts\nconst modalEventFunctions = makePHEventFunctions(\"modal\");\n/** Returns the current modal */\nconst usePHModal = modalEventFunctions.useValue;\n/** Sets the current modal */\nconst setPHModal = modalEventFunctions.setValue;\n/** Adds an event handler for the modal */\nconst addModalEventHandler = modalEventFunctions.addEventHandler;\n/** Shows a modal */\nfunction showPHModal(modal) {\n\tsetPHModal(modal);\n}\n/** Closes the current modal */\nfunction closePHModal() {\n\tsetPHModal(void 0);\n}\n/** Shows the create document modal */\nfunction showCreateDocumentModal(documentType) {\n\tsetPHModal({\n\t\ttype: \"createDocument\",\n\t\tdocumentType\n\t});\n}\n/** Shows the delete node modal */\nfunction showDeleteNodeModal(nodeOrId) {\n\tsetPHModal({\n\t\ttype: \"deleteItem\",\n\t\tid: typeof nodeOrId === \"string\" ? nodeOrId : nodeOrId.id\n\t});\n}\n//#endregion\n//#region src/hooks/package-discovery.ts\nconst packageDiscoveryFunctions = makePHEventFunctions(\"packageDiscoveryService\");\nconst usePackageDiscoveryService = packageDiscoveryFunctions.useValue;\nconst setPackageDiscoveryService = packageDiscoveryFunctions.setValue;\nconst addPackageDiscoveryServiceEventHandler = packageDiscoveryFunctions.addEventHandler;\n//#endregion\n//#region src/hooks/reactor.ts\nconst reactorClientModuleEventFunctions = makePHEventFunctions(\"reactorClientModule\");\nconst reactorClientEventFunctions = makePHEventFunctions(\"reactorClient\");\n/** Returns the reactor client module */\nconst useReactorClientModule = reactorClientModuleEventFunctions.useValue;\n/** Sets the reactor client module */\nconst setReactorClientModule = reactorClientModuleEventFunctions.setValue;\n/** Adds an event handler for the reactor client module */\nconst addReactorClientModuleEventHandler = reactorClientModuleEventFunctions.addEventHandler;\n/** Returns the reactor client */\nconst useReactorClient = reactorClientEventFunctions.useValue;\n/** Sets the reactor client */\nconst setReactorClient = reactorClientEventFunctions.setValue;\n/** Adds an event handler for the reactor client */\nconst addReactorClientEventHandler = reactorClientEventFunctions.addEventHandler;\nconst useSync = () => useReactorClientModule()?.reactorModule?.syncModule?.syncManager;\nconst useSyncList = () => {\n\treturn useSync()?.list() ?? [];\n};\nconst useModelRegistry = () => useReactorClientModule()?.reactorModule?.documentModelRegistry;\nconst useDatabase = () => useReactorClientModule()?.reactorModule?.database;\nconst usePGlite = () => useReactorClientModule()?.pg;\n//#endregion\n//#region src/hooks/revision-history.ts\nconst revisionHistoryEventFunctions = makePHEventFunctions(\"revisionHistoryVisible\");\n/** Returns whether revision history is visible */\nconst useRevisionHistoryVisible = revisionHistoryEventFunctions.useValue;\n/** Sets revision history visibility */\nconst setRevisionHistoryVisible = revisionHistoryEventFunctions.setValue;\n/** Adds event handler for revision history visibility */\nconst addRevisionHistoryVisibleEventHandler = revisionHistoryEventFunctions.addEventHandler;\n/** Shows the revision history */\nfunction showRevisionHistory() {\n\tsetRevisionHistoryVisible(true);\n}\n/** Hides the revision history */\nfunction hideRevisionHistory() {\n\tsetRevisionHistoryVisible(false);\n}\n//#endregion\n//#region src/utils/nodes.ts\n/** Sorts nodes by name. */\nfunction sortNodesByName(nodes) {\n\treturn nodes.toSorted((a, b) => a.name.localeCompare(b.name));\n}\n/** Returns whether a node is a file. */\nfunction isFileNodeKind(node) {\n\tif (!node) return false;\n\treturn node.kind.toUpperCase() === \"FILE\";\n}\n/** Returns whether a node is a folder. */\nfunction isFolderNodeKind(node) {\n\tif (!node) return false;\n\treturn node.kind.toUpperCase() === \"FOLDER\";\n}\n//#endregion\n//#region src/hooks/items-in-selected-drive.ts\n/** Returns the nodes in the selected drive. */\nfunction useNodesInSelectedDrive() {\n\tconst [selectedDrive] = useSelectedDriveSafe();\n\treturn selectedDrive?.state.global.nodes;\n}\n/** Returns the file nodes in the selected drive. */\nfunction useFileNodesInSelectedDrive() {\n\treturn useNodesInSelectedDrive()?.filter((n) => isFileNodeKind(n));\n}\n/** Returns the folder nodes in the selected drive. */\nfunction useFolderNodesInSelectedDrive() {\n\treturn useNodesInSelectedDrive()?.filter((n) => isFolderNodeKind(n));\n}\n/** Returns the documents in the selected drive. */\nfunction useDocumentsInSelectedDrive() {\n\tconst fileNodeIds = useFileNodesInSelectedDrive()?.map((node) => node.id);\n\treturn useDocumentsByIds(fileNodeIds);\n}\n/** Returns the document types supported by the selected drive, as defined by the document model documents present in the drive */\nfunction useDocumentTypesInSelectedDrive() {\n\treturn (useDocumentsInSelectedDrive()?.filter(isDocumentModelDocument))?.map((doc) => doc.state.global.id);\n}\nfunction isDocumentModelDocument(document) {\n\treturn document.header.documentType === \"powerhouse/document-model\";\n}\n//#endregion\n//#region src/hooks/selected-node.ts\nconst selectedNodeIdEventFunctions = makePHEventFunctions(\"selectedNodeId\");\nconst useSelectedNodeId = selectedNodeIdEventFunctions.useValue;\nconst setSelectedNodeId = selectedNodeIdEventFunctions.setValue;\nconst addSelectedNodeIdEventHandler = selectedNodeIdEventFunctions.addEventHandler;\n/** Returns the selected node. */\nfunction useSelectedNode() {\n\tconst selectedNodeId = useSelectedNodeId();\n\treturn useNodesInSelectedDrive()?.find((n) => n.id === selectedNodeId);\n}\n/** Sets the selected node (file or folder). */\nfunction setSelectedNode(nodeOrNodeSlug) {\n\tconst nodeSlug = typeof nodeOrNodeSlug === \"string\" ? nodeOrNodeSlug : makeNodeSlug(nodeOrNodeSlug);\n\tsetSelectedNodeId(extractNodeIdFromSlug(nodeSlug));\n\tconst driveSlugFromPath = extractDriveSlugFromPath(window.location.pathname);\n\tif (!driveSlugFromPath) return;\n\tif (!nodeSlug) {\n\t\tconst pathname = resolveUrlPathname(`/d/${driveSlugFromPath}`);\n\t\tif (pathname === window.location.pathname) return;\n\t\twindow.history.pushState(null, \"\", createUrlWithPreservedParams(pathname));\n\t\treturn;\n\t}\n\tconst pathname = resolveUrlPathname(`/d/${driveSlugFromPath}/${nodeSlug}`);\n\tif (pathname === window.location.pathname) return;\n\twindow.history.pushState(null, \"\", createUrlWithPreservedParams(pathname));\n}\nfunction addResetSelectedNodeEventHandler() {\n\twindow.addEventListener(\"ph:selectedDriveIdUpdated\", () => {\n\t\tsetSelectedNodeId(void 0);\n\t});\n}\nfunction addSetSelectedNodeOnPopStateEventHandler() {\n\twindow.addEventListener(\"popstate\", () => {\n\t\tconst pathname = window.location.pathname;\n\t\tconst nodeSlug = extractNodeSlugFromPath(pathname);\n\t\tif (nodeSlug !== window.ph?.selectedNodeId) setSelectedNode(nodeSlug);\n\t});\n}\n//#endregion\n//#region src/hooks/selected-timeline-item.ts\nconst selectedTimelineItemEventFunctions = makePHEventFunctions(\"selectedTimelineItem\");\n/** Returns the selected timeline item */\nconst useSelectedTimelineItem = selectedTimelineItemEventFunctions.useValue;\n/** Sets the selected timeline item */\nconst setSelectedTimelineItem = selectedTimelineItemEventFunctions.setValue;\n/** Adds event handler for selected timeline item */\nconst addSelectedTimelineItemEventHandler = selectedTimelineItemEventFunctions.addEventHandler;\n//#endregion\n//#region src/hooks/timeline-revision.ts\nconst selectedTimelineRevisionEventFunctions = makePHEventFunctions(\"selectedTimelineRevision\");\n/** Returns the selected timeline revision. */\nconst useSelectedTimelineRevision = selectedTimelineRevisionEventFunctions.useValue;\n/** Sets the selected timeline revision. */\nconst setSelectedTimelineRevision = selectedTimelineRevisionEventFunctions.setValue;\n/** Adds an event handler for the selected timeline revision. */\nconst addSelectedTimelineRevisionEventHandler = selectedTimelineRevisionEventFunctions.addEventHandler;\n//#endregion\n//#region src/hooks/toast.ts\nconst toastEventFunctions = makePHEventFunctions(\"toast\");\n/** Returns the toast function */\nconst usePHToast = toastEventFunctions.useValue;\n/** Sets the toast function */\nconst setPHToast = toastEventFunctions.setValue;\n/** Adds an event handler for the toast */\nconst addToastEventHandler = toastEventFunctions.addEventHandler;\n//#endregion\n//#region src/hooks/vetra-packages.ts\nconst vetraPackageManagerFunctions = makePHEventFunctions(\"vetraPackageManager\");\nconst useVetraPackageManager = vetraPackageManagerFunctions.useValue;\n/** Returns all of the Vetra packages loaded by the Connect instance */\nconst useVetraPackages = () => {\n\tconst packageManager = useVetraPackageManager();\n\treturn useSyncExternalStore((cb) => packageManager ? packageManager.subscribe(cb) : () => {}, () => packageManager?.packages ?? []);\n};\n/** Adds the Vetra package manager event handler */\nconst addVetraPackageManagerEventHandler = vetraPackageManagerFunctions.addEventHandler;\n/** Sets the Vetra package manager and registers its packages */\nfunction setVetraPackageManager(packageManager) {\n\tvetraPackageManagerFunctions.setValue(packageManager);\n\tupdateReactorClientDocumentModels(packageManager.packages);\n\tupdateReactorClientUpgradeManifests(packageManager.packages);\n\tpackageManager.subscribe(({ packages }) => {\n\t\tupdateReactorClientDocumentModels(packages);\n\t\tupdateReactorClientUpgradeManifests(packages);\n\t});\n}\nfunction updateReactorClientDocumentModels(packages) {\n\tconst documentModelModules = packages.flatMap((pkg) => pkg.documentModels);\n\tconst registry = window.ph?.reactorClientModule?.reactorModule?.documentModelRegistry;\n\tif (!registry || documentModelModules.length === 0) return;\n\tconst results = registry.registerModules(...documentModelModules);\n\tconst duplicates = [];\n\tfor (const result of results) if (result.status === \"error\") if (DuplicateModuleError.isError(result.error)) duplicates.push(result);\n\telse console.error(\"Failed to register document model module:\", result.error);\n\tif (duplicates.length > 0) {\n\t\tconst duplicateTypes = duplicates.map((r) => r.item.documentModel.global.id);\n\t\tregistry.unregisterModules(...duplicateTypes);\n\t\tregistry.registerModules(...duplicates.map((r) => r.item));\n\t}\n}\nfunction updateReactorClientUpgradeManifests(packages) {\n\tconst upgradeManifests = packages.flatMap((pkg) => pkg.upgradeManifests).filter((u) => u !== void 0);\n\tconst registry = window.ph?.reactorClientModule?.reactorModule?.documentModelRegistry;\n\tif (!registry || upgradeManifests.length === 0) return;\n\tconst results = registry.registerUpgradeManifests(...upgradeManifests);\n\tconst duplicates = [];\n\tfor (const result of results) if (result.status === \"error\") if (DuplicateManifestError.isError(result.error)) duplicates.push(result);\n\telse console.error(\"Failed to register upgrade manifest:\", result.error);\n\tif (duplicates.length > 0) {\n\t\tconst duplicateTypes = duplicates.map((r) => r.item.documentType).filter((t) => !!t);\n\t\tregistry.unregisterUpgradeManifests(...duplicateTypes);\n\t\tregistry.registerUpgradeManifests(...duplicates.map((r) => r.item));\n\t}\n}\n//#endregion\n//#region src/hooks/add-ph-event-handlers.ts\nconst commonGlobalEventHandlerFunctions = {\n\tloading: addLoadingEventHandler,\n\tdrives: addDrivesEventHandler,\n\tselectedDriveId: () => {\n\t\taddSelectedDriveIdEventHandler();\n\t\taddSetSelectedDriveOnPopStateEventHandler();\n\t\taddResetSelectedNodeEventHandler();\n\t},\n\tselectedNodeId: () => {\n\t\taddSelectedNodeIdEventHandler();\n\t\taddSetSelectedNodeOnPopStateEventHandler();\n\t},\n\tdocumentCache: addDocumentCacheEventHandler,\n\treactorGraphQLClient: addGraphQLReactorClientEventHandler,\n\tdraggingNode: addDraggingNodeEventHandler\n};\nconst phGlobalEventHandlerRegisterFunctions = {\n\t...commonGlobalEventHandlerFunctions,\n\treactorClientModule: addReactorClientModuleEventHandler,\n\treactorClient: addReactorClientEventHandler,\n\tfeatures: addFeaturesEventHandler,\n\tmodal: addModalEventHandler,\n\trenown: addRenownEventHandler,\n\tvetraPackageManager: addVetraPackageManagerEventHandler,\n\tpackageDiscoveryService: addPackageDiscoveryServiceEventHandler,\n\tselectedTimelineRevision: addSelectedTimelineRevisionEventHandler,\n\trevisionHistoryVisible: addRevisionHistoryVisibleEventHandler,\n\tselectedTimelineItem: addSelectedTimelineItemEventHandler,\n\trouterBasename: addRouterBasenameEventHandler,\n\tversion: addVersionEventHandler,\n\tlogLevel: addLogLevelEventHandler,\n\trequiresHardRefresh: addRequiresHardRefreshEventHandler,\n\twarnOutdatedApp: addWarnOutdatedAppEventHandler,\n\tstudioMode: addStudioModeEventHandler,\n\tbasePath: addBasePathEventHandler,\n\tversionCheckInterval: addVersionCheckIntervalEventHandler,\n\tcliVersion: addCliVersionEventHandler,\n\tfileUploadOperationsChunkSize: addFileUploadOperationsChunkSizeEventHandler,\n\tisDocumentModelSelectionSettingsEnabled: addIsDocumentModelSelectionSettingsEnabledEventHandler,\n\tgaTrackingId: addGaTrackingIdEventHandler,\n\tallowList: addAllowListEventHandler,\n\tdefaultDrivesUrl: addDefaultDrivesUrlEventHandler,\n\tdrivesPreserveStrategy: addDrivesPreserveStrategyEventHandler,\n\tallowedDocumentTypes: addAllowedDocumentTypesEventHandler,\n\tenabledEditors: addEnabledEditorsEventHandler,\n\tdisabledEditors: addDisabledEditorsEventHandler,\n\tisAddDriveEnabled: addIsAddDriveEnabledEventHandler,\n\tisLocalDrivesEnabled: addIsLocalDrivesEnabledEventHandler,\n\tisPublicDrivesEnabled: addIsPublicDrivesEnabledEventHandler,\n\tisAddPublicDrivesEnabled: addIsAddPublicDrivesEnabledEventHandler,\n\tisDeletePublicDrivesEnabled: addIsDeletePublicDrivesEnabledEventHandler,\n\tisCloudDrivesEnabled: addIsCloudDrivesEnabledEventHandler,\n\tisAddCloudDrivesEnabled: addIsAddCloudDrivesEnabledEventHandler,\n\tisDeleteCloudDrivesEnabled: addIsDeleteCloudDrivesEnabledEventHandler,\n\tisAddLocalDrivesEnabled: addIsAddLocalDrivesEnabledEventHandler,\n\tisDeleteLocalDrivesEnabled: addIsDeleteLocalDrivesEnabledEventHandler,\n\tisDragAndDropEnabled: addIsDragAndDropEnabledEventHandler,\n\tisExternalControlsEnabled: addIsExternalControlsEnabledEventHandler,\n\tisEditorDebugModeEnabled: addIsEditorDebugModeEnabledEventHandler,\n\tisEditorReadModeEnabled: addIsEditorReadModeEnabledEventHandler,\n\tisRelationalProcessorsEnabled: addIsRelationalProcessorsEnabledEventHandler,\n\tisExternalRelationalProcessorsEnabled: addIsExternalRelationalProcessorsEnabledEventHandler,\n\tisAnalyticsEnabled: addIsAnalyticsEnabledEventHandler,\n\tisAnalyticsExternalProcessorsEnabled: addIsAnalyticsExternalProcessorsEnabledEventHandler,\n\tanalyticsDatabaseName: addAnalyticsDatabaseNameEventHandler,\n\tisAnalyticsDatabaseWorkerEnabled: addIsAnalyticsDatabaseWorkerEnabledEventHandler,\n\tisDiffAnalyticsEnabled: addIsDiffAnalyticsEnabledEventHandler,\n\tisDriveAnalyticsEnabled: addIsDriveAnalyticsEnabledEventHandler,\n\trenownUrl: addRenownUrlEventHandler,\n\trenownNetworkId: addRenownNetworkIdEventHandler,\n\trenownChainId: addRenownChainIdEventHandler,\n\tsentryRelease: addSentryReleaseEventHandler,\n\tsentryDsn: addSentryDsnEventHandler,\n\tsentryEnv: addSentryEnvEventHandler,\n\tisSentryTracingEnabled: addIsSentryTracingEnabledEventHandler,\n\tisExternalProcessorsEnabled: addIsExternalProcessorsEnabledEventHandler,\n\tisExternalPackagesEnabled: addIsExternalPackagesEnabledEventHandler,\n\ttoast: addToastEventHandler\n};\nfunction addPHEventHandlers() {\n\tcallEventHandlerRegisterFunctions(phGlobalEventHandlerRegisterFunctions);\n}\nfunction callEventHandlerRegisterFunctions(registerFunctions) {\n\tforEachObj(registerFunctions, (fn) => fn());\n}\n//#endregion\n//#region src/hooks/document-model-modules.ts\nfunction useDocumentModelModules() {\n\treturn useVetraPackages().flatMap((pkg) => pkg.documentModels).filter((module, index, modules) => modules.findIndex((m) => m.documentModel.global.id === module.documentModel.global.id && m.version === module.version) === index);\n}\nfunction useDocumentModelModuleById(id) {\n\treturn useDocumentModelModules()?.find((module) => module.documentModel.global.id === id);\n}\n//#endregion\n//#region src/hooks/allowed-document-model-modules.ts\nfunction useAllowedDocumentModelModules() {\n\tconst documentModelModules = useDocumentModelModules();\n\tconst allowedDocumentTypes = useAllowedDocumentTypes();\n\tif (!allowedDocumentTypes?.length) return documentModelModules;\n\treturn documentModelModules?.filter((module) => allowedDocumentTypes.includes(module.documentModel.global.id));\n}\n//#endregion\n//#region src/hooks/selected-folder.ts\n/** Returns the selected folder. */\nfunction useSelectedFolder() {\n\tconst selectedNode = useSelectedNode();\n\tif (isFolderNodeKind(selectedNode)) return selectedNode;\n}\n//#endregion\n//#region src/hooks/child-nodes.ts\n/** Returns the child nodes for the selected drive or folder. */\nfunction useNodesInSelectedDriveOrFolder() {\n\tconst nodes = useNodesInSelectedDrive();\n\tconst selectedFolderId = useSelectedFolder()?.id;\n\tif (!nodes) return [];\n\tif (!selectedFolderId) return sortNodesByName(nodes.filter((n) => !n.parentFolder));\n\treturn sortNodesByName(nodes.filter((n) => n.parentFolder === selectedFolderId));\n}\n//#endregion\n//#region src/hooks/config/set-config-by-key.ts\nfunction setPHGlobalConfigByKey(key, value) {\n\tconst setter = phGlobalConfigSetters[key];\n\tsetter(value);\n}\nfunction setPHAppConfigByKey(key, value) {\n\tconst setter = phAppConfigSetters[key];\n\tsetter(value);\n}\nfunction setPHDocumentEditorConfigByKey(key, value) {\n\tconst setter = phDocumentEditorConfigSetters[key];\n\tsetter(value);\n}\n//#endregion\n//#region src/hooks/config/utils.ts\nfunction callGlobalSetterForKey(key, value) {\n\tconst setter = phGlobalConfigSetters[key];\n\tsetter(value);\n}\n//#endregion\n//#region src/hooks/config/set-config-by-object.ts\nfunction setDefaultPHGlobalConfig(config) {\n\tfor (const key of Object.keys(config)) callGlobalSetterForKey(key, config[key]);\n}\nfunction useSetDefaultPHGlobalConfig(config) {\n\tconst [isInitialized, setIsInitialized] = useState(false);\n\tuseEffect(() => {\n\t\tif (isInitialized) return;\n\t\tsetDefaultPHGlobalConfig(config);\n\t\tsetIsInitialized(true);\n\t}, [config, isInitialized]);\n}\nfunction useResetPHGlobalConfig(defaultConfigForReset) {\n\treturn function reset() {\n\t\tsetPHGlobalConfig(defaultConfigForReset);\n\t};\n}\nfunction setPHGlobalConfig(config) {\n\tfor (const key of Object.keys(config)) callGlobalSetterForKey(key, config[key]);\n}\nfunction useSetPHGlobalConfig(config) {\n\tconst [isInitialized, setIsInitialized] = useState(false);\n\tuseEffect(() => {\n\t\tif (isInitialized) return;\n\t\tsetPHGlobalConfig(config);\n\t\tsetIsInitialized(true);\n\t}, [config, isInitialized]);\n}\n/** Sets the global drive config.\n*\n* Pass in a partial object of the global drive config to set.\n*/\nfunction setPHAppConfig(config) {\n\tfor (const key of Object.keys(config)) callGlobalSetterForKey(key, config[key]);\n}\n/** Sets the global document config.\n*\n* Pass in a partial object of the global document config to set.\n*/\nfunction setPHDocumentEditorConfig(config) {\n\tfor (const key of Object.keys(config)) callGlobalSetterForKey(key, config[key]);\n}\n/** Wrapper hook for setting the global app config.\n*\n* Automatically sets the global app config when the component mounts.\n*\n* Pass in a partial object of the global app config to set.\n*/\nfunction useSetPHAppConfig(config) {\n\tconst [isInitialized, setIsInitialized] = useState(false);\n\tuseEffect(() => {\n\t\tif (isInitialized) return;\n\t\tsetPHAppConfig(config);\n\t\tsetIsInitialized(true);\n\t}, [config, isInitialized]);\n}\n/** Wrapper hook for setting the global document editor config.\n*\n* Automatically sets the global document editor config when the component mounts.\n*\n* Pass in a partial object of the global document editor config to set.\n*/\nfunction useSetPHDocumentEditorConfig(config) {\n\tconst [isInitialized, setIsInitialized] = useState(false);\n\tuseEffect(() => {\n\t\tif (isInitialized) return;\n\t\tsetPHDocumentEditorConfig(config);\n\t\tsetIsInitialized(true);\n\t}, [config, isInitialized]);\n}\n//#endregion\n//#region src/hooks/config/use-value-by-key.ts\nfunction usePHGlobalConfigByKey(key) {\n\tconst useValueHook = phGlobalConfigHooks[key];\n\treturn useValueHook();\n}\n/** Gets the value of an item in the global drive config for a given key.\n*\n* Strongly typed, inferred from type definition for the key.\n*/\nfunction usePHAppConfigByKey(key) {\n\tconst useValueHook = phAppConfigHooks[key];\n\treturn useValueHook();\n}\n/** Gets the value of an item in the global document config for a given key.\n*\n* Strongly typed, inferred from type definition for the key.\n*/\nfunction usePHDocumentEditorConfigByKey(key) {\n\tconst useValueHook = phDocumentEditorConfigHooks[key];\n\treturn useValueHook();\n}\n//#endregion\n//#region src/hooks/connection-state.ts\n/**\n* Returns a map of remote name to connection state snapshot for all remotes.\n* Re-renders when any remote's connection state changes.\n*/\nfunction useConnectionStates() {\n\tconst syncManager = useSync();\n\tconst [states, setStates] = useState(() => buildSnapshot(syncManager));\n\tconst unsubscribesRef = useRef([]);\n\tuseEffect(() => {\n\t\tif (!syncManager) return;\n\t\tfunction subscribe() {\n\t\t\tfor (const unsub of unsubscribesRef.current) unsub();\n\t\t\tunsubscribesRef.current = [];\n\t\t\tconst remotes = syncManager.list();\n\t\t\tfor (const remote of remotes) {\n\t\t\t\tconst unsub = remote.channel.onConnectionStateChange(() => {\n\t\t\t\t\tsetStates(buildSnapshot(syncManager));\n\t\t\t\t});\n\t\t\t\tunsubscribesRef.current.push(unsub);\n\t\t\t}\n\t\t\tsetStates(buildSnapshot(syncManager));\n\t\t}\n\t\tsubscribe();\n\t\tconst interval = setInterval(subscribe, 5e3);\n\t\treturn () => {\n\t\t\tclearInterval(interval);\n\t\t\tfor (const unsub of unsubscribesRef.current) unsub();\n\t\t\tunsubscribesRef.current = [];\n\t\t};\n\t}, [syncManager]);\n\treturn states;\n}\n/**\n* Returns the connection state snapshot for a specific remote by name.\n*/\nfunction useConnectionState(remoteName) {\n\treturn useConnectionStates().get(remoteName);\n}\nfunction buildSnapshot(syncManager) {\n\tconst map = /* @__PURE__ */ new Map();\n\tif (!syncManager) return map;\n\tfor (const remote of syncManager.list()) map.set(remote.name, remote.channel.getConnectionState());\n\treturn map;\n}\n//#endregion\n//#region src/hooks/document-of-type.ts\n/** Returns a document of a specific type, throws an error if the found document has a different type */\nfunction useDocumentOfType(documentId, documentType) {\n\tconst [document, dispatch] = useDocumentById(documentId);\n\tconst documentModelModule = useDocumentModelModuleById(documentType);\n\tif (!documentId || !documentType) return [];\n\tif (!document) throw new Error(`Document not found: ${documentId}`);\n\tif (!documentModelModule) throw new ModuleNotFoundError(documentType);\n\tif (document.header.documentType !== documentType) throw new DocumentTypeMismatchError(documentId, documentType, document.header.documentType);\n\treturn [document, dispatch];\n}\n//#endregion\n//#region src/hooks/document-operations.ts\n/**\n* Hook to fetch document operations via the reactor client.\n* Operations are no longer auto-populated on documents and must be fetched explicitly.\n*\n* @param documentId - The document ID to fetch operations for\n* @returns Object containing globalOperations, localOperations, isLoading, and error\n*/\nfunction useDocumentOperations(documentId) {\n\tconst reactorClient = useReactorClient();\n\tconst hasFetchedRef = useRef(false);\n\tconst [state, setState] = useState(() => ({\n\t\tglobalOperations: [],\n\t\tlocalOperations: [],\n\t\tisLoading: !!documentId,\n\t\terror: void 0\n\t}));\n\tconst fetchOperations = useCallback(async (retryCount = 0) => {\n\t\tconst MAX_RETRIES = 5;\n\t\tconst RETRY_DELAY_MS = 500;\n\t\tif (!documentId || !reactorClient) {\n\t\t\tsetState({\n\t\t\t\tglobalOperations: [],\n\t\t\t\tlocalOperations: [],\n\t\t\t\tisLoading: false,\n\t\t\t\terror: void 0\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tsetState((prev) => ({\n\t\t\t...prev,\n\t\t\tisLoading: true,\n\t\t\terror: void 0\n\t\t}));\n\t\tlet globalOps = [];\n\t\tlet localOps = [];\n\t\tlet fetchError;\n\t\ttry {\n\t\t\tglobalOps = (await reactorClient.getOperations(documentId, { scopes: [\"global\"] })).results;\n\t\t} catch (err) {\n\t\t\tfetchError = err instanceof Error ? err : new Error(String(err));\n\t\t}\n\t\tif (!fetchError) try {\n\t\t\tlocalOps = (await reactorClient.getOperations(documentId, { scopes: [\"local\"] })).results;\n\t\t} catch (err) {\n\t\t\tfetchError = err instanceof Error ? err : new Error(String(err));\n\t\t}\n\t\tif (!fetchError && globalOps.length === 0 && localOps.length === 0 && retryCount < MAX_RETRIES) {\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, RETRY_DELAY_MS));\n\t\t\treturn fetchOperations(retryCount + 1);\n\t\t}\n\t\tsetState({\n\t\t\tglobalOperations: globalOps,\n\t\t\tlocalOperations: localOps,\n\t\t\tisLoading: false,\n\t\t\terror: fetchError\n\t\t});\n\t\thasFetchedRef.current = true;\n\t}, [documentId, reactorClient]);\n\tuseEffect(() => {\n\t\tif (documentId && reactorClient) fetchOperations();\n\t\telse if (!documentId) {\n\t\t\tsetState({\n\t\t\t\tglobalOperations: [],\n\t\t\t\tlocalOperations: [],\n\t\t\t\tisLoading: false,\n\t\t\t\terror: void 0\n\t\t\t});\n\t\t\thasFetchedRef.current = false;\n\t\t}\n\t}, [\n\t\tdocumentId,\n\t\treactorClient,\n\t\tfetchOperations\n\t]);\n\tconst refetch = useCallback(() => {\n\t\tfetchOperations(0);\n\t}, [fetchOperations]);\n\treturn {\n\t\t...state,\n\t\trefetch\n\t};\n}\n//#endregion\n//#region src/hooks/supported-document-types.ts\n/** Returns the supported document types for the reactor (derived from the document model modules) */\nfunction useSupportedDocumentTypesInReactor() {\n\treturn useDocumentModelModules()?.map((module) => module.documentModel.global.id);\n}\n//#endregion\n//#region src/hooks/document-types.ts\n/** Returns the document types a app supports.\n*\n* If present, uses the `allowedDocumentTypes` config value.\n* Otherwise, uses the supported document types from the reactor.\n*/\nfunction useDocumentTypes() {\n\tconst allowedDocumentTypes = useAllowedDocumentTypes();\n\tconst supportedDocumentTypes = useSupportedDocumentTypesInReactor();\n\treturn allowedDocumentTypes ?? supportedDocumentTypes;\n}\n//#endregion\n//#region src/hooks/file-drag-and-drop.ts\nconst allowedExtensions = [\n\t\"zip\",\n\t\"phd\",\n\t\"phdm\"\n];\nconst hasFilesType = (types) => isDefined(find(types, (type) => isStrictEqual(type, \"Files\")));\nconst isFileDrop = (event) => allPass(event.dataTransfer.types, [\n\tisArray,\n\thasAtLeast(1),\n\thasFilesType\n]);\nconst EDITOR_FILE_DROP_OPT_OUT_ATTR = \"data-accepts-files\";\nconst isInsideEditorFileDropOptOut = (event) => {\n\tconst target = event.target;\n\tif (!(target instanceof Element)) return false;\n\treturn target.closest(`[${EDITOR_FILE_DROP_OPT_OUT_ATTR}]`) !== null;\n};\nconst hasAllowedExtension = (file) => pipe(file, (file) => file.name, split(\".\"), last(), isIncludedIn(allowedExtensions));\nconst getFileItems = (event) => pipe([...event.dataTransfer.items], filter((item) => isStrictEqual(item.kind, \"file\")), map((item) => item.getAsFile()), filter(isTruthy));\nfunction useDropFile(handleAddFile) {\n\tconst { isDropTarget, setTarget, unsetTarget } = useDropTarget();\n\tconst isDragAndDropEnabled = useIsDragAndDropEnabled();\n\tconst selectedFolder = useSelectedFolder();\n\tfunction handleDragEvent(event, cb) {\n\t\tif (!isDragAndDropEnabled) return;\n\t\tif (!isFileDrop(event)) return;\n\t\tif (isInsideEditorFileDropOptOut(event)) {\n\t\t\tunsetTarget();\n\t\t\treturn;\n\t\t}\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tcb?.();\n\t}\n\tconst handleAddFiles = (event) => Promise.all(pipe(event, getFileItems, filter(hasAllowedExtension), map((file) => handleAddFile(file, selectedFolder))));\n\tconst onDragEnter = (event) => handleDragEvent(event);\n\tconst onDragOver = (event) => handleDragEvent(event, setTarget);\n\tconst onDragLeave = (event) => handleDragEvent(event, unsetTarget);\n\tconst onDrop = (event) => handleDragEvent(event, once(() => {\n\t\tunsetTarget();\n\t\thandleAddFiles(event).catch(console.error);\n\t}));\n\treturn {\n\t\tonDragEnter,\n\t\tonDragOver,\n\t\tonDragLeave,\n\t\tonDrop,\n\t\tisDropTarget\n\t};\n}\n//#endregion\n//#region src/utils/validate-document.ts\nconst validateDocument = (document) => {\n\tconst errors = [];\n\tif (document.header.documentType !== \"powerhouse/document-model\") return errors;\n\tconst doc = document;\n\tconst specs = doc.state.global.specifications[0];\n\tconst initialStateErrors = Object.keys(specs.state).reduce((acc, scopeKey) => {\n\t\tconst scope = scopeKey;\n\t\treturn [...acc, ...validateInitialState(specs.state[scope].initialValue, scope !== \"global\").map((err) => ({\n\t\t\t...err,\n\t\t\tmessage: `${err.message}. Scope: ${scope}`,\n\t\t\tdetails: {\n\t\t\t\t...err.details,\n\t\t\t\tscope\n\t\t\t}\n\t\t}))];\n\t}, []);\n\tconst schemaStateErrors = Object.keys(specs.state).reduce((acc, scopeKey) => {\n\t\tconst scope = scopeKey;\n\t\tconst isGlobalScope = scope === \"global\";\n\t\treturn [...acc, ...validateStateSchemaName(specs.state[scope].schema, doc.state.global?.name || doc.header.name || \"\", !isGlobalScope ? scope : \"\", !isGlobalScope).map((err) => ({\n\t\t\t...err,\n\t\t\tmessage: `${err.message}. Scope: ${scope}`,\n\t\t\tdetails: {\n\t\t\t\t...err.details,\n\t\t\t\tscope\n\t\t\t}\n\t\t}))];\n\t}, []);\n\tconst modulesErrors = validateModules(specs.modules);\n\treturn [\n\t\t...initialStateErrors,\n\t\t...schemaStateErrors,\n\t\t...modulesErrors\n\t];\n};\n//#endregion\n//#region src/utils/download-document.ts\nfunction defaultHandleError(error) {\n\tconsole.error(`Failed to export document: ${error.message}`);\n}\nfunction handleDocumentValidation(document) {\n\tif (hasAtLeast(validateDocument(document), 1)) return false;\n\treturn true;\n}\nfunction downloadDocument(document, handleError = defaultHandleError) {\n\tif (!document) return;\n\tif (!handleDocumentValidation(document)) {\n\t\tshowPHModal({\n\t\t\ttype: \"downloadDocumentWithErrors\",\n\t\t\tdocumentId: document.header.id\n\t\t});\n\t\treturn;\n\t}\n\texportFile(document).catch((error) => handleError(normalizeException(error)));\n}\n//#endregion\n//#region src/hooks/download-document.ts\nfunction useDownloadDocument(id) {\n\tconst [document] = useDocumentById(id);\n\tconst toast = usePHToast();\n\treturn () => downloadDocument(document, (error) => toast?.(`Failed to export document: ${error.message}`));\n}\n//#endregion\n//#region src/hooks/drive-by-id.ts\nfunction useDriveById(driveId) {\n\tconst foundDrive = useDrives()?.find((drive) => drive.header.id === driveId);\n\tconst [drive, dispatch] = useDispatch(foundDrive);\n\tif (!foundDrive) throw new Error(`Drive with id ${driveId} not found`);\n\treturn [drive, dispatch];\n}\n//#endregion\n//#region src/hooks/editor-modules.ts\nfunction useEditorModules() {\n\treturn useVetraPackages().flatMap((pkg) => pkg.editors).filter((module) => !module.documentTypes.includes(\"powerhouse/document-drive\"));\n}\nfunction useAppModules() {\n\treturn useVetraPackages().flatMap((pkg) => pkg.editors).filter((module) => module.documentTypes.includes(\"powerhouse/document-drive\"));\n}\nfunction useFallbackEditorModule(documentType) {\n\tconst editorModules = useEditorModules();\n\tif (!documentType) return void 0;\n\tif (editorModules?.length === 0) return void 0;\n\treturn (editorModules?.filter((module) => module.documentTypes.includes(documentType)))?.[0];\n}\nfunction useAppModuleById(id) {\n\treturn useAppModules()?.find((module) => module.config.id === id);\n}\nfunction useDefaultAppModule() {\n\treturn useAppModuleById(DEFAULT_DRIVE_EDITOR_ID);\n}\nfunction useEditorModuleById(id) {\n\treturn useEditorModules()?.find((module) => module.config.id === id);\n}\nfunction useEditorModulesForDocumentType(documentType) {\n\tconst editorModules = useEditorModules();\n\tif (!documentType) return void 0;\n\treturn editorModules?.filter((module) => module.documentTypes.includes(documentType));\n}\n//#endregion\n//#region src/hooks/folder-by-id.ts\nfunction useFolderById(id) {\n\treturn useFolderNodesInSelectedDrive()?.find((n) => n.id === id);\n}\n//#endregion\n//#region src/graphql/events.ts\nfunction dispatchGraphQLClientDocumentEvent(operationName, identifier) {\n\tconst event = new CustomEvent(operationName, { detail: { identifier } });\n\twindow.dispatchEvent(event);\n}\n//#endregion\n//#region src/graphql/document-cache-client-middleware.ts\nconst documentCacheClientMiddleware = async (action, operationName, operationType, variables) => {\n\tconsole.log({\n\t\toperationName,\n\t\toperationType,\n\t\tvariables\n\t});\n\tconst result = await action();\n\tif (isIncludedIn(operationName, graphqlEventsToSyncDrive)) window.dispatchEvent(new CustomEvent(operationName));\n\tif (isStrictEqual(operationName, \"MutateDocument\")) dispatchGraphQLClientDocumentEvent(operationName, identifierFromMutateDocumentOperationVariables(variables));\n\treturn result;\n};\n//#endregion\n//#region src/hooks/init-graphql-reactor-client.ts\nfunction useInitReactorGraphqlClient(switchboardUrl = DEFAULT_SWITCHBOARD_URL, driveId = DEFAULT_DRIVE_ID) {\n\tconst [hasInit, setHasInit] = useState(false);\n\tuseEffect(() => {\n\t\tif (hasInit) return;\n\t\tinitGraphQLReactorClientWithDocumentCache(switchboardUrl, driveId).then(() => setHasInit(true)).catch(console.error);\n\t}, [hasInit]);\n\treturn hasInit;\n}\nasync function reactorGraphqlFetchDrive(identifier) {\n\tconst client = window.ph?.reactorGraphQLClient;\n\tif (!client) throw new Error(\"Please call `useInitReactorGraphqlClient` to use its functions\");\n\tconst result = await client.GetDocument({ identifier });\n\tif (!result.document?.document) throw new Error(\"Could not fetch drive with id: \" + identifier);\n\treturn phDocumentFromQuery(result.document.document, DriveDocumentSchema);\n}\nasync function reactorGraphqlSyncDrive(driveId) {\n\tif (!window.ph?.reactorGraphQLClient) throw new Error(\"Please call `useInitReactorGraphqlClient` to use its functions\");\n\tconst drive = await reactorGraphqlFetchDrive(driveId);\n\tsetDrives([drive]);\n\tsetSelectedDrive(drive);\n}\nasync function initGraphQLReactorClientWithDocumentCache(switchboardUrl, driveId) {\n\tif (!window.ph) window.ph = {};\n\tcallEventHandlerRegisterFunctions(commonGlobalEventHandlerFunctions);\n\tsetGraphQLReactorClient(createClient(switchboardUrl, documentCacheClientMiddleware));\n\tawait reactorGraphqlSyncDrive(driveId);\n\tsetSelectedNode(void 0);\n\tsetDocumentCache(new GraphQLClientDocumentCache());\n\tforEach(graphqlEventsToSyncDrive, (name) => {\n\t\twindow.addEventListener(name, () => {\n\t\t\treactorGraphqlSyncDrive(driveId).catch(console.error);\n\t\t});\n\t});\n}\n//#endregion\n//#region src/hooks/items-in-selected-folder.ts\n/** Returns the nodes in the selected folder. */\nfunction useNodesInSelectedFolder() {\n\tconst selectedFolder = useSelectedFolder();\n\tconst nodes = useNodesInSelectedDrive();\n\tif (!selectedFolder || !nodes) return void 0;\n\treturn nodes.filter((n) => n.parentFolder === selectedFolder.id);\n}\n/** Returns the file nodes in the selected folder. */\nfunction useFileNodesInSelectedFolder() {\n\tconst nodes = useNodesInSelectedFolder();\n\tif (!nodes) return void 0;\n\treturn nodes.filter((n) => isFileNodeKind(n));\n}\n/** Returns the folder nodes in the selected folder. */\nfunction useFolderNodesInSelectedFolder() {\n\tconst nodes = useNodesInSelectedFolder();\n\tif (!nodes) return void 0;\n\treturn nodes.filter((n) => isFolderNodeKind(n));\n}\n/** Returns the documents in the selected folder. */\nfunction useDocumentsInSelectedFolder() {\n\tconst documents = useDocumentsInSelectedDrive();\n\tconst fileNodeIds = useFileNodesInSelectedFolder()?.map((node) => node.id);\n\treturn documents?.filter((d) => fileNodeIds?.includes(d.header.id));\n}\n//#endregion\n//#region src/hooks/node-actions.ts\nfunction resolveNode(driveId, node) {\n\treturn node?.id !== driveId ? node : void 0;\n}\nfunction useNodeActions() {\n\tconst [selectedDrive] = useSelectedDriveSafe();\n\tconst selectedFolder = useSelectedFolder();\n\tconst selectedParentFolder = useFolderById(useSelectedNode()?.parentFolder);\n\tconst selectedDriveId = selectedDrive?.header.id;\n\tconst drives = useDrives();\n\tasync function onAddFile(file, parent) {\n\t\tif (!selectedDriveId) return;\n\t\treturn addFile(file, selectedDriveId, file.name.replace(/\\..+/gim, \"\"), resolveNode(selectedDriveId, parent)?.id);\n\t}\n\tasync function onAddFolder(name, parent) {\n\t\tif (!selectedDriveId) return;\n\t\treturn addFolder(selectedDriveId, name, resolveNode(selectedDriveId, parent)?.id);\n\t}\n\tasync function onRenameNode(newName, node) {\n\t\tif (!selectedDriveId) return;\n\t\tif (!resolveNode(selectedDriveId, node)) {\n\t\t\tconsole.error(`Node ${node.id} not found`);\n\t\t\treturn;\n\t\t}\n\t\treturn await renameNode(selectedDriveId, node.id, newName);\n\t}\n\tasync function onCopyNode(src, target) {\n\t\tif (!selectedDriveId) return;\n\t\tconst resolvedSrc = resolveNode(selectedDriveId, src);\n\t\tif (!resolvedSrc) {\n\t\t\tconsole.error(`Node ${src.id} not found`);\n\t\t\treturn;\n\t\t}\n\t\tawait copyNode$1(selectedDriveId, resolvedSrc, resolveNode(selectedDriveId, target));\n\t}\n\tasync function onMoveNode(src, target) {\n\t\tif (!selectedDriveId) return;\n\t\tconst resolvedSrc = resolveNode(selectedDriveId, src);\n\t\tif (!resolvedSrc) {\n\t\t\tconsole.error(`Node ${src.id} not found`);\n\t\t\treturn;\n\t\t}\n\t\tconst resolvedTarget = resolveNode(selectedDriveId, target);\n\t\tif (!resolvedTarget?.id && !src.parentFolder || resolvedTarget?.id === src.parentFolder) return;\n\t\tawait moveNode$1(selectedDriveId, resolvedSrc, resolvedTarget);\n\t}\n\tasync function onDuplicateNode(src) {\n\t\tif (!selectedDriveId) return;\n\t\tconst resolvedSrc = resolveNode(selectedDriveId, src);\n\t\tif (!resolvedSrc) {\n\t\t\tconsole.error(`Node ${src.id} not found`);\n\t\t\treturn;\n\t\t}\n\t\tawait copyNode$1(selectedDriveId, resolvedSrc, resolveNode(selectedDriveId, selectedFolder ?? selectedParentFolder));\n\t}\n\tasync function onAddAndSelectNewFolder(name) {\n\t\tif (!name) return;\n\t\tif (!selectedDriveId) return;\n\t\tconst resolvedTarget = resolveNode(selectedDriveId, selectedFolder ?? selectedParentFolder);\n\t\tif (!resolvedTarget) return;\n\t\tconst newFolder = await onAddFolder(name, resolvedTarget);\n\t\tif (newFolder) setSelectedNode(newFolder);\n\t}\n\tasync function onRenameDriveNodes(newName, nodeId) {\n\t\tif (!drives) return;\n\t\tconst drivesWithNode = drives.filter((drive) => drive.state.global.nodes.some((n) => n.id === nodeId));\n\t\tawait Promise.all(drivesWithNode.map((drive) => renameDriveNode(drive.header.id, nodeId, newName)));\n\t}\n\treturn {\n\t\tonAddFile,\n\t\tonAddFolder,\n\t\tonRenameNode,\n\t\tonCopyNode,\n\t\tonMoveNode,\n\t\tonDuplicateNode,\n\t\tonAddAndSelectNewFolder,\n\t\tonRenameDriveNodes\n\t};\n}\n//#endregion\n//#region src/hooks/node-by-id.ts\n/** Returns a node in the selected drive by id. */\nfunction useNodeById(id) {\n\treturn useNodesInSelectedDrive()?.find((n) => n.id === id);\n}\n//#endregion\n//#region src/hooks/node-path.ts\n/** Returns the path to a node in the selected drive */\nfunction useNodePathById(id) {\n\tconst nodes = useNodesInSelectedDrive();\n\tif (!nodes) return [];\n\tconst path = [];\n\tlet current = nodes.find((n) => n.id === id);\n\twhile (current) {\n\t\tpath.push(current);\n\t\tif (!current.parentFolder) break;\n\t\tcurrent = nodes.find((n) => n.id === current?.parentFolder);\n\t}\n\treturn path.reverse();\n}\n/** Returns the path to the currently selected node in the selected drive. */\nfunction useSelectedNodePath() {\n\treturn useNodePathById(useSelectedNode()?.id);\n}\n//#endregion\n//#region src/hooks/parent-folder.ts\nfunction useNodeParentFolderById(id) {\n\treturn useFolderById(useNodeById(id)?.parentFolder);\n}\nfunction useParentFolderForSelectedNode() {\n\treturn useNodeParentFolderById(useSelectedNode()?.id);\n}\n//#endregion\n//#region src/hooks/selected-document.ts\n/** Returns the selected document id */\nfunction useSelectedDocumentId() {\n\tconst selectedNode = useSelectedNode();\n\treturn selectedNode && isFileNode(selectedNode) ? selectedNode.id : void 0;\n}\n/** Returns the selected document. */\nfunction useSelectedDocument() {\n\tconst [document, dispatch] = useDocumentById(useSelectedDocumentId());\n\tif (!document) throw new NoSelectedDocumentError();\n\treturn [document, dispatch];\n}\n/** Returns the selected document. */\nfunction useSelectedDocumentSafe() {\n\treturn useDocumentById(useSelectedDocumentId());\n}\nfunction useSelectedDocumentOfType(documentType) {\n\tconst documentId = useSelectedDocumentId();\n\tif (!documentType) return [];\n\tif (!documentId) throw new NoSelectedDocumentError();\n\treturn useDocumentOfType(documentId, documentType);\n}\n//#endregion\n//#region src/hooks/subgraph-modules.ts\nfunction useSubgraphModules() {\n\treturn useVetraPackages().flatMap((pkg) => pkg.subgraphs || []);\n}\n//#endregion\n//#region src/hooks/use-drive-system-info.ts\nfunction deriveSystemUrl(channelUrl) {\n\ttry {\n\t\tconst url = new URL(channelUrl);\n\t\turl.search = \"\";\n\t\turl.hash = \"\";\n\t\tif (url.pathname.endsWith(\"/graphql/r\")) url.pathname = url.pathname.slice(0, -10) + \"/graphql/system\";\n\t\telse url.pathname = \"/graphql/system\";\n\t\treturn url.toString();\n\t} catch {\n\t\treturn null;\n\t}\n}\nconst cache = /* @__PURE__ */ new Map();\nfunction useDriveSystemInfo(drive) {\n\tconst remotes = useSyncList();\n\tconst driveId = drive?.header.id;\n\tconst systemUrl = useMemo(() => {\n\t\tif (!driveId) return null;\n\t\tconst channelUrl = (remotes.find((r) => r.collectionId === driveCollectionId$1(\"main\", driveId))?.channel)?.config.url;\n\t\tif (typeof channelUrl !== \"string\") return null;\n\t\treturn deriveSystemUrl(channelUrl);\n\t}, [remotes, driveId]);\n\tconst [state, setState] = useState(() => systemUrl ? cache.get(systemUrl) ?? { status: \"loading\" } : { status: \"local\" });\n\tuseEffect(() => {\n\t\tif (!systemUrl) {\n\t\t\tsetState({ status: \"local\" });\n\t\t\treturn;\n\t\t}\n\t\tconst cached = cache.get(systemUrl);\n\t\tif (cached && cached.status !== \"loading\") {\n\t\t\tsetState(cached);\n\t\t\treturn;\n\t\t}\n\t\tsetState({ status: \"loading\" });\n\t\tcache.set(systemUrl, { status: \"loading\" });\n\t\tconst controller = new AbortController();\n\t\tfetch(systemUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({ query: \"{ system { version gitHash gitUrl } }\" }),\n\t\t\tsignal: controller.signal\n\t\t}).then(async (res) => {\n\t\t\tconst json = await res.json();\n\t\t\tif (json.errors?.length) throw new Error(json.errors.map((e) => e.message).join(\"; \"));\n\t\t\tconst sys = json.data?.system;\n\t\t\tif (!sys) throw new Error(\"Missing system in response\");\n\t\t\tconst next = {\n\t\t\t\tstatus: \"ready\",\n\t\t\t\tversion: sys.version,\n\t\t\t\tgitHash: sys.gitHash,\n\t\t\t\tgitUrl: sys.gitUrl ?? null,\n\t\t\t\thost: new URL(systemUrl).host\n\t\t\t};\n\t\t\tcache.set(systemUrl, next);\n\t\t\tsetState(next);\n\t\t}).catch((err) => {\n\t\t\tif (controller.signal.aborted) return;\n\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\tconsole.error(message);\n\t\t\tconst next = {\n\t\t\t\tstatus: \"error\",\n\t\t\t\tmessage\n\t\t\t};\n\t\t\tcache.set(systemUrl, next);\n\t\t\tsetState(next);\n\t\t});\n\t\treturn () => controller.abort();\n\t}, [systemUrl]);\n\treturn state;\n}\n//#endregion\n//#region src/hooks/use-editor-file-drop.ts\nconst hasFiles = (event) => event.dataTransfer.types.includes(\"Files\");\nconst filterByExtension = (files, accept) => {\n\tconst all = Array.from(files);\n\tif (!accept || accept.length === 0) return all;\n\tconst lowerAccept = accept.map((ext) => ext.toLowerCase());\n\treturn all.filter((file) => {\n\t\tconst lower = file.name.toLowerCase();\n\t\treturn lowerAccept.some((ext) => lower.endsWith(ext));\n\t});\n};\nfunction useEditorFileDrop(options) {\n\tconst { accept, onFiles } = options;\n\tconst [isDragOver, setIsDragOver] = useState(false);\n\tconst depthRef = useRef(0);\n\tconst onDragOver = useCallback((event) => {\n\t\tif (!hasFiles(event)) return;\n\t\tevent.preventDefault();\n\t}, []);\n\treturn {\n\t\tdragProps: {\n\t\t\tonDragEnter: useCallback((event) => {\n\t\t\t\tif (!hasFiles(event)) return;\n\t\t\t\tdepthRef.current += 1;\n\t\t\t\tif (depthRef.current === 1) setIsDragOver(true);\n\t\t\t}, []),\n\t\t\tonDragOver,\n\t\t\tonDragLeave: useCallback((event) => {\n\t\t\t\tif (!hasFiles(event)) return;\n\t\t\t\tdepthRef.current = Math.max(0, depthRef.current - 1);\n\t\t\t\tif (depthRef.current === 0) setIsDragOver(false);\n\t\t\t}, []),\n\t\t\tonDrop: useCallback((event) => {\n\t\t\t\tif (!hasFiles(event)) return;\n\t\t\t\tevent.preventDefault();\n\t\t\t\tdepthRef.current = 0;\n\t\t\t\tsetIsDragOver(false);\n\t\t\t\tconst accepted = filterByExtension(event.dataTransfer.files, accept);\n\t\t\t\tif (accepted.length === 0) return;\n\t\t\t\tonFiles(accepted);\n\t\t\t}, [accept, onFiles]),\n\t\t\t[EDITOR_FILE_DROP_OPT_OUT_ATTR]: \"\"\n\t\t},\n\t\tisDragOver\n\t};\n}\n//#endregion\n//#region src/utils/drives.ts\nconst syncStatusToUI = {\n\t[SyncStatus.Synced]: \"SUCCESS\",\n\t[SyncStatus.Outgoing]: \"SYNCING\",\n\t[SyncStatus.Incoming]: \"SYNCING\",\n\t[SyncStatus.OutgoingAndIncoming]: \"SYNCING\",\n\t[SyncStatus.Error]: \"ERROR\"\n};\nasync function getDrives(reactor) {\n\treturn (await reactor.find({ type: \"powerhouse/document-drive\" })).results;\n}\nfunction getSyncStatus(documentId, sharingType) {\n\treturn Promise.resolve(getSyncStatusSync(documentId, sharingType));\n}\nfunction getSyncStatusSync(documentId, sharingType) {\n\tif (sharingType === \"LOCAL\") return;\n\tconst syncManager = window.ph?.reactorClientModule?.reactorModule?.syncModule?.syncManager;\n\tif (!syncManager) return;\n\tconst status = syncManager.getSyncStatus(documentId);\n\tif (status === void 0) return;\n\treturn syncStatusToUI[status];\n}\n//#endregion\n//#region src/utils/get-revision-from-date.ts\nconst getRevisionFromDate = (startDate, endDate, operations = []) => {\n\tif (!startDate || !endDate) return 0;\n\tconst operation = operations.find((operation) => {\n\t\tconst operationDate = new Date(operation.timestampUtcMs);\n\t\treturn operationDate >= startDate && operationDate <= endDate;\n\t});\n\treturn operation ? operation.index : 0;\n};\n//#endregion\n//#region src/utils/switchboard.ts\nasync function getDriveIdBySlug(driveUrl, slug) {\n\tif (!driveUrl) return;\n\tconst urlParts = driveUrl.split(\"/\");\n\turlParts.pop();\n\turlParts.pop();\n\turlParts.push(\"drives\");\n\tconst drivesUrl = urlParts.join(\"/\");\n\treturn (await (await fetch(drivesUrl, {\n\t\tmethod: \"POST\",\n\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\tbody: JSON.stringify({\n\t\t\tquery: `\n query getDriveIdBySlug($slug: String!) {\n driveIdBySlug(slug: $slug)\n }\n `,\n\t\t\tvariables: { slug }\n\t\t})\n\t})).json()).data.driveIdBySlug;\n}\nfunction getSlugFromDriveUrl(driveUrl) {\n\treturn driveUrl.split(\"/\").pop();\n}\nfunction getSwitchboardGatewayUrlFromDriveUrl(driveUrl) {\n\tconst urlParts = driveUrl.split(\"/\");\n\turlParts.pop();\n\turlParts.pop();\n\turlParts.push(\"graphql\");\n\treturn urlParts.join(\"/\");\n}\nfunction getDocumentGraphqlQuery() {\n\tconst loc = GetDocumentWithOperationsDocument.loc;\n\tif (!loc) throw new Error(\"GetDocumentWithOperationsDocument is misconfigured, loc is missing.\");\n\treturn loc.source.body;\n}\nfunction buildDocumentSubgraphQuery(identifier, authToken) {\n\tconst query = getDocumentGraphqlQuery();\n\tconst variables = { identifier };\n\tconst headers = authToken ? { Authorization: `Bearer ${authToken}` } : void 0;\n\tconst payload = {\n\t\tdocument: query.trim(),\n\t\tvariables: JSON.stringify(variables, null, 2)\n\t};\n\tif (headers) payload.headers = JSON.stringify(headers);\n\treturn lzString.compressToEncodedURIComponent(JSON.stringify(payload));\n}\nfunction buildDocumentSubgraphUrl(driveUrl, identifier, authToken) {\n\treturn `${driveUrl}?explorerURLState=${buildDocumentSubgraphQuery(identifier, authToken)}`;\n}\n//#endregion\n//#region src/hooks/use-get-switchboard-link.ts\n/**\n* Hook that returns a function to generate a document's switchboard URL.\n* Only returns a function for documents in remote drives.\n* Returns null for local drives or when the document/drive cannot be determined.\n*\n* The returned function generates a fresh bearer token and builds the switchboard URL\n* with authentication when called.\n*\n* @param document - The document to create a switchboard URL generator for\n* @returns An async function that returns the switchboard URL, or null if not applicable\n*/\nfunction useGetSwitchboardLink(document) {\n\tconst [drive] = useSelectedDriveSafe();\n\tconst remotes = useSyncList();\n\tconst isRemoteDrive = useMemo(() => {\n\t\tif (!isDefined(drive)) return false;\n\t\treturn remotes.some((remote) => remote.collectionId === driveCollectionId$1(\"main\", drive.header.id));\n\t}, [remotes, drive]);\n\tconst remoteUrl = useMemo(() => {\n\t\tif (!isDefined(drive)) return null;\n\t\ttry {\n\t\t\tconst channelUrl = (remotes.find((remote) => remote.collectionId === driveCollectionId$1(\"main\", drive.header.id))?.channel)?.config.url;\n\t\t\tif (typeof channelUrl === \"string\") return channelUrl;\n\t\t\treturn null;\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error determining remote URL:\", error);\n\t\t\treturn null;\n\t\t}\n\t}, [remotes, drive]);\n\tconst renown = useRenown();\n\tconst user = useUser();\n\treturn useMemo(() => {\n\t\tif (!isRemoteDrive || !document?.header.id || !remoteUrl) return null;\n\t\treturn async () => {\n\t\t\tconst token = user?.address ? await renown?.getBearerToken({\n\t\t\t\texpiresIn: 600,\n\t\t\t\taud: remoteUrl\n\t\t\t}) : void 0;\n\t\t\treturn buildDocumentSubgraphUrl(remoteUrl, document.header.id, token);\n\t\t};\n\t}, [\n\t\tisRemoteDrive,\n\t\tremoteUrl,\n\t\tdocument,\n\t\tuser,\n\t\trenown\n\t]);\n}\n//#endregion\n//#region src/hooks/use-on-drop-file.ts\nconst useOnDropFile = (documentTypesOverride) => {\n\tconst selectedDriveId = useSelectedDriveId();\n\tconst selectedFolder = useSelectedFolder();\n\tconst documentTypes = useDocumentTypes();\n\tconst onDropFile = async (file, onProgress, resolveConflict) => {\n\t\tif (!selectedDriveId) {\n\t\t\tconsole.warn(\"No selected drive - upload skipped\");\n\t\t\treturn;\n\t\t}\n\t\tconst fileName = file.name.replace(/\\..+/gim, \"\");\n\t\tconst targetNodeId = selectedFolder?.id;\n\t\treturn await addFileWithProgress(file, selectedDriveId, fileName, targetNodeId, onProgress, documentTypesOverride ?? documentTypes, resolveConflict);\n\t};\n\treturn onDropFile;\n};\n//#endregion\n//#region src/hooks/user-permissions.ts\nfunction useUserPermissions() {\n\tconst user = useUser();\n\tconst allowList = useAllowList();\n\tif (!allowList) return {\n\t\tisAllowedToCreateDocuments: true,\n\t\tisAllowedToEditDocuments: true\n\t};\n\treturn {\n\t\tisAllowedToCreateDocuments: allowList.includes(user?.address ?? \"\"),\n\t\tisAllowedToEditDocuments: allowList.includes(user?.address ?? \"\")\n\t};\n}\n//#endregion\n//#region src/pglite/drop.ts\nasync function dropTablesInSchema(pg, schema) {\n\tawait pg.exec(`\nDO $$\nDECLARE\n _schemaname text := '${schema}';\n _tablename text;\nBEGIN\n FOR _tablename IN SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = _schemaname LOOP\n RAISE INFO 'Dropping table %.%', _schemaname, _tablename;\n EXECUTE format('DROP TABLE %I.%I CASCADE;', _schemaname, _tablename);\n END LOOP;\n IF NOT FOUND THEN\n RAISE WARNING 'Schema % does not exist', _schemaname;\n END IF;\nEND $$;\n`);\n}\nasync function truncateAllTables(pg, schema = REACTOR_SCHEMA$1) {\n\tawait dropTablesInSchema(pg, schema);\n}\nasync function dropAllReactorStorage(pg) {\n\tawait dropTablesInSchema(pg, REACTOR_SCHEMA$1);\n\tawait dropTablesInSchema(pg, \"public\");\n}\n//#endregion\n//#region src/reactor.ts\nconst DEFAULT_DEBOUNCE_DELAY_MS = 200;\nconst DEFAULT_IMMEDIATE_THRESHOLD_MS = 1e3;\nasync function _refreshReactorData(reactor) {\n\tsetDrives(await getDrives(reactor));\n}\nasync function _refreshReactorDataClient(reactor) {\n\tif (!reactor) return;\n\tsetDrives((await reactor.find({ type: \"powerhouse/document-drive\" })).results);\n}\nfunction createDebouncedRefreshReactorData(debounceDelayMs = DEFAULT_DEBOUNCE_DELAY_MS, immediateThresholdMs = DEFAULT_IMMEDIATE_THRESHOLD_MS) {\n\tlet timeout = null;\n\tlet lastRefreshTime = 0;\n\treturn (reactor, immediate = false) => {\n\t\tconst now = Date.now();\n\t\tconst timeSinceLastRefresh = now - lastRefreshTime;\n\t\tif (timeout !== null) clearTimeout(timeout);\n\t\tif (immediate || timeSinceLastRefresh >= immediateThresholdMs) {\n\t\t\tlastRefreshTime = now;\n\t\t\treturn _refreshReactorData(reactor);\n\t\t}\n\t\treturn new Promise((resolve) => {\n\t\t\ttimeout = setTimeout(() => {\n\t\t\t\tlastRefreshTime = Date.now();\n\t\t\t\t_refreshReactorData(reactor).then(resolve);\n\t\t\t}, debounceDelayMs);\n\t\t});\n\t};\n}\nfunction createDebouncedRefreshReactorDataClient(debounceDelayMs = DEFAULT_DEBOUNCE_DELAY_MS, immediateThresholdMs = DEFAULT_IMMEDIATE_THRESHOLD_MS) {\n\tlet timeout = null;\n\tlet lastRefreshTime = 0;\n\treturn (reactor, immediate = false) => {\n\t\tconst now = Date.now();\n\t\tconst timeSinceLastRefresh = now - lastRefreshTime;\n\t\tif (timeout !== null) clearTimeout(timeout);\n\t\tif (immediate || timeSinceLastRefresh >= immediateThresholdMs) {\n\t\t\tlastRefreshTime = now;\n\t\t\treturn _refreshReactorDataClient(reactor);\n\t\t}\n\t\treturn new Promise((resolve) => {\n\t\t\ttimeout = setTimeout(() => {\n\t\t\t\tlastRefreshTime = Date.now();\n\t\t\t\t_refreshReactorDataClient(reactor).then(resolve);\n\t\t\t}, debounceDelayMs);\n\t\t});\n\t};\n}\nconst refreshReactorData = createDebouncedRefreshReactorData();\nconst refreshReactorDataClient = createDebouncedRefreshReactorDataClient();\n//#endregion\n//#region src/registry/fetchers.ts\nfunction trimTrailingSlash(url) {\n\treturn url.endsWith(\"/\") ? url.slice(0, -1) : url;\n}\nasync function getPackages(registryUrl) {\n\tconst res = await fetch(`${trimTrailingSlash(registryUrl)}/packages`);\n\tif (!res.ok) throw new Error(`Registry error: HTTP ${res.status}`);\n\treturn await res.json();\n}\nasync function getPackagesByDocumentType(registryUrl, documentType) {\n\tconst encodedType = encodeURIComponent(documentType);\n\tconst res = await fetch(`${trimTrailingSlash(registryUrl)}/packages/by-document-type?type=${encodedType}`);\n\tif (!res.ok) throw new Error(`Registry error: HTTP ${res.status}`);\n\treturn await res.json();\n}\n//#endregion\n//#region src/registry/client.ts\nfunction cdnUrlToApiUrl(cdnUrl) {\n\treturn cdnUrl.replace(/\\/-\\/cdn\\/?$/, \"\");\n}\nvar RegistryClient = class {\n\tapiUrl;\n\tconstructor(cdnUrl) {\n\t\tthis.apiUrl = cdnUrlToApiUrl(cdnUrl);\n\t}\n\tasync getPackages() {\n\t\treturn await getPackages(this.apiUrl);\n\t}\n\tasync getPackagesByDocumentType(documentType) {\n\t\treturn await getPackagesByDocumentType(this.apiUrl, documentType);\n\t}\n\tasync searchPackages(query) {\n\t\tconst packages = await this.getPackages();\n\t\tif (!query) return packages;\n\t\tconst lowerQuery = query.toLowerCase();\n\t\treturn packages.filter((pkg) => pkg.name.toLowerCase().includes(lowerQuery) || pkg.manifest?.description?.toLowerCase().includes(lowerQuery));\n\t}\n\tonPublish(callback) {\n\t\tconst eventSource = new EventSource(`${this.apiUrl}/-/events`);\n\t\teventSource.addEventListener(\"publish\", (e) => {\n\t\t\tcallback(JSON.parse(e.data));\n\t\t});\n\t\treturn () => {\n\t\t\teventSource.close();\n\t\t};\n\t}\n};\n//#endregion\n//#region src/remote-controller/action-tracker.ts\n/**\n* Tracks pending actions with their operation context (prevOpHash, prevOpIndex).\n* Actions are accumulated until flushed (on push).\n*/\nvar ActionTracker = class {\n\tpending = [];\n\t/** Track a new action with its operation context. */\n\ttrack(action, prevOpHash, prevOpIndex) {\n\t\tthis.pending.push({\n\t\t\taction,\n\t\t\tprevOpHash,\n\t\t\tprevOpIndex\n\t\t});\n\t}\n\t/** Flush all pending actions and return them. Clears the internal queue. */\n\tflush() {\n\t\tconst actions = this.pending;\n\t\tthis.pending = [];\n\t\treturn actions;\n\t}\n\t/** Number of pending actions. */\n\tget count() {\n\t\treturn this.pending.length;\n\t}\n\t/** Prepend previously flushed actions back to the queue (for retry on failure). */\n\trestore(actions) {\n\t\tthis.pending = [...actions, ...this.pending];\n\t}\n\t/** Clear all pending actions without returning them. */\n\tclear() {\n\t\tthis.pending = [];\n\t}\n};\n//#endregion\n//#region src/remote-controller/remote-client.ts\n/**\n* Thin facade over the GraphQL SDK for remote document operations.\n*/\nconst DEFAULT_PAGE_SIZE = 100;\nvar RemoteClient = class {\n\tpageSize;\n\tconstructor(client, pageSize) {\n\t\tthis.client = client;\n\t\tthis.pageSize = pageSize ?? DEFAULT_PAGE_SIZE;\n\t}\n\t/** Fetch a document by identifier. Returns null if not found. */\n\tasync getDocument(identifier, branch) {\n\t\treturn (await this.client.GetDocument({\n\t\t\tidentifier,\n\t\t\tview: branch ? { branch } : void 0\n\t\t})).document ?? null;\n\t}\n\t/**\n\t* Fetch a document and its operations.\n\t*\n\t* When scopes are provided and BatchGetDocumentWithOperations is available,\n\t* fetches the document and per-scope operations in a single HTTP request.\n\t* Otherwise falls back to GetDocumentWithOperations for the first page,\n\t* then paginates remaining operations per scope.\n\t*/\n\tasync getDocumentWithOperations(identifier, branch, sinceRevision, scopes) {\n\t\tif (this.client.BatchGetDocumentWithOperations && scopes && scopes.length > 0) return this.batchGetDocumentWithOperations(identifier, branch, sinceRevision, scopes);\n\t\tconst result = await this.client.GetDocumentWithOperations({\n\t\t\tidentifier,\n\t\t\tview: branch ? { branch } : void 0,\n\t\t\toperationsPaging: {\n\t\t\t\tlimit: this.pageSize,\n\t\t\t\tcursor: null\n\t\t\t}\n\t\t});\n\t\tif (!result.document) return null;\n\t\tconst doc = result.document.document;\n\t\tconst opsPage = doc.operations;\n\t\tconst operationsByScope = {};\n\t\tif (opsPage) for (const op of opsPage.items) (operationsByScope[op.action.scope] ??= []).push(op);\n\t\tconst expectedTotal = doc.revisionsList.reduce((sum, r) => sum + r.revision, 0);\n\t\tif ((opsPage?.items.length ?? 0) >= expectedTotal) return {\n\t\t\tdocument: doc,\n\t\t\tchildIds: result.document.childIds,\n\t\t\toperations: { operationsByScope }\n\t\t};\n\t\tconst allScopes = doc.revisionsList.map((r) => r.scope);\n\t\tconst allOps = await this.getAllOperations(doc.id, branch, sinceRevision, allScopes);\n\t\treturn {\n\t\t\tdocument: doc,\n\t\t\tchildIds: result.document.childIds,\n\t\t\toperations: allOps\n\t\t};\n\t}\n\t/**\n\t* Fetch document + per-scope operations in a single HTTP request\n\t* via BatchGetDocumentWithOperations, then paginate any remaining pages.\n\t*/\n\tasync batchGetDocumentWithOperations(identifier, branch, sinceRevision, scopes) {\n\t\tconst view = branch ? { branch } : void 0;\n\t\tconst filters = scopes.map((scope) => ({\n\t\t\tdocumentId: identifier,\n\t\t\tbranch: branch ?? null,\n\t\t\tsinceRevision: sinceRevision?.[scope] ?? 0,\n\t\t\tscopes: [scope]\n\t\t}));\n\t\tconst pagings = scopes.map(() => ({\n\t\t\tlimit: this.pageSize,\n\t\t\tcursor: null\n\t\t}));\n\t\tconst result = await this.client.BatchGetDocumentWithOperations(identifier, view, filters, pagings);\n\t\tif (!result.document) return null;\n\t\tconst operationsByScope = {};\n\t\tlet pending = [];\n\t\tfor (let i = 0; i < scopes.length; i++) {\n\t\t\tconst page = result.operations[i];\n\t\t\tfor (const op of page.items) (operationsByScope[op.action.scope] ??= []).push(op);\n\t\t\tif (page.hasNextPage && page.cursor) pending.push({\n\t\t\t\tscope: scopes[i],\n\t\t\t\tfilter: filters[i],\n\t\t\t\tcursor: page.cursor\n\t\t\t});\n\t\t}\n\t\twhile (pending.length > 0) {\n\t\t\tconst pages = await this.fetchOperationPages(pending.map((p) => p.filter), pending.map((p) => ({\n\t\t\t\tlimit: this.pageSize,\n\t\t\t\tcursor: p.cursor\n\t\t\t})));\n\t\t\tconst nextPending = [];\n\t\t\tfor (let i = 0; i < pending.length; i++) {\n\t\t\t\tconst page = pages[i];\n\t\t\t\tfor (const op of page.items) (operationsByScope[op.action.scope] ??= []).push(op);\n\t\t\t\tif (page.hasNextPage && page.cursor) nextPending.push({\n\t\t\t\t\t...pending[i],\n\t\t\t\t\tcursor: page.cursor\n\t\t\t\t});\n\t\t\t}\n\t\t\tpending = nextPending;\n\t\t}\n\t\treturn {\n\t\t\tdocument: result.document.document,\n\t\t\tchildIds: result.document.childIds,\n\t\t\toperations: { operationsByScope }\n\t\t};\n\t}\n\t/**\n\t* Fetch all operations for a document, paginating through all pages.\n\t* Each scope is queried individually because the API only returns\n\t* pagination cursors for single-scope queries.\n\t*/\n\tasync getAllOperations(documentId, branch, sinceRevision, scopes) {\n\t\tif (scopes && scopes.length > 0) {\n\t\t\tconst operationsByScope = {};\n\t\t\tlet pending = scopes.map((scope) => ({\n\t\t\t\tscope,\n\t\t\t\tfilter: {\n\t\t\t\t\tdocumentId,\n\t\t\t\t\tbranch: branch ?? null,\n\t\t\t\t\tsinceRevision: sinceRevision?.[scope] ?? 0,\n\t\t\t\t\tscopes: [scope]\n\t\t\t\t},\n\t\t\t\tcursor: null\n\t\t\t}));\n\t\t\twhile (pending.length > 0) {\n\t\t\t\tconst pages = await this.fetchOperationPages(pending.map((p) => p.filter), pending.map((p) => ({\n\t\t\t\t\tlimit: this.pageSize,\n\t\t\t\t\tcursor: p.cursor\n\t\t\t\t})));\n\t\t\t\tconst nextPending = [];\n\t\t\t\tfor (let i = 0; i < pending.length; i++) {\n\t\t\t\t\tconst page = pages[i];\n\t\t\t\t\tfor (const op of page.items) (operationsByScope[op.action.scope] ??= []).push(op);\n\t\t\t\t\tif (page.hasNextPage && page.cursor) nextPending.push({\n\t\t\t\t\t\t...pending[i],\n\t\t\t\t\t\tcursor: page.cursor\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tpending = nextPending;\n\t\t\t}\n\t\t\treturn { operationsByScope };\n\t\t}\n\t\treturn this.fetchOperationsForScope(documentId, branch);\n\t}\n\t/**\n\t* Fetch one page of operations per filter.\n\t* Uses the composed query (single HTTP request) when available,\n\t* otherwise falls back to parallel individual requests.\n\t*/\n\tasync fetchOperationPages(filters, pagings) {\n\t\tif (this.client.BatchGetDocumentOperations) return this.client.BatchGetDocumentOperations(filters, pagings);\n\t\treturn Promise.all(filters.map((filter, i) => this.client.GetDocumentOperations({\n\t\t\tfilter,\n\t\t\tpaging: pagings[i]\n\t\t}).then((r) => r.documentOperations)));\n\t}\n\t/** Fetch all pages of operations for a single scope (or all scopes if none specified). */\n\tasync fetchOperationsForScope(documentId, branch, sinceRevision, scope) {\n\t\tconst operationsByScope = {};\n\t\tlet cursor;\n\t\tlet hasNextPage = true;\n\t\twhile (hasNextPage) {\n\t\t\tconst page = (await this.client.GetDocumentOperations({\n\t\t\t\tfilter: {\n\t\t\t\t\tdocumentId,\n\t\t\t\t\tbranch: branch ?? null,\n\t\t\t\t\tsinceRevision: sinceRevision ?? 0,\n\t\t\t\t\tscopes: scope ? [scope] : null\n\t\t\t\t},\n\t\t\t\tpaging: {\n\t\t\t\t\tlimit: this.pageSize,\n\t\t\t\t\tcursor: cursor ?? null\n\t\t\t\t}\n\t\t\t})).documentOperations;\n\t\t\tfor (const op of page.items) {\n\t\t\t\tconst s = op.action.scope;\n\t\t\t\t(operationsByScope[s] ??= []).push(op);\n\t\t\t}\n\t\t\thasNextPage = page.hasNextPage;\n\t\t\tcursor = page.cursor;\n\t\t}\n\t\treturn { operationsByScope };\n\t}\n\t/** Push actions to an existing document via MutateDocument. */\n\tasync pushActions(documentIdentifier, actions, branch) {\n\t\treturn (await this.client.MutateDocument({\n\t\t\tdocumentIdentifier,\n\t\t\tactions,\n\t\t\tview: branch ? { branch } : void 0\n\t\t})).mutateDocument;\n\t}\n\t/** Create a new document on the remote. */\n\tasync createDocument(document, parentIdentifier) {\n\t\treturn (await this.client.CreateDocument({\n\t\t\tdocument,\n\t\t\tparentIdentifier: parentIdentifier ?? null\n\t\t})).createDocument;\n\t}\n\t/** Create an empty document of a given type on the remote. */\n\tasync createEmptyDocument(documentType, parentIdentifier) {\n\t\treturn (await this.client.CreateEmptyDocument({\n\t\t\tdocumentType,\n\t\t\tparentIdentifier: parentIdentifier ?? null\n\t\t})).createEmptyDocument;\n\t}\n\t/** Delete a document on the remote. Returns true if successful. */\n\tasync deleteDocument(identifier, propagate) {\n\t\treturn (await this.client.DeleteDocument({\n\t\t\tidentifier,\n\t\t\tpropagate\n\t\t})).deleteDocument;\n\t}\n};\n//#endregion\n//#region src/remote-controller/utils.ts\n/** Convert SCREAMING_SNAKE_CASE to camelCase (e.g. \"SET_MODEL_NAME\" → \"setModelName\"). */\nfunction screamingSnakeToCamel(s) {\n\treturn s.toLowerCase().replace(/_([a-z])/g, (_, c) => c.toUpperCase());\n}\n/** Error thrown when a push conflict is detected with the \"reject\" strategy. */\nvar ConflictError = class extends Error {\n\tconstructor(conflict) {\n\t\tsuper(\"Push conflict: remote has new operations since last pull\");\n\t\tthis.conflict = conflict;\n\t\tthis.name = \"ConflictError\";\n\t}\n};\n/** Convert a remote operation to the local Operation type. */\nfunction remoteOperationToLocal(remote) {\n\treturn {\n\t\tid: remote.id ?? \"\",\n\t\tindex: remote.index,\n\t\tskip: remote.skip,\n\t\ttimestampUtcMs: remote.timestampUtcMs,\n\t\thash: remote.hash,\n\t\terror: remote.error ?? void 0,\n\t\taction: {\n\t\t\tid: remote.action.id,\n\t\t\ttype: remote.action.type,\n\t\t\ttimestampUtcMs: remote.action.timestampUtcMs,\n\t\t\tinput: remote.action.input,\n\t\t\tscope: remote.action.scope,\n\t\t\tattachments: remote.action.attachments?.map((a) => ({\n\t\t\t\tdata: a.data,\n\t\t\t\tmimeType: a.mimeType,\n\t\t\t\thash: a.hash,\n\t\t\t\textension: a.extension ?? void 0,\n\t\t\t\tfileName: a.fileName ?? void 0\n\t\t\t})),\n\t\t\tcontext: remote.action.context?.signer ? { signer: {\n\t\t\t\tuser: remote.action.context.signer.user ?? {\n\t\t\t\t\taddress: \"\",\n\t\t\t\t\tnetworkId: \"\",\n\t\t\t\t\tchainId: 0\n\t\t\t\t},\n\t\t\t\tapp: remote.action.context.signer.app ?? {\n\t\t\t\t\tname: \"\",\n\t\t\t\t\tkey: \"\"\n\t\t\t\t},\n\t\t\t\tsignatures: remote.action.context.signer.signatures.map((s) => deserializeSignature(s))\n\t\t\t} } : void 0\n\t\t}\n\t};\n}\n/**\n* Deserialize a signature string back to a 5-element tuple.\n* The server serializes tuples via `tuple.join(\", \")`.\n*/\nfunction deserializeSignature(s) {\n\tconst parts = s.split(\", \");\n\treturn [\n\t\tparts[0] ?? \"\",\n\t\tparts[1] ?? \"\",\n\t\tparts[2] ?? \"\",\n\t\tparts[3] ?? \"\",\n\t\tparts[4] ?? \"\"\n\t];\n}\n/** Convert remote operations to local DocumentOperations format. */\nfunction convertRemoteOperations(operationsByScope) {\n\tconst operations = {};\n\tfor (const [scope, remoteOps] of Object.entries(operationsByScope)) operations[scope] = remoteOps.map((op) => remoteOperationToLocal(op));\n\treturn operations;\n}\n/** Reconstruct a PHDocument from remote document data and operations. */\nfunction buildPulledDocument(remoteDoc, operations, initialDoc, branch) {\n\treturn {\n\t\theader: {\n\t\t\t...initialDoc.header,\n\t\t\tid: remoteDoc.id,\n\t\t\tname: remoteDoc.name,\n\t\t\tslug: remoteDoc.slug ?? \"\",\n\t\t\tdocumentType: remoteDoc.documentType,\n\t\t\tcreatedAtUtcIso: typeof remoteDoc.createdAtUtcIso === \"string\" ? remoteDoc.createdAtUtcIso : remoteDoc.createdAtUtcIso.toISOString(),\n\t\t\tlastModifiedAtUtcIso: typeof remoteDoc.lastModifiedAtUtcIso === \"string\" ? remoteDoc.lastModifiedAtUtcIso : remoteDoc.lastModifiedAtUtcIso.toISOString(),\n\t\t\trevision: Object.fromEntries(remoteDoc.revisionsList.map((r) => [r.scope, r.revision])),\n\t\t\tbranch\n\t\t},\n\t\tstate: remoteDoc.state,\n\t\tinitialState: initialDoc.initialState,\n\t\toperations,\n\t\tclipboard: []\n\t};\n}\n/** Extract revision map from a remote document's revisionsList. */\nfunction extractRevisionMap(revisionsList) {\n\treturn Object.fromEntries(revisionsList.map((r) => [r.scope, r.revision]));\n}\n/**\n* Check if any scope in currentRevision is ahead of knownRevision.\n* When `scopes` is provided, only those scopes are checked.\n*/\nfunction hasRevisionConflict(currentRevision, knownRevision, scopes) {\n\tfor (const scope in currentRevision) {\n\t\tif (scopes && !scopes.has(scope)) continue;\n\t\tif ((currentRevision[scope] ?? 0) > (knownRevision[scope] ?? 0)) return true;\n\t}\n\treturn false;\n}\n//#endregion\n//#region src/remote-controller/remote-controller.ts\n/**\n* A controller that wraps a PHDocumentController with remote push/pull capabilities.\n* Composes a local controller and adds GraphQL-based sync with a reactor server.\n*/\nvar RemoteDocumentController = class RemoteDocumentController {\n\tinner;\n\tremoteClient;\n\ttracker = new ActionTracker();\n\toptions;\n\tdocumentId;\n\tremoteRevision = {};\n\thasPulled = false;\n\tpushScheduled = false;\n\tpushQueue = Promise.resolve();\n\tlisteners = [];\n\tconstructor(inner, options) {\n\t\tthis.inner = inner;\n\t\tthis.options = options;\n\t\tthis.documentId = options.documentId ?? \"\";\n\t\tthis.remoteClient = new RemoteClient(options.client, options.operationsPageSize);\n\t\tthis.setupActionInterceptors();\n\t}\n\tget header() {\n\t\treturn this.inner.header;\n\t}\n\tget state() {\n\t\treturn this.inner.state;\n\t}\n\tget operations() {\n\t\treturn this.inner.operations;\n\t}\n\tget document() {\n\t\treturn this.inner.document;\n\t}\n\tget status() {\n\t\treturn {\n\t\t\tpendingActionCount: this.tracker.count,\n\t\t\tconnected: this.documentId !== \"\",\n\t\t\tdocumentId: this.documentId,\n\t\t\tremoteRevision: { ...this.remoteRevision }\n\t\t};\n\t}\n\t/** Register a listener for document changes. Returns an unsubscribe function. */\n\tonChange(listener) {\n\t\tthis.listeners.push(listener);\n\t\treturn () => {\n\t\t\tthis.listeners = this.listeners.filter((l) => l !== listener);\n\t\t};\n\t}\n\tnotifyListeners(source) {\n\t\tif (this.listeners.length === 0) return;\n\t\tconst event = {\n\t\t\tsource,\n\t\t\tdocument: this.document\n\t\t};\n\t\tfor (const listener of this.listeners) listener(event);\n\t}\n\t/** Push all pending actions to remote, then pull latest state. */\n\tasync push() {\n\t\tlet tracked = this.tracker.flush();\n\t\tif (tracked.length === 0 && this.documentId !== \"\") return {\n\t\t\tremoteDocument: await this.pull(),\n\t\t\tactionCount: 0,\n\t\t\toperations: []\n\t\t};\n\t\ttry {\n\t\t\tawait this.ensureRemoteDocument();\n\t\t\tif (this.options.onConflict && tracked.length > 0) tracked = await this.handleConflicts(tracked, this.options.onConflict);\n\t\t} catch (error) {\n\t\t\tthis.tracker.restore(tracked);\n\t\t\tthrow error;\n\t\t}\n\t\tlet pushedActions = [];\n\t\ttry {\n\t\t\tif (tracked.length > 0) {\n\t\t\t\tconst actions = await this.prepareActionsForPush(tracked);\n\t\t\t\tpushedActions = actions;\n\t\t\t\tawait this.remoteClient.pushActions(this.documentId, actions, this.options.branch);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.tracker.restore(tracked);\n\t\t\tthrow error;\n\t\t}\n\t\treturn {\n\t\t\tremoteDocument: await this.pull(),\n\t\t\tactionCount: tracked.length,\n\t\t\toperations: pushedActions\n\t\t};\n\t}\n\t/** Delete the document on the remote. */\n\tasync delete(propagate) {\n\t\tif (this.documentId === \"\") throw new Error(\"Cannot delete: no document ID set\");\n\t\treturn await this.remoteClient.deleteDocument(this.documentId, propagate);\n\t}\n\t/** Pull latest state from remote, replacing local document. Returns the remote document data. */\n\tasync pull() {\n\t\tif (this.documentId === \"\") throw new Error(\"Cannot pull: no document ID set\");\n\t\tconst { remoteDoc, operations } = await this.fetchDocumentAndOperations();\n\t\tconst pulledDocument = buildPulledDocument(remoteDoc, operations, this.inner.module.utils.createDocument(), this.options.branch ?? \"main\");\n\t\tconst ControllerClass = this.inner.constructor;\n\t\tthis.inner = new ControllerClass(pulledDocument);\n\t\tthis.setupActionInterceptors();\n\t\tthis.tracker.clear();\n\t\tthis.remoteRevision = extractRevisionMap(remoteDoc.revisionsList);\n\t\tthis.notifyListeners(\"pull\");\n\t\treturn remoteDoc;\n\t}\n\t/**\n\t* Pull an existing document from remote and create a controller for it.\n\t*/\n\tstatic async pull(ControllerClass, options) {\n\t\tconst remote = new RemoteDocumentController(new ControllerClass(), options);\n\t\tif (options.documentId) await remote.pull();\n\t\treturn remote;\n\t}\n\t/**\n\t* Wrap an existing controller instance with remote capabilities.\n\t* Pending local actions on the inner controller are NOT tracked\n\t* (only new actions through the remote controller are tracked).\n\t*/\n\tstatic from(controller, options) {\n\t\treturn new RemoteDocumentController(controller, options);\n\t}\n\t/** Create the document on the remote if it doesn't exist yet. */\n\tasync ensureRemoteDocument() {\n\t\tif (this.documentId !== \"\") return;\n\t\tthis.documentId = (await this.remoteClient.createEmptyDocument(this.inner.header.documentType, this.options.parentIdentifier)).id;\n\t}\n\t/** Set up interceptors for all action methods on the inner controller. */\n\tsetupActionInterceptors() {\n\t\tconst module = this.inner[\"module\"];\n\t\tfor (const actionType in module.actions) {\n\t\t\tif (actionType in RemoteDocumentController.prototype) continue;\n\t\t\tObject.defineProperty(this, actionType, {\n\t\t\t\tvalue: (input) => {\n\t\t\t\t\tconst opCountsBefore = {};\n\t\t\t\t\tfor (const scope in this.inner.operations) opCountsBefore[scope] = this.inner.operations[scope].length;\n\t\t\t\t\tthis.inner[actionType](input);\n\t\t\t\t\tconst newOp = this.findNewOperation(opCountsBefore);\n\t\t\t\t\tconst prevOp = newOp ? this.getLastOperationInScope(newOp.action.scope, newOp) : void 0;\n\t\t\t\t\tconst prevOpHash = prevOp?.hash ?? \"\";\n\t\t\t\t\tconst prevOpIndex = prevOp?.index ?? -1;\n\t\t\t\t\tif (!newOp) return this;\n\t\t\t\t\tthis.tracker.track(newOp.action, prevOpHash, prevOpIndex);\n\t\t\t\t\tthis.notifyListeners(\"action\");\n\t\t\t\t\tif (this.options.mode === \"streaming\") this.schedulePush();\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t});\n\t\t}\n\t}\n\t/**\n\t* Find the new operation added after applying an action,\n\t* by comparing current operation counts against a previous snapshot.\n\t*/\n\tfindNewOperation(opCountsBefore) {\n\t\tconst ops = this.inner.operations;\n\t\tfor (const scope in ops) {\n\t\t\tconst scopeOps = ops[scope];\n\t\t\tconst prevCount = opCountsBefore[scope] ?? 0;\n\t\t\tif (scopeOps.length > prevCount) return scopeOps[scopeOps.length - 1];\n\t\t}\n\t}\n\t/**\n\t* Get the last operation in a specific scope, optionally excluding\n\t* a given operation (e.g. the one just added).\n\t*/\n\tgetLastOperationInScope(scope, excludeOp) {\n\t\tconst scopeOps = this.inner.operations[scope];\n\t\tif (scopeOps.length === 0) return void 0;\n\t\tfor (let i = scopeOps.length - 1; i >= 0; i--) if (scopeOps[i] !== excludeOp) return scopeOps[i];\n\t}\n\t/**\n\t* Detect and handle conflicts between local pending actions and remote state.\n\t* Returns the (possibly rebased) tracked actions to push.\n\t*/\n\tasync handleConflicts(localTracked, strategy) {\n\t\tconst remoteResult = await this.remoteClient.getDocument(this.documentId, this.options.branch);\n\t\tif (!remoteResult) throw new Error(`Document \"${this.documentId}\" not found on remote`);\n\t\tconst currentRevision = extractRevisionMap(remoteResult.document.revisionsList);\n\t\tconst localScopes = new Set(localTracked.map((t) => t.action.scope));\n\t\tif (!hasRevisionConflict(currentRevision, this.remoteRevision, localScopes)) return localTracked;\n\t\tconst conflictingScopes = [...localScopes].filter((scope) => (currentRevision[scope] ?? 0) > (this.remoteRevision[scope] ?? 0));\n\t\tconst { operationsByScope } = await this.remoteClient.getAllOperations(this.documentId, this.options.branch, this.remoteRevision, conflictingScopes);\n\t\tconst remoteOperations = {};\n\t\tfor (const [scope, ops] of Object.entries(operationsByScope)) remoteOperations[scope] = ops;\n\t\tconst conflictInfo = {\n\t\t\tremoteOperations,\n\t\t\tlocalActions: localTracked,\n\t\t\tknownRevision: { ...this.remoteRevision },\n\t\t\tcurrentRevision: { ...currentRevision }\n\t\t};\n\t\tif (strategy === \"reject\") throw new ConflictError(conflictInfo);\n\t\tif (strategy === \"rebase\") return this.pullAndReplay(localTracked.map((t) => t.action));\n\t\tconst mergedActions = await strategy(conflictInfo);\n\t\treturn this.pullAndReplay(mergedActions);\n\t}\n\t/**\n\t* Pull latest remote state and replay actions through interceptors.\n\t* Returns newly tracked actions with correct prevOpHash values.\n\t*/\n\tasync pullAndReplay(actions) {\n\t\tawait this.pull();\n\t\tfor (const action of actions) {\n\t\t\tconst methodName = screamingSnakeToCamel(action.type);\n\t\t\tconst method = this[methodName];\n\t\t\tif (typeof method === \"function\") method.call(this, action.input);\n\t\t}\n\t\treturn this.tracker.flush();\n\t}\n\t/** Prepare actions for push, optionally signing them. */\n\tasync prepareActionsForPush(tracked) {\n\t\tconst actions = [];\n\t\tfor (const { action, prevOpHash, prevOpIndex } of tracked) {\n\t\t\tlet prepared = {\n\t\t\t\t...action,\n\t\t\t\tcontext: {\n\t\t\t\t\t...action.context,\n\t\t\t\t\tprevOpHash,\n\t\t\t\t\tprevOpIndex\n\t\t\t\t}\n\t\t\t};\n\t\t\tif (this.options.signer) prepared = await this.signAction(prepared);\n\t\t\tactions.push(prepared);\n\t\t}\n\t\treturn actions;\n\t}\n\t/** Sign an action using the configured signer, preserving existing signatures. */\n\tasync signAction(action) {\n\t\tconst signer = this.options.signer;\n\t\tconst signature = await signer.signAction(action);\n\t\tconst existingSignatures = action.context?.signer?.signatures ?? [];\n\t\treturn {\n\t\t\t...action,\n\t\t\tcontext: {\n\t\t\t\t...action.context,\n\t\t\t\tsigner: {\n\t\t\t\t\tuser: signer.user,\n\t\t\t\t\tapp: signer.app,\n\t\t\t\t\tsignatures: [...existingSignatures, signature]\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\t/**\n\t* Fetch document and operations from the remote.\n\t*\n\t* On the first pull, uses the combined document+operations query.\n\t* On subsequent pulls, fetches only new operations per scope using\n\t* sinceRevision, then merges with existing local operations.\n\t* Falls back to a full fetch if the merge produces a count mismatch.\n\t*/\n\tasync fetchDocumentAndOperations() {\n\t\tif (this.hasPulled) return this.incrementalFetch();\n\t\tconst result = await this.remoteClient.getDocumentWithOperations(this.documentId, this.options.branch);\n\t\tif (!result) throw new Error(`Document \"${this.documentId}\" not found on remote`);\n\t\tthis.hasPulled = true;\n\t\treturn {\n\t\t\tremoteDoc: result.document,\n\t\t\toperations: convertRemoteOperations(result.operations.operationsByScope)\n\t\t};\n\t}\n\t/**\n\t* Incremental fetch: fetches the document and only new operations per scope\n\t* using sinceRevision in a single request when possible.\n\t* Falls back to a full fetch on count mismatch.\n\t*/\n\tasync incrementalFetch() {\n\t\tconst scopes = Object.keys(this.remoteRevision);\n\t\tconst result = await this.remoteClient.getDocumentWithOperations(this.documentId, this.options.branch, this.remoteRevision, scopes.length > 0 ? scopes : void 0);\n\t\tif (!result) throw new Error(`Document \"${this.documentId}\" not found on remote`);\n\t\tconst remoteDoc = result.document;\n\t\tconst expectedRevision = extractRevisionMap(remoteDoc.revisionsList);\n\t\tconst newOps = convertRemoteOperations(result.operations.operationsByScope);\n\t\tconst merged = this.mergeOperations(this.inner.operations, newOps);\n\t\tif (this.hasExpectedOperationCounts(merged, expectedRevision)) return {\n\t\t\tremoteDoc,\n\t\t\toperations: merged\n\t\t};\n\t\treturn this.fullFetch(remoteDoc);\n\t}\n\t/**\n\t* Full fetch fallback: fetches all operations from the beginning.\n\t* Used when an incremental fetch produces a count mismatch.\n\t*/\n\tasync fullFetch(remoteDoc) {\n\t\tconst { operationsByScope } = await this.remoteClient.getAllOperations(this.documentId, this.options.branch);\n\t\treturn {\n\t\t\tremoteDoc,\n\t\t\toperations: convertRemoteOperations(operationsByScope)\n\t\t};\n\t}\n\t/**\n\t* Validate that the merged operations match the expected revision per scope.\n\t* Each scope's operation count should equal its revision number.\n\t*/\n\thasExpectedOperationCounts(operations, expectedRevision) {\n\t\tfor (const [scope, revision] of Object.entries(expectedRevision)) if ((scope in operations ? operations[scope].length : 0) !== revision) return false;\n\t\treturn true;\n\t}\n\t/**\n\t* Merge existing local operations with newly fetched operations.\n\t* Appends new operations to existing ones per scope.\n\t*/\n\tmergeOperations(existingOps, newOps) {\n\t\tconst merged = {};\n\t\tfor (const [scope, ops] of Object.entries(existingOps)) if (ops.length > 0) merged[scope] = [...ops];\n\t\tfor (const [scope, ops] of Object.entries(newOps)) if (ops.length > 0) (merged[scope] ??= []).push(...ops);\n\t\treturn merged;\n\t}\n\t/** Schedule a push via microtask (for streaming mode coalescing). */\n\tschedulePush() {\n\t\tif (this.pushScheduled) return;\n\t\tthis.pushScheduled = true;\n\t\tqueueMicrotask(() => {\n\t\t\tthis.pushScheduled = false;\n\t\t\tthis.pushQueue = this.pushQueue.then(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.push();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.options.onPushError?.(error);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n};\n//#endregion\n//#region src/storage/base-storage.ts\nvar BaseStorage = class {\n\t[Symbol.iterator]() {\n\t\treturn this.entries();\n\t}\n\tforEach(callback) {\n\t\tfor (const [key, value] of this) callback(value, key, this);\n\t}\n};\n//#endregion\n//#region src/storage/local-storage.ts\nvar BrowserLocalStorage = class extends BaseStorage {\n\t#namespace;\n\t#storage = window.localStorage;\n\tconstructor(namespace) {\n\t\tsuper();\n\t\tthis.#namespace = namespace;\n\t}\n\t#readMap() {\n\t\tconst raw = this.#storage.getItem(this.#namespace);\n\t\tif (!raw) return /* @__PURE__ */ new Map();\n\t\treturn new Map(JSON.parse(raw));\n\t}\n\t#writeMap(map) {\n\t\tthis.#storage.setItem(this.#namespace, JSON.stringify(Array.from(map.entries())));\n\t}\n\tget(key) {\n\t\treturn this.#readMap().get(key);\n\t}\n\tset(key, value) {\n\t\tconst map = this.#readMap();\n\t\tmap.set(key, value);\n\t\tthis.#writeMap(map);\n\t}\n\tdelete(key) {\n\t\tconst map = this.#readMap();\n\t\tconst deleted = map.delete(key);\n\t\tif (deleted) this.#writeMap(map);\n\t\treturn deleted;\n\t}\n\thas(key) {\n\t\treturn this.#readMap().has(key);\n\t}\n\tclear() {\n\t\tthis.#storage.removeItem(this.#namespace);\n\t}\n\tentries() {\n\t\treturn this.#readMap().entries();\n\t}\n\tkeys() {\n\t\treturn this.#readMap().keys();\n\t}\n\tvalues() {\n\t\treturn this.#readMap().values();\n\t}\n\t[Symbol.iterator]() {\n\t\treturn this.#readMap().entries();\n\t}\n};\n//#endregion\nexport { ActionTracker, BaseStorage, BrowserLocalStorage, COMMON_PACKAGE_ID, CREDENTIAL_SCHEMA_EIP712_TYPE, CREDENTIAL_SUBJECT_TYPE, CREDENTIAL_TYPES, ChannelScheme, ChevronDownIcon, ConflictError, CopyIcon, DEFAULT_DRIVE_EDITOR_ID, DEFAULT_DRIVE_ID, DEFAULT_SWITCHBOARD_URL, DOMAIN_TYPE, DisconnectIcon, DocumentCache, DocumentChangeType, DocumentIntegrityService, EDITOR_FILE_DROP_OPT_OUT_ATTR, GqlRequestChannel, GraphQLClientDocumentCache, ISSUER_TYPE, InMemoryQueue, IntervalPollTimer, PollBehavior, PropagationMode, REACTOR_SCHEMA, RENOWN_CHAIN_ID, RENOWN_NETWORK_ID, RENOWN_URL, ReactorBuilder, ReactorClientBuilder, RegistryClient, RelationalDbProcessor, RemoteClient, RemoteDocumentController, Renown, RenownAuthButton, RenownLoginButton, RenownLogo, RenownUserButton, SpinnerIcon, SyncOperationStatus, UserIcon, VERIFIABLE_CREDENTIAL_EIP712_TYPE, addAllowListEventHandler, addAllowedDocumentTypesEventHandler, addAnalyticsDatabaseNameEventHandler, addBasePathEventHandler, addCliVersionEventHandler, addDefaultDrivesUrlEventHandler, addDisabledEditorsEventHandler, addDocument, addDocumentCacheEventHandler, addDraggingNodeEventHandler, addDrive, addDrivesEventHandler, addDrivesPreserveStrategyEventHandler, addEnabledEditorsEventHandler, addFeaturesEventHandler, addFileUploadOperationsChunkSizeEventHandler, addFolder, addGaTrackingIdEventHandler, addGraphQLReactorClientEventHandler, addIsAddCloudDrivesEnabledEventHandler, addIsAddDriveEnabledEventHandler, addIsAddLocalDrivesEnabledEventHandler, addIsAddPublicDrivesEnabledEventHandler, addIsAnalyticsDatabaseWorkerEnabledEventHandler, addIsAnalyticsEnabledEventHandler, addIsAnalyticsExternalProcessorsEnabledEventHandler, addIsCloudDrivesEnabledEventHandler, addIsDeleteCloudDrivesEnabledEventHandler, addIsDeleteLocalDrivesEnabledEventHandler, addIsDeletePublicDrivesEnabledEventHandler, addIsDiffAnalyticsEnabledEventHandler, addIsDocumentModelSelectionSettingsEnabledEventHandler, addIsDragAndDropEnabledEventHandler, addIsDriveAnalyticsEnabledEventHandler, addIsEditorDebugModeEnabledEventHandler, addIsEditorReadModeEnabledEventHandler, addIsExternalControlsEnabledEventHandler, addIsExternalPackagesEnabledEventHandler, addIsExternalProcessorsEnabledEventHandler, addIsExternalRelationalProcessorsEnabledEventHandler, addIsLocalDrivesEnabledEventHandler, addIsPublicDrivesEnabledEventHandler, addIsRelationalProcessorsEnabledEventHandler, addIsSentryTracingEnabledEventHandler, addLoadingEventHandler, addLocalDrivesEnabledEventHandler, addLogLevelEventHandler, addModalEventHandler, addPHEventHandlers, addPackageDiscoveryServiceEventHandler, addPromiseState, addReactorClientEventHandler, addReactorClientModuleEventHandler, addRemoteDrive, addRenownChainIdEventHandler, addRenownEventHandler, addRenownNetworkIdEventHandler, addRenownUrlEventHandler, addRequiresHardRefreshEventHandler, addResetSelectedNodeEventHandler, addRevisionHistoryVisibleEventHandler, addRouterBasenameEventHandler, addSelectedDriveIdEventHandler, addSelectedNodeIdEventHandler, addSelectedTimelineItemEventHandler, addSelectedTimelineRevisionEventHandler, addSentryDsnEventHandler, addSentryEnvEventHandler, addSentryReleaseEventHandler, addSetSelectedDriveOnPopStateEventHandler, addSetSelectedNodeOnPopStateEventHandler, addStudioModeEventHandler, addToastEventHandler, addVersionCheckIntervalEventHandler, addVersionEventHandler, addVetraPackageManagerEventHandler, addWarnOutdatedAppEventHandler, baseDocumentModels, baseDocumentModelsMap, buildDocumentSubgraphQuery, buildDocumentSubgraphUrl, callEventHandlerRegisterFunctions, callGlobalSetterForKey, clearGlobal, closePHModal, commonGlobalEventHandlerFunctions, convertRemoteOperations, createAnalyticsStore, createClient, createProcessorQuery, createUrlWithPreservedParams, deleteDrive, deleteNode, deriveSystemUrl, dispatchActions, downloadDocument, driveCollectionId, driveIdFromUrl, dropAllReactorStorage, exportFile, extractDriveIdFromPath, extractDriveIdFromSlug, extractDriveSlugFromPath, extractNodeIdFromPath, extractNodeIdFromSlug, extractNodeSlugFromPath, findUuid, getAnalyticsStore, getDocumentGraphqlQuery, getDriveIdBySlug, getDrives, getGlobal, getPackages, getPackagesByDocumentType, getPathWithoutBase, getRevisionFromDate, getSlugFromDriveUrl, getSwitchboardGatewayUrlFromDriveUrl, getSyncStatus, getSyncStatusSync, getUserPermissions, graphqlDocumentEvents, graphqlDocumentsEvents, graphqlEventsToSyncDrive, hideRevisionHistory, identifierFromMutateDocumentOperationVariables, initConnectCrypto, initRenownCrypto, isDocumentTypeSupported, isExternalControlsEnabledEventFunctions, isFileNodeKind, isFolderNodeKind, loading, login, logout, makeDriveUrlComponent, makeNodeSlug, makePHEventFunctions, openRenown, parseDriveUrl, phAppConfigHooks, phAppConfigSetters, phDocumentEditorConfigHooks, phDocumentEditorConfigSetters, phDocumentFromQuery, phDocumentsFromQuery, phGlobalConfigHooks, phGlobalConfigSetters, reactorGraphqlBatchFetchDocuments, reactorGraphqlCreateDocument, reactorGraphqlDeleteDocument, reactorGraphqlDeleteDocuments, reactorGraphqlFetchDocument, reactorGraphqlMutateDocument, readPromiseState, refreshReactorData, refreshReactorDataClient, renameDrive, renameDriveNode, resolveUrlPathname, setAllowList, setAllowedDocumentTypes, setAnalyticsDatabaseName, setBasePath, setCliVersion, setDefaultDrivesUrl, setDefaultPHGlobalConfig, setDisabledEditors, setDocumentCache, setDriveAvailableOffline, setDriveSharingType, setDrives, setDrivesPreserveStrategy, setEnabledEditors, setFeatures, setFileUploadOperationsChunkSize, setGaTrackingId, setGlobal, setGraphQLReactorClient, setIsAddCloudDrivesEnabled, setIsAddDriveEnabled, setIsAddLocalDrivesEnabled, setIsAddPublicDrivesEnabled, setIsAnalyticsDatabaseWorkerEnabled, setIsAnalyticsEnabled, setIsAnalyticsExternalProcessorsEnabled, setIsCloudDrivesEnabled, setIsDeleteCloudDrivesEnabled, setIsDeleteLocalDrivesEnabled, setIsDeletePublicDrivesEnabled, setIsDiffAnalyticsEnabled, setIsDocumentModelSelectionSettingsEnabled, setIsDragAndDropEnabled, setIsDriveAnalyticsEnabled, setIsEditorDebugModeEnabled, setIsEditorReadModeEnabled, setIsExternalControlsEnabled, setIsExternalPackagesEnabled, setIsExternalProcessorsEnabled, setIsExternalRelationalProcessorsEnabled, setIsLocalDrivesEnabled, setIsPublicDrivesEnabled, setIsRelationalProcessorsEnabled, setIsSentryTracingEnabled, setLoading, setLocalDrivesEnabled, setLogLevel, setPHAppConfig, setPHAppConfigByKey, setPHDocumentEditorConfig, setPHDocumentEditorConfigByKey, setPHGlobalConfig, setPHGlobalConfigByKey, setPHModal, setPHToast, setPackageDiscoveryService, setReactorClient, setReactorClientModule, setRenown, setRenownChainId, setRenownNetworkId, setRenownUrl, setRequiresHardRefresh, setRevisionHistoryVisible, setRouterBasename, setSelectedDrive, setSelectedDriveId, setSelectedNode, setSelectedTimelineItem, setSelectedTimelineRevision, setSentryDsn, setSentryEnv, setSentryRelease, setStudioMode, setVersion, setVersionCheckInterval, setVetraPackageManager, setWarnOutdatedApp, showCreateDocumentModal, showDeleteNodeModal, showPHModal, showRevisionHistory, sortNodesByName, trimTrailingSlash, truncateAllTables, useAllowList, useAllowedDocumentModelModules, useAllowedDocumentTypes, useAnalyticsDatabaseName, useAppModuleById, useAppModules, useBasePath, useCliVersion, useConnectionState, useConnectionStates, useDatabase, useDefaultAppModule, useDefaultDrivesUrl, useDid, useDisabledEditors, useDispatch, useDocument, useDocumentById, useDocumentCache, useDocumentModelModuleById, useDocumentModelModules, useDocumentOfType, useDocumentOperations, useDocumentSafe, useDocumentTypes, useDocumentTypesInSelectedDrive, useDocuments, useDocumentsByIds, useDocumentsInSelectedDrive, useDocumentsInSelectedFolder, useDownloadDocument, useDragNode, useDriveById, useDriveSystemInfo, useDrives, useDrivesPreserveStrategy, useDropFile, useDropNode, useEditorFileDrop, useEditorModuleById, useEditorModules, useEditorModulesForDocumentType, useEnabledEditors, useFallbackEditorModule, useFeatures, useFileNodesInSelectedDrive, useFileNodesInSelectedFolder, useFileUploadOperationsChunkSize, useFolderById, useFolderNodesInSelectedDrive, useFolderNodesInSelectedFolder, useGaTrackingId, useGetDocument, useGetDocumentAsync, useGetDocuments, useGetSwitchboardLink, useGraphQLReactorClient, useInitReactorGraphqlClient, useIsAddCloudDrivesEnabled, useIsAddDriveEnabled, useIsAddLocalDrivesEnabled, useIsAddPublicDrivesEnabled, useIsAnalyticsDatabaseWorkerEnabled, useIsAnalyticsEnabled, useIsAnalyticsExternalProcessorsEnabled, useIsCloudDrivesEnabled, useIsDeleteCloudDrivesEnabled, useIsDeleteLocalDrivesEnabled, useIsDeletePublicDrivesEnabled, useIsDiffAnalyticsEnabled, useIsDocumentModelSelectionSettingsEnabled, useIsDragAndDropEnabled, useIsDriveAnalyticsEnabled, useIsEditorDebugModeEnabled, useIsEditorReadModeEnabled, useIsExternalControlsEnabled, useIsExternalPackagesEnabled, useIsExternalProcessorsEnabled, useIsExternalRelationalProcessorsEnabled, useIsLocalDrivesEnabled, useIsPublicDrivesEnabled, useIsRelationalProcessorsEnabled, useIsSentryTracingEnabled, useLoading, useLocalDrivesEnabled, useLogLevel, useLoginStatus, useModelRegistry, useNodeActions, useNodeById, useNodeParentFolderById, useNodePathById, useNodesInSelectedDrive, useNodesInSelectedDriveOrFolder, useNodesInSelectedFolder, useOnDropFile, usePGlite, usePHAppConfigByKey, usePHDocumentEditorConfigByKey, usePHGlobalConfigByKey, usePHModal, usePHToast, usePackageDiscoveryService, useParentFolderForSelectedNode, useReactorClient, useReactorClientModule, useRelationalDb, useRelationalQuery, useRenown, useRenownAuth, useRenownChainId, useRenownInit, useRenownNetworkId, useRenownUrl, useRequiresHardRefresh, useResetPHGlobalConfig, useRevisionHistoryVisible, useRouterBasename, useSelectedDocument, useSelectedDocumentId, useSelectedDocumentOfType, useSelectedDocumentSafe, useSelectedDrive, useSelectedDriveId, useSelectedDriveSafe, useSelectedFolder, useSelectedNode, useSelectedNodePath, useSelectedTimelineItem, useSelectedTimelineRevision, useSentryDsn, useSentryEnv, useSentryRelease, useSetDefaultPHGlobalConfig, useSetPHAppConfig, useSetPHDocumentEditorConfig, useSetPHGlobalConfig, useStudioMode, useSubgraphModules, useSupportedDocumentTypesInReactor, useSync, useSyncList, useUser, useUserPermissions, useVersion, useVersionCheckInterval, useVetraPackageManager, useVetraPackages, useWarnOutdatedApp, validateDocument };\n\n//# sourceMappingURL=index.js.map","import React from 'react';\n\nvar isCheckBoxInput = (element) => element.type === 'checkbox';\n\nvar isDateObject = (value) => value instanceof Date;\n\nvar isNullOrUndefined = (value) => value == null;\n\nconst isObjectType = (value) => typeof value === 'object';\nvar isObject = (value) => !isNullOrUndefined(value) &&\n !Array.isArray(value) &&\n isObjectType(value) &&\n !isDateObject(value);\n\nvar getEventValue = (event) => isObject(event) && event.target\n ? isCheckBoxInput(event.target)\n ? event.target.checked\n : event.target.value\n : event;\n\nvar getNodeParentName = (name) => name.substring(0, name.search(/\\.\\d+(\\.|$)/)) || name;\n\nvar isNameInFieldArray = (names, name) => names.has(getNodeParentName(name));\n\nvar isPlainObject = (tempObject) => {\n const prototypeCopy = tempObject.constructor && tempObject.constructor.prototype;\n return (isObject(prototypeCopy) && prototypeCopy.hasOwnProperty('isPrototypeOf'));\n};\n\nvar isWeb = typeof window !== 'undefined' &&\n typeof window.HTMLElement !== 'undefined' &&\n typeof document !== 'undefined';\n\nfunction cloneObject(data) {\n if (data instanceof Date) {\n return new Date(data);\n }\n const isFileListInstance = typeof FileList !== 'undefined' && data instanceof FileList;\n if (isWeb && (data instanceof Blob || isFileListInstance)) {\n return data;\n }\n const isArray = Array.isArray(data);\n if (!isArray && !(isObject(data) && isPlainObject(data))) {\n return data;\n }\n const copy = isArray ? [] : Object.create(Object.getPrototypeOf(data));\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n copy[key] = cloneObject(data[key]);\n }\n }\n return copy;\n}\n\nvar isKey = (value) => /^\\w*$/.test(value);\n\nvar isUndefined = (val) => val === undefined;\n\nvar compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];\n\nvar stringToPath = (input) => compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n\nvar get = (object, path, defaultValue) => {\n if (!path || !isObject(object)) {\n return defaultValue;\n }\n const result = (isKey(path) ? [path] : stringToPath(path)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], object);\n return isUndefined(result) || result === object\n ? isUndefined(object[path])\n ? defaultValue\n : object[path]\n : result;\n};\n\nvar isBoolean = (value) => typeof value === 'boolean';\n\nvar isFunction = (value) => typeof value === 'function';\n\nvar set = (object, path, value) => {\n let index = -1;\n const tempPath = isKey(path) ? [path] : stringToPath(path);\n const length = tempPath.length;\n const lastIndex = length - 1;\n while (++index < length) {\n const key = tempPath[index];\n let newValue = value;\n if (index !== lastIndex) {\n const objValue = object[key];\n newValue =\n isObject(objValue) || Array.isArray(objValue)\n ? objValue\n : !isNaN(+tempPath[index + 1])\n ? []\n : {};\n }\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return;\n }\n object[key] = newValue;\n object = object[key];\n }\n};\n\nconst EVENTS = {\n BLUR: 'blur',\n FOCUS_OUT: 'focusout',\n CHANGE: 'change',\n};\nconst VALIDATION_MODE = {\n onBlur: 'onBlur',\n onChange: 'onChange',\n onSubmit: 'onSubmit',\n onTouched: 'onTouched',\n all: 'all',\n};\nconst INPUT_VALIDATION_RULES = {\n max: 'max',\n min: 'min',\n maxLength: 'maxLength',\n minLength: 'minLength',\n pattern: 'pattern',\n required: 'required',\n validate: 'validate',\n};\n\n/**\n * Separate context for `control` to prevent unnecessary rerenders.\n * Internal hooks that only need control use this instead of full form context.\n */\nconst HookFormControlContext = React.createContext(null);\nHookFormControlContext.displayName = 'HookFormControlContext';\n/**\n * @internal Internal hook to access only control from context.\n */\nconst useFormControlContext = () => React.useContext(HookFormControlContext);\n\nvar getProxyFormState = (formState, control, localProxyFormState, isRoot = true) => {\n const result = {\n defaultValues: control._defaultValues,\n };\n for (const key in formState) {\n Object.defineProperty(result, key, {\n get: () => {\n const _key = key;\n if (control._proxyFormState[_key] !== VALIDATION_MODE.all) {\n control._proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\n }\n localProxyFormState && (localProxyFormState[_key] = true);\n return formState[_key];\n },\n });\n }\n return result;\n};\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\n/**\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\n *\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, control } = useForm({\n * defaultValues: {\n * firstName: \"firstName\"\n * }});\n * const { dirtyFields } = useFormState({\n * control\n * });\n * const onSubmit = (data) => console.log(data);\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <input {...register(\"firstName\")} placeholder=\"First Name\" />\n * {dirtyFields.firstName && <p>Field is dirty.</p>}\n * <input type=\"submit\" />\n * </form>\n * );\n * }\n * ```\n */\nfunction useFormState(props) {\n const formControl = useFormControlContext();\n const { control = formControl, disabled, name, exact } = props || {};\n const [formState, updateFormState] = React.useState(control._formState);\n const _localProxyFormState = React.useRef({\n isDirty: false,\n isLoading: false,\n dirtyFields: false,\n touchedFields: false,\n validatingFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n });\n useIsomorphicLayoutEffect(() => control._subscribe({\n name,\n formState: _localProxyFormState.current,\n exact,\n callback: (formState) => {\n !disabled &&\n updateFormState({\n ...control._formState,\n ...formState,\n });\n },\n }), [name, disabled, exact]);\n React.useEffect(() => {\n _localProxyFormState.current.isValid && control._setValid(true);\n }, [control]);\n return React.useMemo(() => getProxyFormState(formState, control, _localProxyFormState.current, false), [formState, control]);\n}\n\nvar isString = (value) => typeof value === 'string';\n\nvar generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) => {\n if (isString(names)) {\n isGlobal && _names.watch.add(names);\n return get(formValues, names, defaultValue);\n }\n if (Array.isArray(names)) {\n return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName),\n get(formValues, fieldName)));\n }\n isGlobal && (_names.watchAll = true);\n return formValues;\n};\n\nvar isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);\n\nfunction deepEqual(object1, object2, _internal_visited = new WeakSet()) {\n if (isPrimitive(object1) || isPrimitive(object2)) {\n return Object.is(object1, object2);\n }\n if (isDateObject(object1) && isDateObject(object2)) {\n return Object.is(object1.getTime(), object2.getTime());\n }\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n if (_internal_visited.has(object1) || _internal_visited.has(object2)) {\n return true;\n }\n _internal_visited.add(object1);\n _internal_visited.add(object2);\n for (const key of keys1) {\n const val1 = object1[key];\n if (!keys2.includes(key)) {\n return false;\n }\n if (key !== 'ref') {\n const val2 = object2[key];\n if ((isDateObject(val1) && isDateObject(val2)) ||\n (isObject(val1) && isObject(val2)) ||\n (Array.isArray(val1) && Array.isArray(val2))\n ? !deepEqual(val1, val2, _internal_visited)\n : !Object.is(val1, val2)) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * name: \"fieldName\"\n * control,\n * })\n * ```\n */\nfunction useWatch(props) {\n const formControl = useFormControlContext();\n const { control = formControl, name, defaultValue, disabled, exact, compute, } = props || {};\n const _defaultValue = React.useRef(defaultValue);\n const _compute = React.useRef(compute);\n const _computeFormValues = React.useRef(undefined);\n const _prevControl = React.useRef(control);\n const _prevName = React.useRef(name);\n _compute.current = compute;\n const [value, updateValue] = React.useState(() => {\n const defaultValue = control._getWatch(name, _defaultValue.current);\n return _compute.current ? _compute.current(defaultValue) : defaultValue;\n });\n const getCurrentOutput = React.useCallback((values) => {\n const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n return _compute.current ? _compute.current(formValues) : formValues;\n }, [control._formValues, control._names, name]);\n const refreshValue = React.useCallback((values) => {\n if (!disabled) {\n const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n if (_compute.current) {\n const computedFormValues = _compute.current(formValues);\n if (!deepEqual(computedFormValues, _computeFormValues.current)) {\n updateValue(computedFormValues);\n _computeFormValues.current = computedFormValues;\n }\n }\n else {\n updateValue(formValues);\n }\n }\n }, [control._formValues, control._names, disabled, name]);\n useIsomorphicLayoutEffect(() => {\n if (_prevControl.current !== control ||\n !deepEqual(_prevName.current, name)) {\n _prevControl.current = control;\n _prevName.current = name;\n refreshValue();\n }\n return control._subscribe({\n name,\n formState: {\n values: true,\n },\n exact,\n callback: (formState) => {\n refreshValue(formState.values);\n },\n });\n }, [control, exact, name, refreshValue]);\n React.useEffect(() => control._removeUnmounted());\n // If name or control changed for this render, synchronously reflect the\n // latest value so callers (like useController) see the correct value\n // immediately on the same render.\n // Optimize: Check control reference first before expensive deepEqual\n const controlChanged = _prevControl.current !== control;\n const prevName = _prevName.current;\n // Cache the computed output to avoid duplicate calls within the same render\n // We include shouldReturnImmediate in deps to ensure proper recomputation\n const computedOutput = React.useMemo(() => {\n if (disabled) {\n return null;\n }\n const nameChanged = !controlChanged && !deepEqual(prevName, name);\n const shouldReturnImmediate = controlChanged || nameChanged;\n return shouldReturnImmediate ? getCurrentOutput() : null;\n }, [disabled, controlChanged, name, prevName, getCurrentOutput]);\n return computedOutput !== null ? computedOutput : value;\n}\n\n/**\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns field properties, field and form state. {@link UseControllerReturn}\n *\n * @example\n * ```tsx\n * function Input(props) {\n * const { field, fieldState, formState } = useController(props);\n * return (\n * <div>\n * <input {...field} placeholder={props.name} />\n * <p>{fieldState.isTouched && \"Touched\"}</p>\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n * </div>\n * );\n * }\n * ```\n */\nfunction useController(props) {\n const formControl = useFormControlContext();\n const { name, disabled, control = formControl, shouldUnregister, defaultValue, exact = true, } = props;\n const isArrayField = isNameInFieldArray(control._names.array, name);\n const defaultValueMemo = React.useMemo(() => get(control._formValues, name, get(control._defaultValues, name, defaultValue)), [control, name, defaultValue]);\n const value = useWatch({\n control,\n name,\n defaultValue: defaultValueMemo,\n exact,\n });\n const formState = useFormState({\n control,\n name,\n exact,\n });\n const _props = React.useRef(props);\n const _previousNameRef = React.useRef(undefined);\n const _registerProps = React.useRef(control.register(name, {\n ...props.rules,\n value,\n ...(isBoolean(props.disabled) ? { disabled: props.disabled } : {}),\n }));\n _props.current = props;\n const fieldState = React.useMemo(() => Object.defineProperties({}, {\n invalid: {\n enumerable: true,\n get: () => !!get(formState.errors, name),\n },\n isDirty: {\n enumerable: true,\n get: () => !!get(formState.dirtyFields, name),\n },\n isTouched: {\n enumerable: true,\n get: () => !!get(formState.touchedFields, name),\n },\n isValidating: {\n enumerable: true,\n get: () => !!get(formState.validatingFields, name),\n },\n error: {\n enumerable: true,\n get: () => get(formState.errors, name),\n },\n }), [formState, name]);\n const onChange = React.useCallback((event) => _registerProps.current.onChange({\n target: {\n value: getEventValue(event),\n name: name,\n },\n type: EVENTS.CHANGE,\n }), [name]);\n const onBlur = React.useCallback(() => _registerProps.current.onBlur({\n target: {\n value: get(control._formValues, name),\n name: name,\n },\n type: EVENTS.BLUR,\n }), [name, control._formValues]);\n const ref = React.useCallback((elm) => {\n const field = get(control._fields, name);\n if (field && field._f && elm) {\n field._f.ref = {\n focus: () => isFunction(elm.focus) && elm.focus(),\n select: () => isFunction(elm.select) && elm.select(),\n setCustomValidity: (message) => isFunction(elm.setCustomValidity) && elm.setCustomValidity(message),\n reportValidity: () => isFunction(elm.reportValidity) && elm.reportValidity(),\n };\n }\n }, [control._fields, name]);\n const field = React.useMemo(() => ({\n name,\n value,\n ...(isBoolean(disabled) || formState.disabled\n ? { disabled: formState.disabled || disabled }\n : {}),\n onChange,\n onBlur,\n ref,\n }), [name, disabled, formState.disabled, onChange, onBlur, ref, value]);\n React.useEffect(() => {\n const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;\n const previousName = _previousNameRef.current;\n if (previousName && previousName !== name && !isArrayField) {\n control.unregister(previousName);\n }\n control.register(name, {\n ..._props.current.rules,\n ...(isBoolean(_props.current.disabled)\n ? { disabled: _props.current.disabled }\n : {}),\n });\n const updateMounted = (name, value) => {\n const field = get(control._fields, name);\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n updateMounted(name, true);\n if (_shouldUnregisterField) {\n const value = cloneObject(get(control._options.defaultValues, name, _props.current.defaultValue));\n set(control._defaultValues, name, value);\n if (isUndefined(get(control._formValues, name))) {\n set(control._formValues, name, value);\n }\n }\n !isArrayField && control.register(name);\n _previousNameRef.current = name;\n return () => {\n (isArrayField\n ? _shouldUnregisterField && !control._state.action\n : _shouldUnregisterField)\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, isArrayField, shouldUnregister]);\n React.useEffect(() => {\n control._setDisabledField({\n disabled,\n name,\n });\n }, [disabled, name, control]);\n return React.useMemo(() => ({\n field,\n formState,\n fieldState,\n }), [field, formState, fieldState]);\n}\n\n/**\n * Component based on `useController` hook to work with controlled component.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns provide field handler functions, field and form state.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control } = useForm<FormValues>({\n * defaultValues: {\n * test: \"\"\n * }\n * });\n *\n * return (\n * <form>\n * <Controller\n * control={control}\n * name=\"test\"\n * render={({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (\n * <>\n * <input\n * onChange={onChange} // send value to hook form\n * onBlur={onBlur} // notify when input is touched\n * value={value} // return updated value\n * ref={ref} // set ref for focus management\n * />\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n * <p>{fieldState.isTouched ? \"touched\" : \"\"}</p>\n * </>\n * )}\n * />\n * </form>\n * );\n * }\n * ```\n */\nconst Controller = (props) => props.render(useController(props));\n\nconst flatten = (obj) => {\n const output = {};\n for (const key of Object.keys(obj)) {\n if (isObjectType(obj[key]) && obj[key] !== null) {\n const nested = flatten(obj[key]);\n for (const nestedKey of Object.keys(nested)) {\n output[`${key}.${nestedKey}`] = nested[nestedKey];\n }\n }\n else {\n output[key] = obj[key];\n }\n }\n return output;\n};\n\nconst HookFormContext = React.createContext(null);\nHookFormContext.displayName = 'HookFormContext';\n/**\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @returns return all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * <FormProvider {...methods} >\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\n * <NestedInput />\n * <input type=\"submit\" />\n * </form>\n * </FormProvider>\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst useFormContext = () => React.useContext(HookFormContext);\n/**\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://react.dev/reference/react/useContext) API. To be used with {@link useFormContext}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @param props - all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * <FormProvider {...methods} >\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\n * <NestedInput />\n * <input type=\"submit\" />\n * </form>\n * </FormProvider>\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst FormProvider = (props) => {\n const { children, watch, getValues, getFieldState, setError, clearErrors, setValue, trigger, formState, resetField, reset, handleSubmit, unregister, control, register, setFocus, subscribe, } = props;\n return (React.createElement(HookFormContext.Provider, { value: React.useMemo(() => ({\n watch,\n getValues,\n getFieldState,\n setError,\n clearErrors,\n setValue,\n trigger,\n formState,\n resetField,\n reset,\n handleSubmit,\n unregister,\n control,\n register,\n setFocus,\n subscribe,\n }), [\n clearErrors,\n control,\n formState,\n getFieldState,\n getValues,\n handleSubmit,\n register,\n reset,\n resetField,\n setError,\n setFocus,\n setValue,\n subscribe,\n trigger,\n unregister,\n watch,\n ]) },\n React.createElement(HookFormControlContext.Provider, { value: control }, children)));\n};\n\nconst POST_REQUEST = 'post';\n/**\n * Form component to manage submission.\n *\n * @param props - to setup submission detail. {@link FormProps}\n *\n * @returns form component or headless render prop.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control, formState: { errors } } = useForm();\n *\n * return (\n * <Form action=\"/api\" control={control}>\n * <input {...register(\"name\")} />\n * <p>{errors?.root?.server && 'Server error'}</p>\n * <button>Submit</button>\n * </Form>\n * );\n * }\n * ```\n */\nfunction Form(props) {\n const methods = useFormContext();\n const [mounted, setMounted] = React.useState(false);\n const { control = methods.control, onSubmit, children, action, method = POST_REQUEST, headers, encType, onError, render, onSuccess, validateStatus, ...rest } = props;\n const submit = async (event) => {\n let hasError = false;\n let type = '';\n await control.handleSubmit(async (data) => {\n const formData = new FormData();\n let formDataJson = '';\n try {\n formDataJson = JSON.stringify(data);\n }\n catch (_a) { }\n const flattenFormValues = flatten(control._formValues);\n for (const key in flattenFormValues) {\n formData.append(key, flattenFormValues[key]);\n }\n if (onSubmit) {\n await onSubmit({\n data,\n event,\n method,\n formData,\n formDataJson,\n });\n }\n if (action) {\n try {\n const shouldStringifySubmissionData = [\n headers && headers['Content-Type'],\n encType,\n ].some((value) => value && value.includes('json'));\n const response = await fetch(String(action), {\n method,\n headers: {\n ...headers,\n ...(encType && encType !== 'multipart/form-data'\n ? { 'Content-Type': encType }\n : {}),\n },\n body: shouldStringifySubmissionData ? formDataJson : formData,\n });\n if (response &&\n (validateStatus\n ? !validateStatus(response.status)\n : response.status < 200 || response.status >= 300)) {\n hasError = true;\n onError && onError({ response });\n type = String(response.status);\n }\n else {\n onSuccess && onSuccess({ response });\n }\n }\n catch (error) {\n hasError = true;\n onError && onError({ error });\n }\n }\n })(event);\n if (hasError && props.control) {\n props.control._subjects.state.next({\n isSubmitSuccessful: false,\n });\n props.control.setError('root.server', {\n type,\n });\n }\n };\n React.useEffect(() => {\n setMounted(true);\n }, []);\n return render ? (React.createElement(React.Fragment, null, render({\n submit,\n }))) : (React.createElement(\"form\", { noValidate: mounted, action: action, method: method, encType: encType, onSubmit: submit, ...rest }, children));\n}\n\nconst FormStateSubscribe = ({ control, disabled, exact, name, render, }) => render(useFormState({ control, name, disabled, exact }));\n\nvar appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria\n ? {\n ...errors[name],\n types: {\n ...(errors[name] && errors[name].types ? errors[name].types : {}),\n [type]: message || true,\n },\n }\n : {};\n\nvar convertToArrayPayload = (value) => (Array.isArray(value) ? value : [value]);\n\nvar createSubject = () => {\n let _observers = [];\n const next = (value) => {\n for (const observer of _observers) {\n observer.next && observer.next(value);\n }\n };\n const subscribe = (observer) => {\n _observers.push(observer);\n return {\n unsubscribe: () => {\n _observers = _observers.filter((o) => o !== observer);\n },\n };\n };\n const unsubscribe = () => {\n _observers = [];\n };\n return {\n get observers() {\n return _observers;\n },\n next,\n subscribe,\n unsubscribe,\n };\n};\n\nfunction extractFormValues(fieldsState, formValues) {\n const values = {};\n for (const key in fieldsState) {\n if (fieldsState.hasOwnProperty(key)) {\n const fieldState = fieldsState[key];\n const fieldValue = formValues[key];\n if (fieldState && isObject(fieldState) && fieldValue) {\n const nestedFieldsState = extractFormValues(fieldState, fieldValue);\n if (isObject(nestedFieldsState)) {\n values[key] = nestedFieldsState;\n }\n }\n else if (fieldsState[key]) {\n values[key] = fieldValue;\n }\n }\n }\n return values;\n}\n\nvar isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;\n\nvar isFileInput = (element) => element.type === 'file';\n\nvar isHTMLElement = (value) => {\n if (!isWeb) {\n return false;\n }\n const owner = value ? value.ownerDocument : 0;\n return (value instanceof\n (owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement));\n};\n\nvar isMultipleSelect = (element) => element.type === `select-multiple`;\n\nvar isRadioInput = (element) => element.type === 'radio';\n\nvar isRadioOrCheckbox = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);\n\nvar live = (ref) => isHTMLElement(ref) && ref.isConnected;\n\nfunction baseGet(object, updatePath) {\n const length = updatePath.slice(0, -1).length;\n let index = 0;\n while (index < length) {\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\n }\n return object;\n}\nfunction isEmptyArray(obj) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && !isUndefined(obj[key])) {\n return false;\n }\n }\n return true;\n}\nfunction unset(object, path) {\n const paths = Array.isArray(path)\n ? path\n : isKey(path)\n ? [path]\n : stringToPath(path);\n const childObject = paths.length === 1 ? object : baseGet(object, paths);\n const index = paths.length - 1;\n const key = paths[index];\n if (childObject) {\n delete childObject[key];\n }\n if (index !== 0 &&\n ((isObject(childObject) && isEmptyObject(childObject)) ||\n (Array.isArray(childObject) && isEmptyArray(childObject)))) {\n unset(object, paths.slice(0, -1));\n }\n return object;\n}\n\nvar objectHasFunction = (data) => {\n for (const key in data) {\n if (isFunction(data[key])) {\n return true;\n }\n }\n return false;\n};\n\nfunction isTraversable(value) {\n return Array.isArray(value) || (isObject(value) && !objectHasFunction(value));\n}\nfunction markFieldsDirty(data, fields = {}) {\n for (const key in data) {\n const value = data[key];\n if (isTraversable(value)) {\n fields[key] = Array.isArray(value) ? [] : {};\n markFieldsDirty(value, fields[key]);\n }\n else if (!isUndefined(value)) {\n fields[key] = true;\n }\n }\n return fields;\n}\nfunction getDirtyFields(data, formValues, dirtyFieldsFromValues) {\n if (!dirtyFieldsFromValues) {\n dirtyFieldsFromValues = markFieldsDirty(formValues);\n }\n for (const key in data) {\n const value = data[key];\n if (isTraversable(value)) {\n if (isUndefined(formValues) || isPrimitive(dirtyFieldsFromValues[key])) {\n dirtyFieldsFromValues[key] = markFieldsDirty(value, Array.isArray(value) ? [] : {});\n }\n else {\n getDirtyFields(value, isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);\n }\n }\n else {\n const formValue = formValues[key];\n dirtyFieldsFromValues[key] = !deepEqual(value, formValue);\n }\n }\n return dirtyFieldsFromValues;\n}\n\nconst defaultResult = {\n value: false,\n isValid: false,\n};\nconst validResult = { value: true, isValid: true };\nvar getCheckboxValue = (options) => {\n if (Array.isArray(options)) {\n if (options.length > 1) {\n const values = options\n .filter((option) => option && option.checked && !option.disabled)\n .map((option) => option.value);\n return { value: values, isValid: !!values.length };\n }\n return options[0].checked && !options[0].disabled\n ? // @ts-expect-error expected to work in the browser\n options[0].attributes && !isUndefined(options[0].attributes.value)\n ? isUndefined(options[0].value) || options[0].value === ''\n ? validResult\n : { value: options[0].value, isValid: true }\n : validResult\n : defaultResult;\n }\n return defaultResult;\n};\n\nvar getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value)\n ? value\n : valueAsNumber\n ? value === ''\n ? NaN\n : value\n ? +value\n : value\n : valueAsDate && isString(value)\n ? new Date(value)\n : setValueAs\n ? setValueAs(value)\n : value;\n\nconst defaultReturn = {\n isValid: false,\n value: null,\n};\nvar getRadioValue = (options) => Array.isArray(options)\n ? options.reduce((previous, option) => option && option.checked && !option.disabled\n ? {\n isValid: true,\n value: option.value,\n }\n : previous, defaultReturn)\n : defaultReturn;\n\nfunction getFieldValue(_f) {\n const ref = _f.ref;\n if (isFileInput(ref)) {\n return ref.files;\n }\n if (isRadioInput(ref)) {\n return getRadioValue(_f.refs).value;\n }\n if (isMultipleSelect(ref)) {\n return [...ref.selectedOptions].map(({ value }) => value);\n }\n if (isCheckBoxInput(ref)) {\n return getCheckboxValue(_f.refs).value;\n }\n return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\n}\n\nvar getResolverOptions = (fieldsNames, _fields, criteriaMode, shouldUseNativeValidation) => {\n const fields = {};\n for (const name of fieldsNames) {\n const field = get(_fields, name);\n field && set(fields, name, field._f);\n }\n return {\n criteriaMode,\n names: [...fieldsNames],\n fields,\n shouldUseNativeValidation,\n };\n};\n\nvar isRegex = (value) => value instanceof RegExp;\n\nvar getRuleValue = (rule) => isUndefined(rule)\n ? rule\n : isRegex(rule)\n ? rule.source\n : isObject(rule)\n ? isRegex(rule.value)\n ? rule.value.source\n : rule.value\n : rule;\n\nvar getValidationModes = (mode) => ({\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n isOnBlur: mode === VALIDATION_MODE.onBlur,\n isOnChange: mode === VALIDATION_MODE.onChange,\n isOnAll: mode === VALIDATION_MODE.all,\n isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n\nconst ASYNC_FUNCTION = 'AsyncFunction';\nvar hasPromiseValidation = (fieldReference) => !!fieldReference &&\n !!fieldReference.validate &&\n !!((isFunction(fieldReference.validate) &&\n fieldReference.validate.constructor.name === ASYNC_FUNCTION) ||\n (isObject(fieldReference.validate) &&\n Object.values(fieldReference.validate).find((validateFunction) => validateFunction.constructor.name === ASYNC_FUNCTION)));\n\nvar hasValidation = (options) => options.mount &&\n (options.required ||\n options.min ||\n options.max ||\n options.maxLength ||\n options.minLength ||\n options.pattern ||\n options.validate);\n\nvar isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&\n (_names.watchAll ||\n _names.watch.has(name) ||\n [..._names.watch].some((watchName) => name.startsWith(watchName) &&\n /^\\.\\w+/.test(name.slice(watchName.length))));\n\nconst iterateFieldsByAction = (fields, action, fieldsNames, abortEarly) => {\n for (const key of fieldsNames || Object.keys(fields)) {\n const field = get(fields, key);\n if (field) {\n const { _f, ...currentField } = field;\n if (_f) {\n if (_f.refs && _f.refs[0] && action(_f.refs[0], key) && !abortEarly) {\n return true;\n }\n else if (_f.ref && action(_f.ref, _f.name) && !abortEarly) {\n return true;\n }\n else {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n }\n else if (isObject(currentField)) {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n }\n }\n return;\n};\n\nfunction schemaErrorLookup(errors, _fields, name) {\n const error = get(errors, name);\n if (error || isKey(name)) {\n return {\n error,\n name,\n };\n }\n const names = name.split('.');\n while (names.length) {\n const fieldName = names.join('.');\n const field = get(_fields, fieldName);\n const foundError = get(errors, fieldName);\n if (field && !Array.isArray(field) && name !== fieldName) {\n return { name };\n }\n if (foundError && foundError.type) {\n return {\n name: fieldName,\n error: foundError,\n };\n }\n if (foundError && foundError.root && foundError.root.type) {\n return {\n name: `${fieldName}.root`,\n error: foundError.root,\n };\n }\n names.pop();\n }\n return {\n name,\n };\n}\n\nvar shouldRenderFormState = (formStateData, _proxyFormState, updateFormState, isRoot) => {\n updateFormState(formStateData);\n const { name, ...formState } = formStateData;\n return (isEmptyObject(formState) ||\n Object.keys(formState).length >= Object.keys(_proxyFormState).length ||\n Object.keys(formState).find((key) => _proxyFormState[key] ===\n (!isRoot || VALIDATION_MODE.all)));\n};\n\nvar shouldSubscribeByName = (name, signalName, exact) => !name ||\n !signalName ||\n name === signalName ||\n convertToArrayPayload(name).some((currentName) => currentName &&\n (exact\n ? currentName === signalName\n : currentName.startsWith(signalName) ||\n signalName.startsWith(currentName)));\n\nvar skipValidation = (isBlurEvent, isTouched, isSubmitted, reValidateMode, mode) => {\n if (mode.isOnAll) {\n return false;\n }\n else if (!isSubmitted && mode.isOnTouch) {\n return !(isTouched || isBlurEvent);\n }\n else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\n return !isBlurEvent;\n }\n else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\n return isBlurEvent;\n }\n return true;\n};\n\nvar unsetEmptyArray = (ref, name) => !compact(get(ref, name)).length && unset(ref, name);\n\nvar updateFieldArrayRootError = (errors, error, name) => {\n const fieldArrayErrors = convertToArrayPayload(get(errors, name));\n set(fieldArrayErrors, 'root', error[name]);\n set(errors, name, fieldArrayErrors);\n return errors;\n};\n\nfunction getValidateError(result, ref, type = 'validate') {\n if (isString(result) ||\n (Array.isArray(result) && result.every(isString)) ||\n (isBoolean(result) && !result)) {\n return {\n type,\n message: isString(result) ? result : '',\n ref,\n };\n }\n}\n\nvar getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData)\n ? validationData\n : {\n value: validationData,\n message: '',\n };\n\nvar validateField = async (field, disabledFieldNames, formValues, validateAllFieldCriteria, shouldUseNativeValidation, isFieldArray) => {\n const { ref, refs, required, maxLength, minLength, min, max, pattern, validate, name, valueAsNumber, mount, } = field._f;\n const inputValue = get(formValues, name);\n if (!mount || disabledFieldNames.has(name)) {\n return {};\n }\n const inputRef = refs ? refs[0] : ref;\n const setCustomValidity = (message) => {\n if (shouldUseNativeValidation && inputRef.reportValidity) {\n inputRef.setCustomValidity(isBoolean(message) ? '' : message || '');\n inputRef.reportValidity();\n }\n };\n const error = {};\n const isRadio = isRadioInput(ref);\n const isCheckBox = isCheckBoxInput(ref);\n const isRadioOrCheckbox = isRadio || isCheckBox;\n const isEmpty = ((valueAsNumber || isFileInput(ref)) &&\n isUndefined(ref.value) &&\n isUndefined(inputValue)) ||\n (isHTMLElement(ref) && ref.value === '') ||\n inputValue === '' ||\n (Array.isArray(inputValue) && !inputValue.length);\n const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);\n const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\n error[name] = {\n type: exceedMax ? maxType : minType,\n message,\n ref,\n ...appendErrorsCurry(exceedMax ? maxType : minType, message),\n };\n };\n if (isFieldArray\n ? !Array.isArray(inputValue) || !inputValue.length\n : required &&\n ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\n (isBoolean(inputValue) && !inputValue) ||\n (isCheckBox && !getCheckboxValue(refs).isValid) ||\n (isRadio && !getRadioValue(refs).isValid))) {\n const { value, message } = isString(required)\n ? { value: !!required, message: required }\n : getValueAndMessage(required);\n if (value) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.required,\n message,\n ref: inputRef,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\n let exceedMax;\n let exceedMin;\n const maxOutput = getValueAndMessage(max);\n const minOutput = getValueAndMessage(min);\n if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {\n const valueNumber = ref.valueAsNumber ||\n (inputValue ? +inputValue : inputValue);\n if (!isNullOrUndefined(maxOutput.value)) {\n exceedMax = valueNumber > maxOutput.value;\n }\n if (!isNullOrUndefined(minOutput.value)) {\n exceedMin = valueNumber < minOutput.value;\n }\n }\n else {\n const valueDate = ref.valueAsDate || new Date(inputValue);\n const convertTimeToDate = (time) => new Date(new Date().toDateString() + ' ' + time);\n const isTime = ref.type == 'time';\n const isWeek = ref.type == 'week';\n if (isString(maxOutput.value) && inputValue) {\n exceedMax = isTime\n ? convertTimeToDate(inputValue) > convertTimeToDate(maxOutput.value)\n : isWeek\n ? inputValue > maxOutput.value\n : valueDate > new Date(maxOutput.value);\n }\n if (isString(minOutput.value) && inputValue) {\n exceedMin = isTime\n ? convertTimeToDate(inputValue) < convertTimeToDate(minOutput.value)\n : isWeek\n ? inputValue < minOutput.value\n : valueDate < new Date(minOutput.value);\n }\n }\n if (exceedMax || exceedMin) {\n getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name].message);\n return error;\n }\n }\n }\n if ((maxLength || minLength) &&\n !isEmpty &&\n (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))) {\n const maxLengthOutput = getValueAndMessage(maxLength);\n const minLengthOutput = getValueAndMessage(minLength);\n const exceedMax = !isNullOrUndefined(maxLengthOutput.value) &&\n inputValue.length > +maxLengthOutput.value;\n const exceedMin = !isNullOrUndefined(minLengthOutput.value) &&\n inputValue.length < +minLengthOutput.value;\n if (exceedMax || exceedMin) {\n getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name].message);\n return error;\n }\n }\n }\n if (pattern && !isEmpty && isString(inputValue)) {\n const { value: patternValue, message } = getValueAndMessage(pattern);\n if (isRegex(patternValue) && !inputValue.match(patternValue)) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.pattern,\n message,\n ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n if (validate) {\n if (isFunction(validate)) {\n const result = await validate(inputValue, formValues);\n const validateError = getValidateError(result, inputRef);\n if (validateError) {\n error[name] = {\n ...validateError,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(validateError.message);\n return error;\n }\n }\n }\n else if (isObject(validate)) {\n let validationResult = {};\n for (const key in validate) {\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n break;\n }\n const validateError = getValidateError(await validate[key](inputValue, formValues), inputRef, key);\n if (validateError) {\n validationResult = {\n ...validateError,\n ...appendErrorsCurry(key, validateError.message),\n };\n setCustomValidity(validateError.message);\n if (validateAllFieldCriteria) {\n error[name] = validationResult;\n }\n }\n }\n if (!isEmptyObject(validationResult)) {\n error[name] = {\n ref: inputRef,\n ...validationResult,\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n }\n setCustomValidity(true);\n return error;\n};\n\nconst defaultOptions = {\n mode: VALIDATION_MODE.onSubmit,\n reValidateMode: VALIDATION_MODE.onChange,\n shouldFocusError: true,\n};\nfunction createFormControl(props = {}) {\n let _options = {\n ...defaultOptions,\n ...props,\n };\n let _formState = {\n submitCount: 0,\n isDirty: false,\n isReady: false,\n isLoading: isFunction(_options.defaultValues),\n isValidating: false,\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n touchedFields: {},\n dirtyFields: {},\n validatingFields: {},\n errors: _options.errors || {},\n disabled: _options.disabled || false,\n };\n let _fields = {};\n let _defaultValues = isObject(_options.defaultValues) || isObject(_options.values)\n ? cloneObject(_options.defaultValues || _options.values) || {}\n : {};\n let _formValues = _options.shouldUnregister\n ? {}\n : cloneObject(_defaultValues);\n let _state = {\n action: false,\n mount: false,\n watch: false,\n keepIsValid: false,\n };\n let _names = {\n mount: new Set(),\n disabled: new Set(),\n unMount: new Set(),\n array: new Set(),\n watch: new Set(),\n };\n let delayErrorCallback;\n let timer = 0;\n const defaultProxyFormState = {\n isDirty: false,\n dirtyFields: false,\n validatingFields: false,\n touchedFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n };\n const _proxyFormState = {\n ...defaultProxyFormState,\n };\n let _proxySubscribeFormState = {\n ..._proxyFormState,\n };\n const _subjects = {\n array: createSubject(),\n state: createSubject(),\n };\n const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;\n const debounce = (callback) => (wait) => {\n clearTimeout(timer);\n timer = setTimeout(callback, wait);\n };\n const _setValid = async (shouldUpdateValid) => {\n if (_state.keepIsValid) {\n return;\n }\n if (!_options.disabled &&\n (_proxyFormState.isValid ||\n _proxySubscribeFormState.isValid ||\n shouldUpdateValid)) {\n let isValid;\n if (_options.resolver) {\n isValid = isEmptyObject((await _runSchema()).errors);\n _updateIsValidating();\n }\n else {\n isValid = await executeBuiltInValidation(_fields, true);\n }\n if (isValid !== _formState.isValid) {\n _subjects.state.next({\n isValid,\n });\n }\n }\n };\n const _updateIsValidating = (names, isValidating) => {\n if (!_options.disabled &&\n (_proxyFormState.isValidating ||\n _proxyFormState.validatingFields ||\n _proxySubscribeFormState.isValidating ||\n _proxySubscribeFormState.validatingFields)) {\n (names || Array.from(_names.mount)).forEach((name) => {\n if (name) {\n isValidating\n ? set(_formState.validatingFields, name, isValidating)\n : unset(_formState.validatingFields, name);\n }\n });\n _subjects.state.next({\n validatingFields: _formState.validatingFields,\n isValidating: !isEmptyObject(_formState.validatingFields),\n });\n }\n };\n const _setFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => {\n if (args && method && !_options.disabled) {\n _state.action = true;\n if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\n const fieldValues = method(get(_fields, name), args.argA, args.argB);\n shouldSetValues && set(_fields, name, fieldValues);\n }\n if (shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.errors, name))) {\n const errors = method(get(_formState.errors, name), args.argA, args.argB);\n shouldSetValues && set(_formState.errors, name, errors);\n unsetEmptyArray(_formState.errors, name);\n }\n if ((_proxyFormState.touchedFields ||\n _proxySubscribeFormState.touchedFields) &&\n shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.touchedFields, name))) {\n const touchedFields = method(get(_formState.touchedFields, name), args.argA, args.argB);\n shouldSetValues && set(_formState.touchedFields, name, touchedFields);\n }\n if (_proxyFormState.dirtyFields || _proxySubscribeFormState.dirtyFields) {\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\n }\n _subjects.state.next({\n name,\n isDirty: _getDirty(name, values),\n dirtyFields: _formState.dirtyFields,\n errors: _formState.errors,\n isValid: _formState.isValid,\n });\n }\n else {\n set(_formValues, name, values);\n }\n };\n const updateErrors = (name, error) => {\n set(_formState.errors, name, error);\n _subjects.state.next({\n errors: _formState.errors,\n });\n };\n const _setErrors = (errors) => {\n _formState.errors = errors;\n _subjects.state.next({\n errors: _formState.errors,\n isValid: false,\n });\n };\n const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {\n const field = get(_fields, name);\n if (field) {\n const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);\n isUndefined(defaultValue) ||\n (ref && ref.defaultChecked) ||\n shouldSkipSetValueAs\n ? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f))\n : setFieldValue(name, defaultValue);\n _state.mount && !_state.action && _setValid();\n }\n };\n const updateTouchAndDirty = (name, fieldValue, isBlurEvent, shouldDirty, shouldRender) => {\n let shouldUpdateField = false;\n let isPreviousDirty = false;\n const output = {\n name,\n };\n if (!_options.disabled) {\n if (!isBlurEvent || shouldDirty) {\n if (_proxyFormState.isDirty || _proxySubscribeFormState.isDirty) {\n isPreviousDirty = _formState.isDirty;\n _formState.isDirty = output.isDirty = _getDirty();\n shouldUpdateField = isPreviousDirty !== output.isDirty;\n }\n const isCurrentFieldPristine = deepEqual(get(_defaultValues, name), fieldValue);\n isPreviousDirty = !!get(_formState.dirtyFields, name);\n isCurrentFieldPristine\n ? unset(_formState.dirtyFields, name)\n : set(_formState.dirtyFields, name, true);\n output.dirtyFields = _formState.dirtyFields;\n shouldUpdateField =\n shouldUpdateField ||\n ((_proxyFormState.dirtyFields ||\n _proxySubscribeFormState.dirtyFields) &&\n isPreviousDirty !== !isCurrentFieldPristine);\n }\n if (isBlurEvent) {\n const isPreviousFieldTouched = get(_formState.touchedFields, name);\n if (!isPreviousFieldTouched) {\n set(_formState.touchedFields, name, isBlurEvent);\n output.touchedFields = _formState.touchedFields;\n shouldUpdateField =\n shouldUpdateField ||\n ((_proxyFormState.touchedFields ||\n _proxySubscribeFormState.touchedFields) &&\n isPreviousFieldTouched !== isBlurEvent);\n }\n }\n shouldUpdateField && shouldRender && _subjects.state.next(output);\n }\n return shouldUpdateField ? output : {};\n };\n const shouldRenderByError = (name, isValid, error, fieldState) => {\n const previousFieldError = get(_formState.errors, name);\n const shouldUpdateValid = (_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n isBoolean(isValid) &&\n _formState.isValid !== isValid;\n if (_options.delayError && error) {\n delayErrorCallback = debounce(() => updateErrors(name, error));\n delayErrorCallback(_options.delayError);\n }\n else {\n clearTimeout(timer);\n delayErrorCallback = null;\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\n !isEmptyObject(fieldState) ||\n shouldUpdateValid) {\n const updatedFormState = {\n ...fieldState,\n ...(shouldUpdateValid && isBoolean(isValid) ? { isValid } : {}),\n errors: _formState.errors,\n name,\n };\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n _subjects.state.next(updatedFormState);\n }\n };\n const _runSchema = async (name) => {\n _updateIsValidating(name, true);\n const result = await _options.resolver(_formValues, _options.context, getResolverOptions(name || _names.mount, _fields, _options.criteriaMode, _options.shouldUseNativeValidation));\n return result;\n };\n const executeSchemaAndUpdateState = async (names) => {\n const { errors } = await _runSchema(names);\n _updateIsValidating(names);\n if (names) {\n for (const name of names) {\n const error = get(errors, name);\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n }\n else {\n _formState.errors = errors;\n }\n return errors;\n };\n const executeBuiltInValidation = async (fields, shouldOnlyCheckValid, context = {\n valid: true,\n }) => {\n for (const name in fields) {\n const field = fields[name];\n if (field) {\n const { _f, ...fieldValue } = field;\n if (_f) {\n const isFieldArrayRoot = _names.array.has(_f.name);\n const isPromiseFunction = field._f && hasPromiseValidation(field._f);\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([_f.name], true);\n }\n const fieldError = await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation && !shouldOnlyCheckValid, isFieldArrayRoot);\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([_f.name]);\n }\n if (fieldError[_f.name]) {\n context.valid = false;\n if (shouldOnlyCheckValid || props.shouldUseNativeValidation) {\n break;\n }\n }\n !shouldOnlyCheckValid &&\n (get(fieldError, _f.name)\n ? isFieldArrayRoot\n ? updateFieldArrayRootError(_formState.errors, fieldError, _f.name)\n : set(_formState.errors, _f.name, fieldError[_f.name])\n : unset(_formState.errors, _f.name));\n }\n !isEmptyObject(fieldValue) &&\n (await executeBuiltInValidation(fieldValue, shouldOnlyCheckValid, context));\n }\n }\n return context.valid;\n };\n const _removeUnmounted = () => {\n for (const name of _names.unMount) {\n const field = get(_fields, name);\n field &&\n (field._f.refs\n ? field._f.refs.every((ref) => !live(ref))\n : !live(field._f.ref)) &&\n unregister(name);\n }\n _names.unMount = new Set();\n };\n const _getDirty = (name, data) => !_options.disabled &&\n (name && data && set(_formValues, name, data),\n !deepEqual(getValues(), _defaultValues));\n const _getWatch = (names, defaultValue, isGlobal) => generateWatchOutput(names, _names, {\n ...(_state.mount\n ? _formValues\n : isUndefined(defaultValue)\n ? _defaultValues\n : isString(names)\n ? { [names]: defaultValue }\n : defaultValue),\n }, isGlobal, defaultValue);\n const _getFieldArray = (name) => compact(get(_state.mount ? _formValues : _defaultValues, name, _options.shouldUnregister ? get(_defaultValues, name, []) : []));\n const setFieldValue = (name, value, options = {}) => {\n const field = get(_fields, name);\n let fieldValue = value;\n if (field) {\n const fieldReference = field._f;\n if (fieldReference) {\n !fieldReference.disabled &&\n set(_formValues, name, getFieldValueAs(value, fieldReference));\n fieldValue =\n isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\n ? ''\n : value;\n if (isMultipleSelect(fieldReference.ref)) {\n [...fieldReference.ref.options].forEach((optionRef) => (optionRef.selected = fieldValue.includes(optionRef.value)));\n }\n else if (fieldReference.refs) {\n if (isCheckBoxInput(fieldReference.ref)) {\n fieldReference.refs.forEach((checkboxRef) => {\n if (!checkboxRef.defaultChecked || !checkboxRef.disabled) {\n if (Array.isArray(fieldValue)) {\n checkboxRef.checked = !!fieldValue.find((data) => data === checkboxRef.value);\n }\n else {\n checkboxRef.checked =\n fieldValue === checkboxRef.value || !!fieldValue;\n }\n }\n });\n }\n else {\n fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));\n }\n }\n else if (isFileInput(fieldReference.ref)) {\n fieldReference.ref.value = '';\n }\n else {\n fieldReference.ref.value = fieldValue;\n if (!fieldReference.ref.type) {\n _subjects.state.next({\n name,\n values: cloneObject(_formValues),\n });\n }\n }\n }\n }\n (options.shouldDirty || options.shouldTouch) &&\n updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, true);\n options.shouldValidate && trigger(name);\n };\n const setValues = (name, value, options) => {\n for (const fieldKey in value) {\n if (!value.hasOwnProperty(fieldKey)) {\n return;\n }\n const fieldValue = value[fieldKey];\n const fieldName = name + '.' + fieldKey;\n const field = get(_fields, fieldName);\n (_names.array.has(name) ||\n isObject(fieldValue) ||\n (field && !field._f)) &&\n !isDateObject(fieldValue)\n ? setValues(fieldName, fieldValue, options)\n : setFieldValue(fieldName, fieldValue, options);\n }\n };\n const setValue = (name, value, options = {}) => {\n const field = get(_fields, name);\n const isFieldArray = _names.array.has(name);\n const cloneValue = cloneObject(value);\n set(_formValues, name, cloneValue);\n if (isFieldArray) {\n _subjects.array.next({\n name,\n values: cloneObject(_formValues),\n });\n if ((_proxyFormState.isDirty ||\n _proxyFormState.dirtyFields ||\n _proxySubscribeFormState.isDirty ||\n _proxySubscribeFormState.dirtyFields) &&\n options.shouldDirty) {\n _subjects.state.next({\n name,\n dirtyFields: getDirtyFields(_defaultValues, _formValues),\n isDirty: _getDirty(name, cloneValue),\n });\n }\n }\n else {\n field && !field._f && !isNullOrUndefined(cloneValue)\n ? setValues(name, cloneValue, options)\n : setFieldValue(name, cloneValue, options);\n }\n if (isWatched(name, _names)) {\n _subjects.state.next({\n ..._formState,\n name,\n values: cloneObject(_formValues),\n });\n }\n else {\n _subjects.state.next({\n name: _state.mount ? name : undefined,\n values: cloneObject(_formValues),\n });\n }\n };\n const onChange = async (event) => {\n _state.mount = true;\n const target = event.target;\n let name = target.name;\n let isFieldValueUpdated = true;\n const field = get(_fields, name);\n const _updateIsFieldValueUpdated = (fieldValue) => {\n isFieldValueUpdated =\n Number.isNaN(fieldValue) ||\n (isDateObject(fieldValue) && isNaN(fieldValue.getTime())) ||\n deepEqual(fieldValue, get(_formValues, name, fieldValue));\n };\n const validationModeBeforeSubmit = getValidationModes(_options.mode);\n const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\n if (field) {\n let error;\n let isValid;\n const fieldValue = target.type\n ? getFieldValue(field._f)\n : getEventValue(event);\n const isBlurEvent = event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\n const shouldSkipValidation = (!hasValidation(field._f) &&\n !_options.resolver &&\n !get(_formState.errors, name) &&\n !field._f.deps) ||\n skipValidation(isBlurEvent, get(_formState.touchedFields, name), _formState.isSubmitted, validationModeAfterSubmit, validationModeBeforeSubmit);\n const watched = isWatched(name, _names, isBlurEvent);\n set(_formValues, name, fieldValue);\n if (isBlurEvent) {\n if (!target || !target.readOnly) {\n field._f.onBlur && field._f.onBlur(event);\n delayErrorCallback && delayErrorCallback(0);\n }\n }\n else if (field._f.onChange) {\n field._f.onChange(event);\n }\n const fieldState = updateTouchAndDirty(name, fieldValue, isBlurEvent);\n const shouldRender = !isEmptyObject(fieldState) || watched;\n !isBlurEvent &&\n _subjects.state.next({\n name,\n type: event.type,\n values: cloneObject(_formValues),\n });\n if (shouldSkipValidation) {\n if (_proxyFormState.isValid || _proxySubscribeFormState.isValid) {\n if (_options.mode === 'onBlur') {\n if (isBlurEvent) {\n _setValid();\n }\n }\n else if (!isBlurEvent) {\n _setValid();\n }\n }\n return (shouldRender &&\n _subjects.state.next({ name, ...(watched ? {} : fieldState) }));\n }\n !isBlurEvent && watched && _subjects.state.next({ ..._formState });\n if (_options.resolver) {\n const { errors } = await _runSchema([name]);\n _updateIsValidating([name]);\n _updateIsFieldValueUpdated(fieldValue);\n if (isFieldValueUpdated) {\n const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);\n const errorLookupResult = schemaErrorLookup(errors, _fields, previousErrorLookupResult.name || name);\n error = errorLookupResult.error;\n name = errorLookupResult.name;\n isValid = isEmptyObject(errors);\n }\n }\n else {\n _updateIsValidating([name], true);\n error = (await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation))[name];\n _updateIsValidating([name]);\n _updateIsFieldValueUpdated(fieldValue);\n if (isFieldValueUpdated) {\n if (error) {\n isValid = false;\n }\n else if (_proxyFormState.isValid ||\n _proxySubscribeFormState.isValid) {\n isValid = await executeBuiltInValidation(_fields, true);\n }\n }\n }\n if (isFieldValueUpdated) {\n field._f.deps &&\n (!Array.isArray(field._f.deps) || field._f.deps.length > 0) &&\n trigger(field._f.deps);\n shouldRenderByError(name, isValid, error, fieldState);\n }\n }\n };\n const _focusInput = (ref, key) => {\n if (get(_formState.errors, key) && ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n };\n const trigger = async (name, options = {}) => {\n let isValid;\n let validationResult;\n const fieldNames = convertToArrayPayload(name);\n if (_options.resolver) {\n const errors = await executeSchemaAndUpdateState(isUndefined(name) ? name : fieldNames);\n isValid = isEmptyObject(errors);\n validationResult = name\n ? !fieldNames.some((name) => get(errors, name))\n : isValid;\n }\n else if (name) {\n validationResult = (await Promise.all(fieldNames.map(async (fieldName) => {\n const field = get(_fields, fieldName);\n return await executeBuiltInValidation(field && field._f ? { [fieldName]: field } : field);\n }))).every(Boolean);\n !(!validationResult && !_formState.isValid) && _setValid();\n }\n else {\n validationResult = isValid = await executeBuiltInValidation(_fields);\n }\n _subjects.state.next({\n ...(!isString(name) ||\n ((_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n isValid !== _formState.isValid)\n ? {}\n : { name }),\n ...(_options.resolver || !name ? { isValid } : {}),\n errors: _formState.errors,\n });\n options.shouldFocus &&\n !validationResult &&\n iterateFieldsByAction(_fields, _focusInput, name ? fieldNames : _names.mount);\n return validationResult;\n };\n const getValues = (fieldNames, config) => {\n let values = {\n ...(_state.mount ? _formValues : _defaultValues),\n };\n if (config) {\n values = extractFormValues(config.dirtyFields ? _formState.dirtyFields : _formState.touchedFields, values);\n }\n return isUndefined(fieldNames)\n ? values\n : isString(fieldNames)\n ? get(values, fieldNames)\n : fieldNames.map((name) => get(values, name));\n };\n const getFieldState = (name, formState) => ({\n invalid: !!get((formState || _formState).errors, name),\n isDirty: !!get((formState || _formState).dirtyFields, name),\n error: get((formState || _formState).errors, name),\n isValidating: !!get(_formState.validatingFields, name),\n isTouched: !!get((formState || _formState).touchedFields, name),\n });\n const clearErrors = (name) => {\n const names = name ? convertToArrayPayload(name) : undefined;\n names === null || names === void 0 ? void 0 : names.forEach((inputName) => unset(_formState.errors, inputName));\n if (names) {\n // Emit for each cleared field with the field name so that\n // shouldSubscribeByName can filter and avoid broad re-renders\n names.forEach((inputName) => {\n _subjects.state.next({\n name: inputName,\n errors: _formState.errors,\n });\n });\n }\n else {\n // Clear all errors - emit without name to notify all subscribers\n _subjects.state.next({\n errors: {},\n });\n }\n };\n const setError = (name, error, options) => {\n const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\n const currentError = get(_formState.errors, name) || {};\n // Don't override existing error messages elsewhere in the object tree.\n const { ref: currentRef, message, type, ...restOfErrorTree } = currentError;\n set(_formState.errors, name, {\n ...restOfErrorTree,\n ...error,\n ref,\n });\n _subjects.state.next({\n name,\n errors: _formState.errors,\n isValid: false,\n });\n options && options.shouldFocus && ref && ref.focus && ref.focus();\n };\n const watch = (name, defaultValue) => isFunction(name)\n ? _subjects.state.subscribe({\n next: (payload) => 'values' in payload &&\n name(_getWatch(undefined, defaultValue), payload),\n })\n : _getWatch(name, defaultValue, true);\n const _subscribe = (props) => _subjects.state.subscribe({\n next: (formState) => {\n if (shouldSubscribeByName(props.name, formState.name, props.exact) &&\n shouldRenderFormState(formState, props.formState || _proxyFormState, _setFormState, props.reRenderRoot)) {\n props.callback({\n values: { ..._formValues },\n ..._formState,\n ...formState,\n defaultValues: _defaultValues,\n });\n }\n },\n }).unsubscribe;\n const subscribe = (props) => {\n _state.mount = true;\n _proxySubscribeFormState = {\n ..._proxySubscribeFormState,\n ...props.formState,\n };\n return _subscribe({\n ...props,\n formState: {\n ...defaultProxyFormState,\n ...props.formState,\n },\n });\n };\n const unregister = (name, options = {}) => {\n for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\n _names.mount.delete(fieldName);\n _names.array.delete(fieldName);\n if (!options.keepValue) {\n unset(_fields, fieldName);\n unset(_formValues, fieldName);\n }\n !options.keepError && unset(_formState.errors, fieldName);\n !options.keepDirty && unset(_formState.dirtyFields, fieldName);\n !options.keepTouched && unset(_formState.touchedFields, fieldName);\n !options.keepIsValidating &&\n unset(_formState.validatingFields, fieldName);\n !_options.shouldUnregister &&\n !options.keepDefaultValue &&\n unset(_defaultValues, fieldName);\n }\n _subjects.state.next({\n values: cloneObject(_formValues),\n });\n _subjects.state.next({\n ..._formState,\n ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\n });\n !options.keepIsValid && _setValid();\n };\n const _setDisabledField = ({ disabled, name, }) => {\n if ((isBoolean(disabled) && _state.mount) ||\n !!disabled ||\n _names.disabled.has(name)) {\n const wasDisabled = _names.disabled.has(name);\n const isDisabled = !!disabled;\n const disabledStateChanged = wasDisabled !== isDisabled;\n disabled ? _names.disabled.add(name) : _names.disabled.delete(name);\n disabledStateChanged && _state.mount && !_state.action && _setValid();\n }\n };\n const register = (name, options = {}) => {\n let field = get(_fields, name);\n const disabledIsDefined = isBoolean(options.disabled) || isBoolean(_options.disabled);\n set(_fields, name, {\n ...(field || {}),\n _f: {\n ...(field && field._f ? field._f : { ref: { name } }),\n name,\n mount: true,\n ...options,\n },\n });\n _names.mount.add(name);\n if (field) {\n _setDisabledField({\n disabled: isBoolean(options.disabled)\n ? options.disabled\n : _options.disabled,\n name,\n });\n }\n else {\n updateValidAndValue(name, true, options.value);\n }\n return {\n ...(disabledIsDefined\n ? { disabled: options.disabled || _options.disabled }\n : {}),\n ...(_options.progressive\n ? {\n required: !!options.required,\n min: getRuleValue(options.min),\n max: getRuleValue(options.max),\n minLength: getRuleValue(options.minLength),\n maxLength: getRuleValue(options.maxLength),\n pattern: getRuleValue(options.pattern),\n }\n : {}),\n name,\n onChange,\n onBlur: onChange,\n ref: (ref) => {\n if (ref) {\n register(name, options);\n field = get(_fields, name);\n const fieldRef = isUndefined(ref.value)\n ? ref.querySelectorAll\n ? ref.querySelectorAll('input,select,textarea')[0] || ref\n : ref\n : ref;\n const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\n const refs = field._f.refs || [];\n if (radioOrCheckbox\n ? refs.find((option) => option === fieldRef)\n : fieldRef === field._f.ref) {\n return;\n }\n set(_fields, name, {\n _f: {\n ...field._f,\n ...(radioOrCheckbox\n ? {\n refs: [\n ...refs.filter(live),\n fieldRef,\n ...(Array.isArray(get(_defaultValues, name)) ? [{}] : []),\n ],\n ref: { type: fieldRef.type, name },\n }\n : { ref: fieldRef }),\n },\n });\n updateValidAndValue(name, false, undefined, fieldRef);\n }\n else {\n field = get(_fields, name, {});\n if (field._f) {\n field._f.mount = false;\n }\n (_options.shouldUnregister || options.shouldUnregister) &&\n !(isNameInFieldArray(_names.array, name) && _state.action) &&\n _names.unMount.add(name);\n }\n },\n };\n };\n const _focusError = () => _options.shouldFocusError &&\n iterateFieldsByAction(_fields, _focusInput, _names.mount);\n const _disableForm = (disabled) => {\n if (isBoolean(disabled)) {\n _subjects.state.next({ disabled });\n iterateFieldsByAction(_fields, (ref, name) => {\n const currentField = get(_fields, name);\n if (currentField) {\n ref.disabled = currentField._f.disabled || disabled;\n if (Array.isArray(currentField._f.refs)) {\n currentField._f.refs.forEach((inputRef) => {\n inputRef.disabled = currentField._f.disabled || disabled;\n });\n }\n }\n }, 0, false);\n }\n };\n const handleSubmit = (onValid, onInvalid) => async (e) => {\n let onValidError = undefined;\n if (e) {\n e.preventDefault && e.preventDefault();\n e.persist &&\n e.persist();\n }\n let fieldValues = cloneObject(_formValues);\n _subjects.state.next({\n isSubmitting: true,\n });\n if (_options.resolver) {\n const { errors, values } = await _runSchema();\n _updateIsValidating();\n _formState.errors = errors;\n fieldValues = cloneObject(values);\n }\n else {\n await executeBuiltInValidation(_fields);\n }\n if (_names.disabled.size) {\n for (const name of _names.disabled) {\n unset(fieldValues, name);\n }\n }\n unset(_formState.errors, 'root');\n if (isEmptyObject(_formState.errors)) {\n _subjects.state.next({\n errors: {},\n });\n try {\n await onValid(fieldValues, e);\n }\n catch (error) {\n onValidError = error;\n }\n }\n else {\n if (onInvalid) {\n await onInvalid({ ..._formState.errors }, e);\n }\n _focusError();\n setTimeout(_focusError);\n }\n _subjects.state.next({\n isSubmitted: true,\n isSubmitting: false,\n isSubmitSuccessful: isEmptyObject(_formState.errors) && !onValidError,\n submitCount: _formState.submitCount + 1,\n errors: _formState.errors,\n });\n if (onValidError) {\n throw onValidError;\n }\n };\n const resetField = (name, options = {}) => {\n if (get(_fields, name)) {\n if (isUndefined(options.defaultValue)) {\n setValue(name, cloneObject(get(_defaultValues, name)));\n }\n else {\n setValue(name, options.defaultValue);\n set(_defaultValues, name, cloneObject(options.defaultValue));\n }\n if (!options.keepTouched) {\n unset(_formState.touchedFields, name);\n }\n if (!options.keepDirty) {\n unset(_formState.dirtyFields, name);\n _formState.isDirty = options.defaultValue\n ? _getDirty(name, cloneObject(get(_defaultValues, name)))\n : _getDirty();\n }\n if (!options.keepError) {\n unset(_formState.errors, name);\n _proxyFormState.isValid && _setValid();\n }\n _subjects.state.next({ ..._formState });\n }\n };\n const _reset = (formValues, keepStateOptions = {}) => {\n const updatedValues = formValues ? cloneObject(formValues) : _defaultValues;\n const cloneUpdatedValues = cloneObject(updatedValues);\n const isEmptyResetValues = isEmptyObject(formValues);\n const values = isEmptyResetValues ? _defaultValues : cloneUpdatedValues;\n if (!keepStateOptions.keepDefaultValues) {\n _defaultValues = updatedValues;\n }\n if (!keepStateOptions.keepValues) {\n if (keepStateOptions.keepDirtyValues) {\n const fieldsToCheck = new Set([\n ..._names.mount,\n ...Object.keys(getDirtyFields(_defaultValues, _formValues)),\n ]);\n for (const fieldName of Array.from(fieldsToCheck)) {\n const isDirty = get(_formState.dirtyFields, fieldName);\n const existingValue = get(_formValues, fieldName);\n const newValue = get(values, fieldName);\n if (isDirty && !isUndefined(existingValue)) {\n set(values, fieldName, existingValue);\n }\n else if (!isDirty && !isUndefined(newValue)) {\n setValue(fieldName, newValue);\n }\n }\n }\n else {\n if (isWeb && isUndefined(formValues)) {\n for (const name of _names.mount) {\n const field = get(_fields, name);\n if (field && field._f) {\n const fieldReference = Array.isArray(field._f.refs)\n ? field._f.refs[0]\n : field._f.ref;\n if (isHTMLElement(fieldReference)) {\n const form = fieldReference.closest('form');\n if (form) {\n form.reset();\n break;\n }\n }\n }\n }\n }\n if (keepStateOptions.keepFieldsRef) {\n for (const fieldName of _names.mount) {\n setValue(fieldName, get(values, fieldName));\n }\n }\n else {\n _fields = {};\n }\n }\n _formValues = _options.shouldUnregister\n ? keepStateOptions.keepDefaultValues\n ? cloneObject(_defaultValues)\n : {}\n : cloneObject(values);\n _subjects.array.next({\n values: { ...values },\n });\n _subjects.state.next({\n values: { ...values },\n });\n }\n _names = {\n mount: keepStateOptions.keepDirtyValues ? _names.mount : new Set(),\n unMount: new Set(),\n array: new Set(),\n disabled: new Set(),\n watch: new Set(),\n watchAll: false,\n focus: '',\n };\n _state.mount =\n !_proxyFormState.isValid ||\n !!keepStateOptions.keepIsValid ||\n !!keepStateOptions.keepDirtyValues ||\n (!_options.shouldUnregister && !isEmptyObject(values));\n _state.watch = !!_options.shouldUnregister;\n _state.keepIsValid = !!keepStateOptions.keepIsValid;\n _state.action = false;\n // Clear errors synchronously to prevent validation errors on subsequent submissions\n // This fixes the issue where form.reset() causes validation errors on subsequent\n // submissions in Next.js 16 with Server Actions\n if (!keepStateOptions.keepErrors) {\n _formState.errors = {};\n }\n _subjects.state.next({\n submitCount: keepStateOptions.keepSubmitCount\n ? _formState.submitCount\n : 0,\n isDirty: isEmptyResetValues\n ? false\n : keepStateOptions.keepDirty\n ? _formState.isDirty\n : !!(keepStateOptions.keepDefaultValues &&\n !deepEqual(formValues, _defaultValues)),\n isSubmitted: keepStateOptions.keepIsSubmitted\n ? _formState.isSubmitted\n : false,\n dirtyFields: isEmptyResetValues\n ? {}\n : keepStateOptions.keepDirtyValues\n ? keepStateOptions.keepDefaultValues && _formValues\n ? getDirtyFields(_defaultValues, _formValues)\n : _formState.dirtyFields\n : keepStateOptions.keepDefaultValues && formValues\n ? getDirtyFields(_defaultValues, formValues)\n : keepStateOptions.keepDirty\n ? _formState.dirtyFields\n : {},\n touchedFields: keepStateOptions.keepTouched\n ? _formState.touchedFields\n : {},\n errors: keepStateOptions.keepErrors ? _formState.errors : {},\n isSubmitSuccessful: keepStateOptions.keepIsSubmitSuccessful\n ? _formState.isSubmitSuccessful\n : false,\n isSubmitting: false,\n defaultValues: _defaultValues,\n });\n };\n const reset = (formValues, keepStateOptions) => _reset(isFunction(formValues)\n ? formValues(_formValues)\n : formValues, { ..._options.resetOptions, ...keepStateOptions });\n const setFocus = (name, options = {}) => {\n const field = get(_fields, name);\n const fieldReference = field && field._f;\n if (fieldReference) {\n const fieldRef = fieldReference.refs\n ? fieldReference.refs[0]\n : fieldReference.ref;\n if (fieldRef.focus) {\n // Use setTimeout to ensure focus happens after any pending state updates\n // This fixes the issue where setFocus doesn't work immediately after setError\n setTimeout(() => {\n fieldRef.focus();\n options.shouldSelect &&\n isFunction(fieldRef.select) &&\n fieldRef.select();\n });\n }\n }\n };\n const _setFormState = (updatedFormState) => {\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n };\n const _resetDefaultValues = () => isFunction(_options.defaultValues) &&\n _options.defaultValues().then((values) => {\n reset(values, _options.resetOptions);\n _subjects.state.next({\n isLoading: false,\n });\n });\n const methods = {\n control: {\n register,\n unregister,\n getFieldState,\n handleSubmit,\n setError,\n _subscribe,\n _runSchema,\n _updateIsValidating,\n _focusError,\n _getWatch,\n _getDirty,\n _setValid,\n _setFieldArray,\n _setDisabledField,\n _setErrors,\n _getFieldArray,\n _reset,\n _resetDefaultValues,\n _removeUnmounted,\n _disableForm,\n _subjects,\n _proxyFormState,\n get _fields() {\n return _fields;\n },\n get _formValues() {\n return _formValues;\n },\n get _state() {\n return _state;\n },\n set _state(value) {\n _state = value;\n },\n get _defaultValues() {\n return _defaultValues;\n },\n get _names() {\n return _names;\n },\n set _names(value) {\n _names = value;\n },\n get _formState() {\n return _formState;\n },\n get _options() {\n return _options;\n },\n set _options(value) {\n _options = {\n ..._options,\n ...value,\n };\n },\n },\n subscribe,\n trigger,\n register,\n handleSubmit,\n watch,\n setValue,\n getValues,\n reset,\n resetField,\n clearErrors,\n unregister,\n setError,\n setFocus,\n getFieldState,\n };\n return {\n ...methods,\n formControl: methods,\n };\n}\n\nvar generateId = () => {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = ((Math.random() * 16 + d) % 16) | 0;\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n};\n\nvar getFocusFieldName = (name, index, options = {}) => options.shouldFocus || isUndefined(options.shouldFocus)\n ? options.focusName ||\n `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\n : '';\n\nvar appendAt = (data, value) => [\n ...data,\n ...convertToArrayPayload(value),\n];\n\nvar fillEmptyArray = (value) => Array.isArray(value) ? value.map(() => undefined) : undefined;\n\nfunction insert(data, index, value) {\n return [\n ...data.slice(0, index),\n ...convertToArrayPayload(value),\n ...data.slice(index),\n ];\n}\n\nvar moveArrayAt = (data, from, to) => {\n if (!Array.isArray(data)) {\n return [];\n }\n if (isUndefined(data[to])) {\n data[to] = undefined;\n }\n data.splice(to, 0, data.splice(from, 1)[0]);\n return data;\n};\n\nvar prependAt = (data, value) => [\n ...convertToArrayPayload(value),\n ...convertToArrayPayload(data),\n];\n\nfunction removeAtIndexes(data, indexes) {\n let i = 0;\n const temp = [...data];\n for (const index of indexes) {\n temp.splice(index - i, 1);\n i++;\n }\n return compact(temp).length ? temp : [];\n}\nvar removeArrayAt = (data, index) => isUndefined(index)\n ? []\n : removeAtIndexes(data, convertToArrayPayload(index).sort((a, b) => a - b));\n\nvar swapArrayAt = (data, indexA, indexB) => {\n [data[indexA], data[indexB]] = [data[indexB], data[indexA]];\n};\n\nvar updateAt = (fieldValues, index, value) => {\n fieldValues[index] = value;\n return fieldValues;\n};\n\n/**\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc. • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn) • [Video](https://youtu.be/4MrbfGSFY2A)\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\n *\n * @param props - useFieldArray props\n *\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, control, handleSubmit, reset, trigger, setError } = useForm({\n * defaultValues: {\n * test: []\n * }\n * });\n * const { fields, append } = useFieldArray({\n * control,\n * name: \"test\"\n * });\n *\n * return (\n * <form onSubmit={handleSubmit(data => console.log(data))}>\n * {fields.map((item, index) => (\n * <input key={item.id} {...register(`test.${index}.firstName`)} />\n * ))}\n * <button type=\"button\" onClick={() => append({ firstName: \"bill\" })}>\n * append\n * </button>\n * <input type=\"submit\" />\n * </form>\n * );\n * }\n * ```\n */\nfunction useFieldArray(props) {\n const formControl = useFormControlContext();\n const { control = formControl, name, keyName = 'id', shouldUnregister, rules, } = props;\n const [fields, setFields] = React.useState(control._getFieldArray(name));\n const ids = React.useRef(control._getFieldArray(name).map(generateId));\n const _actioned = React.useRef(false);\n control._names.array.add(name);\n React.useMemo(() => rules &&\n fields.length >= 0 &&\n control.register(name, rules), [control, name, fields.length, rules]);\n useIsomorphicLayoutEffect(() => control._subjects.array.subscribe({\n next: ({ values, name: fieldArrayName, }) => {\n if (fieldArrayName === name || !fieldArrayName) {\n const fieldValues = get(values, name);\n if (Array.isArray(fieldValues)) {\n setFields(fieldValues);\n ids.current = fieldValues.map(generateId);\n }\n }\n },\n }).unsubscribe, [control, name]);\n const updateValues = React.useCallback((updatedFieldArrayValues) => {\n _actioned.current = true;\n control._setFieldArray(name, updatedFieldArrayValues);\n }, [control, name]);\n const append = (value, options) => {\n const appendValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = appendAt(control._getFieldArray(name), appendValue);\n control._names.focus = getFocusFieldName(name, updatedFieldArrayValues.length - 1, options);\n ids.current = appendAt(ids.current, appendValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, appendAt, {\n argA: fillEmptyArray(value),\n });\n };\n const prepend = (value, options) => {\n const prependValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = prependAt(control._getFieldArray(name), prependValue);\n control._names.focus = getFocusFieldName(name, 0, options);\n ids.current = prependAt(ids.current, prependValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, prependAt, {\n argA: fillEmptyArray(value),\n });\n };\n const remove = (index) => {\n const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);\n ids.current = removeArrayAt(ids.current, index);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n !Array.isArray(get(control._fields, name)) &&\n set(control._fields, name, undefined);\n control._setFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\n argA: index,\n });\n };\n const insert$1 = (index, value, options) => {\n const insertValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);\n control._names.focus = getFocusFieldName(name, index, options);\n ids.current = insert(ids.current, index, insertValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, insert, {\n argA: index,\n argB: fillEmptyArray(value),\n });\n };\n const swap = (indexA, indexB) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n swapArrayAt(updatedFieldArrayValues, indexA, indexB);\n swapArrayAt(ids.current, indexA, indexB);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, swapArrayAt, {\n argA: indexA,\n argB: indexB,\n }, false);\n };\n const move = (from, to) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n moveArrayAt(updatedFieldArrayValues, from, to);\n moveArrayAt(ids.current, from, to);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, moveArrayAt, {\n argA: from,\n argB: to,\n }, false);\n };\n const update = (index, value) => {\n const updateValue = cloneObject(value);\n const updatedFieldArrayValues = updateAt(control._getFieldArray(name), index, updateValue);\n ids.current = [...updatedFieldArrayValues].map((item, i) => !item || i === index ? generateId() : ids.current[i]);\n updateValues(updatedFieldArrayValues);\n setFields([...updatedFieldArrayValues]);\n control._setFieldArray(name, updatedFieldArrayValues, updateAt, {\n argA: index,\n argB: updateValue,\n }, true, false);\n };\n const replace = (value) => {\n const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\n ids.current = updatedFieldArrayValues.map(generateId);\n updateValues([...updatedFieldArrayValues]);\n setFields([...updatedFieldArrayValues]);\n control._setFieldArray(name, [...updatedFieldArrayValues], (data) => data, {}, true, false);\n };\n React.useEffect(() => {\n control._state.action = false;\n isWatched(name, control._names) &&\n control._subjects.state.next({\n ...control._formState,\n });\n if (_actioned.current &&\n (!getValidationModes(control._options.mode).isOnSubmit ||\n control._formState.isSubmitted) &&\n !getValidationModes(control._options.reValidateMode).isOnSubmit) {\n if (control._options.resolver) {\n control._runSchema([name]).then((result) => {\n control._updateIsValidating([name]);\n const error = get(result.errors, name);\n const existingError = get(control._formState.errors, name);\n if (existingError\n ? (!error && existingError.type) ||\n (error &&\n (existingError.type !== error.type ||\n existingError.message !== error.message))\n : error && error.type) {\n error\n ? set(control._formState.errors, name, error)\n : unset(control._formState.errors, name);\n control._subjects.state.next({\n errors: control._formState.errors,\n });\n }\n });\n }\n else {\n const field = get(control._fields, name);\n if (field &&\n field._f &&\n !(getValidationModes(control._options.reValidateMode).isOnSubmit &&\n getValidationModes(control._options.mode).isOnSubmit)) {\n validateField(field, control._names.disabled, control._formValues, control._options.criteriaMode === VALIDATION_MODE.all, control._options.shouldUseNativeValidation, true).then((error) => !isEmptyObject(error) &&\n control._subjects.state.next({\n errors: updateFieldArrayRootError(control._formState.errors, error, name),\n }));\n }\n }\n }\n control._subjects.state.next({\n name,\n values: cloneObject(control._formValues),\n });\n control._names.focus &&\n iterateFieldsByAction(control._fields, (ref, key) => {\n if (control._names.focus &&\n key.startsWith(control._names.focus) &&\n ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n });\n control._names.focus = '';\n control._setValid();\n _actioned.current = false;\n }, [fields, name, control]);\n React.useEffect(() => {\n !get(control._formValues, name) && control._setFieldArray(name);\n return () => {\n const updateMounted = (name, value) => {\n const field = get(control._fields, name);\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n control._options.shouldUnregister || shouldUnregister\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, keyName, shouldUnregister]);\n return {\n swap: React.useCallback(swap, [updateValues, name, control]),\n move: React.useCallback(move, [updateValues, name, control]),\n prepend: React.useCallback(prepend, [updateValues, name, control]),\n append: React.useCallback(append, [updateValues, name, control]),\n remove: React.useCallback(remove, [updateValues, name, control]),\n insert: React.useCallback(insert$1, [updateValues, name, control]),\n update: React.useCallback(update, [updateValues, name, control]),\n replace: React.useCallback(replace, [updateValues, name, control]),\n fields: React.useMemo(() => fields.map((field, index) => ({\n ...field,\n [keyName]: ids.current[index] || generateId(),\n })), [fields, keyName]),\n };\n}\n\n/**\n * Custom hook to manage the entire form.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\n *\n * @param props - form configuration and validation parameters.\n *\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, watch, formState: { errors } } = useForm();\n * const onSubmit = data => console.log(data);\n *\n * console.log(watch(\"example\"));\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <input defaultValue=\"test\" {...register(\"example\")} />\n * <input {...register(\"exampleRequired\", { required: true })} />\n * {errors.exampleRequired && <span>This field is required</span>}\n * <button>Submit</button>\n * </form>\n * );\n * }\n * ```\n */\nfunction useForm(props = {}) {\n const _formControl = React.useRef(undefined);\n const _values = React.useRef(undefined);\n const [formState, updateFormState] = React.useState({\n isDirty: false,\n isValidating: false,\n isLoading: isFunction(props.defaultValues),\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n submitCount: 0,\n dirtyFields: {},\n touchedFields: {},\n validatingFields: {},\n errors: props.errors || {},\n disabled: props.disabled || false,\n isReady: false,\n defaultValues: isFunction(props.defaultValues)\n ? undefined\n : props.defaultValues,\n });\n if (!_formControl.current) {\n if (props.formControl) {\n _formControl.current = {\n ...props.formControl,\n formState,\n };\n if (props.defaultValues && !isFunction(props.defaultValues)) {\n props.formControl.reset(props.defaultValues, props.resetOptions);\n }\n }\n else {\n const { formControl, ...rest } = createFormControl(props);\n _formControl.current = {\n ...rest,\n formState,\n };\n }\n }\n const control = _formControl.current.control;\n control._options = props;\n useIsomorphicLayoutEffect(() => {\n const sub = control._subscribe({\n formState: control._proxyFormState,\n callback: () => updateFormState({ ...control._formState }),\n reRenderRoot: true,\n });\n updateFormState((data) => ({\n ...data,\n isReady: true,\n }));\n control._formState.isReady = true;\n return sub;\n }, [control]);\n React.useEffect(() => control._disableForm(props.disabled), [control, props.disabled]);\n React.useEffect(() => {\n if (props.mode) {\n control._options.mode = props.mode;\n }\n if (props.reValidateMode) {\n control._options.reValidateMode = props.reValidateMode;\n }\n }, [control, props.mode, props.reValidateMode]);\n React.useEffect(() => {\n if (props.errors) {\n control._setErrors(props.errors);\n control._focusError();\n }\n }, [control, props.errors]);\n React.useEffect(() => {\n props.shouldUnregister &&\n control._subjects.state.next({\n values: control._getWatch(),\n });\n }, [control, props.shouldUnregister]);\n React.useEffect(() => {\n if (control._proxyFormState.isDirty) {\n const isDirty = control._getDirty();\n if (isDirty !== formState.isDirty) {\n control._subjects.state.next({\n isDirty,\n });\n }\n }\n }, [control, formState.isDirty]);\n React.useEffect(() => {\n var _a;\n if (props.values && !deepEqual(props.values, _values.current)) {\n control._reset(props.values, {\n keepFieldsRef: true,\n ...control._options.resetOptions,\n });\n if (!((_a = control._options.resetOptions) === null || _a === void 0 ? void 0 : _a.keepIsValid)) {\n control._setValid();\n }\n _values.current = props.values;\n updateFormState((state) => ({ ...state }));\n }\n else {\n control._resetDefaultValues();\n }\n }, [control, props.values]);\n React.useEffect(() => {\n if (!control._state.mount) {\n control._setValid();\n control._state.mount = true;\n }\n if (control._state.watch) {\n control._state.watch = false;\n control._subjects.state.next({ ...control._formState });\n }\n control._removeUnmounted();\n });\n _formControl.current.formState = React.useMemo(() => getProxyFormState(formState, control), [control, formState]);\n return _formControl.current;\n}\n\n/**\n * Watch component that subscribes to form field changes and re-renders when watched fields update.\n *\n * @param control - The form control object from useForm\n * @param name - Can be field name, array of field names, or undefined to watch the entire form\n * @param disabled - Disable subscription\n * @param exact - Whether to watch exact field names or not\n * @param defaultValue - The default value to use if the field is not yet set\n * @param compute - Function to compute derived values from watched fields\n * @param render - The function that receives watched values and returns ReactNode\n * @returns The result of calling render function with watched values\n *\n * @example\n * The `Watch` component only re-render when the values of `foo`, `bar`, and `baz.qux` change.\n * The types of `foo`, `bar`, and `baz.qux` are precisely inferred.\n *\n * ```tsx\n * const { control } = useForm();\n *\n * <Watch\n * control={control}\n * names={['foo', 'bar', 'baz.qux']}\n * render={([foo, bar, baz_qux]) => <div>{foo}{bar}{baz_qux}</div>}\n * />\n * ```\n */\nconst Watch = (props) => props.render(useWatch({ name: props.names, ...props }));\n\nexport { Controller, Form, FormProvider, FormStateSubscribe, Watch, appendErrors, createFormControl, get, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };\n//# sourceMappingURL=index.esm.mjs.map\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","import { useState, useCallback, useLayoutEffect, useEffect, useRef, useMemo } from 'react';\nimport debounce from 'lodash.debounce';\n\n// src/useBoolean/useBoolean.ts\nfunction useBoolean(defaultValue = false) {\n if (typeof defaultValue !== \"boolean\") {\n throw new Error(\"defaultValue must be `true` or `false`\");\n }\n const [value, setValue] = useState(defaultValue);\n const setTrue = useCallback(() => {\n setValue(true);\n }, []);\n const setFalse = useCallback(() => {\n setValue(false);\n }, []);\n const toggle = useCallback(() => {\n setValue((x) => !x);\n }, []);\n return { value, setValue, setTrue, setFalse, toggle };\n}\nvar useIsomorphicLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n// src/useEventListener/useEventListener.ts\nfunction useEventListener(eventName, handler, element, options) {\n const savedHandler = useRef(handler);\n useIsomorphicLayoutEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n useEffect(() => {\n const targetElement = (element == null ? void 0 : element.current) ?? window;\n if (!(targetElement && targetElement.addEventListener))\n return;\n const listener = (event) => {\n savedHandler.current(event);\n };\n targetElement.addEventListener(eventName, listener, options);\n return () => {\n targetElement.removeEventListener(eventName, listener, options);\n };\n }, [eventName, element, options]);\n}\n\n// src/useClickAnyWhere/useClickAnyWhere.ts\nfunction useClickAnyWhere(handler) {\n useEventListener(\"click\", (event) => {\n handler(event);\n });\n}\nfunction useCopyToClipboard() {\n const [copiedText, setCopiedText] = useState(null);\n const copy = useCallback(async (text) => {\n if (!(navigator == null ? void 0 : navigator.clipboard)) {\n console.warn(\"Clipboard not supported\");\n return false;\n }\n try {\n await navigator.clipboard.writeText(text);\n setCopiedText(text);\n return true;\n } catch (error) {\n console.warn(\"Copy failed\", error);\n setCopiedText(null);\n return false;\n }\n }, []);\n return [copiedText, copy];\n}\nfunction useCounter(initialValue) {\n const [count, setCount] = useState(initialValue ?? 0);\n const increment = useCallback(() => {\n setCount((x) => x + 1);\n }, []);\n const decrement = useCallback(() => {\n setCount((x) => x - 1);\n }, []);\n const reset = useCallback(() => {\n setCount(initialValue ?? 0);\n }, [initialValue]);\n return {\n count,\n increment,\n decrement,\n reset,\n setCount\n };\n}\nfunction useInterval(callback, delay) {\n const savedCallback = useRef(callback);\n useIsomorphicLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n useEffect(() => {\n if (delay === null) {\n return;\n }\n const id = setInterval(() => {\n savedCallback.current();\n }, delay);\n return () => {\n clearInterval(id);\n };\n }, [delay]);\n}\n\n// src/useCountdown/useCountdown.ts\nfunction useCountdown({\n countStart,\n countStop = 0,\n intervalMs = 1e3,\n isIncrement = false\n}) {\n const {\n count,\n increment,\n decrement,\n reset: resetCounter\n } = useCounter(countStart);\n const {\n value: isCountdownRunning,\n setTrue: startCountdown,\n setFalse: stopCountdown\n } = useBoolean(false);\n const resetCountdown = useCallback(() => {\n stopCountdown();\n resetCounter();\n }, [stopCountdown, resetCounter]);\n const countdownCallback = useCallback(() => {\n if (count === countStop) {\n stopCountdown();\n return;\n }\n if (isIncrement) {\n increment();\n } else {\n decrement();\n }\n }, [count, countStop, decrement, increment, isIncrement, stopCountdown]);\n useInterval(countdownCallback, isCountdownRunning ? intervalMs : null);\n return [count, { startCountdown, stopCountdown, resetCountdown }];\n}\nfunction useEventCallback(fn) {\n const ref = useRef(() => {\n throw new Error(\"Cannot call an event handler while rendering.\");\n });\n useIsomorphicLayoutEffect(() => {\n ref.current = fn;\n }, [fn]);\n return useCallback((...args) => {\n var _a;\n return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args);\n }, [ref]);\n}\n\n// src/useLocalStorage/useLocalStorage.ts\nvar IS_SERVER = typeof window === \"undefined\";\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { initializeWithValue = true } = options;\n const serializer = useCallback(\n (value) => {\n if (options.serializer) {\n return options.serializer(value);\n }\n return JSON.stringify(value);\n },\n [options]\n );\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return defaultValue;\n }\n return parsed;\n },\n [options, initialValue]\n );\n const readValue = useCallback(() => {\n const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n if (IS_SERVER) {\n return initialValueToUse;\n }\n try {\n const raw = window.localStorage.getItem(key);\n return raw ? deserializer(raw) : initialValueToUse;\n } catch (error) {\n console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n return initialValueToUse;\n }\n }, [initialValue, key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return initialValue instanceof Function ? initialValue() : initialValue;\n });\n const setValue = useEventCallback((value) => {\n if (IS_SERVER) {\n console.warn(\n `Tried setting localStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n try {\n const newValue = value instanceof Function ? value(readValue()) : value;\n window.localStorage.setItem(key, serializer(newValue));\n setStoredValue(newValue);\n window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n } catch (error) {\n console.warn(`Error setting localStorage key \\u201C${key}\\u201D:`, error);\n }\n });\n const removeValue = useEventCallback(() => {\n if (IS_SERVER) {\n console.warn(\n `Tried removing localStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n window.localStorage.removeItem(key);\n setStoredValue(defaultValue);\n window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"local-storage\", handleStorageChange);\n return [storedValue, setValue, removeValue];\n}\nvar IS_SERVER2 = typeof window === \"undefined\";\nfunction useMediaQuery(query, {\n defaultValue = false,\n initializeWithValue = true\n} = {}) {\n const getMatches = (query2) => {\n if (IS_SERVER2) {\n return defaultValue;\n }\n return window.matchMedia(query2).matches;\n };\n const [matches, setMatches] = useState(() => {\n if (initializeWithValue) {\n return getMatches(query);\n }\n return defaultValue;\n });\n function handleChange() {\n setMatches(getMatches(query));\n }\n useIsomorphicLayoutEffect(() => {\n const matchMedia = window.matchMedia(query);\n handleChange();\n if (matchMedia.addListener) {\n matchMedia.addListener(handleChange);\n } else {\n matchMedia.addEventListener(\"change\", handleChange);\n }\n return () => {\n if (matchMedia.removeListener) {\n matchMedia.removeListener(handleChange);\n } else {\n matchMedia.removeEventListener(\"change\", handleChange);\n }\n };\n }, [query]);\n return matches;\n}\n\n// src/useDarkMode/useDarkMode.ts\nvar COLOR_SCHEME_QUERY = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY = \"usehooks-ts-dark-mode\";\nfunction useDarkMode(options = {}) {\n const {\n defaultValue,\n localStorageKey = LOCAL_STORAGE_KEY,\n initializeWithValue = true\n } = options;\n const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY, {\n initializeWithValue,\n defaultValue\n });\n const [isDarkMode, setDarkMode] = useLocalStorage(\n localStorageKey,\n defaultValue ?? isDarkOS ?? false,\n { initializeWithValue }\n );\n useIsomorphicLayoutEffect(() => {\n if (isDarkOS !== isDarkMode) {\n setDarkMode(isDarkOS);\n }\n }, [isDarkOS]);\n return {\n isDarkMode,\n toggle: () => {\n setDarkMode((prev) => !prev);\n },\n enable: () => {\n setDarkMode(true);\n },\n disable: () => {\n setDarkMode(false);\n },\n set: (value) => {\n setDarkMode(value);\n }\n };\n}\nfunction useUnmount(func) {\n const funcRef = useRef(func);\n funcRef.current = func;\n useEffect(\n () => () => {\n funcRef.current();\n },\n []\n );\n}\n\n// src/useDebounceCallback/useDebounceCallback.ts\nfunction useDebounceCallback(func, delay = 500, options) {\n const debouncedFunc = useRef();\n useUnmount(() => {\n if (debouncedFunc.current) {\n debouncedFunc.current.cancel();\n }\n });\n const debounced = useMemo(() => {\n const debouncedFuncInstance = debounce(func, delay, options);\n const wrappedFunc = (...args) => {\n return debouncedFuncInstance(...args);\n };\n wrappedFunc.cancel = () => {\n debouncedFuncInstance.cancel();\n };\n wrappedFunc.isPending = () => {\n return !!debouncedFunc.current;\n };\n wrappedFunc.flush = () => {\n return debouncedFuncInstance.flush();\n };\n return wrappedFunc;\n }, [func, delay, options]);\n useEffect(() => {\n debouncedFunc.current = debounce(func, delay, options);\n }, [func, delay, options]);\n return debounced;\n}\nfunction useDebounceValue(initialValue, delay, options) {\n const eq = (options == null ? void 0 : options.equalityFn) ?? ((left, right) => left === right);\n const unwrappedInitialValue = initialValue instanceof Function ? initialValue() : initialValue;\n const [debouncedValue, setDebouncedValue] = useState(unwrappedInitialValue);\n const previousValueRef = useRef(unwrappedInitialValue);\n const updateDebouncedValue = useDebounceCallback(\n setDebouncedValue,\n delay,\n options\n );\n if (!eq(previousValueRef.current, unwrappedInitialValue)) {\n updateDebouncedValue(unwrappedInitialValue);\n previousValueRef.current = unwrappedInitialValue;\n }\n return [debouncedValue, updateDebouncedValue];\n}\nfunction useDocumentTitle(title, options = {}) {\n const { preserveTitleOnUnmount = true } = options;\n const defaultTitle = useRef(null);\n useIsomorphicLayoutEffect(() => {\n defaultTitle.current = window.document.title;\n }, []);\n useIsomorphicLayoutEffect(() => {\n window.document.title = title;\n }, [title]);\n useUnmount(() => {\n if (!preserveTitleOnUnmount && defaultTitle.current) {\n window.document.title = defaultTitle.current;\n }\n });\n}\nfunction useHover(elementRef) {\n const [value, setValue] = useState(false);\n const handleMouseEnter = () => {\n setValue(true);\n };\n const handleMouseLeave = () => {\n setValue(false);\n };\n useEventListener(\"mouseenter\", handleMouseEnter, elementRef);\n useEventListener(\"mouseleave\", handleMouseLeave, elementRef);\n return value;\n}\nfunction useIntersectionObserver({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = useState(null);\n const [state, setState] = useState(() => ({\n isIntersecting: initialIsIntersecting,\n entry: void 0\n }));\n const callbackRef = useRef();\n callbackRef.current = onChange;\n const frozen = ((_a = state.entry) == null ? void 0 : _a.isIntersecting) && freezeOnceVisible;\n useEffect(() => {\n if (!ref)\n return;\n if (!(\"IntersectionObserver\" in window))\n return;\n if (frozen)\n return;\n let unobserve;\n const observer = new IntersectionObserver(\n (entries) => {\n const thresholds = Array.isArray(observer.thresholds) ? observer.thresholds : [observer.thresholds];\n entries.forEach((entry) => {\n const isIntersecting = entry.isIntersecting && thresholds.some((threshold2) => entry.intersectionRatio >= threshold2);\n setState({ isIntersecting, entry });\n if (callbackRef.current) {\n callbackRef.current(isIntersecting, entry);\n }\n if (isIntersecting && freezeOnceVisible && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n });\n },\n { threshold, root, rootMargin }\n );\n observer.observe(ref);\n return () => {\n observer.disconnect();\n };\n }, [\n ref,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold),\n root,\n rootMargin,\n frozen,\n freezeOnceVisible\n ]);\n const prevRef = useRef(null);\n useEffect(() => {\n var _a2;\n if (!ref && ((_a2 = state.entry) == null ? void 0 : _a2.target) && !freezeOnceVisible && !frozen && prevRef.current !== state.entry.target) {\n prevRef.current = state.entry.target;\n setState({ isIntersecting: initialIsIntersecting, entry: void 0 });\n }\n }, [ref, state.entry, freezeOnceVisible, frozen, initialIsIntersecting]);\n const result = [\n setRef,\n !!state.isIntersecting,\n state.entry\n ];\n result.ref = result[0];\n result.isIntersecting = result[1];\n result.entry = result[2];\n return result;\n}\nfunction useIsClient() {\n const [isClient, setClient] = useState(false);\n useEffect(() => {\n setClient(true);\n }, []);\n return isClient;\n}\nfunction useIsMounted() {\n const isMounted = useRef(false);\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n return useCallback(() => isMounted.current, []);\n}\nfunction useMap(initialState = /* @__PURE__ */ new Map()) {\n const [map, setMap] = useState(new Map(initialState));\n const actions = {\n set: useCallback((key, value) => {\n setMap((prev) => {\n const copy = new Map(prev);\n copy.set(key, value);\n return copy;\n });\n }, []),\n setAll: useCallback((entries) => {\n setMap(() => new Map(entries));\n }, []),\n remove: useCallback((key) => {\n setMap((prev) => {\n const copy = new Map(prev);\n copy.delete(key);\n return copy;\n });\n }, []),\n reset: useCallback(() => {\n setMap(() => /* @__PURE__ */ new Map());\n }, [])\n };\n return [map, actions];\n}\n\n// src/useOnClickOutside/useOnClickOutside.ts\nfunction useOnClickOutside(ref, handler, eventType = \"mousedown\", eventListenerOptions = {}) {\n useEventListener(\n eventType,\n (event) => {\n const target = event.target;\n if (!target || !target.isConnected) {\n return;\n }\n const isOutside = Array.isArray(ref) ? ref.filter((r) => Boolean(r.current)).every((r) => r.current && !r.current.contains(target)) : ref.current && !ref.current.contains(target);\n if (isOutside) {\n handler(event);\n }\n },\n void 0,\n eventListenerOptions\n );\n}\nvar IS_SERVER3 = typeof window === \"undefined\";\nfunction useReadLocalStorage(key, options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER3) {\n initializeWithValue = false;\n }\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return null;\n }\n return parsed;\n },\n [options]\n );\n const readValue = useCallback(() => {\n if (IS_SERVER3) {\n return null;\n }\n try {\n const raw = window.localStorage.getItem(key);\n return raw ? deserializer(raw) : null;\n } catch (error) {\n console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n return null;\n }\n }, [key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return void 0;\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"local-storage\", handleStorageChange);\n return storedValue;\n}\nvar initialSize = {\n width: void 0,\n height: void 0\n};\nfunction useResizeObserver(options) {\n const { ref, box = \"content-box\" } = options;\n const [{ width, height }, setSize] = useState(initialSize);\n const isMounted = useIsMounted();\n const previousSize = useRef({ ...initialSize });\n const onResize = useRef(void 0);\n onResize.current = options.onResize;\n useEffect(() => {\n if (!ref.current)\n return;\n if (typeof window === \"undefined\" || !(\"ResizeObserver\" in window))\n return;\n const observer = new ResizeObserver(([entry]) => {\n const boxProp = box === \"border-box\" ? \"borderBoxSize\" : box === \"device-pixel-content-box\" ? \"devicePixelContentBoxSize\" : \"contentBoxSize\";\n const newWidth = extractSize(entry, boxProp, \"inlineSize\");\n const newHeight = extractSize(entry, boxProp, \"blockSize\");\n const hasChanged = previousSize.current.width !== newWidth || previousSize.current.height !== newHeight;\n if (hasChanged) {\n const newSize = { width: newWidth, height: newHeight };\n previousSize.current.width = newWidth;\n previousSize.current.height = newHeight;\n if (onResize.current) {\n onResize.current(newSize);\n } else {\n if (isMounted()) {\n setSize(newSize);\n }\n }\n }\n });\n observer.observe(ref.current, { box });\n return () => {\n observer.disconnect();\n };\n }, [box, ref, isMounted]);\n return { width, height };\n}\nfunction extractSize(entry, box, sizeType) {\n if (!entry[box]) {\n if (box === \"contentBoxSize\") {\n return entry.contentRect[sizeType === \"inlineSize\" ? \"width\" : \"height\"];\n }\n return void 0;\n }\n return Array.isArray(entry[box]) ? entry[box][0][sizeType] : (\n // @ts-ignore Support Firefox's non-standard behavior\n entry[box][sizeType]\n );\n}\nvar IS_SERVER4 = typeof window === \"undefined\";\nfunction useScreen(options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER4) {\n initializeWithValue = false;\n }\n const readScreen = () => {\n if (IS_SERVER4) {\n return void 0;\n }\n return window.screen;\n };\n const [screen, setScreen] = useState(() => {\n if (initializeWithValue) {\n return readScreen();\n }\n return void 0;\n });\n const debouncedSetScreen = useDebounceCallback(\n setScreen,\n options.debounceDelay\n );\n function handleSize() {\n const newScreen = readScreen();\n const setSize = options.debounceDelay ? debouncedSetScreen : setScreen;\n if (newScreen) {\n const {\n width,\n height,\n availHeight,\n availWidth,\n colorDepth,\n orientation,\n pixelDepth\n } = newScreen;\n setSize({\n width,\n height,\n availHeight,\n availWidth,\n colorDepth,\n orientation,\n pixelDepth\n });\n }\n }\n useEventListener(\"resize\", handleSize);\n useIsomorphicLayoutEffect(() => {\n handleSize();\n }, []);\n return screen;\n}\nvar cachedScriptStatuses = /* @__PURE__ */ new Map();\nfunction getScriptNode(src) {\n const node = document.querySelector(\n `script[src=\"${src}\"]`\n );\n const status = node == null ? void 0 : node.getAttribute(\"data-status\");\n return {\n node,\n status\n };\n}\nfunction useScript(src, options) {\n const [status, setStatus] = useState(() => {\n if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n return \"idle\";\n }\n if (typeof window === \"undefined\") {\n return \"loading\";\n }\n return cachedScriptStatuses.get(src) ?? \"loading\";\n });\n useEffect(() => {\n if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n return;\n }\n const cachedScriptStatus = cachedScriptStatuses.get(src);\n if (cachedScriptStatus === \"ready\" || cachedScriptStatus === \"error\") {\n setStatus(cachedScriptStatus);\n return;\n }\n const script = getScriptNode(src);\n let scriptNode = script.node;\n if (!scriptNode) {\n scriptNode = document.createElement(\"script\");\n scriptNode.src = src;\n scriptNode.async = true;\n if (options == null ? void 0 : options.id) {\n scriptNode.id = options.id;\n }\n scriptNode.setAttribute(\"data-status\", \"loading\");\n document.body.appendChild(scriptNode);\n const setAttributeFromEvent = (event) => {\n const scriptStatus = event.type === \"load\" ? \"ready\" : \"error\";\n scriptNode == null ? void 0 : scriptNode.setAttribute(\"data-status\", scriptStatus);\n };\n scriptNode.addEventListener(\"load\", setAttributeFromEvent);\n scriptNode.addEventListener(\"error\", setAttributeFromEvent);\n } else {\n setStatus(script.status ?? cachedScriptStatus ?? \"loading\");\n }\n const setStateFromEvent = (event) => {\n const newStatus = event.type === \"load\" ? \"ready\" : \"error\";\n setStatus(newStatus);\n cachedScriptStatuses.set(src, newStatus);\n };\n scriptNode.addEventListener(\"load\", setStateFromEvent);\n scriptNode.addEventListener(\"error\", setStateFromEvent);\n return () => {\n if (scriptNode) {\n scriptNode.removeEventListener(\"load\", setStateFromEvent);\n scriptNode.removeEventListener(\"error\", setStateFromEvent);\n }\n if (scriptNode && (options == null ? void 0 : options.removeOnUnmount)) {\n scriptNode.remove();\n cachedScriptStatuses.delete(src);\n }\n };\n }, [src, options == null ? void 0 : options.shouldPreventLoad, options == null ? void 0 : options.removeOnUnmount, options == null ? void 0 : options.id]);\n return status;\n}\nvar IS_SERVER5 = typeof window === \"undefined\";\nfunction useScrollLock(options = {}) {\n const { autoLock = true, lockTarget, widthReflow = true } = options;\n const [isLocked, setIsLocked] = useState(false);\n const target = useRef(null);\n const originalStyle = useRef(null);\n const lock = () => {\n if (target.current) {\n const { overflow, paddingRight } = target.current.style;\n originalStyle.current = { overflow, paddingRight };\n if (widthReflow) {\n const offsetWidth = target.current === document.body ? window.innerWidth : target.current.offsetWidth;\n const currentPaddingRight = parseInt(window.getComputedStyle(target.current).paddingRight, 10) || 0;\n const scrollbarWidth = offsetWidth - target.current.scrollWidth;\n target.current.style.paddingRight = `${scrollbarWidth + currentPaddingRight}px`;\n }\n target.current.style.overflow = \"hidden\";\n setIsLocked(true);\n }\n };\n const unlock = () => {\n if (target.current && originalStyle.current) {\n target.current.style.overflow = originalStyle.current.overflow;\n if (widthReflow) {\n target.current.style.paddingRight = originalStyle.current.paddingRight;\n }\n }\n setIsLocked(false);\n };\n useIsomorphicLayoutEffect(() => {\n if (IS_SERVER5)\n return;\n if (lockTarget) {\n target.current = typeof lockTarget === \"string\" ? document.querySelector(lockTarget) : lockTarget;\n }\n if (!target.current) {\n target.current = document.body;\n }\n if (autoLock) {\n lock();\n }\n return () => {\n unlock();\n };\n }, [autoLock, lockTarget, widthReflow]);\n return { isLocked, lock, unlock };\n}\nvar IS_SERVER6 = typeof window === \"undefined\";\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { initializeWithValue = true } = options;\n const serializer = useCallback(\n (value) => {\n if (options.serializer) {\n return options.serializer(value);\n }\n return JSON.stringify(value);\n },\n [options]\n );\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return defaultValue;\n }\n return parsed;\n },\n [options, initialValue]\n );\n const readValue = useCallback(() => {\n const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n if (IS_SERVER6) {\n return initialValueToUse;\n }\n try {\n const raw = window.sessionStorage.getItem(key);\n return raw ? deserializer(raw) : initialValueToUse;\n } catch (error) {\n console.warn(`Error reading sessionStorage key \\u201C${key}\\u201D:`, error);\n return initialValueToUse;\n }\n }, [initialValue, key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return initialValue instanceof Function ? initialValue() : initialValue;\n });\n const setValue = useEventCallback((value) => {\n if (IS_SERVER6) {\n console.warn(\n `Tried setting sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n try {\n const newValue = value instanceof Function ? value(readValue()) : value;\n window.sessionStorage.setItem(key, serializer(newValue));\n setStoredValue(newValue);\n window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n } catch (error) {\n console.warn(`Error setting sessionStorage key \\u201C${key}\\u201D:`, error);\n }\n });\n const removeValue = useEventCallback(() => {\n if (IS_SERVER6) {\n console.warn(\n `Tried removing sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n window.sessionStorage.removeItem(key);\n setStoredValue(defaultValue);\n window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"session-storage\", handleStorageChange);\n return [storedValue, setValue, removeValue];\n}\nfunction useStep(maxStep) {\n const [currentStep, setCurrentStep] = useState(1);\n const canGoToNextStep = currentStep + 1 <= maxStep;\n const canGoToPrevStep = currentStep - 1 > 0;\n const setStep = useCallback(\n (step) => {\n const newStep = step instanceof Function ? step(currentStep) : step;\n if (newStep >= 1 && newStep <= maxStep) {\n setCurrentStep(newStep);\n return;\n }\n throw new Error(\"Step not valid\");\n },\n [maxStep, currentStep]\n );\n const goToNextStep = useCallback(() => {\n if (canGoToNextStep) {\n setCurrentStep((step) => step + 1);\n }\n }, [canGoToNextStep]);\n const goToPrevStep = useCallback(() => {\n if (canGoToPrevStep) {\n setCurrentStep((step) => step - 1);\n }\n }, [canGoToPrevStep]);\n const reset = useCallback(() => {\n setCurrentStep(1);\n }, []);\n return [\n currentStep,\n {\n goToNextStep,\n goToPrevStep,\n canGoToNextStep,\n canGoToPrevStep,\n setStep,\n reset\n }\n ];\n}\n\n// src/useTernaryDarkMode/useTernaryDarkMode.ts\nvar COLOR_SCHEME_QUERY2 = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY2 = \"usehooks-ts-ternary-dark-mode\";\nfunction useTernaryDarkMode({\n defaultValue = \"system\",\n localStorageKey = LOCAL_STORAGE_KEY2,\n initializeWithValue = true\n} = {}) {\n const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY2, { initializeWithValue });\n const [mode, setMode] = useLocalStorage(localStorageKey, defaultValue, {\n initializeWithValue\n });\n const isDarkMode = mode === \"dark\" || mode === \"system\" && isDarkOS;\n const toggleTernaryDarkMode = () => {\n const modes = [\"light\", \"system\", \"dark\"];\n setMode((prevMode) => {\n const nextIndex = (modes.indexOf(prevMode) + 1) % modes.length;\n return modes[nextIndex];\n });\n };\n return {\n isDarkMode,\n ternaryDarkMode: mode,\n setTernaryDarkMode: setMode,\n toggleTernaryDarkMode\n };\n}\nfunction useTimeout(callback, delay) {\n const savedCallback = useRef(callback);\n useIsomorphicLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n useEffect(() => {\n if (!delay && delay !== 0) {\n return;\n }\n const id = setTimeout(() => {\n savedCallback.current();\n }, delay);\n return () => {\n clearTimeout(id);\n };\n }, [delay]);\n}\nfunction useToggle(defaultValue) {\n const [value, setValue] = useState(!!defaultValue);\n const toggle = useCallback(() => {\n setValue((x) => !x);\n }, []);\n return [value, toggle, setValue];\n}\nvar IS_SERVER7 = typeof window === \"undefined\";\nfunction useWindowSize(options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER7) {\n initializeWithValue = false;\n }\n const [windowSize, setWindowSize] = useState(() => {\n if (initializeWithValue) {\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n }\n return {\n width: void 0,\n height: void 0\n };\n });\n const debouncedSetWindowSize = useDebounceCallback(\n setWindowSize,\n options.debounceDelay\n );\n function handleSize() {\n const setSize = options.debounceDelay ? debouncedSetWindowSize : setWindowSize;\n setSize({\n width: window.innerWidth,\n height: window.innerHeight\n });\n }\n useEventListener(\"resize\", handleSize);\n useIsomorphicLayoutEffect(() => {\n handleSize();\n }, []);\n return windowSize;\n}\n\nexport { useBoolean, useClickAnyWhere, useCopyToClipboard, useCountdown, useCounter, useDarkMode, useDebounceCallback, useDebounceValue, useDocumentTitle, useEventCallback, useEventListener, useHover, useIntersectionObserver, useInterval, useIsClient, useIsMounted, useIsomorphicLayoutEffect, useLocalStorage, useMap, useMediaQuery, useOnClickOutside, useReadLocalStorage, useResizeObserver, useScreen, useScript, useScrollLock, useSessionStorage, useStep, useTernaryDarkMode, useTimeout, useToggle, useUnmount, useWindowSize };\n","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport { createContext, useContext, useReducer } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar initialState = {};\nvar Context = /*#__PURE__*/createContext(initialState);\nvar reducer = (state, action) => _extends({}, state, action);\nexport var useShowToolsStore = () => {\n return useContext(Context);\n};\nvar DispatchShowTools = /*#__PURE__*/createContext(() => {});\nDispatchShowTools.displayName = 'JVR.DispatchShowTools';\nexport function useShowTools() {\n return useReducer(reducer, initialState);\n}\nexport function useShowToolsDispatch() {\n return useContext(DispatchShowTools);\n}\nexport var ShowTools = _ref => {\n var {\n initial,\n dispatch,\n children\n } = _ref;\n return /*#__PURE__*/_jsx(Context.Provider, {\n value: initial,\n children: /*#__PURE__*/_jsx(DispatchShowTools.Provider, {\n value: dispatch,\n children: children\n })\n });\n};\nShowTools.displayName = 'JVR.ShowTools';","import _extends from \"@babel/runtime/helpers/extends\";\nimport { createContext, useContext, useReducer } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar initialState = {};\nvar Context = /*#__PURE__*/createContext(initialState);\nvar reducer = (state, action) => _extends({}, state, action);\nexport var useExpandsStore = () => {\n return useContext(Context);\n};\nvar DispatchExpands = /*#__PURE__*/createContext(() => {});\nDispatchExpands.displayName = 'JVR.DispatchExpands';\nexport function useExpands() {\n return useReducer(reducer, initialState);\n}\nexport function useExpandsDispatch() {\n return useContext(DispatchExpands);\n}\nexport var Expands = _ref => {\n var {\n initial,\n dispatch,\n children\n } = _ref;\n return /*#__PURE__*/_jsx(Context.Provider, {\n value: initial,\n children: /*#__PURE__*/_jsx(DispatchExpands.Provider, {\n value: dispatch,\n children: children\n })\n });\n};\nExpands.displayName = 'JVR.Expands';","import _extends from \"@babel/runtime/helpers/extends\";\nimport { createContext, useContext, useReducer } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar initialState = {\n Str: {\n as: 'span',\n 'data-type': 'string',\n style: {\n color: 'var(--w-rjv-type-string-color, #cb4b16)'\n },\n className: 'w-rjv-type',\n children: 'string'\n },\n Url: {\n as: 'a',\n style: {\n color: 'var(--w-rjv-type-url-color, #0969da)'\n },\n 'data-type': 'url',\n className: 'w-rjv-type',\n children: 'url'\n },\n Undefined: {\n style: {\n color: 'var(--w-rjv-type-undefined-color, #586e75)'\n },\n as: 'span',\n 'data-type': 'undefined',\n className: 'w-rjv-type',\n children: 'undefined'\n },\n Null: {\n style: {\n color: 'var(--w-rjv-type-null-color, #d33682)'\n },\n as: 'span',\n 'data-type': 'null',\n className: 'w-rjv-type',\n children: 'null'\n },\n Map: {\n style: {\n color: 'var(--w-rjv-type-map-color, #268bd2)',\n marginRight: 3\n },\n as: 'span',\n 'data-type': 'map',\n className: 'w-rjv-type',\n children: 'Map'\n },\n Nan: {\n style: {\n color: 'var(--w-rjv-type-nan-color, #859900)'\n },\n as: 'span',\n 'data-type': 'nan',\n className: 'w-rjv-type',\n children: 'NaN'\n },\n Bigint: {\n style: {\n color: 'var(--w-rjv-type-bigint-color, #268bd2)'\n },\n as: 'span',\n 'data-type': 'bigint',\n className: 'w-rjv-type',\n children: 'bigint'\n },\n Int: {\n style: {\n color: 'var(--w-rjv-type-int-color, #268bd2)'\n },\n as: 'span',\n 'data-type': 'int',\n className: 'w-rjv-type',\n children: 'int'\n },\n Set: {\n style: {\n color: 'var(--w-rjv-type-set-color, #268bd2)',\n marginRight: 3\n },\n as: 'span',\n 'data-type': 'set',\n className: 'w-rjv-type',\n children: 'Set'\n },\n Float: {\n style: {\n color: 'var(--w-rjv-type-float-color, #859900)'\n },\n as: 'span',\n 'data-type': 'float',\n className: 'w-rjv-type',\n children: 'float'\n },\n True: {\n style: {\n color: 'var(--w-rjv-type-boolean-color, #2aa198)'\n },\n as: 'span',\n 'data-type': 'bool',\n className: 'w-rjv-type',\n children: 'bool'\n },\n False: {\n style: {\n color: 'var(--w-rjv-type-boolean-color, #2aa198)'\n },\n as: 'span',\n 'data-type': 'bool',\n className: 'w-rjv-type',\n children: 'bool'\n },\n Date: {\n style: {\n color: 'var(--w-rjv-type-date-color, #268bd2)'\n },\n as: 'span',\n 'data-type': 'date',\n className: 'w-rjv-type',\n children: 'date'\n }\n};\nvar Context = /*#__PURE__*/createContext(initialState);\nvar reducer = (state, action) => _extends({}, state, action);\nexport var useTypesStore = () => {\n return useContext(Context);\n};\nvar DispatchTypes = /*#__PURE__*/createContext(() => {});\nDispatchTypes.displayName = 'JVR.DispatchTypes';\nexport function useTypes() {\n return useReducer(reducer, initialState);\n}\nexport function useTypesDispatch() {\n return useContext(DispatchTypes);\n}\nexport function Types(_ref) {\n var {\n initial,\n dispatch,\n children\n } = _ref;\n return /*#__PURE__*/_jsx(Context.Provider, {\n value: initial,\n children: /*#__PURE__*/_jsx(DispatchTypes.Provider, {\n value: dispatch,\n children: children\n })\n });\n}\nTypes.displayName = 'JVR.Types';","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"style\"];\nimport React from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function TriangleArrow(props) {\n var {\n style\n } = props,\n reset = _objectWithoutPropertiesLoose(props, _excluded);\n var defaultStyle = _extends({\n cursor: 'pointer',\n height: '1em',\n width: '1em',\n userSelect: 'none',\n display: 'inline-flex'\n }, style);\n return /*#__PURE__*/_jsx(\"svg\", _extends({\n viewBox: \"0 0 24 24\",\n fill: \"var(--w-rjv-arrow-color, currentColor)\",\n style: defaultStyle\n }, reset, {\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n })\n }));\n}\nTriangleArrow.displayName = 'JVR.TriangleArrow';","import _extends from \"@babel/runtime/helpers/extends\";\nimport { createContext, useContext, useReducer } from 'react';\nimport { TriangleArrow } from \"../arrow/TriangleArrow.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar initialState = {\n Arrow: {\n as: 'span',\n className: 'w-rjv-arrow',\n style: {\n transform: 'rotate(0deg)',\n transition: 'all 0.3s'\n },\n children: /*#__PURE__*/_jsx(TriangleArrow, {})\n },\n Colon: {\n as: 'span',\n style: {\n color: 'var(--w-rjv-colon-color, var(--w-rjv-color))',\n marginLeft: 0,\n marginRight: 2\n },\n className: 'w-rjv-colon',\n children: ':'\n },\n Quote: {\n as: 'span',\n style: {\n color: 'var(--w-rjv-quotes-color, #236a7c)'\n },\n className: 'w-rjv-quotes',\n children: '\"'\n },\n ValueQuote: {\n as: 'span',\n style: {\n color: 'var(--w-rjv-quotes-string-color, #cb4b16)'\n },\n className: 'w-rjv-quotes',\n children: '\"'\n },\n BracketsLeft: {\n as: 'span',\n style: {\n color: 'var(--w-rjv-brackets-color, #236a7c)'\n },\n className: 'w-rjv-brackets-start',\n children: '['\n },\n BracketsRight: {\n as: 'span',\n style: {\n color: 'var(--w-rjv-brackets-color, #236a7c)'\n },\n className: 'w-rjv-brackets-end',\n children: ']'\n },\n BraceLeft: {\n as: 'span',\n style: {\n color: 'var(--w-rjv-curlybraces-color, #236a7c)'\n },\n className: 'w-rjv-curlybraces-start',\n children: '{'\n },\n BraceRight: {\n as: 'span',\n style: {\n color: 'var(--w-rjv-curlybraces-color, #236a7c)'\n },\n className: 'w-rjv-curlybraces-end',\n children: '}'\n }\n};\nvar Context = /*#__PURE__*/createContext(initialState);\nvar reducer = (state, action) => _extends({}, state, action);\nexport var useSymbolsStore = () => {\n return useContext(Context);\n};\nvar DispatchSymbols = /*#__PURE__*/createContext(() => {});\nDispatchSymbols.displayName = 'JVR.DispatchSymbols';\nexport function useSymbols() {\n return useReducer(reducer, initialState);\n}\nexport function useSymbolsDispatch() {\n return useContext(DispatchSymbols);\n}\nexport var Symbols = _ref => {\n var {\n initial,\n dispatch,\n children\n } = _ref;\n return /*#__PURE__*/_jsx(Context.Provider, {\n value: initial,\n children: /*#__PURE__*/_jsx(DispatchSymbols.Provider, {\n value: dispatch,\n children: children\n })\n });\n};\nSymbols.displayName = 'JVR.Symbols';","import _extends from \"@babel/runtime/helpers/extends\";\nimport React, { createContext, useContext, useReducer } from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar initialState = {\n Copied: {\n className: 'w-rjv-copied',\n style: {\n height: '1em',\n width: '1em',\n cursor: 'pointer',\n verticalAlign: 'middle',\n marginLeft: 5\n }\n },\n CountInfo: {\n as: 'span',\n className: 'w-rjv-object-size',\n style: {\n color: 'var(--w-rjv-info-color, #0000004d)',\n paddingLeft: 8,\n fontStyle: 'italic'\n }\n },\n CountInfoExtra: {\n as: 'span',\n className: 'w-rjv-object-extra',\n style: {\n paddingLeft: 8\n }\n },\n Ellipsis: {\n as: 'span',\n style: {\n cursor: 'pointer',\n color: 'var(--w-rjv-ellipsis-color, #cb4b16)',\n userSelect: 'none'\n },\n className: 'w-rjv-ellipsis',\n children: '...'\n },\n Row: {\n as: 'div',\n className: 'w-rjv-line'\n },\n KeyName: {\n as: 'span',\n className: 'w-rjv-object-key'\n }\n};\nvar Context = /*#__PURE__*/createContext(initialState);\nvar reducer = (state, action) => _extends({}, state, action);\nexport var useSectionStore = () => {\n return useContext(Context);\n};\nvar DispatchSection = /*#__PURE__*/createContext(() => {});\nDispatchSection.displayName = 'JVR.DispatchSection';\nexport function useSection() {\n return useReducer(reducer, initialState);\n}\nexport function useSectionDispatch() {\n return useContext(DispatchSection);\n}\nexport var Section = _ref => {\n var {\n initial,\n dispatch,\n children\n } = _ref;\n return /*#__PURE__*/_jsx(Context.Provider, {\n value: initial,\n children: /*#__PURE__*/_jsx(DispatchSection.Provider, {\n value: dispatch,\n children: children\n })\n });\n};\nSection.displayName = 'JVR.Section';","import _extends from \"@babel/runtime/helpers/extends\";\nimport React, { createContext, useContext, useEffect, useReducer } from 'react';\nimport { useShowTools, ShowTools } from \"./store/ShowTools.js\";\nimport { useExpands, Expands } from \"./store/Expands.js\";\nimport { useTypes, Types } from \"./store/Types.js\";\nimport { useSymbols, Symbols } from \"./store/Symbols.js\";\nimport { useSection, Section } from \"./store/Section.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var initialState = {\n objectSortKeys: false,\n indentWidth: 15\n};\nexport var Context = /*#__PURE__*/createContext(initialState);\nContext.displayName = 'JVR.Context';\nvar DispatchContext = /*#__PURE__*/createContext(() => {});\nDispatchContext.displayName = 'JVR.DispatchContext';\nexport function reducer(state, action) {\n return _extends({}, state, action);\n}\nexport var useStore = () => {\n return useContext(Context);\n};\nexport var useDispatchStore = () => {\n return useContext(DispatchContext);\n};\nexport var Provider = _ref => {\n var {\n children,\n initialState: init,\n initialTypes\n } = _ref;\n var [state, dispatch] = useReducer(reducer, Object.assign({}, initialState, init));\n var [showTools, showToolsDispatch] = useShowTools();\n var [expands, expandsDispatch] = useExpands();\n var [types, typesDispatch] = useTypes();\n var [symbols, symbolsDispatch] = useSymbols();\n var [section, sectionDispatch] = useSection();\n useEffect(() => dispatch(_extends({}, init)), [init]);\n return /*#__PURE__*/_jsx(Context.Provider, {\n value: state,\n children: /*#__PURE__*/_jsx(DispatchContext.Provider, {\n value: dispatch,\n children: /*#__PURE__*/_jsx(ShowTools, {\n initial: showTools,\n dispatch: showToolsDispatch,\n children: /*#__PURE__*/_jsx(Expands, {\n initial: expands,\n dispatch: expandsDispatch,\n children: /*#__PURE__*/_jsx(Types, {\n initial: _extends({}, types, initialTypes),\n dispatch: typesDispatch,\n children: /*#__PURE__*/_jsx(Symbols, {\n initial: symbols,\n dispatch: symbolsDispatch,\n children: /*#__PURE__*/_jsx(Section, {\n initial: section,\n dispatch: sectionDispatch,\n children: children\n })\n })\n })\n })\n })\n })\n });\n};\nexport function useDispatch() {\n return useContext(DispatchContext);\n}\nProvider.displayName = 'JVR.Provider';","function _objectDestructuringEmpty(t) {\n if (null == t) throw new TypeError(\"Cannot destructure \" + t);\n}\nexport { _objectDestructuringEmpty as default };","import _objectDestructuringEmpty from \"@babel/runtime/helpers/objectDestructuringEmpty\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"isNumber\", \"value\", \"parentValue\", \"keyName\", \"keys\"],\n _excluded2 = [\"as\", \"render\"],\n _excluded3 = [\"as\", \"render\"],\n _excluded4 = [\"as\", \"render\"],\n _excluded5 = [\"as\", \"style\", \"render\"],\n _excluded6 = [\"as\", \"render\"],\n _excluded7 = [\"as\", \"render\"],\n _excluded8 = [\"as\", \"render\"],\n _excluded9 = [\"as\", \"render\"];\nimport { useSymbolsStore } from \"../store/Symbols.js\";\nimport { useExpandsStore } from \"../store/Expands.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var Quote = props => {\n var {\n Quote: Comp = {}\n } = useSymbolsStore();\n var {\n isNumber,\n value,\n parentValue,\n keyName,\n keys\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n if (isNumber) return null;\n var {\n as,\n render\n } = Comp,\n reset = _objectWithoutPropertiesLoose(Comp, _excluded2);\n var Elm = as || 'span';\n var elmProps = _extends({}, other, reset);\n // Trim the leading and trailing spaces in children,\n // and set it to undefined if it's an empty string or contains only spaces.\n // https://github.com/uiwjs/react-json-view/issues/86\n if (typeof elmProps.children === 'string') {\n var trimmed = elmProps.children.trim();\n elmProps.children = trimmed || undefined;\n }\n var result = {\n value,\n parentValue,\n keyName,\n keys: keys || (keyName ? [keyName] : [])\n };\n var child = render && typeof render === 'function' && render(elmProps, result);\n if (child) return child;\n return /*#__PURE__*/_jsx(Elm, _extends({}, elmProps));\n};\nQuote.displayName = 'JVR.Quote';\nexport var ValueQuote = props => {\n var {\n ValueQuote: Comp = {}\n } = useSymbolsStore();\n var other = _extends({}, (_objectDestructuringEmpty(props), props));\n var {\n as,\n render\n } = Comp,\n reset = _objectWithoutPropertiesLoose(Comp, _excluded3);\n var Elm = as || 'span';\n var elmProps = _extends({}, other, reset);\n var child = render && typeof render === 'function' && render(elmProps, {});\n if (child) return child;\n return /*#__PURE__*/_jsx(Elm, _extends({}, elmProps));\n};\nValueQuote.displayName = 'JVR.ValueQuote';\nexport var Colon = props => {\n var {\n value,\n parentValue,\n keyName,\n keys\n } = props;\n var {\n Colon: Comp = {}\n } = useSymbolsStore();\n var {\n as,\n render\n } = Comp,\n reset = _objectWithoutPropertiesLoose(Comp, _excluded4);\n var Elm = as || 'span';\n var child = render && typeof render === 'function' && render(reset, {\n value,\n parentValue,\n keyName,\n keys: keys || (keyName ? [keyName] : [])\n });\n if (child) return child;\n return /*#__PURE__*/_jsx(Elm, _extends({}, reset));\n};\nColon.displayName = 'JVR.Colon';\nexport var Arrow = props => {\n var {\n Arrow: Comp = {}\n } = useSymbolsStore();\n var expands = useExpandsStore();\n var {\n expandKey,\n style: resetStyle,\n value,\n parentValue,\n keyName,\n keys\n } = props;\n var isExpanded = !!expands[expandKey];\n var {\n as,\n style,\n render\n } = Comp,\n reset = _objectWithoutPropertiesLoose(Comp, _excluded5);\n var Elm = as || 'span';\n var isRender = render && typeof render === 'function';\n var elmProps = _extends({}, reset, {\n 'data-expanded': isExpanded,\n style: _extends({}, style, resetStyle)\n });\n var result = {\n value,\n parentValue,\n keyName,\n keys: keys || (keyName ? [keyName] : [])\n };\n var child = isRender && render(elmProps, result);\n if (child) return child;\n return /*#__PURE__*/_jsx(Elm, _extends({}, reset, {\n style: _extends({}, style, resetStyle)\n }));\n};\nArrow.displayName = 'JVR.Arrow';\nexport var BracketsOpen = props => {\n var {\n isBrackets,\n value,\n parentValue,\n keyName,\n keys\n } = props;\n var {\n BracketsLeft = {},\n BraceLeft = {}\n } = useSymbolsStore();\n var result = {\n value,\n parentValue,\n keyName,\n keys: keys || (keyName ? [keyName] : [])\n };\n if (isBrackets) {\n var {\n as,\n render: _render\n } = BracketsLeft,\n reset = _objectWithoutPropertiesLoose(BracketsLeft, _excluded6);\n var BracketsLeftComp = as || 'span';\n var _child = _render && typeof _render === 'function' && _render(reset, result);\n if (_child) return _child;\n return /*#__PURE__*/_jsx(BracketsLeftComp, _extends({}, reset));\n }\n var {\n as: elm,\n render\n } = BraceLeft,\n resetProps = _objectWithoutPropertiesLoose(BraceLeft, _excluded7);\n var BraceLeftComp = elm || 'span';\n var child = render && typeof render === 'function' && render(resetProps, result);\n if (child) return child;\n return /*#__PURE__*/_jsx(BraceLeftComp, _extends({}, resetProps));\n};\nBracketsOpen.displayName = 'JVR.BracketsOpen';\nexport var BracketsClose = props => {\n var {\n isBrackets,\n isVisiable,\n value,\n parentValue,\n keyName,\n keys\n } = props;\n var result = {\n value,\n parentValue,\n keyName,\n keys: keys || (keyName ? [keyName] : [])\n };\n if (!isVisiable) return null;\n var {\n BracketsRight = {},\n BraceRight = {}\n } = useSymbolsStore();\n if (isBrackets) {\n var {\n as,\n render: _render2\n } = BracketsRight,\n _reset = _objectWithoutPropertiesLoose(BracketsRight, _excluded8);\n var BracketsRightComp = as || 'span';\n var _child2 = _render2 && typeof _render2 === 'function' && _render2(_reset, result);\n if (_child2) return _child2;\n return /*#__PURE__*/_jsx(BracketsRightComp, _extends({}, _reset));\n }\n var {\n as: elm,\n render\n } = BraceRight,\n reset = _objectWithoutPropertiesLoose(BraceRight, _excluded9);\n var BraceRightComp = elm || 'span';\n var child = render && typeof render === 'function' && render(reset, result);\n if (child) return child;\n return /*#__PURE__*/_jsx(BraceRightComp, _extends({}, reset));\n};\nBracketsClose.displayName = 'JVR.BracketsClose';","import _extends from \"@babel/runtime/helpers/extends\";\nimport { useStore } from \"../store.js\";\nimport { useExpandsStore } from \"../store/Expands.js\";\nimport { BracketsClose } from \"../symbol/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var NestedClose = props => {\n var _expands$expandKey;\n var {\n keyName,\n value,\n expandKey,\n parentValue,\n level,\n keys = []\n } = props;\n var expands = useExpandsStore();\n var {\n collapsed,\n shouldExpandNodeInitially\n } = useStore();\n var defaultExpanded = typeof collapsed === 'boolean' ? collapsed : typeof collapsed === 'number' ? level > collapsed : false;\n var isExpanded = (_expands$expandKey = expands[expandKey]) != null ? _expands$expandKey : shouldExpandNodeInitially ? false : defaultExpanded;\n var shouldExpand = shouldExpandNodeInitially && shouldExpandNodeInitially(!isExpanded, {\n value,\n keys,\n level,\n keyName,\n parentValue\n });\n if (shouldExpandNodeInitially && collapsed === false) {\n if (expands[expandKey] === undefined && !shouldExpand) {\n return null;\n }\n } else {\n if (expands[expandKey] === undefined && shouldExpand) {\n return null;\n }\n }\n var len = Object.keys(value).length;\n if (isExpanded || len === 0) {\n return null;\n }\n var style = {\n paddingLeft: 4\n };\n var compProps = {\n keyName,\n value,\n keys,\n parentValue\n };\n var isArray = Array.isArray(value);\n var isMySet = value instanceof Set;\n return /*#__PURE__*/_jsx(\"div\", {\n style: style,\n children: /*#__PURE__*/_jsx(BracketsClose, _extends({\n isBrackets: isArray || isMySet\n }, compProps, {\n isVisiable: true\n }))\n });\n};\nNestedClose.displayName = 'JVR.NestedClose';","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"as\", \"render\"],\n _excluded2 = [\"as\", \"render\"],\n _excluded3 = [\"as\", \"render\"],\n _excluded4 = [\"as\", \"render\"],\n _excluded5 = [\"as\", \"render\"],\n _excluded6 = [\"as\", \"render\"],\n _excluded7 = [\"as\", \"render\"],\n _excluded8 = [\"as\", \"render\"],\n _excluded9 = [\"as\", \"render\"],\n _excluded0 = [\"as\", \"render\"],\n _excluded1 = [\"as\", \"render\"],\n _excluded10 = [\"as\", \"render\"],\n _excluded11 = [\"as\", \"render\"];\nimport { Fragment, useEffect, useState } from 'react';\nimport { useStore } from \"../store.js\";\nimport { useTypesStore } from \"../store/Types.js\";\nimport { ValueQuote } from \"../symbol/index.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport var bigIntToString = bi => {\n if (bi === undefined) {\n return '0n';\n } else if (typeof bi === 'string') {\n try {\n bi = BigInt(bi);\n } catch (e) {\n return '0n';\n }\n }\n return bi ? bi.toString() + 'n' : '0n';\n};\nexport var SetComp = _ref => {\n var {\n value,\n keyName\n } = _ref;\n var {\n Set: Comp = {},\n displayDataTypes\n } = useTypesStore();\n var isSet = value instanceof Set;\n if (!isSet || !displayDataTypes) return null;\n var {\n as,\n render\n } = Comp,\n reset = _objectWithoutPropertiesLoose(Comp, _excluded);\n var isRender = render && typeof render === 'function';\n var type = isRender && render(reset, {\n type: 'type',\n value,\n keyName\n });\n if (type) return type;\n var Elm = as || 'span';\n return /*#__PURE__*/_jsx(Elm, _extends({}, reset));\n};\nSetComp.displayName = 'JVR.SetComp';\nexport var MapComp = _ref2 => {\n var {\n value,\n keyName\n } = _ref2;\n var {\n Map: Comp = {},\n displayDataTypes\n } = useTypesStore();\n var isMap = value instanceof Map;\n if (!isMap || !displayDataTypes) return null;\n var {\n as,\n render\n } = Comp,\n reset = _objectWithoutPropertiesLoose(Comp, _excluded2);\n var isRender = render && typeof render === 'function';\n var type = isRender && render(reset, {\n type: 'type',\n value,\n keyName\n });\n if (type) return type;\n var Elm = as || 'span';\n return /*#__PURE__*/_jsx(Elm, _extends({}, reset));\n};\nMapComp.displayName = 'JVR.MapComp';\nvar defalutStyle = {\n opacity: 0.75,\n paddingRight: 4\n};\nexport var TypeString = _ref3 => {\n var {\n children = '',\n keyName,\n keys\n } = _ref3;\n var {\n Str = {},\n displayDataTypes\n } = useTypesStore();\n var {\n shortenTextAfterLength: length = 30,\n stringEllipsis = '...'\n } = useStore();\n var {\n as,\n render\n } = Str,\n reset = _objectWithoutPropertiesLoose(Str, _excluded3);\n var childrenStr = children;\n var [shorten, setShorten] = useState(length && childrenStr.length > length);\n useEffect(() => setShorten(length && childrenStr.length > length), [length]);\n var Comp = as || 'span';\n var style = _extends({}, defalutStyle, Str.style || {});\n if (length > 0) {\n reset.style = _extends({}, reset.style, {\n cursor: childrenStr.length <= length ? 'initial' : 'pointer'\n });\n if (childrenStr.length > length) {\n reset.onClick = () => {\n setShorten(!shorten);\n };\n }\n }\n var text = shorten ? \"\" + childrenStr.slice(0, length) + stringEllipsis : childrenStr;\n var isRender = render && typeof render === 'function';\n var type = isRender && render(_extends({}, reset, {\n style\n }), {\n type: 'type',\n value: children,\n keyName,\n keys\n });\n var cls = shorten ? 'w-rjv-value w-rjv-value-short' : 'w-rjv-value';\n var child = isRender && render(_extends({}, reset, {\n children: text,\n className: cls\n }), {\n type: 'value',\n value: children,\n keyName,\n keys\n });\n return /*#__PURE__*/_jsxs(Fragment, {\n children: [displayDataTypes && (type || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n style: style\n }))), child || /*#__PURE__*/_jsxs(Fragment, {\n children: [/*#__PURE__*/_jsx(ValueQuote, {}), /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n className: cls,\n children: text\n })), /*#__PURE__*/_jsx(ValueQuote, {})]\n })]\n });\n};\nTypeString.displayName = 'JVR.TypeString';\nexport var TypeTrue = _ref4 => {\n var {\n children,\n keyName,\n keys\n } = _ref4;\n var {\n True = {},\n displayDataTypes\n } = useTypesStore();\n var {\n as,\n render\n } = True,\n reset = _objectWithoutPropertiesLoose(True, _excluded4);\n var Comp = as || 'span';\n var style = _extends({}, defalutStyle, True.style || {});\n var isRender = render && typeof render === 'function';\n var type = isRender && render(_extends({}, reset, {\n style\n }), {\n type: 'type',\n value: children,\n keyName,\n keys\n });\n var child = isRender && render(_extends({}, reset, {\n children,\n className: 'w-rjv-value'\n }), {\n type: 'value',\n value: children,\n keyName,\n keys\n });\n return /*#__PURE__*/_jsxs(Fragment, {\n children: [displayDataTypes && (type || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n style: style\n }))), child || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n className: \"w-rjv-value\",\n children: children == null ? void 0 : children.toString()\n }))]\n });\n};\nTypeTrue.displayName = 'JVR.TypeTrue';\nexport var TypeFalse = _ref5 => {\n var {\n children,\n keyName,\n keys\n } = _ref5;\n var {\n False = {},\n displayDataTypes\n } = useTypesStore();\n var {\n as,\n render\n } = False,\n reset = _objectWithoutPropertiesLoose(False, _excluded5);\n var Comp = as || 'span';\n var style = _extends({}, defalutStyle, False.style || {});\n var isRender = render && typeof render === 'function';\n var type = isRender && render(_extends({}, reset, {\n style\n }), {\n type: 'type',\n value: children,\n keyName,\n keys\n });\n var child = isRender && render(_extends({}, reset, {\n children,\n className: 'w-rjv-value'\n }), {\n type: 'value',\n value: children,\n keyName,\n keys\n });\n return /*#__PURE__*/_jsxs(Fragment, {\n children: [displayDataTypes && (type || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n style: style\n }))), child || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n className: \"w-rjv-value\",\n children: children == null ? void 0 : children.toString()\n }))]\n });\n};\nTypeFalse.displayName = 'JVR.TypeFalse';\nexport var TypeFloat = _ref6 => {\n var {\n children,\n keyName,\n keys\n } = _ref6;\n var {\n Float = {},\n displayDataTypes\n } = useTypesStore();\n var {\n as,\n render\n } = Float,\n reset = _objectWithoutPropertiesLoose(Float, _excluded6);\n var Comp = as || 'span';\n var style = _extends({}, defalutStyle, Float.style || {});\n var isRender = render && typeof render === 'function';\n var type = isRender && render(_extends({}, reset, {\n style\n }), {\n type: 'type',\n value: children,\n keyName,\n keys\n });\n var child = isRender && render(_extends({}, reset, {\n children,\n className: 'w-rjv-value'\n }), {\n type: 'value',\n value: children,\n keyName,\n keys\n });\n return /*#__PURE__*/_jsxs(Fragment, {\n children: [displayDataTypes && (type || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n style: style\n }))), child || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n className: \"w-rjv-value\",\n children: children == null ? void 0 : children.toString()\n }))]\n });\n};\nTypeFloat.displayName = 'JVR.TypeFloat';\nexport var TypeInt = _ref7 => {\n var {\n children,\n keyName,\n keys\n } = _ref7;\n var {\n Int = {},\n displayDataTypes\n } = useTypesStore();\n var {\n as,\n render\n } = Int,\n reset = _objectWithoutPropertiesLoose(Int, _excluded7);\n var Comp = as || 'span';\n var style = _extends({}, defalutStyle, Int.style || {});\n var isRender = render && typeof render === 'function';\n var type = isRender && render(_extends({}, reset, {\n style\n }), {\n type: 'type',\n value: children,\n keyName,\n keys\n });\n var child = isRender && render(_extends({}, reset, {\n children,\n className: 'w-rjv-value'\n }), {\n type: 'value',\n value: children,\n keyName,\n keys\n });\n return /*#__PURE__*/_jsxs(Fragment, {\n children: [displayDataTypes && (type || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n style: style\n }))), child || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n className: \"w-rjv-value\",\n children: children == null ? void 0 : children.toString()\n }))]\n });\n};\nTypeInt.displayName = 'JVR.TypeInt';\nexport var TypeBigint = _ref8 => {\n var {\n children,\n keyName,\n keys\n } = _ref8;\n var {\n Bigint: CompBigint = {},\n displayDataTypes\n } = useTypesStore();\n var {\n as,\n render\n } = CompBigint,\n reset = _objectWithoutPropertiesLoose(CompBigint, _excluded8);\n var Comp = as || 'span';\n var style = _extends({}, defalutStyle, CompBigint.style || {});\n var isRender = render && typeof render === 'function';\n var type = isRender && render(_extends({}, reset, {\n style\n }), {\n type: 'type',\n value: children,\n keyName,\n keys\n });\n var child = isRender && render(_extends({}, reset, {\n children,\n className: 'w-rjv-value'\n }), {\n type: 'value',\n value: children,\n keyName,\n keys\n });\n return /*#__PURE__*/_jsxs(Fragment, {\n children: [displayDataTypes && (type || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n style: style\n }))), child || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n className: \"w-rjv-value\",\n children: bigIntToString(children == null ? void 0 : children.toString())\n }))]\n });\n};\nTypeBigint.displayName = 'JVR.TypeFloat';\nexport var TypeUrl = _ref9 => {\n var {\n children,\n keyName,\n keys\n } = _ref9;\n var {\n Url = {},\n displayDataTypes\n } = useTypesStore();\n var {\n as,\n render\n } = Url,\n reset = _objectWithoutPropertiesLoose(Url, _excluded9);\n var Comp = as || 'span';\n var style = _extends({}, defalutStyle, Url.style);\n var isRender = render && typeof render === 'function';\n var type = isRender && render(_extends({}, reset, {\n style\n }), {\n type: 'type',\n value: children,\n keyName,\n keys\n });\n var child = isRender && render(_extends({}, reset, {\n children: children == null ? void 0 : children.href,\n className: 'w-rjv-value'\n }), {\n type: 'value',\n value: children,\n keyName,\n keys\n });\n return /*#__PURE__*/_jsxs(Fragment, {\n children: [displayDataTypes && (type || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n style: style\n }))), child || /*#__PURE__*/_jsxs(\"a\", _extends({\n href: children == null ? void 0 : children.href,\n target: \"_blank\"\n }, reset, {\n className: \"w-rjv-value\",\n children: [/*#__PURE__*/_jsx(ValueQuote, {}), children == null ? void 0 : children.href, /*#__PURE__*/_jsx(ValueQuote, {})]\n }))]\n });\n};\nTypeUrl.displayName = 'JVR.TypeUrl';\nexport var TypeDate = _ref0 => {\n var {\n children,\n keyName,\n keys\n } = _ref0;\n var {\n Date: CompData = {},\n displayDataTypes\n } = useTypesStore();\n var {\n as,\n render\n } = CompData,\n reset = _objectWithoutPropertiesLoose(CompData, _excluded0);\n var Comp = as || 'span';\n var style = _extends({}, defalutStyle, CompData.style || {});\n var isRender = render && typeof render === 'function';\n var type = isRender && render(_extends({}, reset, {\n style\n }), {\n type: 'type',\n value: children,\n keyName,\n keys\n });\n var childStr = children instanceof Date ? children.toLocaleString() : children;\n var child = isRender && render(_extends({}, reset, {\n children: childStr,\n className: 'w-rjv-value'\n }), {\n type: 'value',\n value: children,\n keyName,\n keys\n });\n return /*#__PURE__*/_jsxs(Fragment, {\n children: [displayDataTypes && (type || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n style: style\n }))), child || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n className: \"w-rjv-value\",\n children: childStr\n }))]\n });\n};\nTypeDate.displayName = 'JVR.TypeDate';\nexport var TypeUndefined = _ref1 => {\n var {\n children,\n keyName,\n keys\n } = _ref1;\n var {\n Undefined = {},\n displayDataTypes\n } = useTypesStore();\n var {\n as,\n render\n } = Undefined,\n reset = _objectWithoutPropertiesLoose(Undefined, _excluded1);\n var Comp = as || 'span';\n var style = _extends({}, defalutStyle, Undefined.style || {});\n var isRender = render && typeof render === 'function';\n var type = isRender && render(_extends({}, reset, {\n style\n }), {\n type: 'type',\n value: children,\n keyName,\n keys\n });\n var child = isRender && render(_extends({}, reset, {\n children,\n className: 'w-rjv-value'\n }), {\n type: 'value',\n value: children,\n keyName,\n keys\n });\n return /*#__PURE__*/_jsxs(Fragment, {\n children: [displayDataTypes && (type || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n style: style\n }))), child || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n className: \"w-rjv-value\",\n children: \"undefined\"\n }))]\n });\n};\nTypeUndefined.displayName = 'JVR.TypeUndefined';\nexport var TypeNull = _ref10 => {\n var {\n children,\n keyName,\n keys\n } = _ref10;\n var {\n Null = {},\n displayDataTypes\n } = useTypesStore();\n var {\n as,\n render\n } = Null,\n reset = _objectWithoutPropertiesLoose(Null, _excluded10);\n var Comp = as || 'span';\n var style = _extends({}, defalutStyle, Null.style || {});\n var isRender = render && typeof render === 'function';\n var type = isRender && render(_extends({}, reset, {\n style\n }), {\n type: 'type',\n value: children,\n keyName,\n keys\n });\n var child = isRender && render(_extends({}, reset, {\n children,\n className: 'w-rjv-value'\n }), {\n type: 'value',\n value: children,\n keyName,\n keys\n });\n return /*#__PURE__*/_jsxs(Fragment, {\n children: [displayDataTypes && (type || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n style: style\n }))), child || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n className: \"w-rjv-value\",\n children: \"null\"\n }))]\n });\n};\nTypeNull.displayName = 'JVR.TypeNull';\nexport var TypeNan = _ref11 => {\n var {\n children,\n keyName,\n keys\n } = _ref11;\n var {\n Nan = {},\n displayDataTypes\n } = useTypesStore();\n var {\n as,\n render\n } = Nan,\n reset = _objectWithoutPropertiesLoose(Nan, _excluded11);\n var Comp = as || 'span';\n var style = _extends({}, defalutStyle, Nan.style || {});\n var isRender = render && typeof render === 'function';\n var type = isRender && render(_extends({}, reset, {\n style\n }), {\n type: 'type',\n value: children,\n keyName,\n keys\n });\n var child = isRender && render(_extends({}, reset, {\n children: children == null ? void 0 : children.toString(),\n className: 'w-rjv-value'\n }), {\n type: 'value',\n value: children,\n keyName,\n keys\n });\n return /*#__PURE__*/_jsxs(Fragment, {\n children: [displayDataTypes && (type || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n style: style\n }))), child || /*#__PURE__*/_jsx(Comp, _extends({}, reset, {\n className: \"w-rjv-value\",\n children: \"NaN\"\n }))]\n });\n};\nTypeNan.displayName = 'JVR.TypeNan';","import _extends from \"@babel/runtime/helpers/extends\";\nimport { TypeString, TypeTrue, TypeNull, TypeFalse, TypeFloat, TypeBigint, TypeInt, TypeDate, TypeUndefined, TypeNan, TypeUrl } from \"../types/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var isFloat = n => Number(n) === n && n % 1 !== 0 || isNaN(n);\nexport var Value = props => {\n var {\n value,\n keyName,\n keys\n } = props;\n var reset = {\n keyName,\n keys\n };\n if (value instanceof URL) {\n return /*#__PURE__*/_jsx(TypeUrl, _extends({}, reset, {\n children: value\n }));\n }\n if (typeof value === 'string') {\n return /*#__PURE__*/_jsx(TypeString, _extends({}, reset, {\n children: value\n }));\n }\n if (value === true) {\n return /*#__PURE__*/_jsx(TypeTrue, _extends({}, reset, {\n children: value\n }));\n }\n if (value === false) {\n return /*#__PURE__*/_jsx(TypeFalse, _extends({}, reset, {\n children: value\n }));\n }\n if (value === null) {\n return /*#__PURE__*/_jsx(TypeNull, _extends({}, reset, {\n children: value\n }));\n }\n if (value === undefined) {\n return /*#__PURE__*/_jsx(TypeUndefined, _extends({}, reset, {\n children: value\n }));\n }\n if (value instanceof Date) {\n return /*#__PURE__*/_jsx(TypeDate, _extends({}, reset, {\n children: value\n }));\n }\n if (typeof value === 'number' && isNaN(value)) {\n return /*#__PURE__*/_jsx(TypeNan, _extends({}, reset, {\n children: value\n }));\n } else if (typeof value === 'number' && isFloat(value)) {\n return /*#__PURE__*/_jsx(TypeFloat, _extends({}, reset, {\n children: value\n }));\n } else if (typeof value === 'bigint') {\n return /*#__PURE__*/_jsx(TypeBigint, _extends({}, reset, {\n children: value\n }));\n } else if (typeof value === 'number') {\n return /*#__PURE__*/_jsx(TypeInt, _extends({}, reset, {\n children: value\n }));\n }\n return null;\n};\nValue.displayName = 'JVR.Value';","import _extends from \"@babel/runtime/helpers/extends\";\nimport { useEffect } from 'react';\nimport { useSymbolsDispatch } from \"../store/Symbols.js\";\nimport { useTypesDispatch } from \"../store/Types.js\";\nimport { useSectionDispatch } from \"../store/Section.js\";\nexport function useSymbolsRender(currentProps, props, key) {\n var dispatch = useSymbolsDispatch();\n var cls = [currentProps.className, props.className].filter(Boolean).join(' ');\n var reset = _extends({}, currentProps, props, {\n className: cls,\n style: _extends({}, currentProps.style, props.style),\n children: props.children || currentProps.children\n });\n useEffect(() => dispatch({\n [key]: reset\n }), [props]);\n}\nexport function useTypesRender(currentProps, props, key) {\n var dispatch = useTypesDispatch();\n var cls = [currentProps.className, props.className].filter(Boolean).join(' ');\n var reset = _extends({}, currentProps, props, {\n className: cls,\n style: _extends({}, currentProps.style, props.style),\n children: props.children || currentProps.children\n });\n useEffect(() => dispatch({\n [key]: reset\n }), [props]);\n}\nexport function useSectionRender(currentProps, props, key) {\n var dispatch = useSectionDispatch();\n var cls = [currentProps.className, props.className].filter(Boolean).join(' ');\n var reset = _extends({}, currentProps, props, {\n className: cls,\n style: _extends({}, currentProps.style, props.style),\n children: props.children || currentProps.children\n });\n useEffect(() => dispatch({\n [key]: reset\n }), [props]);\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"as\", \"render\"];\nimport { useSectionStore } from \"../store/Section.js\";\nimport { useSectionRender } from \"../utils/useRender.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var KeyName = props => {\n var {\n KeyName: Comp = {}\n } = useSectionStore();\n useSectionRender(Comp, props, 'KeyName');\n return null;\n};\nKeyName.displayName = 'JVR.KeyName';\nexport var KeyNameComp = props => {\n var {\n children,\n value,\n parentValue,\n keyName,\n keys\n } = props;\n var isNumber = typeof children === 'number';\n var style = {\n color: isNumber ? 'var(--w-rjv-key-number, #268bd2)' : 'var(--w-rjv-key-string, #002b36)'\n };\n var {\n KeyName: Comp = {}\n } = useSectionStore();\n var {\n as,\n render\n } = Comp,\n reset = _objectWithoutPropertiesLoose(Comp, _excluded);\n reset.style = _extends({}, reset.style, style);\n var Elm = as || 'span';\n var child = render && typeof render === 'function' && render(_extends({}, reset, {\n children\n }), {\n value,\n parentValue,\n keyName,\n keys: keys || (keyName ? [keyName] : [])\n });\n if (child) return child;\n return /*#__PURE__*/_jsx(Elm, _extends({}, reset, {\n children: children\n }));\n};\nKeyNameComp.displayName = 'JVR.KeyNameComp';","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"children\", \"value\", \"parentValue\", \"keyName\", \"keys\"],\n _excluded2 = [\"as\", \"render\", \"children\"];\nimport { useSectionStore } from \"../store/Section.js\";\nimport { useSectionRender } from \"../utils/useRender.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var Row = props => {\n var {\n Row: Comp = {}\n } = useSectionStore();\n useSectionRender(Comp, props, 'Row');\n return null;\n};\nRow.displayName = 'JVR.Row';\nexport var RowComp = props => {\n var {\n children,\n value,\n parentValue,\n keyName,\n keys\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var {\n Row: Comp = {}\n } = useSectionStore();\n var {\n as,\n render\n } = Comp,\n reset = _objectWithoutPropertiesLoose(Comp, _excluded2);\n var Elm = as || 'div';\n var child = render && typeof render === 'function' && render(_extends({}, other, reset, {\n children\n }), {\n value,\n keyName,\n parentValue,\n keys\n });\n if (child) return child;\n return /*#__PURE__*/_jsx(Elm, _extends({}, other, reset, {\n children: children\n }));\n};\nRowComp.displayName = 'JVR.RowComp';","import { useMemo, useRef, useEffect } from 'react';\nexport function usePrevious(value) {\n var ref = useRef();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\nexport function useHighlight(_ref) {\n var {\n value,\n highlightUpdates,\n highlightContainer\n } = _ref;\n var prevValue = usePrevious(value);\n var isHighlight = useMemo(() => {\n if (!highlightUpdates || prevValue === undefined) return false;\n // highlight if value type changed\n if (typeof value !== typeof prevValue) {\n return true;\n }\n if (typeof value === 'number') {\n // notice: NaN !== NaN\n if (isNaN(value) && isNaN(prevValue)) return false;\n return value !== prevValue;\n }\n // highlight if isArray changed\n if (Array.isArray(value) !== Array.isArray(prevValue)) {\n return true;\n }\n // not highlight object/function\n // deep compare they will be slow\n if (typeof value === 'object' || typeof value === 'function') {\n return false;\n }\n\n // highlight if not equal\n if (value !== prevValue) {\n return true;\n }\n }, [highlightUpdates, value]);\n useEffect(() => {\n if (highlightContainer && highlightContainer.current && isHighlight && 'animate' in highlightContainer.current) {\n highlightContainer.current.animate([{\n backgroundColor: 'var(--w-rjv-update-color, #ebcb8b)'\n }, {\n backgroundColor: ''\n }], {\n duration: 1000,\n easing: 'ease-in'\n });\n }\n }, [isHighlight, value, highlightContainer]);\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"keyName\", \"value\", \"parentValue\", \"expandKey\", \"keys\", \"beforeCopy\"],\n _excluded2 = [\"as\", \"render\"];\nimport { useState } from 'react';\nimport { useStore } from \"../store.js\";\nimport { useSectionStore } from \"../store/Section.js\";\nimport { useShowToolsStore } from \"../store/ShowTools.js\";\nimport { bigIntToString } from \"../types/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var Copied = props => {\n var {\n keyName,\n value,\n parentValue,\n expandKey,\n keys,\n beforeCopy\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var {\n onCopied,\n enableClipboard,\n beforeCopy: globalBeforeCopy\n } = useStore();\n var showTools = useShowToolsStore();\n var isShowTools = showTools[expandKey];\n var [copied, setCopied] = useState(false);\n var {\n Copied: Comp = {}\n } = useSectionStore();\n var sectionBeforeCopy = Comp == null ? void 0 : Comp.beforeCopy;\n if (enableClipboard === false || !isShowTools) return null;\n var click = event => {\n event.stopPropagation();\n var copyText = '';\n if (typeof value === 'number' && value === Infinity) {\n copyText = 'Infinity';\n } else if (typeof value === 'number' && isNaN(value)) {\n copyText = 'NaN';\n } else if (typeof value === 'bigint') {\n copyText = bigIntToString(value);\n } else if (value instanceof Date) {\n copyText = value.toLocaleString();\n } else {\n copyText = JSON.stringify(value, (_, v) => typeof v === 'bigint' ? bigIntToString(v) : v, 2);\n }\n\n // Apply beforeCopy transformation if provided\n // Priority: component prop > section prop > global prop\n var finalBeforeCopy = beforeCopy || sectionBeforeCopy || globalBeforeCopy;\n if (finalBeforeCopy && typeof finalBeforeCopy === 'function') {\n copyText = finalBeforeCopy(copyText, keyName, value, parentValue, expandKey, keys);\n }\n onCopied && onCopied(copyText, value);\n setCopied(true);\n var _clipboard = navigator.clipboard || {\n writeText(text) {\n return new Promise((reslove, reject) => {\n var textarea = document.createElement('textarea');\n textarea.style.position = 'absolute';\n textarea.style.opacity = '0';\n textarea.style.left = '-99999999px';\n textarea.value = text;\n document.body.appendChild(textarea);\n textarea.select();\n if (!document.execCommand('copy')) {\n reject();\n } else {\n reslove();\n }\n textarea.remove();\n });\n }\n };\n _clipboard.writeText(copyText).then(() => {\n var timer = setTimeout(() => {\n setCopied(false);\n clearTimeout(timer);\n }, 3000);\n }).catch(error => {});\n };\n var svgProps = {\n style: {\n display: 'inline-flex'\n },\n fill: copied ? 'var(--w-rjv-copied-success-color, #28a745)' : 'var(--w-rjv-copied-color, currentColor)',\n onClick: click\n };\n var {\n render\n } = Comp,\n reset = _objectWithoutPropertiesLoose(Comp, _excluded2);\n var elmProps = _extends({}, reset, other, svgProps, {\n style: _extends({}, reset.style, other.style, svgProps.style)\n });\n var isRender = render && typeof render === 'function';\n var child = isRender && render(_extends({}, elmProps, {\n 'data-copied': copied\n }), {\n value,\n keyName,\n keys,\n parentValue\n });\n if (child) return child;\n if (copied) {\n return /*#__PURE__*/_jsx(\"svg\", _extends({\n viewBox: \"0 0 32 36\"\n }, elmProps, {\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M27.5,33 L2.5,33 L2.5,12.5 L27.5,12.5 L27.5,15.2249049 C29.1403264,13.8627542 29.9736597,13.1778155 30,13.1700887 C30,11.9705278 30,10.0804982 30,7.5 C30,6.1 28.9,5 27.5,5 L20,5 C20,2.2 17.8,0 15,0 C12.2,0 10,2.2 10,5 L2.5,5 C1.1,5 0,6.1 0,7.5 L0,33 C0,34.4 1.1,36 2.5,36 L27.5,36 C28.9,36 30,34.4 30,33 L30,26.1114493 L27.5,28.4926435 L27.5,33 Z M7.5,7.5 L10,7.5 C10,7.5 12.5,6.4 12.5,5 C12.5,3.6 13.6,2.5 15,2.5 C16.4,2.5 17.5,3.6 17.5,5 C17.5,6.4 18.8,7.5 20,7.5 L22.5,7.5 C22.5,7.5 25,8.6 25,10 L5,10 C5,8.5 6.1,7.5 7.5,7.5 Z M5,27.5 L10,27.5 L10,25 L5,25 L5,27.5 Z M28.5589286,16 L32,19.6 L21.0160714,30.5382252 L13.5303571,24.2571429 L17.1303571,20.6571429 L21.0160714,24.5428571 L28.5589286,16 Z M17.5,15 L5,15 L5,17.5 L17.5,17.5 L17.5,15 Z M10,20 L5,20 L5,22.5 L10,22.5 L10,20 Z\"\n })\n }));\n }\n return /*#__PURE__*/_jsx(\"svg\", _extends({\n viewBox: \"0 0 32 36\"\n }, elmProps, {\n children: /*#__PURE__*/_jsx(\"path\", {\n d: \"M27.5,33 L2.5,33 L2.5,12.5 L27.5,12.5 L27.5,20 L30,20 L30,7.5 C30,6.1 28.9,5 27.5,5 L20,5 C20,2.2 17.8,0 15,0 C12.2,0 10,2.2 10,5 L2.5,5 C1.1,5 0,6.1 0,7.5 L0,33 C0,34.4 1.1,36 2.5,36 L27.5,36 C28.9,36 30,34.4 30,33 L30,29 L27.5,29 L27.5,33 Z M7.5,7.5 L10,7.5 C10,7.5 12.5,6.4 12.5,5 C12.5,3.6 13.6,2.5 15,2.5 C16.4,2.5 17.5,3.6 17.5,5 C17.5,6.4 18.8,7.5 20,7.5 L22.5,7.5 C22.5,7.5 25,8.6 25,10 L5,10 C5,8.5 6.1,7.5 7.5,7.5 Z M5,27.5 L10,27.5 L10,25 L5,25 L5,27.5 Z M22.5,21.5 L22.5,16.5 L12.5,24 L22.5,31.5 L22.5,26.5 L32,26.5 L32,21.5 L22.5,21.5 Z M17.5,15 L5,15 L5,17.5 L17.5,17.5 L17.5,15 Z M10,20 L5,20 L5,22.5 L10,22.5 L10,20 Z\"\n })\n }));\n};\nCopied.displayName = 'JVR.Copied';","import { useRef } from 'react';\nexport function useIdCompat() {\n var idRef = useRef(null);\n if (idRef.current === null) {\n idRef.current = 'custom-id-' + Math.random().toString(36).substr(2, 9);\n }\n return idRef.current;\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport { Fragment, useRef } from 'react';\nimport { useStore } from \"../store.js\";\nimport { useExpandsStore } from \"../store/Expands.js\";\nimport { useShowToolsDispatch } from \"../store/ShowTools.js\";\nimport { Value } from \"./Value.js\";\nimport { KeyNameComp } from \"../section/KeyName.js\";\nimport { RowComp } from \"../section/Row.js\";\nimport { Container } from \"../Container.js\";\nimport { Quote, Colon } from \"../symbol/index.js\";\nimport { useHighlight } from \"../utils/useHighlight.js\";\nimport { Copied } from \"../comps/Copied.js\";\nimport { useIdCompat } from \"../comps/useIdCompat.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport var KeyValues = props => {\n var _expands$expandKey;\n var {\n keyName,\n value,\n expandKey = '',\n level,\n keys = [],\n parentValue\n } = props;\n var expands = useExpandsStore();\n var {\n objectSortKeys,\n indentWidth,\n collapsed,\n shouldExpandNodeInitially\n } = useStore();\n var defaultExpanded = typeof collapsed === 'boolean' ? collapsed : typeof collapsed === 'number' ? level > collapsed : false;\n var isExpanded = (_expands$expandKey = expands[expandKey]) != null ? _expands$expandKey : shouldExpandNodeInitially ? false : defaultExpanded;\n var shouldExpand = shouldExpandNodeInitially && shouldExpandNodeInitially(!isExpanded, {\n value,\n keys,\n level,\n keyName,\n parentValue\n });\n if (shouldExpandNodeInitially && collapsed === false) {\n if (expands[expandKey] === undefined && !shouldExpand) {\n return null;\n }\n } else {\n if (expands[expandKey] === undefined && shouldExpand) {\n return null;\n }\n }\n if (isExpanded) {\n return null;\n }\n var isMyArray = Array.isArray(value);\n // object\n var entries = isMyArray ? Object.entries(value).map(m => [Number(m[0]), m[1]]) : Object.entries(value);\n if (objectSortKeys) {\n entries = objectSortKeys === true ? entries.sort((_ref, _ref2) => {\n var [a] = _ref;\n var [b] = _ref2;\n return typeof a === 'string' && typeof b === 'string' ? a.localeCompare(b) : 0;\n }) : entries.sort((_ref3, _ref4) => {\n var [a, valA] = _ref3;\n var [b, valB] = _ref4;\n return typeof a === 'string' && typeof b === 'string' ? objectSortKeys(a, b, valA, valB) : 0;\n });\n }\n var style = {\n borderLeft: 'var(--w-rjv-border-left-width, 1px) var(--w-rjv-line-style, solid) var(--w-rjv-line-color, #ebebeb)',\n paddingLeft: indentWidth,\n marginLeft: 6\n };\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"w-rjv-wrap\",\n style: style,\n children: entries.map((_ref5, idx) => {\n var [key, val] = _ref5;\n return /*#__PURE__*/_jsx(KeyValuesItem, {\n parentValue: value,\n keyName: key,\n keys: [...keys, key],\n value: val,\n level: level\n }, idx);\n })\n });\n};\nKeyValues.displayName = 'JVR.KeyValues';\nexport var KayName = props => {\n var {\n keyName,\n parentValue,\n keys,\n value\n } = props;\n var {\n highlightUpdates\n } = useStore();\n var isNumber = typeof keyName === 'number';\n var highlightContainer = useRef(null);\n useHighlight({\n value,\n highlightUpdates,\n highlightContainer\n });\n var compProps = {\n keyName,\n value,\n keys,\n parentValue\n };\n return /*#__PURE__*/_jsxs(Fragment, {\n children: [/*#__PURE__*/_jsxs(\"span\", {\n ref: highlightContainer,\n children: [/*#__PURE__*/_jsx(Quote, _extends({\n isNumber: isNumber,\n \"data-placement\": \"left\"\n }, compProps)), /*#__PURE__*/_jsx(KeyNameComp, _extends({}, compProps, {\n children: keyName\n })), /*#__PURE__*/_jsx(Quote, _extends({\n isNumber: isNumber,\n \"data-placement\": \"right\"\n }, compProps))]\n }), /*#__PURE__*/_jsx(Colon, _extends({}, compProps))]\n });\n};\nKayName.displayName = 'JVR.KayName';\nexport var KeyValuesItem = props => {\n var {\n keyName,\n value,\n parentValue,\n level = 0,\n keys = []\n } = props;\n var dispatch = useShowToolsDispatch();\n var subkeyid = useIdCompat();\n var isMyArray = Array.isArray(value);\n var isMySet = value instanceof Set;\n var isMyMap = value instanceof Map;\n var isDate = value instanceof Date;\n var isUrl = value instanceof URL;\n var isMyObject = value && typeof value === 'object' && !isMyArray && !isMySet && !isMyMap && !isDate && !isUrl;\n var isNested = isMyObject || isMyArray || isMySet || isMyMap;\n if (isNested) {\n var myValue = isMySet ? Array.from(value) : isMyMap ? Object.fromEntries(value) : value;\n return /*#__PURE__*/_jsx(Container, {\n keyName: keyName,\n value: myValue,\n parentValue: parentValue,\n initialValue: value,\n keys: keys,\n level: level + 1\n });\n }\n var reset = {\n onMouseEnter: () => dispatch({\n [subkeyid]: true\n }),\n onMouseLeave: () => dispatch({\n [subkeyid]: false\n })\n };\n return /*#__PURE__*/_jsxs(RowComp, _extends({\n className: \"w-rjv-line\",\n value: value,\n keyName: keyName,\n keys: keys,\n parentValue: parentValue\n }, reset, {\n children: [/*#__PURE__*/_jsx(KayName, {\n keyName: keyName,\n value: value,\n keys: keys,\n parentValue: parentValue\n }), /*#__PURE__*/_jsx(Value, {\n keyName: keyName,\n value: value,\n keys: keys\n }), /*#__PURE__*/_jsx(Copied, {\n keyName: keyName,\n value: value,\n keys: keys,\n parentValue: parentValue,\n expandKey: subkeyid\n })]\n }));\n};\nKeyValuesItem.displayName = 'JVR.KeyValuesItem';","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"value\", \"keyName\"],\n _excluded2 = [\"as\", \"render\"];\nimport { useSectionStore } from \"../store/Section.js\";\nimport { useSectionRender } from \"../utils/useRender.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var CountInfoExtra = props => {\n var {\n CountInfoExtra: Comp = {}\n } = useSectionStore();\n useSectionRender(Comp, props, 'CountInfoExtra');\n return null;\n};\nCountInfoExtra.displayName = 'JVR.CountInfoExtra';\nexport var CountInfoExtraComps = props => {\n var {\n value = {},\n keyName\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var {\n CountInfoExtra: Comp = {}\n } = useSectionStore();\n var {\n as,\n render\n } = Comp,\n reset = _objectWithoutPropertiesLoose(Comp, _excluded2);\n if (!render && !reset.children) return null;\n var Elm = as || 'span';\n var isRender = render && typeof render === 'function';\n var elmProps = _extends({}, reset, other);\n var child = isRender && render(elmProps, {\n value,\n keyName\n });\n if (child) return child;\n return /*#__PURE__*/_jsx(Elm, _extends({}, elmProps));\n};\nCountInfoExtraComps.displayName = 'JVR.CountInfoExtraComps';","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"value\", \"keyName\"],\n _excluded2 = [\"as\", \"render\"];\nimport { useSectionStore } from \"../store/Section.js\";\nimport { useSectionRender } from \"../utils/useRender.js\";\nimport { useStore } from \"../store.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var CountInfo = props => {\n var {\n CountInfo: Comp = {}\n } = useSectionStore();\n useSectionRender(Comp, props, 'CountInfo');\n return null;\n};\nCountInfo.displayName = 'JVR.CountInfo';\nexport var CountInfoComp = props => {\n var {\n value = {},\n keyName\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var {\n displayObjectSize\n } = useStore();\n var {\n CountInfo: Comp = {}\n } = useSectionStore();\n if (!displayObjectSize) return null;\n var {\n as,\n render\n } = Comp,\n reset = _objectWithoutPropertiesLoose(Comp, _excluded2);\n var Elm = as || 'span';\n reset.style = _extends({}, reset.style, props.style);\n var len = Object.keys(value).length;\n if (!reset.children) {\n reset.children = len + \" item\" + (len === 1 ? '' : 's');\n }\n var elmProps = _extends({}, reset, other);\n var isRender = render && typeof render === 'function';\n var child = isRender && render(_extends({}, elmProps, {\n 'data-length': len\n }), {\n value,\n keyName\n });\n if (child) return child;\n return /*#__PURE__*/_jsx(Elm, _extends({}, elmProps));\n};\nCountInfoComp.displayName = 'JVR.CountInfoComp';","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"as\", \"render\"];\nimport { useSectionStore } from \"../store/Section.js\";\nimport { useSectionRender } from \"../utils/useRender.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var Ellipsis = props => {\n var {\n Ellipsis: Comp = {}\n } = useSectionStore();\n useSectionRender(Comp, props, 'Ellipsis');\n return null;\n};\nEllipsis.displayName = 'JVR.Ellipsis';\nexport var EllipsisComp = _ref => {\n var {\n isExpanded,\n value,\n keyName\n } = _ref;\n var {\n Ellipsis: Comp = {}\n } = useSectionStore();\n var {\n as,\n render\n } = Comp,\n reset = _objectWithoutPropertiesLoose(Comp, _excluded);\n var Elm = as || 'span';\n var child = render && typeof render === 'function' && render(_extends({}, reset, {\n 'data-expanded': isExpanded\n }), {\n value,\n keyName\n });\n if (child) return child;\n if (!isExpanded || typeof value === 'object' && Object.keys(value).length == 0) return null;\n return /*#__PURE__*/_jsx(Elm, _extends({}, reset));\n};\nEllipsisComp.displayName = 'JVR.EllipsisComp';","import _extends from \"@babel/runtime/helpers/extends\";\nimport { KayName } from \"./KeyValues.js\";\nimport { useExpandsStore, useExpandsDispatch } from \"../store/Expands.js\";\nimport { useStore } from \"../store.js\";\nimport { Copied } from \"./Copied.js\";\nimport { CountInfoExtraComps } from \"../section/CountInfoExtra.js\";\nimport { CountInfoComp } from \"../section/CountInfo.js\";\nimport { Arrow, BracketsOpen, BracketsClose } from \"../symbol/index.js\";\nimport { EllipsisComp } from \"../section/Ellipsis.js\";\nimport { SetComp, MapComp } from \"../types/index.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport var NestedOpen = props => {\n var _expands$expandKey;\n var {\n keyName,\n expandKey,\n keys = [],\n initialValue,\n value,\n parentValue,\n level\n } = props;\n var expands = useExpandsStore();\n var dispatchExpands = useExpandsDispatch();\n var {\n onExpand,\n collapsed,\n shouldExpandNodeInitially\n } = useStore();\n var defaultExpanded = typeof collapsed === 'boolean' ? collapsed : typeof collapsed === 'number' ? level > collapsed : false;\n var isExpanded = (_expands$expandKey = expands[expandKey]) != null ? _expands$expandKey : shouldExpandNodeInitially ? false : defaultExpanded;\n var shouldExpand = shouldExpandNodeInitially && shouldExpandNodeInitially(!isExpanded, {\n value,\n keys,\n level,\n keyName,\n parentValue\n });\n if (expands[expandKey] === undefined && shouldExpandNodeInitially) {\n isExpanded = !shouldExpand;\n }\n var click = () => {\n var opt = {\n expand: !isExpanded,\n value,\n keyid: expandKey,\n keyName\n };\n onExpand && onExpand(opt);\n dispatchExpands({\n [expandKey]: opt.expand\n });\n };\n var style = {\n display: 'inline-flex',\n alignItems: 'center'\n };\n var arrowStyle = {\n transform: \"rotate(\" + (!isExpanded ? '0' : '-90') + \"deg)\",\n transition: 'all 0.3s'\n };\n var len = Object.keys(value).length;\n var isObject = typeof value === 'object';\n var isArray = Array.isArray(value);\n var isMySet = value instanceof Set;\n var showArrow = len !== 0 && (isArray || isMySet || isObject);\n var reset = {\n style\n };\n if (showArrow) {\n reset.onClick = click;\n }\n var compProps = {\n keyName,\n value,\n keys,\n parentValue\n };\n return /*#__PURE__*/_jsxs(\"span\", _extends({}, reset, {\n children: [showArrow && /*#__PURE__*/_jsx(Arrow, _extends({\n style: arrowStyle,\n expandKey: expandKey\n }, compProps)), (keyName || typeof keyName === 'number') && /*#__PURE__*/_jsx(KayName, _extends({}, compProps)), /*#__PURE__*/_jsx(SetComp, {\n value: initialValue,\n keyName: keyName\n }), /*#__PURE__*/_jsx(MapComp, {\n value: initialValue,\n keyName: keyName\n }), /*#__PURE__*/_jsx(BracketsOpen, _extends({\n isBrackets: isArray || isMySet\n }, compProps)), /*#__PURE__*/_jsx(EllipsisComp, {\n keyName: keyName,\n value: value,\n isExpanded: isExpanded\n }), /*#__PURE__*/_jsx(BracketsClose, _extends({\n isVisiable: isExpanded || !showArrow,\n isBrackets: isArray || isMySet\n }, compProps)), /*#__PURE__*/_jsx(CountInfoComp, {\n value: value,\n keyName: keyName\n }), /*#__PURE__*/_jsx(CountInfoExtraComps, {\n value: value,\n keyName: keyName\n }), /*#__PURE__*/_jsx(Copied, {\n keyName: keyName,\n value: value,\n expandKey: expandKey,\n parentValue: parentValue,\n keys: keys\n })]\n }));\n};\nNestedOpen.displayName = 'JVR.NestedOpen';","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"className\", \"children\", \"parentValue\", \"keyid\", \"level\", \"value\", \"initialValue\", \"keys\", \"keyName\"];\nimport React, { forwardRef } from 'react';\nimport { NestedClose } from \"./comps/NestedClose.js\";\nimport { NestedOpen } from \"./comps/NestedOpen.js\";\nimport { KeyValues } from \"./comps/KeyValues.js\";\nimport { useIdCompat } from \"./comps/useIdCompat.js\";\nimport { useShowToolsDispatch } from \"./store/ShowTools.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport var Container = /*#__PURE__*/forwardRef((props, ref) => {\n var {\n className = '',\n parentValue,\n level = 1,\n value,\n initialValue,\n keys,\n keyName\n } = props,\n elmProps = _objectWithoutPropertiesLoose(props, _excluded);\n var dispatch = useShowToolsDispatch();\n var subkeyid = useIdCompat();\n var defaultClassNames = [className, 'w-rjv-inner'].filter(Boolean).join(' ');\n var reset = {\n onMouseEnter: () => dispatch({\n [subkeyid]: true\n }),\n onMouseLeave: () => dispatch({\n [subkeyid]: false\n })\n };\n return /*#__PURE__*/_jsxs(\"div\", _extends({\n className: defaultClassNames,\n ref: ref\n }, elmProps, reset, {\n children: [/*#__PURE__*/_jsx(NestedOpen, {\n expandKey: subkeyid,\n value: value,\n level: level,\n keys: keys,\n parentValue: parentValue,\n keyName: keyName,\n initialValue: initialValue\n }), /*#__PURE__*/_jsx(KeyValues, {\n expandKey: subkeyid,\n value: value,\n level: level,\n keys: keys,\n parentValue: parentValue,\n keyName: keyName\n }), /*#__PURE__*/_jsx(NestedClose, {\n expandKey: subkeyid,\n value: value,\n level: level,\n keys: keys,\n parentValue: parentValue,\n keyName: keyName\n })]\n }));\n});\nContainer.displayName = 'JVR.Container';","import { useSymbolsStore } from \"../store/Symbols.js\";\nimport { useSymbolsRender } from \"../utils/useRender.js\";\nexport var BraceLeft = props => {\n var {\n BraceLeft: Comp = {}\n } = useSymbolsStore();\n useSymbolsRender(Comp, props, 'BraceLeft');\n return null;\n};\nBraceLeft.displayName = 'JVR.BraceLeft';","import { useSymbolsStore } from \"../store/Symbols.js\";\nimport { useSymbolsRender } from \"../utils/useRender.js\";\nexport var BraceRight = props => {\n var {\n BraceRight: Comp = {}\n } = useSymbolsStore();\n useSymbolsRender(Comp, props, 'BraceRight');\n return null;\n};\nBraceRight.displayName = 'JVR.BraceRight';","import { useSymbolsStore } from \"../store/Symbols.js\";\nimport { useSymbolsRender } from \"../utils/useRender.js\";\nexport var BracketsLeft = props => {\n var {\n BracketsLeft: Comp = {}\n } = useSymbolsStore();\n useSymbolsRender(Comp, props, 'BracketsLeft');\n return null;\n};\nBracketsLeft.displayName = 'JVR.BracketsLeft';","import { useSymbolsStore } from \"../store/Symbols.js\";\nimport { useSymbolsRender } from \"../utils/useRender.js\";\nexport var BracketsRight = props => {\n var {\n BracketsRight: Comp = {}\n } = useSymbolsStore();\n useSymbolsRender(Comp, props, 'BracketsRight');\n return null;\n};\nBracketsRight.displayName = 'JVR.BracketsRight';","import { useSymbolsStore } from \"../store/Symbols.js\";\nimport { useSymbolsRender } from \"../utils/useRender.js\";\nexport var Arrow = props => {\n var {\n Arrow: Comp = {}\n } = useSymbolsStore();\n useSymbolsRender(Comp, props, 'Arrow');\n return null;\n};\nArrow.displayName = 'JVR.Arrow';","import { useSymbolsStore } from \"../store/Symbols.js\";\nimport { useSymbolsRender } from \"../utils/useRender.js\";\nexport var Colon = props => {\n var {\n Colon: Comp = {}\n } = useSymbolsStore();\n useSymbolsRender(Comp, props, 'Colon');\n return null;\n};\nColon.displayName = 'JVR.Colon';","import { useSymbolsStore } from \"../store/Symbols.js\";\nimport { useSymbolsRender } from \"../utils/useRender.js\";\nexport var Quote = props => {\n var {\n Quote: Comp = {}\n } = useSymbolsStore();\n useSymbolsRender(Comp, props, 'Quote');\n return null;\n};\nQuote.displayName = 'JVR.Quote';","import { useSymbolsStore } from \"../store/Symbols.js\";\nimport { useSymbolsRender } from \"../utils/useRender.js\";\nexport var ValueQuote = props => {\n var {\n ValueQuote: Comp = {}\n } = useSymbolsStore();\n useSymbolsRender(Comp, props, 'ValueQuote');\n return null;\n};\nValueQuote.displayName = 'JVR.ValueQuote';","import { useTypesStore } from \"../store/Types.js\";\nimport { useTypesRender } from \"../utils/useRender.js\";\nexport var Bigint = props => {\n var {\n Bigint: Comp = {}\n } = useTypesStore();\n useTypesRender(Comp, props, 'Bigint');\n return null;\n};\nBigint.displayName = 'JVR.Bigint';","import { useTypesStore } from \"../store/Types.js\";\nimport { useTypesRender } from \"../utils/useRender.js\";\nexport var Date = props => {\n var {\n Date: Comp = {}\n } = useTypesStore();\n useTypesRender(Comp, props, 'Date');\n return null;\n};\nDate.displayName = 'JVR.Date';","import { useTypesStore } from \"../store/Types.js\";\nimport { useTypesRender } from \"../utils/useRender.js\";\nexport var False = props => {\n var {\n False: Comp = {}\n } = useTypesStore();\n useTypesRender(Comp, props, 'False');\n return null;\n};\nFalse.displayName = 'JVR.False';","import { useTypesStore } from \"../store/Types.js\";\nimport { useTypesRender } from \"../utils/useRender.js\";\nexport var Float = props => {\n var {\n Float: Comp = {}\n } = useTypesStore();\n useTypesRender(Comp, props, 'Float');\n return null;\n};\nFloat.displayName = 'JVR.Float';","import { useTypesStore } from \"../store/Types.js\";\nimport { useTypesRender } from \"../utils/useRender.js\";\nexport var Int = props => {\n var {\n Int: Comp = {}\n } = useTypesStore();\n useTypesRender(Comp, props, 'Int');\n return null;\n};\nInt.displayName = 'JVR.Int';","import { useTypesStore } from \"../store/Types.js\";\nimport { useTypesRender } from \"../utils/useRender.js\";\nexport var Map = props => {\n var {\n Map: Comp = {}\n } = useTypesStore();\n useTypesRender(Comp, props, 'Map');\n return null;\n};\nMap.displayName = 'JVR.Map';","import { useTypesStore } from \"../store/Types.js\";\nimport { useTypesRender } from \"../utils/useRender.js\";\nexport var Nan = props => {\n var {\n Nan: Comp = {}\n } = useTypesStore();\n useTypesRender(Comp, props, 'Nan');\n return null;\n};\nNan.displayName = 'JVR.Nan';","import { useTypesStore } from \"../store/Types.js\";\nimport { useTypesRender } from \"../utils/useRender.js\";\nexport var Null = props => {\n var {\n Null: Comp = {}\n } = useTypesStore();\n useTypesRender(Comp, props, 'Null');\n return null;\n};\nNull.displayName = 'JVR.Null';","import { useTypesStore } from \"../store/Types.js\";\nimport { useTypesRender } from \"../utils/useRender.js\";\nexport var Set = props => {\n var {\n Set: Comp = {}\n } = useTypesStore();\n useTypesRender(Comp, props, 'Set');\n return null;\n};\nSet.displayName = 'JVR.Set';","import { useTypesStore } from \"../store/Types.js\";\nimport { useTypesRender } from \"../utils/useRender.js\";\nexport var StringText = props => {\n var {\n Str: Comp = {}\n } = useTypesStore();\n useTypesRender(Comp, props, 'Str');\n return null;\n};\nStringText.displayName = 'JVR.StringText';","import { useTypesStore } from \"../store/Types.js\";\nimport { useTypesRender } from \"../utils/useRender.js\";\nexport var True = props => {\n var {\n True: Comp = {}\n } = useTypesStore();\n useTypesRender(Comp, props, 'True');\n return null;\n};\nTrue.displayName = 'JVR.True';","import { useTypesStore } from \"../store/Types.js\";\nimport { useTypesRender } from \"../utils/useRender.js\";\nexport var Undefined = props => {\n var {\n Undefined: Comp = {}\n } = useTypesStore();\n useTypesRender(Comp, props, 'Undefined');\n return null;\n};\nUndefined.displayName = 'JVR.Undefined';","import { useTypesStore } from \"../store/Types.js\";\nimport { useTypesRender } from \"../utils/useRender.js\";\nexport var Url = props => {\n var {\n Url: Comp = {}\n } = useTypesStore();\n useTypesRender(Comp, props, 'Url');\n return null;\n};\nUrl.displayName = 'JVR.Url';","import { useSectionStore } from \"../store/Section.js\";\nimport { useSectionRender } from \"../utils/useRender.js\";\nexport var Copied = props => {\n var {\n Copied: Comp = {}\n } = useSectionStore();\n useSectionRender(Comp, props, 'Copied');\n return null;\n};\nCopied.displayName = 'JVR.Copied';","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"className\", \"style\", \"value\", \"children\", \"collapsed\", \"shouldExpandNodeInitially\", \"indentWidth\", \"displayObjectSize\", \"shortenTextAfterLength\", \"stringEllipsis\", \"highlightUpdates\", \"enableClipboard\", \"displayDataTypes\", \"objectSortKeys\", \"onExpand\", \"onCopied\", \"beforeCopy\"];\nimport { forwardRef } from 'react';\nimport { Provider } from \"./store.js\";\nimport { Container } from \"./Container.js\";\nimport { BraceLeft } from \"./symbol/BraceLeft.js\";\nimport { BraceRight } from \"./symbol/BraceRight.js\";\nimport { BracketsLeft } from \"./symbol/BracketsLeft.js\";\nimport { BracketsRight } from \"./symbol/BracketsRight.js\";\nimport { Arrow } from \"./symbol/Arrow.js\";\nimport { Colon } from \"./symbol/Colon.js\";\nimport { Quote } from \"./symbol/Quote.js\";\nimport { ValueQuote } from \"./symbol/ValueQuote.js\";\nimport { Bigint } from \"./types/Bigint.js\";\nimport { Date } from \"./types/Date.js\";\nimport { False } from \"./types/False.js\";\nimport { Float } from \"./types/Float.js\";\nimport { Int } from \"./types/Int.js\";\nimport { Map } from \"./types/Map.js\";\nimport { Nan } from \"./types/Nan.js\";\nimport { Null } from \"./types/Null.js\";\nimport { Set } from \"./types/Set.js\";\nimport { StringText } from \"./types/String.js\";\nimport { True } from \"./types/True.js\";\nimport { Undefined } from \"./types/Undefined.js\";\nimport { Url } from \"./types/Url.js\";\nimport { Copied } from \"./section/Copied.js\";\nimport { CountInfo } from \"./section/CountInfo.js\";\nimport { CountInfoExtra } from \"./section/CountInfoExtra.js\";\nimport { Ellipsis } from \"./section/Ellipsis.js\";\nimport { KeyName } from \"./section/KeyName.js\";\nimport { Row } from \"./section/Row.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport * from \"./store.js\";\nexport * from \"./store/Expands.js\";\nexport * from \"./store/ShowTools.js\";\nexport * from \"./store/Symbols.js\";\nexport * from \"./store/Types.js\";\nexport * from \"./symbol/index.js\";\nvar JsonView = /*#__PURE__*/forwardRef((props, ref) => {\n var {\n className = '',\n style,\n value,\n children,\n collapsed = false,\n shouldExpandNodeInitially,\n indentWidth = 15,\n displayObjectSize = true,\n shortenTextAfterLength = 30,\n stringEllipsis,\n highlightUpdates = true,\n enableClipboard = true,\n displayDataTypes = true,\n objectSortKeys = false,\n onExpand,\n onCopied,\n beforeCopy\n } = props,\n elmProps = _objectWithoutPropertiesLoose(props, _excluded);\n var defaultStyle = _extends({\n lineHeight: 1.4,\n fontFamily: 'var(--w-rjv-font-family, Menlo, monospace)',\n color: 'var(--w-rjv-color, #002b36)',\n backgroundColor: 'var(--w-rjv-background-color, #00000000)',\n fontSize: 13\n }, style);\n var cls = ['w-json-view-container', 'w-rjv', className].filter(Boolean).join(' ');\n return /*#__PURE__*/_jsxs(Provider, {\n initialState: {\n value,\n objectSortKeys,\n indentWidth,\n shouldExpandNodeInitially: collapsed === false ? shouldExpandNodeInitially : undefined,\n displayObjectSize,\n collapsed,\n enableClipboard,\n shortenTextAfterLength,\n stringEllipsis,\n highlightUpdates,\n onCopied,\n onExpand,\n beforeCopy\n },\n initialTypes: {\n displayDataTypes\n },\n children: [/*#__PURE__*/_jsx(Container, _extends({\n value: value\n }, elmProps, {\n ref: ref,\n className: cls,\n style: defaultStyle\n })), children]\n });\n});\nJsonView.Bigint = Bigint;\nJsonView.Date = Date;\nJsonView.False = False;\nJsonView.Float = Float;\nJsonView.Int = Int;\nJsonView.Map = Map;\nJsonView.Nan = Nan;\nJsonView.Null = Null;\nJsonView.Set = Set;\nJsonView.String = StringText;\nJsonView.True = True;\nJsonView.Undefined = Undefined;\nJsonView.Url = Url;\nJsonView.ValueQuote = ValueQuote;\nJsonView.Arrow = Arrow;\nJsonView.Colon = Colon;\nJsonView.Quote = Quote;\nJsonView.Ellipsis = Ellipsis;\nJsonView.BraceLeft = BraceLeft;\nJsonView.BraceRight = BraceRight;\nJsonView.BracketsLeft = BracketsLeft;\nJsonView.BracketsRight = BracketsRight;\nJsonView.Copied = Copied;\nJsonView.CountInfo = CountInfo;\nJsonView.CountInfoExtra = CountInfoExtra;\nJsonView.KeyName = KeyName;\nJsonView.Row = Row;\nJsonView.displayName = 'JVR.JsonView';\n\n// Named exports for better import flexibility\nexport { JsonView };\n// Named exports for type components\nexport { Bigint, Date as JsonDate, False, Float, Int, Map as JsonMap, Nan, Null, Set as JsonSet, StringText as JsonString, True, Undefined, Url };\n\n// Named exports for symbol components\nexport { BraceLeft, BraceRight, BracketsLeft, BracketsRight, Arrow, Colon, Quote, ValueQuote };\n\n// Named exports for section components\nexport { Copied, CountInfo, CountInfoExtra, Ellipsis, KeyName, Row };\nexport default JsonView;","function memo(getDeps, fn, opts) {\n let deps = opts.initialDeps ?? [];\n let result;\n let isInitial = true;\n function memoizedFunction() {\n var _a, _b, _c;\n let depTime;\n if (opts.key && ((_a = opts.debug) == null ? void 0 : _a.call(opts))) depTime = Date.now();\n const newDeps = getDeps();\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && ((_b = opts.debug) == null ? void 0 : _b.call(opts))) resultTime = Date.now();\n result = fn(...newDeps);\n if (opts.key && ((_c = opts.debug) == null ? void 0 : _c.call(opts))) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = \" \" + str;\n }\n return str;\n };\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120)\n )}deg 100% 31%);`,\n opts == null ? void 0 : opts.key\n );\n }\n if ((opts == null ? void 0 : opts.onChange) && !(isInitial && opts.skipInitialOnChange)) {\n opts.onChange(result);\n }\n isInitial = false;\n return result;\n }\n memoizedFunction.updateDeps = (newDeps) => {\n deps = newDeps;\n };\n return memoizedFunction;\n}\nfunction notUndefined(value, msg) {\n if (value === void 0) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : \"\"}`);\n } else {\n return value;\n }\n}\nconst approxEqual = (a, b) => Math.abs(a - b) < 1.01;\nconst debounce = (targetWindow, fn, ms) => {\n let timeoutId;\n return function(...args) {\n targetWindow.clearTimeout(timeoutId);\n timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);\n };\n};\nexport {\n approxEqual,\n debounce,\n memo,\n notUndefined\n};\n//# sourceMappingURL=utils.js.map\n","import { debounce, memo, notUndefined, approxEqual } from \"./utils.js\";\nconst getRect = (element) => {\n const { offsetWidth, offsetHeight } = element;\n return { width: offsetWidth, height: offsetHeight };\n};\nconst defaultKeyExtractor = (index) => index;\nconst defaultRangeExtractor = (range) => {\n const start = Math.max(range.startIndex - range.overscan, 0);\n const end = Math.min(range.endIndex + range.overscan, range.count - 1);\n const arr = [];\n for (let i = start; i <= end; i++) {\n arr.push(i);\n }\n return arr;\n};\nconst observeElementRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n const handler = (rect) => {\n const { width, height } = rect;\n cb({ width: Math.round(width), height: Math.round(height) });\n };\n handler(getRect(element));\n if (!targetWindow.ResizeObserver) {\n return () => {\n };\n }\n const observer = new targetWindow.ResizeObserver((entries) => {\n const run = () => {\n const entry = entries[0];\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize });\n return;\n }\n }\n handler(getRect(element));\n };\n instance.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n observer.observe(element, { box: \"border-box\" });\n return () => {\n observer.unobserve(element);\n };\n};\nconst addEventListenerOptions = {\n passive: true\n};\nconst observeWindowRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight });\n };\n handler();\n element.addEventListener(\"resize\", handler, addEventListenerOptions);\n return () => {\n element.removeEventListener(\"resize\", handler);\n };\n};\nconst supportsScrollend = typeof window == \"undefined\" ? true : \"onscrollend\" in window;\nconst observeElementOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n const { horizontal, isRtl } = instance.options;\n offset = horizontal ? element[\"scrollLeft\"] * (isRtl && -1 || 1) : element[\"scrollTop\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst observeWindowOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n offset = element[instance.options.horizontal ? \"scrollX\" : \"scrollY\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst measureElement = (element, entry, instance) => {\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? \"inlineSize\" : \"blockSize\"]\n );\n return size;\n }\n }\n return element[instance.options.horizontal ? \"offsetWidth\" : \"offsetHeight\"];\n};\nconst windowScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nconst elementScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nclass Virtualizer {\n constructor(opts) {\n this.unsubs = [];\n this.scrollElement = null;\n this.targetWindow = null;\n this.isScrolling = false;\n this.currentScrollToIndex = null;\n this.measurementsCache = [];\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.pendingMeasuredCacheIndexes = [];\n this.prevLanes = void 0;\n this.lanesChangedFlag = false;\n this.lanesSettling = false;\n this.scrollRect = null;\n this.scrollOffset = null;\n this.scrollDirection = null;\n this.scrollAdjustments = 0;\n this.elementsCache = /* @__PURE__ */ new Map();\n this.observer = /* @__PURE__ */ (() => {\n let _ro = null;\n const get = () => {\n if (_ro) {\n return _ro;\n }\n if (!this.targetWindow || !this.targetWindow.ResizeObserver) {\n return null;\n }\n return _ro = new this.targetWindow.ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const run = () => {\n this._measureElement(entry.target, entry);\n };\n this.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n });\n };\n return {\n disconnect: () => {\n var _a;\n (_a = get()) == null ? void 0 : _a.disconnect();\n _ro = null;\n },\n observe: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.observe(target, { box: \"border-box\" });\n },\n unobserve: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.unobserve(target);\n }\n };\n })();\n this.range = null;\n this.setOptions = (opts2) => {\n Object.entries(opts2).forEach(([key, value]) => {\n if (typeof value === \"undefined\") delete opts2[key];\n });\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {\n },\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n gap: 0,\n indexAttribute: \"data-index\",\n initialMeasurementsCache: [],\n lanes: 1,\n isScrollingResetDelay: 150,\n enabled: true,\n isRtl: false,\n useScrollendEvent: false,\n useAnimationFrameWithResizeObserver: false,\n ...opts2\n };\n };\n this.notify = (sync) => {\n var _a, _b;\n (_b = (_a = this.options).onChange) == null ? void 0 : _b.call(_a, this, sync);\n };\n this.maybeNotify = memo(\n () => {\n this.calculateRange();\n return [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ];\n },\n (isScrolling) => {\n this.notify(isScrolling);\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"maybeNotify\",\n debug: () => this.options.debug,\n initialDeps: [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ]\n }\n );\n this.cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d());\n this.unsubs = [];\n this.observer.disconnect();\n this.scrollElement = null;\n this.targetWindow = null;\n };\n this._didMount = () => {\n return () => {\n this.cleanup();\n };\n };\n this._willUpdate = () => {\n var _a;\n const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;\n if (this.scrollElement !== scrollElement) {\n this.cleanup();\n if (!scrollElement) {\n this.maybeNotify();\n return;\n }\n this.scrollElement = scrollElement;\n if (this.scrollElement && \"ownerDocument\" in this.scrollElement) {\n this.targetWindow = this.scrollElement.ownerDocument.defaultView;\n } else {\n this.targetWindow = ((_a = this.scrollElement) == null ? void 0 : _a.window) ?? null;\n }\n this.elementsCache.forEach((cached) => {\n this.observer.observe(cached);\n });\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect;\n this.maybeNotify();\n })\n );\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset, isScrolling) => {\n this.scrollAdjustments = 0;\n this.scrollDirection = isScrolling ? this.getScrollOffset() < offset ? \"forward\" : \"backward\" : null;\n this.scrollOffset = offset;\n this.isScrolling = isScrolling;\n this.maybeNotify();\n })\n );\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: void 0,\n behavior: void 0\n });\n }\n };\n this.getSize = () => {\n if (!this.options.enabled) {\n this.scrollRect = null;\n return 0;\n }\n this.scrollRect = this.scrollRect ?? this.options.initialRect;\n return this.scrollRect[this.options.horizontal ? \"width\" : \"height\"];\n };\n this.getScrollOffset = () => {\n if (!this.options.enabled) {\n this.scrollOffset = null;\n return 0;\n }\n this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === \"function\" ? this.options.initialOffset() : this.options.initialOffset);\n return this.scrollOffset;\n };\n this.getFurthestMeasurement = (measurements, index) => {\n const furthestMeasurementsFound = /* @__PURE__ */ new Map();\n const furthestMeasurements = /* @__PURE__ */ new Map();\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m];\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue;\n }\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane\n );\n if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {\n furthestMeasurements.set(measurement.lane, measurement);\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true);\n }\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break;\n }\n }\n return furthestMeasurements.size === this.options.lanes ? Array.from(furthestMeasurements.values()).sort((a, b) => {\n if (a.end === b.end) {\n return a.index - b.index;\n }\n return a.end - b.end;\n })[0] : void 0;\n };\n this.getMeasurementOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.options.enabled,\n this.options.lanes\n ],\n (count, paddingStart, scrollMargin, getItemKey, enabled, lanes) => {\n const lanesChanged = this.prevLanes !== void 0 && this.prevLanes !== lanes;\n if (lanesChanged) {\n this.lanesChangedFlag = true;\n }\n this.prevLanes = lanes;\n this.pendingMeasuredCacheIndexes = [];\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes\n };\n },\n {\n key: false\n }\n );\n this.getMeasurements = memo(\n () => [this.getMeasurementOptions(), this.itemSizeCache],\n ({ count, paddingStart, scrollMargin, getItemKey, enabled, lanes }, itemSizeCache) => {\n if (!enabled) {\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n return [];\n }\n if (this.laneAssignments.size > count) {\n for (const index of this.laneAssignments.keys()) {\n if (index >= count) {\n this.laneAssignments.delete(index);\n }\n }\n }\n if (this.lanesChangedFlag) {\n this.lanesChangedFlag = false;\n this.lanesSettling = true;\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n this.pendingMeasuredCacheIndexes = [];\n }\n if (this.measurementsCache.length === 0 && !this.lanesSettling) {\n this.measurementsCache = this.options.initialMeasurementsCache;\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size);\n });\n }\n const min = this.lanesSettling ? 0 : this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;\n this.pendingMeasuredCacheIndexes = [];\n if (this.lanesSettling && this.measurementsCache.length === count) {\n this.lanesSettling = false;\n }\n const measurements = this.measurementsCache.slice(0, min);\n const laneLastIndex = new Array(lanes).fill(\n void 0\n );\n for (let m = 0; m < min; m++) {\n const item = measurements[m];\n if (item) {\n laneLastIndex[item.lane] = m;\n }\n }\n for (let i = min; i < count; i++) {\n const key = getItemKey(i);\n const cachedLane = this.laneAssignments.get(i);\n let lane;\n let start;\n if (cachedLane !== void 0 && this.options.lanes > 1) {\n lane = cachedLane;\n const prevIndex = laneLastIndex[lane];\n const prevInLane = prevIndex !== void 0 ? measurements[prevIndex] : void 0;\n start = prevInLane ? prevInLane.end + this.options.gap : paddingStart + scrollMargin;\n } else {\n const furthestMeasurement = this.options.lanes === 1 ? measurements[i - 1] : this.getFurthestMeasurement(measurements, i);\n start = furthestMeasurement ? furthestMeasurement.end + this.options.gap : paddingStart + scrollMargin;\n lane = furthestMeasurement ? furthestMeasurement.lane : i % this.options.lanes;\n if (this.options.lanes > 1) {\n this.laneAssignments.set(i, lane);\n }\n }\n const measuredSize = itemSizeCache.get(key);\n const size = typeof measuredSize === \"number\" ? measuredSize : this.options.estimateSize(i);\n const end = start + size;\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane\n };\n laneLastIndex[lane] = i;\n }\n this.measurementsCache = measurements;\n return measurements;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getMeasurements\",\n debug: () => this.options.debug\n }\n );\n this.calculateRange = memo(\n () => [\n this.getMeasurements(),\n this.getSize(),\n this.getScrollOffset(),\n this.options.lanes\n ],\n (measurements, outerSize, scrollOffset, lanes) => {\n return this.range = measurements.length > 0 && outerSize > 0 ? calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n }) : null;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"calculateRange\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualIndexes = memo(\n () => {\n let startIndex = null;\n let endIndex = null;\n const range = this.calculateRange();\n if (range) {\n startIndex = range.startIndex;\n endIndex = range.endIndex;\n }\n this.maybeNotify.updateDeps([this.isScrolling, startIndex, endIndex]);\n return [\n this.options.rangeExtractor,\n this.options.overscan,\n this.options.count,\n startIndex,\n endIndex\n ];\n },\n (rangeExtractor, overscan, count, startIndex, endIndex) => {\n return startIndex === null || endIndex === null ? [] : rangeExtractor({\n startIndex,\n endIndex,\n overscan,\n count\n });\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualIndexes\",\n debug: () => this.options.debug\n }\n );\n this.indexFromElement = (node) => {\n const attributeName = this.options.indexAttribute;\n const indexStr = node.getAttribute(attributeName);\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`\n );\n return -1;\n }\n return parseInt(indexStr, 10);\n };\n this._measureElement = (node, entry) => {\n const index = this.indexFromElement(node);\n const item = this.measurementsCache[index];\n if (!item) {\n return;\n }\n const key = item.key;\n const prevNode = this.elementsCache.get(key);\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode);\n }\n this.observer.observe(node);\n this.elementsCache.set(key, node);\n }\n if (node.isConnected) {\n this.resizeItem(index, this.options.measureElement(node, entry, this));\n }\n };\n this.resizeItem = (index, size) => {\n const item = this.measurementsCache[index];\n if (!item) {\n return;\n }\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size;\n const delta = size - itemSize;\n if (delta !== 0) {\n if (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(item, delta, this) : item.start < this.getScrollOffset() + this.scrollAdjustments) {\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"correction\", delta);\n }\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: this.scrollAdjustments += delta,\n behavior: void 0\n });\n }\n this.pendingMeasuredCacheIndexes.push(item.index);\n this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size));\n this.notify(false);\n }\n };\n this.measureElement = (node) => {\n if (!node) {\n this.elementsCache.forEach((cached, key) => {\n if (!cached.isConnected) {\n this.observer.unobserve(cached);\n this.elementsCache.delete(key);\n }\n });\n return;\n }\n this._measureElement(node, void 0);\n };\n this.getVirtualItems = memo(\n () => [this.getVirtualIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems = [];\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k];\n const measurement = measurements[i];\n virtualItems.push(measurement);\n }\n return virtualItems;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualItems\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualItemForOffset = (offset) => {\n const measurements = this.getMeasurements();\n if (measurements.length === 0) {\n return void 0;\n }\n return notUndefined(\n measurements[findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index) => notUndefined(measurements[index]).start,\n offset\n )]\n );\n };\n this.getMaxScrollOffset = () => {\n if (!this.scrollElement) return 0;\n if (\"scrollHeight\" in this.scrollElement) {\n return this.options.horizontal ? this.scrollElement.scrollWidth - this.scrollElement.clientWidth : this.scrollElement.scrollHeight - this.scrollElement.clientHeight;\n } else {\n const doc = this.scrollElement.document.documentElement;\n return this.options.horizontal ? doc.scrollWidth - this.scrollElement.innerWidth : doc.scrollHeight - this.scrollElement.innerHeight;\n }\n };\n this.getOffsetForAlignment = (toOffset, align, itemSize = 0) => {\n if (!this.scrollElement) return 0;\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n align = toOffset >= scrollOffset + size ? \"end\" : \"start\";\n }\n if (align === \"center\") {\n toOffset += (itemSize - size) / 2;\n } else if (align === \"end\") {\n toOffset -= size;\n }\n const maxOffset = this.getMaxScrollOffset();\n return Math.max(Math.min(maxOffset, toOffset), 0);\n };\n this.getOffsetForIndex = (index, align = \"auto\") => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const item = this.measurementsCache[index];\n if (!item) {\n return void 0;\n }\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {\n align = \"end\";\n } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {\n align = \"start\";\n } else {\n return [scrollOffset, align];\n }\n }\n if (align === \"end\" && index === this.options.count - 1) {\n return [this.getMaxScrollOffset(), align];\n }\n const toOffset = align === \"end\" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;\n return [\n this.getOffsetForAlignment(toOffset, align, item.size),\n align\n ];\n };\n this.isDynamicMode = () => this.elementsCache.size > 0;\n this.scrollToOffset = (toOffset, { align = \"start\", behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: void 0,\n behavior\n });\n };\n this.scrollToIndex = (index, { align: initialAlign = \"auto\", behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n index = Math.max(0, Math.min(index, this.options.count - 1));\n this.currentScrollToIndex = index;\n let attempts = 0;\n const maxAttempts = 10;\n const tryScroll = (currentAlign) => {\n if (!this.targetWindow) return;\n const offsetInfo = this.getOffsetForIndex(index, currentAlign);\n if (!offsetInfo) {\n console.warn(\"Failed to get offset for index:\", index);\n return;\n }\n const [offset, align] = offsetInfo;\n this._scrollToOffset(offset, { adjustments: void 0, behavior });\n this.targetWindow.requestAnimationFrame(() => {\n if (!this.targetWindow) return;\n const verify = () => {\n if (this.currentScrollToIndex !== index) return;\n const currentOffset = this.getScrollOffset();\n const afterInfo = this.getOffsetForIndex(index, align);\n if (!afterInfo) {\n console.warn(\"Failed to get offset for index:\", index);\n return;\n }\n if (!approxEqual(afterInfo[0], currentOffset)) {\n scheduleRetry(align);\n }\n };\n if (this.isDynamicMode()) {\n this.targetWindow.requestAnimationFrame(verify);\n } else {\n verify();\n }\n });\n };\n const scheduleRetry = (align) => {\n if (!this.targetWindow) return;\n if (this.currentScrollToIndex !== index) return;\n attempts++;\n if (attempts < maxAttempts) {\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"Schedule retry\", attempts, maxAttempts);\n }\n this.targetWindow.requestAnimationFrame(() => tryScroll(align));\n } else {\n console.warn(\n `Failed to scroll to index ${index} after ${maxAttempts} attempts.`\n );\n }\n };\n tryScroll(initialAlign);\n };\n this.scrollBy = (delta, { behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n this._scrollToOffset(this.getScrollOffset() + delta, {\n adjustments: void 0,\n behavior\n });\n };\n this.getTotalSize = () => {\n var _a;\n const measurements = this.getMeasurements();\n let end;\n if (measurements.length === 0) {\n end = this.options.paddingStart;\n } else if (this.options.lanes === 1) {\n end = ((_a = measurements[measurements.length - 1]) == null ? void 0 : _a.end) ?? 0;\n } else {\n const endByLane = Array(this.options.lanes).fill(null);\n let endIndex = measurements.length - 1;\n while (endIndex >= 0 && endByLane.some((val) => val === null)) {\n const item = measurements[endIndex];\n if (endByLane[item.lane] === null) {\n endByLane[item.lane] = item.end;\n }\n endIndex--;\n }\n end = Math.max(...endByLane.filter((val) => val !== null));\n }\n return Math.max(\n end - this.options.scrollMargin + this.options.paddingEnd,\n 0\n );\n };\n this._scrollToOffset = (offset, {\n adjustments,\n behavior\n }) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this);\n };\n this.measure = () => {\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.notify(false);\n };\n this.setOptions(opts);\n }\n}\nconst findNearestBinarySearch = (low, high, getCurrentValue, value) => {\n while (low <= high) {\n const middle = (low + high) / 2 | 0;\n const currentValue = getCurrentValue(middle);\n if (currentValue < value) {\n low = middle + 1;\n } else if (currentValue > value) {\n high = middle - 1;\n } else {\n return middle;\n }\n }\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n}) {\n const lastIndex = measurements.length - 1;\n const getOffset = (index) => measurements[index].start;\n if (measurements.length <= lanes) {\n return {\n startIndex: 0,\n endIndex: lastIndex\n };\n }\n let startIndex = findNearestBinarySearch(\n 0,\n lastIndex,\n getOffset,\n scrollOffset\n );\n let endIndex = startIndex;\n if (lanes === 1) {\n while (endIndex < lastIndex && measurements[endIndex].end < scrollOffset + outerSize) {\n endIndex++;\n }\n } else if (lanes > 1) {\n const endPerLane = Array(lanes).fill(0);\n while (endIndex < lastIndex && endPerLane.some((pos) => pos < scrollOffset + outerSize)) {\n const item = measurements[endIndex];\n endPerLane[item.lane] = item.end;\n endIndex++;\n }\n const startPerLane = Array(lanes).fill(scrollOffset + outerSize);\n while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {\n const item = measurements[startIndex];\n startPerLane[item.lane] = item.start;\n startIndex--;\n }\n startIndex = Math.max(0, startIndex - startIndex % lanes);\n endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - endIndex % lanes));\n }\n return { startIndex, endIndex };\n}\nexport {\n Virtualizer,\n approxEqual,\n debounce,\n defaultKeyExtractor,\n defaultRangeExtractor,\n elementScroll,\n measureElement,\n memo,\n notUndefined,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll\n};\n//# sourceMappingURL=index.js.map\n","import * as React from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { Virtualizer, elementScroll, observeElementOffset, observeElementRect, windowScroll, observeWindowOffset, observeWindowRect } from \"@tanstack/virtual-core\";\nexport * from \"@tanstack/virtual-core\";\nconst useIsomorphicLayoutEffect = typeof document !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\nfunction useVirtualizerBase({\n useFlushSync = true,\n ...options\n}) {\n const rerender = React.useReducer(() => ({}), {})[1];\n const resolvedOptions = {\n ...options,\n onChange: (instance2, sync) => {\n var _a;\n if (useFlushSync && sync) {\n flushSync(rerender);\n } else {\n rerender();\n }\n (_a = options.onChange) == null ? void 0 : _a.call(options, instance2, sync);\n }\n };\n const [instance] = React.useState(\n () => new Virtualizer(resolvedOptions)\n );\n instance.setOptions(resolvedOptions);\n useIsomorphicLayoutEffect(() => {\n return instance._didMount();\n }, []);\n useIsomorphicLayoutEffect(() => {\n return instance._willUpdate();\n });\n return instance;\n}\nfunction useVirtualizer(options) {\n return useVirtualizerBase({\n observeElementRect,\n observeElementOffset,\n scrollToFn: elementScroll,\n ...options\n });\n}\nfunction useWindowVirtualizer(options) {\n return useVirtualizerBase({\n getScrollElement: () => typeof document !== \"undefined\" ? window : null,\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll,\n initialOffset: () => typeof document !== \"undefined\" ? window.scrollY : 0,\n ...options\n });\n}\nexport {\n useVirtualizer,\n useWindowVirtualizer\n};\n//# sourceMappingURL=index.js.map\n","import { C as DropdownMenuTrigger, b as DropdownMenuContent, c as SidebarFooter, d as Pagination, f as mergeClassNameProps, g as getDimensions, h as Icon, l as SidebarHeader, m as Modal, p as PackageAnimation, r as usePagination, s as Sidebar, t as cn, u as SidebarPanel, w as PowerhouseButton, x as DropdownMenuItem, y as DropdownMenu } from \"../src-BgCjYazJ.js\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/components/popover/popover.js\";\nimport { SelectFieldRaw } from \"../ui/components/select-field/select-field.js\";\nimport { Input } from \"../ui/components/input/input.js\";\nimport { JsonViewer } from \"../ui/components/json-viewer/json-viewer.js\";\nimport { SearchAutocomplete } from \"../ui/components/search-autocomplete/search-autocomplete.js\";\nimport React, { Fragment, createElement, forwardRef, memo, useCallback, useEffect, useLayoutEffect, useMemo, useReducer, useRef, useState } from \"react\";\nimport { twJoin, twMerge } from \"tailwind-merge\";\nimport { Fragment as Fragment$1, jsx, jsxs } from \"react/jsx-runtime\";\nimport { Content, Portal, Provider, Root, Trigger } from \"@radix-ui/react-tooltip\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { Anchor, Content as Content$1, Portal as Portal$1, Root as Root$1, Trigger as Trigger$1 } from \"@radix-ui/react-popover\";\nimport { format, formatDistanceToNow, parseISO } from \"date-fns\";\nimport { useCopyToClipboard, useDebounceValue, useEventListener, useOnClickOutside } from \"usehooks-ts\";\nimport { SyncOperationStatus, addFolder, getSyncStatusSync, setSelectedDrive, setSelectedNode, showDeleteNodeModal, showPHModal, showRevisionHistory, useDocumentById, useDownloadDocument, useDragNode, useDropFile, useDropNode, useGetSwitchboardLink, useIsDragAndDropEnabled, useNodeActions, useNodeById, useNodeParentFolderById, useOnDropFile, useSelectedDocumentSafe, useSelectedDriveId, useSelectedDriveSafe, useSelectedNodePath, useUserPermissions } from \"@powerhousedao/reactor-browser\";\nimport Select, { components } from \"react-select\";\nimport { Content as Content$2, List, Root as Root$2, Trigger as Trigger$2 } from \"@radix-ui/react-tabs\";\nimport { addProp, defaultTo, entries, filter, funnel, hasAtLeast, isArray, isDefined, isIncludedIn, isStrictEqual, isString, isTruthy, keys, map, pipe, prop, values } from \"remeda\";\nimport { garbageCollect, redo, sortOperations, undo } from \"@powerhousedao/shared/document-model\";\nimport { JsonView } from \"@uiw/react-json-view\";\nimport { isValidName } from \"@powerhousedao/shared/document-drive\";\nimport { capitalCase } from \"change-case\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\n//#region src/connect/components/account-popover/account-popover.tsx\nconst AccountPopover = ({ children, content }) => {\n\treturn /* @__PURE__ */ jsxs(Popover, { children: [/* @__PURE__ */ jsx(PopoverTrigger, {\n\t\tasChild: true,\n\t\tchildren: /* @__PURE__ */ jsx(\"button\", {\n\t\t\ttype: \"button\",\n\t\t\t\"aria-label\": \"Open Account\",\n\t\t\tclassName: \"cursor-pointer\",\n\t\t\tchildren\n\t\t})\n\t}), /* @__PURE__ */ jsx(PopoverContent, {\n\t\tclassName: \"w-52 p-0\",\n\t\talign: \"start\",\n\t\tchildren: content\n\t})] });\n};\n//#endregion\n//#region assets/connect-loader.mp4\nvar connect_loader_default = \"data:video/mp4;base64,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\";\n//#endregion\n//#region src/connect/components/animated-loader/animated-loader.tsx\nfunction AnimatedLoader(props) {\n\tconst { style, size = 100, ...delegatedProps } = props;\n\tconst dimensions = getDimensions(size);\n\tconst _style = {\n\t\tobjectFit: \"contain\",\n\t\tpointerEvents: \"none\",\n\t\t...dimensions,\n\t\t...style\n\t};\n\tconst width = dimensions.width?.replace(\"px\", \"\");\n\tconst height = dimensions.height?.replace(\"px\", \"\");\n\treturn /* @__PURE__ */ jsx(\"video\", {\n\t\tautoPlay: true,\n\t\theight,\n\t\tloop: true,\n\t\tmuted: true,\n\t\tplaysInline: true,\n\t\twidth,\n\t\t...delegatedProps,\n\t\tstyle: _style,\n\t\tchildren: /* @__PURE__ */ jsx(\"source\", {\n\t\t\tsrc: connect_loader_default,\n\t\t\ttype: \"video/mp4\"\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/node-input/node-input.tsx\nfunction NodeInput(props) {\n\tconst { onSubmit, onCancel, defaultValue, className, minLength = 1, ...inputProps } = props;\n\tconst [value, setValue] = useState(defaultValue ?? \"\");\n\tconst ref = useRef(null);\n\tfunction handleSubmit() {\n\t\tif (value.length >= minLength) onSubmit(value);\n\t}\n\tuseOnClickOutside(ref, handleSubmit);\n\tuseEventListener(\"keyup\", (e) => {\n\t\tif (e.key === \"Enter\") handleSubmit();\n\t\tif (e.key === \"Escape\") onCancel();\n\t});\n\tuseLayoutEffect(() => {\n\t\tsetTimeout(() => {\n\t\t\tref.current?.focus();\n\t\t\tref.current?.select();\n\t\t\tref.current?.scroll({ left: 9999 });\n\t\t}, 100);\n\t}, []);\n\treturn /* @__PURE__ */ jsx(\"input\", {\n\t\t...inputProps,\n\t\tautoFocus: true,\n\t\tclassName: twMerge(\"bg-inherit text-inherit outline-none\", className),\n\t\tminLength,\n\t\tonChange: (e) => setValue(e.target.value),\n\t\tref,\n\t\trequired: true,\n\t\ttype: \"text\",\n\t\tvalue\n\t});\n}\n//#endregion\n//#region src/connect/components/breadcrumbs/breadcrumbs.tsx\nfunction Breadcrumbs() {\n\tconst { isAllowedToCreateDocuments } = useUserPermissions();\n\tconst [selectedDrive] = useSelectedDriveSafe();\n\tconst selectedDriveId = useSelectedDriveId();\n\tconst selectedNodePath = useSelectedNodePath();\n\tconst [isCreating, setIsCreating] = useState(false);\n\tfunction onAddNew() {\n\t\tsetIsCreating(true);\n\t}\n\tfunction onSubmit(name) {\n\t\tif (!isAllowedToCreateDocuments || !selectedDriveId) return;\n\t\taddFolder(selectedDriveId, name, selectedNodePath.at(-1)?.id).then((node) => {\n\t\t\tsetSelectedNode(node);\n\t\t}).catch((error) => {\n\t\t\tconsole.error(error);\n\t\t}).finally(() => {\n\t\t\tsetIsCreating(false);\n\t\t});\n\t}\n\tfunction onCancel() {\n\t\tsetIsCreating(false);\n\t}\n\tconst hasSelectedDrive = !!selectedDrive;\n\tconst hasNodePath = !!selectedNodePath.length;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex h-9 flex-row items-center gap-2 p-6 text-gray-500\",\n\t\tchildren: [\n\t\t\thasSelectedDrive && /* @__PURE__ */ jsxs(Fragment$1, { children: [\n\t\t\t\t/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\"aria-label\": \"Back to home\",\n\t\t\t\t\ttitle: \"Back to home\",\n\t\t\t\t\tclassName: \"flex items-center justify-center rounded-md p-1 transition-colors hover:bg-gray-100 hover:text-gray-800\",\n\t\t\t\t\tonClick: () => setSelectedDrive(void 0),\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\tname: \"ArrowLeft\",\n\t\t\t\t\t\tsize: 14\n\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(Breadcrumb, {\n\t\t\t\t\tid: selectedDriveId,\n\t\t\t\t\tparentId: void 0,\n\t\t\t\t\tname: selectedDrive.state.global.name || selectedDrive.header.name,\n\t\t\t\t\tonClick: () => setSelectedDrive(selectedDrive)\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(\"span\", { children: \"/\" })\n\t\t\t] }),\n\t\t\thasNodePath && selectedNodePath.map((node) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Breadcrumb, {\n\t\t\t\tid: node.id,\n\t\t\t\tparentId: node.parentFolder,\n\t\t\t\tname: node.name,\n\t\t\t\tonClick: () => setSelectedNode(node)\n\t\t\t}), /* @__PURE__ */ jsx(\"span\", { children: \"/\" })] }, node.id)),\n\t\t\tisAllowedToCreateDocuments && (isCreating ? /* @__PURE__ */ jsx(NodeInput, {\n\t\t\t\tclassName: \"text-gray-800\",\n\t\t\t\tdefaultValue: \"New Folder\",\n\t\t\t\tonCancel,\n\t\t\t\tonSubmit,\n\t\t\t\tplaceholder: \"New Folder\"\n\t\t\t}) : /* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\ttype: \"button\",\n\t\t\t\tclassName: \"ml-1 flex items-center justify-center gap-2 rounded-md bg-gray-50 px-2 py-1.5 transition-colors hover:bg-gray-200 hover:text-gray-800\",\n\t\t\t\tonClick: onAddNew,\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tname: \"Plus\",\n\t\t\t\t\tsize: 14\n\t\t\t\t}), \"Add new\"]\n\t\t\t}))\n\t\t]\n\t});\n}\nfunction Breadcrumb(props) {\n\tconst { name, id, parentId, onClick } = props;\n\tconst { isDragging, ...dragProps } = useDragNode({\n\t\tsrcId: id,\n\t\tparentId: parentId ?? void 0\n\t});\n\tconst { isDropTarget, ...dropProps } = useDropNode(id);\n\tconst containerStyles = twMerge(\"cursor-pointer transition-colors last-of-type:text-gray-800 hover:text-gray-800\", isDragging ? \"opacity-60\" : isDropTarget ? \"bg-blue-100\" : \"\");\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\t...dragProps,\n\t\t...dropProps,\n\t\tclassName: containerStyles,\n\t\tonClick,\n\t\trole: \"button\",\n\t\tchildren: name\n\t});\n}\n//#endregion\n//#region src/connect/components/combobox/combobox.tsx\nfunction DropdownIndicator(props) {\n\treturn /* @__PURE__ */ jsx(components.DropdownIndicator, {\n\t\t...props,\n\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"ChevronDown\",\n\t\t\tsize: 16\n\t\t})\n\t});\n}\nfunction ClearIndicator(props) {\n\treturn /* @__PURE__ */ jsx(components.ClearIndicator, {\n\t\t...props,\n\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"Xmark\",\n\t\t\tsize: 16\n\t\t})\n\t});\n}\nfunction MenuList(props) {\n\tconst { label, onClick, ...rest } = props;\n\tconst hasAddItemButton = !!label && !!onClick;\n\treturn /* @__PURE__ */ jsxs(components.MenuList, {\n\t\t...rest,\n\t\tchildren: [props.children, hasAddItemButton ? /* @__PURE__ */ jsx(\"button\", {\n\t\t\tclassName: \"w-full px-2 py-3 hover:bg-slate-50\",\n\t\t\tonClick,\n\t\t\tchildren: label\n\t\t}) : null]\n\t});\n}\nfunction Combobox(props) {\n\tconst invalid = props[\"aria-invalid\"] === \"true\";\n\tconst { addItemButtonProps, ...rest } = props;\n\treturn /* @__PURE__ */ jsx(Select, {\n\t\t...rest,\n\t\tcomponents: {\n\t\t\tDropdownIndicator,\n\t\t\tClearIndicator,\n\t\t\tMenuList: (menuListProps) => MenuList({\n\t\t\t\t...menuListProps,\n\t\t\t\t...addItemButtonProps\n\t\t\t})\n\t\t},\n\t\tstyles: {\n\t\t\tdropdownIndicator: () => {\n\t\t\t\treturn {\n\t\t\t\t\tlabel: \"indicatorContainer\",\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\ttransition: \"color 150ms\",\n\t\t\t\t\tcolor: \"var(color-gray-900)\",\n\t\t\t\t\tpadding: 8,\n\t\t\t\t\tboxSizing: \"border-box\"\n\t\t\t\t};\n\t\t\t},\n\t\t\tclearIndicator: (baseStyles) => {\n\t\t\t\treturn {\n\t\t\t\t\t...baseStyles,\n\t\t\t\t\tcolor: \"var(color-gray-900)\"\n\t\t\t\t};\n\t\t\t},\n\t\t\tcontainer: (baseStyles) => {\n\t\t\t\treturn {\n\t\t\t\t\t...baseStyles,\n\t\t\t\t\tborderColor: \"var(color-gray-200)\",\n\t\t\t\t\tfontSize: 12\n\t\t\t\t};\n\t\t\t},\n\t\t\tplaceholder: (baseStyles) => {\n\t\t\t\treturn {\n\t\t\t\t\t...baseStyles,\n\t\t\t\t\tcolor: invalid ? \"var(color-red-800)\" : \"var(color-gray-500)\"\n\t\t\t\t};\n\t\t\t},\n\t\t\tcontrol: () => {\n\t\t\t\treturn {\n\t\t\t\t\tlabel: \"control\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tcursor: \"default\",\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\tflexWrap: \"wrap\",\n\t\t\t\t\tjustifyContent: \"space-between\",\n\t\t\t\t\tminHeight: 32,\n\t\t\t\t\toutline: \"0 !important\",\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\ttransition: \"all 100ms\",\n\t\t\t\t\tbackgroundColor: \"var(--color-white)\",\n\t\t\t\t\tborderColor: invalid ? \"var(--color-red-900)\" : \"var(--color-gray-200)\",\n\t\t\t\t\tborderStyle: \"solid\",\n\t\t\t\t\tborderWidth: 1,\n\t\t\t\t\tborderRadius: \"6px\",\n\t\t\t\t\tboxSizing: \"border-box\"\n\t\t\t\t};\n\t\t\t},\n\t\t\toption: (baseStyles, state) => {\n\t\t\t\treturn {\n\t\t\t\t\t...baseStyles,\n\t\t\t\t\tbackgroundColor: state.isSelected ? \"var(--color-slate-50)\" : \"var(--color-white)\",\n\t\t\t\t\tcolor: \"var(--color-gray-800)\",\n\t\t\t\t\t\":hover\": { backgroundColor: \"var(--color-slate-50)\" }\n\t\t\t\t};\n\t\t\t},\n\t\t\tmenuList: (baseStyles) => ({\n\t\t\t\t...baseStyles,\n\t\t\t\tpadding: 0,\n\t\t\t\tborderRadius: \"6px\"\n\t\t\t})\n\t\t},\n\t\ttheme: (theme) => ({\n\t\t\t...theme,\n\t\t\tcolors: {\n\t\t\t\t...theme.colors,\n\t\t\t\tprimary: \"var(--color-slate-100)\",\n\t\t\t\tprimary25: \"var(--color-slate-50)\",\n\t\t\t\tprimary50: \"var(--color-slate-100)\",\n\t\t\t\tprimary75: \"var(--color-slate-100)\",\n\t\t\t\tdanger: \"var(--color-red-900)\",\n\t\t\t\tdangerLight: \"var(--color-red-100)\",\n\t\t\t\tneutral0: \"var(--color-white)\",\n\t\t\t\tneutral5: \"var(--color-gray-50)\",\n\t\t\t\tneutral10: \"var(--color-gray-100)\",\n\t\t\t\tneutral20: \"var(--color-gray-200)\",\n\t\t\t\tneutral30: \"var(--color-gray-300)\",\n\t\t\t\tneutral40: \"var(--color-gray-400)\",\n\t\t\t\tneutral50: \"var(--color-gray-500)\",\n\t\t\t\tneutral60: \"var(--color-gray-600)\",\n\t\t\t\tneutral70: \"var(--color-gray-700)\",\n\t\t\t\tneutral80: \"var(--color-gray-800)\",\n\t\t\t\tneutral90: \"var(--color-gray-900)\"\n\t\t\t}\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/cookie-banner/cookie-banner.tsx\nconst CookieBanner = (props) => {\n\tconst { children, cookies, submitLabel, rejectLabel, onSubmit = () => {}, onReject = () => {}, ...divProps } = props;\n\tconst [cookiesValue, setCookiesValue] = useState(cookies);\n\tconst handleOnChange = (event) => {\n\t\tconst { id, checked } = event.target;\n\t\tsetCookiesValue((prevState) => prevState.map((cookie) => cookie.id === id ? {\n\t\t\t...cookie,\n\t\t\tvalue: checked\n\t\t} : cookie));\n\t};\n\tconst buttonStyles = \"min-w-64 h-8 text-base\";\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\t...mergeClassNameProps(divProps, \"flex flex-col items-center\"),\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"text-center\",\n\t\t\t\tchildren\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"my-8 flex gap-x-16 text-sm font-medium\",\n\t\t\t\tchildren: cookiesValue.map((cookie, i) => /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"cursor-pointer\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"input\", {\n\t\t\t\t\t\tchecked: cookie.value,\n\t\t\t\t\t\tclassName: \"mr-1 size-3 cursor-pointer rounded-sm border-2 border-gray-900 accent-gray-900 focus:outline-none\",\n\t\t\t\t\t\tid: cookie.id,\n\t\t\t\t\t\tonChange: handleOnChange,\n\t\t\t\t\t\ttype: \"checkbox\"\n\t\t\t\t\t}), /* @__PURE__ */ jsx(\"label\", {\n\t\t\t\t\t\tclassName: \"cursor-pointer select-none\",\n\t\t\t\t\t\thtmlFor: cookie.id,\n\t\t\t\t\t\tchildren: cookie.label\n\t\t\t\t\t})]\n\t\t\t\t}, i))\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex gap-x-8\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(PowerhouseButton, {\n\t\t\t\t\tclassName: buttonStyles,\n\t\t\t\t\tcolor: \"light\",\n\t\t\t\t\tonClick: () => onReject(),\n\t\t\t\t\tsize: \"small\",\n\t\t\t\t\tchildren: rejectLabel\n\t\t\t\t}, \"button-reject\"), /* @__PURE__ */ jsx(PowerhouseButton, {\n\t\t\t\t\tclassName: buttonStyles,\n\t\t\t\t\tonClick: () => onSubmit(cookiesValue),\n\t\t\t\t\tsize: \"small\",\n\t\t\t\t\tchildren: submitLabel\n\t\t\t\t}, \"button-submit\")]\n\t\t\t})\n\t\t]\n\t});\n};\n//#endregion\n//#region src/connect/components/modal/confirmation-modal.tsx\nconst buttonStyles$5 = \"min-h-[48px] min-w-[142px] text-base font-semibold py-3 px-6 rounded-xl outline-none active:opacity-75 hover:scale-105 transform transition-all\";\nfunction ConnectConfirmationModal(props) {\n\tconst { body, header, children, onCancel, onOpenChange, onContinue, cancelLabel, continueLabel, overlayProps, contentProps, bodyProps = {}, headerProps = {}, containerProps = {}, cancelButtonProps = {}, continueButtonProps = {}, buttonContainerProps = {}, ...restProps } = props;\n\treturn /* @__PURE__ */ jsx(Modal, {\n\t\tcontentProps: {\n\t\t\t...contentProps,\n\t\t\tclassName: twMerge(\"rounded-3xl\", contentProps?.className)\n\t\t},\n\t\tonOpenChange,\n\t\toverlayProps: {\n\t\t\t...overlayProps,\n\t\t\tclassName: overlayProps?.className\n\t\t},\n\t\t...restProps,\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t...mergeClassNameProps(containerProps, \"w-[400px] bg-white p-6 text-slate-300\"),\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t...mergeClassNameProps(headerProps, \"border-b border-slate-50 pb-2 text-2xl font-bold text-gray-800\"),\n\t\t\t\t\tchildren: header\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t...mergeClassNameProps(bodyProps, \"my-6 rounded-md bg-slate-50 p-4 text-center\"),\n\t\t\t\t\tchildren: [body, children]\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t...mergeClassNameProps(buttonContainerProps, \"mt-8 flex justify-between gap-3\"),\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\tonClick: onCancel,\n\t\t\t\t\t\t...mergeClassNameProps(cancelButtonProps, twMerge(buttonStyles$5, \"flex-1 bg-slate-50 text-slate-800\")),\n\t\t\t\t\t\tchildren: cancelLabel\n\t\t\t\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\tonClick: onContinue,\n\t\t\t\t\t\t...mergeClassNameProps(continueButtonProps, twMerge(buttonStyles$5, \"flex-1 bg-gray-800 text-gray-50\")),\n\t\t\t\t\t\tchildren: continueLabel\n\t\t\t\t\t})]\n\t\t\t\t})\n\t\t\t]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/db-explorer/components/schema-tree-sidebar.tsx\nconst INDENT_PX = 16;\nfunction TreeItem({ label, depth, expanded, selected, hasChildren, icon, onToggle, onClick, children }) {\n\tconst handleChevronClick = (e) => {\n\t\te.stopPropagation();\n\t\tonToggle?.();\n\t};\n\treturn /* @__PURE__ */ jsxs(\"div\", { children: [/* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: twMerge(\"flex cursor-pointer items-center gap-1 py-1 pr-2 text-sm hover:bg-gray-100\", selected && \"bg-blue-50\"),\n\t\tstyle: { paddingLeft: depth * INDENT_PX + 4 },\n\t\tonClick,\n\t\tchildren: [\n\t\t\thasChildren ? /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\tclassName: \"flex size-4 shrink-0 items-center justify-center text-gray-500 hover:text-gray-700\",\n\t\t\t\tonClick: handleChevronClick,\n\t\t\t\ttype: \"button\",\n\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tclassName: twMerge(\"transition-transform\", expanded && \"rotate-90\"),\n\t\t\t\t\tname: \"CaretRight\",\n\t\t\t\t\tsize: 12\n\t\t\t\t})\n\t\t\t}) : /* @__PURE__ */ jsx(\"span\", { className: \"w-4 shrink-0\" }),\n\t\t\ticon && /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\tclassName: \"shrink-0 text-gray-500\",\n\t\t\t\tchildren: icon\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\tclassName: \"min-w-0 flex-1 truncate text-gray-700\",\n\t\t\t\tchildren: label\n\t\t\t}),\n\t\t\tselected && /* @__PURE__ */ jsx(\"span\", { className: \"ml-auto size-2 shrink-0 rounded-full bg-blue-500\" })\n\t\t]\n\t}), expanded && children] });\n}\nfunction ColumnItem({ column, depth }) {\n\tconst typeLabel = column.dataType.length > 10 ? column.dataType.slice(0, 10) + \"…\" : column.dataType;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex items-center gap-1 py-0.5 pr-2 text-xs text-gray-500\",\n\t\tstyle: { paddingLeft: depth * INDENT_PX + 4 },\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(\"span\", { className: \"w-4 shrink-0\" }),\n\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\tclassName: \"truncate\",\n\t\t\t\tchildren: column.name\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"span\", {\n\t\t\t\tclassName: \"ml-auto shrink-0 text-gray-400\",\n\t\t\t\tchildren: [\n\t\t\t\t\t\"(\",\n\t\t\t\t\ttypeLabel,\n\t\t\t\t\t\")\"\n\t\t\t\t]\n\t\t\t})\n\t\t]\n\t});\n}\nfunction SchemaTreeSidebar({ schema, tables, selectedTable, onSelectTable, onRefresh, loading }) {\n\tconst [expandedNodes, setExpandedNodes] = useState({ [schema]: true });\n\tconst toggleNode = (nodeId) => {\n\t\tsetExpandedNodes((prev) => ({\n\t\t\t...prev,\n\t\t\t[nodeId]: !prev[nodeId]\n\t\t}));\n\t};\n\tconst handleTableClick = (tableName) => {\n\t\tonSelectTable(tableName);\n\t\tsetExpandedNodes((prev) => ({\n\t\t\t...prev,\n\t\t\t[tableName]: !prev[tableName]\n\t\t}));\n\t};\n\tconst isSchemaExpanded = expandedNodes[schema] ?? false;\n\tconst handleRefreshClick = (e) => {\n\t\te.stopPropagation();\n\t\tonRefresh?.();\n\t};\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: \"flex flex-col overflow-auto pt-4 text-sm\",\n\t\tchildren: /* @__PURE__ */ jsx(TreeItem, {\n\t\t\tdepth: 0,\n\t\t\texpanded: isSchemaExpanded,\n\t\t\thasChildren: tables.length > 0,\n\t\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\tname: isSchemaExpanded ? \"FolderOpen\" : \"FolderClose\",\n\t\t\t\tsize: 16\n\t\t\t}),\n\t\t\tlabel: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex flex-1 items-center\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\tclassName: \"truncate\",\n\t\t\t\t\tchildren: schema\n\t\t\t\t}), onRefresh && /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\tclassName: \"ml-auto p-0.5 text-gray-400 hover:text-gray-600\",\n\t\t\t\t\tonClick: handleRefreshClick,\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tdisabled: loading,\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\tname: \"Reload\",\n\t\t\t\t\t\tsize: 14,\n\t\t\t\t\t\tclassName: loading ? \"animate-spin\" : void 0\n\t\t\t\t\t})\n\t\t\t\t})]\n\t\t\t}),\n\t\t\tonClick: () => toggleNode(schema),\n\t\t\tonToggle: () => toggleNode(schema),\n\t\t\tchildren: tables.map((table) => {\n\t\t\t\tconst isTableExpanded = expandedNodes[table.name] ?? false;\n\t\t\t\tconst isSelected = selectedTable === table.name;\n\t\t\t\treturn /* @__PURE__ */ jsx(TreeItem, {\n\t\t\t\t\tdepth: 1,\n\t\t\t\t\texpanded: isTableExpanded,\n\t\t\t\t\thasChildren: table.columns.length > 0,\n\t\t\t\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\tname: \"TreeViewSlash\",\n\t\t\t\t\t\tsize: 16\n\t\t\t\t\t}),\n\t\t\t\t\tlabel: table.name,\n\t\t\t\t\tselected: isSelected,\n\t\t\t\t\tonClick: () => handleTableClick(table.name),\n\t\t\t\t\tonToggle: () => toggleNode(table.name),\n\t\t\t\t\tchildren: table.columns.map((col) => /* @__PURE__ */ jsx(ColumnItem, {\n\t\t\t\t\t\tcolumn: col,\n\t\t\t\t\t\tdepth: 2\n\t\t\t\t\t}, col.name))\n\t\t\t\t}, table.name);\n\t\t\t})\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/select/select.tsx\nfunction fixedForwardRef(render) {\n\treturn /* @__PURE__ */ forwardRef(render);\n}\nconst ConnectSelect = /* @__PURE__ */ fixedForwardRef(function Select(props, ref) {\n\tconst { items, value, id, onChange, containerClassName, menuClassName, itemClassName, absolutePositionMenu = false, borderRadius = \"6px\" } = props;\n\tconst [showItems, setShowItems] = useState(false);\n\tconst selectedItem = getItemByValue(value) ?? items[0];\n\tfunction onItemClick(item) {\n\t\tif (item.disabled) return;\n\t\tonChange(item.value);\n\t\tsetShowItems(false);\n\t}\n\tfunction getItemByValue(value) {\n\t\treturn items.find((item) => item.value === value);\n\t}\n\tconst itemsToShow = items.filter((item) => item.value !== value);\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: twMerge(\"border border-gray-200 bg-gray-50 text-gray-800 transition-[border-radius]\", absolutePositionMenu && \"relative\", containerClassName),\n\t\t\"data-open\": showItems,\n\t\tref,\n\t\tstyle: { borderRadius },\n\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: twMerge(\"flex min-w-[360px] cursor-pointer items-center justify-between pr-3 text-gray-800 outline-none\", menuClassName),\n\t\t\tid,\n\t\t\tonClick: () => setShowItems(!showItems),\n\t\t\tchildren: [/* @__PURE__ */ jsx(ItemContainer, {\n\t\t\t\t...selectedItem,\n\t\t\t\tclassName: itemClassName\n\t\t\t}), /* @__PURE__ */ jsx(Icon, {\n\t\t\t\tclassName: twJoin(\"transition\", showItems ? \"\" : \"-rotate-90\"),\n\t\t\t\tname: \"ChevronDown\"\n\t\t\t})]\n\t\t}), /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: twMerge(\"max-h-0 w-full overflow-hidden bg-inherit transition-[max-height] ease-in-out\", showItems && \"max-h-screen\", absolutePositionMenu && \"absolute\"),\n\t\t\tstyle: { borderRadius: `0 0 ${borderRadius} ${borderRadius}` },\n\t\t\tchildren: itemsToShow.map((item) => /* @__PURE__ */ jsx(ItemContainer, {\n\t\t\t\t...item,\n\t\t\t\tclassName: itemClassName,\n\t\t\t\tonItemClick: () => onItemClick(item)\n\t\t\t}, item.value))\n\t\t})]\n\t});\n});\nfunction ItemContainer(props) {\n\tconst { className, disabled, onItemClick, icon, displayValue, value, description } = props;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: twMerge(disabled ? \"cursor-not-allowed text-gray-500\" : \"text-gray-800\", \"flex size-full cursor-pointer items-center gap-2 bg-inherit py-3 pl-3 text-start outline-none\", className),\n\t\tonClick: onItemClick,\n\t\tchildren: [icon, /* @__PURE__ */ jsxs(\"div\", { children: [/* @__PURE__ */ jsx(\"p\", {\n\t\t\tclassName: \"text-inherit capitalize\",\n\t\t\tchildren: displayValue ?? value.toLowerCase()\n\t\t}), /* @__PURE__ */ jsx(\"p\", {\n\t\t\tclassName: \"text-xs text-gray-600\",\n\t\t\tchildren: description\n\t\t})] })]\n\t});\n}\n//#endregion\n//#region src/connect/components/db-explorer/components/filter-bar.tsx\nfunction getAvailableOperators(column) {\n\tconst baseOperators = [\n\t\t\"=\",\n\t\t\"!=\",\n\t\t\">\",\n\t\t\"<\",\n\t\t\">=\",\n\t\t\"<=\",\n\t\t\"IS NULL\",\n\t\t\"IS NOT NULL\"\n\t];\n\tconst dataType = column.dataType.toLowerCase();\n\tif (dataType.includes(\"varchar\") || dataType.includes(\"text\") || dataType.includes(\"char\")) return [\n\t\t...baseOperators,\n\t\t\"LIKE\",\n\t\t\"ILIKE\"\n\t];\n\tif (dataType.includes(\"int\") || dataType.includes(\"decimal\") || dataType.includes(\"numeric\") || dataType.includes(\"real\") || dataType.includes(\"double\") || dataType.includes(\"float\") || dataType.includes(\"bigint\") || dataType.includes(\"smallint\")) return baseOperators;\n\treturn baseOperators;\n}\nfunction getInputType(column, operator) {\n\tif (operator === \"IS NULL\" || operator === \"IS NOT NULL\") return \"text\";\n\tconst dataType = column.dataType.toLowerCase();\n\tif (dataType.includes(\"int\") || dataType.includes(\"decimal\") || dataType.includes(\"numeric\") || dataType.includes(\"real\") || dataType.includes(\"double\") || dataType.includes(\"float\") || dataType.includes(\"bigint\") || dataType.includes(\"smallint\")) return \"number\";\n\tif (dataType.includes(\"timestamp\") || dataType.includes(\"date\") || dataType.includes(\"time\")) return \"datetime-local\";\n\treturn \"text\";\n}\nfunction FilterClauseComponent({ clause, columns, onUpdate, onRemove, showConnector, connector, onConnectorChange }) {\n\tconst column = columns.find((c) => c.name === clause.column);\n\tconst availableOperators = column ? getAvailableOperators(column) : [\"=\", \"!=\"];\n\tconst inputType = column ? getInputType(column, clause.operator) : \"text\";\n\tconst showValueInput = clause.operator !== \"IS NULL\" && clause.operator !== \"IS NOT NULL\";\n\tconst columnItems = useMemo(() => columns.map((col) => ({\n\t\tvalue: col.name,\n\t\tdisplayValue: col.name\n\t})), [columns]);\n\tconst operatorItems = useMemo(() => availableOperators.map((op) => ({\n\t\tvalue: op,\n\t\tdisplayValue: op\n\t})), [availableOperators]);\n\tconst connectorItems = useMemo(() => [{\n\t\tvalue: \"AND\",\n\t\tdisplayValue: \"AND\"\n\t}, {\n\t\tvalue: \"OR\",\n\t\tdisplayValue: \"OR\"\n\t}], []);\n\tconst handleColumnChange = useCallback((columnName) => {\n\t\tconst newColumn = columns.find((c) => c.name === columnName);\n\t\tif (!newColumn) return;\n\t\tconst newAvailableOperators = getAvailableOperators(newColumn);\n\t\tconst newOperator = newAvailableOperators.includes(clause.operator) ? clause.operator : newAvailableOperators[0];\n\t\tonUpdate({\n\t\t\t...clause,\n\t\t\tcolumn: columnName,\n\t\t\toperator: newOperator,\n\t\t\tvalue: \"\"\n\t\t});\n\t}, [\n\t\tclause,\n\t\tcolumns,\n\t\tonUpdate\n\t]);\n\tconst handleOperatorChange = useCallback((operator) => {\n\t\tonUpdate({\n\t\t\t...clause,\n\t\t\toperator,\n\t\t\tvalue: operator === \"IS NULL\" || operator === \"IS NOT NULL\" ? \"\" : clause.value\n\t\t});\n\t}, [clause, onUpdate]);\n\tconst handleValueChange = useCallback((value) => {\n\t\tonUpdate({\n\t\t\t...clause,\n\t\t\tvalue\n\t\t});\n\t}, [clause, onUpdate]);\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex items-center gap-2\",\n\t\tchildren: [\n\t\t\tshowConnector && /* @__PURE__ */ jsx(ConnectSelect, {\n\t\t\t\tabsolutePositionMenu: true,\n\t\t\t\tborderRadius: \"4px\",\n\t\t\t\tcontainerClassName: \"min-w-[80px]\",\n\t\t\t\tid: `connector-${clause.id}`,\n\t\t\t\titems: connectorItems,\n\t\t\t\titemClassName: \"px-2 py-1 text-xs\",\n\t\t\t\tmenuClassName: \"px-2 py-1 text-xs min-w-[80px]\",\n\t\t\t\tvalue: connector,\n\t\t\t\tonChange: onConnectorChange\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(ConnectSelect, {\n\t\t\t\tabsolutePositionMenu: true,\n\t\t\t\tborderRadius: \"4px\",\n\t\t\t\tcontainerClassName: \"min-w-[150px]\",\n\t\t\t\tid: `column-${clause.id}`,\n\t\t\t\titems: columnItems,\n\t\t\t\titemClassName: \"px-2 py-1 text-xs\",\n\t\t\t\tmenuClassName: \"px-2 py-1 text-xs min-w-[150px]\",\n\t\t\t\tvalue: clause.column,\n\t\t\t\tonChange: handleColumnChange\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(ConnectSelect, {\n\t\t\t\tabsolutePositionMenu: true,\n\t\t\t\tborderRadius: \"4px\",\n\t\t\t\tcontainerClassName: \"min-w-[100px]\",\n\t\t\t\tid: `operator-${clause.id}`,\n\t\t\t\titems: operatorItems,\n\t\t\t\titemClassName: \"px-2 py-1 text-xs\",\n\t\t\t\tmenuClassName: \"px-2 py-1 text-xs min-w-[100px]\",\n\t\t\t\tvalue: clause.operator,\n\t\t\t\tonChange: handleOperatorChange\n\t\t\t}),\n\t\t\tshowValueInput && /* @__PURE__ */ jsx(\"input\", {\n\t\t\t\tclassName: \"min-w-[150px] rounded-sm border border-gray-300 bg-white px-2 py-1 text-xs text-gray-900\",\n\t\t\t\ttype: inputType,\n\t\t\t\tvalue: clause.value,\n\t\t\t\tonChange: (e) => handleValueChange(e.target.value)\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\tclassName: \"flex items-center justify-center rounded-sm p-1 text-gray-500 hover:bg-gray-200 hover:text-gray-700\",\n\t\t\t\tonClick: onRemove,\n\t\t\t\ttitle: \"Remove filter\",\n\t\t\t\ttype: \"button\",\n\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tname: \"Xmark\",\n\t\t\t\t\tsize: 14\n\t\t\t\t})\n\t\t\t})\n\t\t]\n\t});\n}\nfunction FilterBar({ columns, filters, onFiltersChange }) {\n\tconst [isExpanded, setIsExpanded] = useState(false);\n\tconst handleAddFilter = useCallback(() => {\n\t\tconst newClause = {\n\t\t\tid: `filter-${Date.now()}-${Math.random()}`,\n\t\t\tcolumn: columns[0]?.name ?? \"\",\n\t\t\toperator: \"=\",\n\t\t\tvalue: \"\"\n\t\t};\n\t\tif (!filters) onFiltersChange({\n\t\t\tclauses: [newClause],\n\t\t\tconnectors: []\n\t\t});\n\t\telse onFiltersChange({\n\t\t\tclauses: [...filters.clauses, newClause],\n\t\t\tconnectors: [...filters.connectors, filters.clauses.length > 0 ? \"AND\" : \"AND\"]\n\t\t});\n\t\tsetIsExpanded(true);\n\t}, [\n\t\tcolumns,\n\t\tfilters,\n\t\tonFiltersChange\n\t]);\n\tconst handleUpdateClause = useCallback((index, clause) => {\n\t\tif (!filters) return;\n\t\tconst newClauses = [...filters.clauses];\n\t\tnewClauses[index] = clause;\n\t\tonFiltersChange({\n\t\t\t...filters,\n\t\t\tclauses: newClauses\n\t\t});\n\t}, [filters, onFiltersChange]);\n\tconst handleRemoveClause = useCallback((index) => {\n\t\tif (!filters) return;\n\t\tconst newClauses = filters.clauses.filter((_, i) => i !== index);\n\t\tconst newConnectors = filters.connectors.filter((_, i) => i !== index - 1);\n\t\tif (newClauses.length === 0) onFiltersChange(void 0);\n\t\telse onFiltersChange({\n\t\t\tclauses: newClauses,\n\t\t\tconnectors: newConnectors\n\t\t});\n\t}, [filters, onFiltersChange]);\n\tconst handleConnectorChange = useCallback((index, connector) => {\n\t\tif (!filters) return;\n\t\tconst newConnectors = [...filters.connectors];\n\t\tnewConnectors[index] = connector;\n\t\tonFiltersChange({\n\t\t\t...filters,\n\t\t\tconnectors: newConnectors\n\t\t});\n\t}, [filters, onFiltersChange]);\n\tconst hasFilters = filters && filters.clauses.length > 0;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex shrink-0 flex-col gap-2 rounded-lg border border-gray-300 bg-white p-2\",\n\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"flex items-center justify-between\",\n\t\t\tchildren: [/* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\tclassName: \"flex items-center gap-1 text-xs text-gray-700 hover:text-gray-900\",\n\t\t\t\tonClick: () => setIsExpanded(!isExpanded),\n\t\t\t\ttype: \"button\",\n\t\t\t\tchildren: [\n\t\t\t\t\t/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\tclassName: twMerge(\"transition-transform\", isExpanded && \"rotate-90\"),\n\t\t\t\t\t\tname: \"ChevronDown\",\n\t\t\t\t\t\tsize: 12\n\t\t\t\t\t}),\n\t\t\t\t\t/* @__PURE__ */ jsx(\"span\", { children: \"Filters\" }),\n\t\t\t\t\thasFilters && /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\tclassName: \"rounded-sm bg-blue-100 px-1.5 py-0.5 text-xs text-blue-700\",\n\t\t\t\t\t\tchildren: filters.clauses.length\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t}), /* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-2 py-1 text-xs text-gray-700 hover:bg-gray-100\",\n\t\t\t\tonClick: handleAddFilter,\n\t\t\t\ttype: \"button\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tname: \"Plus\",\n\t\t\t\t\tsize: 12\n\t\t\t\t}), \"Add Filter\"]\n\t\t\t})]\n\t\t}), isExpanded && hasFilters && /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: \"flex flex-col gap-2\",\n\t\t\tchildren: filters.clauses.map((clause, index) => /* @__PURE__ */ jsx(FilterClauseComponent, {\n\t\t\t\tclause,\n\t\t\t\tcolumns,\n\t\t\t\tconnector: index > 0 ? filters.connectors[index - 1] ?? \"AND\" : \"AND\",\n\t\t\t\tonConnectorChange: (connector) => handleConnectorChange(index - 1, connector),\n\t\t\t\tonRemove: () => handleRemoveClause(index),\n\t\t\t\tonUpdate: (updatedClause) => handleUpdateClause(index, updatedClause),\n\t\t\t\tshowConnector: index > 0\n\t\t\t}, clause.id))\n\t\t})]\n\t});\n}\n//#endregion\n//#region src/connect/components/db-explorer/components/table-view.tsx\nfunction formatCellValue(value) {\n\tif (value === null) return \"NULL\";\n\tif (value === void 0) return \"\";\n\tif (typeof value === \"object\") return JSON.stringify(value);\n\tif (typeof value === \"function\") return \"[function]\";\n\tif (typeof value === \"symbol\") return value.toString();\n\treturn String(value);\n}\nfunction escapeCsvValue(value) {\n\tif (value.includes(\",\") || value.includes(\"\\n\") || value.includes(\"\\\"\")) return `\"${value.replace(/\"/g, \"\\\"\\\"\")}\"`;\n\treturn value;\n}\nfunction rowToCsv(row, columns) {\n\treturn columns.map((column) => {\n\t\treturn escapeCsvValue(formatCellValue(row[column.name]));\n\t}).join(\",\");\n}\nfunction rowsToCsv(rows, columns) {\n\treturn [columns.map((col) => escapeCsvValue(col.name)).join(\",\"), ...rows.map((row) => rowToCsv(row, columns))].join(\"\\n\");\n}\nasync function copyToClipboard(text) {\n\tawait navigator.clipboard.writeText(text);\n}\nfunction SortIcon$3({ direction, active }) {\n\tif (!active) return /* @__PURE__ */ jsx(Icon, {\n\t\tclassName: \"opacity-0 group-hover:opacity-50\",\n\t\tname: \"CaretSort\",\n\t\tsize: 12\n\t});\n\treturn /* @__PURE__ */ jsx(Icon, {\n\t\tclassName: direction === \"asc\" ? \"rotate-180\" : void 0,\n\t\tname: \"TriangleDown\",\n\t\tsize: 12\n\t});\n}\nfunction TableView({ columns, rows, pagination, onPageChange, onSort, currentSort, loading = false, filters, onFiltersChange, onCopyAll }) {\n\tconst { offset, limit, total } = pagination;\n\tconst currentPage = Math.floor(offset / limit);\n\tconst totalPages = total !== null ? Math.ceil(total / limit) : 0;\n\tconst startItem = total === 0 ? 0 : offset + 1;\n\tconst endItem = total !== null ? Math.min(offset + limit, total) : offset + rows.length;\n\tconst goToPage = (page) => {\n\t\tonPageChange(page * limit);\n\t};\n\tconst handleSort = (columnName) => {\n\t\tif (!onSort) return;\n\t\tonSort({\n\t\t\tcolumn: columnName,\n\t\t\tdirection: currentSort?.column === columnName && currentSort.direction === \"asc\" ? \"desc\" : \"asc\"\n\t\t});\n\t};\n\tconst getVisiblePages = () => {\n\t\tconst maxVisible = 3;\n\t\tif (totalPages <= maxVisible) return Array.from({ length: totalPages }, (_, i) => i);\n\t\tconst start = Math.max(0, Math.min(currentPage - 1, totalPages - maxVisible));\n\t\tconst end = Math.min(totalPages - 1, start + maxVisible - 1);\n\t\tconst pages = [];\n\t\tfor (let i = start; i <= end; i++) pages.push(i);\n\t\treturn pages;\n\t};\n\tconst visiblePages = getVisiblePages();\n\tconst [copying, setCopying] = useState(false);\n\tconst [copiedRowIndex, setCopiedRowIndex] = useState(null);\n\tconst handleCopyAll = async () => {\n\t\tif (rows.length === 0) return;\n\t\tsetCopying(true);\n\t\ttry {\n\t\t\tawait copyToClipboard(onCopyAll ? await onCopyAll() : rowsToCsv(rows, columns));\n\t\t\tsetTimeout(() => setCopying(false), 1e3);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"Failed to copy to clipboard:\", err);\n\t\t\tsetCopying(false);\n\t\t}\n\t};\n\tconst handleCopyRow = async (rowIndex) => {\n\t\tif (rowIndex < 0 || rowIndex >= rows.length) return;\n\t\tsetCopiedRowIndex(rowIndex);\n\t\ttry {\n\t\t\tawait copyToClipboard(rowToCsv(rows[rowIndex], columns));\n\t\t\tsetTimeout(() => setCopiedRowIndex(null), 1e3);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"Failed to copy to clipboard:\", err);\n\t\t\tsetCopiedRowIndex(null);\n\t\t}\n\t};\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex h-full flex-col gap-2\",\n\t\tchildren: [\n\t\t\tonFiltersChange && /* @__PURE__ */ jsx(FilterBar, {\n\t\t\t\tcolumns,\n\t\t\t\tfilters,\n\t\t\t\tonFiltersChange\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex shrink-0 items-center justify-between text-sm\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"flex items-center gap-2\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\tclassName: \"text-gray-600\",\n\t\t\t\t\t\tchildren: loading ? \"Loading...\" : total !== null ? `Showing ${startItem.toLocaleString()}-${endItem.toLocaleString()} of ${total.toLocaleString()}` : `Showing ${rows.length.toLocaleString()} rows`\n\t\t\t\t\t}), rows.length > 0 && /* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-2 py-1 text-xs text-gray-700 hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\t\t\tdisabled: loading || copying,\n\t\t\t\t\t\tonClick: handleCopyAll,\n\t\t\t\t\t\ttitle: \"Copy all rows as CSV\",\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\tname: copying ? \"Check\" : \"Copy\",\n\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t}), copying ? \"Copied!\" : \"Copy All\"]\n\t\t\t\t\t})]\n\t\t\t\t}), total !== null && total > limit && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"flex gap-1\",\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\tclassName: \"rounded-sm border border-gray-300 bg-white px-2 py-1 text-xs text-gray-700 hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\t\t\t\tdisabled: currentPage === 0,\n\t\t\t\t\t\t\tonClick: () => goToPage(0),\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\tchildren: \"First\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\tclassName: \"rounded-sm border border-gray-300 bg-white px-2 py-1 text-xs text-gray-700 hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\t\t\t\tdisabled: currentPage === 0,\n\t\t\t\t\t\t\tonClick: () => goToPage(currentPage - 1),\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\t\tclassName: \"rotate-90\",\n\t\t\t\t\t\t\t\tname: \"ChevronDown\",\n\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tvisiblePages[0] > 0 && /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\tclassName: \"flex items-center px-1 text-xs text-gray-500\",\n\t\t\t\t\t\t\tchildren: \"...\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tvisiblePages.map((page) => /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\tclassName: twMerge(\"min-w-8 rounded-sm border px-2 py-1 text-xs\", page === currentPage ? \"border-blue-500 bg-blue-50 text-blue-700\" : \"border-gray-300 bg-white text-gray-700 hover:bg-gray-100\"),\n\t\t\t\t\t\t\tonClick: () => goToPage(page),\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\tchildren: page + 1\n\t\t\t\t\t\t}, page)),\n\t\t\t\t\t\tvisiblePages[visiblePages.length - 1] < totalPages - 1 && /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\tclassName: \"flex items-center px-1 text-xs text-gray-500\",\n\t\t\t\t\t\t\tchildren: \"...\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\tclassName: \"rounded-sm border border-gray-300 bg-white px-2 py-1 text-xs text-gray-700 hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\t\t\t\tdisabled: currentPage >= totalPages - 1,\n\t\t\t\t\t\t\tonClick: () => goToPage(currentPage + 1),\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\t\tclassName: \"-rotate-90\",\n\t\t\t\t\t\t\t\tname: \"ChevronDown\",\n\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\tclassName: \"rounded-sm border border-gray-300 bg-white px-2 py-1 text-xs text-gray-700 hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\t\t\t\tdisabled: currentPage >= totalPages - 1,\n\t\t\t\t\t\t\tonClick: () => goToPage(totalPages - 1),\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\tchildren: \"Last\"\n\t\t\t\t\t\t})\n\t\t\t\t\t]\n\t\t\t\t})]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: twMerge(\"max-h-full overflow-auto rounded-lg border border-gray-300 transition-opacity\", loading && \"pointer-events-none opacity-50\"),\n\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"table\", {\n\t\t\t\t\tclassName: \"w-full border-collapse\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"thead\", {\n\t\t\t\t\t\tclassName: \"sticky top-0 bg-gray-100\",\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"tr\", { children: [/* @__PURE__ */ jsx(\"th\", {\n\t\t\t\t\t\t\tclassName: \"w-12 p-2 text-center text-xs font-medium text-gray-600\",\n\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\tclassName: \"sr-only\",\n\t\t\t\t\t\t\t\tchildren: \"Copy\"\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}), columns.map((column, index) => {\n\t\t\t\t\t\t\tconst isActive = currentSort?.column === column.name;\n\t\t\t\t\t\t\tconst sortDirection = isActive ? currentSort.direction : \"asc\";\n\t\t\t\t\t\t\treturn /* @__PURE__ */ jsx(\"th\", {\n\t\t\t\t\t\t\t\tclassName: twMerge(\"group px-3 py-2 text-left text-xs font-medium text-gray-600\", index > 0 && \"border-l border-gray-300\", onSort && \"cursor-pointer hover:bg-gray-200 hover:text-gray-900\"),\n\t\t\t\t\t\t\t\tonClick: () => onSort && handleSort(column.name),\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1\",\n\t\t\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\t\tclassName: \"truncate\",\n\t\t\t\t\t\t\t\t\t\tchildren: column.name\n\t\t\t\t\t\t\t\t\t}), onSort && /* @__PURE__ */ jsx(SortIcon$3, {\n\t\t\t\t\t\t\t\t\t\tactive: isActive,\n\t\t\t\t\t\t\t\t\t\tdirection: sortDirection\n\t\t\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}, column.name);\n\t\t\t\t\t\t})] })\n\t\t\t\t\t}), /* @__PURE__ */ jsx(\"tbody\", { children: rows.length === 0 ? /* @__PURE__ */ jsx(\"tr\", { children: /* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\tclassName: \"px-3 py-8 text-center text-sm text-gray-500\",\n\t\t\t\t\t\tcolSpan: columns.length + 1,\n\t\t\t\t\t\tchildren: \"No data\"\n\t\t\t\t\t}) }) : rows.map((row, rowIndex) => /* @__PURE__ */ jsxs(\"tr\", {\n\t\t\t\t\t\tclassName: \"odd:bg-white even:bg-gray-50 hover:bg-blue-50\",\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\tclassName: \"p-2 text-center\",\n\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\tclassName: \"flex items-center justify-center rounded-sm p-1 text-gray-500 hover:bg-gray-200 hover:text-gray-700\",\n\t\t\t\t\t\t\t\tonClick: () => void handleCopyRow(rowIndex),\n\t\t\t\t\t\t\t\ttitle: \"Copy row as CSV\",\n\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\t\t\tname: copiedRowIndex === rowIndex ? \"Check\" : \"Copy\",\n\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}), columns.map((column, colIndex) => /* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\tclassName: twMerge(\"px-3 py-2 text-xs text-gray-900\", colIndex > 0 && \"border-l border-gray-300\"),\n\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\tclassName: twMerge(\"block truncate\", row[column.name] === null && \"text-gray-400 italic\"),\n\t\t\t\t\t\t\t\ttitle: formatCellValue(row[column.name]),\n\t\t\t\t\t\t\t\tchildren: formatCellValue(row[column.name])\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}, column.name))]\n\t\t\t\t\t}, rowIndex)) })]\n\t\t\t\t})\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/db-explorer/db-explorer.tsx\n/** Props for the main DBExplorer component */\nconst DEFAULT_PAGE_SIZE = 50;\nfunction DBExplorer({ schema, getTables, getTableRows, getDefaultSort, pageSize = DEFAULT_PAGE_SIZE, onImportDb, onExportDb, pgVersionControl }) {\n\tconst fileInputRef = useRef(null);\n\tconst [tables, setTables] = useState([]);\n\tconst [tablesLoading, setTablesLoading] = useState(true);\n\tconst [selectedTable, setSelectedTable] = useState();\n\tconst [tableData, setTableData] = useState(null);\n\tconst [pagination, setPagination] = useState({\n\t\toffset: 0,\n\t\tlimit: pageSize,\n\t\ttotal: null\n\t});\n\tconst [sort, setSort] = useState();\n\tconst [filters, setFilters] = useState();\n\tconst [loading, setLoading] = useState(false);\n\tconst [pendingImport, setPendingImport] = useState(null);\n\tconst [pendingResetMajor, setPendingResetMajor] = useState(null);\n\tconst [resetting, setResetting] = useState(false);\n\tconst columns = tables.find((t) => t.name === selectedTable)?.columns ?? [];\n\tconst loadTableData = useCallback(async () => {\n\t\tif (!selectedTable) return;\n\t\tsetLoading(true);\n\t\tconst data = await getTableRows(selectedTable, {\n\t\t\tschema,\n\t\t\tlimit: pagination.limit,\n\t\t\toffset: pagination.offset,\n\t\t\tsort,\n\t\t\tfilters\n\t\t});\n\t\tsetTableData(data);\n\t\tsetPagination((prev) => ({\n\t\t\t...prev,\n\t\t\ttotal: data.total\n\t\t}));\n\t\tsetLoading(false);\n\t}, [\n\t\tselectedTable,\n\t\tschema,\n\t\tpagination.limit,\n\t\tpagination.offset,\n\t\tsort,\n\t\tfilters,\n\t\tgetTableRows\n\t]);\n\tconst handleCopyAll = useCallback(async () => {\n\t\tif (!selectedTable) return \"\";\n\t\treturn rowsToCsv((await getTableRows(selectedTable, {\n\t\t\tschema,\n\t\t\tlimit: pagination.total ?? 1e6,\n\t\t\toffset: 0,\n\t\t\tsort,\n\t\t\tfilters\n\t\t})).rows, columns);\n\t}, [\n\t\tselectedTable,\n\t\tschema,\n\t\tpagination.total,\n\t\tsort,\n\t\tfilters,\n\t\tgetTableRows,\n\t\tcolumns\n\t]);\n\tconst loadTables = useCallback(async () => {\n\t\tsetTablesLoading(true);\n\t\tconst data = await getTables();\n\t\tsetTables(data);\n\t\tsetTablesLoading(false);\n\t\treturn data;\n\t}, [getTables]);\n\tconst handleRefresh = useCallback(async () => {\n\t\tconst newTables = await loadTables();\n\t\tif (selectedTable && !newTables.some((t) => t.name === selectedTable)) {\n\t\t\tsetSelectedTable(void 0);\n\t\t\tsetTableData(null);\n\t\t\treturn;\n\t\t}\n\t\tif (selectedTable) await loadTableData();\n\t}, [\n\t\tloadTables,\n\t\tselectedTable,\n\t\tloadTableData\n\t]);\n\tuseEffect(() => {\n\t\tloadTables();\n\t}, [loadTables]);\n\tuseEffect(() => {\n\t\tif (selectedTable) loadTableData();\n\t}, [\n\t\tselectedTable,\n\t\tpagination.offset,\n\t\tsort,\n\t\tfilters,\n\t\tloadTableData\n\t]);\n\tconst handleSelectTable = (table) => {\n\t\tif (table === selectedTable) return;\n\t\tsetSelectedTable(table);\n\t\tsetPagination((prev) => ({\n\t\t\t...prev,\n\t\t\toffset: 0,\n\t\t\ttotal: null\n\t\t}));\n\t\tsetSort(getDefaultSort?.(table));\n\t\tsetFilters(void 0);\n\t\tsetTableData(null);\n\t};\n\tconst handlePageChange = (offset) => {\n\t\tsetPagination((prev) => ({\n\t\t\t...prev,\n\t\t\toffset\n\t\t}));\n\t};\n\tconst handleSort = (newSort) => {\n\t\tsetSort(newSort);\n\t\tsetPagination((prev) => ({\n\t\t\t...prev,\n\t\t\toffset: 0\n\t\t}));\n\t};\n\tconst handleImportClick = () => {\n\t\tfileInputRef.current?.click();\n\t};\n\tconst handleFileChange = (e) => {\n\t\tconst file = e.target.files?.[0];\n\t\tif (!file) return;\n\t\tfile.text().then((content) => {\n\t\t\tsetPendingImport(content);\n\t\t});\n\t\te.target.value = \"\";\n\t};\n\tconst handleImportConfirm = async () => {\n\t\tif (pendingImport) {\n\t\t\tsetSelectedTable(void 0);\n\t\t\tsetTableData(null);\n\t\t\tawait onImportDb?.(pendingImport);\n\t\t\tsetPendingImport(null);\n\t\t\tawait loadTables();\n\t\t}\n\t};\n\tconst handleImportCancel = () => {\n\t\tsetPendingImport(null);\n\t};\n\tconst handleExportClick = () => {\n\t\tonExportDb?.();\n\t};\n\tconst resetTargetMajor = pgVersionControl ? pgVersionControl.supportedPgVersions.find((m) => m !== pgVersionControl.currentPgVersion) ?? null : null;\n\tconst handleResetConfirm = async () => {\n\t\tif (pendingResetMajor === null || !pgVersionControl) return;\n\t\tsetResetting(true);\n\t\ttry {\n\t\t\tawait pgVersionControl.onResetToPgVersion(pendingResetMajor);\n\t\t} finally {\n\t\t\tsetResetting(false);\n\t\t\tsetPendingResetMajor(null);\n\t\t}\n\t};\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex h-full\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(\"input\", {\n\t\t\t\tref: fileInputRef,\n\t\t\t\ttype: \"file\",\n\t\t\t\taccept: \".sql,.txt,text/plain\",\n\t\t\t\tclassName: \"hidden\",\n\t\t\t\tonChange: handleFileChange\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(ConnectConfirmationModal, {\n\t\t\t\topen: !!pendingImport,\n\t\t\t\tonOpenChange: (open) => !open && setPendingImport(null),\n\t\t\t\theader: \"Replace Database?\",\n\t\t\t\tbody: \"This will delete all existing data and replace it with the imported file. This action cannot be undone.\",\n\t\t\t\tcancelLabel: \"Cancel\",\n\t\t\t\tcontinueLabel: \"Replace Data\",\n\t\t\t\tonCancel: handleImportCancel,\n\t\t\t\tonContinue: () => void handleImportConfirm(),\n\t\t\t\tcontinueButtonProps: { className: \"bg-red-900 text-white hover:bg-red-800\" }\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(ConnectConfirmationModal, {\n\t\t\t\topen: pendingResetMajor !== null,\n\t\t\t\tonOpenChange: (open) => !open && setPendingResetMajor(null),\n\t\t\t\theader: `Reset to Postgres ${pendingResetMajor ?? \"\"}?`,\n\t\t\t\tbody: `This will permanently delete all local reactor data and recreate an empty database under Postgres ${pendingResetMajor ?? \"\"}. The page will reload.`,\n\t\t\t\tcancelLabel: \"Cancel\",\n\t\t\t\tcontinueLabel: `Reset to PG${pendingResetMajor ?? \"\"}`,\n\t\t\t\tonCancel: () => setPendingResetMajor(null),\n\t\t\t\tonContinue: () => void handleResetConfirm(),\n\t\t\t\tcontinueButtonProps: { className: \"bg-red-900 text-white hover:bg-red-800\" }\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex w-64 shrink-0 flex-col border-r border-gray-200\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"flex-1 overflow-auto\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(SchemaTreeSidebar, {\n\t\t\t\t\t\tschema,\n\t\t\t\t\t\ttables,\n\t\t\t\t\t\tselectedTable,\n\t\t\t\t\t\tonSelectTable: handleSelectTable,\n\t\t\t\t\t\tonRefresh: handleRefresh,\n\t\t\t\t\t\tloading: tablesLoading || loading\n\t\t\t\t\t})\n\t\t\t\t}), (onImportDb || onExportDb || pgVersionControl) && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"flex shrink-0 flex-col gap-2 border-t border-gray-200 p-2\",\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\tonImportDb && /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\tclassName: \"rounded-sm border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100\",\n\t\t\t\t\t\t\tonClick: handleImportClick,\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\tchildren: \"Import DB\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tonExportDb && /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\tclassName: \"rounded-sm border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100\",\n\t\t\t\t\t\t\tonClick: handleExportClick,\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\tchildren: \"Export DB\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tpgVersionControl && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\tclassName: \"flex flex-col gap-1 border-t border-gray-200 pt-2\",\n\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\t\tclassName: \"flex items-center justify-between text-xs text-gray-600\",\n\t\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", { children: \"Postgres version\" }), /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"font-semibold text-gray-900\",\n\t\t\t\t\t\t\t\t\tchildren: pgVersionControl.currentPgVersion === null ? \"—\" : `PG${pgVersionControl.currentPgVersion}`\n\t\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t\t}), resetTargetMajor !== null && /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\tclassName: \"rounded-sm border border-red-300 bg-red-50 px-3 py-1.5 text-sm text-red-700 hover:bg-red-100 disabled:opacity-50\",\n\t\t\t\t\t\t\t\tonClick: () => setPendingResetMajor(resetTargetMajor),\n\t\t\t\t\t\t\t\tdisabled: resetting,\n\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\tchildren: resetting ? `Resetting to PG${resetTargetMajor}…` : `Reset to PG${resetTargetMajor}`\n\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t})\n\t\t\t\t\t]\n\t\t\t\t})]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"flex-1 overflow-auto p-4\",\n\t\t\t\tchildren: !selectedTable ? /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"text-sm text-gray-500\",\n\t\t\t\t\tchildren: \"Select a table to view data\"\n\t\t\t\t}) : !tableData && loading ? /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"text-sm text-gray-500\",\n\t\t\t\t\tchildren: \"Loading...\"\n\t\t\t\t}) : tableData ? /* @__PURE__ */ jsx(TableView, {\n\t\t\t\t\tcolumns,\n\t\t\t\t\trows: tableData.rows,\n\t\t\t\t\tpagination,\n\t\t\t\t\tonPageChange: handlePageChange,\n\t\t\t\t\tonSort: handleSort,\n\t\t\t\t\tcurrentSort: sort,\n\t\t\t\t\tloading,\n\t\t\t\t\tfilters,\n\t\t\t\t\tonFiltersChange: (newFilters) => {\n\t\t\t\t\t\tsetFilters(newFilters);\n\t\t\t\t\t\tsetPagination((prev) => ({\n\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\toffset: 0\n\t\t\t\t\t\t}));\n\t\t\t\t\t},\n\t\t\t\t\tonCopyAll: handleCopyAll\n\t\t\t\t}) : null\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/debug-inspector/debug-inspector.tsx\nfunction DebugInspector({ supportedPgVersions, currentPgVersion, onResetToPgVersion }) {\n\tconst [status, setStatus] = useState(\"idle\");\n\tconst [pendingMajor, setPendingMajor] = useState(null);\n\tconst [confirmMajor, setConfirmMajor] = useState(null);\n\tconst [error, setError] = useState(null);\n\tconst handleReset = async (major) => {\n\t\tsetError(null);\n\t\tsetConfirmMajor(null);\n\t\tsetPendingMajor(major);\n\t\tsetStatus(\"running\");\n\t\ttry {\n\t\t\tawait onResetToPgVersion(major);\n\t\t} catch (err) {\n\t\t\tsetError(err instanceof Error ? err.message : String(err));\n\t\t\tsetStatus(\"error\");\n\t\t\tsetPendingMajor(null);\n\t\t}\n\t};\n\tconst running = status === \"running\";\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex h-full flex-col gap-4 overflow-auto p-4\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsxs(\"div\", { children: [\n\t\t\t\t/* @__PURE__ */ jsx(\"h2\", {\n\t\t\t\t\tclassName: \"text-lg font-semibold text-gray-900\",\n\t\t\t\t\tchildren: \"PGlite data dir\"\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(\"p\", {\n\t\t\t\t\tclassName: \"mt-1 text-sm text-gray-600\",\n\t\t\t\t\tchildren: \"Kill the reactor, delete the local IndexedDB, initialize a fresh Postgres cluster at the chosen major version, then reload. Useful for testing version-detection and migration flows.\"\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"mt-2 inline-flex items-center gap-2 rounded-sm bg-gray-100 px-3 py-1 text-sm\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\tclassName: \"text-gray-600\",\n\t\t\t\t\t\tchildren: \"Current version:\"\n\t\t\t\t\t}), /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\tclassName: \"font-semibold text-gray-900\",\n\t\t\t\t\t\tchildren: currentPgVersion === null ? \"None (no data dir)\" : `Postgres ${currentPgVersion}`\n\t\t\t\t\t})]\n\t\t\t\t})\n\t\t\t] }),\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"flex flex-wrap gap-2\",\n\t\t\t\tchildren: supportedPgVersions.map((major) => {\n\t\t\t\t\treturn /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tdisabled: running,\n\t\t\t\t\t\tonClick: () => setConfirmMajor(major),\n\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-red-300 bg-red-50 px-3 py-1.5 text-sm text-red-700 hover:bg-red-100 disabled:opacity-50\",\n\t\t\t\t\t\tchildren: pendingMajor === major && running ? `Resetting to PG${major}…` : `Reset to PG${major}`\n\t\t\t\t\t}, major);\n\t\t\t\t})\n\t\t\t}),\n\t\t\tconfirmMajor !== null && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex shrink-0 items-center gap-3 rounded-sm border border-yellow-400 bg-yellow-50 px-3 py-2\",\n\t\t\t\tchildren: [\n\t\t\t\t\t/* @__PURE__ */ jsxs(\"span\", {\n\t\t\t\t\t\tclassName: \"text-sm text-yellow-900\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\"This will permanently delete all local reactor data and recreate an empty database under Postgres \",\n\t\t\t\t\t\t\tconfirmMajor,\n\t\t\t\t\t\t\t\". The page will reload.\"\n\t\t\t\t\t\t]\n\t\t\t\t\t}),\n\t\t\t\t\t/* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tonClick: () => handleReset(confirmMajor),\n\t\t\t\t\t\tclassName: \"rounded-sm bg-yellow-600 px-3 py-1 text-sm text-white hover:bg-yellow-700\",\n\t\t\t\t\t\tchildren: [\"Confirm reset to PG\", confirmMajor]\n\t\t\t\t\t}),\n\t\t\t\t\t/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tonClick: () => setConfirmMajor(null),\n\t\t\t\t\t\tclassName: \"rounded-sm border border-gray-300 bg-white px-3 py-1 text-sm text-gray-600 hover:bg-gray-50\",\n\t\t\t\t\t\tchildren: \"Cancel\"\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t}),\n\t\t\terror && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"rounded-sm border border-red-300 bg-red-50 px-3 py-2 text-sm text-red-800\",\n\t\t\t\tchildren: error\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/default-editor-loader/default-editor-loader.tsx\nfunction DefaultEditorLoader(props) {\n\tconst { message = \"Loading editor\", ...divProps } = props;\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: \"grid h-full place-items-center\",\n\t\t...divProps,\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"-mt-20 grid place-items-center\",\n\t\t\tchildren: [/* @__PURE__ */ jsx(\"h3\", {\n\t\t\t\tclassName: \"mb-4 text-xl\",\n\t\t\t\tchildren: message\n\t\t\t}), /* @__PURE__ */ jsx(AnimatedLoader, {})]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/disclosure/disclosure.tsx\nfunction Disclosure(props) {\n\tconst { title, isOpen, onOpenChange, children, containerClassName, toggleClassName, contentClassName } = props;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: twMerge(containerClassName),\n\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: twMerge(\"flex cursor-pointer justify-between text-gray-500\", toggleClassName),\n\t\t\tonClick: onOpenChange,\n\t\t\tchildren: [/* @__PURE__ */ jsx(\"h2\", {\n\t\t\t\tclassName: \"font-semibold text-inherit\",\n\t\t\t\tchildren: title\n\t\t\t}), /* @__PURE__ */ jsx(Icon, {\n\t\t\t\tclassName: twJoin(\"transition\", isOpen ? \"\" : \"-rotate-90\"),\n\t\t\t\tsize: 16,\n\t\t\t\tname: \"ChevronDown\"\n\t\t\t})]\n\t\t}), /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: twMerge(\"max-h-0 overflow-hidden transition-[max-height] duration-300 ease-in-out\", isOpen && \"max-h-screen\", contentClassName),\n\t\t\tchildren\n\t\t})]\n\t});\n}\n//#endregion\n//#region src/connect/components/divider/divider.tsx\nfunction Divider(props) {\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\t...props,\n\t\tclassName: twMerge(\"h-px bg-gray-200\", props.className)\n\t});\n}\n//#endregion\n//#region src/connect/components/tabs/tab-content.tsx\nfunction TabContent(props) {\n\tconst { label, children } = props;\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: \"h-full\",\n\t\tchildren\n\t});\n}\n//#endregion\n//#region src/connect/components/tabs/tabs.tsx\nfunction Tabs({ children, defaultValue }) {\n\treturn /* @__PURE__ */ jsxs(Root$2, {\n\t\tdefaultValue,\n\t\tclassName: \"flex min-h-0 flex-1 flex-col gap-2\",\n\t\tchildren: [/* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: \"flex w-full shrink-0 justify-between\",\n\t\t\tchildren: /* @__PURE__ */ jsx(List, {\n\t\t\t\tclassName: \"flex w-full gap-x-2 rounded-xl bg-slate-50 p-1 text-sm font-semibold text-gray-600 outline-none\",\n\t\t\t\tchildren: React.Children.map(children, (child, i) => {\n\t\t\t\t\tif (!/* @__PURE__ */ React.isValidElement(child)) return;\n\t\t\t\t\tconst { label, disabled } = child.props;\n\t\t\t\t\treturn /* @__PURE__ */ jsx(Trigger$2, {\n\t\t\t\t\t\tclassName: \"flex h-7 flex-1 items-center justify-center rounded-lg transition duration-300 data-disabled:cursor-not-allowed data-disabled:text-gray-400 data-[state='active']:bg-gray-50 data-[state='active']:text-gray-900\",\n\t\t\t\t\t\tvalue: label,\n\t\t\t\t\t\tdisabled: disabled ?? false,\n\t\t\t\t\t\tchildren: label\n\t\t\t\t\t}, label);\n\t\t\t\t})\n\t\t\t})\n\t\t}), /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: \"mt-3 min-h-0 flex-1 rounded-md bg-white\",\n\t\t\tchildren: React.Children.map(children, (child, i) => {\n\t\t\t\tif (!/* @__PURE__ */ React.isValidElement(child)) return;\n\t\t\t\tconst { label } = child.props;\n\t\t\t\treturn /* @__PURE__ */ jsx(Content$2, {\n\t\t\t\t\tclassName: \"h-full\",\n\t\t\t\t\tvalue: label,\n\t\t\t\t\tchildren: child\n\t\t\t\t}, i);\n\t\t\t})\n\t\t})]\n\t});\n}\n//#endregion\n//#region src/connect/components/document-state-viewer/document-state-viewer.tsx\nfunction formatScopeLabel(text) {\n\tif (!text) return \"\";\n\treturn text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();\n}\nfunction DocumentStateViewer({ state, ignoredScopes = [\"auth\", \"document\"], defaultScope, className }) {\n\tconst scopes = useMemo(() => Object.keys(state).filter((scope) => !ignoredScopes.includes(scope)), [state, ignoredScopes]);\n\tconst initialScope = defaultScope || scopes.at(0) || \"global\";\n\tif (scopes.length === 0) return /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: \"text-sm text-gray-500\",\n\t\tchildren: \"No state data\"\n\t});\n\treturn /* @__PURE__ */ jsx(Tabs, {\n\t\tdefaultValue: formatScopeLabel(initialScope),\n\t\tchildren: scopes.map((scope) => /* @__PURE__ */ jsx(TabContent, {\n\t\t\tlabel: formatScopeLabel(scope),\n\t\t\tdescription: scope,\n\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: twMerge(\"-mt-2 rounded-md border border-gray-300 bg-gray-50 p-3 font-mono text-sm\", className),\n\t\t\t\tchildren: /* @__PURE__ */ jsx(JsonViewer, { data: state[scope] })\n\t\t\t})\n\t\t}, scope))\n\t});\n}\n//#endregion\n//#region src/connect/components/tooltip/tooltip.tsx\nfunction ConnectTooltip(props) {\n\tconst { children, content, open, defaultOpen, onOpenChange, className, side = \"top\", sideOffset = 5, delayDuration, ...rest } = props;\n\treturn /* @__PURE__ */ jsxs(Root, {\n\t\tdefaultOpen,\n\t\tdelayDuration,\n\t\tonOpenChange,\n\t\topen,\n\t\tchildren: [/* @__PURE__ */ jsx(Trigger, {\n\t\t\tasChild: true,\n\t\t\tchildren\n\t\t}), /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Content, {\n\t\t\t...rest,\n\t\t\tside,\n\t\t\tsideOffset,\n\t\t\tclassName: twMerge(\"z-50 rounded-lg border border-gray-200 bg-white p-2 text-xs shadow-tooltip\", className),\n\t\t\tchildren: content\n\t\t}) })]\n\t});\n}\nconst ConnectTooltipProvider = Provider;\n//#endregion\n//#region src/connect/components/document-timeline/components/h-divider.tsx\nconst HDivider = (props) => {\n\tconst { className, timestampUtcMs: timestamp, title, subtitle, onClick, isSelected = false } = props;\n\tconst [open, setOpen] = useState(false);\n\tconst hasContent = !!title || !!subtitle || !!timestamp;\n\tuseEffect(() => {\n\t\tif (open) {\n\t\t\tsetOpen(false);\n\t\t\tsetTimeout(() => hasContent && setOpen(true), 50);\n\t\t}\n\t}, [\n\t\ttitle,\n\t\tsubtitle,\n\t\ttimestamp,\n\t\thasContent\n\t]);\n\tconst formatTimestamp = (isoString) => {\n\t\tif (!isoString) return \"\";\n\t\ttry {\n\t\t\treturn formatDistanceToNow(new Date(isoString), { addSuffix: true });\n\t\t} catch {\n\t\t\treturn isoString;\n\t\t}\n\t};\n\tconst tooltipContent = /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex flex-col text-xs\",\n\t\tchildren: [\n\t\t\t!!title && /* @__PURE__ */ jsx(\"div\", { children: title }),\n\t\t\t!!subtitle && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"text-gray-300\",\n\t\t\t\tchildren: subtitle\n\t\t\t}),\n\t\t\t!!timestamp && /* @__PURE__ */ jsx(\"div\", { children: formatTimestamp(timestamp) })\n\t\t]\n\t});\n\tconst handleMouseEnter = () => {\n\t\tif (hasContent) setOpen(true);\n\t};\n\tconst handleMouseLeave = () => {\n\t\tsetOpen(false);\n\t};\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"relative\",\n\t\tonMouseEnter: handleMouseEnter,\n\t\tonMouseLeave: handleMouseLeave,\n\t\tchildren: [isSelected && /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"TimelineCaret\",\n\t\t\tcolor: \"#4EA9FF\",\n\t\t\tsize: 10,\n\t\t\tclassName: \"absolute top-[-11px] z-40\"\n\t\t}), /* @__PURE__ */ jsx(ConnectTooltip, {\n\t\t\tclassName: \"rounded-md bg-gray-900 text-white\",\n\t\t\tcontent: tooltipContent,\n\t\t\topen: open && hasContent,\n\t\t\tonOpenChange: setOpen,\n\t\t\tdelayDuration: 0,\n\t\t\tside: \"bottom\",\n\t\t\tsideOffset: 5,\n\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: twMerge(\"mx-0.5 flex h-6.25 w-1.5 cursor-pointer flex-col items-center justify-center rounded-xs hover:bg-blue-300\", isSelected && \"bg-blue-300\", className),\n\t\t\t\tonClick,\n\t\t\t\t\"data-title\": title,\n\t\t\t\t\"data-subtitle\": subtitle,\n\t\t\t\t\"data-timestamp\": timestamp,\n\t\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", { className: \"h-0.5 w-1 rounded-full bg-gray-500\" })\n\t\t\t})\n\t\t})]\n\t});\n};\n//#endregion\n//#region src/connect/components/document-timeline/components/timeline-bar.tsx\nconst getBarHeight = (size = 0) => {\n\tswitch (true) {\n\t\tcase size <= 0: return \"h-[1px]\";\n\t\tcase size === 1: return \"h-[3px]\";\n\t\tcase size === 2: return \"h-[6px]\";\n\t\tcase size === 3: return \"h-[9px]\";\n\t\tcase size >= 4: return \"h-[12px]\";\n\t\tdefault: return \"h-[1px]\";\n\t}\n};\nconst formatTimestamp$1 = (isoString) => {\n\tif (!isoString) return \"\";\n\ttry {\n\t\treturn format(parseISO(isoString), \"HH:mm, dd, MMMM\");\n\t} catch {\n\t\treturn isoString;\n\t}\n};\nconst TimelineBar = ({ onClick, className, timestampUtcMs: timestamp, additions, deletions, addSize = 0, delSize = 0, isSelected = false }) => {\n\tconst [open, setOpen] = useState(false);\n\tconst noChanges = addSize === 0 && delSize === 0;\n\tconst addBarHeight = getBarHeight(addSize);\n\tconst delBarHeight = getBarHeight(delSize);\n\tconst tooltipContent = /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex flex-col text-xs\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(\"div\", { children: formatTimestamp$1(timestamp) }),\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"text-green-900\",\n\t\t\t\tchildren: `${additions} additions +`\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"text-red-700\",\n\t\t\t\tchildren: `${deletions} deletions -`\n\t\t\t})\n\t\t]\n\t});\n\tconst handleMouseEnter = () => {\n\t\tif (!noChanges) setOpen(true);\n\t};\n\tconst handleMouseLeave = () => {\n\t\tsetOpen(false);\n\t};\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"relative\",\n\t\tonMouseEnter: handleMouseEnter,\n\t\tonMouseLeave: handleMouseLeave,\n\t\tchildren: [isSelected && /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"TimelineCaret\",\n\t\t\tcolor: \"#4EA9FF\",\n\t\t\tsize: 10,\n\t\t\tclassName: \"absolute top-[-11px] left-[-2px] z-40\"\n\t\t}), noChanges ? /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: twMerge(\"flex h-[25px] w-1.5 cursor-pointer flex-col items-center justify-center rounded-[2px] hover:bg-blue-300\", className),\n\t\t\t\"data-timestamp\": timestamp,\n\t\t\tonClick,\n\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", { className: \"size-[3px] rounded-full bg-gray-500\" })\n\t\t}) : /* @__PURE__ */ jsx(ConnectTooltip, {\n\t\t\tclassName: \"rounded-md bg-gray-900 text-white\",\n\t\t\tcontent: tooltipContent,\n\t\t\topen,\n\t\t\tonOpenChange: setOpen,\n\t\t\tdelayDuration: 0,\n\t\t\tside: \"bottom\",\n\t\t\tsideOffset: 5,\n\t\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: twMerge(\"flex h-[25px] w-1.5 cursor-pointer flex-col items-center justify-center rounded-[2px] hover:bg-blue-300\", className, isSelected && \"bg-blue-300\"),\n\t\t\t\t\"data-timestamp\": timestamp,\n\t\t\t\tonClick,\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"flex h-3 w-0.5 items-end\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", { className: twMerge(\"h-3 w-0.5 rounded-t-full bg-green-600\", addBarHeight) })\n\t\t\t\t}), /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"flex h-3 w-0.5 items-start\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", { className: twMerge(\"h-3 w-0.5 rounded-b-full bg-red-600\", delBarHeight) })\n\t\t\t\t})]\n\t\t\t})\n\t\t})]\n\t});\n};\n//#endregion\n//#region src/connect/components/document-timeline/document-timeline.tsx\nconst defaultTimeLineItem = {\n\tid: \"default\",\n\ttype: \"bar\",\n\taddSize: 0,\n\tdelSize: 0\n};\nconst DocumentTimeline = (props) => {\n\tconst { timeline = [], onItemClick } = props;\n\tconst [selectedItem, setSelectedItem] = useState(null);\n\tconst scrollContainerRef = useRef(null);\n\tconst handleClick = (item) => {\n\t\tif (item.id === selectedItem || item.id === defaultTimeLineItem.id) {\n\t\t\tonItemClick?.(null);\n\t\t\tsetSelectedItem(null);\n\t\t} else {\n\t\t\tonItemClick?.(item);\n\t\t\tsetSelectedItem(item.id);\n\t\t}\n\t};\n\tconst mergedTimelineItems = [...timeline, defaultTimeLineItem];\n\tconst [unselectedItems, selectedItems] = useMemo(() => {\n\t\tconst indexSelected = mergedTimelineItems.findIndex((item) => item.id === selectedItem);\n\t\treturn indexSelected === -1 ? [mergedTimelineItems, []] : [mergedTimelineItems.slice(0, indexSelected), mergedTimelineItems.slice(indexSelected)];\n\t}, [mergedTimelineItems, selectedItem]);\n\tconst renderTimelineItems = useCallback((items) => {\n\t\treturn items.map((item) => {\n\t\t\tif (item.type === \"divider\") {\n\t\t\t\tconst { timestampUtcMs, title, subtitle } = item;\n\t\t\t\treturn /* @__PURE__ */ jsx(HDivider, {\n\t\t\t\t\ttimestampUtcMs,\n\t\t\t\t\ttitle,\n\t\t\t\t\tsubtitle,\n\t\t\t\t\tonClick: () => handleClick(item),\n\t\t\t\t\tisSelected: item.id === selectedItem\n\t\t\t\t}, item.id);\n\t\t\t}\n\t\t\treturn /* @__PURE__ */ jsx(TimelineBar, {\n\t\t\t\ttimestampUtcMs: item.timestampUtcMs,\n\t\t\t\taddSize: item.addSize,\n\t\t\t\tdelSize: item.delSize,\n\t\t\t\tadditions: item.additions,\n\t\t\t\tdeletions: item.deletions,\n\t\t\t\tisSelected: item.id === selectedItem,\n\t\t\t\tonClick: () => handleClick(item)\n\t\t\t}, item.id);\n\t\t});\n\t}, [handleClick, selectedItem]);\n\tconst unselectedContent = useMemo(() => renderTimelineItems(unselectedItems), [unselectedItems, renderTimelineItems]);\n\tconst selectedContent = useMemo(() => renderTimelineItems(selectedItems), [selectedItems, renderTimelineItems]);\n\tuseEffect(() => {\n\t\tif (scrollContainerRef.current) scrollContainerRef.current.scrollLeft = scrollContainerRef.current.scrollWidth;\n\t}, []);\n\treturn /* @__PURE__ */ jsx(ConnectTooltipProvider, {\n\t\tdelayDuration: 0,\n\t\tskipDelayDuration: 0,\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"relative h-[36px] w-full\",\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"absolute left-0 z-20 h-[17px] w-[6px] bg-white\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", { className: \"mt-[11px] h-[6px] w-[6px] rounded-tl-md bg-slate-50\" })\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"absolute top-[11px] right-0 z-20 h-[6px] w-[6px] bg-white\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", { className: \"h-[6px] w-[6px] rounded-tr-md bg-slate-50\" })\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", { className: \"absolute inset-x-0 bottom-0 h-[25px] rounded-md bg-slate-50\" }),\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"absolute inset-x-0 bottom-0 h-[36px]\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\tref: scrollContainerRef,\n\t\t\t\t\t\tclassName: \"h-full overflow-x-auto rounded-md\",\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\tclassName: \"ml-auto flex h-[36px] w-max items-end px-2 pb-0\",\n\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\t\t\tclassName: \"flex\",\n\t\t\t\t\t\t\t\tchildren: unselectedContent\n\t\t\t\t\t\t\t}), /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\t\t\tclassName: \"flex rounded-sm bg-blue-200\",\n\t\t\t\t\t\t\t\tchildren: selectedContent\n\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", { className: \"pointer-events-none absolute bottom-0 left-0 z-10 h-[25px] w-2 rounded-l-md bg-slate-50\" }),\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", { className: \"pointer-events-none absolute right-0 bottom-0 z-10 h-[25px] w-2 rounded-r-md bg-slate-50\" })\n\t\t\t]\n\t\t})\n\t});\n};\n//#endregion\n//#region src/connect/components/document-toolbar/containers.tsx\n/**\n* Default outer container for `DocumentToolbar`.\n*\n* This component provides the toolbar's base layout and visual styling while\n* still accepting standard `div` props. Pass a custom container to\n* `DocumentToolbar` when you need to replace this wrapper.\n*/\nfunction ToolbarContainer(props) {\n\tconst { children, className, ...rest } = props;\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\t...rest,\n\t\tclassName: twMerge(\"flex h-12 w-full items-center justify-between rounded-xl border border-gray-200 bg-slate-50 px-4\", className),\n\t\tchildren\n\t});\n}\n/**\n* Default container for a group of toolbar controls.\n*\n* `DocumentToolbar` renders one controls container per toolbar slot. This\n* component provides the default horizontal layout for the controls in that\n* slot while still accepting standard `div` props.\n*/\nfunction ToolbarControlsContainer(props) {\n\tconst { children, className, ...rest } = props;\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: twMerge(\"flex items-center gap-x-2\", className),\n\t\t...rest,\n\t\tchildren\n\t});\n}\n//#endregion\n//#region src/connect/components/document-toolbar/use-document-undo-redo.ts\n/**\n* Checks whether a document has at least one non-zero revision count.\n*\n* Revision scopes are dynamic document-model keys, so this checks the values of\n* the document's revision object instead of relying on a fixed list of scope\n* names.\n*/\nfunction hasRevisions(document) {\n\treturn pipe(prop(document, \"header\", \"revision\"), defaultTo({}), values(), filter(isTruthy), hasAtLeast(1));\n}\n/**\n* Returns undo state and an undo dispatcher for a document.\n*\n* `canUndo` is true when the document has at least one non-zero revision count\n* across any revision scope.\n*/\nfunction useUndo(documentId) {\n\tconst [document, dispatch] = useDocumentById(documentId);\n\treturn {\n\t\tcanUndo: hasRevisions(document),\n\t\tundo: () => dispatch(undo())\n\t};\n}\n/**\n* Returns redo state and a redo dispatcher for a document.\n*\n* `canRedo` is true when the document clipboard contains at least one operation\n* that can be reapplied.\n*/\nfunction useRedo(documentId) {\n\tconst [document, dispatch] = useDocumentById(documentId);\n\treturn {\n\t\tcanRedo: hasAtLeast(document?.clipboard ?? [], 1),\n\t\tredo: () => dispatch(redo())\n\t};\n}\n//#endregion\n//#region src/connect/components/document-toolbar/toolbar-button.tsx\n/**\n* Base button component used by the built-in toolbar controls.\n*\n* This component provides the default toolbar button styling and disabled-state\n* behavior while accepting standard `button` props.\n*/\nfunction ToolbarButton(props) {\n\tconst { className, children, disabled, ...rest } = props;\n\treturn /* @__PURE__ */ jsx(\"button\", {\n\t\t...rest,\n\t\tdisabled,\n\t\tclassName: twMerge(\"grid size-fit place-items-center rounded-lg border border-gray-200 bg-white p-1 text-gray-900\", disabled ? \"cursor-not-allowed text-gray-500\" : \"cursor-pointer active:opacity-70\", className),\n\t\tchildren\n\t});\n}\n/**\n* Toolbar control for undoing the latest document revision.\n*\n* The button is disabled when there are no revisions available to undo.\n* Provide `children` to replace the default icon, or `onClick` to override the\n* default undo behavior.\n*/\nfunction ToolbarUndoButton(props) {\n\tconst { className, onClick: onClickOverride, document, children = /* @__PURE__ */ jsx(Icon, {\n\t\tname: \"ArrowCouterclockwise\",\n\t\tsize: 16\n\t}) } = props;\n\tconst { undo, canUndo } = useUndo(document?.header.id);\n\tconst disabled = !canUndo;\n\tconst onClick = makeOnClick(document, onClickOverride, undo);\n\treturn /* @__PURE__ */ jsx(ToolbarButton, {\n\t\t\"data-testid\": \"toolbar-undo-button\",\n\t\t\"aria-label\": \"Undo\",\n\t\tclassName,\n\t\tdisabled,\n\t\tonClick,\n\t\tchildren\n\t});\n}\n/**\n* Toolbar control for redoing the latest undone document revision.\n*\n* The button is disabled when there are no revisions available to redo.\n* Provide `children` to replace the default icon, or `onClick` to override the\n* default redo behavior.\n*/\nfunction ToolbarRedoButton(props) {\n\tconst { className, onClick: onClickOverride, document, children = /* @__PURE__ */ jsx(Icon, {\n\t\tname: \"ArrowCouterclockwise\",\n\t\tclassName: \"-scale-x-100\",\n\t\tsize: 16\n\t}) } = props;\n\tconst { redo, canRedo } = useRedo(document?.header.id);\n\tconst onClick = makeOnClick(document, onClickOverride, redo);\n\tconst disabled = !canRedo;\n\treturn /* @__PURE__ */ jsx(ToolbarButton, {\n\t\t\"data-testid\": \"toolbar-redo-button\",\n\t\t\"aria-label\": \"Redo\",\n\t\tclassName,\n\t\tdisabled,\n\t\tonClick,\n\t\tchildren\n\t});\n}\n/**\n* Toolbar control for downloading the current document.\n*\n* Provide `children` to replace the default label, or `onClick` to override the\n* default download behavior.\n*/\nfunction ToolbarDownloadButton(props) {\n\tconst { className, onClick: onClickOverride, document, children = /* @__PURE__ */ jsx(\"span\", {\n\t\tclassName: \"px-1 text-xs\",\n\t\tchildren: \"Download\"\n\t}) } = props;\n\tconst onClick = makeOnClick(document, onClickOverride, useDownloadDocument(document?.header.id));\n\treturn /* @__PURE__ */ jsx(ToolbarButton, {\n\t\t\"data-testid\": \"toolbar-download-button\",\n\t\t\"aria-label\": \"Download\",\n\t\tclassName,\n\t\tonClick,\n\t\tchildren\n\t});\n}\n/**\n* Toolbar control for opening the current document in Switchboard.\n*\n* Provide `children` to replace the default icon, or `onClick` to override the\n* default behavior.\n*/\nfunction ToolbarSwitchboardButton(props) {\n\tconst { className, onClick: onClickOverride, document, children = /* @__PURE__ */ jsx(Icon, {\n\t\tname: \"Drive\",\n\t\tsize: 16\n\t}) } = props;\n\tconst getSwitchboardLink = useGetSwitchboardLink(document);\n\tconst onClick = makeOnClick(document, onClickOverride, () => {\n\t\tgetSwitchboardLink?.().then((url) => window.open(url, \"_blank\")).catch((error) => console.error(\"Error opening switchboard link:\", error));\n\t});\n\treturn /* @__PURE__ */ jsx(ToolbarButton, {\n\t\t\"data-testid\": \"toolbar-switchboard-button\",\n\t\t\"aria-label\": \"Open link in Switchboard\",\n\t\tclassName,\n\t\tonClick,\n\t\tchildren\n\t});\n}\n/**\n* Toolbar control for showing the current document's revision history.\n*\n* Provide `children` to replace the default icon, or `onClick` to override the\n* default revision-history behavior.\n*/\nfunction ToolbarHistoryButton(props) {\n\tconst { className, onClick: onClickOverride, document, children = /* @__PURE__ */ jsx(Icon, {\n\t\tname: \"History\",\n\t\tsize: 16\n\t}) } = props;\n\tconst onClick = makeOnClick(document, onClickOverride, showRevisionHistory);\n\treturn /* @__PURE__ */ jsx(ToolbarButton, {\n\t\t\"data-testid\": \"toolbar-history-button\",\n\t\t\"aria-label\": \"Open document revision history\",\n\t\tclassName,\n\t\tonClick,\n\t\tchildren\n\t});\n}\n/**\n* Toolbar control for closing the current document view.\n*\n* By default, this selects the current document's parent folder. Provide\n* `children` to replace the default icon, or `onClick` to override the default\n* close behavior.\n*/\nfunction ToolbarCloseButton(props) {\n\tconst { className, onClick: onClickOverride, document, children = /* @__PURE__ */ jsx(Icon, {\n\t\tname: \"XmarkLight\",\n\t\tsize: 16\n\t}) } = props;\n\tconst parentFolder = useNodeParentFolderById(document?.header.id);\n\tconst onClick = makeOnClick(document, onClickOverride, () => setSelectedNode(parentFolder));\n\treturn /* @__PURE__ */ jsx(ToolbarButton, {\n\t\t\"data-testid\": \"toolbar-close-button\",\n\t\t\"aria-label\": \"Close document\",\n\t\tclassName,\n\t\tonClick,\n\t\tchildren\n\t});\n}\n/**\n* Creates a toolbar button click handler.\n*\n* If an override is provided, it is called with the current document. Otherwise,\n* the built-in handler is called with the current document.\n*/\nfunction makeOnClick(document, onClickOverride, defaultOnClick) {\n\tif (isDefined(onClickOverride)) return () => onClickOverride(document);\n\treturn () => defaultOnClick(document);\n}\n//#endregion\n//#region src/connect/components/document-toolbar/toolbar-input.tsx\n/**\n* Text input styled for use inside a toolbar.\n*\n* This wraps `NodeInput` with toolbar-specific text styling. Use it for inline\n* toolbar editing flows where the user can submit a value or cancel editing.\n*/\nfunction ToolbarInput(props) {\n\tconst { defaultValue, className, onSubmit, onCancel, \"aria-label\": ariaLabel } = props;\n\treturn /* @__PURE__ */ jsx(NodeInput, {\n\t\tdefaultValue,\n\t\tclassName: twMerge(\"text-center text-sm font-medium text-gray-500\", className),\n\t\t\"aria-label\": ariaLabel,\n\t\tonCancel,\n\t\tonSubmit\n\t});\n}\n//#endregion\n//#region src/connect/components/document-toolbar/toolbar-name.tsx\n/**\n* Toolbar control for displaying and renaming the current document.\n*\n* By default, the component renders the document name as a clickable heading.\n* When clicked, it switches to an inline input. Submitting the input renames\n* both the node and the corresponding drive node entry.\n*/\nfunction ToolbarName(props) {\n\tconst { document, inputClassName, titleClassName } = props;\n\tconst [isEditing, setIsEditing] = useState(false);\n\tconst node = useNodeById(document?.header.id);\n\tconst { onRenameNode, onRenameDriveNodes } = useNodeActions();\n\tconst documentName = document?.header.name;\n\tconst documentId = document?.header.id;\n\tconst activateEditing = () => setIsEditing(true);\n\tconst cancelEditing = () => setIsEditing(false);\n\tconst onSubmit = (newName) => {\n\t\tcancelEditing();\n\t\tif (!documentId || !node) return;\n\t\tPromise.all([onRenameNode(newName, node), onRenameDriveNodes(newName, documentId)]).catch(console.error);\n\t};\n\tif (!documentName) return null;\n\tif (isEditing) return /* @__PURE__ */ jsx(ToolbarInput, {\n\t\tclassName: inputClassName,\n\t\tonSubmit,\n\t\tonCancel: cancelEditing,\n\t\tdefaultValue: documentName,\n\t\t\"aria-label\": \"Document name\"\n\t});\n\treturn /* @__PURE__ */ jsx(\"h1\", {\n\t\tclassName: twMerge(\"cursor-pointer text-sm font-medium text-gray-500 hover:text-gray-700\", titleClassName),\n\t\tonClick: activateEditing,\n\t\ttitle: \"Click to edit\",\n\t\tchildren: documentName\n\t});\n}\n//#endregion\n//#region src/connect/components/document-toolbar/constants.ts\n/**\n* Default slot layout for the built-in document toolbar controls.\n*\n* The toolbar is divided into three control groups:\n*\n* - `first`: primary document actions.\n* - `second`: document identity/display controls.\n* - `third`: secondary document actions.\n*/\nconst defaultControlSlots = {\n\tfirst: [\n\t\t\"undo\",\n\t\t\"redo\",\n\t\t\"download\"\n\t],\n\tsecond: [\"name\"],\n\tthird: [\n\t\t\"history\",\n\t\t\"switchboard\",\n\t\t\"close\"\n\t]\n};\n/**\n* Ordered list of toolbar slot names.\n*/\nconst controlSlots = keys(defaultControlSlots);\n/**\n* Ordered list of all built-in document toolbar control names.\n*\n* The order is derived from `defaultControlSlots`.\n*/\nconst documentToolbarControls = [\n\t...defaultControlSlots.first,\n\t...defaultControlSlots.second,\n\t...defaultControlSlots.third\n];\n/**\n* Default component implementation for each built-in toolbar control.\n*\n* These components are used unless a matching entry is provided through\n* `componentOverrides`.\n*/\nconst defaultControlComponents = {\n\tundo: ToolbarUndoButton,\n\tredo: ToolbarRedoButton,\n\tdownload: ToolbarDownloadButton,\n\tname: ToolbarName,\n\tswitchboard: ToolbarSwitchboardButton,\n\thistory: ToolbarHistoryButton,\n\tclose: ToolbarCloseButton\n};\n//#endregion\n//#region src/connect/components/document-toolbar/utils.tsx\n/**\n* Creates a predicate for checking whether a built-in toolbar control should render.\n*\n* A control renders when it is included in `enabledControls` and absent from\n* `disabledControls`. When `enabledControls` is omitted, all built-in controls\n* are considered enabled. When a control appears in both lists,\n* `disabledControls` takes precedence.\n*/\nfunction makeIsEnabledChecker(args) {\n\tconst { enabledControls = documentToolbarControls, disabledControls = [] } = args;\n\treturn (control) => isIncludedIn(control, enabledControls) && !isIncludedIn(control, disabledControls);\n}\n/**\n* Creates a getter for rendering the built-in toolbar controls in a slot.\n*\n* The returned function resolves the controls assigned to a slot, filters them\n* through the enabled/disabled control lists, applies any component overrides,\n* and renders each control with the current document.\n*/\nfunction makeToolbarControlsRenderer(args) {\n\tconst { document, enabledControls, disabledControls, componentOverrides } = args;\n\tconst checkIsEnabled = makeIsEnabledChecker({\n\t\tenabledControls,\n\t\tdisabledControls\n\t});\n\tconst renderComponent = (control) => pipe(prop(componentOverrides, control), defaultTo(prop(defaultControlComponents, control)), (Component) => /* @__PURE__ */ jsx(Component, { document }, control));\n\treturn (slot) => pipe(prop(defaultControlSlots, slot), filter(checkIsEnabled), map(renderComponent));\n}\n/**\n* Checks whether a custom control should render in the requested position.\n*\n* Controls without an explicit position are treated as `\"start\"`.\n*/\nfunction isControlInPosition(control, position) {\n\treturn defaultTo(control.position, \"start\") === position;\n}\n/**\n* Creates a getter for rendering custom controls in a slot and position.\n*\n* The returned function resolves the custom control or controls assigned to a\n* slot, then renders only the controls that belong in the requested position.\n*/\nfunction makeCustomControlsRenderer(args) {\n\tconst { document, customControls = {} } = args;\n\treturn (slot, pos) => {\n\t\tconst controlOrControlList = prop(customControls, slot);\n\t\tif (!isDefined(controlOrControlList)) return null;\n\t\tif (isArray(controlOrControlList)) return renderCustomControlList(controlOrControlList, pos, document);\n\t\treturn renderCustomControl(controlOrControlList, pos, document);\n\t};\n}\n/**\n* Renders a single custom control when it belongs in the requested position.\n*/\nfunction renderCustomControl(control, pos, document) {\n\tif (!isControlInPosition(control, pos)) return null;\n\tconst Component = control.component;\n\treturn /* @__PURE__ */ jsx(Component, { document });\n}\n/**\n* Renders a list of custom controls for the requested position.\n*\n* Returns `null` when no controls in the list belong in that position.\n*/\nfunction renderCustomControlList(controls, pos, document) {\n\tconst controlsInPosition = filter(controls, (control) => isControlInPosition(control, pos));\n\tif (!hasAtLeast(controlsInPosition, 1)) return null;\n\treturn /* @__PURE__ */ jsx(Fragment$1, { children: map(controlsInPosition, ({ component: Component, key }) => /* @__PURE__ */ jsx(Component, { document }, key)) });\n}\n//#endregion\n//#region src/connect/components/document-toolbar/document-toolbar.tsx\n/**\n* Renders a document toolbar.\n*\n* By default, the toolbar renders the built-in document controls grouped into\n* toolbar slots. The controls operate on the provided `document`, or on the\n* currently selected document when no document is provided.\n*\n* Use `enabledControls` and `disabledControls` to control which built-in\n* controls are shown. Use `componentOverrides` to replace individual built-in\n* controls while keeping the default toolbar layout. Use `customControls` to\n* insert additional controls before or after the built-in controls in a slot.\n*\n* To take over the toolbar contents completely, pass `children`.\n*/\nfunction DocumentToolbar(props) {\n\tconst [selectedDocument] = useSelectedDocumentSafe();\n\tconst { toolbarClassName, document = selectedDocument, toolbarContainer: Container = ToolbarContainer } = props;\n\tif (\"children\" in props) return /* @__PURE__ */ jsx(Container, {\n\t\tclassName: toolbarClassName,\n\t\tchildren: props.children\n\t});\n\treturn /* @__PURE__ */ jsx(Container, {\n\t\tclassName: toolbarClassName,\n\t\tchildren: map(controlSlots, (slot) => /* @__PURE__ */ createElement(ControlsContainerSlot, {\n\t\t\t...props,\n\t\t\tdocument,\n\t\t\tslot,\n\t\t\tkey: slot\n\t\t}))\n\t});\n}\n/**\n* Renders one toolbar controls slot.\n*\n* Custom controls with position `\"start\"` are rendered before the built-in\n* controls for the slot. Custom controls with position `\"end\"` are rendered\n* after them.\n*/\nfunction ControlsContainerSlot(props) {\n\tconst { slot, document, controlsContainerClassName, enabledControls, disabledControls, componentOverrides, customControls, controlsContainer: ControlsContainer = ToolbarControlsContainer } = props;\n\tconst renderToolbarControls = makeToolbarControlsRenderer({\n\t\tdocument,\n\t\tenabledControls,\n\t\tdisabledControls,\n\t\tcomponentOverrides\n\t});\n\tconst renderCustomControls = makeCustomControlsRenderer({\n\t\tdocument,\n\t\tcustomControls\n\t});\n\treturn /* @__PURE__ */ jsxs(ControlsContainer, {\n\t\tclassName: controlsContainerClassName,\n\t\tchildren: [\n\t\t\trenderCustomControls(slot, \"start\"),\n\t\t\trenderToolbarControls(slot),\n\t\t\trenderCustomControls(slot, \"end\")\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/modal/replace-duplicate-modal.tsx\nconst buttonStyles$4 = \"min-h-[48px] min-w-[142px] text-base font-semibold py-3 px-6 rounded-xl outline-none active:opacity-75 hover:scale-105 transform transition-all\";\nfunction ConnectReplaceDuplicateModal(props) {\n\tconst { title = \"Document Already Exists\", fileName, message, children, onOpenChange, onDuplicate, duplicateLabel = \"Create Copy\", overlayProps, contentProps, bodyProps = {}, headerProps = {}, containerProps = {}, replaceButtonProps = {}, duplicateButtonProps = {}, buttonContainerProps = {}, ...restProps } = props;\n\tconst defaultMessage = fileName ? `A document named \"${fileName}\" already exists in this location. Would you like to replace it or create a copy?` : \"A document with the same name already exists in this location. Would you like to replace it or create a copy?\";\n\treturn /* @__PURE__ */ jsx(Modal, {\n\t\tcontentProps: {\n\t\t\t...contentProps,\n\t\t\tclassName: twMerge(\"rounded-3xl\", contentProps?.className)\n\t\t},\n\t\tonOpenChange,\n\t\toverlayProps: {\n\t\t\t...overlayProps,\n\t\t\tclassName: overlayProps?.className\n\t\t},\n\t\t...restProps,\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t...mergeClassNameProps(containerProps, \"w-[450px] bg-white p-6 text-slate-300\"),\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"flex items-center justify-between border-b border-slate-50 pb-2\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\t...mergeClassNameProps(headerProps, \"text-2xl font-bold text-gray-800\"),\n\t\t\t\t\t\tchildren: title\n\t\t\t\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tclassName: \"flex size-6 items-center justify-center rounded-md outline-none hover:bg-slate-100\",\n\t\t\t\t\t\tonClick: () => onOpenChange?.(false),\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\tname: \"XmarkLight\",\n\t\t\t\t\t\t\tsize: 24\n\t\t\t\t\t\t})\n\t\t\t\t\t})]\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t...mergeClassNameProps(bodyProps, \"my-6 rounded-md bg-slate-50 p-4 text-center\"),\n\t\t\t\t\tchildren: [message || defaultMessage, children]\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t...mergeClassNameProps(buttonContainerProps, \"mt-8 flex\"),\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\tonClick: onDuplicate,\n\t\t\t\t\t\t...mergeClassNameProps(duplicateButtonProps, twMerge(buttonStyles$4, \"flex-1 bg-gray-800 text-gray-50\")),\n\t\t\t\t\t\tchildren: duplicateLabel\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/upload-file-item/components/error-details.tsx\nfunction UploadFileItemErrorDetails(props) {\n\tconst { status, errorDetails } = props;\n\tif (!((status === \"failed\" || status === \"unsupported-document-type\") && errorDetails)) return null;\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: \"text-xs leading-[18px] wrap-break-word text-gray-500\",\n\t\tchildren: errorDetails\n\t});\n}\n//#endregion\n//#region src/connect/components/upload-file-item/components/header.tsx\nfunction getDocumentIcon(documentType) {\n\tswitch (documentType) {\n\t\tcase \"analytics-processor\": return \"AnalyticsProcessorModule\";\n\t\tcase \"relational-processor\": return \"RelationalProcessorModule\";\n\t\tcase \"codegen-processor\": return \"CodegenProcessorModule\";\n\t\tcase \"app\": return \"AppModule\";\n\t\tcase \"document-model\": return \"DocumentModelModule\";\n\t\tcase \"editor\": return \"EditorModule\";\n\t\tcase \"package\": return \"PackageModule\";\n\t\tcase \"subgraph\": return \"SubgraphModule\";\n\t\tdefault: return \"PowerhouseDocumentModule\";\n\t}\n}\nfunction UploadFileItemHeader(props) {\n\tconst { fileName, fileSize, documentType, onClose, ...delegatedProps } = props;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex items-center gap-2\",\n\t\t...delegatedProps,\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"flex h-9 w-7 shrink-0 items-center justify-center\",\n\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tname: getDocumentIcon(documentType),\n\t\t\t\t\tsize: 48,\n\t\t\t\t\tclassName: \"text-gray-600\"\n\t\t\t\t})\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex flex-1 flex-col gap-0.5\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"text-xs leading-[18px] font-medium text-gray-900\",\n\t\t\t\t\tchildren: fileName\n\t\t\t\t}), /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"text-xs leading-[18px] font-medium text-gray-500\",\n\t\t\t\t\tchildren: fileSize\n\t\t\t\t})]\n\t\t\t}),\n\t\t\tonClose && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"flex h-9 w-[18px] shrink-0 items-start justify-center\",\n\t\t\t\tchildren: /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tonClick: onClose,\n\t\t\t\t\tclassName: \"flex h-[18px] w-[18px] items-center justify-center text-gray-600 hover:text-gray-800\",\n\t\t\t\t\t\"aria-label\": \"Close\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\tname: \"XmarkLight\",\n\t\t\t\t\t\tsize: 18\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/upload-file-item/components/progress-bar.tsx\nfunction UploadFileItemProgressBar(props) {\n\tconst { status, progress = 0 } = props;\n\tif (status !== \"uploading\") return null;\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: \"h-2 w-full overflow-hidden rounded-sm bg-gray-200\",\n\t\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: \"h-full bg-blue-900 transition-all duration-300 ease-out\",\n\t\t\tstyle: { width: `${Math.min(100, Math.max(0, progress))}%` }\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/upload-file-item/components/status-row.tsx\nfunction getStatusText(status) {\n\tswitch (status) {\n\t\tcase \"success\": return \"Upload successful\";\n\t\tcase \"failed\": return \"Upload failed\";\n\t\tcase \"unsupported-document-type\": return \"Document not supported by this drive\";\n\t\tcase \"pending\": return \"Pending resolution\";\n\t\tcase \"conflict\": return \"Pending Resolution\";\n\t\tcase \"uploading\": return \"Uploading...\";\n\t\tdefault: return \"\";\n\t}\n}\nfunction getStatusColor(status) {\n\tswitch (status) {\n\t\tcase \"success\": return \"text-green-700\";\n\t\tcase \"failed\":\n\t\tcase \"unsupported-document-type\":\n\t\tcase \"pending\":\n\t\tcase \"conflict\": return \"text-red-900\";\n\t\tcase \"uploading\": return \"text-gray-900\";\n\t\tdefault: return \"text-gray-900\";\n\t}\n}\nfunction shouldShowCTA(status, onOpenDocument, onFindResolution) {\n\treturn status === \"success\" && Boolean(onOpenDocument) || status === \"pending\" && Boolean(onFindResolution) || status === \"conflict\" && Boolean(onFindResolution);\n}\nfunction getCTAText(status) {\n\tif (status === \"success\") return \"Open Document\";\n\tif (status === \"pending\") return \"Find resolution\";\n\tif (status === \"conflict\") return \"Find resolution\";\n\treturn \"\";\n}\nfunction UploadFileItemStatusRow(props) {\n\tconst { status, progress = 0, onOpenDocument, onFindResolution } = props;\n\tconst handleCTAClick = () => {\n\t\tif (status === \"success\" && onOpenDocument) onOpenDocument();\n\t\telse if ((status === \"pending\" || status === \"conflict\") && onFindResolution) onFindResolution();\n\t};\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex items-center justify-between gap-2\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: twMerge(\"text-xs leading-[18px]\", getStatusColor(status)),\n\t\t\t\tchildren: getStatusText(status)\n\t\t\t}),\n\t\t\tstatus === \"uploading\" && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"text-xs leading-[18px] font-medium text-gray-900\",\n\t\t\t\tchildren: [Math.round(progress), \"%\"]\n\t\t\t}),\n\t\t\tshouldShowCTA(status, onOpenDocument, onFindResolution) && /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\ttype: \"button\",\n\t\t\t\tonClick: handleCTAClick,\n\t\t\t\tclassName: \"text-xs leading-[18px] text-blue-900 hover:opacity-80\",\n\t\t\t\tchildren: getCTAText(status)\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/upload-file-item/upload-file-item.tsx\nconst UploadFileItem = /* @__PURE__ */ forwardRef(function UploadFileItem(props, ref) {\n\tconst { fileName, fileSize, status, documentType, progress = 0, errorDetails, onClose, onOpenDocument, onFindResolution, className, ...delegatedProps } = props;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tref,\n\t\tclassName: twMerge(\"flex w-full flex-col gap-0.5 rounded-md border border-gray-100 bg-white p-2 shadow-sidebar\", className),\n\t\t...delegatedProps,\n\t\tchildren: [/* @__PURE__ */ jsx(UploadFileItemHeader, {\n\t\t\tfileName,\n\t\t\tfileSize,\n\t\t\tdocumentType,\n\t\t\tonClose\n\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"flex flex-col gap-1\",\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsx(UploadFileItemStatusRow, {\n\t\t\t\t\tstatus,\n\t\t\t\t\tprogress,\n\t\t\t\t\tonOpenDocument,\n\t\t\t\t\tonFindResolution\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(UploadFileItemProgressBar, {\n\t\t\t\t\tstatus,\n\t\t\t\t\tprogress\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(UploadFileItemErrorDetails, {\n\t\t\t\t\tstatus,\n\t\t\t\t\terrorDetails\n\t\t\t\t})\n\t\t\t]\n\t\t})]\n\t});\n});\n//#endregion\n//#region src/connect/components/upload-file-list/utils.ts\nfunction getUploadListTitle(count, explicitTitle) {\n\tif (explicitTitle) return explicitTitle;\n\treturn `Uploading ${count} document${count === 1 ? \"\" : \"s\"}`;\n}\n//#endregion\n//#region src/connect/components/upload-file-list/upload-file-list.tsx\nfunction UploadFileList(props) {\n\tconst { items, title, defaultCollapsed = false, onClose, className, ...delegatedProps } = props;\n\tconst [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n\tconst computedTitle = useMemo(() => getUploadListTitle(items.length, title), [items.length, title]);\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: twMerge(\"w-89.5 rounded-md border border-gray-100 bg-gray-50 p-4 shadow-charcoal\", className),\n\t\t...delegatedProps,\n\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"flex items-center justify-between\",\n\t\t\tchildren: [/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\ttype: \"button\",\n\t\t\t\t\"aria-expanded\": !isCollapsed,\n\t\t\t\t\"aria-label\": isCollapsed ? \"Expand list\" : \"Collapse list\",\n\t\t\t\tonClick: () => setIsCollapsed((v) => !v),\n\t\t\t\tclassName: \"min-w-0 flex-1 text-left text-sm/4 font-medium text-gray-900 hover:opacity-80\",\n\t\t\t\tchildren: computedTitle\n\t\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex shrink-0 items-center gap-4\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\"aria-label\": isCollapsed ? \"Expand\" : \"Collapse\",\n\t\t\t\t\tonClick: () => setIsCollapsed((v) => !v),\n\t\t\t\t\tclassName: \"text-gray-900 hover:opacity-80\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\tclassName: twMerge(\"inline-block size-4 transition-transform select-none\", isCollapsed ? \"-rotate-90\" : \"rotate-0\"),\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\tname: \"CaretDown\",\n\t\t\t\t\t\t\tsize: 16,\n\t\t\t\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t}), onClose && /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\"aria-label\": \"Close\",\n\t\t\t\t\tonClick: onClose,\n\t\t\t\t\tclassName: \"text-gray-900 hover:opacity-80\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\tclassName: \"inline-block size-4 select-none\",\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\tname: \"XmarkLight\",\n\t\t\t\t\t\t\tsize: 16,\n\t\t\t\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t})]\n\t\t\t})]\n\t\t}), !isCollapsed && /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: \"mt-4 flex max-h-[404px] flex-col gap-4 overflow-x-visible overflow-y-auto p-2\",\n\t\t\tchildren: items.map((item, idx) => /* @__PURE__ */ jsx(UploadFileItem, { ...item }, `${item.fileName}-${idx}`))\n\t\t})]\n\t});\n}\n//#endregion\n//#region src/connect/components/drop-zone/utils.ts\nfunction generateId() {\n\treturn `upload_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n}\nfunction formatFileSize(bytes) {\n\tif (bytes === 0) return \"0 Bytes\";\n\tconst k = 1024;\n\tconst sizes = [\n\t\t\"Bytes\",\n\t\t\"KB\",\n\t\t\"MB\",\n\t\t\"GB\"\n\t];\n\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\n\treturn `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;\n}\nfunction mapProgressStageToStatus(stage) {\n\tswitch (stage) {\n\t\tcase \"loading\":\n\t\tcase \"initializing\": return \"pending\";\n\t\tcase \"uploading\": return \"uploading\";\n\t\tcase \"complete\": return \"success\";\n\t\tcase \"failed\": return \"failed\";\n\t\tcase \"conflict\": return \"conflict\";\n\t\tcase \"unsupported-document-type\": return \"unsupported-document-type\";\n\t\tdefault: return \"pending\";\n\t}\n}\nfunction mapUploadsToFileItems(uploadsArray, removeUpload, setSelectedNodeFn, onConflictResolution) {\n\treturn uploadsArray.filter((upload) => upload !== void 0).map((upload) => ({\n\t\tfileName: upload.fileName,\n\t\tfileSize: upload.fileSize,\n\t\tstatus: upload.status,\n\t\tprogress: upload.progress,\n\t\terrorDetails: upload.errorDetails,\n\t\tdocumentType: upload.documentType,\n\t\tonClose: () => {\n\t\t\tremoveUpload(upload.id);\n\t\t},\n\t\tonOpenDocument: upload.status === \"success\" ? () => {\n\t\t\tif (upload.fileNode && setSelectedNodeFn) setSelectedNodeFn(upload.fileNode);\n\t\t\telse console.error(\"Opening document for upload:\", upload.id, \"- fileNode not available or setSelectedNode not provided\");\n\t\t} : void 0,\n\t\tonFindResolution: upload.status === \"failed\" ? () => {\n\t\t\tconsole.log(\"Finding resolution for upload:\", upload.id);\n\t\t} : upload.status === \"conflict\" ? () => {\n\t\t\tconsole.log(\"Finding conflict resolution for upload:\", upload.id);\n\t\t\tonConflictResolution?.(upload.id);\n\t\t} : void 0\n\t}));\n}\n//#endregion\n//#region src/connect/components/drop-zone/upload-file-list-container.tsx\nfunction UploadFileListContainer(props) {\n\tconst { uploadsArray, uploadsCount, removeUpload, clearAllUploads, setSelectedNode, onClose, onConflictResolution, className, ...delegatedProps } = props;\n\tif (uploadsCount === 0) return null;\n\tconst items = mapUploadsToFileItems(uploadsArray, removeUpload, setSelectedNode, onConflictResolution);\n\tconst handleClose = onClose ?? clearAllUploads;\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: twMerge(\"fixed right-4 bottom-4 z-1001\", className),\n\t\t...delegatedProps,\n\t\tchildren: /* @__PURE__ */ jsx(UploadFileList, {\n\t\t\titems,\n\t\t\tonClose: handleClose\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/drop-zone/use-upload-tracker.ts\nfunction uploadsReducer(state, action) {\n\tswitch (action.type) {\n\t\tcase \"ADD_UPLOAD\": return {\n\t\t\t...state,\n\t\t\t[action.payload.id]: {\n\t\t\t\tid: action.payload.id,\n\t\t\t\tfileName: action.payload.fileName,\n\t\t\t\tfileSize: action.payload.fileSize,\n\t\t\t\tstatus: \"pending\",\n\t\t\t\tprogress: 0,\n\t\t\t\tfileNode: void 0\n\t\t\t}\n\t\t};\n\t\tcase \"UPDATE_PROGRESS\": {\n\t\t\tconst currentUpload = state[action.payload.id];\n\t\t\tif (!currentUpload) return state;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[action.payload.id]: {\n\t\t\t\t\t...currentUpload,\n\t\t\t\t\tstatus: mapProgressStageToStatus(action.payload.progress.stage),\n\t\t\t\t\tprogress: action.payload.progress.progress,\n\t\t\t\t\terrorDetails: action.payload.progress.error,\n\t\t\t\t\t...action.payload.progress.documentType && { documentType: action.payload.progress.documentType },\n\t\t\t\t\t...action.payload.progress.duplicateType && { duplicateType: action.payload.progress.duplicateType },\n\t\t\t\t\t...action.payload.progress.fileNode && { fileNode: action.payload.progress.fileNode }\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tcase \"SET_FILE_NODE\": {\n\t\t\tconst uploadToUpdate = state[action.payload.id];\n\t\t\tif (!uploadToUpdate) return state;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[action.payload.id]: {\n\t\t\t\t\t...uploadToUpdate,\n\t\t\t\t\tfileNode: action.payload.fileNode\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tcase \"SET_ERROR\": {\n\t\t\tconst failedUpload = state[action.payload.id];\n\t\t\tif (!failedUpload) return state;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[action.payload.id]: {\n\t\t\t\t\t...failedUpload,\n\t\t\t\t\tstatus: failedUpload.status || \"failed\",\n\t\t\t\t\terrorDetails: action.payload.error\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tcase \"REMOVE_UPLOAD\": {\n\t\t\tconst { [action.payload.id]: removed, ...rest } = state;\n\t\t\treturn rest;\n\t\t}\n\t\tcase \"CLEAR_ALL_UPLOADS\": return {};\n\t\tcase \"SET_CONFLICT_DATA\": {\n\t\t\tconst conflictUpload = state[action.payload.id];\n\t\t\tif (!conflictUpload) return state;\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[action.payload.id]: {\n\t\t\t\t\t...conflictUpload,\n\t\t\t\t\tfile: action.payload.file,\n\t\t\t\t\tparentNode: action.payload.parentNode\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tcase \"CLEAR_CONFLICTED_UPLOADS\": {\n\t\t\tconst filteredUploads = {};\n\t\t\tfor (const [id, upload] of Object.entries(state)) if (upload && upload.status !== \"conflict\") filteredUploads[id] = upload;\n\t\t\treturn filteredUploads;\n\t\t}\n\t\tdefault: return state;\n\t}\n}\nfunction useUploadTracker(useLocalStorage = false, driveId) {\n\tconst [uploads, dispatch] = useReducer(uploadsReducer, useCallback(() => {\n\t\tif (useLocalStorage && driveId) try {\n\t\t\tconst stored = localStorage.getItem(`uploadTracker_${driveId}`);\n\t\t\tif (stored) return JSON.parse(stored);\n\t\t\treturn {};\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Failed to load upload tracker from localStorage:\", error);\n\t\t\treturn {};\n\t\t}\n\t\treturn {};\n\t}, [useLocalStorage, driveId])());\n\tuseEffect(() => {\n\t\tif (useLocalStorage && driveId) try {\n\t\t\tlocalStorage.setItem(`uploadTracker_${driveId}`, JSON.stringify(uploads));\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Failed to save upload tracker to localStorage:\", error);\n\t\t}\n\t}, [\n\t\tuploads,\n\t\tuseLocalStorage,\n\t\tdriveId\n\t]);\n\tconst createUploadHandler = useCallback((onAddFile) => {\n\t\tif (!onAddFile) return void 0;\n\t\treturn async (file, parent) => {\n\t\t\tconst fileId = generateId();\n\t\t\tdispatch({\n\t\t\t\ttype: \"ADD_UPLOAD\",\n\t\t\t\tpayload: {\n\t\t\t\t\tid: fileId,\n\t\t\t\t\tfileName: file.name,\n\t\t\t\t\tfileSize: formatFileSize(file.size)\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst progressCallback = (progress) => {\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: \"UPDATE_PROGRESS\",\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tid: fileId,\n\t\t\t\t\t\tprogress\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (progress.stage === \"conflict\") dispatch({\n\t\t\t\t\ttype: \"SET_CONFLICT_DATA\",\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tid: fileId,\n\t\t\t\t\t\tfile,\n\t\t\t\t\t\tparentNode: parent\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: \"SET_FILE_NODE\",\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tid: fileId,\n\t\t\t\t\t\tfileNode: await onAddFile(file, parent, progressCallback) || void 0\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: \"SET_ERROR\",\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tid: fileId,\n\t\t\t\t\t\terror: error instanceof Error ? error.message : \"Unknown error\"\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}, []);\n\tconst removeUpload = useCallback((uploadId) => {\n\t\tdispatch({\n\t\t\ttype: \"REMOVE_UPLOAD\",\n\t\t\tpayload: { id: uploadId }\n\t\t});\n\t}, []);\n\tconst clearAllUploads = useCallback(() => {\n\t\tdispatch({ type: \"CLEAR_ALL_UPLOADS\" });\n\t}, []);\n\tconst clearConflictedUploads = useCallback(() => {\n\t\tdispatch({ type: \"CLEAR_CONFLICTED_UPLOADS\" });\n\t}, []);\n\tconst getUploadsArray = useCallback(() => {\n\t\treturn Object.values(uploads);\n\t}, [uploads]);\n\tconst getUploadsCount = useCallback(() => {\n\t\treturn Object.keys(uploads).length;\n\t}, [uploads]);\n\tconst resolveConflict = useCallback((uploadId, resolution, onAddFile) => {\n\t\tconst upload = uploads[uploadId];\n\t\tif (!upload?.file || !onAddFile) {\n\t\t\tconsole.error(\"Cannot resolve conflict: missing upload data or onAddFile function\");\n\t\t\treturn;\n\t\t}\n\t\tconst progressCallback = (progress) => {\n\t\t\tdispatch({\n\t\t\t\ttype: \"UPDATE_PROGRESS\",\n\t\t\t\tpayload: {\n\t\t\t\t\tid: uploadId,\n\t\t\t\t\tprogress\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\tconst result = onAddFile(upload.file, upload.parentNode, progressCallback, resolution);\n\t\tPromise.resolve(result).then((fileNode) => {\n\t\t\tif (fileNode) dispatch({\n\t\t\t\ttype: \"SET_FILE_NODE\",\n\t\t\t\tpayload: {\n\t\t\t\t\tid: uploadId,\n\t\t\t\t\tfileNode\n\t\t\t\t}\n\t\t\t});\n\t\t}).catch((error) => {\n\t\t\tdispatch({\n\t\t\t\ttype: \"SET_ERROR\",\n\t\t\t\tpayload: {\n\t\t\t\t\tid: uploadId,\n\t\t\t\t\terror: error instanceof Error ? error.message : \"Unknown error\"\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}, [uploads]);\n\treturn {\n\t\tuploads,\n\t\tuploadsArray: getUploadsArray(),\n\t\tuploadsCount: getUploadsCount(),\n\t\tcreateUploadHandler,\n\t\tremoveUpload,\n\t\tclearAllUploads,\n\t\tclearConflictedUploads,\n\t\tresolveConflict\n\t};\n}\n//#endregion\n//#region src/connect/components/drop-zone/drop-zone.tsx\nfunction DropZone(props) {\n\tconst { title = \"Drag your documents\", subtitle = \"to drop them in the currently selected folder.\", node, enable = true, children, onAddFile, useLocalStorage = false, driveId, acceptedFileExtensions = [\n\t\t\".zip\",\n\t\t\".phd\",\n\t\t\".phdm\"\n\t], className, ...delegatedProps } = props;\n\tconst [modalOpen, setModalOpen] = useState(false);\n\tconst [conflictUploadId, setConflictUploadId] = useState(null);\n\tconst { uploadsArray, uploadsCount, createUploadHandler, clearAllUploads, clearConflictedUploads, removeUpload, resolveConflict } = useUploadTracker(useLocalStorage, driveId);\n\tuseEffect(() => {\n\t\tclearConflictedUploads();\n\t}, []);\n\tconst handleAddFile = createUploadHandler(onAddFile) ?? (async () => {});\n\tconst handleConflictResolution = (uploadId) => {\n\t\tsetConflictUploadId(uploadId);\n\t\tsetModalOpen(true);\n\t};\n\tconst handleDuplicate = () => {\n\t\tif (conflictUploadId && onAddFile) resolveConflict(conflictUploadId, \"duplicate\", onAddFile);\n\t\tsetModalOpen(false);\n\t\tsetConflictUploadId(null);\n\t};\n\tconst handleModalClose = () => {\n\t\tsetModalOpen(false);\n\t\tsetConflictUploadId(null);\n\t};\n\tconst { isDropTarget, ...dropProps } = useDropFile(handleAddFile);\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: twMerge(\"relative\", className),\n\t\t...enable ? dropProps : {},\n\t\t...delegatedProps,\n\t\tchildren: [\n\t\t\tchildren,\n\t\t\tenable && isDropTarget && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"pointer-events-none fixed inset-0 z-1000 flex min-h-screen w-screen items-center justify-center bg-black/50\",\n\t\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"rounded-3xl bg-white p-6 shadow-charcoal\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"relative flex h-32.5 w-100 flex-col items-center justify-start overflow-visible rounded-lg border border-dashed border-black px-4 py-6\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\t\t\tclassName: \"text-center text-base/5 text-zinc-500\",\n\t\t\t\t\t\t\t\tchildren: title\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\t\t\tclassName: \"text-center text-base/5 text-zinc-500\",\n\t\t\t\t\t\t\t\tchildren: subtitle\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\tclassName: \"pointer-events-none absolute -bottom-16 left-1/2 z-10 -translate-x-1/2\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\t\t\tname: \"DocumentIcons\",\n\t\t\t\t\t\t\t\t\tsize: 144,\n\t\t\t\t\t\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t]\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(UploadFileListContainer, {\n\t\t\t\tuploadsArray,\n\t\t\t\tuploadsCount,\n\t\t\t\tremoveUpload,\n\t\t\t\tclearAllUploads,\n\t\t\t\tsetSelectedNode,\n\t\t\t\tonConflictResolution: handleConflictResolution\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(ConnectReplaceDuplicateModal, {\n\t\t\t\topen: modalOpen,\n\t\t\t\tonOpenChange: handleModalClose,\n\t\t\t\tfileName: conflictUploadId ? uploadsArray.find((u) => u?.id === conflictUploadId)?.fileName : void 0,\n\t\t\t\tonDuplicate: handleDuplicate\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/drop-zone/drop-zone-wrapper.tsx\nfunction DropZoneWrapper({ children, ...props }) {\n\tconst isDragAndDropEnabled = useIsDragAndDropEnabled();\n\tconst selectedDriveId = useSelectedDriveId();\n\tconst onDropFile = useOnDropFile();\n\tconst onAddFile = async (file, parent, onProgress, resolveConflict) => {\n\t\treturn await onDropFile(file, onProgress, resolveConflict);\n\t};\n\tif (!isDragAndDropEnabled || !selectedDriveId) return /* @__PURE__ */ jsx(Fragment$1, { children });\n\treturn /* @__PURE__ */ jsx(DropZone, {\n\t\tonAddFile,\n\t\tdriveId: selectedDriveId,\n\t\tuseLocalStorage: true,\n\t\t...props,\n\t\tchildren\n\t});\n}\n//#endregion\n//#region src/connect/components/dropdown-menu/dropdown-menu.tsx\nfunction ConnectDropdownMenu(props) {\n\tconst { children, items, open, onItemClick, onOpenChange, menuClassName } = props;\n\treturn /* @__PURE__ */ jsxs(DropdownMenu, {\n\t\tonOpenChange,\n\t\topen,\n\t\tchildren: [/* @__PURE__ */ jsx(DropdownMenuTrigger, {\n\t\t\tasChild: true,\n\t\t\tclassName: \"outline-none\",\n\t\t\tchildren\n\t\t}), /* @__PURE__ */ jsx(DropdownMenuContent, {\n\t\t\tclassName: twMerge(\"cursor-pointer rounded-2xl border border-gray-200 bg-white text-sm font-medium text-slate-500 shadow-lg\", menuClassName),\n\t\t\tchildren: items.map(({ id, label, icon, className }) => /* @__PURE__ */ jsxs(DropdownMenuItem, {\n\t\t\t\tclassName: twMerge(\"flex items-center px-5 py-2 outline-none first-of-type:rounded-t-2xl first-of-type:pt-3 last-of-type:rounded-b-2xl last-of-type:pb-3 hover:bg-slate-50\", className),\n\t\t\t\tonClick: (e) => e.stopPropagation(),\n\t\t\t\tonSelect: () => onItemClick(id),\n\t\t\t\tchildren: [icon ? /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\tclassName: \"mr-2 inline-block\",\n\t\t\t\t\tchildren: icon\n\t\t\t\t}) : null, label]\n\t\t\t}, id))\n\t\t})]\n\t});\n}\n//#endregion\n//#region src/connect/components/editor-action-buttons/editor-action-buttons.tsx\nfunction EditorActionButtons(props) {\n\tconst { onSwitchboardLinkClick, onDownloadDocument, onClose, onShowRevisionHistory, onShowTimeline } = props;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex items-center gap-x-2\",\n\t\tchildren: [\n\t\t\tonSwitchboardLinkClick && /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\tclassName: \"grid size-8 place-items-center rounded-lg border border-gray-200 bg-white text-gray-900 disabled:cursor-not-allowed disabled:text-gray-500\",\n\t\t\t\tonClick: onSwitchboardLinkClick,\n\t\t\t\tdisabled: !onSwitchboardLinkClick,\n\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tname: \"Drive\",\n\t\t\t\t\tsize: 16\n\t\t\t\t})\n\t\t\t}),\n\t\t\tonShowRevisionHistory && /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\tclassName: \"grid size-8 place-items-center rounded-lg border border-gray-200 bg-white text-gray-900 disabled:cursor-not-allowed disabled:text-gray-500\",\n\t\t\t\tonClick: onShowRevisionHistory,\n\t\t\t\tdisabled: !onShowRevisionHistory,\n\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tname: \"History\",\n\t\t\t\t\tsize: 16\n\t\t\t\t})\n\t\t\t}),\n\t\t\tonShowTimeline && /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\tclassName: \"grid size-8 place-items-center rounded-lg border border-gray-200 bg-white text-gray-900 disabled:cursor-not-allowed disabled:text-gray-500\",\n\t\t\t\tonClick: onShowTimeline,\n\t\t\t\tdisabled: !onShowTimeline,\n\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tname: \"Timeline\",\n\t\t\t\t\tsize: 16\n\t\t\t\t})\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\tclassName: \"grid size-8 place-items-center rounded-lg border border-gray-200 bg-white text-gray-900\",\n\t\t\t\tonClick: onClose,\n\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tname: \"XmarkLight\",\n\t\t\t\t\tsize: 16\n\t\t\t\t})\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/editor-undo-redo-buttons/editor-undo-redo-buttons.tsx\nfunction EditorUndoRedoButtons(props) {\n\tconst { canUndo, canRedo, undo, redo } = props;\n\tconst buttonStyles = \"w-8 h-8 rounded-lg flex justify-center items-center rounded border border-gray-200 bg-white\";\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex gap-x-2 text-gray-500\",\n\t\tchildren: [/* @__PURE__ */ jsx(\"button\", {\n\t\t\tclassName: buttonStyles,\n\t\t\tdisabled: !canUndo,\n\t\t\tonClick: undo,\n\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\tclassName: twMerge(\"-scale-x-100\", canUndo ? \"text-gray-900 active:opacity-50\" : \"text-gray-500\"),\n\t\t\t\tname: \"RedoArrow\",\n\t\t\t\tsize: 18\n\t\t\t})\n\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\tclassName: buttonStyles,\n\t\t\tdisabled: !canRedo,\n\t\t\tonClick: redo,\n\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\tclassName: twMerge(canRedo ? \"text-gray-900 active:opacity-50\" : \"text-gray-500\"),\n\t\t\t\tname: \"RedoArrow\",\n\t\t\t\tsize: 18\n\t\t\t})\n\t\t})]\n\t});\n}\n//#endregion\n//#region assets/powerhouse-rounded.png\nvar powerhouse_rounded_default = \"data:image/png;base64,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\";\n//#endregion\n//#region src/connect/components/ens-avatar/ens-avatar.tsx\nfunction ENSAvatar(props) {\n\tconst { avatarUrl = powerhouse_rounded_default, size = \"14px\" } = props;\n\treturn /* @__PURE__ */ jsx(\"img\", {\n\t\talt: \"ENS Avatar\",\n\t\tclassName: \"flex-none rounded-full object-contain\",\n\t\tsrc: avatarUrl,\n\t\tstyle: {\n\t\t\twidth: size,\n\t\t\theight: size\n\t\t}\n\t});\n}\n//#endregion\n//#region assets/icons/template.png\nvar template_default = \"data:image/png;base64,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\";\n//#endregion\n//#region src/connect/constants/options.tsx\nconst defaultDriveOptions = [\n\t\"NEW_FOLDER\",\n\t\"RENAME\",\n\t\"SETTINGS\"\n];\nconst defaultNodeOptions = [\n\t\"RENAME\",\n\t\"DELETE\",\n\t\"DUPLICATE\"\n];\nconst normalNodeOptions = [\n\t\"DUPLICATE\",\n\t\"RENAME\",\n\t\"DELETE\",\n\t\"SETTINGS\"\n];\nconst debugNodeOptions = [\n\t\"ADD_TRIGGER\",\n\t\"REMOVE_TRIGGER\",\n\t\"ADD_INVALID_TRIGGER\"\n];\nconst nodeOptions = [...normalNodeOptions, ...debugNodeOptions];\nconst sharingTypeOptions = [\n\t{\n\t\tvalue: \"LOCAL\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"Lock\",\n\t\t\tsize: 16\n\t\t}),\n\t\tdescription: \"Only available to you\"\n\t},\n\t{\n\t\tvalue: \"CLOUD\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"People\",\n\t\t\tsize: 16\n\t\t}),\n\t\tdescription: \"Only available to people in this drive\"\n\t},\n\t{\n\t\tvalue: \"PUBLIC\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"Globe\",\n\t\t\tsize: 16\n\t\t}),\n\t\tdescription: \"Available to everyone\",\n\t\tdisabled: true\n\t}\n];\nconst locationInfoByLocation = {\n\tCLOUD: {\n\t\ttitle: \"Secure cloud\",\n\t\tdescription: \"End to end encryption between members.\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"Lock\",\n\t\t\tsize: 16\n\t\t})\n\t},\n\tLOCAL: {\n\t\ttitle: \"Local\",\n\t\tdescription: \"Private and only available to you.\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"Hdd\",\n\t\t\tsize: 16\n\t\t})\n\t},\n\tSWITCHBOARD: {\n\t\ttitle: \"Switchboard\",\n\t\tdescription: \"Public and available to everyone.\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"Drive\",\n\t\t\tsize: 16\n\t\t})\n\t}\n};\nconst debugNodeOptionsMap = {\n\tADD_TRIGGER: {\n\t\tlabel: \"Add Trigger\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\tclassName: \"text-orange-900\",\n\t\t\tname: \"Plus\",\n\t\t\tsize: 16\n\t\t})\n\t},\n\tREMOVE_TRIGGER: {\n\t\tlabel: \"Remove Trigger\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\tclassName: \"text-orange-900\",\n\t\t\tname: \"Xmark\",\n\t\t\tsize: 16\n\t\t})\n\t},\n\tADD_INVALID_TRIGGER: {\n\t\tlabel: \"Add Trigger\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\tclassName: \"text-orange-900\",\n\t\t\tname: \"Exclamation\",\n\t\t\tsize: 16\n\t\t})\n\t}\n};\nconst folderNodeDropdownOptions = {\n\tDUPLICATE: {\n\t\tlabel: \"Duplicate\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"FilesEarmark\",\n\t\t\tsize: 16\n\t\t})\n\t},\n\tRENAME: {\n\t\tlabel: \"Rename\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"Pencil\",\n\t\t\tsize: 16\n\t\t})\n\t},\n\tDELETE: {\n\t\tlabel: \"Delete\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"Trash\",\n\t\t\tsize: 16\n\t\t}),\n\t\tclassName: \"text-red-900\"\n\t}\n};\nconst fileNodeDropdownOptions = {\n\tDOWNLOAD: {\n\t\tlabel: \"Download\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"DownloadFile\",\n\t\t\tsize: 16\n\t\t})\n\t},\n\t...folderNodeDropdownOptions\n};\n//#endregion\n//#region src/connect/constants/syncing.ts\nconst SYNCING = \"SYNCING\";\nconst SUCCESS = \"SUCCESS\";\nconst CONFLICT = \"CONFLICT\";\nconst MISSING = \"MISSING\";\nconst ERROR = \"ERROR\";\nconst INITIAL_SYNC = \"INITIAL_SYNC\";\nconst syncStatuses = [\n\tINITIAL_SYNC,\n\tSYNCING,\n\tSUCCESS,\n\tCONFLICT,\n\tMISSING,\n\tERROR\n];\n//#endregion\n//#region src/connect/components/status-icon/sync-status-icon.tsx\nconst syncIcons = {\n\tSYNCING: \"Syncing\",\n\tSUCCESS: \"Synced\",\n\tCONFLICT: \"Error\",\n\tMISSING: \"Circle\",\n\tERROR: \"Error\",\n\tINITIAL_SYNC: \"Syncing\"\n};\nfunction SyncStatusIcon(props) {\n\tconst { syncStatus, className, overrideSyncIcons = {}, ...iconProps } = props;\n\tconst icons = {\n\t\t...syncIcons,\n\t\t...overrideSyncIcons\n\t};\n\treturn {\n\t\t[INITIAL_SYNC]: /* @__PURE__ */ jsx(Icon, {\n\t\t\tsize: 16,\n\t\t\t...iconProps,\n\t\t\tclassName: twMerge(\"text-blue-900\", className),\n\t\t\tname: icons[INITIAL_SYNC]\n\t\t}),\n\t\t[SYNCING]: /* @__PURE__ */ jsx(Icon, {\n\t\t\tsize: 16,\n\t\t\t...iconProps,\n\t\t\tclassName: twMerge(\"text-blue-900\", className),\n\t\t\tname: icons[SYNCING]\n\t\t}),\n\t\t[SUCCESS]: /* @__PURE__ */ jsx(Icon, {\n\t\t\tsize: 16,\n\t\t\t...iconProps,\n\t\t\tclassName: twMerge(\"text-green-900\", className),\n\t\t\tname: icons[SUCCESS]\n\t\t}),\n\t\t[CONFLICT]: /* @__PURE__ */ jsx(Icon, {\n\t\t\tsize: 16,\n\t\t\t...iconProps,\n\t\t\tclassName: twMerge(\"text-orange-900\", className),\n\t\t\tname: icons[CONFLICT]\n\t\t}),\n\t\t[MISSING]: /* @__PURE__ */ jsx(Icon, {\n\t\t\tsize: 16,\n\t\t\t...iconProps,\n\t\t\tclassName: twMerge(\"text-red-900\", className),\n\t\t\tname: icons[MISSING]\n\t\t}),\n\t\t[ERROR]: /* @__PURE__ */ jsx(Icon, {\n\t\t\tsize: 16,\n\t\t\t...iconProps,\n\t\t\tclassName: twMerge(\"text-red-900\", className),\n\t\t\tname: icons[ERROR]\n\t\t})\n\t}[syncStatus];\n}\n//#endregion\n//#region src/connect/components/file-item/file-item.tsx\nfunction getDriveSharingType$1(drive) {\n\tif (typeof drive !== \"object\") return \"LOCAL\";\n\tconst { sharingType: _sharingType } = !(\"readContext\" in drive) ? drive.state.local : { sharingType: \"PUBLIC\" };\n\tconst __sharingType = _sharingType?.toUpperCase();\n\treturn !__sharingType || __sharingType === \"PRIVATE\" || ![\n\t\t\"LOCAL\",\n\t\t\"CLOUD\",\n\t\t\"PUBLIC\"\n\t].includes(__sharingType) ? \"LOCAL\" : __sharingType;\n}\nfunction FileItem(props) {\n\tconst { fileNode, className, customDocumentIconSrc } = props;\n\tconst [mode, setMode] = useState(\"READ\");\n\tconst [isDropdownMenuOpen, setIsDropdownMenuOpen] = useState(false);\n\tconst [selectedDrive] = useSelectedDriveSafe();\n\tconst sharingType = selectedDrive ? getDriveSharingType$1(selectedDrive) : \"LOCAL\";\n\tconst { isDragging, ...dragProps } = useDragNode({\n\t\tsrcId: fileNode.id,\n\t\tparentId: fileNode.parentFolder ?? void 0\n\t});\n\tconst { isAllowedToCreateDocuments } = useUserPermissions();\n\tconst { onRenameNode, onRenameDriveNodes, onDuplicateNode } = useNodeActions();\n\tconst downloadDocument = useDownloadDocument(fileNode.id);\n\tconst isReadMode = mode === \"READ\";\n\tconst syncStatus = getSyncStatusSync(fileNode.id, sharingType);\n\tconst dropdownMenuHandlers = {\n\t\tDOWNLOAD: downloadDocument,\n\t\tDUPLICATE: () => onDuplicateNode(fileNode),\n\t\tRENAME: () => setMode(\"WRITE\"),\n\t\tDELETE: () => showDeleteNodeModal(fileNode)\n\t};\n\tconst dropdownMenuOptions = pipe(fileNodeDropdownOptions, entries(), map(([id, option]) => addProp(option, \"id\", id)));\n\tfunction onSubmit(name) {\n\t\tPromise.all([onRenameNode(name, fileNode), onRenameDriveNodes(name, fileNode.id)]).catch((error) => {\n\t\t\tconsole.error(error);\n\t\t}).finally(() => {\n\t\t\tsetMode(\"READ\");\n\t\t});\n\t}\n\tfunction onCancel() {\n\t\tsetMode(\"READ\");\n\t}\n\tfunction onDropdownMenuOptionClick(itemId) {\n\t\tconst handler = dropdownMenuHandlers[itemId];\n\t\tif (!handler) {\n\t\t\tconsole.error(`No handler found for dropdown menu item: ${itemId}`);\n\t\t\treturn;\n\t\t}\n\t\thandler();\n\t\tsetIsDropdownMenuOpen(false);\n\t}\n\tconst iconNode = /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"relative\",\n\t\tchildren: [/* @__PURE__ */ jsx(\"img\", {\n\t\t\talt: \"file icon\",\n\t\t\tclassName: \"max-w-none\",\n\t\t\theight: 34,\n\t\t\tsrc: customDocumentIconSrc || template_default,\n\t\t\twidth: 32,\n\t\t\tdraggable: false\n\t\t}), isReadMode && syncStatus && /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: \"absolute right-0 bottom-[-2px] size-3 rounded-full bg-white\",\n\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"absolute top-[-2px] left-[-2px]\",\n\t\t\t\tchildren: /* @__PURE__ */ jsx(SyncStatusIcon, {\n\t\t\t\t\toverrideSyncIcons: { SUCCESS: \"CheckCircleFill\" },\n\t\t\t\t\tsyncStatus\n\t\t\t\t})\n\t\t\t})\n\t\t})]\n\t});\n\tconst containerStyles = twMerge(\"group flex h-12 cursor-pointer items-center rounded-lg bg-gray-200 px-2 text-gray-600 select-none hover:text-gray-800\", isDragging ? \"opacity-60\" : \"\", className);\n\tconst content = isReadMode ? /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex w-52 items-center justify-between\",\n\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"mr-2 truncate group-hover:mr-0\",\n\t\t\tchildren: [/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"max-h-6 truncate text-sm font-medium group-hover:text-gray-800\",\n\t\t\t\tchildren: fileNode.name\n\t\t\t}), /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"max-h-6 truncate text-xs font-medium text-gray-600 group-hover:text-gray-800\",\n\t\t\t\tchildren: fileNode.documentType\n\t\t\t})]\n\t\t}), isAllowedToCreateDocuments ? /* @__PURE__ */ jsx(ConnectDropdownMenu, {\n\t\t\titems: dropdownMenuOptions,\n\t\t\tonItemClick: onDropdownMenuOptionClick,\n\t\t\tonOpenChange: setIsDropdownMenuOpen,\n\t\t\topen: isDropdownMenuOpen,\n\t\t\tchildren: /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\tclassName: twMerge(\"hidden group-hover:block\", isDropdownMenuOpen && \"block\"),\n\t\t\t\tonClick: (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tsetIsDropdownMenuOpen(true);\n\t\t\t\t},\n\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tclassName: \"text-gray-600\",\n\t\t\t\t\tname: \"VerticalDots\"\n\t\t\t\t})\n\t\t\t})\n\t\t}) : null]\n\t}) : /* @__PURE__ */ jsx(NodeInput, {\n\t\tclassName: \"ml-3 flex-1 font-medium\",\n\t\tdefaultValue: fileNode.name,\n\t\tonCancel,\n\t\tonSubmit\n\t});\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: \"relative w-64\",\n\t\tonClick: isReadMode ? () => setSelectedNode(fileNode) : void 0,\n\t\t...dragProps,\n\t\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: containerStyles,\n\t\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex items-center\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"mr-1.5\",\n\t\t\t\t\tchildren: iconNode\n\t\t\t\t}), content]\n\t\t\t})\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/folder-item/folder-item.tsx\nfunction FolderItem(props) {\n\tconst { folderNode, className } = props;\n\tconst { isAllowedToCreateDocuments } = useUserPermissions();\n\tconst [mode, setMode] = useState(\"READ\");\n\tconst [isDropdownMenuOpen, setIsDropdownMenuOpen] = useState(false);\n\tconst { isDragging, ...dragProps } = useDragNode({\n\t\tsrcId: folderNode.id,\n\t\tparentId: folderNode.parentFolder\n\t});\n\tconst { isDropTarget, ...dropProps } = useDropNode(folderNode.id);\n\tconst { onRenameNode, onRenameDriveNodes, onDuplicateNode } = useNodeActions();\n\tconst isReadMode = mode === \"READ\";\n\tfunction onCancel() {\n\t\tsetMode(\"READ\");\n\t}\n\tfunction onSubmit(name) {\n\t\tPromise.all([onRenameNode(name, folderNode), onRenameDriveNodes(name, folderNode.id)]).catch((error) => {\n\t\t\tconsole.error(error);\n\t\t}).finally(() => {\n\t\t\tsetMode(\"READ\");\n\t\t});\n\t}\n\tconst dropdownMenuHandlers = {\n\t\tDUPLICATE: () => onDuplicateNode(folderNode),\n\t\tRENAME: () => setMode(\"WRITE\"),\n\t\tDELETE: () => showDeleteNodeModal(folderNode)\n\t};\n\tconst dropdownMenuOptions = pipe(folderNodeDropdownOptions, entries(), map(([id, option]) => addProp(option, \"id\", id)));\n\tfunction onDropdownMenuOptionClick(itemId) {\n\t\tconst handler = dropdownMenuHandlers[itemId];\n\t\tif (!handler) {\n\t\t\tconsole.error(`No handler found for dropdown menu item: ${itemId}`);\n\t\t\treturn;\n\t\t}\n\t\thandler();\n\t\tsetIsDropdownMenuOpen(false);\n\t}\n\tconst content = isReadMode || !isAllowedToCreateDocuments ? /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: \"ml-3 max-h-6 truncate font-medium text-gray-600 group-hover:text-gray-800\",\n\t\tchildren: folderNode.name\n\t}) : /* @__PURE__ */ jsx(NodeInput, {\n\t\tclassName: \"ml-3 font-medium\",\n\t\tdefaultValue: folderNode.name,\n\t\tonCancel,\n\t\tonSubmit\n\t});\n\tconst containerStyles = twMerge(\"group flex h-12 cursor-pointer items-center rounded-lg bg-gray-200 px-2 select-none\", isDragging ? \"opacity-60\" : isDropTarget ? \"bg-blue-100\" : \"\", className);\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: \"relative w-64\",\n\t\tonClick: isReadMode ? () => setSelectedNode(folderNode) : void 0,\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t...dragProps,\n\t\t\t...dropProps,\n\t\t\tclassName: containerStyles,\n\t\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex items-center overflow-hidden\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"p-1\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\tclassName: \"relative\",\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\tname: \"FolderClose\",\n\t\t\t\t\t\t\tsize: 24\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t}), content]\n\t\t\t}), isReadMode && isAllowedToCreateDocuments ? /* @__PURE__ */ jsx(ConnectDropdownMenu, {\n\t\t\t\titems: dropdownMenuOptions,\n\t\t\t\tonItemClick: onDropdownMenuOptionClick,\n\t\t\t\tonOpenChange: setIsDropdownMenuOpen,\n\t\t\t\topen: isDropdownMenuOpen,\n\t\t\t\tchildren: /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\tclassName: twMerge(\"ml-auto hidden group-hover:block\", isDropdownMenuOpen && \"block\"),\n\t\t\t\t\tonClick: (e) => {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tsetIsDropdownMenuOpen(true);\n\t\t\t\t\t},\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\tclassName: \"text-gray-600\",\n\t\t\t\t\t\tname: \"VerticalDots\"\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}) : null]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/footer/footer-link.tsx\nfunction FooterLink(props) {\n\tconst { as: Component = \"a\", ...restProps } = props;\n\treturn /* @__PURE__ */ jsx(Component, { ...mergeClassNameProps(restProps, \"flex cursor-pointer items-center hover:underline\") });\n}\n//#endregion\n//#region src/connect/components/footer/footer.tsx\nconst Footer = ({ children, ...props }) => {\n\treturn /* @__PURE__ */ jsx(\"footer\", {\n\t\t...mergeClassNameProps(props, \"flex items-center gap-x-6 text-xs font-medium text-charcoal-300\"),\n\t\tchildren\n\t});\n};\n//#endregion\n//#region src/connect/components/form-input/form-input.tsx\nconst FormInput = /* @__PURE__ */ forwardRef(function FormInput(props, ref) {\n\tconst { icon, errorMessage, isDirty, containerClassName, inputClassName, errorMessageClassName, hideErrors = false, ...delegatedProps } = props;\n\tconst type = props.type ?? \"text\";\n\tconst isError = !!errorMessage;\n\treturn /* @__PURE__ */ jsxs(\"div\", { children: [/* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: twMerge(\"mb-1 flex gap-2 rounded-md border border-gray-200 bg-gray-50 p-3 text-black placeholder:text-gray-50\", isError && \"border-red-900\", containerClassName),\n\t\tchildren: [icon && /* @__PURE__ */ jsx(\"span\", {\n\t\t\tclassName: twJoin((!isDirty || isError) && \"text-slate-200\"),\n\t\t\tchildren: icon\n\t\t}), /* @__PURE__ */ jsx(\"input\", {\n\t\t\t...delegatedProps,\n\t\t\tclassName: twMerge(\"w-full bg-transparent font-semibold outline-none\", inputClassName),\n\t\t\tref,\n\t\t\ttype\n\t\t})]\n\t}), /* @__PURE__ */ jsx(\"p\", {\n\t\tclassName: twMerge(\"hidden min-h-4 text-xs text-red-900\", isError && \"block\", hideErrors && \"hidden\", errorMessageClassName),\n\t\tchildren: errorMessage\n\t})] });\n});\n//#endregion\n//#region src/connect/components/form/inputs/app-form-input.tsx\nfunction appToInputOption(app) {\n\treturn {\n\t\tvalue: app.id,\n\t\tdisplayValue: app.name,\n\t\ticon: /* @__PURE__ */ jsx(Icon, { name: \"PowerhouseLogoSmall\" }),\n\t\tdescription: \"Built by Powerhouse\"\n\t};\n}\nfunction AppFormInput(props) {\n\tconst { control, appOptions, ...delegatedProps } = props;\n\tconst items = appOptions.map(appToInputOption);\n\treturn /* @__PURE__ */ jsx(Controller, {\n\t\tcontrol,\n\t\tname: \"id\",\n\t\trender: ({ field }) => /* @__PURE__ */ jsx(ConnectSelect, {\n\t\t\t...delegatedProps,\n\t\t\t...field,\n\t\t\tid: \"id\",\n\t\t\titems\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/toggle/toggle.tsx\nconst Toggle = /* @__PURE__ */ forwardRef(function Toggle(props, ref) {\n\treturn /* @__PURE__ */ jsxs(\"label\", {\n\t\tclassName: \"relative cursor-pointer items-center\",\n\t\thtmlFor: props.id,\n\t\tchildren: [/* @__PURE__ */ jsx(\"input\", {\n\t\t\tclassName: \"peer sr-only\",\n\t\t\tref,\n\t\t\ttype: \"checkbox\",\n\t\t\tvalue: \"\",\n\t\t\t...props\n\t\t}), /* @__PURE__ */ jsx(\"div\", { className: \"peer h-6 w-11 rounded-full bg-gray-500 peer-checked:bg-blue-900 peer-focus:outline-none after:absolute after:inset-s-0.5 after:top-0.5 after:size-5 after:rounded-full after:border after:border-none after:bg-gray-50 after:transition-all peer-checked:after:translate-x-full\" })]\n\t});\n});\n//#endregion\n//#region src/connect/components/form/inputs/available-offline-toggle.tsx\nconst AvailableOfflineToggle = /* @__PURE__ */ forwardRef(function AvailableOfflineToggle(props, ref) {\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex items-center rounded-md border border-gray-200 bg-gray-50 p-3 text-gray-900\",\n\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"flex-1\",\n\t\t\tchildren: [/* @__PURE__ */ jsx(\"label\", {\n\t\t\t\tclassName: \"font-medium text-gray-900\",\n\t\t\t\thtmlFor: \"availableOffline\",\n\t\t\t\tchildren: \"Make available offline\"\n\t\t\t}), /* @__PURE__ */ jsxs(\"p\", {\n\t\t\t\tclassName: \"text-xs text-gray-600\",\n\t\t\t\tchildren: [\n\t\t\t\t\t\"Check this options if you keep a local backup\",\n\t\t\t\t\t/* @__PURE__ */ jsx(\"br\", {}),\n\t\t\t\t\t\"available at all times.\"\n\t\t\t\t]\n\t\t\t})]\n\t\t}), /* @__PURE__ */ jsx(Toggle, {\n\t\t\tid: \"availableOffline\",\n\t\t\tref,\n\t\t\t...props\n\t\t})]\n\t});\n});\n//#endregion\n//#region src/connect/components/form/inputs/label.tsx\nfunction Label(props) {\n\tconst { children, className, ...labelProps } = props;\n\treturn /* @__PURE__ */ jsx(\"label\", {\n\t\t...labelProps,\n\t\tclassName: twMerge(\"block font-semibold text-gray-500\", className),\n\t\tchildren\n\t});\n}\n//#endregion\n//#region src/connect/components/form/inputs/sharing-type-form-input.tsx\nfunction SharingTypeFormInput(props) {\n\tconst { control, ...delegatedProps } = props;\n\treturn /* @__PURE__ */ jsx(Controller, {\n\t\tcontrol,\n\t\tname: \"sharingType\",\n\t\trender: ({ field }) => /* @__PURE__ */ jsx(ConnectSelect, {\n\t\t\t...delegatedProps,\n\t\t\t...field,\n\t\t\tid: \"sharingType\",\n\t\t\titems: sharingTypeOptions\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/form/add-local-drive-form.tsx\nfunction AddLocalDriveForm(props) {\n\tconst { register, handleSubmit, control, formState: { errors } } = useForm({ defaultValues: {\n\t\tname: \"\",\n\t\tsharingType: \"LOCAL\",\n\t\tavailableOffline: false,\n\t\tid: props.appOptions[0].id\n\t} });\n\treturn /* @__PURE__ */ jsx(\"form\", {\n\t\tname: \"add-local-drive\",\n\t\tonSubmit: handleSubmit(props.onSubmit),\n\t\tclassName: \"flex flex-col gap-4\",\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"flex flex-col gap-4\",\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", { children: [/* @__PURE__ */ jsx(Label, {\n\t\t\t\t\thtmlFor: \"name\",\n\t\t\t\t\tclassName: \"text-sm font-medium text-gray-800\",\n\t\t\t\t\tchildren: \"Drive Name\"\n\t\t\t\t}), /* @__PURE__ */ jsx(FormInput, {\n\t\t\t\t\t...register(\"name\", { required: \"Drive name is required\" }),\n\t\t\t\t\terrorMessage: errors.name?.message,\n\t\t\t\t\tplaceholder: \"Drive name\"\n\t\t\t\t})] }),\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", { children: [/* @__PURE__ */ jsx(Label, {\n\t\t\t\t\thtmlFor: \"driveApp\",\n\t\t\t\t\tclassName: \"text-sm font-medium text-gray-800\",\n\t\t\t\t\tchildren: \"Drive App\"\n\t\t\t\t}), /* @__PURE__ */ jsx(AppFormInput, {\n\t\t\t\t\tcontrol,\n\t\t\t\t\tappOptions: props.appOptions\n\t\t\t\t})] }),\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", { children: [/* @__PURE__ */ jsx(Label, {\n\t\t\t\t\thtmlFor: \"sharingType\",\n\t\t\t\t\tclassName: \"text-sm font-medium text-gray-800\",\n\t\t\t\t\tchildren: \"Location\"\n\t\t\t\t}), /* @__PURE__ */ jsx(SharingTypeFormInput, { control })] }),\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", { children: /* @__PURE__ */ jsx(AvailableOfflineToggle, { ...register(\"availableOffline\") }) }),\n\t\t\t\t/* @__PURE__ */ jsx(PowerhouseButton, {\n\t\t\t\t\tclassName: \"mt-2 w-full\",\n\t\t\t\t\ttype: \"submit\",\n\t\t\t\t\tchildren: \"Create new drive\"\n\t\t\t\t})\n\t\t\t]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/form/inputs/drive-name.tsx\nfunction DriveName(props) {\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex gap-2 rounded-xl bg-gray-100 p-3 font-semibold text-gray-500\",\n\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\tclassName: \"text-gray-600\",\n\t\t\tname: \"Drive\"\n\t\t}), props.driveName]\n\t});\n}\n//#endregion\n//#region src/connect/components/form/inputs/location-info.tsx\nfunction LocationInfo(props) {\n\tconst { location, className, ...divProps } = props;\n\tconst locationInfo = locationInfoByLocation[location];\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\t...divProps,\n\t\tclassName: twMerge(\"my-3 flex items-center gap-2 rounded-xl border border-gray-100 bg-white p-3 text-gray-800 shadow-sm\", className),\n\t\tchildren: [locationInfo.icon, /* @__PURE__ */ jsxs(\"div\", { children: [/* @__PURE__ */ jsx(\"p\", { children: locationInfo.title }), /* @__PURE__ */ jsx(\"p\", {\n\t\t\tclassName: \"text-xs text-slate-200\",\n\t\t\tchildren: locationInfo.description\n\t\t})] })]\n\t});\n}\n//#endregion\n//#region src/connect/components/form/add-remote-drive-form.tsx\nfunction AddRemoteDriveForm(props) {\n\tconst { sharingType = \"PUBLIC\", requestPublicDrive } = props;\n\tconst [remoteDriveDetails, setPublicDriveDetails] = useState();\n\tconst [showLocationSettings, setShowLocationSettings] = useState(false);\n\tconst [isUrlValid, setIsUrlValid] = useState(true);\n\tconst [hasConfirmedUrl, setHasConfirmedUrl] = useState(false);\n\tconst [errorMessage, setErrorMessage] = useState(\"\");\n\tconst [url, setUrl] = useState(\"\");\n\tconst [debouncedUrl, setDebouncedUrl] = useDebounceValue(url, 500);\n\tconst { register, handleSubmit, setValue } = useForm({\n\t\tmode: \"onBlur\",\n\t\tdefaultValues: { availableOffline: remoteDriveDetails?.availableOffline ?? false }\n\t});\n\tuseEffect(() => {\n\t\tsetDebouncedUrl(url);\n\t}, [url]);\n\tuseEffect(() => {\n\t\tsetHasConfirmedUrl(false);\n\t\tif (debouncedUrl === \"\") return;\n\t\tfetchPublicDrive().catch(console.error);\n\t\tasync function fetchPublicDrive() {\n\t\t\ttry {\n\t\t\t\tconst { id, name } = await requestPublicDrive(debouncedUrl);\n\t\t\t\tsetPublicDriveDetails({\n\t\t\t\t\tid,\n\t\t\t\t\tname,\n\t\t\t\t\tsharingType,\n\t\t\t\t\tlocation: \"SWITCHBOARD\",\n\t\t\t\t\tavailableOffline: true\n\t\t\t\t});\n\t\t\t\tsetValue(\"availableOffline\", true);\n\t\t\t\tsetIsUrlValid(true);\n\t\t\t\tsetErrorMessage(\"\");\n\t\t\t} catch (error) {\n\t\t\t\tsetPublicDriveDetails(void 0);\n\t\t\t\tsetIsUrlValid(false);\n\t\t\t\tsetErrorMessage(error.message);\n\t\t\t}\n\t\t}\n\t}, [\n\t\tdebouncedUrl,\n\t\tsetValue,\n\t\tsharingType\n\t]);\n\tfunction onSubmit({ availableOffline }) {\n\t\tif (!remoteDriveDetails) return;\n\t\tprops.onSubmit({\n\t\t\t...remoteDriveDetails,\n\t\t\tavailableOffline,\n\t\t\turl: debouncedUrl\n\t\t});\n\t}\n\treturn /* @__PURE__ */ jsx(\"form\", {\n\t\tonSubmit: handleSubmit(onSubmit),\n\t\tchildren: hasConfirmedUrl ? /* @__PURE__ */ jsxs(Fragment$1, { children: [\n\t\t\t/* @__PURE__ */ jsx(DriveName, { driveName: remoteDriveDetails?.name ?? \"New drive\" }),\n\t\t\t/* @__PURE__ */ jsx(Divider, { className: \"my-3\" }),\n\t\t\t/* @__PURE__ */ jsxs(Disclosure, {\n\t\t\t\tisOpen: showLocationSettings,\n\t\t\t\tonOpenChange: () => setShowLocationSettings(!showLocationSettings),\n\t\t\t\ttitle: \"Location\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(LocationInfo, { location: \"SWITCHBOARD\" }), /* @__PURE__ */ jsx(AvailableOfflineToggle, { ...register(\"availableOffline\") })]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(PowerhouseButton, {\n\t\t\t\tclassName: \"mt-4 w-full\",\n\t\t\t\tcolor: \"dark\",\n\t\t\t\ttype: \"submit\",\n\t\t\t\tchildren: \"Add new drive\"\n\t\t\t})\n\t\t] }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(FormInput, {\n\t\t\terrorMessage,\n\t\t\tonChange: (e) => setUrl(e.target.value),\n\t\t\tplaceholder: \"Drive URL\",\n\t\t\trequired: true,\n\t\t\ttype: \"url\",\n\t\t\tvalue: url\n\t\t}), /* @__PURE__ */ jsx(PowerhouseButton, {\n\t\t\tclassName: \"mt-4 w-full py-2 text-base\",\n\t\t\tcolor: \"dark\",\n\t\t\tsize: \"small\",\n\t\t\tdisabled: !isUrlValid || url === \"\",\n\t\t\tonClick: (e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\tsetHasConfirmedUrl(true);\n\t\t\t},\n\t\t\ttype: \"button\",\n\t\t\tchildren: \"Add drive\"\n\t\t})] })\n\t});\n}\n//#endregion\n//#region src/connect/components/formatted-json-viewer.tsx\nfunction FormattedJsonViewer(props) {\n\treturn /* @__PURE__ */ jsxs(JsonView, {\n\t\tdisplayDataTypes: false,\n\t\tdisplayObjectSize: false,\n\t\t...props,\n\t\tchildren: [/* @__PURE__ */ jsx(JsonView.Copied, { render: ({ onClick, ...props }) => {\n\t\t\tif (props[\"data-copied\"]) return /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t...props,\n\t\t\t\tclassName: \"inline-block text-green-800\",\n\t\t\t\tname: \"FilesEarmark\",\n\t\t\t\tsize: 16\n\t\t\t});\n\t\t\treturn /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t...props,\n\t\t\t\tonClick,\n\t\t\t\tclassName: \"inline-block cursor-pointer text-gray-600\",\n\t\t\t\tname: \"FilesEarmark\",\n\t\t\t\tsize: 16\n\t\t\t});\n\t\t} }), /* @__PURE__ */ jsx(JsonView.String, { render: ({ children, ...rest }, { value, keyName }) => {\n\t\t\tif (isString(children) && isString(value) && isStrictEqual(children, value) && value.length > 30) return /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t...rest,\n\t\t\t\tclassName: \"inline-grid\",\n\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"span\", {\n\t\t\t\t\tclassName: \"pl-[1ch] indent-[-1ch] wrap-anywhere hyphens-none\",\n\t\t\t\t\tstyle: { maxWidth: `${60 - keyName.toString().length}ch` },\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\"\\\"\",\n\t\t\t\t\t\tchildren,\n\t\t\t\t\t\t\"\\\"\"\n\t\t\t\t\t]\n\t\t\t\t})\n\t\t\t});\n\t\t\treturn /* @__PURE__ */ jsxs(\"span\", {\n\t\t\t\t...rest,\n\t\t\t\tchildren: [\n\t\t\t\t\t\"\\\"\",\n\t\t\t\t\tchildren,\n\t\t\t\t\t\"\\\"\"\n\t\t\t\t]\n\t\t\t});\n\t\t} })]\n\t});\n}\n//#endregion\n//#region assets/home-bg.avif\nvar home_bg_default$1 = \"data:image/avif;base64,AAAAGGZ0eXBhdmlmAAAAAG1pZjFtaWFmAAABaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAHBpY3QAAAAAAAAAAAAAAAAAAAAADnBpdG0AAAAAAAEAAAAsaWxvYwAAAABEAAACAAEAAAABAAAJPQAAPlgAAgAAAAEAAAGIAAAHtQAAADhpaW5mAAAAAAACAAAAFWluZmUCAAAAAAEAAGF2MDEAAAAAFWluZmUCAAAAAAIAAGF2MDEAAAAAGmlyZWYAAAAAAAAADmF1eGwAAgABAAEAAACvaXBycAAAAIppcGNvAAAAFGlzcGUAAAAAAAAHNgAABOgAAAAMYXYxQ4E/AAAAAAAQcGl4aQAAAAADCAgIAAAADGF2MUOBHxwAAAAADnBpeGkAAAAAAQgAAAA4YXV4QwAAAAB1cm46bXBlZzptcGVnQjpjaWNwOnN5c3RlbXM6YXV4aWxpYXJ5OmFscGhhAAAAAB1pcG1hAAAAAAAAAAIAAQMBggMAAgQBhAYFAABGFW1kYXQSAAoHH+q5rOchUDKnD2dBxZ9/8BAACAAAAAAAAAIIAQDpANjM3er78Dq01Fkg2gH1lc/jHuiild+jsAtSz0W9cBKVSIwKLiZJpq76pc6L0HZ/VldCWd71eZzvrPcmO57OLMett03UeJPm0vJRDgyLsg72RfEKZltYc9g4O3PtUr/BnbZ7fcrSWjkAvFFu/g/RGLErTkMDn2QHM6elhJpEEl8sn3xU6peTfCwAhA2/IdPBwsYnqWIPfV1GxE1PFcLX/yWpLYPFrcxTLVQXgAE4YLeTd1MB21bilGe9C9gkJQslXMbT5bK3qq7vU1heR8rkx4YHcDbp5yryg8Thg6pELGGn+ENxvbO/ZE1agFgB2Mzd6vvwOrTUWSDaAUCDhPkyJ13/nQT6/w/wDnYE6RAccismY5zIomPya9YJj0erdlcB0t9ycLkgRWRuE1T+bn91cgPXy256/Kz7XW5rIhyy5n7H4/1ngX9jrkz7awN+4Ow3tjIuXVL6BLBECYeAzX7smY5eMAlIMvnYxSNdWwgKj4BLul4jSoPXFlWZlD5HbPmBRpG+DPYgkWIlHkABBJclz+BzMauJGSSMLuFZEl6UsAO3D6SQJodPk8N5nF/fcYKoLgHKIPI2kdBmPCIohJS9aJTrrZ3U63Ll7IBuzDzocDr/RyOUrBFMvh7cmNn9McHhSpYLg07WlbgbQV/XpZ0yxY0iU7cP9gGokmJkbqpWt2Hu5VRKUhCq17cX9VnGw7qkpl5HB9dw/0zQ1DXJ3JaSKBhuNap6Nqdh1vKbTOojCNR6cN1i6C/ChF5PhU5q8gbDAnXRQYGAnADYzN3q+/A6tNRZINoB9ZXP4x7oopXfo7ALUs9FvXASlUiMCi4mSahQrAZunUSa+IxE0uHm4HokK/yiVyYVs7u+OPnaQGubcLi9uPXsKUmGuY3FdpQYJUdsQi8mSinvLX5UrtUjFQmN4pZcyBQZ6DMawhl70/VfBDeDMz8KDTU5OiQc7jmtBaKr4s90/CjArVcqtpAi2aA+cAwGwVuwSgDYzN3q+/A6tNRZINoB9ZXP4x7oopXfo6/mS/HHmLea7MXY4iox7Jq7etZv0mn2s/Q1VFbxYBkwEh2P76a3eRBO9nmU/RgHUOz2NzDGANjM3er78Dq01Fkg2gH1lb9+XFjOfjL1N0yx8yTujQOHMxkxKpAs6DRfMKlHjGszRy81iTexPCQT6S+u9VU/E2qwb+lW1u+0FOIEph2C7zGPjHx5lUTBFFcXXIoVX3oUko619KVHRy/3AJIV8mRygmHs77p4VR2hQ64jFvTgLZ5vqy6Xb6+gN8zBG7azKORTxj+Q9GG2XGhWf9hou7WOnD8RZaJsxvueFFDfuAsBGcN0yExT69KmYZfFOLMjbsKk1tnKaJTZ+OBiAdgDs3HSLCeRxKID5TRJ9jv+9FO171keXSepb1LIV6C04PpYvE0JWFceZzZkb4a9sQO0KFbqjxc6RgnGzLeAC18mBU1Oeg6To60Gv8SFOWJEXXTd0JOChN7rSL1H1EER0oXpTG315jA1L7/nDbKaCg/mk7qAk4iTmo17IAjUzB+nnvPpSNnNP9Pt4fI3fnAc2pPNegEy5UZjm3knbOqhGwPiHCGIRhifKKKrfEdc9ronUHO2RQ8I5BOEKd2p/wtZgX01r9gG1cjF8hFRFYqH5ZGw4N3rLpCvyR1rAmC4+8SC7sPfx275gTXKZiEuA/SDMQqh+K21zL1xmHFzb6DLUD8iF4d5D05OSWjXBRHSRLJGleKJLdph5JtY1aQ7fHLZsT1sfDlAwDZcHadYysVbuYdl2pxsVqz+uErfPoc/r2OMmdK1OOYJF6BP82f+eaqHZ+/+kjkxXf7iz/Z4s+CgDH23JPCUAdjM3fGAqj55B2D9LCYv27G+WE7zF16vKvpykbSfYFpmz7xXkNo/HJO+R9ROewJVdQ8dosgYQexLzW9h+K3FspIFziO4aXAh/ph3jkiGrPegnJU8f+slNDNPBHNVrXkWrzDFtTavb02kJODxceO04ti4P5NrRbxuLKjIRnyBptPcpAEChhCRI2QCsDU+irR+m9lcsVFjfA4cszjgJPypEUFzQbQi81QQ+cQ7HiOj24T15OUjA0t55tXEuFjrmzT6NGWYFo+dVr7Tpt1bWZYPvgTE/B+vo4l0ksD4xe+LibHjbst/gEY2nDc8k9qqSXbRddZnIq3cWaoZLll4nYdwkGsgi9VBd06OwLBMg8hRABOzoBA6hrjd8z8NDolVfydZB/x+ubXIy3wyf8vewK1ZQ/U6xy3IIkiyJRGzb6CVgOug3TW3ZUJBWIXn2R3FU5yECjTNS1La0A6HdjqptKks6oTYjtcjEt+K4sLf/HCUm1BnkR6BLC9zKDUGyyi8vSFGF94Fi4H0S3kSbSqByOaDfGxJ68cg9djM3erM7hwF3/xlEV9K/cBkSoJhjFBveRC9gbpKxq5vH9IiRmYEPW3uRohhudl0KX6YuOVKfqdFwkoerlq6/ueRQb1SdiWFOTgmQ6ZjHRlT55Xo8ty+WzGU0Mp4qqtrFP5BSzE3xNy0vnxd8w28wGl17y9R2CnXoEr9Q9utYcsAi/nxNh2Ls0d0ZJ8UkYL48MOy/pl8XWiPO9Yv/RIACgo/6rms5yEBDQbQMsd8Z0HTndBDSfo/6A/4BAwCEAAAAAAA////BAD9CtiLbTF6MGnA2g4ZTel5XASHWdpgkGsz9ipEztRr8bMss+GziHkVUF/Cq6mrK43OofgrD9BdOqGiHIS9nvcSq0HWEOWI4h5Ok74ZtZXt/rMCoc4H2rgqAaZ/pLmdeQ+IxTJgVKa7VX/f4RDONrYiSd5SmhHJNBp34sTt7N0L++A5YYN8E7f1hjoNpC3tVfEDGAuILmVBmGwPvNbvMFiv0F62Ew3XE8A72CKqzn0r2Hy8JXWolxQ9F/TknsglszEjf5ff5VqEjWMG9QezqEKVvP57s5leu+MSX5isCCoVSK0nyjsj6dvh/Jdyly5CP9IXPhpJhdjmqR87TZmSeKjmcNfqUsSJHku5EA0XbGRu1r+qvwx2BL94w5zI0dxK9JRxszSdNVifyWp6xMFrSz6evx6qil1bsopJNJGk1eapmaqwDNAqmMBrcDZBQJ8OMr/pEBmy8bpKl1M+/ptWyxyRCm0guh33Hux4XOwmhFhhU4/SVXFjMgAad+SkmNhgJE+R3DtDATy+c0lie4g2r4Dnu110rcCuX6KbNSRIJB7zz9eDCWq09P/UW2n02W60M1LcM6Nt5kgEU+xjiFmCDLSd/65ce1DeZ3+2lj7w6LJVKqsXUd63P2L458nxztfa1xvX9gKQsj6xCtbB7POWoSL4rVF/zmcLtZPKXcDWOn+C91acn5zLCyD72Qig0p9RZBclBjItGcs4phyKKBIBSPfari8hPQht9qYKfJh7BjgHQ6Q00q8Vy6EviTD8NNxcOUBssZL5YuwZ5v/ehgbV4WmRIQwoPP/D29Xs9Cb2b8c6lfZi0nX5fYHPjQhz7hrRKzrLPoE2A6pzujSX+lU7xFakCDPMKtMP1evrux1TPSOvogNfDo0y4C12RdORRh2KJ6rJBKEfm2qkUue13rtjOFcaHmNOk9IrqO7k3KTxBFhmHG//87XgUQZuLNexf29rCcvC2gZ3j4Y0OJvFZO7T31syiOI+H42kiylspHzQXhPAHc9pSLYG1knxh/kO1AuLeaZeUPesu3K/E9kp46+F1V9FR97Odsitb64gy8FP0juztrIIYHTiU+3zydlCKO19h0VuL5fPK5UMpvYx9/PM4/0lx/dPK02OOkUiMuTDH9YPbuFxGU4cLrf40nU0BHZPl9gZ0n/W4Zc22o4uvRbt+uuRP+QcG1pJMrKGyRDO9gyzn1b2KkJSlwKqw4ydzstNB0C8EcSnXrdptlU4GUmn/6YIUkcfOW8EvB1e0HSAnEtNibDOh3kC5y5+u1TFsYZDGwXe3CZ4g45eXTIr4MGasiT5nLpk3AceMtrzQXXct4q8Or4CHNYwse+wlx4778LGsT9FQrqYxOm5bJV7XzFfPmg4CR4ezAKRIIzX9b+SNZrDNtx9K2K9gACPgm2fkCsvbEDT+gTCrFXRO0RML/4De7l3IXBTXyQuxU82qMfnK0Z4RD1I3CCsRAAxocjD/eVS1SJWe+Le8g41uDR6/8R9IxsZS6ZCI5wjFteKez10q994j3rQ40Cbq6x4PHEGE/3DFKzOuBaYlnaLUSGcmEOSuwqH3UQIwbMi3aDurU27NGbjbGIdgyHr65SNozkd4rKqGQOvE/MeZXOQQuAZ6aDqderD3PvyF7uAHWjeuu5pR/7YyJQ0++3Wp2K4oNC/nDK7MkVcdwsPSzzSxvOS7/6KZHaIHCryHN1E0rx5DVuxJ/LSWdRvaXnkGcVFqq6JIgWPekveoSKfASZ4yPRiXfJWQkt3DJEehKSUWy54HxGlWTT8rx+VEzOVc2Zg1z39NTpBNvhjJaaCCqDlgnXmPvFl9gz/jIHPJ4XQemVh5tdvVUUWb1fPmrXtcdI6CiA472XHDraQ0YvJcTxb+F9TRyiFrc/uiwaHUnkKKq5jz5wXhUfP2gU4M1iSb4g2KKfxNEchos7CRNTihiXNfrnU+95AlMF/YoZWA6Z6XZaAaVowJXejv8+m6Ee2Vwf+KtTk5q7MWars00xA6F8uPZt+HfGXmGNfIYXkyXTh3FJiRlJJTfCP3KX0oYuxku7z1Bg5eE0P/YSZcyxoCBftxqQyBn2qKi93WlYl1UuNTL4aVRur8EVb4gYjyFhtvzIXZZRstEmyLzM4BbuwlD/+VRbdj6WPxaNiMOUmSpemG+pH56kN/tPZJTR4UyCr8y4cQ6sqsyH2uBY6GAouoO5kT2T72jUUt6De07aBWkbH6AIlZ9wWWAa9H+we5gjL+aAkgyzRp/dHzoX6ZAlvngDv27CbPdd+HpFc4SKVVuT6VLWZPWd4XJrqB5KNT8nSxgi0HVuOyxYQooEkL3GY3u40oCkS+leoiFNX+pxhlIsCD2pCWpUJQGafQV3Vq5+whGHh3rdTEDpRvMDsS+Wfb9qYXvy/RW4Xs9jR6kcsgIIb+f9FxWC1ZJlLEZYgVO5F5XNB2gnxlVmGdlayQQdcQZ2mWuFy6IJY8T2YPbWzDLU7esekWKYH9GPVt+F7zVTI7npRBhzWRuObbMhrcVXLWDT6cNSNHPLQnAJW7VpA9La0z75jKlz365qawpE0sMbcCt5M3I2gbALhXKqiq3GoZ7vQSLLgGk9u1oBsn4dq1AUz6E8fT1L0PhmSiIuy26KElOOz0hmYjXEsPpPlkohYQk7UUT3VL2wzBij4ro9ig2ZeGk67kXokFLeIrw3eS0h0aAYIWdOpPiG/0oI/5kBZUZw0mo41NmC8O5nxVVDEg1MmSmdiK9N9YyGVzjwggXqo0S8Hr/nAhp0/fPJl2yYHvOSmfEzUdO+/fHoCsJDqS5bJCMFl6CKbvoET+u9u0AOWYaMn67H9atL8V93OkbK9aPpFozcwMMmnorT2PwunFWD2M08415wX9z1Cry28Tm6Mr/P66J79/MokGOBEMivvmge/CRGhAIW0WiAJyGZjiLc443JGgpDlIQMydlexCD7UKY6R4EWUsvkA8Teh5dtQkJ1w8MOk31ObfXH7nZt+f/e42F7frhsVvVAEUdlGuM5IKUP+3P4w3pw5xz+71bGVIJMDSVCUsriB9K9QQk9rUHYpzWFBCa1Kso2zIwd53Q7O+lZz7a6ik+f9bLjDLy5p6so8j1ZNGEZnhJm7aEKUZVF8KM3889pK/r6bSmKnB+u55gU6sRKcO8yBoEAdfbaoQnE7M3gRSNKf14R001ATRXyaWgymok1tIWLyHQA0V08opIJ08ViT3EUA4mRRdr/YpGlhZk+sG5kFwIGGt6hvj3RfskQXGRI9BWVBSs2fO5WF+0JZwRs/RApIclJuRoUcO0pFJ5ffYWyXs2kBhUuInBBwsX8bNSzjfx6Ll4kgFmhChnyXdUf9RmctRFL6Wbun8exURz97iqb4xY1u5nFi+oPmZOAcokqzeWF9qoOg2vG1Xl6Oeyx9qLuYO6lapXDRVBKha+5MLhaBEYKDrD4GUUtP43FXUd6l2e/Kj7PBPhX0XF6hp/Y+HrEBCR/Ncpij9TdwCNF/itKF/5d5DkJ5PtKuKVeYjjQGPOKLpWyrvanDUnVAodjcupK2J8+1LwM4bSBYiMxK0vYRzcfVXR5iSURQitNtJbhYfbkX0sg5R3ssl3mCLucGQeaI8ickiG/HRa+rSXaEIckjiAP/5BgtdI+UsdhhLLqrHcnXhc1O/cEaAw5Mvcm19iBWU3OBoPDQC78LhfnZqr4PJZSKV3skHNnTgziwSgzy2BBunno0rkttMZwtYkKtrOZgbR4ii7deef13/Z24RSQcqXwXdWtBa9bjzxsF05YoCTadqQgG3U225QBzjkg6I2mJVEH7peSft6tKdHIaSZGLESg7H6yFKfGdoI3yobOgdG8ty9JMiIiB5sQIQnE6s+yEEvZ5O1MUhpmo7EpVqQk49BRpuuOoacpCHeok9kVyeG0wUxv9gLv536v6pDBw8vwOkRMHl/7oWsV/1PCkrNZr/oEgTIB1/XNitBrg4q+h/c18/cJqVu+dZV8ScYy+RQ+LLbqL0DC2C5nxrcBzZ9jfJY/OBgZ7oiGA6bxo6u/bk8i4Bs9TK5UHKldXiI9XSAsO5gfSHUCVGVchwh2YdJ6S7tcHi1JEocSRfREhrXldPR9RqVI2bvCBLfxF3e0U+WX9+Wa6csrFIr2OTAWW7wvGyQUAA1JXMexYExEzsHYLvPosHDRsoMDda0Ngh2DlbH0cDo9COL8aL286UN2WMoeWWGGrsgciovANJBbdumrGmY5Wjhdd1HmGfaYKxbmsNT4WaTHBQS9TwAwmTv/eL0hO/Lo2r+Vorvus+U4txYT7jH54hjxSpQGBYyPjQlTbr0AGGnoTG4WKsyjONb5iGjkBQbSVvBXFn9RCkQhVLMpmG7VAGzk78bFyFu0qFz9L5av8e9TTdLF4W2BWsKEjnoLLDxZ83IEs5Pe9OY9q6d1/2yC/KgA/ZPu1TJVGVL083cdgSd49NJDPgA3x8uqc9kahQrxYUEuR3vObmHhbZnkfVRtCAdW+43xnlq0VwBNd7YAH4+5tbCvAiCLDh9qEK4cavFV+ioZec7MkThvT0h8G1O2MLZ3vXvcQmOgV9rXgpS/5fozLjsdRwcvc0itDaLBngFj2P9v6Fs+amXEkT++YhMJbFVVVkw6KHRISnbjObsWW7DAm+V/PzEFv5XUgpROGdDaBntux5Td1/loxsEinJEld/WacR937i5hfXetWQAHMp40vGEeIcBZ8W8IGuvacoX/s4Sq2UqKU8VkIHFDnBOy06B37jfKklbyW9HCahq8tFT/0ldQvnAfAeXVNWfY76QGLKrO42jNvarEBakPiexsmPcWNxseWu7mkTSsOO6GCTPADYu6TkxXs2SNsMI/gpqQkOdPvfe2qBt0nPuuyDqoU5M1jFcPtyRRlDJBpoY3GtReKPc9i8F4V62QkLHqjH2KmQA9BAeLGdcnxiFNWvkvCwf1Pn890AlxlivTN5Ds8cARGrLv+3jIKNNY57osU9mvKJ6f5TanRSogEW9L3c8hZySmWvCjCWBxLihz2TQ0QOrNcnfa42+JWSB4OrfAexKT/aHhhIsGAlaDI1FxYYnmiMqYL79tvxXSR3R3EqVLONvNH355xn4HaqQxtKsB0ImSSGvHuoqHCnWUVslieG0x/2A7Mr5lJoB05qNQSQCLJX/KSFRpfzrN3lXI9UUQXjGeoBBvgDPS7mYL/o/dUINT+w5SQJYT9qrU2zGyhrNMLpetBNQS9KpU1gvoS6R1aG789FBNFAQx7wMmZ1oItJrrJkmh368a0jwJAu5wQt88kMYt5iSECzzojuZTxHqenFip29JgfyVURI6F+8TSPNdNz9TEOW6GOpeDCUaeNq+0CKofrINReSzGBiVby18p7oQRmmy0WODMcJn1UkX6YnMDL3zsFdd/uRt5il6yNfjK+LufknanhndlLFiIrnCAePHVtkn+cPzbX8tAfGk+w2H8SH8Dx+uKUW+bBwq6mO8FLzFz8Q/kJkbOHbV5kmxWebJ6h5eUOYc7t3Oz4Z3bQJsOxND2qLVm3dJ3E7FWzCTMAxAgrYHnFOW5XOHFQpMARau3S8djp3bCDGO2FfKw0kLpZ4biRxs7uYtHpU1PBlsTFYBWIPT0PSTovmUvFH+61bJj61VnWN5pTnj5SMXWqAeYGb3IHb4H/tFqYun/1Go1S6YJ1fP8ckvUaGw/7bauI+HQROKLS86zxUjS5azA49z0aa9U3+6WvnUh38uOyzMYwXEcFOnWKYSuy9yZ9cgDAJEyGwnYlR+bdoCvHGWwoyM4lnsDjgnGFpy3OZuuq4IIc1cMwahlBfzLyD19hMLbJAAZ3Wx+ZY4hzlC0K/jjJfm84NKki2H6ZV7x44azAJQrYi20xejBpwNoOGU3peVwEh1naYJBrM/YqRM7Ua/GzLLPhs4h5FS7RFX2UKMCnpQt/M02oefIHX0fzD4vpa0IXCH0/r55RFucHpFWVNXXfK+edD0nkxRPLuSTP+4c/9/eCyLsvsKukRAHK1Bb75cwvgxK+8cRBVERmdCWZ4tTwmB6EGdLF+GqP6iz1h/SsjK1oO49gJWOoPXM22D8+ufLlL6jchcRKlMMwMUeHiq+Kpu6sHrtD5ZixRvn2wgtyyyw3p2daRb0oL57zCOfLwf/urkDitYsF8pBqYASLg8suFHqxS2+74mpWpmp+eV2pjzgbLPalhHgM3c1Vl8/aIGr94cXetruBti4LzZFqQhL8wtqcXfBvB0Lkp3yaYuWiHMjrCYtbg7JwvToRmWXDejsWwB5WPjH9qdWomLgAv9Uragmud3deNQ10+jCVBv9XhOUBzqA3mRc8LGkKIpJewsBDAoWdpE+EFQnrs3zt8U2ex7BGhVlEQgwTV2VqSj1u43BmCK6JGnGoaQ1DrNbp0DTZKefvlPfUjb1i16a8RKsPTfeC5FX7NkFG5lRV8GvUbbjrLZY78NEP7gAmCagzEYB0j7TiOS+U72tU8wHIh6TqPjZp9V/ORCADZ4IyqvI6oOmAd5yZTwGuX0d36CEG4XTuNXFWn5hQ9IersGDK/lsxesrHEuwKW/gNPUnWMuzlrbNDYFcTWuRvF5Hj7XtB+1/yudquA05vH3FbxbfdAU/Gt1xUgYlSUWAS0YR5wWyR3lUaqcRpM9xsY1jucJStCzm+oTQRWcGYD0R4eb1W79qmQtfWw/5OCU6moLSnyfRkM8kzu3kIv1r/VGyuRkvHJEt09MFB/uqSB7FecCcBXyiKHFoFhvcMINiJJ+S1x684GCES2UnNQBtw2M4qEjSuZ5mLT7qqwzMNk/ElspUwQ5JJwX1OH2U0NGUIm0lZ72k9OsIR4h0abktZfeyTpXGxR48CsKWURh3L2qtlYwHOqoGuoTVuFjyt7dDj12/z8Ebzn0bEcg32V8M3J8I3F3yhAKk0+kBxNPMYNh69gkzAxf4mEjrCwJIcwrnqvYdUhPUUf5Lj9sn6yK7/o1+YpLodsy6E+OMfs9L9Qk8ax8k6sPOtXUx5SE6zvlxcVY6qgjruFWtjhEJrQbT86LB98SeZo0DDuPaxYG3PA1w45ubdVgKOr25bA/rSpToZ0R6TmlAk4caYNOLh1tj+HOUAtGLoVpL8cKKcODM3Uav8h0bRw5PRtboIXsY7tsIt2xd/MWs4wVE937laMdeQ8FLxNa1/mk7wj6fTEKQQQpOVkQfyt4AQ2Lk2rilIaz7eICjl0q45+npkkiGXvY4yE+D/MBIsQBbwy89Gz4iK75ThAf/zoNPC0fbQxdSaNAZIkgheIO6OjII4awmDay9Jm3QHG2c/4uG/sxhrwC1XGB+Q9zMD1zrVfO0EDeNQ2PEoygWG8PBz6yceztuLeBXYBZ78ChtDM/Psuxzg1LjP8Mk0hmxZ7aadphM9geVMfWiV+1cU41YF5xnyQn5+ZRUQ4GEtG6CPYE8UywjDCKgjlS79IvsvhlOaRqVOiFEQYZ7WSHBv80Gm4kDi+jECK9TQYc9Koh/m3DLN0vWoiaoponDOWfBtZ9NJQAOzO1DN59rwE+rkL5H9Vzgkx1cUgIUnPMIDnImDIY+QI1NMCO4F5mvMK62q4gVfL6A4SCLCoAv0KJUd/DjWzBKfyA67ZcLrBvTQTXcAAokni+3fevOIIvBTpFprOKAuD8zhUMUUcM680Vc9yjsuqhwavR7qtdFtacO5/UvmgPE9/nk5s12ibTHx6iIa6uS7npjnBMs4bIeHmHjQ4Qyn5918cIvt6L6zUU41RfTCwgTJlVDQ3PEO4v+dnP+nkyeTbPROedqugs/5wLohJW4cVtajTtY9vry5FexqWwcirEWLdxYDzwiW6a1y97COT9hDceCH2N28hJGfnckPVP9D6iO8rPUKER0A85BGwrXDE3pN7lNAa5jQ/F5TRReBhhpdAN5bqBxrBRdwfLX9v+jzLoj2tTPv4uhWfNkbZAaV5HsSe6dKZb9aqBU++LYV+iAUEA2SRFO4HQdrPObFb0lmaUge6YNIdUoxVUkCX0tY/srF5UwLfpIej7iOTTq+1BhJGtjYqPpTD4kOUlCuKwwwydSePG8oVlltMtFUpgPfSI1381jNnM+5TBTUb2pCpF3WjeC+rXZgjkB1LWspcOxRZZFtbJA6REDoTUKqJzTQYLdXSMUyLAnMEHsdgbytN5rjibsRTJtisI29Wu932IVNvFSLryOg0KbxjnKuPj4wfh+ZAjD9EVnUSH5uLl/g+qqca1wJWuB5oDlVq0CfCRyVKKGZ5DzTVcp6PAzTxb4Xgv7Mbx8Km8fl+w/OcacArCGiSewQv1LJ9A+am4vh/ErZBPT0tZHhKxI0YboOkOKoneXWxvB67mLid8z9yuQRmKVXpP27glarSu4/Nv5g5shiVyh9nEzqj6cBJlnDVJIaYdEXobg/gSD3zAc4FP4t7/1AqTQ1lNSPvKGoN3aR+yXTyxJdh6BKhlEY1COI59Hy0ZrKTkeYVtg5UpX5XqzbSnZoKUtyeSrOIG6xmMVeSR+HtbzZZsibJ7icgU18zvuogQQVf4jRSWrOQ+SFijshW8YutVfis7TjJGnB5Ltyj2qKnf+bS9A/6l2+R9RmKssvN3dZBRmy90NXz71i2r6BI2xmUUw87rbQn5bwyBBzkTqQBY7ri5/4RB45pMWnjb9qHfgv+wmVo+8S66Mg/65IaM17Sdm0dtE9/0vAhqeGQ/QfB0xsoHCXvxpJ+zHhQ4qQZ9aEitiqd47o0vYHxcNatWw8m73nku8HBp/CVJFcb/VSL3qHHwj+EVEaPjOOzHlQwCDOO1AAuMnR6k2yI5RJMGPx+G5pGVh5RaK8K/nK6zcN6uqW/axvEATjG4RmssgHWR4feEwCrGSQxkyMQJj4GtSCG9fNIx83txygH6+kBOdDX5v6DR8+KHpjbTDOxH5176YMQ3MpBTJ9xrbW1L/yc51cmeBb04Po+he6WoRIhUGCBtxJ59NdqmnrCj7g9NjfSTDZMLB09LYo2gV4awHoZYX9rsSCRxcHTY5oJhoYKZTv7oVzQh+Oni1bKHXwJZm6VaWV47KGW9JlbnvQmFgD6aP/ZNXgrg9nhjG6nSmK0SVvBcsFKL3QiCpgACMfoCtPRhg8HT42Felwyl24mdkJKdgawJOxzb8EYW0WvBQE7n9lIHQ8+7gi5sbIJeJPZNwgDXvFo2Ew+zLwBMd70yy4I4bepEL80bomqNO6mp0KrSFz6eQKCY2Mz81zdvYQgiMPnJbeFyA67ZDRp7qzV9IpApg+3hvglBZHcO0heL0aHyfaavsXzj9d5cm+g6mXjOfMOHF5WY465orr4qzauTC2zIDgPzOEmHGzyYG2qT2qhG1OlzPl7JqiCdh8BdiLbTF6MGnA2g4ZTel5XASHWdpgkGsz9ipEztRr8bMss9RDHLV7PJgUQeTSBBAxg5LL+Ynls2DD7tgzp7cyxj3GgyuoA1/SkZBiplmTq1RebPpr2hTeU05Rin63Ru25OUFlOVxlbSIlG1yjJHmd1qHvP47tTC+gTQjW1CzcKU95iGVk2TVTFPKM0p/TngrCIZCM0Bio0i5RljDncOPvC4KaXCYHAmOc/n8reEw5cvGUKzmY3tvrlaraC3wNxL1e7SAPU9HSKWGHQF/V82irP6g/UeQOvA54fKfSKYQUQhYlXxgywsIFu/SKZe/jZ6IESACUUEEJLZwBk6W63Wv8nRB/cy+SSSEW6ucSsy2PX+sqoXXJcJBRnxucW9/xOkM4JqRqcsNQcZOF2ZiRNvewHycTDh4PX04n1cmIoHn3/GjdYwJy5O+xCmIWzyoZWoEdaZ3PV26l3Q3Ory5VhR4sH6l8IKYIO87fyjfmVKjCpcQAA6Rljb0wakGHGxC7CmiXkEYUFd2INxTGKvwYL8jqi8Nvtnciv/ESbicyaffKpY1wYcLguzrMUJl7y8+77Aj8VRtk5MBMzcmoTqRXqWnXMYyQbBMVHha8vPoEUM1tHvLH26AWrXBfJNURPMepB4R7xdYhoJSyLZxjYMaX3296RD2rAGSE/h7UlbXYzpf6/yzwT0+X5inGcE8DuBmVlFz5NQ6y34gHJ1J7K72XOu/7g0PiLR4nE361OkE8GoROI1F1dcwo1Q2TTwKc+kVbaZ2BJ8ZX3OLSBsIhtlAp9z3CNvC7WKy5QfKWzvGRwv0q3W5p0Y+eWjR0pm2fXFYVkZ3/FHi11+pLe+nlKyVPPwv9WW1yW07LwWuXVNgROeg1FC1g7ep7iPU6+hlLj6toroRtQsURTf22z5Y383hAdjlP5ZYg9Umf0Z/3l9imA0ZYESDinsl9CDhplM2Dl8KFV0M2mzRQlXANtoxSOzzHG8vVl+7ErUTzjum7+14Fme13XRZrRffrv1SxbHzdTFtoqQKHmQEOTkzei8/vBK4i6rElCelRvy0KeMqWT9cu5zEPbK2h95PbQo3o0S5bk3tlekRK62fubAWMzSvPJoc8kXl7KPBsusv+fjWeRizRxNu7NsgPYjEAOfwhovldu/ow52TE+f4XRM3k8nd6Vi4C/bwRaxxHuN3gNPuxkJTFSCw6Ht1HmwlFY2mk4WXKdd6fqXG1MpxBdO8rRmGKdnmih0zbtA5S4PTjFdapSDZKjq7H6lOBqPGxZXzLcgyry6GQS/KQPVtUCThZ4mToAKx3vZ9U8BzpeRLIOGsCyEiTf5o3eH7YR69yc6M+UjG7AUyen3A8O+ISUqsEzw8QQlejuF5wPQSimBpBrWdkFqqjDnt4Jh0DycGj2RR1xd7TeSM+buuE8VXfuIwPZjzZtQEUrK8KGUUjxF7PdTh/M/eIO4pRMozaOFytz3ZsUozVZ8qSB7a+t2F6sqP25UT7fkB0GdS8cSpHmcHDfADRJLsgWoAF6iSQaUUB+ueHIWVw+Y7Db0tkWWUW5WXcQeDyCMh82k6FNkp2qYwNStgNDSgSnoQGevoqR8pyOrPpnZ/83nmPE36j7IEFAKlq/h0QsC8953wbMrgrziHWe9of8Phpnv0ke2btCp6jySNobs8rslqer2UBg20VmGs78OXasF6Y6o6IT12eT+JmIUjzb2HFPdACj3s9g2peoO1jnJcpjofAdUNvQLl3FSzr9v+xuILHrUN/kwrjlAs4/DX+1Q59JyHYD73sBeOBUBFmruggzcrsAh0kM+fj79DD1k7SuMsY/q4JIPHH5z1gCIQiN4wWaRmAcZ4UQnjnx8qAWqCgr5RDoLN6bodHFMfEnYhpY92C9PgxCNkeFGgjJYTtT7zCEF3EzTEcmH9GaSgW+Xe7cL9ayDPHJTo9+tONtFD6Ck04mo2gsk1lyRbwttSkphyd3+TuqP01YvymSy6ZUVqX+ds/yrYlGzHulD+jqwm3kIR1+E/T9N7kE7jk7EZYAqAevCWF2DsL1UBdRVM/3T5Aki19X+UMoBRGOzsvf/ZJMuAFfpKeBC5bhc2YzwBwCEQwYwFvtqO1NQgO6snU7sBSR3QgwIueJK2/srKc5MM0XiMDt8AY4rbNt/SOkqMfX5n0jbqFRzE8eUYvYGTLwdCmMt6JkWGSSYdJJxbn3JqxpDM5g/izOi/kIra8A3NCszwiIHBQMzKfb3uXkc3juSYc1lLfHri6DRTEW1qidGB5eikqF/V/dQcq3/HBo1oD4Qdqr4VSnRtxQJkH4+MU2iXTPBOXtpgu6CuoOFCMcF8UqIQxNLT3WrcEJ71s6csUNOVZd2GojvAhV1EXSchobSqjql4nUYg/XbGihTRv7vkjeStNcSKXBSWwNveQa6/fqm5vMWryIm+rgZuKgswnQbXSudK7+tPTrKPd2yk2NqFv9hsSjbUEGJgFPjY82CKiYrAo/OLaOJLdd857MkT43dvbnJfF2uqAeUF1wZ9Qj4K7AV2JBh9jqduq4cfB3/xoB1Drg44l+R1R2hyzUR+/GgFhLHS5mX3e0+vATGIXMwqidbFjhdqq5W7vHVONHgm4/eixS3o36UhVYne3+vj6qluckrav2lnCeNUSMp9snQtOHvpDyxqZVm7Yusr6njADIGOS0ijemEIURXimqv5QirpUFllrucy0OnEiDtZS5PJn9QZxcr65Qn9yC2hXPMX6V6S0r9u/60b7kv1kdWB/gPp9DR16Y2/sHAtdFuw1ymQ5m64o0Te2cDKZiUkgnONaQPjFVo4VMbZksH7EJcGqduXrzwSif6e87U95+36MCUlNiMoSsutyWwIeCXUW1djhYeeLGckTRNUwg2VYrXqWF62XIuWei+TRLadgiDTyEERxL6wjPZKBt81LWz190u0gGS8qe6yNIE1siGr+yQfylx7X8mzWMWH+C/qdaE4RZ4TqNYahh3ngPt4bBnmBMYbPtiBCSatb8lf7QMKimqmcKznTOOOhwVu1hatsyiWSkrcJQIJzYZNpuBs5L+EN3Bo5TFwloGUWWcOm08xJvDTp3SeUS0kKAVwuy+X3oj5RsUO6PpBs7UZMQYAGUXexQQMXvlclp1TMnkcQD+j4tegDDux9WjNqZbpg50Igr8ThsrDsOfFSi5d3jMmJfAcGtiBbWd+/h8ZkOjNxpRPSSa2zkl03NmDYymIjHUvdfnwxTIq3dpkjN0GDvDX6KqUpUZcTb7wapyx2LNdUGf0MX7VwzivsaKTLPDKVo0npicmag5MVieYd1f3ZUlt9WNvobjpLN9iWTSw0m1A5iOZN+1wTnrnluFbffwzDdDzIYvtDNzaAxNjUZzHOSKopIbnWKZrkz9K9970HDEuSIdLhUgn6l9WC00LucUAzoUZLUq/F8GxkY+36pbo1TI2QpiR6hi03DM7903vgM8aar0veRTW3FeVS7py/eTVcB9ujm2eU9SaQtMn9O+URnNeUtbJuwL/oWL4twOhuZS8kzE5rK7xORXNdJ810ha7FxVuUH2jRhLxw59CTYUUXzVIbFCa5C8RiWvNKSmzqgdSQvL4Nzq3jr6W88SDUJ1a7EGsa/6iXctJuhLxPoW/miv1iVqCGdijvjwvs35QILnLu9IP1GUCvTv1RWB5+lQ7eybe8p9c/jgAjo+EzFtyMb1jmE2FXoHPfLBt21PbAhrIBQwMdulFH5g8yMBuhaAbdku36yKWYyj8iNnVsJfjB4szbkAJsZrHLZqNPXrWcnrGmTctW3DTN+Rm9v3ativIW1pf4lQrk61vpJ73np4tHS35dLswgUK3n3K/2DzlKeXmNAS1JBfRGQmsgKi5nDxzwQKky9+qj2rAcPQblvWP2chunHlk7C0C56qSgc2WEXCu9doUIhBhuPTVpmo2+Juzr1h1GQmhfFsHhSXVFbHO1PV9egZw0J7es5jNaXMtfo07wwhsxWFO6Hw9cv0o9SQMhn7JuxpJYBCprsbLqIEi4zE5CRgTiZgHUL9V+tY8EouC3KKpNHjpPGVAGO9VX7/7JZRS2p4kBFXt//QoX0ULB8UHsQYPaapaGo0rsSqj5FcjoTLpnbRcwYlnkNYQRFo0oxOD2+yM/6N/xn1BkLWHi0iCQT6YdLHpmcnBm+Lrv/JofwOnOQAwwqtok9cmPYO5cun+hXmqUWGEWE2a6PNIB2YotjDELOD9yConuA3eZstUuQ8szaXjoWf0FywthmRVXgVLQSzzfjxSSfyox2wYtotLwe23wCLXP/487q3b65AspI9mLXTRN/pYmYSaeXllnj5VJ1Wv1MipZwkJEhinz7GdTg232PREFatr/aqfJ0rELGqMglEP9Gi5zAgEF0XggrmtZ+71xkBKA3ZSs3BT9bpVKkRQPTMpMBA4QL69d1i0ZET/q7S069DyNU/9dqeZxG299SzNTfGCOuUX+vl8xeGAEgXJw04rJOoe8fufv9145Dtwjwqg3Tk9MKCFX1e81NwMkitc7pvSiWAtydOP136F9az3l6jfymzz4cAvCRtqc2x1/O157xp1f/NJTH6gyfg0ArfAjy/URBXC7IGI4+E64YKSAoptE7WYr5J+tNzH1TSuQ67gykNka69KCBEJUSveaBmU9+sEGsma88OiPgzIlGqfLHhAthjSxXbWnclPD9eYsnB6qoDcFhsZQv49owRABBNiLcQj8bYwqR+JIZfZkqHvQI4uMXQF/Z8pIy1Et61IN4LoAiikx9ygxg1S9ct4J1/zhGFTAG7d8Y9h0UNzhpkPiruyBO8WnPyQsVE0nDfC1S1zET2chIrXF6z9CJQIhdD7cuJRN2nXclZmcQlPqVkBlKmbHWhP86S9pGSm3vqV29z926IgwShMF8e0VM/E+7ezawbwhq8Q7mzCuL5Qcjlc1IUlwiy6GqLFB78PNJUU4fpKtscbuQ8BA8hnEPlQcrQ6rVY7nZFcQNH4C9qggSYb7EWTaqOC8ok3tGtqq4jRmk7Jj2Tj7sFHME/r7nsX8nE9KbaOF2Qj284woICH8Htfh05Dh/MWYuH4bp6XIlkL7zxdijLaBHpP1430v0gBnSpz2a67vzLfHSKAdaXcS95tUP5cKxw1vGMbxGVwqxygvHM08TY+UDMXf92pbQjTIsaYqcxGscVuOQ2v2zVgbq/8xXJHfIPtpeAzL2NkrUd2JqK2MfL4fwzEqBd4Uy5mT5iyvOdW978M00emOmP3qgncMdmAXZ1dRsGxX9m9/4z9RFRZ0hjlZ6zLfyA7+Rr1OXmFYTO09rCxg+yLBTs/nj/VQSVzkkI7j0I5gj1L6n3h+ybxWZC+tZja9NJm7DZv1uKMqJe+gNMa5jvHG6i1UjYf+OJwKykC56PUHBaUIPWJMaE7NJb0BQXlK1r3jMfsXp7Z0HITDsQrpLEpo1PmhoUZma+N0edZuPyOFs0iRJ7Jou69cDkqmlkc6JXg6oijA8TnJXet4C7SYb+aJYdiwi1XeMa3wBSIczxQQAhnRt8hxbi9g6bzyhuy6ez3WgpJkM1kBPCn/HQxysZGpFtcTFFBI1cEM1xG63TbUN8Fo/ermyvaBhH9iDM+2fTE/RjcwTRjWmeLGdfpkLsQufWcR9qs5tySQ257fVypstJdqUE+QIJQyPLsICX3gxTHZZ/GrQHA9chKOgUKvoA52Xyvn6fo4yYE8A+x00C9oPbL5xvOHfByT/b67yCo39EB3J1sSgU5rv8CuX6Chop1Xb68FK+lJSweHWA5kRTPqMBcmFWyoips4YJvZCi8OUNVRpjkO6KnSAg619UWZhJxUnG+Dp6iWO47ySqYUjO1GZ6PeTsDU93pRgCXaKsjkPEj8k22ESujjYShOdVG0/E3PcrTh53yt81MM6STis/EA4Fd/gnRFvp01o+vluLVJFE3wdOApRUyqgCFeiJLQSrZ6paEWwNtRi9xqLbC03iwX/HsNbHozOOcr5WrD2sVGisDpKMGppCmlfEzMFTMv1oUKUot88I4+k0+haEn1Ccbmeud1cCpEujjT9TO3bAgZN7FJPmDH+w6VMy7N6wXUXyCht7gc4M8NGPkG2ItxCPxwTm2SkWLsKfAGeGndWmR6qZaWQq1AWrBzsp0xPYvWSS21poUNn3/PBwIDmkIbeQHT3gaMSr1WPEXzKM1Ziflg45+lL+2w05XIdK2WMC/hI3d7VjrW+8xXra8Sr6fSdYjaCYub2hsBMr7xuvAyMznv18e65Kj6n2S2TCd/KylcvPj52jIp6fXzeTow+Y+uHXtYcNlJZ7tpX4lEHX2fEIYQiEY/RFXbajNJeWrWw/m8UULRtug/gQ+UP5Ap5ew/Pmj8twxduHVKbMHYA2Dmy6qf/9dDmvOR0lcdjgLwhr56VNFCSJIGAG1XLWyedUvKJCLWYhJa7SWlUpOvfXURI+B+FZu/+hmjd+hsmuY0dVWDWxIpMK4MHpZ8qy2zTyIZh7HrNIU7qSjVlSJgVa4NKl1oQWXZkLe3AdBJsbpIqyvv7vu2J7IVqgW4xbQ+TbIjF6XgrC1fVDwsl8UeMbPTmuoWbDSPmEMcKK4oyeYH94LouO9XwMQZC0rD9vr1tI2Xi/pgxorUxIKH+F/k/nYrW6OF0cFAO/YPT+N/cHRbQZ0CbO8ZPUXusWFBXm8CfDb52ASVmx7V6Z030N+xY58Oxt/mzdEfiufgmchQE2Prgpzsva/coDw7Rb1GllYFxQQcU6wMImynQkcBXqkZxAoAtgaOS4CN/y56cm22qA2A/MlOBxYyeuTxvYw60Ouar8PWC0TL6jYcmvdZyJstTKbI75K/0mcWBsuh69G+cy5o85ND3os3QZybM3y5BWHX0rSRkk95GSi9SELZvR8YZWF07AOHFl/JBOJx6Y+QYWg1Z5RBmSoa+bnDhDfQlzUwFUhyxiswr4C2VshUsixnfkg9gQK3UQ4l+Apkk21eNs0nlssJ58r+iuUtOWJ0lN6oEUDxt6KnMmdn25cXUqDjagujCOmQ4VM8V4DwjgoMwtV4aN72PYjATMq3Lf49fmGyQB9HFynOa+j0nV/t9MT7V8ZhlhJ3r8yhyJkxKpUdO8pBVQHxAV4sf0RJWusw3r7zVjldr0ksQdcR21HM22w+MUDD1rhM80VYhuJnxQEjeqVwcMXDmqY0gPhTqsNkjt18FABbZ3WOIUzVEBiEYlHBKR7+kOQGuc1rz8c09FHr5kv1GzOmouHbqUQafnZpZVd6tUu3tc73gm/gPKjVSYLUMZX5S6WPVaiHXmzxUNbopygRwvO5BaKMWyf07abyCZuPcolfx/ol00CtyXphYBbF2g8bHHxZQxwSjyRg53e7PPqzLDxf1OeR31MiN1B9Bb65ccDS+nQckbgRMLn70Hlf8MItXPAKq3my/vDS+tDfmYwsetRFLf2EqvSoN9f1ioKwO1WtLBc3a0GNN7IcG/XnmsRIyZK9E58cKP5VtFXQD5kfqtNozj6gSLW2+m4v1I9o7adSGJWgLD4e5d5PtCtghFmuEYaC4A13D5w2E5/0sRSoV6/xeIDlspQosZF91Tl3BatLmsQ6C+fmEj6C/WizzlA3kHOzPm9IgtmdgzHaN/QAqo1kg6jpL44CRQypm8ucYBz6rkoqalA+1c8PqvubBOh+7lAeNX6RgoivOwofV7IUQD4IeBBpYO/FPKGfnJ4Rwm+ROgxrrnIDFMSKvGKemev3/6p1FfTl733MBW4N75AoLw7P2b0tPgwBMiOQF/PuE7/wJ5bRUFjU5GjpS24az/1OBCzFyH9do3ofs+bopZWBTuNeWBq75qjnQfbvy1ttjqrx5MvDwn+wf26de/5g4zg4uALx1lsakE9IJQfIkZQErlcFacLf5tGFysE1DGwvvANjHUmf3H7LhVH+6T3f0Ozo6jkxqVXMko+HdhtXo63M1ZovZKNmY3VwxKon/PFmrlVn5wQjT/QigPvMClWV8iAVyBWKggf0Eii1dcBHclYYNQwlG2rpb7V7km5vHkq3OxvU5MWhxqqxdifCVdGmpIro7WG3T1Ln41FTDCybNJwo9ShWZtH4uhFIuAFUa4skEQhKk8fN11WA3y8iqIACNTpOdqVdqvJZ3XSrO1fmNP/hlHwThfPIinT3MPhNM88RA4C+tkgAXVm/Na0B5Xu2It6A8JAGzkiNjDmXfVvunetIzoUorUUGXV0SatrblgqpuXDvs4HwkbygGPb/VnbNXW5Q9EUbMGVmXQN2qa6JAW+XQKRCrJwWrHUs66Vc8Vc9NLy1wb7pqdnDemLGEsXrGuO4HOPqBXmxwDLWGbNt+qENWK/rLEewlSNz7pvXE1LwjmV1azZG+8la0uDlS8x4XRvYhR3FPSsOfwA1dl0q5RY0ByBsW5HmohkC5IYTt6uPhRa4JfVgV+Wgnssvf9/skqrjeyME8rtSEvajM+XSQ0Kz59KawuJFxm5NaPJWoBeOBmxR7hum/GRnYNiLcNgASP1EOxya0OQ5FC15iC3bYUZ1QpMR46ztanOhfvfdDCVABSkfe90GcIShlcwTWoPcmfvdIo7BSpxMhHYTYzS+nd0Po+71l1lp1xlAnulTRzl+mNMr4SAkI7MO1ZsWpu84H1/8OU5j/ake8po1Bb3fNpX13N58m6htYMpH/NSuLZVYrIAFjHVGj2jVQCyWZS5LZ/jsf8xV4bz/ZDaRUVC2CUz46DztMzob4DGzgZrPeLQt77yuvoyevkATMJJ0bPvr6RcMWO32oAKzWPogTRCyfajyPzuk/NHHwKrFzGav72K5AtOmubDKyShnl0+XXqFGIr8mSLrAvFieGwqYSS0uX1i//UlU4FVCIQCkyVMrENlnW/tjuM6XhIWHf+aSgYunSOabTqsQEH43b0D5qEw2PCaPdNGBOYV8RrFTXe8uBh7gsKy9Dxu8njNUAmfc7ci24yu/8bi8gSDylsVl7CRUoGm5th6pdH2k6PhZ0Pnh4mWsl0D4hal50M+eCDEjuSgyO4JJa4yHD5WDFXA0e69NRBFzCU0nLjwc0ZIi71Z+taUkdgus2PaD/K2DOab3y+j7lRz+BsH3vx2pFrdeoTNN5CwlqBZ16QwOqzfqfqeXNz+x+xoMvVl0vakcj6S2ABBV0DnrwJ+2R7n7hqSau7Vz6u2LHI7AC/5rohyi9z8jRMQ3ZPuKGhCXmqfSs2gMAprQ6tOjI+WGWJ29vbDDe6niY/P+SQ6LoaYn8a9PcSI1fyn9jEaH719xTukrV1sTJrGc/9tXK8mNIOfO3me1ouzOzn3ALC3RTBa/8qkACYgBQZdoHjsFo3dJQvjLXBNrTaIW3jj8jas8SkqjDY8pwW6ivl6qbhs4xyFZIoGpr34hYl5RLaismENqHmsflsejb3i0RBdXIlvqDkAd+mLfgcMayGx7tFzk0gks7ECJHO5hnJRNXKBE2CUyCpBrOdyI9RFL7G0QOcbWCfoVWLGHpD4shzSnASDXVPHNnjXB/USsK/GL9xlOSgbqVbyk4KXuO8oDzgFE8SH/aY3KBJfZvfG+hmq5UrmRiAmWE8Rj4WcqPR/aJk3+CMdBgKyIxbswDr+IcbrnCArSugxSI31eKASlixj8GODIFMzTj6HdqqO61xvITj2cKsuQc0is1mFTMW0eX9cRwD5M36j9a45Hlxkr//qHwJltcHeyEjV4HOkKGRfGVFHJtBVlNbAwoiyoOPi+m64Xnoh9UXid8BD5vGsgIg1VhQ3pY6cpN+j+sZjJtHRqKsVw++DjpbSFjSU02CVYk+iOsIpnPaagClUmPiDuTsFtrHKQPMLXzryHSIJtT2s12ej8gZeNVhswp+gS2tm+URm5gS9bMOhwk6+QC3wyvaFCMMKSidcOUzIs5je3N3kvR7OaF/qD67ZoH06bVSVD1RFFtgR1nppbKKmbDxIx1QyyCqAk6W551hkMX4hQDjaG6N/kINOns7E664KpCgXXaj/pYQMkAgSWRO4sShYxPNfK8EAa+OGvpy1rtAEjVcs8yin2fYitVyC4wdWqeXB18K2ZJJkAXA+L8aPM1Jk9chzib67/Czo+QMJx9CcOmSIbJGUHT9gidymfRlot1LOGmPpuMqX+WxxwxnbUKA96KM2LOUUSKwt0yGDamGarMAnXvaOPc3X2uoRsxyJvkMQ7EVnleqRbLHNJ+5nv8l4nKo5jFf/iRBZVj5slGHZbje2o2BwtpdrS5tBy09czj3DKh/awINyLkWdxODNZOTP0GN2YcXyFYQdnN8sNo9XT9jdIncO8ui26ANtycig/FaE5dZIbxMEVBS7daO+E7yAwPwIEsUcx4LY1LZIJDht1ZqMhSGe9QRaMlMN/j7tlMcT4k5PvCrIl09OGrOjECmB5iYd/2ypSOprRbC4DaidfF2XiwF6ao2ldntREDC6BAPVu6tejxuYHaZaZNYZoAbEgXtfortB3sDHvh9Jpu2HT3TMLDNYe5NRjFNUrC+pZxPHcRbBej3RyKyopZ78R/81/PE1O5nR8u+IjeH4/QbPGZisYp1Mc38zfi/hvtrU5lxDkXguI/WwtHmEZi8kTVcG/nsGcVyjifGqYPrxs8DPOZHo71THJGwH/u/hnmPnf5EH99RiA5QxMAcGEn639GZlz9tGCGF5vCSC065HalCTVYEzPiqNv7Tp7UOOHWxIEmGdsYjASGm2TzA/59WDGkuwWwfoVUJaytHhcfHs//dwnlD2k92F9Oua9/jRFE9tMLE+9W28kQOqtXlnVn0hE15Evq+rFqaYQC0ACxEPbGoqYSolG1bLNvLB4ayC/SlDYM6WlP3POS4GySWdyn07VyCK0LM+ltPEFW/VHefzVfyrfJviUjS89islSCHp462WbdYbElWGWkVNFFcR/qUKBW/KTG3odLZoRl7utySpbSgbvBSn84ja+gqF+s05Ft3xHdLM7VQ/+fM9v7Mh3L8ZUWy1kpLkwBrHy1BbaIyV+26Yuly7RMFE8BugLVlxmJ+rsgFR8y+eExFoXvlbFszW8VcwkaeGv9c9voOjshtLVyWY6akL+8YfLu2MQIoPGtHFecxLmSyOo6MgbCd6Dsl1ZB4EqQygnWMq8jBjrvA6QNbzvasD01cynRoA7qdzQLwTWgKQj357ExK39wHlOmAj+RRPBM9t71palPyD2l7l/k/PaCmXhBUROgfamvCbQtI3n3FnqfJ53A+oc4ON5OF4LcNs6OlBsL5ZeHCwQgvBr5rUrWm/F63PftGJDGBypsgMWHHdmR7IqvUb1n6TzJbC5BKKeFi9B8PHESpl2I/nTKbwbOzfbpfeBMdlnpM71N6KMRBQ4jXA8EbuEfOsAzDx0OJ7cVUojNHwjrA/QiCUMGW1qjQjv+xoS7zny469PFiLKjMarkXaFKDUvIFRiPONMXoRKCoW3L7BFh1/hyu5RbX2pe6kzIDillleJ3WaJ0MpxXZqlNJvUumPNYgTIgmZh8e/nvV4sHa9Txze7FUZTqBasmN0KguMTqlcQfxsRmEqjn7E3rCqFX87DtHfEXv5WFdzygrckgwMYD+2KR4lf0Pw2pkAZ+9cn87x1hTcAhno7WptnQYSiskk/y6LiZqO/qq0CYvXoqYiKmYiV52pqNzaPF4YwVv/kwSqKhC4iUdrAvw8SnlPnqOLrXM66uLXAfdUT4IqifcyEeIt9Se9Ythdu3l3SJADD3h5wjaPHyS6wKX2LfC+KXdDl00GT5SqNqEsDfwQyyxaIvyae60N19sX7JsT8sOpVBGJOQ+xi5xe58nk20gX1xTLjyVhxKrpFj9+i+DKqiyZHtl+5YcCQ0T5LDmgS9YrmcguU+lADqfWQ3jPBvdLyYJzeOoj7ZjY15F8nbpiFmXCDEdTGBzF32gTbQh+qUq4nmGwCFt2AvLgp1A45P+hNAnIyviEbI48iZr4Vf4Q9Ln2qK0nU2kTQYD6ggPYCBDFq22UGwtfjR/S/SazNG+eiboYfugbmnjwmLX7BtCZtq1FPwKc4wTAm4K3WyvI8wA==\";\n//#endregion\n//#region assets/home-bg.png\nvar home_bg_default = \"data:image/png;base64,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\";\n//#endregion\n//#region src/connect/components/home-screen/home-background-image.tsx\nfunction HomeBackgroundImage() {\n\treturn /* @__PURE__ */ jsxs(\"picture\", {\n\t\tclassName: \"pointer-events-none absolute inset-8 z-0 size-[calc(100%-32px)] object-contain\",\n\t\tchildren: [/* @__PURE__ */ jsx(\"source\", {\n\t\t\tsrcSet: home_bg_default$1,\n\t\t\ttype: \"image/avif\"\n\t\t}), /* @__PURE__ */ jsx(\"img\", {\n\t\t\tsrc: home_bg_default,\n\t\t\talt: \"background\",\n\t\t\tclassName: \"object-contain\"\n\t\t})]\n\t});\n}\n//#endregion\n//#region src/connect/components/home-screen/home-screen-item.tsx\nconst HomeScreenItem = function HomeScreenItem(props) {\n\tconst { icon, title, description, containerClassName, shareable, onClick } = props;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: twMerge(\"hover-bg-transparent relative flex h-24 w-40 cursor-pointer flex-col items-center justify-center overflow-hidden rounded-md p-2 text-center text-sm text-black\", containerClassName, onClick && \"cursor-pointer\"),\n\t\tonClick,\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"mx-auto pb-2\",\n\t\t\t\tchildren: icon || /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"size-8 items-center justify-center rounded-lg bg-black pt-1\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\tclassName: \"w-6 text-white\",\n\t\t\t\t\t\tchildren: title.slice(0, 1).toUpperCase()\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"w-full max-w-full\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"h3\", {\n\t\t\t\t\tclassName: \"w-full max-w-full truncate px-2 text-gray-900\",\n\t\t\t\t\tchildren: title\n\t\t\t\t}), description && /* @__PURE__ */ jsx(\"p\", {\n\t\t\t\t\tclassName: \"text-gray-500\",\n\t\t\t\t\tchildren: description\n\t\t\t\t})]\n\t\t\t}),\n\t\t\tshareable && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"absolute top-0 left-2 mb-2\",\n\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tname: \"PeopleFill\",\n\t\t\t\t\twidth: 12,\n\t\t\t\t\theight: 12\n\t\t\t\t})\n\t\t\t})\n\t\t]\n\t});\n};\n//#endregion\n//#region src/connect/components/home-screen/home-screen-add-drive-item.tsx\nconst HomeScreenAddDriveItem = function HomeScreenAddDriveItem(props) {\n\tconst { containerClassName } = props;\n\treturn /* @__PURE__ */ jsx(HomeScreenItem, {\n\t\ttitle: \"Create New Drive\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"PlusSquare\",\n\t\t\tsize: 32\n\t\t}),\n\t\tonClick: () => showPHModal({ type: \"addDrive\" }),\n\t\tcontainerClassName\n\t});\n};\n//#endregion\n//#region src/connect/components/home-screen/home-screen.tsx\nconst HomeScreen = function HomeScreen(props) {\n\tconst { children, containerClassName } = props;\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: twMerge(\"relative container mx-auto flex h-full flex-col\", containerClassName),\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"m-8 flex flex-wrap justify-center gap-4 bg-white pt-12\",\n\t\t\tchildren: [/* @__PURE__ */ jsx(HomeBackgroundImage, {}), children]\n\t\t})\n\t});\n};\n//#endregion\n//#region src/connect/components/integrity-inspector/integrity-inspector.tsx\nfunction IntegrityInspector({ onValidate, onRebuildKeyframes, onRebuildSnapshots }) {\n\tconst [documentId, setDocumentId] = useState(\"\");\n\tconst [branch, setBranch] = useState(\"\");\n\tconst [status, setStatus] = useState(\"idle\");\n\tconst [validationResult, setValidationResult] = useState(null);\n\tconst [rebuildResult, setRebuildResult] = useState(null);\n\tconst [error, setError] = useState(null);\n\tconst [confirmAction, setConfirmAction] = useState(null);\n\tconst clearResults = useCallback(() => {\n\t\tsetValidationResult(null);\n\t\tsetRebuildResult(null);\n\t\tsetError(null);\n\t\tsetConfirmAction(null);\n\t}, []);\n\tconst handleValidate = useCallback(async () => {\n\t\tif (!documentId.trim()) return;\n\t\tclearResults();\n\t\tsetStatus(\"running\");\n\t\ttry {\n\t\t\tsetValidationResult(await onValidate(documentId.trim(), branch.trim() || void 0));\n\t\t\tsetStatus(\"done\");\n\t\t} catch (err) {\n\t\t\tsetError(err instanceof Error ? err.message : String(err));\n\t\t\tsetStatus(\"error\");\n\t\t}\n\t}, [\n\t\tdocumentId,\n\t\tbranch,\n\t\tonValidate,\n\t\tclearResults\n\t]);\n\tconst handleRebuildKeyframes = useCallback(async () => {\n\t\tif (!documentId.trim()) return;\n\t\tclearResults();\n\t\tsetStatus(\"running\");\n\t\ttry {\n\t\t\tsetRebuildResult(await onRebuildKeyframes(documentId.trim(), branch.trim() || void 0));\n\t\t\tsetStatus(\"done\");\n\t\t} catch (err) {\n\t\t\tsetError(err instanceof Error ? err.message : String(err));\n\t\t\tsetStatus(\"error\");\n\t\t}\n\t}, [\n\t\tdocumentId,\n\t\tbranch,\n\t\tonRebuildKeyframes,\n\t\tclearResults\n\t]);\n\tconst handleRebuildSnapshots = useCallback(async () => {\n\t\tif (!documentId.trim()) return;\n\t\tclearResults();\n\t\tsetStatus(\"running\");\n\t\ttry {\n\t\t\tsetRebuildResult(await onRebuildSnapshots(documentId.trim(), branch.trim() || void 0));\n\t\t\tsetStatus(\"done\");\n\t\t} catch (err) {\n\t\t\tsetError(err instanceof Error ? err.message : String(err));\n\t\t\tsetStatus(\"error\");\n\t\t}\n\t}, [\n\t\tdocumentId,\n\t\tbranch,\n\t\tonRebuildSnapshots,\n\t\tclearResults\n\t]);\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex h-full flex-col gap-3\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"flex shrink-0 items-center justify-between\",\n\t\t\t\tchildren: /* @__PURE__ */ jsx(\"h2\", {\n\t\t\t\t\tclassName: \"text-lg font-semibold text-gray-900\",\n\t\t\t\t\tchildren: \"Integrity Inspector\"\n\t\t\t\t})\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex shrink-0 items-end gap-3\",\n\t\t\t\tchildren: [\n\t\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"flex flex-1 flex-col gap-1\",\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"label\", {\n\t\t\t\t\t\t\tclassName: \"text-xs font-medium text-gray-600\",\n\t\t\t\t\t\t\tchildren: \"Document ID\"\n\t\t\t\t\t\t}), /* @__PURE__ */ jsx(\"input\", {\n\t\t\t\t\t\t\tclassName: \"rounded-sm border border-gray-300 px-3 py-1.5 text-sm outline-none focus:border-blue-400\",\n\t\t\t\t\t\t\tonChange: (e) => setDocumentId(e.target.value),\n\t\t\t\t\t\t\tplaceholder: \"Enter document ID\",\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\tvalue: documentId\n\t\t\t\t\t\t})]\n\t\t\t\t\t}),\n\t\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"flex w-40 flex-col gap-1\",\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"label\", {\n\t\t\t\t\t\t\tclassName: \"text-xs font-medium text-gray-600\",\n\t\t\t\t\t\t\tchildren: \"Branch (optional)\"\n\t\t\t\t\t\t}), /* @__PURE__ */ jsx(\"input\", {\n\t\t\t\t\t\t\tclassName: \"rounded-sm border border-gray-300 px-3 py-1.5 text-sm outline-none focus:border-blue-400\",\n\t\t\t\t\t\t\tonChange: (e) => setBranch(e.target.value),\n\t\t\t\t\t\t\tplaceholder: \"main\",\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\tvalue: branch\n\t\t\t\t\t\t})]\n\t\t\t\t\t}),\n\t\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"flex gap-2\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t/* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-blue-300 bg-blue-50 px-3 py-1.5 text-sm text-blue-700 hover:bg-blue-100 disabled:opacity-50\",\n\t\t\t\t\t\t\t\tdisabled: !documentId.trim() || status === \"running\" || confirmAction !== null,\n\t\t\t\t\t\t\t\tonClick: () => void handleValidate(),\n\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\t\t\tname: \"Checkmark\",\n\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t}), \"Validate\"]\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-yellow-300 bg-yellow-50 px-3 py-1.5 text-sm text-yellow-700 hover:bg-yellow-100 disabled:opacity-50\",\n\t\t\t\t\t\t\t\tdisabled: !documentId.trim() || status === \"running\" || confirmAction !== null,\n\t\t\t\t\t\t\t\tonClick: () => setConfirmAction(\"keyframes\"),\n\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\t\t\tname: \"Reload\",\n\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t}), \"Rebuild Keyframes\"]\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-yellow-300 bg-yellow-50 px-3 py-1.5 text-sm text-yellow-700 hover:bg-yellow-100 disabled:opacity-50\",\n\t\t\t\t\t\t\t\tdisabled: !documentId.trim() || status === \"running\" || confirmAction !== null,\n\t\t\t\t\t\t\t\tonClick: () => setConfirmAction(\"snapshots\"),\n\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\t\t\tname: \"Reload\",\n\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t}), \"Rebuild Snapshots\"]\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t]\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t}),\n\t\t\tconfirmAction && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex shrink-0 items-center gap-3 rounded-sm border border-yellow-400 bg-yellow-50 px-3 py-2\",\n\t\t\t\tchildren: [\n\t\t\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\tclassName: \"text-sm text-yellow-800\",\n\t\t\t\t\t\tchildren: confirmAction === \"keyframes\" ? \"This will delete all keyframes for this document. Continue?\" : \"This will invalidate all cached snapshots for this document. Continue?\"\n\t\t\t\t\t}),\n\t\t\t\t\t/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\tclassName: \"rounded-sm bg-yellow-600 px-3 py-1 text-sm text-white hover:bg-yellow-700\",\n\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\tif (confirmAction === \"keyframes\") handleRebuildKeyframes();\n\t\t\t\t\t\t\telse handleRebuildSnapshots();\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tchildren: \"Confirm\"\n\t\t\t\t\t}),\n\t\t\t\t\t/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\tclassName: \"rounded-sm border border-gray-300 bg-white px-3 py-1 text-sm text-gray-600 hover:bg-gray-50\",\n\t\t\t\t\t\tonClick: () => setConfirmAction(null),\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tchildren: \"Cancel\"\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"min-h-0 flex-1 overflow-auto rounded-lg border border-gray-300 p-4\",\n\t\t\t\tchildren: [\n\t\t\t\t\tstatus === \"idle\" && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\tclassName: \"flex h-full items-center justify-center text-sm text-gray-400\",\n\t\t\t\t\t\tchildren: \"Enter a document ID and run an action\"\n\t\t\t\t\t}),\n\t\t\t\t\tstatus === \"running\" && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\tclassName: \"flex h-full items-center justify-center text-sm text-gray-500\",\n\t\t\t\t\t\tchildren: \"Running...\"\n\t\t\t\t\t}),\n\t\t\t\t\tstatus === \"error\" && error && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\tclassName: \"rounded-sm bg-red-50 p-3 text-sm text-red-700\",\n\t\t\t\t\t\tchildren: error\n\t\t\t\t\t}),\n\t\t\t\t\tstatus === \"done\" && validationResult && /* @__PURE__ */ jsx(ValidationResultView, { result: validationResult }),\n\t\t\t\t\tstatus === \"done\" && rebuildResult && /* @__PURE__ */ jsx(RebuildResultView, { result: rebuildResult })\n\t\t\t\t]\n\t\t\t})\n\t\t]\n\t});\n}\nfunction ValidationResultView({ result }) {\n\tconst totalIssues = result.keyframeIssues.length + result.snapshotIssues.length;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex flex-col gap-3\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex items-center gap-2\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", { className: twMerge(\"size-3 rounded-full\", result.isConsistent ? \"bg-green-500\" : \"bg-red-500\") }), /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\tclassName: \"text-sm font-medium\",\n\t\t\t\t\tchildren: result.isConsistent ? \"Document is consistent\" : `Found ${totalIssues} issue(s)`\n\t\t\t\t})]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"text-xs text-gray-500\",\n\t\t\t\tchildren: [\"Document: \", result.documentId]\n\t\t\t}),\n\t\t\tresult.keyframeIssues.length > 0 && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex flex-col gap-1\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"h3\", {\n\t\t\t\t\tclassName: \"text-sm font-medium text-gray-700\",\n\t\t\t\t\tchildren: \"Keyframe Issues\"\n\t\t\t\t}), /* @__PURE__ */ jsxs(\"table\", {\n\t\t\t\t\tclassName: \"w-full border-collapse text-xs\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"thead\", { children: /* @__PURE__ */ jsxs(\"tr\", {\n\t\t\t\t\t\tclassName: \"bg-gray-100\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"th\", {\n\t\t\t\t\t\t\t\tclassName: \"px-2 py-1 text-left font-medium text-gray-600\",\n\t\t\t\t\t\t\t\tchildren: \"Scope\"\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"th\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-2 py-1 text-left font-medium text-gray-600\",\n\t\t\t\t\t\t\t\tchildren: \"Branch\"\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"th\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-2 py-1 text-left font-medium text-gray-600\",\n\t\t\t\t\t\t\t\tchildren: \"Revision\"\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"th\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-2 py-1 text-left font-medium text-gray-600\",\n\t\t\t\t\t\t\t\tchildren: \"Keyframe Hash\"\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"th\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-2 py-1 text-left font-medium text-gray-600\",\n\t\t\t\t\t\t\t\tchildren: \"Replayed Hash\"\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t]\n\t\t\t\t\t}) }), /* @__PURE__ */ jsx(\"tbody\", { children: result.keyframeIssues.map((issue, i) => /* @__PURE__ */ jsxs(\"tr\", {\n\t\t\t\t\t\tclassName: \"odd:bg-white even:bg-gray-50\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"px-2 py-1\",\n\t\t\t\t\t\t\t\tchildren: issue.scope\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-2 py-1\",\n\t\t\t\t\t\t\t\tchildren: issue.branch\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-2 py-1\",\n\t\t\t\t\t\t\t\tchildren: issue.revision\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-2 py-1 font-mono\",\n\t\t\t\t\t\t\t\tchildren: issue.keyframeHash\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-2 py-1 font-mono\",\n\t\t\t\t\t\t\t\tchildren: issue.replayedHash\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t]\n\t\t\t\t\t}, `kf-${i}`)) })]\n\t\t\t\t})]\n\t\t\t}),\n\t\t\tresult.snapshotIssues.length > 0 && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex flex-col gap-1\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"h3\", {\n\t\t\t\t\tclassName: \"text-sm font-medium text-gray-700\",\n\t\t\t\t\tchildren: \"Snapshot Issues\"\n\t\t\t\t}), /* @__PURE__ */ jsxs(\"table\", {\n\t\t\t\t\tclassName: \"w-full border-collapse text-xs\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"thead\", { children: /* @__PURE__ */ jsxs(\"tr\", {\n\t\t\t\t\t\tclassName: \"bg-gray-100\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"th\", {\n\t\t\t\t\t\t\t\tclassName: \"px-2 py-1 text-left font-medium text-gray-600\",\n\t\t\t\t\t\t\t\tchildren: \"Scope\"\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"th\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-2 py-1 text-left font-medium text-gray-600\",\n\t\t\t\t\t\t\t\tchildren: \"Branch\"\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"th\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-2 py-1 text-left font-medium text-gray-600\",\n\t\t\t\t\t\t\t\tchildren: \"Snapshot Hash\"\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"th\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-2 py-1 text-left font-medium text-gray-600\",\n\t\t\t\t\t\t\t\tchildren: \"Replayed Hash\"\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t]\n\t\t\t\t\t}) }), /* @__PURE__ */ jsx(\"tbody\", { children: result.snapshotIssues.map((issue, i) => /* @__PURE__ */ jsxs(\"tr\", {\n\t\t\t\t\t\tclassName: \"odd:bg-white even:bg-gray-50\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"px-2 py-1\",\n\t\t\t\t\t\t\t\tchildren: issue.scope\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-2 py-1\",\n\t\t\t\t\t\t\t\tchildren: issue.branch\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-2 py-1 font-mono\",\n\t\t\t\t\t\t\t\tchildren: issue.snapshotHash\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-2 py-1 font-mono\",\n\t\t\t\t\t\t\t\tchildren: issue.replayedHash\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t]\n\t\t\t\t\t}, `snap-${i}`)) })]\n\t\t\t\t})]\n\t\t\t})\n\t\t]\n\t});\n}\nfunction RebuildResultView({ result }) {\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex flex-col gap-2\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex items-center gap-2\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", { className: \"size-3 rounded-full bg-green-500\" }), /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\tclassName: \"text-sm font-medium\",\n\t\t\t\t\tchildren: \"Rebuild complete\"\n\t\t\t\t})]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"text-xs text-gray-500\",\n\t\t\t\tchildren: [\"Document: \", result.documentId]\n\t\t\t}),\n\t\t\tresult.keyframesDeleted > 0 && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"text-sm text-gray-700\",\n\t\t\t\tchildren: [\"Keyframes deleted: \", result.keyframesDeleted]\n\t\t\t}),\n\t\t\tresult.scopesInvalidated > 0 && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"text-sm text-gray-700\",\n\t\t\t\tchildren: [\"Scopes invalidated: \", result.scopesInvalidated]\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/loading-screen/loading-screen.tsx\nconst LoadingScreen = (props) => {\n\tconst { showLoadingScreen, loadingComponent, size, className } = props;\n\tif (loadingComponent && showLoadingScreen) return loadingComponent;\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: twMerge(\"absolute inset-0 z-10 flex items-center justify-center bg-white\", !showLoadingScreen && \"hidden\", className),\n\t\tchildren: /* @__PURE__ */ jsx(AnimatedLoader, { size })\n\t});\n};\n//#endregion\n//#region src/connect/components/modal/add-drive-modal/add-drive-modal.tsx\nfunction AddDriveModal(props) {\n\tfunction handleCancel() {\n\t\tonOpenChange(false);\n\t}\n\tconst { open, onOpenChange, onAddRemoteDrive, onAddLocalDrive, requestPublicDrive, modalProps, containerProps } = props;\n\treturn /* @__PURE__ */ jsx(Modal, {\n\t\t...modalProps,\n\t\toverlayProps: { className: \"items-start pt-[15vh]\" },\n\t\tcontentProps: { className: \"rounded-2xl\" },\n\t\tonOpenChange,\n\t\topen,\n\t\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\t\t...containerProps,\n\t\t\tclassName: twMerge(\"w-[408px] rounded-2xl bg-white p-6\", containerProps?.className),\n\t\t\tchildren: /* @__PURE__ */ jsxs(Tabs, {\n\t\t\t\tdefaultValue: \"Create Drive\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(TabContent, {\n\t\t\t\t\tlabel: \"Create Drive\",\n\t\t\t\t\tdescription: \"Create a new drive\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(AddLocalDriveForm, {\n\t\t\t\t\t\tonCancel: handleCancel,\n\t\t\t\t\t\tonSubmit: onAddLocalDrive,\n\t\t\t\t\t\tappOptions: props.appOptions\n\t\t\t\t\t})\n\t\t\t\t}), /* @__PURE__ */ jsx(TabContent, {\n\t\t\t\t\tlabel: \"Add Drive\",\n\t\t\t\t\tdescription: \"Add a drive\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(AddRemoteDriveForm, {\n\t\t\t\t\t\tsharingType: \"PUBLIC\",\n\t\t\t\t\t\tonSubmit: onAddRemoteDrive,\n\t\t\t\t\t\tonCancel: handleCancel,\n\t\t\t\t\t\trequestPublicDrive\n\t\t\t\t\t})\n\t\t\t\t})]\n\t\t\t})\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/modal/add-local-drive-modal.tsx\nfunction AddLocalDriveModal(props) {\n\tconst { open, onOpenChange, onSubmit, modalProps, containerProps, appOptions } = props;\n\tfunction handleCancel() {\n\t\tonOpenChange(false);\n\t}\n\treturn /* @__PURE__ */ jsx(Modal, {\n\t\t...modalProps,\n\t\tcontentProps: { className: \"rounded-2xl\" },\n\t\tonOpenChange,\n\t\topen,\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t...containerProps,\n\t\t\tclassName: twMerge(\"max-w-[408px] rounded-2xl bg-white p-6\", containerProps?.className),\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"flex justify-between\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"h1\", {\n\t\t\t\t\t\tclassName: \"text-xl font-bold\",\n\t\t\t\t\t\tchildren: \"Create new drive \"\n\t\t\t\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\tclassName: \"flex size-8 items-center justify-center rounded-md bg-gray-100 text-gray-500 outline-none hover:text-gray-900\",\n\t\t\t\t\t\tonClick: handleCancel,\n\t\t\t\t\t\ttabIndex: -1,\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\tname: \"XmarkLight\",\n\t\t\t\t\t\t\tsize: 24\n\t\t\t\t\t\t})\n\t\t\t\t\t})]\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(Divider, { className: \"my-4\" }),\n\t\t\t\t/* @__PURE__ */ jsx(AddLocalDriveForm, {\n\t\t\t\t\tonCancel: handleCancel,\n\t\t\t\t\tonSubmit,\n\t\t\t\t\tappOptions\n\t\t\t\t})\n\t\t\t]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/modal/add-remote-drive-modal.tsx\nfunction AddRemoteDriveModal(props) {\n\tconst { open, onOpenChange, onSubmit, sharingType, modalProps, containerProps, requestPublicDrive } = props;\n\tfunction handleCancel() {\n\t\tonOpenChange(false);\n\t}\n\treturn /* @__PURE__ */ jsx(Modal, {\n\t\t...modalProps,\n\t\tcontentProps: { className: \"rounded-2xl\" },\n\t\tonOpenChange,\n\t\topen,\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t...containerProps,\n\t\t\tclassName: twMerge(\"max-w-[408px] min-w-[408px] rounded-2xl bg-white p-6\", containerProps?.className),\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"flex justify-between\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"h1\", {\n\t\t\t\t\t\tclassName: \"text-xl font-bold\",\n\t\t\t\t\t\tchildren: \"Add drive\"\n\t\t\t\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\tclassName: \"flex size-8 items-center justify-center rounded-md bg-gray-100 text-gray-500 outline-none hover:text-gray-900\",\n\t\t\t\t\t\tonClick: handleCancel,\n\t\t\t\t\t\ttabIndex: -1,\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\tname: \"XmarkLight\",\n\t\t\t\t\t\t\tsize: 24\n\t\t\t\t\t\t})\n\t\t\t\t\t})]\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(Divider, { className: \"my-4\" }),\n\t\t\t\t/* @__PURE__ */ jsx(AddRemoteDriveForm, {\n\t\t\t\t\tonCancel: handleCancel,\n\t\t\t\t\tonSubmit,\n\t\t\t\t\trequestPublicDrive,\n\t\t\t\t\tsharingType\n\t\t\t\t})\n\t\t\t]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/modal/create-document-modal.tsx\nconst buttonStyles$3 = \"min-h-[48px] min-w-[142px] text-base font-semibold py-3 px-6 rounded-xl outline-none active:opacity-75 hover:scale-105 transform transition-all\";\nconst CLOSE_ANIMATION_DURATION = 300;\nfunction CreateDocumentModal(props) {\n\tconst { onOpenChange, onContinue, overlayProps, contentProps, ...restProps } = props;\n\tconst [nodeName, setNodeName] = useState(\"\");\n\tconst [isValid, setIsValid] = useState(false);\n\tconst handleCancel = () => {\n\t\tonOpenChange?.(false);\n\t\tsetTimeout(() => setNodeName(\"\"), CLOSE_ANIMATION_DURATION);\n\t};\n\tconst handleCreate = useCallback(() => {\n\t\tif (!isValid) return;\n\t\tonContinue(nodeName);\n\t\tsetTimeout(() => setNodeName(\"\"), CLOSE_ANIMATION_DURATION);\n\t}, [\n\t\tisValid,\n\t\tnodeName,\n\t\tonContinue\n\t]);\n\tconst handleSubmit = useCallback((e) => {\n\t\te.preventDefault();\n\t\thandleCreate();\n\t}, [handleCreate]);\n\treturn /* @__PURE__ */ jsx(Modal, {\n\t\tcontentProps: {\n\t\t\t...contentProps,\n\t\t\tclassName: twMerge(\"rounded-3xl\", contentProps?.className)\n\t\t},\n\t\tonOpenChange,\n\t\toverlayProps: {\n\t\t\t...overlayProps,\n\t\t\tclassName: overlayProps?.className\n\t\t},\n\t\t...restProps,\n\t\tchildren: /* @__PURE__ */ jsxs(\"form\", {\n\t\t\tname: \"create-document\",\n\t\t\tclassName: \"w-[400px] bg-white p-6 text-slate-300\",\n\t\t\tonSubmit: handleSubmit,\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"border-b border-slate-50 pb-2 text-2xl font-bold text-gray-800\",\n\t\t\t\t\tchildren: \"Create a new document\"\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"my-6\",\n\t\t\t\t\tchildren: [!isValid && nodeName && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\tclassName: \"mb-2 text-red-500\",\n\t\t\t\t\t\tchildren: \"Document name must be valid URL characters.\"\n\t\t\t\t\t}), /* @__PURE__ */ jsx(FormInput, {\n\t\t\t\t\t\ticon: /* @__PURE__ */ jsx(Icon, { name: \"BrickGlobe\" }),\n\t\t\t\t\t\tonChange: (e) => {\n\t\t\t\t\t\t\tconst name = e.target.value;\n\t\t\t\t\t\t\tsetNodeName(name);\n\t\t\t\t\t\t\tsetIsValid(isValidName(name));\n\t\t\t\t\t\t},\n\t\t\t\t\t\tplaceholder: \"Document name\",\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tvalue: nodeName\n\t\t\t\t\t})]\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"mt-8 flex justify-between gap-3\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tclassName: twMerge(buttonStyles$3, \"flex-1 bg-slate-50 text-slate-800\"),\n\t\t\t\t\t\tonClick: handleCancel,\n\t\t\t\t\t\tchildren: \"Cancel\"\n\t\t\t\t\t}), /* @__PURE__ */ jsx(PowerhouseButton, {\n\t\t\t\t\t\ttype: \"submit\",\n\t\t\t\t\t\tclassName: twMerge(buttonStyles$3, \"flex-1 bg-gray-800 text-gray-50\"),\n\t\t\t\t\t\tdisabled: !isValid,\n\t\t\t\t\t\tchildren: \"Create\"\n\t\t\t\t\t})]\n\t\t\t\t})\n\t\t\t]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/modal/delete-drive-modal.tsx\nconst ConnectDeleteDriveModal = (props) => {\n\tconst { inputPlaceholder, body, driveName, ...confirmationModalProps } = props;\n\tconst [inputName, setInputName] = useState(\"\");\n\treturn /* @__PURE__ */ jsx(ConnectConfirmationModal, {\n\t\tbodyProps: { className: \"p-0 bg-white my-0\" },\n\t\tcontainerProps: { className: \"w-[450px]\" },\n\t\tcontinueButtonProps: {\n\t\t\tdisabled: inputName !== driveName,\n\t\t\tclassName: inputName !== driveName ? \"bg-red-600 hover:scale-100 cursor-not-allowed active:opacity-100\" : \"bg-red-900\"\n\t\t},\n\t\t...confirmationModalProps,\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", { children: [/* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: \"my-6 rounded-md bg-slate-50 p-4 text-center\",\n\t\t\tchildren: body\n\t\t}), /* @__PURE__ */ jsx(\"div\", { children: /* @__PURE__ */ jsx(FormInput, {\n\t\t\thideErrors: true,\n\t\t\ticon: /* @__PURE__ */ jsx(Icon, { name: \"Lock\" }),\n\t\t\tonChange: (e) => setInputName(e.target.value),\n\t\t\tplaceholder: inputPlaceholder,\n\t\t\tvalue: inputName\n\t\t}) })] })\n\t});\n};\n//#endregion\n//#region src/connect/components/modal/delete-item-modal.tsx\nfunction ConnectDeleteItemModal(props) {\n\tconst { onDelete, deleteLabel, ...restProps } = props;\n\treturn /* @__PURE__ */ jsx(ConnectConfirmationModal, {\n\t\t...restProps,\n\t\tcontainerProps: { className: \"w-[450px]\" },\n\t\tcontinueButtonProps: { className: \"bg-red-900\" },\n\t\tcontinueLabel: deleteLabel,\n\t\tonContinue: onDelete\n\t});\n}\n//#endregion\n//#region src/connect/components/form/inputs/drive-name-input.tsx\nconst DriveNameInput = /* @__PURE__ */ forwardRef(function DriveNameInput(props, ref) {\n\treturn /* @__PURE__ */ jsx(FormInput, {\n\t\t...props,\n\t\ticon: props.icon ?? /* @__PURE__ */ jsx(Icon, { name: \"Drive\" }),\n\t\tid: \"driveName\",\n\t\tplaceholder: \"Drive name\",\n\t\tref\n\t});\n});\n//#endregion\n//#region src/connect/components/form/inputs/delete-drive.tsx\nfunction DeleteDrive(props) {\n\tconst { drive, handleDeleteDrive, onCancel } = props;\n\tconst [driveNameInput, setDriveNameInput] = useState(\"\");\n\tconst isAllowedToDelete = driveNameInput === drive.header.name;\n\tfunction deleteDrive() {\n\t\tif (isAllowedToDelete) handleDeleteDrive();\n\t}\n\treturn /* @__PURE__ */ jsxs(\"div\", { children: [\n\t\t/* @__PURE__ */ jsx(\"p\", {\n\t\t\tclassName: \"mb-2 rounded-md bg-slate-50 p-4 text-center text-slate-200\",\n\t\t\tchildren: \"Are you sure you want to delete this drive? All files and subfolders within it will be removed. Do you want to proceed?\"\n\t\t}),\n\t\t/* @__PURE__ */ jsx(DriveNameInput, {\n\t\t\ticon: /* @__PURE__ */ jsx(Icon, { name: \"Lock\" }),\n\t\t\tonChange: (event) => setDriveNameInput(event.target.value),\n\t\t\tplaceholder: \"Enter drive name...\",\n\t\t\tvalue: driveNameInput\n\t\t}),\n\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"flex gap-3\",\n\t\t\tchildren: [/* @__PURE__ */ jsx(PowerhouseButton, {\n\t\t\t\tclassName: \"w-full\",\n\t\t\t\tcolor: \"light\",\n\t\t\t\tonClick: onCancel,\n\t\t\t\tchildren: \"Cancel\"\n\t\t\t}), /* @__PURE__ */ jsx(PowerhouseButton, {\n\t\t\t\tclassName: \"w-full\",\n\t\t\t\tcolor: \"red\",\n\t\t\t\tdisabled: !isAllowedToDelete,\n\t\t\t\tonClick: deleteDrive,\n\t\t\t\tchildren: \"Delete\"\n\t\t\t})]\n\t\t})\n\t] });\n}\n//#endregion\n//#region src/connect/components/form/drive-settings-form.tsx\nfunction DriveSettingsForm(props) {\n\tconst { drive, sharingType, availableOffline, systemInfo, onSubmit, handleDeleteDrive } = props;\n\tconst name = drive.header.name;\n\tconst [showLocationSettings, setShowLocationSettings] = useState(false);\n\tconst [showAbout, setShowAbout] = useState(false);\n\tconst [showDangerZone, setShowDangerZone] = useState(false);\n\tconst [showDeleteDrive, setShowDeleteDrive] = useState(false);\n\tconst { register, handleSubmit, control } = useForm({\n\t\tmode: \"onBlur\",\n\t\tdefaultValues: {\n\t\t\tname,\n\t\t\tsharingType,\n\t\t\tavailableOffline\n\t\t}\n\t});\n\tconst location = sharingType === \"PUBLIC\" ? \"SWITCHBOARD\" : sharingType;\n\treturn /* @__PURE__ */ jsxs(\"form\", {\n\t\tonSubmit: handleSubmit(onSubmit),\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(DriveNameInput, { ...register(\"name\") }),\n\t\t\t/* @__PURE__ */ jsx(Divider, { className: \"my-4\" }),\n\t\t\t/* @__PURE__ */ jsx(Label, {\n\t\t\t\thtmlFor: \"sharingType\",\n\t\t\t\tchildren: \"Sharing settings\"\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(SharingTypeFormInput, { control }),\n\t\t\t/* @__PURE__ */ jsx(Divider, { className: \"my-3\" }),\n\t\t\t/* @__PURE__ */ jsxs(Disclosure, {\n\t\t\t\tisOpen: showLocationSettings,\n\t\t\t\tonOpenChange: () => setShowLocationSettings(!showLocationSettings),\n\t\t\t\ttitle: \"Location\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(LocationInfo, { location }), /* @__PURE__ */ jsx(AvailableOfflineToggle, { ...register(\"availableOffline\") })]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(Divider, { className: \"my-3\" }),\n\t\t\t/* @__PURE__ */ jsxs(Disclosure, {\n\t\t\t\tisOpen: showAbout,\n\t\t\t\tonOpenChange: () => setShowAbout(!showAbout),\n\t\t\t\ttitle: \"About this drive\",\n\t\t\t\tchildren: [\n\t\t\t\t\tsystemInfo.status === \"local\" && /* @__PURE__ */ jsx(\"p\", {\n\t\t\t\t\t\tclassName: \"py-2 text-sm text-gray-500\",\n\t\t\t\t\t\tchildren: \"Local drive — N/A\"\n\t\t\t\t\t}),\n\t\t\t\t\tsystemInfo.status === \"loading\" && /* @__PURE__ */ jsx(\"p\", {\n\t\t\t\t\t\tclassName: \"py-2 text-sm text-gray-400\",\n\t\t\t\t\t\tchildren: \"Loading…\"\n\t\t\t\t\t}),\n\t\t\t\t\tsystemInfo.status === \"error\" && /* @__PURE__ */ jsx(\"p\", {\n\t\t\t\t\t\tclassName: \"py-2 text-sm text-red-600\",\n\t\t\t\t\t\tchildren: \"Could not load system info\"\n\t\t\t\t\t}),\n\t\t\t\t\tsystemInfo.status === \"ready\" && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"py-2 text-sm text-gray-700\",\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", { children: [\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\tclassName: \"font-medium\",\n\t\t\t\t\t\t\t\tchildren: \"Version:\"\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\" \",\n\t\t\t\t\t\t\tsystemInfo.version\n\t\t\t\t\t\t] }), /* @__PURE__ */ jsxs(\"div\", { children: [\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\tclassName: \"font-medium\",\n\t\t\t\t\t\t\t\tchildren: \"Git hash:\"\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\" \",\n\t\t\t\t\t\t\tsystemInfo.gitHash\n\t\t\t\t\t\t] })]\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(Divider, { className: \"my-3\" }),\n\t\t\t/* @__PURE__ */ jsx(Disclosure, {\n\t\t\t\tisOpen: showDangerZone,\n\t\t\t\tonOpenChange: () => setShowDangerZone(!showDangerZone),\n\t\t\t\ttitle: \"Danger zone\",\n\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\tclassName: \"flex gap-2 py-3 font-semibold text-red-900 transition hover:brightness-125\",\n\t\t\t\t\tonClick: () => setShowDeleteDrive(true),\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, { name: \"Trash\" }), \"Delete drive\"]\n\t\t\t\t})\n\t\t\t}),\n\t\t\tshowDeleteDrive && showDangerZone ? /* @__PURE__ */ jsx(DeleteDrive, {\n\t\t\t\tdrive,\n\t\t\t\thandleDeleteDrive,\n\t\t\t\tonCancel: () => setShowDeleteDrive(false)\n\t\t\t}) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Divider, { className: \"my-3\" }), /* @__PURE__ */ jsx(PowerhouseButton, {\n\t\t\t\tclassName: \"mb-4 w-full\",\n\t\t\t\ttype: \"submit\",\n\t\t\t\tchildren: \"Confirm\"\n\t\t\t})] })\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/modal/drive-settings-modal.tsx\nfunction DriveSettingsModal(props) {\n\tconst { drive, open, sharingType, availableOffline, systemInfo, onOpenChange, onDeleteDrive, onRenameDrive, onChangeSharingType, onChangeAvailableOffline, modalProps, containerProps } = props;\n\tconst onSubmit = (data) => {\n\t\tif (data.name !== drive.header.name) onRenameDrive(drive, data.name);\n\t\tif (data.sharingType !== sharingType) onChangeSharingType(drive, data.sharingType);\n\t\tif (data.availableOffline !== availableOffline) onChangeAvailableOffline(drive, data.availableOffline);\n\t\tonOpenChange(false);\n\t};\n\tfunction handleDeleteDrive() {\n\t\tonDeleteDrive(drive);\n\t\tonOpenChange(false);\n\t}\n\tfunction handleCancel() {\n\t\tonOpenChange(false);\n\t}\n\treturn /* @__PURE__ */ jsx(Modal, {\n\t\t...modalProps,\n\t\tcontentProps: { className: \"rounded-2xl\" },\n\t\tonOpenChange,\n\t\topen,\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t...containerProps,\n\t\t\tclassName: twMerge(\"max-w-[408px] rounded-2xl bg-white p-6\", containerProps?.className),\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"flex justify-between\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"h1\", {\n\t\t\t\t\t\tclassName: \"text-xl font-bold\",\n\t\t\t\t\t\tchildren: \"Drive settings\"\n\t\t\t\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\tclassName: \"flex size-8 items-center justify-center rounded-md bg-gray-100 text-gray-500 outline-none hover:text-gray-900\",\n\t\t\t\t\t\tonClick: handleCancel,\n\t\t\t\t\t\ttabIndex: -1,\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\tname: \"XmarkLight\",\n\t\t\t\t\t\t\tsize: 24\n\t\t\t\t\t\t})\n\t\t\t\t\t})]\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(Divider, { className: \"my-4\" }),\n\t\t\t\t/* @__PURE__ */ jsx(DriveSettingsForm, {\n\t\t\t\t\thandleCancel,\n\t\t\t\t\thandleDeleteDrive,\n\t\t\t\t\tonSubmit,\n\t\t\t\t\tdrive,\n\t\t\t\t\tsharingType,\n\t\t\t\t\tavailableOffline,\n\t\t\t\t\tsystemInfo\n\t\t\t\t})\n\t\t\t]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/object-inspector-modal/object-inspector-modal.tsx\n/**\n* Converts an object to a JSON-serializable form by handling\n* non-serializable values like functions, symbols, and errors.\n*/\nfunction toSerializableObject$1(obj) {\n\treturn JSON.parse(JSON.stringify(obj, (_key, value) => {\n\t\tif (typeof value === \"function\") return \"[Function]\";\n\t\tif (typeof value === \"symbol\") return \"[Symbol]\";\n\t\tif (value instanceof Error) return {\n\t\t\tname: value.name,\n\t\t\tmessage: value.message\n\t\t};\n\t\treturn value;\n\t}));\n}\nfunction ObjectInspectorModal({ open, onOpenChange, title, object }) {\n\tconst serializableObject = object ? toSerializableObject$1(object) : null;\n\treturn /* @__PURE__ */ jsx(Modal, {\n\t\tcontentProps: {\n\t\t\tclassName: \"rounded-2xl\",\n\t\t\tstyle: {\n\t\t\t\theight: \"80vh\",\n\t\t\t\twidth: \"80vw\",\n\t\t\t\tmaxWidth: \"900px\"\n\t\t\t}\n\t\t},\n\t\tonOpenChange,\n\t\topen,\n\t\ttitle,\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"flex size-full flex-col bg-white\",\n\t\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex shrink-0 items-center justify-between border-b border-gray-200 px-4 py-3\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"h2\", {\n\t\t\t\t\tclassName: \"text-lg font-semibold text-gray-900\",\n\t\t\t\t\tchildren: title\n\t\t\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\tclassName: \"flex size-6 cursor-pointer items-center justify-center rounded-md text-gray-500 outline-none hover:text-gray-900\",\n\t\t\t\t\tonClick: () => onOpenChange(false),\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\tname: \"XmarkLight\",\n\t\t\t\t\t\tsize: 24\n\t\t\t\t\t})\n\t\t\t\t})]\n\t\t\t}), /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"flex-1 overflow-auto p-4\",\n\t\t\t\tchildren: serializableObject ? /* @__PURE__ */ jsx(JsonViewer, { data: serializableObject }) : /* @__PURE__ */ jsx(\"p\", {\n\t\t\t\t\tclassName: \"text-gray-500\",\n\t\t\t\t\tchildren: \"No data to display\"\n\t\t\t\t})\n\t\t\t})]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/processors-inspector/processors-inspector.tsx\nconst COLUMNS$2 = [\n\t{\n\t\tkey: \"view\",\n\t\tlabel: \"\",\n\t\twidth: \"60px\"\n\t},\n\t{\n\t\tkey: \"status\",\n\t\tlabel: \"Status\",\n\t\twidth: \"90px\"\n\t},\n\t{\n\t\tkey: \"processorId\",\n\t\tlabel: \"Processor ID\",\n\t\twidth: \"150px\"\n\t},\n\t{\n\t\tkey: \"factoryId\",\n\t\tlabel: \"Factory ID\",\n\t\twidth: \"150px\"\n\t},\n\t{\n\t\tkey: \"driveId\",\n\t\tlabel: \"Drive ID\",\n\t\twidth: \"150px\"\n\t},\n\t{\n\t\tkey: \"processorIndex\",\n\t\tlabel: \"Index\",\n\t\twidth: \"70px\"\n\t},\n\t{\n\t\tkey: \"lastOrdinal\",\n\t\tlabel: \"Last Ordinal\",\n\t\twidth: \"100px\"\n\t},\n\t{\n\t\tkey: \"lastError\",\n\t\tlabel: \"Error\",\n\t\twidth: \"180px\"\n\t},\n\t{\n\t\tkey: \"lastErrorTimestamp\",\n\t\tlabel: \"Error At\",\n\t\twidth: \"160px\"\n\t},\n\t{\n\t\tkey: \"actions\",\n\t\tlabel: \"Actions\",\n\t\twidth: \"80px\"\n\t}\n];\nfunction truncateId$2(id, maxLength = 12) {\n\tif (id.length <= maxLength) return id;\n\treturn id.slice(0, maxLength) + \"...\";\n}\nfunction sortProcessors(processors, sort) {\n\tif (!sort) return processors;\n\treturn [...processors].sort((a, b) => {\n\t\tlet comparison = 0;\n\t\tswitch (sort.column) {\n\t\t\tcase \"status\":\n\t\t\t\tcomparison = a.status.localeCompare(b.status);\n\t\t\t\tbreak;\n\t\t\tcase \"processorId\":\n\t\t\t\tcomparison = a.processorId.localeCompare(b.processorId);\n\t\t\t\tbreak;\n\t\t\tcase \"factoryId\":\n\t\t\t\tcomparison = a.factoryId.localeCompare(b.factoryId);\n\t\t\t\tbreak;\n\t\t\tcase \"driveId\":\n\t\t\t\tcomparison = a.driveId.localeCompare(b.driveId);\n\t\t\t\tbreak;\n\t\t\tcase \"processorIndex\":\n\t\t\t\tcomparison = a.processorIndex - b.processorIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"lastOrdinal\":\n\t\t\t\tcomparison = a.lastOrdinal - b.lastOrdinal;\n\t\t\t\tbreak;\n\t\t\tcase \"lastError\":\n\t\t\t\tcomparison = (a.lastError ?? \"\").localeCompare(b.lastError ?? \"\");\n\t\t\t\tbreak;\n\t\t\tcase \"lastErrorTimestamp\":\n\t\t\t\tcomparison = (a.lastErrorTimestamp?.getTime() ?? 0) - (b.lastErrorTimestamp?.getTime() ?? 0);\n\t\t\t\tbreak;\n\t\t\tdefault: return 0;\n\t\t}\n\t\treturn sort.direction === \"asc\" ? comparison : -comparison;\n\t});\n}\nfunction SortIcon$2({ direction, active }) {\n\tif (!active) return /* @__PURE__ */ jsx(Icon, {\n\t\tclassName: \"opacity-0 group-hover:opacity-50\",\n\t\tname: \"CaretSort\",\n\t\tsize: 12\n\t});\n\treturn /* @__PURE__ */ jsx(Icon, {\n\t\tclassName: direction === \"asc\" ? \"rotate-180\" : void 0,\n\t\tname: \"TriangleDown\",\n\t\tsize: 12\n\t});\n}\nfunction ProcessorsInspector({ getProcessors, onRetry }) {\n\tconst [processors, setProcessors] = useState([]);\n\tconst [loading, setLoading] = useState(true);\n\tconst [sort, setSort] = useState();\n\tconst [retryingId, setRetryingId] = useState(null);\n\tconst [selectedProcessor, setSelectedProcessor] = useState(null);\n\tconst [error, setError] = useState(null);\n\tconst loadProcessors = useCallback(async () => {\n\t\ttry {\n\t\t\tsetProcessors(await getProcessors());\n\t\t\tsetError(null);\n\t\t} catch (e) {\n\t\t\tsetError(e instanceof Error ? e.message : String(e));\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}, [getProcessors]);\n\tuseEffect(() => {\n\t\tloadProcessors();\n\t\tconst interval = setInterval(() => {\n\t\t\tloadProcessors();\n\t\t}, 2e3);\n\t\treturn () => clearInterval(interval);\n\t}, [loadProcessors]);\n\tconst handleRefresh = useCallback(async () => {\n\t\tsetLoading(true);\n\t\tawait loadProcessors();\n\t}, [loadProcessors]);\n\tconst handleRetry = useCallback(async (processorId) => {\n\t\tif (!onRetry) return;\n\t\tsetRetryingId(processorId);\n\t\ttry {\n\t\t\tawait onRetry(processorId);\n\t\t\tawait loadProcessors();\n\t\t} finally {\n\t\t\tsetRetryingId(null);\n\t\t}\n\t}, [onRetry, loadProcessors]);\n\tconst handleSort = (columnKey) => {\n\t\tsetSort({\n\t\t\tcolumn: columnKey,\n\t\t\tdirection: sort?.column === columnKey && sort.direction === \"asc\" ? \"desc\" : \"asc\"\n\t\t});\n\t};\n\tconst sortedProcessors = sortProcessors(processors, sort);\n\tconst activeCount = processors.filter((p) => p.status === \"active\").length;\n\tconst erroredCount = processors.filter((p) => p.status === \"errored\").length;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex h-full flex-col gap-2\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex shrink-0 items-center justify-between\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"h2\", {\n\t\t\t\t\tclassName: \"text-lg font-semibold text-gray-900\",\n\t\t\t\t\tchildren: \"Processors Inspector\"\n\t\t\t\t}), /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"flex items-center gap-2\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100 disabled:opacity-50\",\n\t\t\t\t\t\tdisabled: loading,\n\t\t\t\t\t\tonClick: () => void handleRefresh(),\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\tname: \"Reload\",\n\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t}), \"Refresh\"]\n\t\t\t\t\t})\n\t\t\t\t})]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex shrink-0 items-center gap-4 rounded-lg bg-gray-100 px-4 py-2 text-sm\",\n\t\t\t\tchildren: [\n\t\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"text-gray-600\",\n\t\t\t\t\t\tchildren: [\"Total: \", /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\tclassName: \"font-medium\",\n\t\t\t\t\t\t\tchildren: processors.length\n\t\t\t\t\t\t})]\n\t\t\t\t\t}),\n\t\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"flex items-center gap-2 text-gray-600\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"span\", { className: \"size-2 rounded-full bg-green-500\" }),\n\t\t\t\t\t\t\t\"Active: \",\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\tclassName: \"font-medium\",\n\t\t\t\t\t\t\t\tchildren: activeCount\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t]\n\t\t\t\t\t}),\n\t\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"flex items-center gap-2 text-gray-600\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"span\", { className: \"size-2 rounded-full bg-red-500\" }),\n\t\t\t\t\t\t\t\"Errored: \",\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\tclassName: \"font-medium\",\n\t\t\t\t\t\t\t\tchildren: erroredCount\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t]\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t}),\n\t\t\terror && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"shrink-0 rounded-lg border border-red-300 bg-red-50 px-4 py-2 text-sm text-red-700\",\n\t\t\t\tchildren: [\"Failed to load processors: \", error]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"max-h-full overflow-auto rounded-lg border border-gray-300\",\n\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"table\", {\n\t\t\t\t\tclassName: \"w-full border-collapse\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"thead\", {\n\t\t\t\t\t\tclassName: \"sticky top-0 bg-gray-100\",\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"tr\", { children: COLUMNS$2.map((column, index) => {\n\t\t\t\t\t\t\tconst isActive = sort?.column === column.key;\n\t\t\t\t\t\t\tconst sortDirection = isActive ? sort.direction : \"asc\";\n\t\t\t\t\t\t\treturn /* @__PURE__ */ jsx(\"th\", {\n\t\t\t\t\t\t\t\tclassName: twMerge(\"group cursor-pointer px-3 py-2 text-left text-xs font-medium text-gray-600 hover:bg-gray-200 hover:text-gray-900\", index > 0 && \"border-l border-gray-300\"),\n\t\t\t\t\t\t\t\tonClick: () => handleSort(column.key),\n\t\t\t\t\t\t\t\tstyle: { width: column.width },\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1\",\n\t\t\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\t\tclassName: \"truncate\",\n\t\t\t\t\t\t\t\t\t\tchildren: column.label\n\t\t\t\t\t\t\t\t\t}), /* @__PURE__ */ jsx(SortIcon$2, {\n\t\t\t\t\t\t\t\t\t\tactive: isActive,\n\t\t\t\t\t\t\t\t\t\tdirection: sortDirection\n\t\t\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}, column.key);\n\t\t\t\t\t\t}) })\n\t\t\t\t\t}), /* @__PURE__ */ jsx(\"tbody\", { children: loading && sortedProcessors.length === 0 ? /* @__PURE__ */ jsx(\"tr\", { children: /* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\tclassName: \"px-3 py-8 text-center text-sm text-gray-500\",\n\t\t\t\t\t\tcolSpan: COLUMNS$2.length,\n\t\t\t\t\t\tchildren: \"Loading...\"\n\t\t\t\t\t}) }) : sortedProcessors.length === 0 ? /* @__PURE__ */ jsx(\"tr\", { children: /* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\tclassName: \"px-3 py-8 text-center text-sm text-gray-500\",\n\t\t\t\t\t\tcolSpan: COLUMNS$2.length,\n\t\t\t\t\t\tchildren: \"No processors registered\"\n\t\t\t\t\t}) }) : sortedProcessors.map((processor) => /* @__PURE__ */ jsxs(\"tr\", {\n\t\t\t\t\t\tclassName: twMerge(\"hover:bg-blue-50\", processor.status === \"errored\" ? \"bg-red-50\" : \"odd:bg-white even:bg-gray-50\"),\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"px-3 py-2 text-xs\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm bg-blue-50 px-2 py-1 text-xs text-blue-700 hover:bg-blue-100\",\n\t\t\t\t\t\t\t\t\tonClick: () => setSelectedProcessor(processor),\n\t\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\t\tchildren: \"View\"\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: twMerge(\"inline-flex items-center gap-1 rounded-sm px-1.5 py-0.5\", processor.status === \"active\" ? \"bg-green-100 text-green-700\" : \"bg-red-100 text-red-700\"),\n\t\t\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\t\tprocessor.status === \"active\" && /* @__PURE__ */ jsx(\"span\", { className: \"inline-block size-1.5 rounded-full bg-green-500\" }),\n\t\t\t\t\t\t\t\t\t\tprocessor.status === \"errored\" && /* @__PURE__ */ jsx(\"span\", { className: \"inline-block size-1.5 rounded-full bg-red-500\" }),\n\t\t\t\t\t\t\t\t\t\tprocessor.status\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate\",\n\t\t\t\t\t\t\t\t\ttitle: processor.processorId,\n\t\t\t\t\t\t\t\t\tchildren: truncateId$2(processor.processorId)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate\",\n\t\t\t\t\t\t\t\t\ttitle: processor.factoryId,\n\t\t\t\t\t\t\t\t\tchildren: truncateId$2(processor.factoryId)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate\",\n\t\t\t\t\t\t\t\t\ttitle: processor.driveId,\n\t\t\t\t\t\t\t\t\tchildren: truncateId$2(processor.driveId)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: processor.processorIndex\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: processor.lastOrdinal\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: processor.lastError ? /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate text-red-600\",\n\t\t\t\t\t\t\t\t\ttitle: processor.lastError,\n\t\t\t\t\t\t\t\t\tchildren: processor.lastError\n\t\t\t\t\t\t\t\t}) : /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"text-gray-400\",\n\t\t\t\t\t\t\t\t\tchildren: \"-\"\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: processor.lastErrorTimestamp ? /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate\",\n\t\t\t\t\t\t\t\t\ttitle: processor.lastErrorTimestamp.toISOString(),\n\t\t\t\t\t\t\t\t\tchildren: processor.lastErrorTimestamp.toLocaleString()\n\t\t\t\t\t\t\t\t}) : /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"text-gray-400\",\n\t\t\t\t\t\t\t\t\tchildren: \"-\"\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs\",\n\t\t\t\t\t\t\t\tchildren: processor.status === \"errored\" && onRetry && /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm bg-yellow-50 px-2 py-1 text-xs text-yellow-700 hover:bg-yellow-100 disabled:opacity-50\",\n\t\t\t\t\t\t\t\t\tdisabled: retryingId === processor.processorId,\n\t\t\t\t\t\t\t\t\tonClick: () => void handleRetry(processor.processorId),\n\t\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\t\tchildren: \"Retry\"\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t]\n\t\t\t\t\t}, processor.processorId)) })]\n\t\t\t\t})\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"shrink-0 text-sm text-gray-600\",\n\t\t\t\tchildren: [\n\t\t\t\t\t\"Showing \",\n\t\t\t\t\tsortedProcessors.length,\n\t\t\t\t\t\" processor(s)\"\n\t\t\t\t]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(ObjectInspectorModal, {\n\t\t\t\tobject: selectedProcessor,\n\t\t\t\tonOpenChange: (open) => !open && setSelectedProcessor(null),\n\t\t\t\topen: selectedProcessor !== null,\n\t\t\t\ttitle: \"Processor\"\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/queue-inspector/queue-inspector.tsx\nconst COLUMNS$1 = [\n\t{\n\t\tkey: \"view\",\n\t\tlabel: \"\",\n\t\twidth: \"60px\"\n\t},\n\t{\n\t\tkey: \"id\",\n\t\tlabel: \"ID\",\n\t\twidth: \"120px\"\n\t},\n\t{\n\t\tkey: \"kind\",\n\t\tlabel: \"Kind\",\n\t\twidth: \"80px\"\n\t},\n\t{\n\t\tkey: \"documentId\",\n\t\tlabel: \"Document ID\",\n\t\twidth: \"150px\"\n\t},\n\t{\n\t\tkey: \"scope\",\n\t\tlabel: \"Scope\",\n\t\twidth: \"100px\"\n\t},\n\t{\n\t\tkey: \"branch\",\n\t\tlabel: \"Branch\",\n\t\twidth: \"100px\"\n\t},\n\t{\n\t\tkey: \"createdAt\",\n\t\tlabel: \"Created At\",\n\t\twidth: \"160px\"\n\t},\n\t{\n\t\tkey: \"retryCount\",\n\t\tlabel: \"Retries\",\n\t\twidth: \"70px\"\n\t},\n\t{\n\t\tkey: \"status\",\n\t\tlabel: \"Status\",\n\t\twidth: \"100px\"\n\t}\n];\nfunction truncateId$1(id, maxLength = 12) {\n\tif (id.length <= maxLength) return id;\n\treturn id.slice(0, maxLength) + \"...\";\n}\nfunction formatDate(dateStr) {\n\treturn new Date(dateStr).toLocaleString();\n}\nfunction sortJobs(jobs, sort) {\n\tif (!sort) return jobs;\n\treturn [...jobs].sort((a, b) => {\n\t\tlet comparison = 0;\n\t\tswitch (sort.column) {\n\t\t\tcase \"id\":\n\t\t\t\tcomparison = a.id.localeCompare(b.id);\n\t\t\t\tbreak;\n\t\t\tcase \"kind\":\n\t\t\t\tcomparison = a.kind.localeCompare(b.kind);\n\t\t\t\tbreak;\n\t\t\tcase \"documentId\":\n\t\t\t\tcomparison = a.documentId.localeCompare(b.documentId);\n\t\t\t\tbreak;\n\t\t\tcase \"scope\":\n\t\t\t\tcomparison = a.scope.localeCompare(b.scope);\n\t\t\t\tbreak;\n\t\t\tcase \"branch\":\n\t\t\t\tcomparison = a.branch.localeCompare(b.branch);\n\t\t\t\tbreak;\n\t\t\tcase \"createdAt\":\n\t\t\t\tcomparison = a.createdAt.localeCompare(b.createdAt);\n\t\t\t\tbreak;\n\t\t\tcase \"retryCount\":\n\t\t\t\tcomparison = (a.retryCount ?? 0) - (b.retryCount ?? 0);\n\t\t\t\tbreak;\n\t\t\tcase \"status\":\n\t\t\t\tcomparison = a.status.localeCompare(b.status);\n\t\t\t\tbreak;\n\t\t\tdefault: return 0;\n\t\t}\n\t\treturn sort.direction === \"asc\" ? comparison : -comparison;\n\t});\n}\nfunction SortIcon$1({ direction, active }) {\n\tif (!active) return /* @__PURE__ */ jsx(Icon, {\n\t\tclassName: \"opacity-0 group-hover:opacity-50\",\n\t\tname: \"CaretSort\",\n\t\tsize: 12\n\t});\n\treturn /* @__PURE__ */ jsx(Icon, {\n\t\tclassName: direction === \"asc\" ? \"rotate-180\" : void 0,\n\t\tname: \"TriangleDown\",\n\t\tsize: 12\n\t});\n}\nfunction QueueInspector({ getQueueState, onPause, onResume }) {\n\tconst [state, setState] = useState({\n\t\tisPaused: false,\n\t\tpendingJobs: [],\n\t\texecutingJobs: [],\n\t\ttotalPending: 0,\n\t\ttotalExecuting: 0\n\t});\n\tconst [loading, setLoading] = useState(true);\n\tconst [sort, setSort] = useState();\n\tconst [actionInProgress, setActionInProgress] = useState(false);\n\tconst [selectedJob, setSelectedJob] = useState(null);\n\tconst loadState = useCallback(async () => {\n\t\tsetState(await getQueueState());\n\t\tsetLoading(false);\n\t}, [getQueueState]);\n\tuseEffect(() => {\n\t\tloadState();\n\t\tconst interval = setInterval(() => {\n\t\t\tloadState();\n\t\t}, 2e3);\n\t\treturn () => clearInterval(interval);\n\t}, [loadState]);\n\tconst handleRefresh = useCallback(async () => {\n\t\tsetLoading(true);\n\t\tawait loadState();\n\t}, [loadState]);\n\tconst handlePauseResume = useCallback(async () => {\n\t\tsetActionInProgress(true);\n\t\tif (state.isPaused) await onResume();\n\t\telse await onPause();\n\t\tawait loadState();\n\t\tsetActionInProgress(false);\n\t}, [\n\t\tstate.isPaused,\n\t\tonPause,\n\t\tonResume,\n\t\tloadState\n\t]);\n\tconst handleSort = (columnKey) => {\n\t\tsetSort({\n\t\t\tcolumn: columnKey,\n\t\t\tdirection: sort?.column === columnKey && sort.direction === \"asc\" ? \"desc\" : \"asc\"\n\t\t});\n\t};\n\tconst sortedJobs = sortJobs([...state.executingJobs.map((job) => ({\n\t\t...job,\n\t\tstatus: \"executing\"\n\t})), ...state.pendingJobs.map((job) => ({\n\t\t...job,\n\t\tstatus: \"pending\"\n\t}))], sort);\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex h-full flex-col gap-2\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex shrink-0 items-center justify-between\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"h2\", {\n\t\t\t\t\tclassName: \"text-lg font-semibold text-gray-900\",\n\t\t\t\t\tchildren: \"Queue Inspector\"\n\t\t\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"flex items-center gap-2\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\t\tclassName: twMerge(\"flex items-center gap-1 rounded-sm border px-3 py-1.5 text-sm disabled:opacity-50\", state.isPaused ? \"border-green-300 bg-green-50 text-green-700 hover:bg-green-100\" : \"border-yellow-300 bg-yellow-50 text-yellow-700 hover:bg-yellow-100\"),\n\t\t\t\t\t\tdisabled: actionInProgress,\n\t\t\t\t\t\tonClick: () => void handlePauseResume(),\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\tname: state.isPaused ? \"ArrowFilledRight\" : \"Ellipsis\",\n\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t}), state.isPaused ? \"Resume\" : \"Pause\"]\n\t\t\t\t\t}), /* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100 disabled:opacity-50\",\n\t\t\t\t\t\tdisabled: loading,\n\t\t\t\t\t\tonClick: () => void handleRefresh(),\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\tname: \"Reload\",\n\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t}), \"Refresh\"]\n\t\t\t\t\t})]\n\t\t\t\t})]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex shrink-0 items-center gap-4 rounded-lg bg-gray-100 px-4 py-2 text-sm\",\n\t\t\t\tchildren: [\n\t\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"flex items-center gap-2\",\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", { className: twMerge(\"size-2 rounded-full\", state.isPaused ? \"bg-yellow-500\" : \"bg-green-500\") }), /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\tclassName: \"font-medium text-gray-700\",\n\t\t\t\t\t\t\tchildren: state.isPaused ? \"Paused\" : \"Running\"\n\t\t\t\t\t\t})]\n\t\t\t\t\t}),\n\t\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"text-gray-600\",\n\t\t\t\t\t\tchildren: [\"Pending: \", /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\tclassName: \"font-medium\",\n\t\t\t\t\t\t\tchildren: state.totalPending\n\t\t\t\t\t\t})]\n\t\t\t\t\t}),\n\t\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"text-gray-600\",\n\t\t\t\t\t\tchildren: [\"Executing: \", /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\tclassName: \"font-medium\",\n\t\t\t\t\t\t\tchildren: state.totalExecuting\n\t\t\t\t\t\t})]\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"max-h-full overflow-auto rounded-lg border border-gray-300\",\n\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"table\", {\n\t\t\t\t\tclassName: \"w-full border-collapse\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"thead\", {\n\t\t\t\t\t\tclassName: \"sticky top-0 bg-gray-100\",\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"tr\", { children: COLUMNS$1.map((column, index) => {\n\t\t\t\t\t\t\tconst isActive = sort?.column === column.key;\n\t\t\t\t\t\t\tconst sortDirection = isActive ? sort.direction : \"asc\";\n\t\t\t\t\t\t\treturn /* @__PURE__ */ jsx(\"th\", {\n\t\t\t\t\t\t\t\tclassName: twMerge(\"group cursor-pointer px-3 py-2 text-left text-xs font-medium text-gray-600 hover:bg-gray-200 hover:text-gray-900\", index > 0 && \"border-l border-gray-300\"),\n\t\t\t\t\t\t\t\tonClick: () => handleSort(column.key),\n\t\t\t\t\t\t\t\tstyle: { width: column.width },\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1\",\n\t\t\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\t\tclassName: \"truncate\",\n\t\t\t\t\t\t\t\t\t\tchildren: column.label\n\t\t\t\t\t\t\t\t\t}), /* @__PURE__ */ jsx(SortIcon$1, {\n\t\t\t\t\t\t\t\t\t\tactive: isActive,\n\t\t\t\t\t\t\t\t\t\tdirection: sortDirection\n\t\t\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}, column.key);\n\t\t\t\t\t\t}) })\n\t\t\t\t\t}), /* @__PURE__ */ jsx(\"tbody\", { children: loading && sortedJobs.length === 0 ? /* @__PURE__ */ jsx(\"tr\", { children: /* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\tclassName: \"px-3 py-8 text-center text-sm text-gray-500\",\n\t\t\t\t\t\tcolSpan: COLUMNS$1.length,\n\t\t\t\t\t\tchildren: \"Loading...\"\n\t\t\t\t\t}) }) : sortedJobs.length === 0 ? /* @__PURE__ */ jsx(\"tr\", { children: /* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\tclassName: \"px-3 py-8 text-center text-sm text-gray-500\",\n\t\t\t\t\t\tcolSpan: COLUMNS$1.length,\n\t\t\t\t\t\tchildren: \"No jobs in queue\"\n\t\t\t\t\t}) }) : sortedJobs.map((job) => /* @__PURE__ */ jsxs(\"tr\", {\n\t\t\t\t\t\tclassName: \"odd:bg-white even:bg-gray-50 hover:bg-blue-50\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"px-3 py-2 text-xs\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm bg-blue-50 px-2 py-1 text-xs text-blue-700 hover:bg-blue-100\",\n\t\t\t\t\t\t\t\t\tonClick: () => setSelectedJob(job),\n\t\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\t\tchildren: \"View\"\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate\",\n\t\t\t\t\t\t\t\t\ttitle: job.id,\n\t\t\t\t\t\t\t\t\tchildren: truncateId$1(job.id)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: twMerge(\"inline-block rounded-sm px-1.5 py-0.5\", job.kind === \"mutation\" ? \"bg-purple-100 text-purple-700\" : \"bg-blue-100 text-blue-700\"),\n\t\t\t\t\t\t\t\t\tchildren: job.kind\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate\",\n\t\t\t\t\t\t\t\t\ttitle: job.documentId,\n\t\t\t\t\t\t\t\t\tchildren: truncateId$1(job.documentId)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate\",\n\t\t\t\t\t\t\t\t\ttitle: job.scope,\n\t\t\t\t\t\t\t\t\tchildren: job.scope\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate\",\n\t\t\t\t\t\t\t\t\ttitle: job.branch,\n\t\t\t\t\t\t\t\t\tchildren: job.branch\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate\",\n\t\t\t\t\t\t\t\t\ttitle: job.createdAt,\n\t\t\t\t\t\t\t\t\tchildren: formatDate(job.createdAt)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: job.retryCount ?? 0\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: twMerge(\"inline-flex items-center gap-1 rounded-sm px-1.5 py-0.5\", job.status === \"executing\" ? \"bg-green-100 text-green-700\" : \"bg-gray-100 text-gray-600\"),\n\t\t\t\t\t\t\t\t\tchildren: [job.status === \"executing\" && /* @__PURE__ */ jsx(\"span\", { className: \"inline-block size-1.5 animate-pulse rounded-full bg-green-500\" }), job.status]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t]\n\t\t\t\t\t}, job.id)) })]\n\t\t\t\t})\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"shrink-0 text-sm text-gray-600\",\n\t\t\t\tchildren: [\n\t\t\t\t\t\"Showing \",\n\t\t\t\t\tsortedJobs.length,\n\t\t\t\t\t\" job(s)\"\n\t\t\t\t]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(ObjectInspectorModal, {\n\t\t\t\tobject: selectedJob,\n\t\t\t\tonOpenChange: (open) => !open && setSelectedJob(null),\n\t\t\t\topen: selectedJob !== null,\n\t\t\t\ttitle: \"Job\"\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/remotes-inspector/components/connection-state-badge.tsx\nconst stateStyles = {\n\tconnected: \"bg-green-100 text-green-800\",\n\tconnecting: \"bg-blue-100 text-blue-800\",\n\treconnecting: \"bg-yellow-100 text-yellow-800\",\n\terror: \"bg-red-100 text-red-800\",\n\tdisconnected: \"bg-gray-100 text-gray-600\"\n};\nfunction ConnectionStateBadge({ state, failureCount }) {\n\treturn /* @__PURE__ */ jsxs(\"span\", {\n\t\tclassName: twMerge(\"inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium\", stateStyles[state] ?? \"bg-gray-100 text-gray-600\"),\n\t\tchildren: [state, failureCount > 0 && /* @__PURE__ */ jsxs(\"span\", {\n\t\t\tclassName: \"text-xs opacity-75\",\n\t\t\tchildren: [\n\t\t\t\t\"(\",\n\t\t\t\tfailureCount,\n\t\t\t\t\")\"\n\t\t\t]\n\t\t})]\n\t});\n}\n//#endregion\n//#region src/connect/components/remotes-inspector/utils.ts\nfunction truncateId(id, maxLength = 12) {\n\tif (id.length <= maxLength) return id;\n\treturn id.slice(0, maxLength) + \"...\";\n}\n//#endregion\n//#region src/connect/components/remotes-inspector/components/sort-icon.tsx\nfunction SortIcon({ direction, active }) {\n\tif (!active) return /* @__PURE__ */ jsx(Icon, {\n\t\tclassName: \"opacity-0 group-hover:opacity-50\",\n\t\tname: \"CaretSort\",\n\t\tsize: 12\n\t});\n\treturn /* @__PURE__ */ jsx(Icon, {\n\t\tclassName: direction === \"asc\" ? \"rotate-180\" : void 0,\n\t\tname: \"TriangleDown\",\n\t\tsize: 12\n\t});\n}\n//#endregion\n//#region src/connect/components/remotes-inspector/components/mailbox-table.tsx\nconst VIEW_COLUMN = {\n\tkey: \"view\",\n\tlabel: \"\",\n\twidth: \"60px\"\n};\nconst COLUMNS = [\n\tVIEW_COLUMN,\n\t{\n\t\tkey: \"documentId\",\n\t\tlabel: \"Document ID\",\n\t\twidth: \"150px\"\n\t},\n\t{\n\t\tkey: \"branch\",\n\t\tlabel: \"Branch\",\n\t\twidth: \"100px\"\n\t},\n\t{\n\t\tkey: \"scopes\",\n\t\tlabel: \"Scopes\",\n\t\twidth: \"100px\"\n\t},\n\t{\n\t\tkey: \"status\",\n\t\tlabel: \"Status\",\n\t\twidth: \"150px\"\n\t},\n\t{\n\t\tkey: \"opsCount\",\n\t\tlabel: \"Ops Count\",\n\t\twidth: \"80px\"\n\t}\n];\nconst DEAD_LETTER_COLUMNS = [\n\tVIEW_COLUMN,\n\t{\n\t\tkey: \"documentId\",\n\t\tlabel: \"Document ID\",\n\t\twidth: \"150px\"\n\t},\n\t{\n\t\tkey: \"branch\",\n\t\tlabel: \"Branch\",\n\t\twidth: \"100px\"\n\t},\n\t{\n\t\tkey: \"scopes\",\n\t\tlabel: \"Scopes\",\n\t\twidth: \"100px\"\n\t},\n\t{\n\t\tkey: \"error\",\n\t\tlabel: \"Error\",\n\t\twidth: \"200px\"\n\t}\n];\nfunction toSerializableObject(obj) {\n\treturn JSON.parse(JSON.stringify(obj, (_key, value) => {\n\t\tif (typeof value === \"function\") return \"[Function]\";\n\t\tif (typeof value === \"symbol\") return \"[Symbol]\";\n\t\tif (value instanceof Error) return {\n\t\t\tname: value.name,\n\t\t\tmessage: value.message\n\t\t};\n\t\treturn value;\n\t}));\n}\nfunction getStatusLabel(status) {\n\tswitch (status) {\n\t\tcase SyncOperationStatus.Unknown: return \"Unknown\";\n\t\tcase SyncOperationStatus.TransportPending: return \"Transport Pending\";\n\t\tcase SyncOperationStatus.ExecutionPending: return \"Execution Pending\";\n\t\tcase SyncOperationStatus.Applied: return \"Applied\";\n\t\tcase SyncOperationStatus.Error: return \"Error\";\n\t\tdefault: return \"Unknown\";\n\t}\n}\nfunction getStatusIcon(status) {\n\tswitch (status) {\n\t\tcase SyncOperationStatus.TransportPending:\n\t\tcase SyncOperationStatus.ExecutionPending: return /* @__PURE__ */ jsx(\"span\", { children: \"⏳\" });\n\t\tcase SyncOperationStatus.Applied: return /* @__PURE__ */ jsx(\"span\", { children: \"✅\" });\n\t\tcase SyncOperationStatus.Error: return /* @__PURE__ */ jsx(\"span\", { children: \"❌\" });\n\t\tdefault: return /* @__PURE__ */ jsx(\"span\", { children: \"❓\" });\n\t}\n}\nfunction getErrorMessage(error) {\n\tif (!error) return \"\";\n\treturn error.error.message;\n}\nfunction sortOperations$1(operations, sort) {\n\tconst ops = [...operations];\n\tif (!sort) return ops;\n\treturn ops.sort((a, b) => {\n\t\tlet comparison = 0;\n\t\tswitch (sort.column) {\n\t\t\tcase \"documentId\":\n\t\t\t\tcomparison = a.documentId.localeCompare(b.documentId);\n\t\t\t\tbreak;\n\t\t\tcase \"branch\":\n\t\t\t\tcomparison = a.branch.localeCompare(b.branch);\n\t\t\t\tbreak;\n\t\t\tcase \"scopes\":\n\t\t\t\tcomparison = a.scopes.join(\",\").localeCompare(b.scopes.join(\",\"));\n\t\t\t\tbreak;\n\t\t\tcase \"status\":\n\t\t\t\tcomparison = a.status - b.status;\n\t\t\t\tbreak;\n\t\t\tcase \"opsCount\":\n\t\t\t\tcomparison = a.operations.length - b.operations.length;\n\t\t\t\tbreak;\n\t\t\tcase \"error\":\n\t\t\t\tcomparison = getErrorMessage(a.error).localeCompare(getErrorMessage(b.error));\n\t\t\t\tbreak;\n\t\t\tdefault: return 0;\n\t\t}\n\t\treturn sort.direction === \"asc\" ? comparison : -comparison;\n\t});\n}\nfunction MailboxTable({ title, mailboxType, operations, sort, onSort, collapsed, onToggleCollapse }) {\n\tconst [selectedOperation, setSelectedOperation] = useState(null);\n\tconst columns = mailboxType === \"deadLetter\" ? DEAD_LETTER_COLUMNS : COLUMNS;\n\tconst sortedOps = sortOperations$1(operations, sort);\n\tconst handleSort = (columnKey) => {\n\t\tonSort(mailboxType, columnKey);\n\t};\n\tconst handleCopyAll = async () => {\n\t\tconst serializable = toSerializableObject(operations);\n\t\tconst json = JSON.stringify(serializable, null, 2);\n\t\tawait navigator.clipboard.writeText(json);\n\t};\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex flex-col gap-2\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex items-center justify-between\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\tclassName: \"flex items-center gap-2 text-left text-sm font-medium text-gray-700 hover:text-gray-900\",\n\t\t\t\t\tonClick: onToggleCollapse,\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\tclassName: twMerge(\"transition-transform\", collapsed && \"-rotate-90\"),\n\t\t\t\t\t\t\tname: \"ChevronDown\",\n\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\" (\",\n\t\t\t\t\t\toperations.length,\n\t\t\t\t\t\t\" item\",\n\t\t\t\t\t\toperations.length !== 1 ? \"s\" : \"\",\n\t\t\t\t\t\t\")\"\n\t\t\t\t\t]\n\t\t\t\t}), operations.length > 0 && /* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm bg-gray-100 px-2 py-1 text-xs text-gray-700 hover:bg-gray-200\",\n\t\t\t\t\tonClick: () => void handleCopyAll(),\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\tname: \"Copy\",\n\t\t\t\t\t\tsize: 12\n\t\t\t\t\t}), \"Copy All\"]\n\t\t\t\t})]\n\t\t\t}),\n\t\t\t!collapsed && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"overflow-hidden rounded-lg border border-gray-300\",\n\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"table\", {\n\t\t\t\t\tclassName: \"w-full border-collapse\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"thead\", {\n\t\t\t\t\t\tclassName: \"sticky top-0 bg-gray-100\",\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"tr\", { children: columns.map((column, index) => {\n\t\t\t\t\t\t\tconst isActive = sort?.column === column.key;\n\t\t\t\t\t\t\tconst sortDirection = isActive ? sort.direction : \"asc\";\n\t\t\t\t\t\t\treturn /* @__PURE__ */ jsx(\"th\", {\n\t\t\t\t\t\t\t\tclassName: twMerge(\"group cursor-pointer px-3 py-2 text-left text-xs font-medium text-gray-600 hover:bg-gray-200 hover:text-gray-900\", index > 0 && \"border-l border-gray-300\"),\n\t\t\t\t\t\t\t\tonClick: () => handleSort(column.key),\n\t\t\t\t\t\t\t\tstyle: { width: column.width },\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1\",\n\t\t\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\t\tclassName: \"truncate\",\n\t\t\t\t\t\t\t\t\t\tchildren: column.label\n\t\t\t\t\t\t\t\t\t}), /* @__PURE__ */ jsx(SortIcon, {\n\t\t\t\t\t\t\t\t\t\tactive: isActive,\n\t\t\t\t\t\t\t\t\t\tdirection: sortDirection\n\t\t\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}, column.key);\n\t\t\t\t\t\t}) })\n\t\t\t\t\t}), /* @__PURE__ */ jsx(\"tbody\", { children: sortedOps.length === 0 ? /* @__PURE__ */ jsx(\"tr\", { children: /* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\tclassName: \"px-3 py-4 text-center text-sm text-gray-500\",\n\t\t\t\t\t\tcolSpan: columns.length,\n\t\t\t\t\t\tchildren: \"No operations\"\n\t\t\t\t\t}) }) : sortedOps.map((op) => /* @__PURE__ */ jsxs(\"tr\", {\n\t\t\t\t\t\tclassName: \"odd:bg-white even:bg-gray-50 hover:bg-blue-50\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"px-3 py-2 text-xs\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm bg-blue-50 px-2 py-1 text-xs text-blue-700 hover:bg-blue-100\",\n\t\t\t\t\t\t\t\t\tonClick: () => setSelectedOperation(op),\n\t\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\t\tchildren: \"View\"\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate\",\n\t\t\t\t\t\t\t\t\ttitle: op.documentId,\n\t\t\t\t\t\t\t\t\tchildren: truncateId(op.documentId)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate\",\n\t\t\t\t\t\t\t\t\ttitle: op.branch,\n\t\t\t\t\t\t\t\t\tchildren: op.branch\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate\",\n\t\t\t\t\t\t\t\t\ttitle: op.scopes.join(\", \"),\n\t\t\t\t\t\t\t\t\tchildren: op.scopes.join(\", \")\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tmailboxType === \"deadLetter\" ? /* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate text-red-600\",\n\t\t\t\t\t\t\t\t\ttitle: getErrorMessage(op.error),\n\t\t\t\t\t\t\t\t\tchildren: getErrorMessage(op.error) || \"Unknown error\"\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1\",\n\t\t\t\t\t\t\t\t\tchildren: [getStatusIcon(op.status), getStatusLabel(op.status)]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}), /* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: op.operations.length\n\t\t\t\t\t\t\t})] })\n\t\t\t\t\t\t]\n\t\t\t\t\t}, op.id)) })]\n\t\t\t\t})\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(ObjectInspectorModal, {\n\t\t\t\tobject: selectedOperation,\n\t\t\t\tonOpenChange: (open) => !open && setSelectedOperation(null),\n\t\t\t\topen: selectedOperation !== null,\n\t\t\t\ttitle: \"Sync Operation\"\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/remotes-inspector/components/channel-inspector.tsx\nfunction formatTimestamp(ms) {\n\tif (ms === 0) return \"-\";\n\treturn new Date(ms).toLocaleTimeString();\n}\nfunction ChannelInspector({ remoteName, channel, onBack, onRefresh, connectionState }) {\n\tconst [sorts, setSorts] = useState({\n\t\tinbox: void 0,\n\t\toutbox: void 0,\n\t\tdeadLetter: void 0\n\t});\n\tconst [collapsed, setCollapsed] = useState({\n\t\tinbox: false,\n\t\toutbox: false,\n\t\tdeadLetter: false\n\t});\n\tconst handleToggleCollapse = (mailbox) => {\n\t\tsetCollapsed((prev) => ({\n\t\t\t...prev,\n\t\t\t[mailbox]: !prev[mailbox]\n\t\t}));\n\t};\n\tconst handleSort = (mailbox, columnKey) => {\n\t\tsetSorts((prev) => {\n\t\t\tconst currentSort = prev[mailbox];\n\t\t\tconst newDirection = currentSort?.column === columnKey && currentSort.direction === \"asc\" ? \"desc\" : \"asc\";\n\t\t\treturn {\n\t\t\t\t...prev,\n\t\t\t\t[mailbox]: {\n\t\t\t\t\tcolumn: columnKey,\n\t\t\t\t\tdirection: newDirection\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t};\n\tconst pollerControls = useCallback(() => {\n\t\treturn \"poller\" in channel ? channel.poller : null;\n\t}, [channel])();\n\tconst [pollerState, setPollerState] = useState(() => ({\n\t\tisPaused: pollerControls?.isPaused() ?? false,\n\t\tisRunning: pollerControls?.isRunning() ?? false\n\t}));\n\tconst [intervalMs, setIntervalMs] = useState(() => pollerControls?.getIntervalMs() ?? 2e3);\n\tconst [mailboxStates, setMailboxStates] = useState(() => ({\n\t\tinbox: { isPaused: channel.inbox.isPaused() },\n\t\toutbox: { isPaused: channel.outbox.isPaused() }\n\t}));\n\tconst handlePause = useCallback(() => {\n\t\tif (pollerControls) {\n\t\t\tpollerControls.pause();\n\t\t\tsetPollerState({\n\t\t\t\tisPaused: pollerControls.isPaused(),\n\t\t\t\tisRunning: pollerControls.isRunning()\n\t\t\t});\n\t\t}\n\t}, [pollerControls]);\n\tconst handleResume = useCallback(() => {\n\t\tif (pollerControls) {\n\t\t\tpollerControls.resume();\n\t\t\tsetPollerState({\n\t\t\t\tisPaused: pollerControls.isPaused(),\n\t\t\t\tisRunning: pollerControls.isRunning()\n\t\t\t});\n\t\t}\n\t}, [pollerControls]);\n\tconst handlePollNow = useCallback(() => {\n\t\tif (pollerControls) pollerControls.triggerNow();\n\t}, [pollerControls]);\n\tconst handleApplyInterval = useCallback(() => {\n\t\tif (pollerControls) pollerControls.setIntervalMs(intervalMs);\n\t}, [pollerControls, intervalMs]);\n\tconst handleMailboxPause = useCallback((mailbox) => {\n\t\tconst mailboxInstance = mailbox === \"inbox\" ? channel.inbox : channel.outbox;\n\t\tmailboxInstance.pause();\n\t\tsetMailboxStates((prev) => ({\n\t\t\t...prev,\n\t\t\t[mailbox]: { isPaused: mailboxInstance.isPaused() }\n\t\t}));\n\t}, [channel]);\n\tconst handleMailboxResume = useCallback((mailbox) => {\n\t\tconst mailboxInstance = mailbox === \"inbox\" ? channel.inbox : channel.outbox;\n\t\tmailboxInstance.resume();\n\t\tsetMailboxStates((prev) => ({\n\t\t\t...prev,\n\t\t\t[mailbox]: { isPaused: mailboxInstance.isPaused() }\n\t\t}));\n\t}, [channel]);\n\tconst handleMailboxFlush = useCallback((mailbox) => {\n\t\t(mailbox === \"inbox\" ? channel.inbox : channel.outbox).flush();\n\t\tonRefresh?.();\n\t}, [channel, onRefresh]);\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex h-full flex-col gap-3 overflow-auto\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex items-center justify-between\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"flex items-center gap-2\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-2 py-1 text-sm text-gray-700 hover:bg-gray-100\",\n\t\t\t\t\t\tonClick: onBack,\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\tclassName: \"rotate-90\",\n\t\t\t\t\t\t\tname: \"ChevronDown\",\n\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t}), \"Back\"]\n\t\t\t\t\t}), /* @__PURE__ */ jsxs(\"h2\", {\n\t\t\t\t\t\tclassName: \"text-lg font-semibold text-gray-900\",\n\t\t\t\t\t\tchildren: [\"Channel: \", remoteName]\n\t\t\t\t\t})]\n\t\t\t\t}), onRefresh && /* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100\",\n\t\t\t\t\tonClick: onRefresh,\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\tname: \"Reload\",\n\t\t\t\t\t\tsize: 14\n\t\t\t\t\t}), \"Refresh\"]\n\t\t\t\t})]\n\t\t\t}),\n\t\t\tconnectionState && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"rounded-sm border border-gray-200 bg-white p-4\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"h3\", {\n\t\t\t\t\tclassName: \"mb-3 text-sm font-semibold text-gray-900\",\n\t\t\t\t\tchildren: \"Connection State\"\n\t\t\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"flex flex-wrap items-center gap-4 text-sm text-gray-600\",\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\tclassName: \"flex items-center gap-2\",\n\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", { children: \"State:\" }), /* @__PURE__ */ jsx(ConnectionStateBadge, {\n\t\t\t\t\t\t\t\tfailureCount: connectionState.failureCount,\n\t\t\t\t\t\t\t\tstate: connectionState.state\n\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t/* @__PURE__ */ jsxs(\"div\", { children: [\"Last success: \", formatTimestamp(connectionState.lastSuccessUtcMs)] }),\n\t\t\t\t\t\t/* @__PURE__ */ jsxs(\"div\", { children: [\"Last failure: \", formatTimestamp(connectionState.lastFailureUtcMs)] }),\n\t\t\t\t\t\t/* @__PURE__ */ jsxs(\"div\", { children: [\"Failures: \", connectionState.failureCount] }),\n\t\t\t\t\t\t/* @__PURE__ */ jsxs(\"div\", { children: [\n\t\t\t\t\t\t\t\"Push:\",\n\t\t\t\t\t\t\t\" \",\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\tclassName: connectionState.pushBlocked ? \"text-red-600\" : \"text-green-600\",\n\t\t\t\t\t\t\t\tchildren: connectionState.pushBlocked ? \"Blocked\" : \"OK\"\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tconnectionState.pushFailureCount > 0 && /* @__PURE__ */ jsxs(\"span\", {\n\t\t\t\t\t\t\t\tclassName: \"ml-1 text-red-600\",\n\t\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\t\"(\",\n\t\t\t\t\t\t\t\t\tconnectionState.pushFailureCount,\n\t\t\t\t\t\t\t\t\t\" failures)\"\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t] })\n\t\t\t\t\t]\n\t\t\t\t})]\n\t\t\t}),\n\t\t\tpollerControls && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"rounded-sm border border-gray-200 bg-white p-4\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"h3\", {\n\t\t\t\t\tclassName: \"mb-3 text-sm font-semibold text-gray-900\",\n\t\t\t\t\tchildren: \"Poller\"\n\t\t\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"flex items-center justify-between\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"flex items-center gap-4\",\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\tclassName: \"text-sm text-gray-600\",\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\"Status:\",\n\t\t\t\t\t\t\t\t\" \",\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: pollerState.isPaused ? \"text-yellow-600\" : \"text-green-600\",\n\t\t\t\t\t\t\t\t\tchildren: pollerState.isPaused ? \"Paused\" : \"Running\"\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\tclassName: \"flex items-center gap-1\",\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"label\", {\n\t\t\t\t\t\t\t\t\tclassName: \"text-sm text-gray-600\",\n\t\t\t\t\t\t\t\t\thtmlFor: \"poll-interval\",\n\t\t\t\t\t\t\t\t\tchildren: \"Interval:\"\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"input\", {\n\t\t\t\t\t\t\t\t\tclassName: \"w-20 rounded-sm border border-gray-300 px-2 py-1 text-sm\",\n\t\t\t\t\t\t\t\t\tid: \"poll-interval\",\n\t\t\t\t\t\t\t\t\tmin: 100,\n\t\t\t\t\t\t\t\t\tonChange: (e) => setIntervalMs(Number(e.target.value)),\n\t\t\t\t\t\t\t\t\tonKeyDown: (e) => {\n\t\t\t\t\t\t\t\t\t\tif (e.key === \"Enter\") handleApplyInterval();\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttype: \"number\",\n\t\t\t\t\t\t\t\t\tvalue: intervalMs\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"text-sm text-gray-500\",\n\t\t\t\t\t\t\t\t\tchildren: \"ms\"\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\t\tclassName: \"ml-1 rounded-sm border border-gray-300 bg-white px-2 py-1 text-sm text-gray-700 hover:bg-gray-100\",\n\t\t\t\t\t\t\t\t\tonClick: handleApplyInterval,\n\t\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\t\tchildren: \"Apply\"\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t})]\n\t\t\t\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"flex gap-2\",\n\t\t\t\t\t\tchildren: [pollerState.isPaused ? /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100\",\n\t\t\t\t\t\t\tonClick: handleResume,\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\tchildren: \"Resume\"\n\t\t\t\t\t\t}) : /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100\",\n\t\t\t\t\t\t\tonClick: handlePause,\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\tchildren: \"Pause\"\n\t\t\t\t\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\t\t\t\tdisabled: !pollerState.isPaused,\n\t\t\t\t\t\t\tonClick: handlePollNow,\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\tchildren: \"Poll Now\"\n\t\t\t\t\t\t})]\n\t\t\t\t\t})]\n\t\t\t\t})]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"rounded-sm border border-gray-200 bg-white p-4\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"h3\", {\n\t\t\t\t\tclassName: \"mb-3 text-sm font-semibold text-gray-900\",\n\t\t\t\t\tchildren: \"Mailbox Processing\"\n\t\t\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"flex flex-col gap-3\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"flex items-center justify-between\",\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\tclassName: \"flex items-center gap-3 text-sm text-gray-600\",\n\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"span\", { children: [\n\t\t\t\t\t\t\t\t\"Inbox:\",\n\t\t\t\t\t\t\t\t\" \",\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: mailboxStates.inbox.isPaused ? \"text-yellow-600\" : \"text-green-600\",\n\t\t\t\t\t\t\t\t\tchildren: mailboxStates.inbox.isPaused ? \"Paused\" : \"Active\"\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t] }), /* @__PURE__ */ jsxs(\"span\", {\n\t\t\t\t\t\t\t\tclassName: \"font-mono text-sm text-gray-500\",\n\t\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\t\"We ack'd (theirs): \",\n\t\t\t\t\t\t\t\t\tchannel.inbox.ackOrdinal,\n\t\t\t\t\t\t\t\t\t\" | Received:\",\n\t\t\t\t\t\t\t\t\t\" \",\n\t\t\t\t\t\t\t\t\tchannel.inbox.latestOrdinal\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\tclassName: \"flex gap-2\",\n\t\t\t\t\t\t\tchildren: [mailboxStates.inbox.isPaused ? /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100\",\n\t\t\t\t\t\t\t\tonClick: () => handleMailboxResume(\"inbox\"),\n\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\tchildren: \"Resume\"\n\t\t\t\t\t\t\t}) : /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100\",\n\t\t\t\t\t\t\t\tonClick: () => handleMailboxPause(\"inbox\"),\n\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\tchildren: \"Pause\"\n\t\t\t\t\t\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\t\t\t\t\tdisabled: !mailboxStates.inbox.isPaused,\n\t\t\t\t\t\t\t\tonClick: () => handleMailboxFlush(\"inbox\"),\n\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\tchildren: \"Flush\"\n\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t})]\n\t\t\t\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"flex items-center justify-between\",\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\tclassName: \"flex items-center gap-3 text-sm text-gray-600\",\n\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"span\", { children: [\n\t\t\t\t\t\t\t\t\"Outbox:\",\n\t\t\t\t\t\t\t\t\" \",\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: mailboxStates.outbox.isPaused ? \"text-yellow-600\" : \"text-green-600\",\n\t\t\t\t\t\t\t\t\tchildren: mailboxStates.outbox.isPaused ? \"Paused\" : \"Active\"\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t] }), /* @__PURE__ */ jsxs(\"span\", {\n\t\t\t\t\t\t\t\tclassName: \"font-mono text-sm text-gray-500\",\n\t\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\t\"They ack'd (ours): \",\n\t\t\t\t\t\t\t\t\tchannel.outbox.ackOrdinal,\n\t\t\t\t\t\t\t\t\t\" | Sent:\",\n\t\t\t\t\t\t\t\t\t\" \",\n\t\t\t\t\t\t\t\t\tchannel.outbox.latestOrdinal\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\tclassName: \"flex gap-2\",\n\t\t\t\t\t\t\tchildren: [mailboxStates.outbox.isPaused ? /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100\",\n\t\t\t\t\t\t\t\tonClick: () => handleMailboxResume(\"outbox\"),\n\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\tchildren: \"Resume\"\n\t\t\t\t\t\t\t}) : /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100\",\n\t\t\t\t\t\t\t\tonClick: () => handleMailboxPause(\"outbox\"),\n\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\tchildren: \"Pause\"\n\t\t\t\t\t\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\t\t\t\t\tdisabled: !mailboxStates.outbox.isPaused,\n\t\t\t\t\t\t\t\tonClick: () => handleMailboxFlush(\"outbox\"),\n\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\tchildren: \"Flush\"\n\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t})]\n\t\t\t\t\t})]\n\t\t\t\t})]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex flex-col gap-6\",\n\t\t\t\tchildren: [\n\t\t\t\t\t/* @__PURE__ */ jsx(MailboxTable, {\n\t\t\t\t\t\tcollapsed: collapsed.inbox,\n\t\t\t\t\t\tmailboxType: \"inbox\",\n\t\t\t\t\t\tonSort: handleSort,\n\t\t\t\t\t\tonToggleCollapse: () => handleToggleCollapse(\"inbox\"),\n\t\t\t\t\t\toperations: channel.inbox.items,\n\t\t\t\t\t\tsort: sorts.inbox,\n\t\t\t\t\t\ttitle: \"Inbox\"\n\t\t\t\t\t}),\n\t\t\t\t\t/* @__PURE__ */ jsx(MailboxTable, {\n\t\t\t\t\t\tcollapsed: collapsed.outbox,\n\t\t\t\t\t\tmailboxType: \"outbox\",\n\t\t\t\t\t\tonSort: handleSort,\n\t\t\t\t\t\tonToggleCollapse: () => handleToggleCollapse(\"outbox\"),\n\t\t\t\t\t\toperations: channel.outbox.items,\n\t\t\t\t\t\tsort: sorts.outbox,\n\t\t\t\t\t\ttitle: \"Outbox\"\n\t\t\t\t\t}),\n\t\t\t\t\t/* @__PURE__ */ jsx(MailboxTable, {\n\t\t\t\t\t\tcollapsed: collapsed.deadLetter,\n\t\t\t\t\t\tmailboxType: \"deadLetter\",\n\t\t\t\t\t\tonSort: handleSort,\n\t\t\t\t\t\tonToggleCollapse: () => handleToggleCollapse(\"deadLetter\"),\n\t\t\t\t\t\toperations: channel.deadLetter.items,\n\t\t\t\t\t\tsort: sorts.deadLetter,\n\t\t\t\t\t\ttitle: \"Dead Letter\"\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/remotes-inspector/remotes-inspector.tsx\nconst BASE_COLUMNS = [\n\t{\n\t\tkey: \"id\",\n\t\tlabel: \"ID\",\n\t\twidth: \"120px\"\n\t},\n\t{\n\t\tkey: \"name\",\n\t\tlabel: \"Name\",\n\t\twidth: \"150px\"\n\t},\n\t{\n\t\tkey: \"status\",\n\t\tlabel: \"Status\",\n\t\twidth: \"120px\"\n\t},\n\t{\n\t\tkey: \"collectionId\",\n\t\tlabel: \"Collection ID\",\n\t\twidth: \"200px\"\n\t},\n\t{\n\t\tkey: \"filter\",\n\t\tlabel: \"Filter\",\n\t\twidth: \"200px\"\n\t},\n\t{\n\t\tkey: \"channel\",\n\t\tlabel: \"Channel\",\n\t\twidth: \"100px\"\n\t}\n];\nconst ACTIONS_COLUMN = {\n\tkey: \"actions\",\n\tlabel: \"Actions\",\n\twidth: \"100px\"\n};\nfunction formatFilter(filter) {\n\tconst parts = [];\n\tif (filter.branch) parts.push(`branch:${filter.branch}`);\n\tif (filter.documentId.length > 0) parts.push(`${filter.documentId.length} doc(s)`);\n\tif (filter.scope.length > 0) parts.push(`${filter.scope.length} scope(s)`);\n\treturn parts.length > 0 ? parts.join(\", \") : \"-\";\n}\nfunction sortRemotes(remotes, sort) {\n\tif (!sort) return remotes;\n\treturn [...remotes].sort((a, b) => {\n\t\tlet aValue;\n\t\tlet bValue;\n\t\tswitch (sort.column) {\n\t\t\tcase \"id\":\n\t\t\t\taValue = a.id;\n\t\t\t\tbValue = b.id;\n\t\t\t\tbreak;\n\t\t\tcase \"name\":\n\t\t\t\taValue = a.name;\n\t\t\t\tbValue = b.name;\n\t\t\t\tbreak;\n\t\t\tcase \"collectionId\":\n\t\t\t\taValue = a.collectionId;\n\t\t\t\tbValue = b.collectionId;\n\t\t\t\tbreak;\n\t\t\tcase \"filter\":\n\t\t\t\taValue = formatFilter(a.filter);\n\t\t\t\tbValue = formatFilter(b.filter);\n\t\t\t\tbreak;\n\t\t\tdefault: return 0;\n\t\t}\n\t\tconst comparison = aValue.localeCompare(bValue);\n\t\treturn sort.direction === \"asc\" ? comparison : -comparison;\n\t});\n}\nfunction RemotesInspector({ getRemotes, removeRemote, addRemoteManual, triggerPull, connectionStates }) {\n\tconst [remotes, setRemotes] = useState([]);\n\tconst [loading, setLoading] = useState(true);\n\tconst [sort, setSort] = useState();\n\tconst [selectedRemote, setSelectedRemote] = useState();\n\tconst [manualUrl, setManualUrl] = useState(\"\");\n\tconst [adding, setAdding] = useState(false);\n\tconst [addError, setAddError] = useState();\n\tconst hasRowActions = !!removeRemote || !!triggerPull;\n\tconst columns = useMemo(() => hasRowActions ? [...BASE_COLUMNS, ACTIONS_COLUMN] : BASE_COLUMNS, [hasRowActions]);\n\tconst loadRemotes = useCallback(async () => {\n\t\tsetLoading(true);\n\t\tsetRemotes(await getRemotes());\n\t\tsetLoading(false);\n\t}, [getRemotes]);\n\tuseEffect(() => {\n\t\tloadRemotes();\n\t}, [loadRemotes]);\n\tconst handleRefresh = useCallback(async () => {\n\t\tawait loadRemotes();\n\t\tif (selectedRemote) setSelectedRemote(remotes.find((r) => r.id === selectedRemote.id));\n\t}, [\n\t\tloadRemotes,\n\t\tselectedRemote,\n\t\tremotes\n\t]);\n\tconst handleSort = (columnKey) => {\n\t\tif (columnKey === \"channel\" || columnKey === \"actions\" || columnKey === \"status\") return;\n\t\tsetSort({\n\t\t\tcolumn: columnKey,\n\t\t\tdirection: sort?.column === columnKey && sort.direction === \"asc\" ? \"desc\" : \"asc\"\n\t\t});\n\t};\n\tconst handleViewChannel = (remote) => {\n\t\tsetSelectedRemote(remote);\n\t};\n\tconst handleRemove = useCallback(async (remote) => {\n\t\tif (!removeRemote) return;\n\t\tawait removeRemote(remote.name);\n\t\tawait loadRemotes();\n\t\tif (selectedRemote?.id === remote.id) setSelectedRemote(void 0);\n\t}, [\n\t\tremoveRemote,\n\t\tloadRemotes,\n\t\tselectedRemote\n\t]);\n\tconst handleBack = () => {\n\t\tsetSelectedRemote(void 0);\n\t};\n\tconst handleAddManual = useCallback(async () => {\n\t\tif (!addRemoteManual) return;\n\t\tconst url = manualUrl.trim();\n\t\tif (!url) return;\n\t\tsetAdding(true);\n\t\tsetAddError(void 0);\n\t\ttry {\n\t\t\tawait addRemoteManual(url);\n\t\t\tsetManualUrl(\"\");\n\t\t\tawait loadRemotes();\n\t\t} catch (error) {\n\t\t\tsetAddError(error instanceof Error ? error.message : String(error));\n\t\t} finally {\n\t\t\tsetAdding(false);\n\t\t}\n\t}, [\n\t\taddRemoteManual,\n\t\tmanualUrl,\n\t\tloadRemotes\n\t]);\n\tconst handlePull = useCallback((remote) => {\n\t\ttriggerPull?.(remote.name);\n\t}, [triggerPull]);\n\tif (selectedRemote) return /* @__PURE__ */ jsx(ChannelInspector, {\n\t\tchannel: selectedRemote.channel,\n\t\tconnectionState: connectionStates?.get(selectedRemote.name),\n\t\tonBack: handleBack,\n\t\tonRefresh: () => void handleRefresh(),\n\t\tremoteName: selectedRemote.name\n\t});\n\tconst sortedRemotes = sortRemotes(remotes, sort);\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex h-full flex-col gap-2\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex shrink-0 items-center justify-between gap-2\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"h2\", {\n\t\t\t\t\tclassName: \"text-lg font-semibold text-gray-900\",\n\t\t\t\t\tchildren: \"Remotes Inspector\"\n\t\t\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"flex items-center gap-2\",\n\t\t\t\t\tchildren: [addRemoteManual && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"flex items-center gap-1\",\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"input\", {\n\t\t\t\t\t\t\tclassName: \"w-[260px] rounded-sm border border-gray-300 px-2 py-1.5 text-sm text-gray-900 placeholder:text-gray-400\",\n\t\t\t\t\t\t\tdisabled: adding,\n\t\t\t\t\t\t\tonChange: (e) => setManualUrl(e.target.value),\n\t\t\t\t\t\t\tonKeyDown: (e) => {\n\t\t\t\t\t\t\t\tif (e.key === \"Enter\") handleAddManual();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tplaceholder: \"https://reactor/d/drive-id\",\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\tvalue: manualUrl\n\t\t\t\t\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100 disabled:opacity-50\",\n\t\t\t\t\t\t\tdisabled: adding || !manualUrl.trim(),\n\t\t\t\t\t\t\tonClick: () => void handleAddManual(),\n\t\t\t\t\t\t\ttitle: \"Register a remote drive in manual poll mode (no background polling)\",\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\tchildren: \"Add (manual)\"\n\t\t\t\t\t\t})]\n\t\t\t\t\t}), /* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm border border-gray-300 bg-white px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100 disabled:opacity-50\",\n\t\t\t\t\t\tdisabled: loading,\n\t\t\t\t\t\tonClick: () => void handleRefresh(),\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\tname: \"Reload\",\n\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t}), \"Refresh\"]\n\t\t\t\t\t})]\n\t\t\t\t})]\n\t\t\t}),\n\t\t\taddError && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"shrink-0 rounded-sm border border-red-300 bg-red-50 px-3 py-1.5 text-xs text-red-700\",\n\t\t\t\tchildren: addError\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"max-h-full overflow-auto rounded-lg border border-gray-300\",\n\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"table\", {\n\t\t\t\t\tclassName: \"w-full border-collapse\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"thead\", {\n\t\t\t\t\t\tclassName: \"sticky top-0 bg-gray-100\",\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"tr\", { children: columns.map((column, index) => {\n\t\t\t\t\t\t\tconst isActive = sort?.column === column.key;\n\t\t\t\t\t\t\tconst sortDirection = isActive ? sort.direction : \"asc\";\n\t\t\t\t\t\t\tconst isSortable = column.key !== \"channel\" && column.key !== \"actions\" && column.key !== \"status\";\n\t\t\t\t\t\t\treturn /* @__PURE__ */ jsx(\"th\", {\n\t\t\t\t\t\t\t\tclassName: twMerge(\"group px-3 py-2 text-left text-xs font-medium text-gray-600\", index > 0 && \"border-l border-gray-300\", isSortable && \"cursor-pointer hover:bg-gray-200 hover:text-gray-900\"),\n\t\t\t\t\t\t\t\tonClick: () => isSortable && handleSort(column.key),\n\t\t\t\t\t\t\t\tstyle: { width: column.width },\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1\",\n\t\t\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\t\tclassName: \"truncate\",\n\t\t\t\t\t\t\t\t\t\tchildren: column.label\n\t\t\t\t\t\t\t\t\t}), isSortable && /* @__PURE__ */ jsx(SortIcon, {\n\t\t\t\t\t\t\t\t\t\tactive: isActive,\n\t\t\t\t\t\t\t\t\t\tdirection: sortDirection\n\t\t\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}, column.key);\n\t\t\t\t\t\t}) })\n\t\t\t\t\t}), /* @__PURE__ */ jsx(\"tbody\", { children: loading && sortedRemotes.length === 0 ? /* @__PURE__ */ jsx(\"tr\", { children: /* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\tclassName: \"px-3 py-8 text-center text-sm text-gray-500\",\n\t\t\t\t\t\tcolSpan: columns.length,\n\t\t\t\t\t\tchildren: \"Loading...\"\n\t\t\t\t\t}) }) : sortedRemotes.length === 0 ? /* @__PURE__ */ jsx(\"tr\", { children: /* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\tclassName: \"px-3 py-8 text-center text-sm text-gray-500\",\n\t\t\t\t\t\tcolSpan: columns.length,\n\t\t\t\t\t\tchildren: \"No remotes configured\"\n\t\t\t\t\t}) }) : sortedRemotes.map((remote) => /* @__PURE__ */ jsxs(\"tr\", {\n\t\t\t\t\t\tclassName: \"odd:bg-white even:bg-gray-50 hover:bg-blue-50\",\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate\",\n\t\t\t\t\t\t\t\t\ttitle: remote.id,\n\t\t\t\t\t\t\t\t\tchildren: truncateId(remote.id)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate\",\n\t\t\t\t\t\t\t\t\ttitle: remote.name,\n\t\t\t\t\t\t\t\t\tchildren: remote.name\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2\",\n\t\t\t\t\t\t\t\tchildren: connectionStates?.get(remote.name) ? /* @__PURE__ */ jsx(ConnectionStateBadge, {\n\t\t\t\t\t\t\t\t\tfailureCount: connectionStates.get(remote.name).failureCount,\n\t\t\t\t\t\t\t\t\tstate: connectionStates.get(remote.name).state\n\t\t\t\t\t\t\t\t}) : /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"text-xs text-gray-400\",\n\t\t\t\t\t\t\t\t\tchildren: \"-\"\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate\",\n\t\t\t\t\t\t\t\t\ttitle: remote.collectionId,\n\t\t\t\t\t\t\t\t\tchildren: remote.collectionId\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2 text-xs text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"block truncate\",\n\t\t\t\t\t\t\t\t\ttitle: formatFilter(remote.filter),\n\t\t\t\t\t\t\t\t\tchildren: formatFilter(remote.filter)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1 rounded-sm bg-blue-50 px-2 py-1 text-xs text-blue-700 hover:bg-blue-100\",\n\t\t\t\t\t\t\t\t\tonClick: () => handleViewChannel(remote),\n\t\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\t\tchildren: [\"View\", /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\t\t\t\tname: \"CaretRight\",\n\t\t\t\t\t\t\t\t\t\tsize: 12\n\t\t\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\thasRowActions && /* @__PURE__ */ jsx(\"td\", {\n\t\t\t\t\t\t\t\tclassName: \"border-l border-gray-300 px-3 py-2\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\t\t\tclassName: \"flex items-center gap-1\",\n\t\t\t\t\t\t\t\t\tchildren: [triggerPull && /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\t\t\tclassName: \"rounded-sm bg-gray-100 px-2 py-1 text-xs text-gray-700 hover:bg-gray-200\",\n\t\t\t\t\t\t\t\t\t\tonClick: () => handlePull(remote),\n\t\t\t\t\t\t\t\t\t\ttitle: \"Trigger a single pull cycle for this remote\",\n\t\t\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\t\t\tchildren: \"Pull\"\n\t\t\t\t\t\t\t\t\t}), removeRemote && /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\t\t\tclassName: \"rounded-sm bg-red-50 px-2 py-1 text-xs text-red-700 hover:bg-red-100\",\n\t\t\t\t\t\t\t\t\t\tonClick: () => void handleRemove(remote),\n\t\t\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\t\t\tchildren: \"Remove\"\n\t\t\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t]\n\t\t\t\t\t}, remote.id)) })]\n\t\t\t\t})\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"shrink-0 text-sm text-gray-600\",\n\t\t\t\tchildren: [\n\t\t\t\t\t\"Showing \",\n\t\t\t\t\tsortedRemotes.length,\n\t\t\t\t\t\" remote(s)\"\n\t\t\t\t]\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/modal/inspector-modal/inspector-modal.tsx\nfunction InspectorModal({ open, onOpenChange, modalProps, containerProps, dbExplorerProps, remotesInspectorProps, queueInspectorProps, processorsInspectorProps, integrityInspectorProps, defaultTab = \"Database\" }) {\n\treturn /* @__PURE__ */ jsx(Modal, {\n\t\t...modalProps,\n\t\tcontentProps: {\n\t\t\tclassName: \"rounded-2xl\",\n\t\t\tstyle: {\n\t\t\t\theight: \"90vh\",\n\t\t\t\twidth: \"90vw\",\n\t\t\t\tmaxWidth: \"1400px\"\n\t\t\t}\n\t\t},\n\t\tonOpenChange,\n\t\topen,\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t...containerProps,\n\t\t\tclassName: twMerge(\"flex size-full flex-col bg-white\", containerProps?.className),\n\t\t\tchildren: [/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"flex shrink-0 items-center justify-end px-3 pt-3\",\n\t\t\t\tchildren: /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\tclassName: \"flex size-6 cursor-pointer items-center justify-center rounded-md text-gray-500 outline-none hover:text-gray-900\",\n\t\t\t\t\tonClick: () => onOpenChange(false),\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\tname: \"XmarkLight\",\n\t\t\t\t\t\tsize: 24\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}), /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"flex min-h-0 flex-1 flex-col overflow-hidden px-3 pb-3\",\n\t\t\t\tchildren: /* @__PURE__ */ jsxs(Tabs, {\n\t\t\t\t\tdefaultValue: defaultTab,\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t/* @__PURE__ */ jsx(TabContent, {\n\t\t\t\t\t\t\tdescription: \"Database explorer\",\n\t\t\t\t\t\t\tlabel: \"Database\",\n\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\t\t\tclassName: \"h-full\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(DBExplorer, { ...dbExplorerProps })\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t/* @__PURE__ */ jsx(TabContent, {\n\t\t\t\t\t\t\tdescription: \"Remotes inspector\",\n\t\t\t\t\t\t\tlabel: \"Remotes\",\n\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\t\t\tclassName: \"h-full\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(RemotesInspector, { ...remotesInspectorProps })\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tqueueInspectorProps && /* @__PURE__ */ jsx(TabContent, {\n\t\t\t\t\t\t\tdescription: \"Queue inspector\",\n\t\t\t\t\t\t\tlabel: \"Queue\",\n\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\t\t\tclassName: \"h-full\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(QueueInspector, { ...queueInspectorProps })\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tprocessorsInspectorProps && /* @__PURE__ */ jsx(TabContent, {\n\t\t\t\t\t\t\tdescription: \"Processors inspector\",\n\t\t\t\t\t\t\tlabel: \"Processors\",\n\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\t\t\tclassName: \"h-full\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(ProcessorsInspector, { ...processorsInspectorProps })\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tintegrityInspectorProps && /* @__PURE__ */ jsx(TabContent, {\n\t\t\t\t\t\t\tdescription: \"Integrity inspector\",\n\t\t\t\t\t\t\tlabel: \"Integrity\",\n\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\t\t\tclassName: \"h-full\",\n\t\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(IntegrityInspector, { ...integrityInspectorProps })\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t]\n\t\t\t\t})\n\t\t\t})]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/modal/missing-package-modal.tsx\nconst buttonStyles$2 = \"min-h-[36px] text-sm font-semibold py-2 px-4 rounded-xl outline-none active:opacity-75 hover:scale-105 transform transition-all\";\nfunction groupByPackage(installations) {\n\tconst groups = /* @__PURE__ */ new Map();\n\tfor (const item of installations) {\n\t\tconst existing = groups.get(item.packageName) ?? [];\n\t\texisting.push(item.documentType);\n\t\tgroups.set(item.packageName, existing);\n\t}\n\treturn Array.from(groups.entries()).map(([packageName, documentTypes]) => ({\n\t\tpackageName,\n\t\tdocumentTypes\n\t}));\n}\nfunction PackageInstallModal(props) {\n\tconst { pendingInstallations, onInstall, onDismiss, open, onOpenChange, overlayProps, contentProps, ...restProps } = props;\n\tconst [installingPackages, setInstallingPackages] = useState(() => /* @__PURE__ */ new Set());\n\tconst grouped = groupByPackage(pendingInstallations);\n\tasync function handleInstall(packageName) {\n\t\tsetInstallingPackages((prev) => new Set(prev).add(packageName));\n\t\ttry {\n\t\t\tawait onInstall(packageName);\n\t\t} finally {\n\t\t\tsetInstallingPackages((prev) => {\n\t\t\t\tconst next = new Set(prev);\n\t\t\t\tnext.delete(packageName);\n\t\t\t\treturn next;\n\t\t\t});\n\t\t}\n\t}\n\tif (grouped.length === 0) return null;\n\treturn /* @__PURE__ */ jsx(Modal, {\n\t\topen: open ?? grouped.length > 0,\n\t\tonOpenChange: (isOpen) => {\n\t\t\tif (!isOpen) for (const { packageName } of grouped) onDismiss(packageName);\n\t\t\tonOpenChange?.(isOpen);\n\t\t},\n\t\tcontentProps: {\n\t\t\t...contentProps,\n\t\t\tclassName: twMerge(\"rounded-3xl\", contentProps?.className)\n\t\t},\n\t\toverlayProps: {\n\t\t\t...overlayProps,\n\t\t\tclassName: overlayProps?.className\n\t\t},\n\t\t...restProps,\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"w-[460px] bg-white p-6 text-slate-300\",\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"border-b border-slate-50 pb-2 text-2xl font-bold text-gray-800\",\n\t\t\t\t\tchildren: grouped.length === 1 ? \"Package Required\" : \"Packages Required\"\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"my-4 text-sm text-gray-600\",\n\t\t\t\t\tchildren: grouped.length === 1 ? \"A document requires a package that is not installed.\" : \"Documents require packages that are not installed.\"\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"flex flex-col gap-3\",\n\t\t\t\t\tchildren: grouped.map(({ packageName, documentTypes }) => {\n\t\t\t\t\t\tconst installing = installingPackages.has(packageName);\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\tclassName: \"rounded-xl bg-slate-50 p-4\",\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\t\t\t\tclassName: \"mb-1 text-sm font-semibold text-gray-800\",\n\t\t\t\t\t\t\t\t\tchildren: packageName\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\t\t\tclassName: \"mb-3 text-xs text-gray-500\",\n\t\t\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\t\t\"Required for document type\",\n\t\t\t\t\t\t\t\t\t\tdocumentTypes.length > 1 ? \"s\" : \"\",\n\t\t\t\t\t\t\t\t\t\t\":\",\n\t\t\t\t\t\t\t\t\t\t\" \",\n\t\t\t\t\t\t\t\t\t\tdocumentTypes.join(\", \")\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\t\t\tclassName: \"flex justify-end gap-2\",\n\t\t\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\t\t\tonClick: () => onDismiss(packageName),\n\t\t\t\t\t\t\t\t\t\tdisabled: installing,\n\t\t\t\t\t\t\t\t\t\tclassName: twMerge(buttonStyles$2, \"border border-slate-200 bg-white text-slate-800\", installing && \"cursor-not-allowed opacity-50\"),\n\t\t\t\t\t\t\t\t\t\tchildren: \"Dismiss\"\n\t\t\t\t\t\t\t\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\t\t\tonClick: () => void handleInstall(packageName),\n\t\t\t\t\t\t\t\t\t\tdisabled: installing,\n\t\t\t\t\t\t\t\t\t\tclassName: twMerge(buttonStyles$2, \"bg-gray-800 text-gray-50\", installing && \"cursor-not-allowed opacity-50\"),\n\t\t\t\t\t\t\t\t\t\tchildren: installing ? \"Installing...\" : \"Install\"\n\t\t\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}, packageName);\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/modal/read-required-modal.tsx\nconst buttonStyles$1 = \"min-h-[48px] min-w-[142px] text-base font-semibold py-3 px-6 rounded-xl outline-none active:opacity-75 hover:scale-105 transform transition-all\";\nfunction ReadRequiredModal(props) {\n\tconst { body, header, children, onOpenChange, onContinue, closeLabel, overlayProps, contentProps, bodyProps = {}, headerProps = {}, containerProps = {}, continueButtonProps = {}, buttonContainerProps = {}, ...restProps } = props;\n\tconst [disableClose, setDisableClose] = useState(true);\n\tconst contentRef = useRef(null);\n\tuseEffect(() => {\n\t\tconst checkScroll = () => {\n\t\t\tconst element = contentRef.current;\n\t\t\tif (element) if (element.scrollHeight > element.clientHeight) {\n\t\t\t\tsetDisableClose(true);\n\t\t\t\telement.addEventListener(\"scroll\", handleScroll);\n\t\t\t} else setDisableClose(false);\n\t\t};\n\t\tconst handleScroll = () => {\n\t\t\tconst element = contentRef.current;\n\t\t\tif (element && element.scrollHeight - Math.ceil(element.scrollTop) === element.clientHeight) setDisableClose(false);\n\t\t};\n\t\trequestAnimationFrame(checkScroll);\n\t\treturn () => {\n\t\t\tconst element = contentRef.current;\n\t\t\tif (element) element.removeEventListener(\"scroll\", handleScroll);\n\t\t};\n\t}, []);\n\treturn /* @__PURE__ */ jsx(Modal, {\n\t\tcontentProps: {\n\t\t\t...contentProps,\n\t\t\tclassName: twMerge(\"rounded-3xl outline-none\", contentProps?.className)\n\t\t},\n\t\tonOpenChange,\n\t\toverlayProps: {\n\t\t\t...overlayProps,\n\t\t\tclassName: overlayProps?.className\n\t\t},\n\t\t...restProps,\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t...mergeClassNameProps(containerProps, \"w-[500px] bg-white p-6 text-slate-300\"),\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t...mergeClassNameProps(headerProps, \"border-b border-slate-50 pb-2 text-2xl font-bold text-gray-800\"),\n\t\t\t\t\tchildren: header\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tref: contentRef,\n\t\t\t\t\t...mergeClassNameProps(bodyProps, \"my-6 max-h-[245px] overflow-scroll rounded-md bg-slate-50 p-4 text-center\"),\n\t\t\t\t\tchildren: [body, children]\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t...mergeClassNameProps(buttonContainerProps, \"mt-8 flex justify-between gap-3\"),\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\tdisabled: disableClose,\n\t\t\t\t\t\tonClick: onContinue,\n\t\t\t\t\t\t...mergeClassNameProps(continueButtonProps, twMerge(buttonStyles$1, \"flex-1 bg-gray-800 text-gray-50\", disableClose && \"cursor-not-allowed bg-gray-300 hover:scale-100\")),\n\t\t\t\t\t\tchildren: closeLabel\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/modal/settings-modal/dependency-versions/dependency-versions.tsx\nconst PH_DEPENDENCIES = [\n\t/^@powerhousedao\\/.+$/,\n\t\"document-drive\",\n\t\"document-model\"\n];\nfunction verifyPackageJsonFields(packageJson) {\n\ttry {\n\t\tconst parsed = packageJson;\n\t\treturn {\n\t\t\tversion: parsed.version || \"Missing version field in package.json\",\n\t\t\tdependencies: Object.fromEntries(Object.entries({\n\t\t\t\t...parsed.dependencies,\n\t\t\t\t...parsed.devDependencies,\n\t\t\t\t...parsed.peerDependencies\n\t\t\t}).filter(([key]) => PH_DEPENDENCIES.some((regexOrName) => typeof regexOrName === \"string\" ? regexOrName === key : regexOrName.test(key))))\n\t\t};\n\t} catch (error) {\n\t\tconsole.error(error);\n\t\treturn false;\n\t}\n}\nfunction DependencyVersions(props) {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst { packageJson, phCliVersion } = props;\n\tconst validatedData = verifyPackageJsonFields(packageJson);\n\tif (!validatedData) {\n\t\tconsole.error(\"Failed to validate package.json data\");\n\t\treturn null;\n\t}\n\treturn /* @__PURE__ */ jsx(Disclosure, {\n\t\tisOpen,\n\t\tonOpenChange: () => setIsOpen(!isOpen),\n\t\ttitle: `App version: ${validatedData.version}`,\n\t\ttoggleClassName: \"text-gray-900 text-sm\",\n\t\tchildren: /* @__PURE__ */ jsxs(\"ul\", {\n\t\t\tclassName: \"text-sm text-gray-600\",\n\t\t\tchildren: [Object.entries(validatedData.dependencies).map(([dep, version]) => /* @__PURE__ */ jsxs(\"li\", {\n\t\t\t\tclassName: \"my-1 flex justify-between pr-1\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"span\", { children: [dep.replace(\"@powerhousedao/\", \"\"), \":\"] }), /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\tclassName: \"font-normal\",\n\t\t\t\t\tchildren: version\n\t\t\t\t})]\n\t\t\t}, dep)), phCliVersion && /* @__PURE__ */ jsxs(\"li\", {\n\t\t\t\tclassName: \"my-1 flex justify-between pr-1\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", { children: \"@powerhousedao/ph-cli:\" }), /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\tclassName: \"font-normal\",\n\t\t\t\t\tchildren: phCliVersion\n\t\t\t\t})]\n\t\t\t}, \"ph-cli\")]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/modal/settings-modal-v2/about.tsx\nfunction About(props) {\n\tconst { packageJson, phCliVersion } = props;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"bg-white p-3\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(\"h2\", {\n\t\t\t\tclassName: \"font-semibold\",\n\t\t\t\tchildren: \"About\"\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"p\", {\n\t\t\t\tclassName: \"text-sm font-normal text-gray-600\",\n\t\t\t\tchildren: \"Connect is the hub for your most important documents and processes translated into software. Easily capture data in a structured way with Connect.\"\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"my-4\",\n\t\t\t\tchildren: /* @__PURE__ */ jsx(DependencyVersions, {\n\t\t\t\t\tpackageJson,\n\t\t\t\t\tphCliVersion\n\t\t\t\t})\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/modal/settings-modal-v2/danger-zone.tsx\nfunction getDriveSharingType(drive) {\n\tif (typeof drive !== \"object\") return \"LOCAL\";\n\tconst { sharingType: _sharingType } = !(\"readContext\" in drive) ? drive.state.local : { sharingType: \"PUBLIC\" };\n\tconst __sharingType = _sharingType?.toUpperCase();\n\treturn !__sharingType || __sharingType === \"PRIVATE\" || ![\n\t\t\"LOCAL\",\n\t\t\"CLOUD\",\n\t\t\"PUBLIC\"\n\t].includes(__sharingType) ? \"LOCAL\" : __sharingType;\n}\nfunction DangerZone(props) {\n\tconst { className, ...rest } = props;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: cn(\"h-full rounded-lg bg-white p-3\", className),\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(\"h2\", {\n\t\t\t\tclassName: \"mb-4 font-semibold\",\n\t\t\t\tchildren: \"Modify Drives\"\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(ModifyDrives, { ...rest }),\n\t\t\t/* @__PURE__ */ jsx(\"h2\", {\n\t\t\t\tclassName: \"my-4 font-semibold\",\n\t\t\t\tchildren: \"Local Storage\"\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(LocalStorage, { ...rest })\n\t\t]\n\t});\n}\nfunction ModifyDrives(props) {\n\tconst { className, ...rest } = props;\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName,\n\t\tchildren: /* @__PURE__ */ jsx(DriveList, { ...rest })\n\t});\n}\nfunction DriveList(props) {\n\tconst { className, ...rest } = props;\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName,\n\t\tchildren: props.drives.map((drive) => /* @__PURE__ */ jsx(Drive, {\n\t\t\tdrive,\n\t\t\t...rest\n\t\t}, drive.header.id))\n\t});\n}\nfunction Drive(props) {\n\tconst { drive, className, onDeleteDrive } = props;\n\tconst [isDropdownMenuOpen, setIsDropdownMenuOpen] = useState(false);\n\tconst localDriveIcon = /* @__PURE__ */ jsx(Icon, {\n\t\tname: \"Hdd\",\n\t\tsize: 16,\n\t\tclassName: \"flex-none\"\n\t});\n\tconst cloudDriveIcon = /* @__PURE__ */ jsx(Icon, {\n\t\tname: \"Server\",\n\t\tsize: 16,\n\t\tclassName: \"flex-none\"\n\t});\n\tconst publicDriveIcon = drive.state.global.icon ? /* @__PURE__ */ jsx(\"img\", {\n\t\talt: \"drive icon\",\n\t\tclassName: \"size-4 flex-none object-contain\",\n\t\tsrc: drive.state.global.icon\n\t}) : /* @__PURE__ */ jsx(Icon, {\n\t\tname: \"Server\",\n\t\tsize: 16,\n\t\tclassName: \"flex-none\"\n\t});\n\tfunction getNodeIcon() {\n\t\tconst sharingType = getDriveSharingType(drive);\n\t\tif (sharingType === \"PUBLIC\") return publicDriveIcon;\n\t\tif (sharingType === \"CLOUD\") return cloudDriveIcon;\n\t\treturn localDriveIcon;\n\t}\n\tconst icon = getNodeIcon();\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: cn(\"mb-4 flex w-96 items-center gap-2 rounded-md border border-gray-200 bg-gray-50 px-3 py-2 shadow-sm last-of-type:mb-0\", className),\n\t\tchildren: [\n\t\t\ticon,\n\t\t\t/* @__PURE__ */ jsxs(\"div\", { children: [/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\tclassName: \"block text-sm/4.5 font-medium\",\n\t\t\t\tchildren: capitalCase(drive.header.name)\n\t\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex items-baseline gap-x-2 leading-4.5\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"span\", {\n\t\t\t\t\tclassName: \"text-sm text-gray-600\",\n\t\t\t\t\tchildren: [capitalCase(getDriveSharingType(drive)), \" App\"]\n\t\t\t\t}), /* @__PURE__ */ jsxs(\"a\", {\n\t\t\t\t\thref: \"https://www.powerhouse.inc/\",\n\t\t\t\t\ttarget: \"_blank\",\n\t\t\t\t\trel: \"noopener noreferrer\",\n\t\t\t\t\tclassName: \"group flex items-center gap-x-2 text-sm text-slate-500 transition-colors hover:text-purple-700\",\n\t\t\t\t\tchildren: [\"By Powerhouse\", /* @__PURE__ */ jsx(\"svg\", {\n\t\t\t\t\t\txmlns: \"http://www.w3.org/2000/svg\",\n\t\t\t\t\t\tviewBox: \"0 0 12 12\",\n\t\t\t\t\t\tclassName: \"size-4 text-gray-400 transition-colors group-hover:text-inherit\",\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"path\", {\n\t\t\t\t\t\t\td: \"M7.99365 11.9939C9.46632 11.9939 10.6603 10.7999 10.6603 9.32722V7.32722C10.6603 6.95922 10.3617 6.66056 9.99365 6.66056C9.62565 6.66056 9.32699 6.95922 9.32699 7.32722V9.32722C9.32699 10.0639 8.73032 10.6606 7.99365 10.6606H2.66032C1.92365 10.6606 1.32699 10.0639 1.32699 9.32722V3.99389C1.32699 3.25723 1.92365 2.66056 2.66032 2.66056H4.66032C5.02832 2.66056 5.32699 2.36189 5.32699 1.99389C5.32699 1.6259 5.02832 1.32723 4.66032 1.32723H2.66032C1.18765 1.32723 -0.00634766 2.52123 -0.00634766 3.99389V9.32722C-0.00634766 10.7999 1.18765 11.9939 2.66032 11.9939H7.99365ZM5.32699 7.32722C5.49765 7.32722 5.67565 7.26989 5.80632 7.13989L10.1396 2.80656L11.9937 4.66056V-0.00610352H7.32699L9.18099 1.8479L4.84766 6.18123C4.58766 6.4419 4.58766 6.87922 4.84766 7.13989C4.97832 7.26989 5.15632 7.32722 5.32699 7.32722Z\",\n\t\t\t\t\t\t\tfill: \"currentColor\"\n\t\t\t\t\t\t})\n\t\t\t\t\t})]\n\t\t\t\t})]\n\t\t\t})] }),\n\t\t\t/* @__PURE__ */ jsx(ConnectDropdownMenu, {\n\t\t\t\titems: [{\n\t\t\t\t\tid: \"delete-drive\",\n\t\t\t\t\tlabel: \"Delete\",\n\t\t\t\t\ticon: /* @__PURE__ */ jsx(Icon, { name: \"Trash\" }),\n\t\t\t\t\tclassName: \"text-red-900\"\n\t\t\t\t}],\n\t\t\t\tonItemClick: (id) => {\n\t\t\t\t\tif (id === \"delete-drive\") onDeleteDrive(drive);\n\t\t\t\t},\n\t\t\t\tonOpenChange: setIsDropdownMenuOpen,\n\t\t\t\topen: isDropdownMenuOpen,\n\t\t\t\tchildren: /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\tclassName: \"group ml-auto flex-none\",\n\t\t\t\t\tonClick: (e) => {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tsetIsDropdownMenuOpen(true);\n\t\t\t\t\t},\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\tclassName: \"text-gray-600 group-hover:text-gray-900\",\n\t\t\t\t\t\tname: \"VerticalDots\",\n\t\t\t\t\t\tsize: 16\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t})\n\t\t]\n\t});\n}\nfunction LocalStorage(props) {\n\tconst { onClearStorage } = props;\n\treturn /* @__PURE__ */ jsx(\"div\", { children: /* @__PURE__ */ jsxs(\"button\", {\n\t\tclassName: \"flex items-center gap-x-2 rounded-md border border-gray-300 bg-transparent px-3 py-1 text-sm font-medium text-red-900 transition-colors hover:bg-gray-100\",\n\t\tonClick: onClearStorage,\n\t\tchildren: [\"Clear Storage \", /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"Trash\",\n\t\t\tsize: 16\n\t\t})]\n\t}) });\n}\n//#endregion\n//#region src/connect/components/modal/settings-modal-v2/default-editor.tsx\nfunction DefaultEditor(props) {\n\tconst { className, ...rest } = props;\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: twMerge(\"rounded-lg bg-white p-3\", className),\n\t\tchildren: /* @__PURE__ */ jsx(DefaultEditorSelect, { ...rest })\n\t});\n}\nfunction DefaultEditorSelect(props) {\n\tconst { documentModelEditor, setDocumentModelEditor, documentModelEditorOptions, className } = props;\n\treturn /* @__PURE__ */ jsxs(\"div\", { children: [/* @__PURE__ */ jsx(\"h3\", {\n\t\tclassName: \"mb-4 font-semibold text-gray-900\",\n\t\tchildren: \"Default Editor Selection\"\n\t}), /* @__PURE__ */ jsx(SelectFieldRaw, {\n\t\tclassName: twMerge(\"max-w-fit min-w-36\", className),\n\t\tname: \"default-editor\",\n\t\trequired: true,\n\t\tvalue: documentModelEditor,\n\t\toptions: documentModelEditorOptions,\n\t\tmultiple: false,\n\t\tonChange: (value) => setDocumentModelEditor(value)\n\t})] });\n}\n//#endregion\n//#region src/connect/components/modal/settings-modal-v2/package-manager/parse-package-spec.ts\n/**\n* Parse a package specifier into a bare name and an optional tag/version.\n*\n* - Scoped names split on the LAST `@` (since the name itself starts with\n* `@scope/`): `@scope/pkg@dev` → `{ name: \"@scope/pkg\", tag: \"dev\" }`.\n* - Unscoped names split on the first `@`: `pkg@1.2.3` →\n* `{ name: \"pkg\", tag: \"1.2.3\" }`.\n* - A bare name (no separator) returns `{ name, tag: undefined }`.\n* - Trailing/leading whitespace is trimmed; an empty tag (e.g. \"pkg@\")\n* is treated as missing.\n*/\nfunction parsePackageSpec(spec) {\n\tconst trimmed = spec.trim();\n\tif (trimmed.length === 0) return {\n\t\tname: \"\",\n\t\ttag: void 0\n\t};\n\tconst splitAt = trimmed.startsWith(\"@\") ? trimmed.lastIndexOf(\"@\") : trimmed.indexOf(\"@\");\n\tif (splitAt > 0) {\n\t\tconst name = trimmed.slice(0, splitAt);\n\t\tconst tag = trimmed.slice(splitAt + 1);\n\t\treturn {\n\t\t\tname,\n\t\t\ttag: tag.length > 0 ? tag : void 0\n\t\t};\n\t}\n\treturn {\n\t\tname: trimmed,\n\t\ttag: void 0\n\t};\n}\n/**\n* Compose a spec string from a name and optional tag/version. Used by\n* callers that want to re-serialize what `parsePackageSpec` parsed.\n*/\nfunction buildPackageSpec(name, tag) {\n\treturn tag ? `${name}@${tag}` : name;\n}\n//#endregion\n//#region src/connect/components/modal/settings-modal-v2/package-manager/version-picker.tsx\nfunction resolveDefaultVersionSelection(options) {\n\tconst { distTags, versions, version, preferredTag } = options;\n\tif (preferredTag && distTags && preferredTag in distTags) return {\n\t\tkind: \"tag\",\n\t\tvalue: preferredTag\n\t};\n\tif (distTags?.latest) return {\n\t\tkind: \"tag\",\n\t\tvalue: \"latest\"\n\t};\n\tconst firstTag = distTags ? Object.keys(distTags)[0] : void 0;\n\tif (firstTag) return {\n\t\tkind: \"tag\",\n\t\tvalue: firstTag\n\t};\n\tif (versions && versions.length > 0) return {\n\t\tkind: \"version\",\n\t\tvalue: versions[versions.length - 1]\n\t};\n\treturn {\n\t\tkind: \"tag\",\n\t\tvalue: version ?? \"latest\"\n\t};\n}\nconst VersionPicker = (props) => {\n\tconst { distTags, versions, selected, onChange, disabled, className } = props;\n\tconst [open, setOpen] = useState(false);\n\tconst [query, setQuery] = useState(\"\");\n\tconst tagEntries = useMemo(() => distTags ? Object.entries(distTags) : [], [distTags]);\n\tconst filteredTags = useMemo(() => {\n\t\tconst needle = query.trim().toLowerCase();\n\t\tif (!needle) return tagEntries;\n\t\treturn tagEntries.filter(([tag, ver]) => tag.toLowerCase().includes(needle) || ver.toLowerCase().includes(needle));\n\t}, [tagEntries, query]);\n\tconst filteredVersions = useMemo(() => {\n\t\tconst all = versions ?? [];\n\t\tconst needle = query.trim().toLowerCase();\n\t\tif (!needle) return all.slice().reverse();\n\t\treturn all.filter((v) => v.toLowerCase().includes(needle)).reverse();\n\t}, [versions, query]);\n\tconst hasAnyPickable = tagEntries.length > 0 || (versions?.length ?? 0) > 0;\n\tconst triggerLabel = selected.value;\n\treturn /* @__PURE__ */ jsxs(Popover, {\n\t\topen: open && !disabled,\n\t\tonOpenChange: (next) => {\n\t\t\tsetOpen(next);\n\t\t\tif (!next) setQuery(\"\");\n\t\t},\n\t\tchildren: [/* @__PURE__ */ jsxs(PopoverTrigger, {\n\t\t\tdisabled: disabled || !hasAnyPickable,\n\t\t\tclassName: cn(\"flex items-center justify-between gap-2 rounded-md border border-gray-300 bg-white px-2.5 py-1 text-xs font-medium text-gray-800 transition-colors\", \"hover:bg-gray-50 focus:ring-2 focus:ring-gray-900/20 focus:outline-none\", \"disabled:cursor-not-allowed disabled:opacity-60\", className),\n\t\t\t\"data-version-picker-trigger\": true,\n\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\tclassName: \"truncate\",\n\t\t\t\tchildren: triggerLabel\n\t\t\t}), /* @__PURE__ */ jsx(Icon, {\n\t\t\t\tname: \"ChevronDown\",\n\t\t\t\tsize: 12,\n\t\t\t\tclassName: \"shrink-0 text-gray-500\"\n\t\t\t})]\n\t\t}), /* @__PURE__ */ jsxs(PopoverContent, {\n\t\t\t\"data-version-picker\": true,\n\t\t\talign: \"start\",\n\t\t\tsideOffset: 4,\n\t\t\tclassName: \"w-56 p-0\",\n\t\t\tonOpenAutoFocus: (e) => e.preventDefault(),\n\t\t\tchildren: [/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"border-b border-gray-200 p-2\",\n\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"relative\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\tname: \"Search\",\n\t\t\t\t\t\tsize: 14,\n\t\t\t\t\t\tclassName: \"absolute top-1/2 left-2 -translate-y-1/2 text-gray-400\"\n\t\t\t\t\t}), /* @__PURE__ */ jsx(Input, {\n\t\t\t\t\t\tvalue: query,\n\t\t\t\t\t\tonChange: (e) => setQuery(e.target.value),\n\t\t\t\t\t\tplaceholder: \"Search versions...\",\n\t\t\t\t\t\tclassName: \"h-8 pl-7 text-xs\"\n\t\t\t\t\t})]\n\t\t\t\t})\n\t\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"max-h-60 overflow-y-auto py-1\",\n\t\t\t\tchildren: [\n\t\t\t\t\tfilteredTags.length === 0 && filteredVersions.length === 0 && /* @__PURE__ */ jsx(\"p\", {\n\t\t\t\t\t\tclassName: \"px-3 py-4 text-center text-xs text-gray-500\",\n\t\t\t\t\t\tchildren: \"No matches.\"\n\t\t\t\t\t}),\n\t\t\t\t\tfilteredTags.length > 0 && /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\tclassName: \"pb-1\",\n\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"p\", {\n\t\t\t\t\t\t\tclassName: \"px-3 py-1 text-xs font-semibold tracking-wide text-gray-500 uppercase\",\n\t\t\t\t\t\t\tchildren: \"Tags\"\n\t\t\t\t\t\t}), filteredTags.map(([tag, ver]) => {\n\t\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\t\t\tonChange({\n\t\t\t\t\t\t\t\t\t\tkind: \"tag\",\n\t\t\t\t\t\t\t\t\t\tvalue: tag\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tsetOpen(false);\n\t\t\t\t\t\t\t\t\tsetQuery(\"\");\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tclassName: cn(\"flex w-full items-center justify-between gap-2 px-3 py-1.5 text-left text-xs transition-colors\", \"hover:bg-gray-100\", selected.kind === \"tag\" && selected.value === tag && \"bg-gray-100 font-semibold\"),\n\t\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"truncate text-gray-900\",\n\t\t\t\t\t\t\t\t\tchildren: tag\n\t\t\t\t\t\t\t\t}), /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"truncate text-gray-500\",\n\t\t\t\t\t\t\t\t\tchildren: ver\n\t\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t\t}, `tag:${tag}`);\n\t\t\t\t\t\t})]\n\t\t\t\t\t}),\n\t\t\t\t\tfilteredVersions.length > 0 && /* @__PURE__ */ jsxs(\"div\", { children: [/* @__PURE__ */ jsx(\"p\", {\n\t\t\t\t\t\tclassName: \"px-3 py-1 text-xs font-semibold tracking-wide text-gray-500 uppercase\",\n\t\t\t\t\t\tchildren: \"Versions\"\n\t\t\t\t\t}), filteredVersions.map((ver) => {\n\t\t\t\t\t\treturn /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\t\tonChange({\n\t\t\t\t\t\t\t\t\tkind: \"version\",\n\t\t\t\t\t\t\t\t\tvalue: ver\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tsetOpen(false);\n\t\t\t\t\t\t\t\tsetQuery(\"\");\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tclassName: cn(\"flex w-full items-center px-3 py-1.5 text-left text-xs transition-colors\", \"hover:bg-gray-100\", selected.kind === \"version\" && selected.value === ver && \"bg-gray-100 font-semibold\"),\n\t\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\tclassName: \"truncate text-gray-900\",\n\t\t\t\t\t\t\t\tchildren: ver\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}, `ver:${ver}`);\n\t\t\t\t\t})] })\n\t\t\t\t]\n\t\t\t})]\n\t\t})]\n\t});\n};\n//#endregion\n//#region src/connect/components/modal/settings-modal-v2/package-manager/package-manager-input.tsx\nconst NPM_NAME_RE = /^@[a-z0-9][a-z0-9._-]*\\/[a-z0-9][a-z0-9._-]*$|^[a-z0-9][a-z0-9._-]*$/i;\nfunction isPlausiblePackageName(name) {\n\treturn name.length >= 2 && NPM_NAME_RE.test(name);\n}\nfunction PackageResultCard(props) {\n\tconst { option, ctx, typedTag } = props;\n\tconst { selectingValue, selectLabel, selectingContent, handleSelect } = ctx;\n\tconst baseName = option.label.split(\" @ \")[0] ?? option.value;\n\tconst hasVersionMetadata = option.distTags && Object.keys(option.distTags).length > 0 || (option.versions?.length ?? 0) > 0;\n\tconst [selected, setSelected] = useState(() => resolveDefaultVersionSelection({\n\t\tdistTags: option.distTags,\n\t\tversions: option.versions,\n\t\tversion: option.version,\n\t\tpreferredTag: typedTag\n\t}));\n\tuseEffect(() => {\n\t\tif (!typedTag) return;\n\t\tif (option.distTags && typedTag in option.distTags) setSelected({\n\t\t\tkind: \"tag\",\n\t\t\tvalue: typedTag\n\t\t});\n\t\telse if (option.versions?.includes(typedTag)) setSelected({\n\t\t\tkind: \"version\",\n\t\t\tvalue: typedTag\n\t\t});\n\t}, [\n\t\ttypedTag,\n\t\toption.distTags,\n\t\toption.versions\n\t]);\n\tconst installSpec = hasVersionMetadata ? buildPackageSpec(baseName, selected.value) : option.value;\n\tconst isSelecting = selectingValue === installSpec;\n\tconst isDisabled = option.disabled === true;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex items-start justify-between gap-3 rounded-md p-2 hover:bg-gray-50\",\n\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"min-w-0 flex-1\",\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsx(\"p\", {\n\t\t\t\t\tclassName: \"truncate text-sm font-medium text-gray-900\",\n\t\t\t\t\tchildren: baseName\n\t\t\t\t}),\n\t\t\t\toption.description && /* @__PURE__ */ jsx(\"p\", {\n\t\t\t\t\tclassName: \"truncate text-xs text-gray-500\",\n\t\t\t\t\tchildren: option.description\n\t\t\t\t}),\n\t\t\t\toption.meta && /* @__PURE__ */ jsx(\"p\", {\n\t\t\t\t\tclassName: \"truncate text-xs text-gray-400\",\n\t\t\t\t\tchildren: option.meta\n\t\t\t\t}),\n\t\t\t\thasVersionMetadata && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"mt-2\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(VersionPicker, {\n\t\t\t\t\t\tdistTags: option.distTags,\n\t\t\t\t\t\tversions: option.versions,\n\t\t\t\t\t\tselected,\n\t\t\t\t\t\tonChange: setSelected,\n\t\t\t\t\t\tdisabled: isDisabled\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t]\n\t\t}), /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: \"shrink-0 self-center\",\n\t\t\tchildren: isSelecting && selectingContent ? /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"flex items-center justify-center\",\n\t\t\t\tchildren: selectingContent\n\t\t\t}) : isDisabled ? /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\tclassName: \"rounded-md bg-gray-100 px-3 py-1 text-xs font-medium text-gray-500\",\n\t\t\t\tchildren: option.disabledLabel ?? \"Unavailable\"\n\t\t\t}) : /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\tonClick: () => handleSelect(installSpec),\n\t\t\t\tdisabled: isSelecting,\n\t\t\t\tclassName: \"rounded-md bg-gray-900 px-3 py-1 text-xs font-medium text-white transition-colors hover:bg-gray-800 disabled:opacity-50\",\n\t\t\t\tchildren: isSelecting ? \"...\" : selectLabel\n\t\t\t})\n\t\t})]\n\t});\n}\nconst PackageManagerInput = (props) => {\n\tconst { registryPackageList, onInstall, disabled, className } = props;\n\tconst [typedTag, setTypedTag] = useState(void 0);\n\tconst fetchOptions = async (query) => {\n\t\tconst { name: namePart, tag } = parsePackageSpec(query);\n\t\tsetTypedTag(tag);\n\t\tconst needle = namePart.toLowerCase();\n\t\tconst localOptions = registryPackageList.filter((pkg) => pkg.name.toLowerCase().includes(needle) || pkg.manifest?.description?.toLowerCase().includes(needle)).map((pkg) => {\n\t\t\tconst isInstalled = pkg.status === \"local-install\" || pkg.status === \"registry-install\";\n\t\t\treturn {\n\t\t\t\tvalue: pkg.name,\n\t\t\t\tlabel: pkg.name,\n\t\t\t\tversion: pkg.version,\n\t\t\t\tdescription: pkg.manifest?.description,\n\t\t\t\tmeta: pkg.manifest?.publisher?.name,\n\t\t\t\tdisabled: isInstalled,\n\t\t\t\tdisabledLabel: isInstalled ? \"Installed\" : void 0,\n\t\t\t\tdistTags: pkg.distTags,\n\t\t\t\tversions: pkg.versions\n\t\t\t};\n\t\t});\n\t\tif (!isPlausiblePackageName(namePart) || localOptions.length > 0) return Promise.resolve(localOptions);\n\t\tconst fallbackOption = {\n\t\t\tvalue: buildPackageSpec(namePart, tag),\n\t\t\tlabel: tag ? `${namePart} @ ${tag}` : namePart,\n\t\t\tversion: tag,\n\t\t\tdescription: \"Not published to this registry. Install via the npmjs.org uplink.\",\n\t\t\tmeta: \"npm fallback\"\n\t\t};\n\t\treturn Promise.resolve([fallbackOption]);\n\t};\n\tconst handleSelect = useCallback((value) => {\n\t\treturn onInstall(value);\n\t}, [onInstall]);\n\tconst renderRow = useCallback((option, ctx) => /* @__PURE__ */ jsx(PackageResultCard, {\n\t\toption,\n\t\tctx,\n\t\ttypedTag\n\t}), [typedTag]);\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName,\n\t\tchildren: [/* @__PURE__ */ jsx(\"h3\", {\n\t\t\tclassName: \"mb-4 font-semibold text-gray-900\",\n\t\t\tchildren: \"Install Package\"\n\t\t}), /* @__PURE__ */ jsx(SearchAutocomplete, {\n\t\t\tfetchOptions,\n\t\t\tonSelect: handleSelect,\n\t\t\tselectLabel: \"Install\",\n\t\t\tselectingContent: /* @__PURE__ */ jsx(PackageAnimation, {\n\t\t\t\tanimate: true,\n\t\t\t\tloop: true,\n\t\t\t\tcolor: \"#6b7280\",\n\t\t\t\tsize: 48\n\t\t\t}),\n\t\t\tplaceholder: \"Search packages (e.g. my-pkg, my-pkg@dev, my-pkg@1.2.3)...\",\n\t\t\tdisabled,\n\t\t\trenderRow,\n\t\t\tkeepOpenSelector: \"[data-version-picker],[data-version-picker-trigger]\"\n\t\t})]\n\t});\n};\n//#endregion\n//#region src/connect/components/modal/settings-modal-v2/package-manager/package-manager-list.tsx\nconst PackageDetail = ({ label, value }) => {\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex items-start gap-2 text-sm\",\n\t\tchildren: [/* @__PURE__ */ jsxs(\"p\", {\n\t\t\tclassName: \"text-gray-600\",\n\t\t\tchildren: [label, \":\"]\n\t\t}), /* @__PURE__ */ jsx(\"p\", {\n\t\t\tclassName: \"text-gray-600\",\n\t\t\tchildren: value\n\t\t})]\n\t});\n};\nconst PackageManagerListItem = (props) => {\n\tconst { registryPackage, onInstall, onUninstall, className } = props;\n\tconst [isDropdownMenuOpen, setIsDropdownMenuOpen] = useState(false);\n\tconst canPickVersion = registryPackage.status === \"available\" || registryPackage.status === \"dismissed\";\n\tconst hasVersionMetadata = registryPackage.distTags && Object.keys(registryPackage.distTags).length > 0 || (registryPackage.versions?.length ?? 0) > 0;\n\tconst [selected, setSelected] = useState(() => resolveDefaultVersionSelection({\n\t\tdistTags: registryPackage.distTags,\n\t\tversions: registryPackage.versions,\n\t\tversion: registryPackage.version\n\t}));\n\tconst installDropdownItem = {\n\t\tid: \"install\",\n\t\tlabel: \"Install\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, { name: \"DownloadFile\" }),\n\t\tclassName: \"text-gray-800\"\n\t};\n\tconst uninstallDropdownItem = {\n\t\tid: \"uninstall\",\n\t\tlabel: \"Uninstall\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, { name: \"Trash\" }),\n\t\tclassName: \"text-red-900\"\n\t};\n\tfunction getDropdownItems() {\n\t\treturn [canPickVersion ? installDropdownItem : void 0, registryPackage.status === \"registry-install\" ? uninstallDropdownItem : void 0].filter((item) => item !== void 0);\n\t}\n\tconst dropdownItems = getDropdownItems();\n\treturn /* @__PURE__ */ jsxs(\"li\", {\n\t\tclassName: twMerge(\"relative flex flex-col items-start rounded-md border border-gray-200 bg-white p-3 text-sm/5 shadow-sm\", className),\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"flex flex-wrap items-center gap-2 pr-8\",\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"h3\", {\n\t\t\t\t\tclassName: \"font-semibold text-gray-900\",\n\t\t\t\t\tchildren: registryPackage.name\n\t\t\t\t}), canPickVersion && hasVersionMetadata ? /* @__PURE__ */ jsx(VersionPicker, {\n\t\t\t\t\tdistTags: registryPackage.distTags,\n\t\t\t\t\tversions: registryPackage.versions,\n\t\t\t\t\tselected,\n\t\t\t\t\tonChange: setSelected\n\t\t\t\t}) : registryPackage.version ? /* @__PURE__ */ jsxs(\"span\", {\n\t\t\t\t\tclassName: \"text-xs font-normal text-gray-500\",\n\t\t\t\t\tchildren: [\"v\", registryPackage.version]\n\t\t\t\t}) : null]\n\t\t\t}),\n\t\t\tregistryPackage.manifest !== null && (() => {\n\t\t\t\tconst { description, category, publisher } = registryPackage.manifest;\n\t\t\t\tif (!(description != null || category != null || publisher?.name != null || publisher?.url != null)) return null;\n\t\t\t\treturn /* @__PURE__ */ jsxs(Fragment$1, { children: [\n\t\t\t\t\tdescription != null && /* @__PURE__ */ jsx(PackageDetail, {\n\t\t\t\t\t\tlabel: \"Description\",\n\t\t\t\t\t\tvalue: description\n\t\t\t\t\t}),\n\t\t\t\t\tcategory != null && /* @__PURE__ */ jsx(PackageDetail, {\n\t\t\t\t\t\tlabel: \"Category\",\n\t\t\t\t\t\tvalue: category\n\t\t\t\t\t}),\n\t\t\t\t\tpublisher?.name != null && /* @__PURE__ */ jsx(PackageDetail, {\n\t\t\t\t\t\tlabel: \"Publisher\",\n\t\t\t\t\t\tvalue: publisher.name\n\t\t\t\t\t}),\n\t\t\t\t\tpublisher?.url != null && /* @__PURE__ */ jsx(PackageDetail, {\n\t\t\t\t\t\tlabel: \"Publisher URL\",\n\t\t\t\t\t\tvalue: /* @__PURE__ */ jsx(\"a\", {\n\t\t\t\t\t\t\tclassName: \"underline\",\n\t\t\t\t\t\t\thref: publisher.url,\n\t\t\t\t\t\t\tchildren: publisher.url\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t] });\n\t\t\t})(),\n\t\t\t/* @__PURE__ */ jsx(ConnectDropdownMenu, {\n\t\t\t\titems: dropdownItems,\n\t\t\t\tonItemClick: (id) => {\n\t\t\t\t\tif (id === \"install\") {\n\t\t\t\t\t\tonInstall(canPickVersion && hasVersionMetadata ? buildPackageSpec(registryPackage.name, selected.value) : registryPackage.name).catch(console.error);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tonUninstall(registryPackage.name);\n\t\t\t\t},\n\t\t\t\tonOpenChange: setIsDropdownMenuOpen,\n\t\t\t\topen: isDropdownMenuOpen,\n\t\t\t\tchildren: /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\tclassName: \"group absolute top-3 right-3\",\n\t\t\t\t\tonClick: (e) => {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tsetIsDropdownMenuOpen(true);\n\t\t\t\t\t},\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\tclassName: \"text-gray-600 group-hover:text-gray-900\",\n\t\t\t\t\t\tname: \"VerticalDots\"\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t})\n\t\t]\n\t});\n};\nconst PackageManagerList = (props) => {\n\tconst { className, registryPackageList, onInstall, onUninstall } = props;\n\tconst [maxHeight, setMaxHeight] = useState();\n\tconst locallyInstalledPackages = registryPackageList.filter((p) => p.status === \"local-install\");\n\tconst registryInstalledPackages = registryPackageList.filter((p) => p.status === \"registry-install\");\n\tconst availablePackages = registryPackageList.filter((p) => p.status === \"available\");\n\tconst dismissedPackages = registryPackageList.filter((p) => p.status === \"dismissed\");\n\tuseLayoutEffect(() => {\n\t\tconst calculateMaxHeight = () => {\n\t\t\tconst availableHeight = window.innerHeight - 516;\n\t\t\tsetMaxHeight(Math.max(200, availableHeight));\n\t\t};\n\t\tcalculateMaxHeight();\n\t\twindow.addEventListener(\"resize\", calculateMaxHeight);\n\t\treturn () => window.removeEventListener(\"resize\", calculateMaxHeight);\n\t}, []);\n\tconst hasLocallyInstalled = locallyInstalledPackages.length > 0;\n\tconst hasRegistryInstalled = registryInstalledPackages.length > 0;\n\tconst hasAnyInstalled = hasLocallyInstalled || hasRegistryInstalled;\n\tconst hasAvailable = availablePackages.length > 0;\n\tconst hasDismissed = dismissedPackages.length > 0;\n\tconst installedCount = locallyInstalledPackages.length + registryInstalledPackages.length;\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: twMerge(\"flex flex-col items-stretch overflow-hidden\", className),\n\t\tstyle: { maxHeight },\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"flex-1 overflow-y-auto pr-2\",\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsxs(PackageSection, {\n\t\t\t\t\tsectionId: \"installed\",\n\t\t\t\t\ttitle: \"Installed Packages\",\n\t\t\t\t\tcount: installedCount,\n\t\t\t\t\tisEmpty: !hasAnyInstalled,\n\t\t\t\t\temptyText: \"No packages installed.\",\n\t\t\t\t\tchildren: [hasLocallyInstalled && /* @__PURE__ */ jsx(PackageSubSection, {\n\t\t\t\t\t\ttitle: \"Locally installed\",\n\t\t\t\t\t\tcount: locallyInstalledPackages.length,\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(PackageList, {\n\t\t\t\t\t\t\tpackages: locallyInstalledPackages,\n\t\t\t\t\t\t\tonInstall,\n\t\t\t\t\t\t\tonUninstall\n\t\t\t\t\t\t})\n\t\t\t\t\t}), hasRegistryInstalled && /* @__PURE__ */ jsx(PackageSubSection, {\n\t\t\t\t\t\ttitle: \"Installed from registry\",\n\t\t\t\t\t\tcount: registryInstalledPackages.length,\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(PackageList, {\n\t\t\t\t\t\t\tpackages: registryInstalledPackages,\n\t\t\t\t\t\t\tonInstall,\n\t\t\t\t\t\t\tonUninstall\n\t\t\t\t\t\t})\n\t\t\t\t\t})]\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(PackageSection, {\n\t\t\t\t\tsectionId: \"available\",\n\t\t\t\t\ttitle: \"Available Packages\",\n\t\t\t\t\tcount: availablePackages.length,\n\t\t\t\t\tisEmpty: !hasAvailable,\n\t\t\t\t\temptyText: \"No packages available to install.\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(PackageList, {\n\t\t\t\t\t\tpackages: availablePackages,\n\t\t\t\t\t\tonInstall,\n\t\t\t\t\t\tonUninstall\n\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t\thasDismissed && /* @__PURE__ */ jsx(PackageSection, {\n\t\t\t\t\tsectionId: \"dismissed\",\n\t\t\t\t\ttitle: \"Dismissed Packages\",\n\t\t\t\t\tcount: dismissedPackages.length,\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(PackageList, {\n\t\t\t\t\t\tpackages: dismissedPackages,\n\t\t\t\t\t\tonInstall,\n\t\t\t\t\t\tonUninstall\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t]\n\t\t})\n\t});\n};\nconst STORAGE_KEY = \"ph:package-manager:collapsed-sections\";\nfunction loadCollapsedSections() {\n\tif (typeof window === \"undefined\") return {};\n\ttry {\n\t\tconst raw = window.localStorage.getItem(STORAGE_KEY);\n\t\treturn raw ? JSON.parse(raw) : {};\n\t} catch {\n\t\treturn {};\n\t}\n}\nfunction useCollapsedSection(sectionId) {\n\tconst [collapsed, setCollapsed] = useState(() => loadCollapsedSections()[sectionId] ?? true);\n\tuseEffect(() => {\n\t\tif (typeof window === \"undefined\") return;\n\t\ttry {\n\t\t\tconst current = loadCollapsedSections();\n\t\t\tcurrent[sectionId] = collapsed;\n\t\t\twindow.localStorage.setItem(STORAGE_KEY, JSON.stringify(current));\n\t\t} catch {}\n\t}, [sectionId, collapsed]);\n\treturn [collapsed, useCallback(() => setCollapsed((prev) => !prev), [])];\n}\nconst PackageSection = ({ sectionId, title, count, isEmpty, emptyText, children }) => {\n\tconst [collapsed, toggle] = useCollapsedSection(sectionId);\n\tconst contentId = `package-section-${sectionId}`;\n\treturn /* @__PURE__ */ jsxs(\"section\", {\n\t\tclassName: \"mb-6\",\n\t\tchildren: [/* @__PURE__ */ jsx(\"h3\", {\n\t\t\tclassName: \"sticky top-0 z-10 mb-3 border-b border-gray-200 bg-white\",\n\t\t\tchildren: /* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\ttype: \"button\",\n\t\t\t\tonClick: toggle,\n\t\t\t\t\"aria-expanded\": !collapsed,\n\t\t\t\t\"aria-controls\": contentId,\n\t\t\t\tclassName: \"flex w-full items-center gap-2 pb-2 text-left text-base font-semibold text-gray-900 hover:text-gray-700\",\n\t\t\t\tchildren: [\n\t\t\t\t\t/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\tname: \"ChevronDown\",\n\t\t\t\t\t\tsize: 16,\n\t\t\t\t\t\tclassName: twMerge(\"shrink-0 text-gray-500 transition-transform\", collapsed && \"-rotate-90\")\n\t\t\t\t\t}),\n\t\t\t\t\t/* @__PURE__ */ jsx(\"span\", { children: title }),\n\t\t\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\tclassName: \"text-xs font-medium text-gray-500\",\n\t\t\t\t\t\tchildren: count\n\t\t\t\t\t})\n\t\t\t\t]\n\t\t\t})\n\t\t}), !collapsed && /* @__PURE__ */ jsx(\"div\", {\n\t\t\tid: contentId,\n\t\t\tchildren: isEmpty ? /* @__PURE__ */ jsx(\"p\", {\n\t\t\t\tclassName: \"text-sm text-gray-500\",\n\t\t\t\tchildren: emptyText\n\t\t\t}) : /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"flex flex-col gap-4\",\n\t\t\t\tchildren\n\t\t\t})\n\t\t})]\n\t});\n};\nconst PackageSubSection = ({ title, count, children }) => {\n\treturn /* @__PURE__ */ jsxs(\"div\", { children: [/* @__PURE__ */ jsxs(\"h4\", {\n\t\tclassName: \"mb-2 flex items-baseline gap-2 text-xs font-semibold tracking-wide text-gray-500 uppercase\",\n\t\tchildren: [/* @__PURE__ */ jsx(\"span\", { children: title }), /* @__PURE__ */ jsxs(\"span\", {\n\t\t\tclassName: \"font-medium tracking-normal text-gray-400 normal-case\",\n\t\t\tchildren: [\n\t\t\t\t\"(\",\n\t\t\t\tcount,\n\t\t\t\t\")\"\n\t\t\t]\n\t\t})]\n\t}), children] });\n};\nconst PackageList = ({ packages, onInstall, onUninstall }) => {\n\treturn /* @__PURE__ */ jsx(\"ul\", {\n\t\tclassName: \"flex flex-col items-stretch gap-4 pr-2\",\n\t\tchildren: packages.map((pkg) => /* @__PURE__ */ jsx(PackageManagerListItem, {\n\t\t\tregistryPackage: pkg,\n\t\t\tonInstall,\n\t\t\tonUninstall\n\t\t}, pkg.name))\n\t});\n};\n//#endregion\n//#region src/connect/components/modal/settings-modal-v2/package-manager/package-manager.tsx\nconst PackageManager = (props) => {\n\tconst { registryPackageList, onInstall, onUninstall, mutable, disabled, className } = props;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: twMerge(\"flex h-full flex-1 flex-col rounded-lg bg-white p-3\", className),\n\t\tchildren: [mutable && /* @__PURE__ */ jsx(PackageManagerInput, {\n\t\t\tclassName: \"mb-4\",\n\t\t\tregistryPackageList,\n\t\t\tonInstall,\n\t\t\tdisabled\n\t\t}), /* @__PURE__ */ jsx(PackageManagerList, {\n\t\t\tregistryPackageList,\n\t\t\tonUninstall,\n\t\t\tonInstall\n\t\t})]\n\t});\n};\n//#endregion\n//#region src/connect/components/modal/settings-modal-v2/settings-modal.tsx\nfunction SettingsModal(props) {\n\tconst { title, overlayProps, contentProps, onOpenChange, tabs, defaultTab, ...restProps } = props;\n\tconst [selectedTab, setSelectedTab] = useState(defaultTab ?? tabs.at(0)?.id);\n\tconst tabsContent = tabs.map((tab) => /* @__PURE__ */ jsx(\"button\", {\n\t\ttype: \"button\",\n\t\tonClick: () => setSelectedTab(tab.id),\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: twMerge(\"flex h-9 w-48 cursor-pointer items-center gap-x-2 rounded-md pl-3 hover:bg-slate-50\", selectedTab === tab.id ? \"bg-slate-50\" : \"bg-transparent\"),\n\t\t\tchildren: [tab.icon, /* @__PURE__ */ jsx(\"span\", { children: tab.label })]\n\t\t})\n\t}, tab.id));\n\tconst SelectedTabComponent = tabs.find((tab) => tab.id === selectedTab)?.content;\n\treturn /* @__PURE__ */ jsxs(Modal, {\n\t\tcontentProps: {\n\t\t\t...contentProps,\n\t\t\tclassName: twMerge(\"min-h-full w-full max-w-4xl rounded-xl\", contentProps?.className),\n\t\t\tstyle: {\n\t\t\t\t...contentProps?.style,\n\t\t\t\tboxShadow: \"0px 0px 16px 4px rgba(0, 0, 0, 0.04), 0px 33px 32px -16px rgba(0, 0, 0, 0.10)\"\n\t\t\t}\n\t\t},\n\t\tonOpenChange,\n\t\toverlayProps: {\n\t\t\t...overlayProps,\n\t\t\tclassName: twMerge(\"py-28\", overlayProps?.className)\n\t\t},\n\t\t...restProps,\n\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"flex justify-between border-b border-slate-50 p-4\",\n\t\t\tchildren: [/* @__PURE__ */ jsx(\"h1\", {\n\t\t\t\tclassName: \"text-center text-xl font-semibold\",\n\t\t\t\tchildren: title\n\t\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\ttype: \"button\",\n\t\t\t\tclassName: \"flex size-6 items-center justify-center rounded-md outline-none\",\n\t\t\t\tonClick: () => onOpenChange?.(false),\n\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tname: \"XmarkLight\",\n\t\t\t\t\tsize: 24\n\t\t\t\t})\n\t\t\t})]\n\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"flex flex-1\",\n\t\t\tchildren: [/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"flex flex-col gap-y-1 p-3 pt-6\",\n\t\t\t\tchildren: tabsContent\n\t\t\t}), /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"m-6 flex h-full flex-1 flex-col overflow-hidden rounded-lg border border-slate-50 bg-white\",\n\t\t\t\tchildren: typeof SelectedTabComponent === \"function\" ? /* @__PURE__ */ jsx(SelectedTabComponent, {}) : SelectedTabComponent\n\t\t\t})]\n\t\t})]\n\t});\n}\n//#endregion\n//#region src/connect/components/modal/settings-modal/row.tsx\nconst SettingsRow = (props) => {\n\tconst { title, children, description, ...restProps } = props;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\t...restProps,\n\t\tchildren: [title ? /* @__PURE__ */ jsx(\"h2\", {\n\t\t\tclassName: \"font-semibold\",\n\t\t\tchildren: title\n\t\t}) : null, /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"flex items-center justify-between gap-x-12 text-sm font-medium\",\n\t\t\tchildren: [/* @__PURE__ */ jsx(\"p\", { children: description }), /* @__PURE__ */ jsx(\"div\", { children })]\n\t\t})]\n\t});\n};\n//#endregion\n//#region src/connect/components/modal/settings-modal/clear-storage-row.tsx\nconst ClearStorageSettingsRow = (props) => {\n\tconst { onClearStorage, buttonLabel, ...restProps } = props;\n\treturn /* @__PURE__ */ jsx(SettingsRow, {\n\t\t...restProps,\n\t\tchildren: /* @__PURE__ */ jsx(PowerhouseButton, {\n\t\t\tclassName: \"h-auto min-h-9 rounded-sm border border-solid border-gray-300 bg-white px-3 py-0 text-sm text-red-800 hover:border-gray-500 hover:bg-white hover:text-red-900\",\n\t\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\tname: \"Trash\",\n\t\t\t\tsize: 18\n\t\t\t}),\n\t\t\ticonPosition: \"right\",\n\t\t\tonClick: onClearStorage,\n\t\t\tchildren: buttonLabel\n\t\t})\n\t});\n};\n//#endregion\n//#region src/connect/components/modal/settings-modal/settings-modal.tsx\nconst SettingsModalOld = (props) => {\n\tconst { body, title, onSave, children, saveLabel, cancelLabel, overlayProps, contentProps, onOpenChange, ...restProps } = props;\n\treturn /* @__PURE__ */ jsx(Modal, {\n\t\tcontentProps: {\n\t\t\t...contentProps,\n\t\t\tclassName: twMerge(\"rounded-2xl\", contentProps?.className)\n\t\t},\n\t\tonOpenChange,\n\t\toverlayProps: {\n\t\t\t...overlayProps,\n\t\t\tclassName: twMerge(\"top-10\", overlayProps?.className)\n\t\t},\n\t\t...restProps,\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"w-[432px] bg-white p-4 text-gray-900\",\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"flex justify-between\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"h1\", {\n\t\t\t\t\t\tclassName: \"text-center text-xl font-bold\",\n\t\t\t\t\t\tchildren: title\n\t\t\t\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\tclassName: \"flex size-8 items-center justify-center rounded-md bg-gray-100 text-gray-500 outline-none hover:text-gray-900\",\n\t\t\t\t\t\tonClick: () => onOpenChange?.(false),\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\tname: \"XmarkLight\",\n\t\t\t\t\t\t\tsize: 24\n\t\t\t\t\t\t})\n\t\t\t\t\t})]\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"mt-8 flex min-h-[50px] items-center justify-center rounded-md bg-slate-50 p-3 text-xs font-medium text-gray-600\",\n\t\t\t\t\tchildren: body\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"mt-4 flex flex-col gap-y-4\",\n\t\t\t\t\tchildren\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"mt-4 flex justify-end gap-x-4\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(PowerhouseButton, {\n\t\t\t\t\t\tclassName: \"text-gray-900\",\n\t\t\t\t\t\tcolor: \"light\",\n\t\t\t\t\t\tonClick: () => onOpenChange?.(false),\n\t\t\t\t\t\tchildren: cancelLabel\n\t\t\t\t\t}), /* @__PURE__ */ jsx(PowerhouseButton, {\n\t\t\t\t\t\tonClick: onSave,\n\t\t\t\t\t\tchildren: saveLabel\n\t\t\t\t\t})]\n\t\t\t\t})\n\t\t\t]\n\t\t})\n\t});\n};\n//#endregion\n//#region src/connect/components/modal/upgrade-drive-modal.tsx\nconst buttonStyles = \"min-h-[48px] min-w-[142px] text-base font-semibold py-3 px-6 rounded-xl outline-none active:opacity-75 hover:scale-105 transform transition-all\";\nfunction ConnectUpgradeDriveModal(props) {\n\tconst { body, header, onOpenChange, onContinue, cancelLabel, continueLabel, overlayProps, contentProps, ...restProps } = props;\n\treturn /* @__PURE__ */ jsx(Modal, {\n\t\tcontentProps: {\n\t\t\t...contentProps,\n\t\t\tclassName: twMerge(\"rounded-3xl\", contentProps?.className)\n\t\t},\n\t\tonOpenChange,\n\t\toverlayProps: {\n\t\t\t...overlayProps,\n\t\t\tclassName: overlayProps?.className\n\t\t},\n\t\t...restProps,\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"w-[400px] bg-white p-6 text-slate-300\",\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"border-b border-slate-50 pb-2 text-2xl font-bold text-gray-800\",\n\t\t\t\t\tchildren: header\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"my-6 rounded-md bg-slate-50 p-4 text-center\",\n\t\t\t\t\tchildren: body\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\tclassName: \"mt-8 flex justify-between gap-3\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\tclassName: twMerge(buttonStyles, \"flex-1 bg-slate-50 text-slate-800\"),\n\t\t\t\t\t\tonClick: () => onOpenChange?.(false),\n\t\t\t\t\t\tchildren: cancelLabel\n\t\t\t\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\t\tclassName: twMerge(buttonStyles, \"flex-1 bg-gray-800 text-gray-50\"),\n\t\t\t\t\t\tonClick: onContinue,\n\t\t\t\t\t\tchildren: continueLabel\n\t\t\t\t\t})]\n\t\t\t\t})\n\t\t\t]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/revision-history/header/branch.tsx\nfunction Branch(props) {\n\tconst { branch = \"main\" } = props;\n\treturn /* @__PURE__ */ jsxs(\"button\", {\n\t\tclassName: \"flex h-8 w-fit items-center gap-1 rounded-lg bg-slate-50 pr-2 pl-1 text-xs text-stone-300\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(Icon, { name: \"Branch\" }),\n\t\t\t/* @__PURE__ */ jsx(\"span\", { children: \"BRANCH\" }),\n\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\tclassName: \"text-gray-900\",\n\t\t\t\tchildren: branch\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/revision-history/header/doc-id.tsx\nfunction DocId(props) {\n\tconst { docId, onCopy } = props;\n\tconst [, copy] = useCopyToClipboard();\n\tfunction handleCopy(text) {\n\t\treturn () => {\n\t\t\tcopy(text).then(() => {\n\t\t\t\tonCopy?.();\n\t\t\t}).catch((error) => {\n\t\t\t\tconsole.error(\"Failed to copy!\", error);\n\t\t\t});\n\t\t};\n\t}\n\treturn /* @__PURE__ */ jsxs(\"button\", {\n\t\tclassName: \"flex h-8 w-fit items-center gap-1 rounded-lg bg-slate-50 pr-2 pl-1 text-xs text-stone-300\",\n\t\tonClick: handleCopy(docId),\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(Icon, { name: \"Link\" }),\n\t\t\t\"DOC ID\",\n\t\t\t/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\tclassName: \"text-gray-900\",\n\t\t\t\tchildren: docId\n\t\t\t})\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/revision-history/header/document-state.tsx\nconst DocumentState = (props) => {\n\tconst { documentState, onCopyState } = props;\n\tconst [, copy] = useCopyToClipboard();\n\tfunction handleCopy() {\n\t\tcopy(JSON.stringify(documentState, null, 2)).then(() => {\n\t\t\tonCopyState?.();\n\t\t}).catch((error) => {\n\t\t\tconsole.error(\"Failed to copy document state!\", error);\n\t\t});\n\t}\n\treturn /* @__PURE__ */ jsx(\"button\", {\n\t\tclassName: \"rounded-lg bg-slate-50 p-1 text-stone-300\",\n\t\tonClick: handleCopy,\n\t\tchildren: /* @__PURE__ */ jsx(Icon, { name: \"CurlyBrackets\" })\n\t});\n};\n//#endregion\n//#region src/connect/components/revision-history/header/scope.tsx\nfunction Scope(props) {\n\tconst { value, onChange } = props;\n\treturn /* @__PURE__ */ jsx(ConnectSelect, {\n\t\tabsolutePositionMenu: true,\n\t\tcontainerClassName: \"bg-slate-50 text-gray-500 rounded-lg w-fit text-xs z-10\",\n\t\tid: \"scope select\",\n\t\titemClassName: \"py-2 text-gray-500 grid grid-cols-[auto,auto] gap-1\",\n\t\titems: [{\n\t\t\tdisplayValue: \"Global scope\",\n\t\t\tvalue: \"global\"\n\t\t}, {\n\t\t\tdisplayValue: \"Local scope\",\n\t\t\tvalue: \"local\"\n\t\t}],\n\t\tmenuClassName: \"min-w-0 text-gray-500\",\n\t\tonChange,\n\t\tvalue\n\t});\n}\n//#endregion\n//#region src/connect/components/revision-history/header/header.tsx\nfunction Header(props) {\n\tconst { title, docId, scope, onChangeScope, onClose, className, documentState, onCopyState, onCopyDocId, ...divProps } = props;\n\treturn /* @__PURE__ */ jsxs(\"header\", {\n\t\tclassName: twMerge(\"flex items-center justify-between bg-transparent\", className),\n\t\t...divProps,\n\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"flex items-center gap-3\",\n\t\t\tchildren: [/* @__PURE__ */ jsx(\"button\", {\n\t\t\t\tname: \"close-revision-history\",\n\t\t\t\tclassName: \"rounded-lg bg-gray-50 p-1 text-stone-300 shadow-button\",\n\t\t\t\tonClick: onClose,\n\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, { name: \"VariantArrowLeft\" })\n\t\t\t}), /* @__PURE__ */ jsx(\"h1\", {\n\t\t\t\tclassName: \"text-xs\",\n\t\t\t\tchildren: title\n\t\t\t})]\n\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"flex items-center gap-2\",\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsx(DocId, {\n\t\t\t\t\tdocId,\n\t\t\t\t\tonCopy: onCopyDocId\n\t\t\t\t}),\n\t\t\t\tdocumentState && /* @__PURE__ */ jsx(DocumentState, {\n\t\t\t\t\tdocumentState,\n\t\t\t\t\tonCopyState\n\t\t\t\t}),\n\t\t\t\t/* @__PURE__ */ jsx(Branch, {}),\n\t\t\t\t/* @__PURE__ */ jsx(Scope, {\n\t\t\t\t\tonChange: onChangeScope,\n\t\t\t\t\tvalue: scope\n\t\t\t\t})\n\t\t\t]\n\t\t})]\n\t});\n}\n//#endregion\n//#region src/connect/hooks/use-ens.ts\nconst ensCache = /* @__PURE__ */ new Map();\nfunction fetchEns(address) {\n\tconst cached = ensCache.get(address);\n\tif (cached) return cached;\n\tconst promise = fetch(`https://api.ensdata.net/${address}`).then((res) => {\n\t\tif (!res.ok) throw new Error(`ENS lookup failed: ${res.status}`);\n\t\treturn res.json();\n\t}).catch((err) => {\n\t\tensCache.delete(address);\n\t\tthrow err instanceof Error ? err : /* @__PURE__ */ new Error(\"ENS lookup failed\");\n\t});\n\tensCache.set(address, promise);\n\treturn promise;\n}\nfunction useEns(address) {\n\tconst [data, setData] = useState();\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [error, setError] = useState();\n\tuseEffect(() => {\n\t\tif (!address) {\n\t\t\tsetData(void 0);\n\t\t\tsetError(void 0);\n\t\t\treturn;\n\t\t}\n\t\tlet cancelled = false;\n\t\tsetIsLoading(true);\n\t\tsetError(void 0);\n\t\tfetchEns(address).then((json) => {\n\t\t\tif (cancelled) return;\n\t\t\tsetData(json);\n\t\t}).catch((err) => {\n\t\t\tif (cancelled) return;\n\t\t\tsetError(err instanceof Error ? err : /* @__PURE__ */ new Error(\"ENS lookup failed\"));\n\t\t}).finally(() => {\n\t\t\tif (cancelled) return;\n\t\t\tsetIsLoading(false);\n\t\t});\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [address]);\n\treturn {\n\t\tdata,\n\t\tisLoading,\n\t\terror\n\t};\n}\n//#endregion\n//#region src/connect/utils/address.ts\nfunction formatEthAddress(address) {\n\treturn `${address.slice(0, 7)}...${address.slice(-5)}`;\n}\n//#endregion\n//#region src/connect/components/code-popover.tsx\nfunction CodePopover(props) {\n\tconst { content, trigger, anchor } = props;\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst opener = funnel(() => setIsOpen(true), {\n\t\ttriggerAt: \"start\",\n\t\tminQuietPeriodMs: 300\n\t});\n\tconst closer = funnel(() => setIsOpen(false), {\n\t\ttriggerAt: \"start\",\n\t\tminQuietPeriodMs: 100\n\t});\n\tfunction open() {\n\t\tcloser.cancel();\n\t\topener.call();\n\t}\n\tfunction close() {\n\t\topener.cancel();\n\t\tcloser.call();\n\t}\n\treturn /* @__PURE__ */ jsxs(Root$1, {\n\t\topen: isOpen,\n\t\tonOpenChange: (changedIsOpen) => changedIsOpen ? open() : close(),\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(Trigger$1, {\n\t\t\t\tonMouseEnter: open,\n\t\t\t\tchildren: trigger\n\t\t\t}),\n\t\t\t!!anchor && /* @__PURE__ */ jsx(Anchor, {\n\t\t\t\tasChild: true,\n\t\t\t\tchildren: anchor\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(Portal$1, { children: /* @__PURE__ */ jsx(Content$1, {\n\t\t\t\tforceMount: true,\n\t\t\t\tonMouseLeave: close,\n\t\t\t\tsideOffset: -28,\n\t\t\t\tonCloseAutoFocus: (e) => e.preventDefault(),\n\t\t\t\tcollisionPadding: {\n\t\t\t\t\ttop: 24,\n\t\t\t\t\tright: 24,\n\t\t\t\t\tbottom: -1e4,\n\t\t\t\t\tleft: 24\n\t\t\t\t},\n\t\t\t\tclassName: \"z-50 rounded-lg border border-gray-200 bg-white p-2 text-xs shadow-tooltip outline-none\",\n\t\t\t\tchildren: content\n\t\t\t}) })\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/revision-history/revision/address.tsx\nfunction Address(props) {\n\tconst { address, chainId } = props;\n\tconst { data: ensData } = useEns(address);\n\tif (!address) return null;\n\tconst shortenedAddress = formatEthAddress(address);\n\treturn /* @__PURE__ */ jsx(CodePopover, {\n\t\tcontent: /* @__PURE__ */ jsx(FormattedJsonViewer, { value: { address } }),\n\t\ttrigger: /* @__PURE__ */ jsxs(\"span\", {\n\t\t\tclassName: \"flex w-fit cursor-pointer items-center gap-1 rounded-lg bg-gray-100 p-1 text-xs text-slate-100\",\n\t\t\tchildren: [/* @__PURE__ */ jsx(ENSAvatar, {\n\t\t\t\taddress,\n\t\t\t\tchainId,\n\t\t\t\tavatarUrl: ensData?.avatar_url ?? void 0\n\t\t\t}), shortenedAddress]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/revision-history/revision/errors.tsx\nfunction Errors(props) {\n\tconst { errors } = props;\n\tconst hasErrors = !!errors?.length;\n\tconst color = hasErrors ? \"text-red-800\" : \"text-green-700\";\n\tconst icon = hasErrors ? /* @__PURE__ */ jsx(Icon, {\n\t\tname: \"Exclamation\",\n\t\tsize: 16\n\t}) : /* @__PURE__ */ jsx(Icon, {\n\t\tname: \"Check\",\n\t\tsize: 16\n\t});\n\tconst text = hasErrors ? `Error: ${errors[0]}` : \"No errors\";\n\tconst content = /* @__PURE__ */ jsxs(\"span\", {\n\t\tclassName: twMerge(\"flex w-fit items-center rounded-lg border border-gray-200 bg-white px-2 py-1 text-xs\", color, hasErrors && \"cursor-pointer\"),\n\t\tchildren: [icon, /* @__PURE__ */ jsx(\"span\", {\n\t\t\tclassName: twMerge(\"inline-block max-w-36 truncate\"),\n\t\t\tchildren: text\n\t\t})]\n\t});\n\tif (hasErrors) return /* @__PURE__ */ jsx(CodePopover, {\n\t\tcontent: /* @__PURE__ */ jsx(FormattedJsonViewer, { value: errors }),\n\t\ttrigger: content\n\t});\n\treturn content;\n}\n//#endregion\n//#region src/connect/components/revision-history/revision/operation.tsx\nfunction Operation$1(props) {\n\tconst { operationType, operationInput } = props;\n\treturn /* @__PURE__ */ jsx(CodePopover, {\n\t\tcontent: /* @__PURE__ */ jsx(FormattedJsonViewer, { value: operationInput }),\n\t\ttrigger: /* @__PURE__ */ jsxs(\"span\", {\n\t\t\tclassName: \"flex cursor-pointer items-center gap-2 text-xs\",\n\t\t\tchildren: [operationType, /* @__PURE__ */ jsx(Icon, {\n\t\t\t\tclassName: \"text-gray-300\",\n\t\t\t\tname: \"Braces\",\n\t\t\t\tsize: 16\n\t\t\t})]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/revision-history/revision/revision-number.tsx\nfunction RevisionNumber(props) {\n\tconst { operationIndex, eventId, stateHash } = props;\n\tconst revisionNumber = operationIndex + 1;\n\treturn /* @__PURE__ */ jsx(CodePopover, {\n\t\tcontent: /* @__PURE__ */ jsx(FormattedJsonViewer, { value: {\n\t\t\trevisionNumber,\n\t\t\teventId,\n\t\t\tstateHash\n\t\t} }),\n\t\ttrigger: /* @__PURE__ */ jsxs(\"span\", {\n\t\t\tclassName: \"flex cursor-pointer items-center gap-2 text-xs text-gray-600\",\n\t\t\tchildren: [\n\t\t\t\t\"Revision \",\n\t\t\t\trevisionNumber,\n\t\t\t\t\".\",\n\t\t\t\t/* @__PURE__ */ jsx(\"a\", { children: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tclassName: \"cursor-pointer text-slate-100\",\n\t\t\t\t\tname: \"Ellipsis\",\n\t\t\t\t\tsize: 14\n\t\t\t\t}) })\n\t\t\t]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/revision-history/revision/signature.tsx\nfunction Signature(props) {\n\tconst { signatures } = props;\n\tif (!signatures?.length) return null;\n\treturn /* @__PURE__ */ jsx(CodePopover, {\n\t\ttrigger: /* @__PURE__ */ jsxs(\"span\", {\n\t\t\tclassName: \"flex w-fit cursor-pointer items-center gap-1 rounded-lg border border-gray-200 bg-white px-2 py-1\",\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsx(VerificationStatus, { signatures }),\n\t\t\t\t\" \",\n\t\t\t\t/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tclassName: \"text-gray-300\",\n\t\t\t\t\tname: \"InfoSquare\",\n\t\t\t\t\tsize: 16\n\t\t\t\t})\n\t\t\t]\n\t\t}),\n\t\tcontent: /* @__PURE__ */ jsx(FormattedJsonViewer, {\n\t\t\tvalue: signatures,\n\t\t\tcollapsed: 1\n\t\t})\n\t});\n}\nfunction VerificationStatus(props) {\n\tconst { signatures } = props;\n\tif (!signatures?.length) return null;\n\tconst signatureCount = signatures.length;\n\tconst verifiedSignaturesCount = signatures.filter((signature) => signature.isVerified).length;\n\tconst verificationStatusText = `${verifiedSignaturesCount}/${signatureCount} ${signatureCount === 1 ? \"signature\" : \"signatures\"} verified`;\n\treturn /* @__PURE__ */ jsx(\"span\", {\n\t\tclassName: `text-xs ${verifiedSignaturesCount === 0 ? \"text-red-800\" : verifiedSignaturesCount === signatureCount ? \"text-green-700\" : \"text-orange-700\"}`,\n\t\tchildren: verificationStatusText\n\t});\n}\n//#endregion\n//#region src/connect/components/revision-history/revision/timestamp.tsx\nfunction Timestamp(props) {\n\tconst { timestampUtcMs: timestamp } = props;\n\tconst timestampNumber = typeof timestamp === \"string\" && !timestamp.includes(\"-\") ? parseInt(timestamp) : timestamp;\n\tconst date = new Date(timestampNumber);\n\tconst shortDate = format(date, \"HH:mm 'UTC'\");\n\treturn /* @__PURE__ */ jsx(CodePopover, {\n\t\tcontent: /* @__PURE__ */ jsx(FormattedJsonViewer, { value: {\n\t\t\ttimestampFormatted: format(date, \"eee, dd MMM yyyy HH:mm:ss 'UTC'\"),\n\t\t\ttimestampUtcMs: timestamp\n\t\t} }),\n\t\ttrigger: /* @__PURE__ */ jsxs(\"span\", {\n\t\t\tclassName: \"cursor-pointer text-xs\",\n\t\t\tchildren: [\"committed at \", shortDate]\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/revision-history/revision/revision.tsx\nfunction _Revision(props) {\n\treturn /* @__PURE__ */ jsxs(\"article\", {\n\t\tclassName: \"flex items-center justify-between rounded-xl border border-gray-200 bg-white px-4 py-2\",\n\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"flex items-center gap-2\",\n\t\t\tchildren: [\n\t\t\t\t/* @__PURE__ */ jsx(RevisionNumber, { ...props }),\n\t\t\t\t/* @__PURE__ */ jsx(Operation$1, { ...props }),\n\t\t\t\t/* @__PURE__ */ jsx(Address, { ...props }),\n\t\t\t\t/* @__PURE__ */ jsx(Timestamp, { ...props })\n\t\t\t]\n\t\t}), /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: \"flex items-center gap-1\",\n\t\t\tchildren: [/* @__PURE__ */ jsx(Signature, { ...props }), /* @__PURE__ */ jsx(Errors, { ...props })]\n\t\t})]\n\t});\n}\nconst Revision = /* @__PURE__ */ memo(_Revision);\n//#endregion\n//#region src/connect/components/revision-history/skip/skip.tsx\nfunction Skip(props) {\n\tconst { operationIndex, skipCount } = props;\n\tconst revisionNumber = operationIndex;\n\tconst skippedRevisions = skipCount === 1 ? `${revisionNumber}` : `${revisionNumber} - ${revisionNumber + 1 - skipCount}`;\n\treturn /* @__PURE__ */ jsxs(\"article\", {\n\t\tclassName: \"grid grid-cols-[1fr,auto,1fr] items-center py-2\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(\"div\", { className: \"h-px rounded-full bg-slate-100\" }),\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"mx-3 text-xs text-slate-100\",\n\t\t\t\tchildren: [\n\t\t\t\t\t\"[Skipped Revision \",\n\t\t\t\t\tskippedRevisions,\n\t\t\t\t\t\"]\"\n\t\t\t\t]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"div\", { className: \"h-px rounded-full bg-slate-100\" })\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/revision-history/utils.ts\nfunction makeRows(operations) {\n\tconst revisionsAndSkips = [];\n\tconst seenDays = /* @__PURE__ */ new Set();\n\tfor (const operation of operations) {\n\t\tif (!operation.timestampUtcMs) continue;\n\t\tconst day = operation.timestampUtcMs.split(\"T\")[0];\n\t\tif (!seenDays.has(day)) {\n\t\t\tseenDays.add(day);\n\t\t\trevisionsAndSkips.push({\n\t\t\t\ttype: \"day\",\n\t\t\t\theight: 32,\n\t\t\t\ttimestampUtcMs: day\n\t\t\t});\n\t\t}\n\t\trevisionsAndSkips.push({\n\t\t\ttype: \"revision\",\n\t\t\theight: 46,\n\t\t\toperationIndex: operation.index,\n\t\t\teventId: operation.id ?? \"EVENT_ID_NOT_FOUND\",\n\t\t\tstateHash: operation.hash,\n\t\t\toperationType: operation.action.type,\n\t\t\toperationInput: operation.action.input ?? {},\n\t\t\taddress: operation.action?.context?.signer?.user.address,\n\t\t\tchainId: operation.action?.context?.signer?.user.chainId,\n\t\t\ttimestampUtcMs: operation.timestampUtcMs,\n\t\t\tsignatures: makeSignatures(operation.action?.context?.signer?.signatures ?? []),\n\t\t\terrors: operation.error ? [operation.error] : void 0\n\t\t});\n\t\tif (operation.skip > 0) revisionsAndSkips.push({\n\t\t\ttype: \"skip\",\n\t\t\theight: 34,\n\t\t\toperationIndex: operation.index,\n\t\t\tskipCount: operation.skip,\n\t\t\ttimestampUtcMs: operation.timestampUtcMs\n\t\t});\n\t}\n\treturn revisionsAndSkips;\n}\nfunction makeSignatureFromSignatureArray(signatureArray) {\n\tconst [signerAddress, hash, prevStateHash, signatureBytes] = signatureArray;\n\treturn {\n\t\tsignerAddress,\n\t\thash,\n\t\tprevStateHash,\n\t\tsignatureBytes,\n\t\tisVerified: true\n\t};\n}\nfunction makeSignatures(signaturesArray) {\n\treturn signaturesArray?.map(makeSignatureFromSignatureArray);\n}\n//#endregion\n//#region src/connect/components/revision-history/timeline/day.tsx\nfunction Day(props) {\n\tconst { timestampUtcMs: timestamp } = props;\n\tconst formattedDate = format(timestamp, \"MMM dd, yyyy\");\n\treturn /* @__PURE__ */ jsxs(\"h2\", {\n\t\tclassName: \"-ml-6 flex items-center gap-1 bg-slate-50 py-2 text-xs text-slate-100\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(Icon, {\n\t\t\t\tname: \"Ring\",\n\t\t\t\tsize: 16\n\t\t\t}),\n\t\t\t\" Changes on \",\n\t\t\tformattedDate\n\t\t]\n\t});\n}\n//#endregion\n//#region src/connect/components/revision-history/timeline/timeline.tsx\nfunction Timeline(props) {\n\tconst { localOperations, globalOperations, scope } = props;\n\tconst operations = scope === \"local\" ? localOperations : globalOperations;\n\tconst initialNumRowsToShow = 100;\n\tconst allRows = useMemo(() => makeRows(operations), [operations]);\n\tconst [scrollAmount, setScrollAmount] = useState(0);\n\tconst [numRowsToShow, setNumRowsToShow] = useState(initialNumRowsToShow);\n\tconst [rows, setRows] = useState(() => allRows.slice(0, numRowsToShow));\n\tconst parentRef = useRef(null);\n\tconst hasNextPage = rows.length < allRows.length;\n\tconst rowVirtualizer = useVirtualizer({\n\t\tcount: rows.length,\n\t\tgetScrollElement: () => parentRef.current,\n\t\testimateSize: (i) => allRows[i].height,\n\t\tgap: 8\n\t});\n\tuseEffect(() => {\n\t\tif (!hasNextPage) return;\n\t\tconst newNumRevisions = initialNumRowsToShow + Math.floor(scrollAmount / 46);\n\t\tsetNumRowsToShow((prev) => newNumRevisions > prev ? newNumRevisions : prev);\n\t}, [scrollAmount, hasNextPage]);\n\tuseEffect(() => {\n\t\tsetRows(allRows.slice(0, numRowsToShow));\n\t}, [allRows, numRowsToShow]);\n\tconst handleScroll = (e) => {\n\t\tsetScrollAmount((prev) => {\n\t\t\tconst n = prev + e.deltaY;\n\t\t\tif (n < 0) return 0;\n\t\t\treturn n;\n\t\t});\n\t};\n\tuseEffect(() => {\n\t\twindow.addEventListener(\"wheel\", handleScroll);\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"wheel\", handleScroll);\n\t\t};\n\t}, []);\n\treturn /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: \"border-l border-slate-100\",\n\t\tref: parentRef,\n\t\tstyle: {\n\t\t\theight: `${rowVirtualizer.getTotalSize()}px`,\n\t\t\twidth: \"100%\",\n\t\t\tposition: \"relative\"\n\t\t},\n\t\tchildren: rowVirtualizer.getVirtualItems().map((virtualRow) => {\n\t\t\tconst row = rows[virtualRow.index];\n\t\t\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tstyle: {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 16,\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\theight: `${virtualRow.size}px`,\n\t\t\t\t\ttransform: `translateY(${virtualRow.start}px)`\n\t\t\t\t},\n\t\t\t\tchildren: [\n\t\t\t\t\trow.type === \"revision\" && /* @__PURE__ */ createElement(Revision, {\n\t\t\t\t\t\t...row,\n\t\t\t\t\t\tkey: virtualRow.key\n\t\t\t\t\t}),\n\t\t\t\t\trow.type === \"skip\" && /* @__PURE__ */ jsx(Skip, { ...row }, virtualRow.key),\n\t\t\t\t\trow.type === \"day\" && /* @__PURE__ */ jsx(Day, { ...row }, virtualRow.key)\n\t\t\t\t]\n\t\t\t}, virtualRow.index);\n\t\t})\n\t});\n}\n//#endregion\n//#region src/connect/components/revision-history/revision-history.tsx\nfunction RevisionHistory(props) {\n\tconst { documentTitle, documentId, globalOperations, localOperations, onClose, itemsPerPage = 100, documentState, onCopyState, onCopyDocId } = props;\n\tconst [scope, setScope] = useState(\"global\");\n\tconst visibleOperations = useMemo(() => {\n\t\treturn garbageCollect(sortOperations(scope === \"global\" ? globalOperations : localOperations)).sort((a, b) => b.index - a.index);\n\t}, [\n\t\tglobalOperations,\n\t\tlocalOperations,\n\t\tscope\n\t]);\n\tconst { pageItems, pages, goToPage, goToNextPage, goToPreviousPage, goToFirstPage, goToLastPage, hiddenNextPages, isNextPageAvailable, isPreviousPageAvailable } = usePagination(visibleOperations, { itemsPerPage });\n\tfunction onChangeScope(scope) {\n\t\tgoToFirstPage();\n\t\tsetScope(scope);\n\t}\n\tconst PaginationComponent = visibleOperations.length > itemsPerPage ? /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: \"mt-4 flex w-full justify-end\",\n\t\tchildren: /* @__PURE__ */ jsx(Pagination, {\n\t\t\tfirstPageLabel: \"First Page\",\n\t\t\tgoToFirstPage,\n\t\t\tgoToLastPage,\n\t\t\tgoToNextPage,\n\t\t\tgoToPage,\n\t\t\tgoToPreviousPage,\n\t\t\thiddenNextPages,\n\t\t\tisNextPageAvailable,\n\t\t\tisPreviousPageAvailable,\n\t\t\tlastPageLabel: \"Last Page\",\n\t\t\tnextPageLabel: \"Next\",\n\t\t\tpages,\n\t\t\tpreviousPageLabel: \"Previous\"\n\t\t})\n\t}) : /* @__PURE__ */ jsx(\"hr\", { className: \"h-12 border-none\" });\n\treturn /* @__PURE__ */ jsx(ConnectTooltipProvider, { children: /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"p-6\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(Header, {\n\t\t\t\tdocId: documentId,\n\t\t\t\tonChangeScope,\n\t\t\t\tonClose,\n\t\t\t\tscope,\n\t\t\t\ttitle: documentTitle,\n\t\t\t\tdocumentState,\n\t\t\t\tonCopyState,\n\t\t\t\tonCopyDocId\n\t\t\t}),\n\t\t\tPaginationComponent,\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"mt-4 flex justify-center rounded-md bg-slate-50 p-4\",\n\t\t\t\tchildren: visibleOperations.length > 0 ? /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"grid grid-cols-[minmax(min-content,1018px)]\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(Timeline, {\n\t\t\t\t\t\tglobalOperations: scope === \"global\" ? pageItems : [],\n\t\t\t\t\t\tlocalOperations: scope === \"local\" ? pageItems : [],\n\t\t\t\t\t\tscope\n\t\t\t\t\t})\n\t\t\t\t}) : /* @__PURE__ */ jsx(\"h3\", {\n\t\t\t\t\tclassName: \"my-40 text-gray-600\",\n\t\t\t\t\tchildren: \"This document has no recorded operations yet.\"\n\t\t\t\t})\n\t\t\t}),\n\t\t\tPaginationComponent\n\t\t]\n\t}) });\n}\n//#endregion\n//#region src/connect/components/search-bar/filter-item.tsx\nconst FilterItem = (props) => {\n\tconst { item, ...containerProps } = props;\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\t...mergeClassNameProps(containerProps, \"flex h-full flex-row items-center justify-between gap-x-4 px-2\"),\n\t\tchildren: [item.icon, /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: \"text-sm font-semibold text-slate-200\",\n\t\t\tchildren: item.label\n\t\t})]\n\t});\n};\n//#endregion\n//#region src/connect/components/search-bar/search-bar.tsx\nconst ConnectSearchBar = (props) => {\n\tconst { value, onChange, placeholder, filterLabel, filterItems, selectedFilter, onFilterSelect = () => {}, className } = props;\n\tconst items = useMemo(() => filterItems?.map((item) => ({\n\t\tid: item.id,\n\t\tcontent: /* @__PURE__ */ jsx(FilterItem, { item })\n\t})) ?? [], [filterItems]);\n\tconst selectedItemFilter = filterItems?.find((item) => item.id === selectedFilter);\n\tconst filterLabelContent = selectedItemFilter ? /* @__PURE__ */ jsx(FilterItem, {\n\t\tclassName: \"gap-x-1\",\n\t\titem: selectedItemFilter\n\t}) : filterLabel && /* @__PURE__ */ jsx(\"div\", {\n\t\tclassName: \"mr-2 text-sm font-semibold text-slate-200\",\n\t\tchildren: filterLabel\n\t});\n\tfunction handleChange(event) {\n\t\tonChange?.(event.target.value);\n\t}\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: cn(\"flex items-center\", className),\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsx(Icon, {\n\t\t\t\tclassName: \"mr-3\",\n\t\t\t\tname: \"Search\"\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"input\", {\n\t\t\t\tclassName: twMerge(\"flex h-[52px] min-w-0 flex-1 items-center rounded-xl border border-gray-200 bg-gray-50 px-4 text-sm text-slate-200 outline-none\"),\n\t\t\t\tonChange: handleChange,\n\t\t\t\tplaceholder,\n\t\t\t\tvalue\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(DropdownMenu, { children: [/* @__PURE__ */ jsxs(DropdownMenuTrigger, {\n\t\t\t\tclassName: \"ml-3 flex h-full flex-row items-center outline-none\",\n\t\t\t\tchildren: [\n\t\t\t\t\tfilterLabelContent,\n\t\t\t\t\t\" \",\n\t\t\t\t\t/* @__PURE__ */ jsx(Icon, { name: \"ChevronDown\" })\n\t\t\t\t]\n\t\t\t}), /* @__PURE__ */ jsx(DropdownMenuContent, {\n\t\t\t\tclassName: \"rounded-xl border border-gray-100 bg-gray-50 p-2\",\n\t\t\t\tchildren: items.map((item) => /* @__PURE__ */ jsx(DropdownMenuItem, {\n\t\t\t\t\tclassName: \"h-10 cursor-pointer overflow-hidden rounded-lg hover:bg-gray-100\",\n\t\t\t\t\tid: item.id,\n\t\t\t\t\tonSelect: () => onFilterSelect(item.id),\n\t\t\t\t\tchildren: item.content\n\t\t\t\t}, item.id))\n\t\t\t})] })\n\t\t]\n\t});\n};\n//#endregion\n//#region src/connect/components/sidebar/sidebar-item.tsx\nconst SidebarItem = function SidebarItem(props) {\n\tconst { icon, title, description, containerClassName, active, onClick } = props;\n\treturn /* @__PURE__ */ jsx(ConnectTooltip, {\n\t\tcontent: title,\n\t\tside: \"right\",\n\t\tsideOffset: 12,\n\t\tclassName: \"border-none bg-gray-800 px-3 py-2 text-sm text-white\",\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: twMerge(\"group/sidebar-item relative flex cursor-pointer flex-col items-center justify-center text-center text-sm text-black\", containerClassName, active && \"bg-white\", onClick && \"cursor-pointer\"),\n\t\t\tonClick,\n\t\t\tchildren: [active ? /* @__PURE__ */ jsx(\"div\", { className: \"absolute top-1/2 left-0 h-10 w-1 -translate-y-1/2 rounded-r-sm bg-violet-400\" }) : /* @__PURE__ */ jsx(\"div\", { className: \"absolute top-1/2 left-0 h-6 w-1 -translate-y-1/2 rounded-r-sm bg-zinc-300 opacity-0 transition-opacity group-hover/sidebar-item:opacity-100\" }), /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"mx-auto py-4\",\n\t\t\t\tchildren: icon || /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"flex size-8 items-center justify-center rounded-lg bg-black\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\tclassName: \"text-sm font-medium text-white\",\n\t\t\t\t\t\tchildren: title.slice(0, 1).toUpperCase()\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t})]\n\t\t})\n\t});\n};\n//#endregion\n//#region src/connect/components/sidebar/sidebar-add-drive-item.tsx\nconst SidebarAddDriveItem = function SidebarAddDriveItem(props) {\n\tconst { containerClassName, onClick } = props;\n\treturn /* @__PURE__ */ jsx(SidebarItem, {\n\t\ttitle: \"Create New Drive\",\n\t\ticon: /* @__PURE__ */ jsx(Icon, {\n\t\t\tname: \"PlusSquare\",\n\t\t\tsize: 32\n\t\t}),\n\t\tonClick,\n\t\tcontainerClassName\n\t});\n};\n//#endregion\n//#region assets/renown-short-hover.png\nvar renown_short_hover_default = \"data:image/png;base64,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\";\n//#endregion\n//#region assets/renown-short.png\nvar renown_short_default = \"data:image/png;base64,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\";\n//#endregion\n//#region src/connect/components/account-popover/account-popover-login.tsx\nconst AccountPopoverLogin = ({ onLogin }) => {\n\tconst [loading, setLoading] = useState(false);\n\tconst allowLogin = !loading && !!onLogin;\n\tconst content = loading ? /* @__PURE__ */ jsx(Icon, {\n\t\tname: \"Reload\",\n\t\tsize: 14,\n\t\tclassName: \"animate-spin\"\n\t}) : /* @__PURE__ */ jsx(\"span\", { children: \"Connect\" });\n\tconst handleLogin = () => {\n\t\tif (onLogin) {\n\t\t\tsetLoading(true);\n\t\t\tonLogin();\n\t\t}\n\t};\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"p-4\",\n\t\tchildren: [/* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: \"mb-4 flex justify-center\",\n\t\t\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"flex h-[22px] w-[83px] items-center justify-center overflow-hidden\",\n\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tname: \"RenownLight\",\n\t\t\t\t\tsize: 83\n\t\t\t\t})\n\t\t\t})\n\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\tonClick: allowLogin ? handleLogin : void 0,\n\t\t\tclassName: twMerge(\"mt-4 flex h-7 w-full cursor-pointer items-center justify-center rounded-lg border border-gray-300 bg-transparent text-sm active:opacity-70\", allowLogin ? \"cursor-pointer\" : \"cursor-wait\"),\n\t\t\ttype: \"button\",\n\t\t\tchildren: content\n\t\t})]\n\t});\n};\n//#endregion\n//#region src/connect/components/sidebar/sidebar-login.tsx\nconst SidebarLogin = ({ onLogin }) => {\n\treturn /* @__PURE__ */ jsx(AccountPopover, {\n\t\tcontent: /* @__PURE__ */ jsx(AccountPopoverLogin, { onLogin }),\n\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\tclassName: twMerge(\"group/sidebar-footer flex w-full items-baseline justify-start text-sm/10 font-semibold text-gray-600\", onLogin ? \"cursor-pointer\" : \"cursor-wait\"),\n\t\t\tchildren: [/* @__PURE__ */ jsx(\"img\", {\n\t\t\t\twidth: 42,\n\t\t\t\theight: 42,\n\t\t\t\tloading: \"lazy\",\n\t\t\t\tclassName: \"group-hover/sidebar-footer:hidden\",\n\t\t\t\tsrc: renown_short_default,\n\t\t\t\talt: \"Renown Login\"\n\t\t\t}), /* @__PURE__ */ jsx(\"img\", {\n\t\t\t\twidth: 42,\n\t\t\t\theight: 42,\n\t\t\t\tloading: \"lazy\",\n\t\t\t\tclassName: \"hidden group-hover/sidebar-footer:block\",\n\t\t\t\tsrc: renown_short_hover_default,\n\t\t\t\talt: \"Renown Login Hover\"\n\t\t\t})]\n\t\t})\n\t});\n};\n//#endregion\n//#region src/connect/components/account-popover/account-popover-user.tsx\nconst shortAddress = (address) => `${address.slice(0, 7)}...${address.slice(-5)}`;\nconst AccountPopoverUser = ({ address, onDisconnect, etherscanUrl, username = \"\" }) => {\n\tconst [isCopied, setIsCopied] = useState(false);\n\tconst copyToClipboard = useCallback(async (text) => {\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(text);\n\t\t\tsetIsCopied(true);\n\t\t\tsetTimeout(() => setIsCopied(false), 2e3);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"Failed to copy address:\", err);\n\t\t}\n\t}, []);\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tclassName: \"flex flex-col divide-y divide-gray-200 text-gray-900\",\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tclassName: \"px-3 py-2\",\n\t\t\t\tchildren: [username && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"text-sm font-medium\",\n\t\t\t\t\tchildren: username\n\t\t\t\t}), /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\tclassName: \"mt-1 flex items-center gap-2\",\n\t\t\t\t\tchildren: /* @__PURE__ */ jsx(PowerhouseButton, {\n\t\t\t\t\t\tsize: \"small\",\n\t\t\t\t\t\tcolor: \"light\",\n\t\t\t\t\t\tonClick: copyToClipboard.bind(null, address),\n\t\t\t\t\t\tclassName: \"w-full cursor-pointer bg-transparent p-0 active:opacity-70\",\n\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\tclassName: \"relative flex w-full items-center gap-1\",\n\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\t\t\t\t\tclassName: `flex items-center gap-1 transition-opacity duration-150 ${isCopied ? \"opacity-0\" : \"opacity-100\"}`,\n\t\t\t\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\t\t\t\t\tclassName: \"text-xs\",\n\t\t\t\t\t\t\t\t\tchildren: shortAddress(address)\n\t\t\t\t\t\t\t\t}), /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\t\t\t\tname: \"FilesEarmark\",\n\t\t\t\t\t\t\t\t\tcolor: \"#9EA0A1\",\n\t\t\t\t\t\t\t\t\tsize: 14\n\t\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t\t}), /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\t\t\t\t\tclassName: `absolute left-0 text-xs transition-opacity duration-150 ${isCopied ? \"opacity-100\" : \"opacity-0\"}`,\n\t\t\t\t\t\t\t\tchildren: \"Copied to clipboard!\"\n\t\t\t\t\t\t\t})]\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t})]\n\t\t\t}),\n\t\t\tetherscanUrl && /* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"px-3 py-2\",\n\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"a\", {\n\t\t\t\t\thref: etherscanUrl,\n\t\t\t\t\ttarget: \"_blank\",\n\t\t\t\t\trel: \"noopener noreferrer\",\n\t\t\t\t\tclassName: \"flex items-center gap-2 text-sm text-gray-900 hover:text-gray-600\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\tname: \"Ethscan\",\n\t\t\t\t\t\tsize: 14\n\t\t\t\t\t}), \"View on Etherscan\"]\n\t\t\t\t})\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: \"px-3 py-2\",\n\t\t\t\tchildren: /* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\tonClick: onDisconnect,\n\t\t\t\t\tclassName: twMerge(\"flex w-full items-center gap-2 text-sm text-red-900\", onDisconnect ? \"cursor-pointer hover:text-red-700\" : \"pointer-events-none cursor-wait\"),\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\t\tname: \"Disconnect\",\n\t\t\t\t\t\tsize: 14,\n\t\t\t\t\t\tcolor: \"#EA4335\"\n\t\t\t\t\t}), \"Disconnect\"]\n\t\t\t\t})\n\t\t\t})\n\t\t]\n\t});\n};\n//#endregion\n//#region src/connect/components/sidebar/sidebar-user.tsx\nconst SidebarUser = ({ address, ensName, avatarUrl, etherscanUrl, onDisconnect }) => {\n\treturn /* @__PURE__ */ jsx(AccountPopover, {\n\t\tcontent: /* @__PURE__ */ jsx(AccountPopoverUser, {\n\t\t\taddress,\n\t\t\tusername: ensName,\n\t\t\tonDisconnect,\n\t\t\tetherscanUrl\n\t\t}),\n\t\tchildren: /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: \"flex items-center justify-center rounded-sm\",\n\t\t\tchildren: /* @__PURE__ */ jsx(ENSAvatar, {\n\t\t\t\taddress,\n\t\t\t\tavatarUrl,\n\t\t\t\tsize: \"40px\"\n\t\t\t})\n\t\t})\n\t});\n};\n//#endregion\n//#region src/connect/components/sidebar/sidebar-footer.tsx\nconst ConnectSidebarFooter = ({ address, ensName, avatarUrl, className, onLogin, onClickSettings, onDisconnect, onHomeClick, showDebug, onDebugClick, etherscanUrl = \"\", ...props }) => {\n\treturn /* @__PURE__ */ jsxs(SidebarFooter, {\n\t\t...props,\n\t\tclassName: twMerge(\"flex flex-col gap-2 border-t border-gray-300 px-2 py-4\", className),\n\t\tchildren: [\n\t\t\tonHomeClick && /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\"aria-label\": \"Home\",\n\t\t\t\ttype: \"button\",\n\t\t\t\tclassName: \"flex w-full cursor-pointer items-center justify-center outline-none\",\n\t\t\t\tonClick: onHomeClick,\n\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tclassName: \"text-gray-600\",\n\t\t\t\t\tname: \"ConnectSmall\",\n\t\t\t\t\tsize: 24\n\t\t\t\t})\n\t\t\t}),\n\t\t\tshowDebug && onDebugClick && /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\"aria-label\": \"Debug Settings\",\n\t\t\t\ttype: \"button\",\n\t\t\t\tid: \"connect-debug-button\",\n\t\t\t\tclassName: \"mt-3 flex w-full cursor-pointer items-center justify-center outline-none\",\n\t\t\t\tonClick: onDebugClick,\n\t\t\t\tchildren: /* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tclassName: \"text-gray-600\",\n\t\t\t\t\tname: \"Tube\"\n\t\t\t\t})\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"div\", {\n\t\t\t\tclassName: onHomeClick ? \"mt-3\" : \"\",\n\t\t\t\tchildren: address ? /* @__PURE__ */ jsx(SidebarUser, {\n\t\t\t\t\taddress,\n\t\t\t\t\tensName,\n\t\t\t\t\tavatarUrl,\n\t\t\t\t\tonDisconnect,\n\t\t\t\t\tetherscanUrl\n\t\t\t\t}) : /* @__PURE__ */ jsx(SidebarLogin, { onLogin })\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsxs(\"button\", {\n\t\t\t\t\"aria-label\": \"Settings\",\n\t\t\t\ttype: \"button\",\n\t\t\t\tclassName: twMerge(\"mt-3 flex w-full items-center justify-center outline-none\", onClickSettings ? \"cursor-pointer\" : \"cursor-wait\"),\n\t\t\t\tonClick: onClickSettings,\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(Icon, {\n\t\t\t\t\tclassName: \"text-gray-600\",\n\t\t\t\t\tname: \"Settings\"\n\t\t\t\t}), /* @__PURE__ */ jsx(\"span\", {\n\t\t\t\t\tclassName: \"hidden text-sm/6 font-semibold text-gray-800\",\n\t\t\t\t\tchildren: \"Settings\"\n\t\t\t\t})]\n\t\t\t})\n\t\t]\n\t});\n};\n//#endregion\n//#region src/connect/components/sidebar/sidebar-header.tsx\nconst ConnectSidebarHeader = ({ className, children, ...props }) => {\n\tif (!children) return null;\n\treturn /* @__PURE__ */ jsx(SidebarHeader, {\n\t\t...props,\n\t\tclassName: twMerge(\"flex justify-center gap-4 border-b border-gray-300 py-4\", className),\n\t\tchildren\n\t});\n};\n//#endregion\n//#region src/connect/components/sidebar/sidebar.tsx\nconst ConnectSidebar = ({ onClick, address, ensName, avatarUrl, headerContent, onClickSettings, maxWidth = \"304px\", minWidth = \"58px\", onLogin, onDisconnect, etherscanUrl, showDebug, onDebugClick, ...props }) => {\n\treturn /* @__PURE__ */ jsxs(Sidebar, {\n\t\t...props,\n\t\tmaxWidth,\n\t\tminWidth,\n\t\tchildren: [/* @__PURE__ */ jsxs(SidebarPanel, { children: [/* @__PURE__ */ jsx(ConnectSidebarHeader, { children: headerContent }), /* @__PURE__ */ jsx(\"div\", {\n\t\t\tclassName: \"flex flex-col\",\n\t\t\tchildren: props.children\n\t\t})] }), /* @__PURE__ */ jsx(ConnectSidebarFooter, {\n\t\t\taddress,\n\t\t\tensName,\n\t\t\tavatarUrl,\n\t\t\tonClickSettings,\n\t\t\tonLogin,\n\t\t\tonDisconnect,\n\t\t\tetherscanUrl,\n\t\t\tonHomeClick: onClick,\n\t\t\tshowDebug,\n\t\t\tonDebugClick\n\t\t})]\n\t});\n};\n//#endregion\n//#region src/connect/utils/get-folder-status.ts\n/**\n* Retrieves the sync status of a folder based on its path and their children files.\n*\n* @param folderPath - The path of the folder.\n* @param sortedFiles - The sorted list of files.\n* @returns The sync status of the folder.\n*/\nconst getFolderStatus = (folderPath, sortedFiles) => {\n\tfor (const file of sortedFiles) if (file.path.startsWith(folderPath)) return file.status || \"SUCCESS\";\n\treturn \"SUCCESS\";\n};\n/**\n* Sorts an array of files by their status.\n* The order priority is:\n* - ERROR\n* - CONFLICT\n* - SYNCING\n* - MISSING\n* - SUCCESS\n*\n* @param files - The array of files to be sorted.\n* @returns The sorted array of files.\n*/\nconst sortFilesByStatus = (files) => {\n\treturn files.sort((a, b) => {\n\t\tconst statusOrder = [\n\t\t\t\"ERROR\",\n\t\t\t\"CONFLICT\",\n\t\t\t\"SYNCING\",\n\t\t\t\"MISSING\",\n\t\t\t\"SYNCING\",\n\t\t\t\"SUCCESS\"\n\t\t];\n\t\treturn statusOrder.indexOf(a.status || \"SUCCESS\") - statusOrder.indexOf(b.status || \"SUCCESS\");\n\t});\n};\n/**\n* Removes files with a status of 'SUCCESS' from the given array of FileStatus objects.\n* @param files - An array of FileStatus objects.\n* @returns A new array containing only the FileStatus objects with a status other than 'SUCCESS'.\n*/\nconst removeSuccessFiles = (files) => {\n\treturn files.filter((file) => file.status !== \"SUCCESS\");\n};\n//#endregion\nexport { About, AccountPopover, AddDriveModal, AddLocalDriveForm, AddLocalDriveModal, AddRemoteDriveForm, AddRemoteDriveModal, AnimatedLoader, Breadcrumb, Breadcrumbs, CONFLICT, ChannelInspector, ClearStorageSettingsRow, Combobox, ConnectConfirmationModal, ConnectDeleteDriveModal, ConnectDeleteItemModal, ConnectDropdownMenu, ConnectReplaceDuplicateModal, ConnectSearchBar, ConnectSelect, ConnectSidebar, ConnectSidebarFooter, ConnectSidebarHeader, ConnectTooltip, ConnectTooltipProvider, ConnectUpgradeDriveModal, ConnectionStateBadge, CookieBanner, CreateDocumentModal, DBExplorer, DangerZone, DebugInspector, DefaultEditor, DefaultEditorLoader, DefaultEditorSelect, DependencyVersions, Disclosure, Divider, DocumentStateViewer, DocumentTimeline, DocumentToolbar, DriveSettingsModal, DropZone, DropZoneWrapper, ENSAvatar, ERROR, EditorActionButtons, EditorUndoRedoButtons, FileItem, FolderItem, Footer, FooterLink, FormInput, FormattedJsonViewer, HomeBackgroundImage, HomeScreen, HomeScreenAddDriveItem, HomeScreenItem, INITIAL_SYNC, InspectorModal, IntegrityInspector, LoadingScreen, MISSING, NodeInput, ObjectInspectorModal, PackageInstallModal, PackageManager, PackageManagerInput, PackageManagerList, PackageManagerListItem, ProcessorsInspector, QueueInspector, ReadRequiredModal, RemotesInspector, RevisionHistory, SUCCESS, SYNCING, SettingsModal, SettingsModalOld, SettingsRow, SidebarAddDriveItem, SidebarItem, SidebarLogin, SidebarUser, SyncStatusIcon, TabContent, Tabs, Toggle, ToolbarButton, ToolbarCloseButton, ToolbarContainer, ToolbarControlsContainer, ToolbarDownloadButton, ToolbarHistoryButton, ToolbarInput, ToolbarName, ToolbarRedoButton, ToolbarSwitchboardButton, ToolbarUndoButton, UploadFileItem, UploadFileList, UploadFileListContainer, debugNodeOptions, debugNodeOptionsMap, defaultDriveOptions, defaultNodeOptions, fileNodeDropdownOptions, folderNodeDropdownOptions, formatEthAddress, getFolderStatus, locationInfoByLocation, nodeOptions, normalNodeOptions, removeSuccessFiles, sharingTypeOptions, sortFilesByStatus, syncStatuses, useEns, verifyPackageJsonFields };\n\n//# sourceMappingURL=index.js.map"],"x_google_ignoreList":[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98],"mappings":"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CH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,IAAI;CACJ,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,IAAI;CACJ,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,IAAI;CACJ,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CA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"}
|