diff --git a/surfsense_backend/app/observability/metrics.py b/surfsense_backend/app/observability/metrics.py index fa66a9636..5cd70dd26 100644 --- a/surfsense_backend/app/observability/metrics.py +++ b/surfsense_backend/app/observability/metrics.py @@ -543,7 +543,7 @@ def record_kb_search_duration( _record( _kb_search_duration(), duration_ms, - {"search_space.id": workspace_id, "search.surface": surface}, + {"workspace.id": workspace_id, "search.surface": surface}, ) diff --git a/surfsense_backend/app/observability/otel.py b/surfsense_backend/app/observability/otel.py index c2ec951dd..7752c2673 100644 --- a/surfsense_backend/app/observability/otel.py +++ b/surfsense_backend/app/observability/otel.py @@ -261,7 +261,7 @@ def kb_search_span( """Span around knowledge-base search routines.""" attrs: dict[str, Any] = {} if workspace_id is not None: - attrs["search_space.id"] = int(workspace_id) + attrs["workspace.id"] = int(workspace_id) if query_chars is not None: attrs["query.chars"] = int(query_chars) if extra: @@ -303,7 +303,7 @@ def chat_request_span( if chat_id is not None: attrs["chat.id"] = int(chat_id) if workspace_id is not None: - attrs["search_space.id"] = int(workspace_id) + attrs["workspace.id"] = int(workspace_id) if flow: attrs["chat.flow"] = flow if request_id: diff --git a/surfsense_browser_extension/background/messages/savedata.ts b/surfsense_browser_extension/background/messages/savedata.ts index 4bdca07fd..065b4d951 100644 --- a/surfsense_browser_extension/background/messages/savedata.ts +++ b/surfsense_browser_extension/background/messages/savedata.ts @@ -112,12 +112,12 @@ const handler: PlasmoMessaging.MessageHandler = async (req, res) => { })); const token = await storage.get("token"); - const search_space_id = parseInt(await storage.get("search_space_id"), 10); + const workspace_id = parseInt(await storage.get("workspace_id"), 10); const toSend = { document_type: "EXTENSION", content: content, - search_space_id: search_space_id, + workspace_id: workspace_id, }; console.log("toSend", toSend); diff --git a/surfsense_browser_extension/background/messages/savesnapshot.ts b/surfsense_browser_extension/background/messages/savesnapshot.ts index 8928e1b59..7bf0c0c84 100644 --- a/surfsense_browser_extension/background/messages/savesnapshot.ts +++ b/surfsense_browser_extension/background/messages/savesnapshot.ts @@ -106,12 +106,12 @@ const handler: PlasmoMessaging.MessageHandler = async (req, res) => { })); const token = await storage.get("token"); - const search_space_id = parseInt(await storage.get("search_space_id"), 10); + const workspace_id = parseInt(await storage.get("workspace_id"), 10); const toSend = { document_type: "EXTENSION", content: content, - search_space_id: search_space_id, + workspace_id: workspace_id, }; const requestOptions = { diff --git a/surfsense_browser_extension/pnpm-workspace.yaml b/surfsense_browser_extension/pnpm-workspace.yaml new file mode 100644 index 000000000..23a9a8e9a --- /dev/null +++ b/surfsense_browser_extension/pnpm-workspace.yaml @@ -0,0 +1,7 @@ +allowBuilds: + '@parcel/watcher': set this to true or false + '@swc/core': set this to true or false + esbuild: set this to true or false + lmdb: set this to true or false + msgpackr-extract: set this to true or false + sharp: set this to true or false diff --git a/surfsense_browser_extension/routes/pages/HomePage.tsx b/surfsense_browser_extension/routes/pages/HomePage.tsx index 9d8787d29..ab2f6be42 100644 --- a/surfsense_browser_extension/routes/pages/HomePage.tsx +++ b/surfsense_browser_extension/routes/pages/HomePage.tsx @@ -33,6 +33,20 @@ import { getRenderedHtml } from "~utils/commons"; import type { WebHistory } from "~utils/interfaces"; import Loading from "./Loading"; +// One-time migration: legacy persisted keys were `search_space` / `search_space_id`. +// Copy them to the new `workspace` / `workspace_id` keys on first read so the +// user's selected workspace survives the rename. +async function migrateLegacyWorkspaceKeys(storage: Storage): Promise { + const legacyName = await storage.get("search_space"); + if (legacyName !== undefined && (await storage.get("workspace")) === undefined) { + await storage.set("workspace", legacyName); + } + const legacyId = await storage.get("search_space_id"); + if (legacyId !== undefined && (await storage.get("workspace_id")) === undefined) { + await storage.set("workspace_id", legacyId); + } +} + const HomePage = () => { const { toast } = useToast(); const navigation = useNavigate(); @@ -40,11 +54,11 @@ const HomePage = () => { const [loading, setLoading] = useState(true); const [open, setOpen] = React.useState(false); const [value, setValue] = React.useState(""); - const [searchspaces, setSearchSpaces] = useState([]); + const [workspaces, setWorkspaces] = useState([]); const [isSaving, setIsSaving] = useState(false); useEffect(() => { - const checkSearchSpaces = async () => { + const checkWorkspaces = async () => { const storage = new Storage({ area: "local" }); const token = await storage.get("token"); @@ -55,7 +69,7 @@ const HomePage = () => { } try { - const response = await fetch(await buildBackendUrl("/api/v1/searchspaces"), { + const response = await fetch(await buildBackendUrl("/api/v1/workspaces"), { headers: { Authorization: `Bearer ${token}`, } @@ -66,7 +80,7 @@ const HomePage = () => { } else { const res = await response.json(); console.log(res); - setSearchSpaces(res); + setWorkspaces(res); } } catch (error) { await storage.remove("token"); @@ -77,7 +91,7 @@ const HomePage = () => { } }; - checkSearchSpaces(); + checkWorkspaces(); }, []); useEffect(() => { @@ -98,10 +112,11 @@ const HomePage = () => { }); const storage = new Storage({ area: "local" }); - const searchspace = await storage.get("search_space"); + await migrateLegacyWorkspaceKeys(storage); + const workspace = await storage.get("workspace"); - if (searchspace) { - setValue(searchspace); + if (workspace) { + setValue(workspace); } await storage.set("showShadowDom", true); @@ -262,17 +277,17 @@ const HomePage = () => { const saveDatamessage = async () => { if (value === "") { toast({ - title: "Select a SearchSpace !", + title: "Select a Workspace !", }); return; } const storage = new Storage({ area: "local" }); - const search_space_id = await storage.get("search_space_id"); + const workspace_id = await storage.get("workspace_id"); - if (!search_space_id) { + if (!workspace_id) { toast({ - title: "Invalid SearchSpace selected!", + title: "Invalid Workspace selected!", variant: "destructive", }); return; @@ -319,15 +334,15 @@ const HomePage = () => { const storage = new Storage({ area: "local" }); await storage.remove("token"); await storage.remove("showShadowDom"); - await storage.remove("search_space"); - await storage.remove("search_space_id"); + await storage.remove("workspace"); + await storage.remove("workspace_id"); navigation("/login"); } if (loading) { return ; } else { - return searchspaces.length === 0 ? ( + return workspaces.length === 0 ? (
@@ -337,7 +352,7 @@ const HomePage = () => {

SurfSense

-

Please create a Search Space to continue

+

Please create a Workspace to continue

@@ -390,7 +405,7 @@ const HomePage = () => {
- + @@ -411,23 +426,23 @@ const HomePage = () => { className="border-gray-700 bg-gray-900 text-gray-200" /> - No search spaces found. + No workspaces found. - {searchspaces.map((space) => ( + {workspaces.map((space) => ( { const storage = new Storage({ area: "local" }); if (currentValue === value) { - await storage.set("search_space", ""); - await storage.set("search_space_id", 0); + await storage.set("workspace", ""); + await storage.set("workspace_id", 0); } else { - const selectedSpace = searchspaces.find( + const selectedSpace = workspaces.find( (space) => space.name === currentValue ); - await storage.set("search_space", currentValue); - await storage.set("search_space_id", selectedSpace.id); + await storage.set("workspace", currentValue); + await storage.set("workspace_id", selectedSpace.id); } setValue(currentValue === value ? "" : currentValue); setOpen(false); diff --git a/surfsense_browser_extension/tsconfig.tsbuildinfo b/surfsense_browser_extension/tsconfig.tsbuildinfo new file mode 100644 index 000000000..85318fb9e --- /dev/null +++ b/surfsense_browser_extension/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.object.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.string.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.array.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.collection.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.promise.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.decorators.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.iterator.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.error.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../surfsense_web/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/.pnpm/@types+react@18.2.48/node_modules/@types/react/global.d.ts","./node_modules/.pnpm/csstype@3.1.3/node_modules/csstype/index.d.ts","./node_modules/.pnpm/@types+prop-types@15.7.12/node_modules/@types/prop-types/index.d.ts","./node_modules/.pnpm/@types+react@18.2.48/node_modules/@types/react/index.d.ts","./node_modules/.pnpm/plasmo@0.90.5_@swc+core@1.7.14_@swc+helpers@0.5.12__@swc+helpers@0.5.12_@types+node@20._d660f477c46523e758ec011d637c233c/node_modules/plasmo/templates/plasmo.d.ts","./node_modules/.pnpm/@types+react-dom@18.2.18/node_modules/@types/react-dom/client.d.ts","./node_modules/.pnpm/plasmo@0.90.5_@swc+core@1.7.14_@swc+helpers@0.5.12__@swc+helpers@0.5.12_@types+node@20._d660f477c46523e758ec011d637c233c/node_modules/plasmo/dist/type.d.ts","./content.ts","./node_modules/.pnpm/@plasmohq+storage@1.11.0_react@18.2.0/node_modules/@plasmohq/storage/dist/index.d.ts","./utils/interfaces.ts","./utils/commons.ts","./background/index.ts","./node_modules/.pnpm/@plasmohq+messaging@0.6.2_react@18.2.0/node_modules/@plasmohq/messaging/dist/types-a2e5594b.d.ts","./node_modules/.pnpm/@plasmohq+messaging@0.6.2_react@18.2.0/node_modules/@plasmohq/messaging/dist/index.d.ts","./utils/backend-url.ts","./background/messages/savedata.ts","./node_modules/.pnpm/dom-to-semantic-markdown@1.2.11/node_modules/dom-to-semantic-markdown/dist/node/types/markdowntypes.d.ts","./node_modules/.pnpm/dom-to-semantic-markdown@1.2.11/node_modules/dom-to-semantic-markdown/dist/node/core/htmltomarkdownast.d.ts","./node_modules/.pnpm/dom-to-semantic-markdown@1.2.11/node_modules/dom-to-semantic-markdown/dist/node/core/markdownasttostring.d.ts","./node_modules/.pnpm/dom-to-semantic-markdown@1.2.11/node_modules/dom-to-semantic-markdown/dist/node/core/domutils.d.ts","./node_modules/.pnpm/dom-to-semantic-markdown@1.2.11/node_modules/dom-to-semantic-markdown/dist/node/core/urlutils.d.ts","./node_modules/.pnpm/dom-to-semantic-markdown@1.2.11/node_modules/dom-to-semantic-markdown/dist/node/index.d.ts","./background/messages/savesnapshot.ts","./node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/clsx.d.ts","./node_modules/.pnpm/tailwind-merge@2.5.4/node_modules/tailwind-merge/dist/types.d.ts","./lib/utils.ts","./node_modules/.pnpm/@remix-run+router@1.19.1/node_modules/@remix-run/router/dist/history.d.ts","./node_modules/.pnpm/@remix-run+router@1.19.1/node_modules/@remix-run/router/dist/utils.d.ts","./node_modules/.pnpm/@remix-run+router@1.19.1/node_modules/@remix-run/router/dist/router.d.ts","./node_modules/.pnpm/@remix-run+router@1.19.1/node_modules/@remix-run/router/dist/index.d.ts","./node_modules/.pnpm/react-router@6.26.1_react@18.2.0/node_modules/react-router/dist/lib/context.d.ts","./node_modules/.pnpm/react-router@6.26.1_react@18.2.0/node_modules/react-router/dist/lib/components.d.ts","./node_modules/.pnpm/react-router@6.26.1_react@18.2.0/node_modules/react-router/dist/lib/hooks.d.ts","./node_modules/.pnpm/react-router@6.26.1_react@18.2.0/node_modules/react-router/dist/index.d.ts","./node_modules/.pnpm/react-router-dom@6.26.1_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/react-router-dom/dist/dom.d.ts","./node_modules/.pnpm/react-router-dom@6.26.1_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/react-router-dom/dist/index.d.ts","./node_modules/.pnpm/@radix-ui+react-primitive@2.0.0_@types+react-dom@18.2.18_@types+react@18.2.48_react-dom_554662aa8056d3d6160ccb0686da9bae/node_modules/@radix-ui/react-primitive/dist/index.d.ts","./node_modules/.pnpm/@radix-ui+react-dismissable-layer@1.1.1_@types+react-dom@18.2.18_@types+react@18.2.48_r_ae4c82b13c079e215addea70a4e3d8f4/node_modules/@radix-ui/react-dismissable-layer/dist/index.d.ts","./node_modules/.pnpm/@radix-ui+react-toast@1.2.2_@types+react-dom@18.2.18_@types+react@18.2.48_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@radix-ui/react-toast/dist/index.d.ts","./node_modules/.pnpm/clsx@2.0.0/node_modules/clsx/clsx.d.ts","./node_modules/.pnpm/class-variance-authority@0.7.0/node_modules/class-variance-authority/dist/types.d.ts","./node_modules/.pnpm/class-variance-authority@0.7.0/node_modules/class-variance-authority/dist/index.d.ts","./node_modules/.pnpm/lucide-react@0.454.0_react@18.2.0/node_modules/lucide-react/dist/lucide-react.d.ts","./routes/ui/toast.tsx","./routes/ui/use-toast.tsx","./routes/ui/toaster.tsx","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/types.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/accessibilityicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/activitylogicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/alignbaselineicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/alignbottomicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/aligncenterhorizontallyicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/aligncenterverticallyicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/alignlefticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/alignrighticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/aligntopicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/allsidesicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/angleicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/archiveicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/arrowbottomlefticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/arrowbottomrighticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/arrowdownicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/arrowlefticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/arrowrighticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/arrowtoplefticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/arrowtoprighticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/arrowupicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/aspectratioicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/avataricon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/backpackicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/badgeicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/barcharticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/bellicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/blendingmodeicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/bookmarkicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/bookmarkfilledicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/borderallicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/borderbottomicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/borderdashedicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/borderdottedicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/borderlefticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/bordernoneicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/borderrighticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/bordersolidicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/borderspliticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/borderstyleicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/bordertopicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/borderwidthicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/boxicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/boxmodelicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/buttonicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/calendaricon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/cameraicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/cardstackicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/cardstackminusicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/cardstackplusicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/caretdownicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/caretlefticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/caretrighticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/caretsorticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/caretupicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/chatbubbleicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/checkicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/checkcircledicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/checkboxicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/chevrondownicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/chevronlefticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/chevronrighticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/chevronupicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/circleicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/circlebackslashicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/clipboardicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/clipboardcopyicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/clockicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/codeicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/codesandboxlogoicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/colorwheelicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/columnspacingicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/columnsicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/commiticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/component1icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/component2icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/componentbooleanicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/componentinstanceicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/componentnoneicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/componentplaceholdericon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/containericon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/cookieicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/copyicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/cornerbottomlefticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/cornerbottomrighticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/cornertoplefticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/cornertoprighticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/cornersicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/countdowntimericon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/counterclockwiseclockicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/cropicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/cross1icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/cross2icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/crosscircledicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/crosshair1icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/crosshair2icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/crumpledpapericon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/cubeicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/cursorarrowicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/cursortexticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/dashicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/dashboardicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/desktopicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/dimensionsicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/discicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/discordlogoicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/dividerhorizontalicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/dividerverticalicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/doticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/dotfilledicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/dotshorizontalicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/dotsverticalicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/doublearrowdownicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/doublearrowlefticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/doublearrowrighticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/doublearrowupicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/downloadicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/draghandledots1icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/draghandledots2icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/draghandlehorizontalicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/draghandleverticalicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/drawingpinicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/drawingpinfilledicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/dropdownmenuicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/entericon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/enterfullscreenicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/envelopeclosedicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/envelopeopenicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/erasericon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/exclamationtriangleicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/exiticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/exitfullscreenicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/externallinkicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/eyeclosedicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/eyenoneicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/eyeopenicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/faceicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/figmalogoicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/fileicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/fileminusicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/fileplusicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/filetexticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/fontboldicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/fontfamilyicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/fontitalicicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/fontromanicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/fontsizeicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/fontstyleicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/frameicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/framerlogoicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/gearicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/githublogoicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/globeicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/gridicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/groupicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/half1icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/half2icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/hamburgermenuicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/handicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/headingicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/hearticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/heartfilledicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/heighticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/hobbyknifeicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/homeicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/iconjarlogoicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/idcardicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/imageicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/infocircledicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/inputicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/instagramlogoicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/keyboardicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/laptimericon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/laptopicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/layersicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/layouticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/lettercasecapitalizeicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/lettercaselowercaseicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/lettercasetoggleicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/lettercaseuppercaseicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/letterspacingicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/lightningbolticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/lineheighticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/link1icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/link2icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/linkbreak1icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/linkbreak2icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/linknone1icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/linknone2icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/linkedinlogoicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/listbulleticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/lockclosedicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/lockopen1icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/lockopen2icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/loopicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/magicwandicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/magnifyingglassicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/marginicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/maskofficon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/maskonicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/minusicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/minuscircledicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/mixicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/mixerhorizontalicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/mixerverticalicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/mobileicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/modulzlogoicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/moonicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/moveicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/notionlogoicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/opacityicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/openinnewwindowicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/overlineicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/paddingicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/paperplaneicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/pauseicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/pencil1icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/pencil2icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/personicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/piecharticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/pilcrowicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/pinbottomicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/pinlefticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/pinrighticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/pintopicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/playicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/plusicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/pluscircledicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/questionmarkicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/questionmarkcircledicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/quoteicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/radiobuttonicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/readericon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/reloadicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/reseticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/resumeicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/rocketicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/rotatecounterclockwiseicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/rowspacingicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/rowsicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/rulerhorizontalicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/rulersquareicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/scissorsicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/sectionicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/sewingpinicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/sewingpinfilledicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/shadowicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/shadowinnericon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/shadownoneicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/shadowoutericon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/share1icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/share2icon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/shuffleicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/sizeicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/sketchlogoicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/slashicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/slidericon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/spacebetweenhorizontallyicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/spacebetweenverticallyicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/spaceevenlyhorizontallyicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/spaceevenlyverticallyicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/speakerloudicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/speakermoderateicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/speakerofficon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/speakerquieticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/squareicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/stackicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/staricon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/starfilledicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/stitcheslogoicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/stopicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/stopwatchicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/stretchhorizontallyicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/stretchverticallyicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/strikethroughicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/sunicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/switchicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/symbolicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/tableicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/targeticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/texticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/textalignbottomicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/textaligncentericon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/textalignjustifyicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/textalignlefticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/textalignmiddleicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/textalignrighticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/textaligntopicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/textnoneicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/thickarrowdownicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/thickarrowlefticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/thickarrowrighticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/thickarrowupicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/timericon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/tokensicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/tracknexticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/trackpreviousicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/transformicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/transparencygridicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/trashicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/triangledownicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/trianglelefticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/trianglerighticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/triangleupicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/twitterlogoicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/underlineicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/updateicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/uploadicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/valueicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/valuenoneicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/vercellogoicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/videoicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/viewgridicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/viewhorizontalicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/viewnoneicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/viewverticalicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/widthicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/zoominicon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/zoomouticon.d.ts","./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.2.0/node_modules/@radix-ui/react-icons/dist/index.d.ts","./node_modules/.pnpm/@types+react@18.2.48/node_modules/@types/react/jsx-runtime.d.ts","./node_modules/.pnpm/@radix-ui+react-slot@1.1.0_@types+react@18.2.48_react@18.2.0/node_modules/@radix-ui/react-slot/dist/index.d.ts","./routes/ui/button.tsx","./node_modules/.pnpm/@radix-ui+react-focus-scope@1.1.0_@types+react-dom@18.2.18_@types+react@18.2.48_react-d_9777f23c60de13e004445273c5cb2434/node_modules/@radix-ui/react-focus-scope/dist/index.d.ts","./node_modules/.pnpm/@radix-ui+react-portal@1.1.2_@types+react-dom@18.2.18_@types+react@18.2.48_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@radix-ui/react-portal/dist/index.d.ts","./node_modules/.pnpm/@radix-ui+react-dialog@1.1.2_@types+react-dom@18.2.18_@types+react@18.2.48_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@radix-ui/react-dialog/dist/index.d.ts","./routes/ui/dialog.tsx","./node_modules/.pnpm/@radix-ui+react-primitive@2.1.3_@types+react-dom@18.2.18_@types+react@18.2.48_react-dom_e2daec1b538e67f798adbbf1ab062a22/node_modules/@radix-ui/react-primitive/dist/index.d.ts","./node_modules/.pnpm/@radix-ui+react-label@2.1.7_@types+react-dom@18.2.18_@types+react@18.2.48_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@radix-ui/react-label/dist/index.d.ts","./routes/ui/label.tsx","./routes/ui/connection-settings-button.tsx","./routes/pages/apikeyform.tsx","./node_modules/.pnpm/cmdk@1.0.3_@types+react-dom@18.2.18_@types+react@18.2.48_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/cmdk/dist/index.d.ts","./routes/ui/command.tsx","./node_modules/.pnpm/@radix-ui+react-arrow@1.1.0_@types+react-dom@18.2.18_@types+react@18.2.48_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@radix-ui/react-arrow/dist/index.d.ts","./node_modules/.pnpm/@radix-ui+rect@1.1.0/node_modules/@radix-ui/rect/dist/index.d.ts","./node_modules/.pnpm/@radix-ui+react-popper@1.2.0_@types+react-dom@18.2.18_@types+react@18.2.48_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@radix-ui/react-popper/dist/index.d.ts","./node_modules/.pnpm/@radix-ui+react-popover@1.1.2_@types+react-dom@18.2.18_@types+react@18.2.48_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@radix-ui/react-popover/dist/index.d.ts","./routes/ui/popover.tsx","./routes/pages/loading.tsx","./routes/pages/homepage.tsx","./routes/index.tsx","./popup.tsx","./node_modules/.pnpm/@types+har-format@1.2.15/node_modules/@types/har-format/index.d.ts","./node_modules/.pnpm/@types+chrome@0.0.258/node_modules/@types/chrome/har-format/index.d.ts","./node_modules/.pnpm/@types+chrome@0.0.258/node_modules/@types/chrome/chrome-cast/index.d.ts","./node_modules/.pnpm/@types+filewriter@0.0.33/node_modules/@types/filewriter/index.d.ts","./node_modules/.pnpm/@types+filesystem@0.0.36/node_modules/@types/filesystem/index.d.ts","./node_modules/.pnpm/@types+chrome@0.0.258/node_modules/@types/chrome/index.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/assert.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/assert/strict.d.ts","./node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/header.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/readable.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/file.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/fetch.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/formdata.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/connector.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/client.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/errors.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/dispatcher.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/global-dispatcher.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/global-origin.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/pool-stats.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/pool.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/handlers.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/balanced-pool.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/agent.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/mock-interceptor.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/mock-agent.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/mock-client.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/mock-pool.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/mock-errors.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/proxy-agent.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/api.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/cookies.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/patch.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/filereader.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/websocket.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/content-type.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/cache.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/interceptors.d.ts","./node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/index.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/globals.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/async_hooks.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/buffer.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/child_process.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/cluster.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/console.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/constants.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/crypto.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/dgram.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/dns.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/dns/promises.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/domain.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/dom-events.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/events.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/fs.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/fs/promises.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/http.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/http2.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/https.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/inspector.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/module.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/net.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/os.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/path.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/perf_hooks.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/process.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/punycode.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/querystring.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/readline.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/readline/promises.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/repl.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/stream.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/stream/promises.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/stream/consumers.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/stream/web.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/string_decoder.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/test.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/timers.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/timers/promises.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/tls.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/trace_events.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/tty.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/url.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/util.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/v8.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/vm.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/wasi.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/worker_threads.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/zlib.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/globals.global.d.ts","./node_modules/.pnpm/@types+node@20.11.5/node_modules/@types/node/index.d.ts","./node_modules/.pnpm/@types+react-dom@18.2.18/node_modules/@types/react-dom/index.d.ts"],"fileIdsList":[[91,92,93],[91,93,96,97],[91,92,93,96,97,104],[89],[106,107],[95],[86,119],[86,119,120,452,453],[86,129],[130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447],[86],[86,456],[86,119,120,452,453,465],[86,119,463,464],[86,449],[86,119,120],[109,110,111],[109,110],[109],[472],[473,474,476],[475],[478],[514],[515,520,548],[516,527,528,535,545,556],[516,517,527,535],[518,557],[519,520,528,536],[520,545,553],[521,523,527,535],[514,522],[523,524],[527],[525,527],[514,527],[527,528,529,545,556],[527,528,529,542,545,548],[512,515,561],[523,527,530,535,545,556],[527,528,530,531,535,545,553,556],[530,532,545,553,556],[478,479,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563],[527,533],[534,556,561],[523,527,535,545],[536],[537],[514,538],[539,555,561],[540],[541],[527,542,543],[542,544,557,559],[515,527,545,546,547,548],[515,545,547],[545,546],[548],[549],[514,545],[527,551,552],[551,552],[520,535,545,553],[554],[535,555],[515,530,541,556],[520,557],[545,558],[534,559],[560],[515,520,527,529,538,545,556,559,561],[545,562],[83,84,85],[122,123],[122],[86,119,454],[99],[99,100,101,102,103],[86,88],[112],[86,112,116,117],[112,113,114,115],[86,112,113],[86,112],[489,493,556],[489,545,556],[484],[486,489,553,556],[535,553],[564],[484,564],[486,489,535,556],[481,482,485,488,515,527,545,556],[481,487],[485,489,515,548,556,564],[515,564],[505,515,564],[483,484,564],[489],[483,484,485,486,487,488,489,490,491,493,494,495,496,497,498,499,500,501,502,503,504,506,507,508,509,510,511],[489,496,497],[487,489,497,498],[488],[481,484,489],[489,493,497,498],[493],[487,489,492,556],[481,486,487,489,493,496],[515,545],[484,489,505,515,561,564],[118,128,470],[118,460,469],[86,87,91,97,118,448,451,459],[86,87,91,92,93,96,97,104,108,118,125,127,448,451,458,459,462,467,468],[87,448],[86,108,124,450],[86,108,125,454,455,461],[86,97,448,451,455,458],[86,108,125,454],[86,108,457],[86,108,466],[86,108,121,124,125],[126,127],[86,126],[91],[91,92]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd5e7096c7bc02bf70b2cc017fc45ef489cb19bd2f32a71af39ff5787f1b56a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"247a952efd811d780e5630f8cfd76f495196f5fa74f6f0fee39ac8ba4a3c9800","impliedFormat":1},{"version":"e6f3077b1780226627f76085397d10c77a4d851c7154fd4b3f1eb114f4c2e56d","affectsGlobalScope":true,"impliedFormat":1},{"version":"97ae124daa3695481c12e517f1aadb524b12fdb1f09d67f9ecc3328c12271487","affectsGlobalScope":true,"impliedFormat":99},{"version":"c83e65334a9dc08a338f994a34bd70328c626976881d71d6aaa8dc7d66b08d96","impliedFormat":1},{"version":"032a6d45b6d1d730573abb352e355f826f42a412f02f5f37b7183df04c519bf0","impliedFormat":99},"4f83ace641bc115f8346dc57b6b15821a41f0f83ebf82b7ccea3179ae083736a",{"version":"623e835c6beebf5e3350817eea997722da5e2860811b811b331fc42feaceb903","impliedFormat":99},"e2f63ddf0102d5bfd0f3691d678bacd98fd0752b23d19890308c4210b3a5a0a1","8d8528d595e2639b740e4a0b0cf9de23a93ecf39468b707b5dcfc2b5bb4fcfd9","2aabb4e960469b8d854ad33765002f470fdc202cd432812ffb4f0e0196de2cc0",{"version":"197013e03570f313d88acecf2cb444c7bfcbe453149e0f58be04a123386b1e89","impliedFormat":99},{"version":"01e88b933f0e8c8fefa47e910415cded8a1ef4121420cb0fc0cbacf3c933e77f","impliedFormat":99},"35d32d432d95a06a14b7341a8c5fe3392aaf15be4d5f7b720fdaf064636eca75","7c35eee2b4295c21b183a258a1eeaa48b3c0f7a8011eed6c27159a775ad7a9c8",{"version":"4e413cb1023c7371d3a7c54483ef1db0dedeba61ea9241ec84dd38af256cb276","impliedFormat":1},{"version":"df87de0a20d44995d54020ad8826f65e6d9351ae1da427cde3a8e37e1e836084","impliedFormat":1},{"version":"d617f071c8ed193058b01b7b6d563891afd3fa852a03dd6a6fe261a70e241c26","impliedFormat":1},{"version":"978965b7e76bd3b7b825464ba943914513c530812d4760bfb5e394fa76f1dd86","impliedFormat":1},{"version":"ea68cc195306e209d421051a5b344b6b4819661876d9b670f5d4a2f18c95e764","impliedFormat":1},{"version":"61e43dd6b6fbed4605b0f9dc887ce2b32a7bcc327f09246061c182eecdeb5bbf","impliedFormat":1},"6761506c173d972866bf918ccee538e7702ad6f0f126d8c55399cff9ffc01236",{"version":"ef73bcfef9907c8b772a30e5a64a6bd86a5669cba3d210fcdcc6b625e3312459","impliedFormat":1},{"version":"ab90a99fb09a5dd94d80d697b6833b041239843e15ebd634857853240db7e25f","impliedFormat":1},"0fca478853f3fc4310e40ebff727a53da7ec677938f4e3e0d5ecaa62e936a199",{"version":"5af7c35a9c5c4760fd084fedb6ba4c7059ac9598b410093e5312ac10616bf17b","impliedFormat":1},{"version":"18f14a4e6f7e7fa7977ca2479920b375edbd3d9470af09349f1fd5b902948d24","impliedFormat":1},{"version":"386b110097b55a1ad6ee83ce24da8132d74871c32ffd1cc6d8da27fbd937530e","impliedFormat":1},{"version":"3c199753ff81a62b08fc48875cff98776e13b447d2eb79155669f2aa6df2ddda","impliedFormat":1},{"version":"0607c362365f0d2f53fa84d64e9ca3550f3b7e8f1e24d692d8fc5b64d4b7706a","impliedFormat":1},{"version":"86645dd2134c0061c46c9c8959b664e47e897799cfd04b0b3f550956fcaddb26","impliedFormat":1},{"version":"62ea49d20b53246d9b798ae78b60cfd42ff2637ae490ab28cf370b5e64f58080","impliedFormat":1},{"version":"a7be9824c37815e8d0ad066a3a4c1b2c1c4e7176423605ff52943d0fb1bc7c9a","impliedFormat":1},{"version":"0acf888a4886434586cd034594852509e902936e10da93823758c55f23a2a4b5","impliedFormat":1},{"version":"4174cc2d5ba415d241da72122c1693aa46b271846ee12f5b410d5f80a93426d8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea3dc94b0fffe98fdf557e22b26282b039aa8c3cbbf872d0087d982d1a1f496c","impliedFormat":1},{"version":"7ec047b73f621c526468517fea779fec2007dd05baa880989def59126c98ef79","impliedFormat":1},{"version":"11d84eef6662ddfd17c1154a56d9e71d61ae3c541a61e3bc50f875cb5954379f","impliedFormat":1},{"version":"791b7d18616176562896692cdeff84662d2b2ffe3fc33fce2ce338eaa8a8288e","impliedFormat":1},{"version":"571b2640f0cf541dfed72c433706ad1c70fb55ed60763343aa617e150fbb036e","impliedFormat":1},{"version":"6a2372186491f911527a890d92ac12b88dec29f1c0cec7fce93745aba3253fde","impliedFormat":1},{"version":"8512cce0256f2fcad4dc4d72a978ef64fefab78c16a1141b31f2f2eba48823d1","impliedFormat":1},"5ad9aaf78466035e6e5a072d652d63313af7891f16208fcfbf1a596491d34e36","6037515cc66eca2db6b21889465e7df16f0350becab8c162e17715a306cfce15","359ee99d27002dc85a010d08e09326aaa1d3212afae8b75d5495f87d55b70fcc",{"version":"a58825dfef3de2927244c5337ff2845674d1d1a794fb76d37e1378e156302b90","impliedFormat":1},{"version":"1a458765deab35824b11b67f22b1a56e9a882da9f907bfbf9ce0dfaedc11d8fc","impliedFormat":1},{"version":"a48553595da584120091fb7615ed8d3b48aaea4b2a7f5bc5451c1247110be41a","impliedFormat":1},{"version":"ebba1c614e81bf35da8d88a130e7a2924058a9ad140abe79ef4c275d4aa47b0d","impliedFormat":1},{"version":"3f3cfb6d0795d076c62fca9fa90e61e1a1dd9ba1601cd28b30b21af0b989b85a","impliedFormat":1},{"version":"2647c7b6ad90f146f26f3cdf0477eed1cefb1826e8de3f61c584cc727e2e4496","impliedFormat":1},{"version":"891faf74d5399bee0d216314ecf7a0000ba56194ffd16b2b225e4e61706192fb","impliedFormat":1},{"version":"c1227e0b571469c249e7b152e98268b3ccdfd67b5324f55448fad877ba6dbbff","impliedFormat":1},{"version":"230a4cc1df158d6e6e29567bfa2bc88511822a068da08f8761cc4df5d2328dcc","impliedFormat":1},{"version":"c6ee2448a0c52942198242ec9d05251ff5abfb18b26a27970710cf85e3b62e50","impliedFormat":1},{"version":"39525087f91a6f9a246c2d5c947a90d4b80d67efb96e60f0398226827ae9161e","impliedFormat":1},{"version":"1bf429877d50f454b60c081c00b17be4b0e55132517ac322beffe6288b6e7cf6","impliedFormat":1},{"version":"b139b4ed2c853858184aed5798880633c290b680d22aee459b1a7cf9626a540d","impliedFormat":1},{"version":"037a9dab60c22cda0cd6c502a27b2ecfb1ac5199efe5e8c8d939591f32bd73c9","impliedFormat":1},{"version":"a21eaf3dc3388fae4bdd0556eb14c9e737e77b6f1b387d68c3ed01ca05439619","impliedFormat":1},{"version":"60931d8fb8f91afacbb005180092f4f745d2af8b8a9c0957c44c42409ec758e7","impliedFormat":1},{"version":"70e88656db130df927e0c98edcdb4e8beeb2779ac0e650b889ab3a1a3aa71d3d","impliedFormat":1},{"version":"a6473d7b874c3cffc1cb18f5d08dd18ac880b97ec0a651348739ade3b3730272","impliedFormat":1},{"version":"89720b54046b31371a2c18f7c7a35956f1bf497370f4e1b890622078718875b1","impliedFormat":1},{"version":"281637d0a9a4b617138c505610540583676347c856e414121a5552b9e4aeb818","impliedFormat":1},{"version":"87612b346018721fa0ee2c0cb06de4182d86c5c8b55476131612636aac448444","impliedFormat":1},{"version":"c0b2ae1fea13046b9c66df05dd8d36f9b1c9fcea88d822899339183e6ef1b952","impliedFormat":1},{"version":"8c7b41fd103b70c3a65b7ace9f16cd00570b405916d0e3bd63e9986ce91e6156","impliedFormat":1},{"version":"0e51075b769786db5e581e43a64529dca371040256e23d779603a2c8283af7d6","impliedFormat":1},{"version":"54fd7300c6ba1c98cda49b50c215cde3aa5dbae6786eaf05655abf818000954c","impliedFormat":1},{"version":"01a265adad025aa93f619b5521a9cb08b88f3c328b1d3e59c0394a41e5977d43","impliedFormat":1},{"version":"af6082823144bd943323a50c844b3dc0e37099a3a19e7d15c687cd85b3985790","impliedFormat":1},{"version":"241f5b92543efc1557ddb6c27b4941a5e0bb2f4af8dc5dd250d8ee6ca67ad67c","impliedFormat":1},{"version":"55e8db543ceaedfdd244182b3363613143ca19fc9dbc466e6307f687d100e1c8","impliedFormat":1},{"version":"27de37ad829c1672e5d1adf0c6a5be6587cbe405584e9a9a319a4214b795f83a","impliedFormat":1},{"version":"2d39120fb1d7e13f8141fa089543a817a94102bba05b2b9d14b6f33a97de4e0c","impliedFormat":1},{"version":"51c1a42c27ae22f5a2f7a26afcf9aa8e3fd155ba8ecc081c6199a5ce6239b5f4","impliedFormat":1},{"version":"72fb41649e77c743e03740d1fd8e18c824bd859a313a7caeba6ba313a84a79a9","impliedFormat":1},{"version":"6ee51191c0df1ec11db3fbc71c39a7dee2b3e77dcaab974348eaf04b2f22307d","impliedFormat":1},{"version":"b8a996130883aaffdee89e0a3e241d4674a380bde95f8270a8517e118350def7","impliedFormat":1},{"version":"a3dce310d0bd772f93e0303bb364c09fc595cc996b840566e8ef8df7ab0e5360","impliedFormat":1},{"version":"eb9fa21119013a1c7566d2154f6686c468e9675083ef39f211cd537c9560eb53","impliedFormat":1},{"version":"c6b5695ccff3ceab8c7a1fe5c5e1c37667c8e46b6fc9c3c953d53aa17f6e2e59","impliedFormat":1},{"version":"d08d0d4b4a47cc80dbea459bb1830c15ec8d5d7056742ae5ccc16dd4729047d0","impliedFormat":1},{"version":"975c1ef08d7f7d9a2f7bc279508cc47ddfdfe6186c37ac98acbf302cf20e7bb1","impliedFormat":1},{"version":"bd53b46bab84955dc0f83afc10237036facbc7e086125f81f13fd8e02b43a0d5","impliedFormat":1},{"version":"3c68d3e9cd1b250f52d16d5fbbd40a0ccbbe8b2d9dbd117bfd25acc2e1a60ebc","impliedFormat":1},{"version":"88f4763dddd0f685397f1f6e6e486b0297c049196b3d3531c48743e6334ddfcb","impliedFormat":1},{"version":"8f0ab3468882aba7a39acbc1f3b76589a1ef517bfb2ef62e2dd896f25db7fba6","impliedFormat":1},{"version":"407b6b015a9cf880756296a91142e72b3e6810f27f117130992a1138d3256740","impliedFormat":1},{"version":"0bee9708164899b64512c066ba4de189e6decd4527010cc325f550451a32e5ab","impliedFormat":1},{"version":"2472ae6554b4e997ec35ae5ad5f91ab605f4e30b97af860ced3a18ab8651fb89","impliedFormat":1},{"version":"df0e9f64d5facaa59fca31367be5e020e785335679aa088af6df0d63b7c7b3df","impliedFormat":1},{"version":"07ce90ffcac490edb66dfcb3f09f1ffa7415ecf4845f525272b53971c07ad284","impliedFormat":1},{"version":"801a0aa3e78ef62277f712aefb7455a023063f87577df019dde7412d2bc01df9","impliedFormat":1},{"version":"ab457e1e513214ba8d7d13040e404aea11a3e6e547d10a2cbbd926cccd756213","impliedFormat":1},{"version":"d62fbef71a36476326671f182368aed0d77b6577c607e6597d080e05ce49cf9e","impliedFormat":1},{"version":"2a72354cb43930dc8482bd6f623f948d932250c5358ec502a47e7b060ed3bbb6","impliedFormat":1},{"version":"cff4d73049d4fbcd270f6d2b3a6212bf17512722f8a9dfcc7a3ff1b8a8eef1f0","impliedFormat":1},{"version":"f9a7c0d530affbd3a38853818a8c739fbf042a376b7deca9230e65de7b65ee34","impliedFormat":1},{"version":"c024252e3e524fcebaeed916ccb8ede5d487eb8d705c6080dc009df3c87dd066","impliedFormat":1},{"version":"641448b49461f3e6936e82b901a48f2d956a70e75e20c6a688f8303e9604b2ff","impliedFormat":1},{"version":"0d923bfc7b397b8142db7c351ba6f59f118c4fe820c1e4a0b6641ac4b7ab533d","impliedFormat":1},{"version":"13737fae5d9116556c56b3fc01ffae01f31d77748bc419185514568d43aae9be","impliedFormat":1},{"version":"4224758de259543c154b95f11c683da9ac6735e1d53c05ae9a38835425782979","impliedFormat":1},{"version":"2704fd2c7b0e4df05a072202bfcc87b5e60a228853df055f35c5ea71455def95","impliedFormat":1},{"version":"cb52c3b46277570f9eb2ef6d24a9732c94daf83761d9940e10147ebb28fbbb8e","impliedFormat":1},{"version":"1bc305881078821daa054e3cb80272dc7528e0a51c91bf3b5f548d7f1cf13c2b","impliedFormat":1},{"version":"ba53329809c073b86270ebd0423f6e7659418c5bd48160de23f120c32b5ceccc","impliedFormat":1},{"version":"f0a86f692166c5d2b153db200e84bb3d65e0c43deb8f560e33f9f70045821ec9","impliedFormat":1},{"version":"b163773a303feb2cbfc9de37a66ce0a01110f2fb059bc86ea3475399f2c4d888","impliedFormat":1},{"version":"cf781f174469444530756c85b6c9d297af460bf228380ed65a9e5d38b2e8c669","impliedFormat":1},{"version":"cbe1b33356dbcf9f0e706d170f3edf9896a2abc9bc1be12a28440bdbb48f16b1","impliedFormat":1},{"version":"d8498ad8a1aa7416b1ebfec256149f369c4642b48eca37cd1ea85229b0ca00d6","impliedFormat":1},{"version":"d054294baaab34083b56c038027919d470b5c5b26c639720a50b1814d18c5ee4","impliedFormat":1},{"version":"4532f2906ba87ae0c4a63f572e8180a78fd612da56f54d6d20c2506324158c08","impliedFormat":1},{"version":"878bf2fc1bbed99db0c0aa2f1200af4f2a77913a9ba9aafe80b3d75fd2de6ccc","impliedFormat":1},{"version":"039d6e764bb46e433c29c86be0542755035fc7a93aa2e1d230767dd54d7307c2","impliedFormat":1},{"version":"f80195273b09618979ad43009ca9ad7d01461cce7f000dc5b7516080e1bca959","impliedFormat":1},{"version":"16a7f250b6db202acc93d9f1402f1049f0b3b1b94135b4f65c7a7b770a030083","impliedFormat":1},{"version":"d15e9aaeef9ff4e4f8887060c0f0430b7d4767deafb422b7e474d3a61be541b9","impliedFormat":1},{"version":"777ddacdcb4fb6c3e423d3f020419ae3460b283fc5fa65c894a62dff367f9ad2","impliedFormat":1},{"version":"9a02117e0da8889421c322a2650711788622c28b69ed6d70893824a1183a45a8","impliedFormat":1},{"version":"9e30d7ef1a67ddb4b3f304b5ee2873f8e39ed22e409e1b6374819348c1e06dfa","impliedFormat":1},{"version":"ddeb300b9cf256fb7f11e54ce409f6b862681c96cc240360ab180f2f094c038b","impliedFormat":1},{"version":"0dbdd4be29dfc4f317711269757792ccde60140386721bee714d3710f3fbbd66","impliedFormat":1},{"version":"1f92e3e35de7c7ddb5420320a5f4be7c71f5ce481c393b9a6316c0f3aaa8b5e4","impliedFormat":1},{"version":"b721dc785a4d747a8dabc82962b07e25080e9b194ba945f6ff401782e81d1cef","impliedFormat":1},{"version":"f88b42ae60eb60621eec477610a8f457930af3cb83f0bebc5b6ece0a8cc17126","impliedFormat":1},{"version":"97c89e7e4e301d6db3e35e33d541b8ab9751523a0def016d5d7375a632465346","impliedFormat":1},{"version":"29ab360e8b7560cf55b6fb67d0ed81aae9f787427cf2887378fdecf386887e07","impliedFormat":1},{"version":"009bfb8cd24c1a1d5170ba1c1ccfa946c5082d929d1994dcf80b9ebebe6be026","impliedFormat":1},{"version":"654ee5d98b93d5d1a5d9ad4f0571de66c37367e2d86bae3513ea8befb9ed3cac","impliedFormat":1},{"version":"83c14b1b0b4e3d42e440c6da39065ab0050f1556788dfd241643430d9d870cf3","impliedFormat":1},{"version":"d96dfcef148bd4b06fa3c765c24cb07ff20a264e7f208ec4c5a9cbb3f028a346","impliedFormat":1},{"version":"f65550bf87be517c3178ae5372f91f9165aa2f7fc8d05a833e56edc588331bb0","impliedFormat":1},{"version":"9f4031322535a054dcdd801bc39e2ed1cdeef567f83631af473a4994717358e1","impliedFormat":1},{"version":"e6ef5df7f413a8ede8b53f351aac7138908253d8497a6f3150df49270b1e7831","impliedFormat":1},{"version":"b5b3104513449d4937a542fb56ba0c1eb470713ec351922e7c42ac695618e6a4","impliedFormat":1},{"version":"2b117d7401af4b064388acbb26a745c707cbe3420a599dc55f5f8e0fd8dd5baa","impliedFormat":1},{"version":"7d768eb1b419748eec264eff74b384d3c71063c967ac04c55303c9acc0a6c5dd","impliedFormat":1},{"version":"2f1bf6397cecf50211d082f338f3885d290fb838576f71ed4f265e8c698317f9","impliedFormat":1},{"version":"54f0d5e59a56e6ba1f345896b2b79acf897dfbd5736cbd327d88aafbef26ac28","impliedFormat":1},{"version":"760f3a50c7a9a1bc41e514a3282fe88c667fbca83ce5255d89da7a7ffb573b18","impliedFormat":1},{"version":"e966c134cdad68fb5126af8065a5d6608255ed0e9a008b63cf2509940c13660c","impliedFormat":1},{"version":"64a39a5d4bcbe5c8d9e5d32d7eb22dd35ae12cd89542ecb76567334306070f73","impliedFormat":1},{"version":"c1cc0ffa5bca057cc50256964882f462f714e5a76b86d9e23eb9ff1dfa14768d","impliedFormat":1},{"version":"08ab3ecce59aceee88b0c88eb8f4f8f6931f0cfd32b8ad0e163ef30f46e35283","impliedFormat":1},{"version":"0736d054796bb2215f457464811691bf994c0244498f1bb3119c7f4a73c2f99a","impliedFormat":1},{"version":"23bc9533664545d3ba2681eb0816b3f57e6ed2f8dce2e43e8f36745eafd984d4","impliedFormat":1},{"version":"689cbcf3764917b0a1392c94e26dd7ac7b467d84dc6206e3d71a66a4094bf080","impliedFormat":1},{"version":"a9f4de411d2edff59e85dd16cde3d382c3c490cbde0a984bf15533cfed6a8539","impliedFormat":1},{"version":"e30c1cf178412030c123b16dbbee1d59c312678593a0b3622c9f6d487c7e08ba","impliedFormat":1},{"version":"837033f34e1d4b56eab73998c5a0b64ee97db7f6ee9203c649e4cd17572614d8","impliedFormat":1},{"version":"cc8d033897f386df54c65c97c8bb23cfb6912954aa8128bff472d6f99352bb80","impliedFormat":1},{"version":"ca5820f82654abe3a72170fb04bbbb65bb492c397ecce8df3be87155b4a35852","impliedFormat":1},{"version":"9badb725e63229b86fa35d822846af78321a84de4a363da4fe6b5a3262fa31f2","impliedFormat":1},{"version":"f8e96a237b01a2b696b5b31172339d50c77bef996b225e8be043478a3f4a9be5","impliedFormat":1},{"version":"7d048c0fbdb740ae3fa64225653304fdb8d8bb7d905facf14f62e72f3e0ba21a","impliedFormat":1},{"version":"c59b8fb44e6ad7dc3e80359b43821026730a82d98856b690506ba39b5b03789b","impliedFormat":1},{"version":"bd86b749fb17c6596803ace4cae1b6474d820fd680c157e66d884e7c43ef1b24","impliedFormat":1},{"version":"879ba0ae1e59ec935b82af4f3f5ca62cbddecb3eb750c7f5ab28180d3180ec86","impliedFormat":1},{"version":"14fb829e7830df3e326af086bb665fd8dc383b1da2cde92e8ef67b6c49b13980","impliedFormat":1},{"version":"ec14ef5e67a6522f967a17eeedb0b8214c17b5ae3214f1434fcfa0ea66e25756","impliedFormat":1},{"version":"b38474dee55446b3b65ea107bc05ea15b5b5ca3a5fa534371daed44610181303","impliedFormat":1},{"version":"511db7e798d39b067ea149b0025ad2198cfe13ce284a789ef87f0a629942d52f","impliedFormat":1},{"version":"0e50ecb8433db4570ed22f3f56fd7372ebddb01f4e94346f043eeb42b4ada566","impliedFormat":1},{"version":"2beccefff361c478d57f45279478baeb7b7bcdac48c6108bec3a2d662344e1ea","impliedFormat":1},{"version":"b5c984f3e386c7c7c736ed7667b94d00a66f115920e82e9fa450dc27ccc0301e","impliedFormat":1},{"version":"acdd01e74c36396d3743b0caf0b4c7801297ca7301fa5db8ce7dbced64ec5732","impliedFormat":1},{"version":"82da8b99d0030a3babb7adfe3bb77bc8f89cc7d0737b622f4f9554abdc53cd89","impliedFormat":1},{"version":"80e11385ab5c1b042e02d64c65972fff234806525bf4916a32221d1baebfe2f9","impliedFormat":1},{"version":"a894178e9f79a38124f70afb869468bace08d789925fd22f5f671d9fb2f68307","impliedFormat":1},{"version":"b44237286e4f346a7151d33ff98f11a3582e669e2c08ec8b7def892ad7803f84","impliedFormat":1},{"version":"910c0d9ce9a39acafc16f6ca56bdbdb46c558ef44a9aa1ee385257f236498ee1","impliedFormat":1},{"version":"fed512983a39b9f0c6f1f0f04cc926aca2096e81570ae8cd84cad8c348e5e619","impliedFormat":1},{"version":"2ebf8f17b91314ec8167507ee29ebeb8be62a385348a0b8a1e7f433a7fb2cf89","impliedFormat":1},{"version":"cb48d9c290927137bfbd9cd93f98fca80a3704d0a1a26a4609542a3ab416c638","impliedFormat":1},{"version":"9ab3d74792d40971106685fb08a1c0e4b9b80d41e3408aa831e8a19fedc61ab8","impliedFormat":1},{"version":"394f9d6dc566055724626b455a9b5c86c27eeb1fdbd499c3788ab763585f5c41","impliedFormat":1},{"version":"9bc0ab4b8cb98cd3cb314b341e5aaab3475e5385beafb79706a497ebddc71b5d","impliedFormat":1},{"version":"35433c5ee1603dcac929defe439eec773772fab8e51b10eeb71e6296a44d9acb","impliedFormat":1},{"version":"aeee9ba5f764cea87c2b9905beb82cfdf36f9726f8dea4352fc233b308ba2169","impliedFormat":1},{"version":"35ea8672448e71ffa3538648f47603b4f872683e6b9db63168d7e5e032e095ef","impliedFormat":1},{"version":"8e63b8db999c7ad92c668969d0e26d486744175426157964771c65580638740d","impliedFormat":1},{"version":"f9da6129c006c79d6029dc34c49da453b1fe274e3022275bcdecaa02895034a0","impliedFormat":1},{"version":"2e9694d05015feb762a5dc7052dd51f66f692c07394b15f6aff612a9fb186f60","impliedFormat":1},{"version":"f570c4e30ea43aecf6fc7dc038cf0a964cf589111498b7dd735a97bf17837e3a","impliedFormat":1},{"version":"cdad25d233b377dd852eaa9cf396f48d916c1f8fd2193969fcafa8fe7c3387cb","impliedFormat":1},{"version":"243b9e4bcd123a332cb99e4e7913114181b484c0bb6a3b1458dcb5eb08cffdc4","impliedFormat":1},{"version":"ada76d272991b9fa901b2fbd538f748a9294f7b9b4bc2764c03c0c9723739fd1","impliedFormat":1},{"version":"6409389a0fa9db5334e8fbcb1046f0a1f9775abce0da901a5bc4fec1e458917c","impliedFormat":1},{"version":"af8d9efb2a64e68ac4c224724ac213dbc559bcfc165ce545d498b1c2d5b2d161","impliedFormat":1},{"version":"094faf910367cc178228cafe86f5c2bd94a99446f51e38d9c2a4eb4c0dec534d","impliedFormat":1},{"version":"dc4cf53cebe96ef6b569db81e9572f55490bd8a0e4f860aac02b7a0e45292c71","impliedFormat":1},{"version":"2c23e2a6219fbce2801b2689a9920548673d7ca0e53859200d55a0d5d05ea599","impliedFormat":1},{"version":"62491ce05a8e3508c8f7366208287c5fded66aad2ba81854aa65067d328281cc","impliedFormat":1},{"version":"8be1b9d5a186383e435c71d371e85016f92aa25e7a6a91f29aa7fd47651abf55","impliedFormat":1},{"version":"95a1b43dfa67963bd60eb50a556e3b08a9aea65a9ffa45504e5d92d34f58087a","impliedFormat":1},{"version":"b872dcd2b627694001616ab82e6aaec5a970de72512173201aae23f7e3f6503d","impliedFormat":1},{"version":"13517c2e04de0bbf4b33ff0dde160b0281ee47d1bf8690f7836ba99adc56294b","impliedFormat":1},{"version":"a9babac4cb35b319253dfc0f48097bcb9e7897f4f5762a5b1e883c425332d010","impliedFormat":1},{"version":"3d97a5744e12e54d735e7755eabc719f88f9d651e936ff532d56bdd038889fc4","impliedFormat":1},{"version":"7fffc8f7842b7c4df1ae19df7cc18cd4b1447780117fca5f014e6eb9b1a7215e","impliedFormat":1},{"version":"aaea91db3f0d14aca3d8b57c5ffb40e8d6d7232e65947ca6c00ae0c82f0a45dc","impliedFormat":1},{"version":"c62eefdcc2e2266350340ffaa43c249d447890617b037205ac6bb45bb7f5a170","impliedFormat":1},{"version":"9924ad46287d634cf4454fdbbccd03e0b7cd2e0112b95397c70d859ae00a5062","impliedFormat":1},{"version":"b940719c852fd3d759e123b29ace8bbd2ec9c5e4933c10749b13426b096a96a1","impliedFormat":1},{"version":"2745055e3218662533fbaddfb8e2e3186f50babe9fb09e697e73de5340c2ad40","impliedFormat":1},{"version":"5d6b6e6a7626621372d2d3bbe9e66b8168dcd5a40f93ae36ee339a68272a0d8b","impliedFormat":1},{"version":"64868d7db2d9a4fde65524147730a0cccdbd1911ada98d04d69f865ea93723d8","impliedFormat":1},{"version":"368b06a0dd2a29a35794eaa02c2823269a418761d38fdb5e1ac0ad2d7fdd0166","impliedFormat":1},{"version":"20164fb31ecfad1a980bd183405c389149a32e1106993d8224aaa93aae5bfbb9","impliedFormat":1},{"version":"bb4b51c75ee079268a127b19bf386eb979ab370ce9853c7d94c0aca9b75aff26","impliedFormat":1},{"version":"f0ef6f1a7e7de521846c163161b0ec7e52ce6c2665a4e0924e1be73e5e103ed3","impliedFormat":1},{"version":"84ab3c956ae925b57e098e33bd6648c30cdab7eca38f5e5b3512d46f6462b348","impliedFormat":1},{"version":"70d6692d0723d6a8b2c6853ed9ab6baaa277362bb861cf049cb12529bd04f68e","impliedFormat":1},{"version":"b35dc79960a69cd311a7c1da15ee30a8ab966e6db26ec99c2cc339b93b028ff6","impliedFormat":1},{"version":"29d571c13d8daae4a1a41d269ec09b9d17b2e06e95efd6d6dc2eeb4ff3a8c2ef","impliedFormat":1},{"version":"5f8a5619e6ae3fb52aaaa727b305c9b8cbe5ff91fa1509ffa61e32f804b55bd8","impliedFormat":1},{"version":"15becc25682fa4c93d45d92eab97bc5d1bb0563b8c075d98f4156e91652eec86","impliedFormat":1},{"version":"702f5c10b38e8c223e1d055d3e6a3f8c572aa421969c5d8699220fbc4f664901","impliedFormat":1},{"version":"4db15f744ba0cd3ae6b8ac9f6d043bf73d8300c10bbe4d489b86496e3eb1870b","impliedFormat":1},{"version":"80841050a3081b1803dbee94ff18c8b1770d1d629b0b6ebaf3b0351a8f42790b","impliedFormat":1},{"version":"9b7987f332830a7e99a4a067e34d082d992073a4dcf26acd3ecf41ca7b538ed5","impliedFormat":1},{"version":"e95b8e0dc325174c9cb961a5e38eccfe2ac15f979b202b0e40fa7e699751b4e9","impliedFormat":1},{"version":"21360a9fd6895e97cbbd36b7ce74202548710c8e833a36a2f48133b3341c2e8f","impliedFormat":1},{"version":"d74ac436397aa26367b37aa24bdae7c1933d2fed4108ff93c9620383a7f65855","impliedFormat":1},{"version":"65825f8fda7104efe682278afec0a63aeb3c95584781845c58d040d537d3cfed","impliedFormat":1},{"version":"1f467a5e086701edf716e93064f672536fc084bba6fc44c3de7c6ae41b91ac77","impliedFormat":1},{"version":"7e12b5758df0e645592f8252284bfb18d04f0c93e6a2bf7a8663974c88ef01de","impliedFormat":1},{"version":"47dbc4b0afb6bc4c131b086f2a75e35cbae88fb68991df2075ca0feb67bbe45b","impliedFormat":1},{"version":"146d8745ed5d4c6028d9a9be2ecf857da6c241bbbf031976a3dc9b0e17efc8a1","impliedFormat":1},{"version":"c4be9442e9de9ee24a506128453cba1bdf2217dbc88d86ed33baf2c4cbfc3e84","impliedFormat":1},{"version":"c9b42fef8c9d035e9ee3be41b99aae7b1bc1a853a04ec206bf0b3134f4491ec8","impliedFormat":1},{"version":"e6a958ab1e50a3bda4857734954cd122872e6deea7930d720afeebd9058dbaa5","impliedFormat":1},{"version":"088adb4a27dab77e99484a4a5d381f09420b9d7466fce775d9fbd3c931e3e773","impliedFormat":1},{"version":"ddf3d7751343800454d755371aa580f4c5065b21c38a716502a91fbb6f0ef92b","impliedFormat":1},{"version":"9b93adcccd155b01b56b55049028baac649d9917379c9c50c0291d316c6b9cdd","impliedFormat":1},{"version":"b48c56cc948cdf5bc711c3250a7ccbdd41f24f5bbbca8784de4c46f15b3a1e27","impliedFormat":1},{"version":"9eeee88a8f1eed92c11aea07551456a0b450da36711c742668cf0495ffb9149c","impliedFormat":1},{"version":"aeb081443dadcb4a66573dba7c772511e6c3f11c8fa8d734d6b0739e5048eb37","impliedFormat":1},{"version":"acf16021a0b863117ff497c2be4135f3c2d6528e4166582d306c4acb306cb639","impliedFormat":1},{"version":"13fbdad6e115524e50af76b560999459b3afd2810c1cbaa52c08cdc1286d2564","impliedFormat":1},{"version":"d3972149b50cdea8e6631a9b4429a5a9983c6f2453070fb8298a5d685911dc46","impliedFormat":1},{"version":"e2dcfcb61b582c2e1fa1a83e3639e2cc295c79be4c8fcbcbeef9233a50b71f7b","impliedFormat":1},{"version":"4e49b8864a54c0dcde72d637ca1c5718f5c017f378f8c9024eff5738cd84738f","impliedFormat":1},{"version":"8db9eaf81db0fc93f4329f79dd05ea6de5654cabf6526adb0b473d6d1cd1f331","impliedFormat":1},{"version":"f76d2001e2c456b814761f2057874dd775e2f661646a5b4bacdcc4cdaf00c3e6","impliedFormat":1},{"version":"d95afdd2f35228db20ec312cb7a014454c80e53a8726906bd222a9ad56f58297","impliedFormat":1},{"version":"8302bf7d5a3cb0dc5c943f77c43748a683f174fa5fae95ad87c004bf128950ce","impliedFormat":1},{"version":"ced33b4c97c0c078254a2a2c1b223a68a79157d1707957d18b0b04f7450d1ad5","impliedFormat":1},{"version":"0e31e4ec65a4d12b088ecf5213c4660cb7d37181b4e7f1f2b99fe58b1ba93956","impliedFormat":1},{"version":"3028552149f473c2dcf073c9e463d18722a9b179a70403edf8b588fcea88f615","impliedFormat":1},{"version":"0ccbcaa5cb885ad2981e4d56ed6845d65e8d59aba9036796c476ca152bc2ee37","impliedFormat":1},{"version":"cb86555aef01e7aa1602fce619da6de970bb63f84f8cffc4d21a12e60cd33a8c","impliedFormat":1},{"version":"a23c3bb0aecfbb593df6b8cb4ba3f0d5fc1bf93c48cc068944f4c1bdb940cb11","impliedFormat":1},{"version":"544c1aa6fcc2166e7b627581fdd9795fc844fa66a568bfa3a1bc600207d74472","impliedFormat":1},{"version":"745c7e4f6e3666df51143ed05a1200032f57d71a180652b3528c5859a062e083","impliedFormat":1},{"version":"0308b7494aa630c6ecc0e4f848f85fcad5b5d6ef811d5c04673b78cf3f87041c","impliedFormat":1},{"version":"c540aea897a749517aea1c08aeb2562b8b6fc9e70f938f55b50624602cc8b2e4","impliedFormat":1},{"version":"a1ab0c6b4400a900efd4cd97d834a72b7aeaa4b146a165043e718335f23f9a5f","impliedFormat":1},{"version":"89ebe83d44d78b6585dfd547b898a2a36759bc815c87afdf7256204ab453bd08","impliedFormat":1},{"version":"e6a29b3b1ac19c5cdf422685ac0892908eb19993c65057ec4fd3405ebf62f03d","impliedFormat":1},{"version":"c43912d69f1d4e949b0b1ce3156ad7bc169589c11f23db7e9b010248fdd384fa","impliedFormat":1},{"version":"d585b623240793e85c71b537b8326b5506ec4e0dcbb88c95b39c2a308f0e81ba","impliedFormat":1},{"version":"aac094f538d04801ebf7ea02d4e1d6a6b91932dbce4894acb3b8d023fdaa1304","impliedFormat":1},{"version":"da0d796387b08a117070c20ec46cc1c6f93584b47f43f69503581d4d95da2a1e","impliedFormat":1},{"version":"f2307295b088c3da1afb0e5a390b313d0d9b7ff94c7ba3107b2cdaf6fca9f9e6","impliedFormat":1},{"version":"d00bd133e0907b71464cbb0adae6353ebbec6977671d34d3266d75f11b9591a8","impliedFormat":1},{"version":"c3616c3b6a33defc62d98f1339468f6066842a811c6f7419e1ee9cae9db39184","impliedFormat":1},{"version":"7d068fc64450fc5080da3772705441a48016e1022d15d1d738defa50cac446b8","impliedFormat":1},{"version":"4c3c31fba20394c26a8cfc2a0554ae3d7c9ba9a1bc5365ee6a268669851cfe19","impliedFormat":1},{"version":"584e168e0939271bcec62393e2faa74cff7a2f58341c356b3792157be90ea0f7","impliedFormat":1},{"version":"50b6829d9ef8cf6954e0adf0456720dd3fd16f01620105072bae6be3963054d1","impliedFormat":1},{"version":"a72a2dd0145eaf64aa537c22af8a25972c0acf9db1a7187fa00e46df240e4bb0","impliedFormat":1},{"version":"0008a9f24fcd300259f8a8cd31af280663554b67bf0a60e1f481294615e4c6aa","impliedFormat":1},{"version":"21738ef7b3baf3065f0f186623f8af2d695009856a51e1d2edf9873cee60fe3a","impliedFormat":1},{"version":"19c9f153e001fb7ab760e0e3a5df96fa8b7890fc13fc848c3b759453e3965bf0","impliedFormat":1},{"version":"5d3a82cef667a1cff179a0a72465a34a6f1e31d3cdba3adce27b70b85d69b071","impliedFormat":1},{"version":"38763534c4b9928cd33e7d1c2141bc16a8d6719e856bf88fda57ef2308939d82","impliedFormat":1},{"version":"292ec7e47dfc1f6539308adc8a406badff6aa98c246f57616b5fa412d58067f8","impliedFormat":1},{"version":"a11ee86b5bc726da1a2de014b71873b613699cfab8247d26a09e027dee35e438","impliedFormat":1},{"version":"95a595935eecbce6cc8615c20fafc9a2d94cf5407a5b7ff9fa69850bbef57169","impliedFormat":1},{"version":"c42fc2b9cf0b6923a473d9c85170f1e22aa098a2c95761f552ec0b9e0a620d69","impliedFormat":1},{"version":"8c9a55357196961a07563ac00bb6434c380b0b1be85d70921cd110b5e6db832d","impliedFormat":1},{"version":"73149a58ebc75929db972ab9940d4d0069d25714e369b1bc6e33bc63f1f8f094","impliedFormat":1},{"version":"c98f5a640ffecf1848baf321429964c9db6c2e943c0a07e32e8215921b6c36c3","impliedFormat":1},{"version":"43738308660af5cb4a34985a2bd18e5e2ded1b2c8f8b9c148fca208c5d2768a6","impliedFormat":1},{"version":"bb4fa3df2764387395f30de00e17d484a51b679b315d4c22316d2d0cd76095d6","impliedFormat":1},{"version":"0498a3d27ec7107ba49ecc951e38c7726af555f438bab1267385677c6918d8ec","impliedFormat":1},{"version":"fe24f95741e98d4903772dc308156562ae7e4da4f3845e27a10fab9017edae75","impliedFormat":1},{"version":"b63482acb91346b325c20087e1f2533dc620350bf7d0aa0c52967d3d79549523","impliedFormat":1},{"version":"2aef798b8572df98418a7ac4259b315df06839b968e2042f2b53434ee1dc2da4","impliedFormat":1},{"version":"249c41965bd0c7c5b987f242ac9948a2564ef92d39dde6af1c4d032b368738b0","impliedFormat":1},{"version":"7141b7ffd1dcd8575c4b8e30e465dd28e5ae4130ff9abd1a8f27c68245388039","impliedFormat":1},{"version":"d1dd80825d527d2729f4581b7da45478cdaaa0c71e377fd2684fb477761ea480","impliedFormat":1},{"version":"e78b1ba3e800a558899aba1a50704553cf9dc148036952f0b5c66d30b599776d","impliedFormat":1},{"version":"be4ccea4deb9339ca73a5e6a8331f644a6b8a77d857d21728e911eb3271a963c","impliedFormat":1},{"version":"3ee5a61ffc7b633157279afd7b3bd70daa989c8172b469d358aed96f81a078ef","impliedFormat":1},{"version":"23c63869293ca315c9e8eb9359752704068cc5fff98419e49058838125d59b1e","impliedFormat":1},{"version":"af0a68781958ab1c73d87e610953bd70c062ddb2ab761491f3e125eadef2a256","impliedFormat":1},{"version":"c20c624f1b803a54c5c12fdd065ae0f1677f04ffd1a21b94dddee50f2e23f8ec","impliedFormat":1},{"version":"49ef6d2d93b793cc3365a79f31729c0dc7fc2e789425b416b1a4a5654edb41ac","impliedFormat":1},{"version":"c2151736e5df2bdc8b38656b2e59a4bb0d7717f7da08b0ae9f5ddd1e429d90a1","impliedFormat":1},{"version":"3f1baacc3fc5e125f260c89c1d2a940cdccb65d6adef97c9936a3ac34701d414","impliedFormat":1},{"version":"3603cbabe151a2bea84325ce1ea57ca8e89f9eb96546818834d18fb7be5d4232","impliedFormat":1},{"version":"989762adfa2de753042a15514f5ccc4ed799b88bdc6ac562648972b26bc5bc60","impliedFormat":1},{"version":"a23f251635f89a1cc7363cae91e578073132dc5b65f6956967069b2b425a646a","impliedFormat":1},{"version":"995ed46b1839b3fc9b9a0bd5e7572120eac3ba959fa8f5a633be9bcded1f87ae","impliedFormat":1},{"version":"ddabaf119da03258aa0a33128401bbb91c54ef483e9de0f87be1243dd3565144","impliedFormat":1},{"version":"4e79855295a233d75415685fa4e8f686a380763e78a472e3c6c52551c6b74fd3","impliedFormat":1},{"version":"3b036f77ed5cbb981e433f886a07ec719cf51dd6c513ef31e32fd095c9720028","impliedFormat":1},{"version":"ee58f8fca40561d30c9b5e195f39dbc9305a6f2c8e1ff2bf53204cacb2cb15c0","impliedFormat":1},{"version":"83ac7ceab438470b6ddeffce2c13d3cf7d22f4b293d1e6cdf8f322edcd87a393","impliedFormat":1},{"version":"ef0e7387c15b5864b04dd9358513832d1c93b15f4f07c5226321f5f17993a0e2","impliedFormat":1},{"version":"86b6a71515872d5286fbcc408695c57176f0f7e941c8638bcd608b3718a1e28c","impliedFormat":1},{"version":"be59c70c4576ea08eee55cf1083e9d1f9891912ef0b555835b411bc4488464d4","impliedFormat":1},{"version":"57c97195e8efcfc808c41c1b73787b85588974181349b6074375eb19cc3bba91","impliedFormat":1},{"version":"d7cafcc0d3147486b39ac4ad02d879559dd3aa8ac4d0600a0c5db66ab621bdf3","impliedFormat":1},{"version":"b5c8e50e4b06f504513ca8c379f2decb459d9b8185bdcd1ee88d3f7e69725d3b","impliedFormat":1},{"version":"122621159b4443b4e14a955cf5f1a23411e6a59d2124d9f0d59f3465eddc97ec","impliedFormat":1},{"version":"c4889859626d56785246179388e5f2332c89fa4972de680b9b810ab89a9502cd","impliedFormat":1},{"version":"e9395973e2a57933fcf27b0e95b72cb45df8ecc720929ce039fc1c9013c5c0dc","impliedFormat":1},{"version":"a81723e440f533b0678ce5a3e7f5046a6bb514e086e712f9be98ebef74bd39b8","impliedFormat":1},{"version":"298d10f0561c6d3eb40f30001d7a2c8a5aa1e1e7e5d1babafb0af51cc27d2c81","impliedFormat":1},{"version":"e256d96239faffddf27f67ff61ab186ad3adaa7d925eeaf20ba084d90af1df19","impliedFormat":1},{"version":"8357843758edd0a0bd1ef4283fcabb50916663cf64a6a0675bd0996ae5204f3d","impliedFormat":1},{"version":"1525d7dd58aad8573ae1305cc30607d35c9164a8e2b0b14c7d2eaea44143f44b","impliedFormat":1},{"version":"fd19dff6b77e377451a1beacb74f0becfee4e7f4c2906d723570f6e7382bd46f","impliedFormat":1},{"version":"3f3ef670792214404589b74e790e7347e4e4478249ca09db51dc8a7fca6c1990","impliedFormat":1},{"version":"0da423d17493690db0f1adc8bf69065511c22dd99c478d9a2b59df704f77301b","impliedFormat":1},{"version":"ba627cd6215902dbe012e96f33bd4bf9ad0eefc6b14611789c52568cf679dc07","impliedFormat":1},{"version":"5fce817227cd56cb5642263709b441f118e19a64af6b0ed520f19fa032bdb49e","impliedFormat":1},{"version":"754107d580b33acc15edffaa6ac63d3cdf40fb11b1b728a2023105ca31fcb1a8","impliedFormat":1},{"version":"03cbeabd581d540021829397436423086e09081d41e3387c7f50df8c92d93b35","impliedFormat":1},{"version":"91322bf698c0c547383d3d1a368e5f1f001d50b9c3c177de84ab488ead82a1b8","impliedFormat":1},{"version":"79337611e64395512cad3eb04c8b9f50a2b803fa0ae17f8614f19c1e4a7eef8d","impliedFormat":1},{"version":"6835fc8e288c1a4c7168a72a33cb8a162f5f52d8e1c64e7683fc94f427335934","impliedFormat":1},{"version":"a90a83f007a1dece225eb2fd59b41a16e65587270bd405a2eb5f45aa3d2b2044","impliedFormat":1},{"version":"320333b36a5e801c0e6cee69fb6edc2bcc9d192cd71ee1d28c4b46467c69d0b4","impliedFormat":1},{"version":"e4e2457e74c4dc9e0bb7483113a6ba18b91defc39d6a84e64b532ad8a4c9951c","impliedFormat":1},{"version":"c39fb1745e021b123b512b86c41a96497bf60e3c8152b167da11836a6e418fd7","impliedFormat":1},{"version":"95ab9fb3b863c4f05999f131c0d2bd44a9de8e7a36bb18be890362aafa9f0a26","impliedFormat":1},{"version":"c95da8d445b765b3f704c264370ac3c92450cefd9ec5033a12f2b4e0fca3f0f4","impliedFormat":1},{"version":"ac534eb4f4c86e7bef6ed3412e7f072ec83fe36a73e79cbf8f3acb623a2447bb","impliedFormat":1},{"version":"a2a295f55159b84ca69eb642b99e06deb33263b4253c32b4119ea01e4e06a681","impliedFormat":1},{"version":"271584dd56ae5c033542a2788411e62a53075708f51ee4229c7f4f7804b46f98","impliedFormat":1},{"version":"f8fe7bba5c4b19c5e84c614ffcd3a76243049898678208f7af0d0a9752f17429","impliedFormat":1},{"version":"bad7d161bfe5943cb98c90ec486a46bf2ebc539bd3b9dbc3976968246d8c801d","impliedFormat":1},{"version":"be1f9104fa3890f1379e88fdbb9e104e5447ac85887ce5c124df4e3b3bc3fece","impliedFormat":1},{"version":"2d38259c049a6e5f2ea960ff4ad0b2fb1f8d303535afb9d0e590bb4482b26861","impliedFormat":1},{"version":"ae07140e803da03cc30c595a32bb098e790423629ab94fdb211a22c37171af5a","impliedFormat":1},{"version":"b0b6206f9b779be692beab655c1e99ec016d62c9ea6982c7c0108716d3ebb2ec","impliedFormat":1},{"version":"cc39605bf23068cbec34169b69ef3eb1c0585311247ceedf7a2029cf9d9711bd","impliedFormat":1},{"version":"132d600b779fb52dba5873aadc1e7cf491996c9e5abe50bcbc34f5e82c7bfe8a","impliedFormat":1},{"version":"429a4b07e9b7ff8090cc67db4c5d7d7e0a9ee5b9e5cd4c293fd80fca84238f14","impliedFormat":1},{"version":"4ffb10b4813cdca45715d9a8fc8f54c4610def1820fae0e4e80a469056e3c3d5","impliedFormat":1},{"version":"673a5aa23532b1d47a324a6945e73a3e20a6ec32c7599e0a55b2374afd1b098d","impliedFormat":1},{"version":"a70d616684949fdff06a57c7006950592a897413b2d76ec930606c284f89e0b9","impliedFormat":1},{"version":"ddfff10877e34d7c341cb85e4e9752679f9d1dd03e4c20bf2a8d175eda58d05b","impliedFormat":1},{"version":"d4afbe82fbc4e92c18f6c6e4007c68e4971aca82b887249fdcb292b6ae376153","impliedFormat":1},{"version":"9a6a791ca7ed8eaa9a3953cbf58ec5a4211e55c90dcd48301c010590a68b945e","impliedFormat":1},{"version":"10098d13345d8014bbfd83a3f610989946b3c22cdec1e6b1af60693ab6c9f575","impliedFormat":1},{"version":"0b5880de43560e2c042c5337f376b1a0bdae07b764a4e7f252f5f9767ebad590","impliedFormat":1},{"version":"2879a055439b6c0c0132a1467120a0f85b56b5d735c973ad235acd958b1b5345","impliedFormat":1},{"version":"a80b7bc4eda856374c26a56f6f25297f4c393309d4c4548002a5238cd57b2b66","impliedFormat":1},"3c1fac4f78df1041c0ecd16f6fc7f9512251b711e12943e3411f6624cede2bdd",{"version":"8dd450de6d756cee0761f277c6dc58b0b5a66b8c274b980949318b8cad26d712","impliedFormat":1},{"version":"904d6ad970b6bd825449480488a73d9b98432357ab38cf8d31ffd651ae376ff5","impliedFormat":1},{"version":"0eca9db21fa3ff4874640e1bec31c03da0615462388c07e7299e1b930851a80c","impliedFormat":1},"3a5ed441b9ddac9936f8cb052299142de5e2269c9a2c7aba39996d71ba2ec85a",{"version":"caf4af98bf464ad3e10c46cf7d340556f89197aab0f87f032c7b84eb8ddb24d9","impliedFormat":1},{"version":"71acd198e19fa38447a3cbc5c33f2f5a719d933fccf314aaff0e8b0593271324","impliedFormat":1},"b50ce854ad22d6df9dee3e2851083687fb07d10c002a2364608446278014a968","adefbba984a87c0f3059432a049ca2ef7e46bd93adeab0ee1828e3886b8cabb3","927de568a3cf481bf0040ced7703bbe24deb44952e838940dc7ecbe789711232",{"version":"41baad0050b9280cfe30362c267eba7b89161d528112bccea69f7b4d49ab3102","impliedFormat":1},"53b069e0b6ddfbd990397c6889801e4c83d430adc88d6d08cababfa522ff18a4",{"version":"6b5f886fe41e2e767168e491fe6048398ed6439d44e006d9f51cc31265f08978","impliedFormat":1},{"version":"f4a1eba860f7493d19df42373ddde4f3c6f31aa574b608e55e5b2bd459bba587","impliedFormat":1},{"version":"6388a549ff1e6a2d5d18da48709bb167ea28062b573ff1817016099bc6138861","impliedFormat":1},{"version":"32d280360f1bcc8b4721ff72d11a29a79ac2cb0e82dde14eea891bf73ba98f9d","impliedFormat":1},"4fed67addadd0cb81d5fd95ace0b43f4a9639ff425ec594042a0be704d98be00","dcae0b8e192da5304304681a3cc594a940b85b2249be8c45c1f71d61e7211090","734fc419cc0723016aac35e9d433ad405207cb1a29668ea91e7ead041874d00c","62d3ce5b8f548990a8f188247f539defc3075b2793d673beca132c5abc560b6f","765efb51f937b2f1e73601646da5407ff54a4a86adb0fad487910682357ab26d",{"version":"9e4b070b543d91d0b321a481e1119e99bb8f136f4ef271d7b5ba264919fc32e2","impliedFormat":1},{"version":"5f877dfc985d1fd3ac8bf4a75cd77b06c42ca608809b324c44b4151758de7189","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9a60e36a4cc38129e1882b28e24bd1d47f2bf62e7708d611384b223f31ad20b","affectsGlobalScope":true,"impliedFormat":1},{"version":"14c2fd6220654a41c53836a62ba96d4b515ae1413b0ccb31c2445fb1ae1de5de","affectsGlobalScope":true,"impliedFormat":1},{"version":"4f29c38739500cd35a2ce41d15a35e34445ca755ebb991915b5f170985a49d21","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3842a6977bc70be229c3397123adaa686d99e161c9927ae85b6f6890be401e7","affectsGlobalScope":true,"impliedFormat":1},{"version":"efc7d584a33fe3422847783d228f315c4cd1afe74bd7cf8e3f0e4c1125129fef","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","impliedFormat":1},{"version":"3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","impliedFormat":1},{"version":"e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","impliedFormat":1},{"version":"471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","impliedFormat":1},{"version":"c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","impliedFormat":1},{"version":"40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","impliedFormat":1},{"version":"8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","impliedFormat":1},{"version":"4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1","impliedFormat":1},{"version":"a14ed46fa3f5ffc7a8336b497cd07b45c2084213aaca933a22443fcb2eef0d07","affectsGlobalScope":true,"impliedFormat":1},{"version":"cce1f5f86974c1e916ec4a8cab6eec9aa8e31e8148845bf07fbaa8e1d97b1a2c","impliedFormat":1},{"version":"e2eb1ce13a9c0fa7ab62c63909d81973ef4b707292667c64f1e25e6e53fa7afa","affectsGlobalScope":true,"impliedFormat":1},{"version":"16d74fe4d8e183344d3beb15d48b123c5980ff32ff0cc8c3b96614ddcdf9b239","impliedFormat":1},{"version":"7b43160a49cf2c6082da0465876c4a0b164e160b81187caeb0a6ca7a281e85ba","impliedFormat":1},{"version":"41fb2a1c108fbf46609ce5a451b7ec78eb9b5ada95fd5b94643e4b26397de0b3","affectsGlobalScope":true,"impliedFormat":1},{"version":"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","impliedFormat":1},{"version":"1b282e90846fada1e96dc1cf5111647d6ab5985c8d7b5c542642f1ea2739406d","impliedFormat":1},{"version":"bd3f5d05b6b5e4bfcea7739a45f3ffb4a7f4a3442ba7baf93e0200799285b8f1","impliedFormat":1},{"version":"4c775c2fccabf49483c03cd5e3673f87c1ffb6079d98e7b81089c3def79e29c6","impliedFormat":1},{"version":"8806ae97308ef26363bd7ec8071bca4d07fb575f905ee3d8a91aff226df6d618","impliedFormat":1},{"version":"af5bf1db6f1804fb0069039ae77a05d60133c77a2158d9635ea27b6bb2828a8f","impliedFormat":1},{"version":"b7fe70be794e13d1b7940e318b8770cd1fb3eced7707805318a2e3aaac2c3e9e","impliedFormat":1},{"version":"2c71199d1fc83bf17636ad5bf63a945633406b7b94887612bba4ef027c662b3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ae9dc7dbb58cd843065639707815df85c044babaa0947116f97bdb824d07204","affectsGlobalScope":true,"impliedFormat":1},{"version":"7aae1df2053572c2cfc2089a77847aadbb38eedbaa837a846c6a49fb37c6e5bd","impliedFormat":1},{"version":"313a0b063f5188037db113509de1b934a0e286f14e9479af24fada241435e707","impliedFormat":1},{"version":"f1ace2d2f98429e007d017c7a445efad2aaebf8233135abdb2c88b8c0fef91ab","impliedFormat":1},{"version":"87ef1a23caa071b07157c72077fa42b86d30568f9dc9e31eed24d5d14fc30ba8","impliedFormat":1},{"version":"396a8939b5e177542bdf9b5262b4eee85d29851b2d57681fa9d7eae30e225830","impliedFormat":1},{"version":"21773f5ac69ddf5a05636ba1f50b5239f4f2d27e4420db147fc2f76a5ae598ac","impliedFormat":1},{"version":"ea455cc68871b049bcecd9f56d4cf27b852d6dafd5e3b54468ca87cc11604e4d","affectsGlobalScope":true,"impliedFormat":1},{"version":"a5fe4cc622c3bf8e09ababde5f4096ceac53163eefcd95e9cd53f062ff9bb67a","impliedFormat":1},{"version":"45b1053e691c5af9bfe85060a3e1542835f8d84a7e6e2e77ca305251eda0cb3c","impliedFormat":1},{"version":"0f05c06ff6196958d76b865ae17245b52d8fe01773626ac3c43214a2458ea7b7","impliedFormat":1},{"version":"ae5507fc333d637dec9f37c6b3f4d423105421ea2820a64818de55db85214d66","affectsGlobalScope":true,"impliedFormat":1},{"version":"0666f4c99b8688c7be5956df8fecf5d1779d3b22f8f2a88258ae7072c7b6026f","affectsGlobalScope":true,"impliedFormat":1},{"version":"8abd0566d2854c4bd1c5e48e05df5c74927187f1541e6770001d9637ac41542e","impliedFormat":1},{"version":"54e854615c4eafbdd3fd7688bd02a3aafd0ccf0e87c98f79d3e9109f047ce6b8","impliedFormat":1},{"version":"d8dba11dc34d50cb4202de5effa9a1b296d7a2f4a029eec871f894bddfb6430d","impliedFormat":1},{"version":"8b71dd18e7e63b6f991b511a201fad7c3bf8d1e0dd98acb5e3d844f335a73634","impliedFormat":1},{"version":"01d8e1419c84affad359cc240b2b551fb9812b450b4d3d456b64cda8102d4f60","impliedFormat":1},{"version":"8221b00f271cf7f535a8eeec03b0f80f0929c7a16116e2d2df089b41066de69b","impliedFormat":1},{"version":"269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","impliedFormat":1},{"version":"93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","impliedFormat":1},{"version":"7424817d5eb498771e6d1808d726ec38f75d2eaf3fa359edd5c0c540c52725c1","impliedFormat":1},{"version":"831c22d257717bf2cbb03afe9c4bcffc5ccb8a2074344d4238bf16d3a857bb12","impliedFormat":1},{"version":"bddce945d552a963c9733db106b17a25474eefcab7fc990157a2134ef55d4954","affectsGlobalScope":true,"impliedFormat":1},{"version":"7052b7b0c3829df3b4985bab2fd74531074b4835d5a7b263b75c82f0916ad62f","affectsGlobalScope":true,"impliedFormat":1},{"version":"aa34c3aa493d1c699601027c441b9664547c3024f9dbab1639df7701d63d18fa","impliedFormat":1},{"version":"eefcdf86cefff36e5d87de36a3638ab5f7d16c2b68932be4a72c14bb924e43c1","impliedFormat":1},{"version":"7c651f8dce91a927ab62925e73f190763574c46098f2b11fb8ddc1b147a6709a","impliedFormat":1},{"version":"7440ab60f4cb031812940cc38166b8bb6fbf2540cfe599f87c41c08011f0c1df","impliedFormat":1},{"version":"4d0405568cf6e0ff36a4861c4a77e641366feaefa751600b0a4d12a5e8f730a8","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5b5dc128973498b75f52b1b8c2d5f8629869104899733ae485100c2309b4c12","affectsGlobalScope":true,"impliedFormat":1},{"version":"e393915d3dc385e69c0e2390739c87b2d296a610662eb0b1cb85224e55992250","impliedFormat":1},{"version":"79bad8541d5779c85e82a9fb119c1fe06af77a71cc40f869d62ad379473d4b75","impliedFormat":1},{"version":"8013f6c4d1632da8f1c4d3d702ae559acccd0f1be05360c31755f272587199c9","impliedFormat":1},{"version":"629d20681ca284d9e38c0a019f647108f5fe02f9c59ac164d56f5694fc3faf4d","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7dbf5716d76846c7522e910896c5747b6df1abd538fee8f5291bdc843461795","impliedFormat":1},{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true,"impliedFormat":1},{"version":"b510d0a18e3db42ac9765d26711083ec1e8b4e21caaca6dc4d25ae6e8623f447","impliedFormat":1},{"version":"7ac7ef12f7ece6464d83d2d56fea727260fb954fdd51a967e94f97b8595b714b","impliedFormat":1}],"root":[87,90,[92,94],97,98,105,108,[126,128],451,455,[458,460],462,[467,471]],"options":{"allowJs":true,"declaration":false,"declarationMap":false,"esModuleInterop":true,"inlineSources":false,"jsx":1,"module":99,"noUnusedLocals":false,"noUnusedParameters":false,"skipLibCheck":true,"strict":false,"target":99,"verbatimModuleSyntax":true},"referencedMap":[[94,1],[98,2],[105,3],[90,4],[108,5],[96,6],[463,7],[454,8],[120,7],[452,7],[130,9],[131,9],[132,9],[133,9],[134,9],[135,9],[136,9],[137,9],[138,9],[139,9],[140,9],[141,9],[142,9],[143,9],[144,9],[145,9],[146,9],[147,9],[148,9],[149,9],[150,9],[151,9],[152,9],[153,9],[154,9],[155,9],[156,9],[158,9],[157,9],[159,9],[160,9],[161,9],[162,9],[163,9],[164,9],[165,9],[166,9],[167,9],[168,9],[169,9],[170,9],[171,9],[172,9],[173,9],[174,9],[175,9],[176,9],[177,9],[178,9],[179,9],[180,9],[181,9],[182,9],[183,9],[184,9],[187,9],[186,9],[185,9],[188,9],[189,9],[190,9],[191,9],[193,9],[192,9],[195,9],[194,9],[196,9],[197,9],[198,9],[199,9],[201,9],[200,9],[202,9],[203,9],[204,9],[205,9],[206,9],[207,9],[208,9],[209,9],[210,9],[211,9],[212,9],[213,9],[216,9],[214,9],[215,9],[217,9],[218,9],[219,9],[220,9],[221,9],[222,9],[223,9],[224,9],[225,9],[226,9],[227,9],[228,9],[230,9],[229,9],[231,9],[232,9],[233,9],[234,9],[235,9],[236,9],[238,9],[237,9],[239,9],[240,9],[241,9],[242,9],[243,9],[244,9],[245,9],[246,9],[247,9],[248,9],[249,9],[251,9],[250,9],[252,9],[254,9],[253,9],[255,9],[256,9],[257,9],[258,9],[260,9],[259,9],[261,9],[262,9],[263,9],[264,9],[265,9],[266,9],[267,9],[268,9],[269,9],[270,9],[271,9],[272,9],[273,9],[274,9],[275,9],[276,9],[277,9],[278,9],[279,9],[280,9],[281,9],[282,9],[283,9],[284,9],[285,9],[286,9],[287,9],[288,9],[290,9],[289,9],[291,9],[292,9],[293,9],[294,9],[295,9],[296,9],[448,10],[297,9],[298,9],[299,9],[300,9],[301,9],[302,9],[303,9],[304,9],[305,9],[306,9],[307,9],[308,9],[309,9],[310,9],[311,9],[312,9],[313,9],[314,9],[315,9],[318,9],[316,9],[317,9],[319,9],[320,9],[321,9],[322,9],[323,9],[324,9],[325,9],[326,9],[327,9],[328,9],[330,9],[329,9],[332,9],[333,9],[331,9],[334,9],[335,9],[336,9],[337,9],[338,9],[339,9],[340,9],[341,9],[342,9],[343,9],[344,9],[345,9],[346,9],[347,9],[348,9],[349,9],[350,9],[351,9],[352,9],[353,9],[354,9],[356,9],[355,9],[358,9],[357,9],[359,9],[360,9],[361,9],[362,9],[363,9],[364,9],[365,9],[366,9],[368,9],[367,9],[369,9],[370,9],[371,9],[372,9],[374,9],[373,9],[375,9],[376,9],[377,9],[378,9],[379,9],[380,9],[381,9],[382,9],[383,9],[384,9],[385,9],[386,9],[387,9],[388,9],[389,9],[390,9],[391,9],[392,9],[393,9],[394,9],[395,9],[397,9],[396,9],[398,9],[399,9],[400,9],[401,9],[402,9],[403,9],[404,9],[405,9],[406,9],[407,9],[408,9],[410,9],[411,9],[412,9],[413,9],[414,9],[415,9],[416,9],[409,9],[417,9],[418,9],[419,9],[420,9],[421,9],[422,9],[423,9],[424,9],[425,9],[426,9],[427,9],[428,9],[429,9],[430,9],[431,9],[432,9],[433,9],[129,11],[434,9],[435,9],[436,9],[437,9],[438,9],[439,9],[440,9],[441,9],[442,9],[443,9],[444,9],[445,9],[446,9],[447,9],[457,12],[466,13],[465,14],[453,7],[119,11],[456,11],[450,15],[121,16],[112,17],[111,18],[110,19],[473,20],[477,21],[476,22],[478,23],[479,23],[514,24],[515,25],[516,26],[517,27],[518,28],[519,29],[520,30],[521,31],[522,32],[523,33],[524,33],[526,34],[525,35],[527,36],[528,37],[529,38],[513,39],[530,40],[531,41],[532,42],[564,43],[533,44],[534,45],[535,46],[536,47],[537,48],[538,49],[539,50],[540,51],[541,52],[542,53],[543,53],[544,54],[545,55],[547,56],[546,57],[548,58],[549,59],[550,60],[551,61],[552,62],[553,63],[554,64],[555,65],[556,66],[557,67],[558,68],[559,69],[560,70],[561,71],[562,72],[88,11],[565,11],[86,73],[449,11],[124,74],[123,75],[461,76],[100,77],[101,77],[103,77],[104,78],[125,11],[89,79],[87,11],[117,80],[118,81],[116,82],[114,83],[113,84],[115,83],[496,85],[503,86],[495,85],[510,87],[487,88],[486,89],[509,90],[504,91],[507,92],[489,93],[488,94],[484,95],[483,96],[506,97],[485,98],[490,99],[494,99],[512,100],[511,99],[498,101],[499,102],[501,103],[497,104],[500,105],[505,90],[492,106],[493,107],[502,108],[482,109],[508,110],[471,111],[470,112],[460,113],[469,114],[468,115],[451,116],[462,117],[459,118],[455,119],[458,120],[467,121],[126,122],[128,123],[127,124],[97,125],[93,126]],"affectedFilesPendingEmit":[94,98,105,90,108,471,470,460,469,468,451,462,459,455,458,467,126,128,127,97,93,92],"version":"5.9.3"} \ No newline at end of file diff --git a/surfsense_desktop/src/ipc/channels.ts b/surfsense_desktop/src/ipc/channels.ts index 436e0e064..308d8515e 100644 --- a/surfsense_desktop/src/ipc/channels.ts +++ b/surfsense_desktop/src/ipc/channels.ts @@ -50,8 +50,8 @@ export const IPC_CHANNELS = { GET_SHORTCUTS: 'shortcuts:get', SET_SHORTCUTS: 'shortcuts:set', // Active search space - GET_ACTIVE_SEARCH_SPACE: 'search-space:get-active', - SET_ACTIVE_SEARCH_SPACE: 'search-space:set-active', + GET_ACTIVE_WORKSPACE: 'workspace:get-active', + SET_ACTIVE_WORKSPACE: 'workspace:set-active', // Launch on system startup GET_AUTO_LAUNCH: 'auto-launch:get', SET_AUTO_LAUNCH: 'auto-launch:set', diff --git a/surfsense_desktop/src/ipc/handlers.ts b/surfsense_desktop/src/ipc/handlers.ts index ab4ba0d92..23b88e292 100644 --- a/surfsense_desktop/src/ipc/handlers.ts +++ b/surfsense_desktop/src/ipc/handlers.ts @@ -27,7 +27,7 @@ import { } from '../modules/folder-watcher'; import { getShortcuts, setShortcuts, type ShortcutConfig } from '../modules/shortcuts'; import { getAutoLaunchState, setAutoLaunch } from '../modules/auto-launch'; -import { getActiveSearchSpaceId, setActiveSearchSpaceId } from '../modules/active-search-space'; +import { getActiveWorkspaceId, setActiveWorkspaceId } from '../modules/active-workspace'; import { reregisterQuickAsk } from '../modules/quick-ask'; import { reregisterGeneralAssist, reregisterScreenshotAssist } from '../modules/tray'; import { @@ -205,9 +205,9 @@ export function registerIpcHandlers(): void { ipcMain.handle( IPC_CHANNELS.READ_AGENT_LOCAL_FILE_TEXT, - async (_event, virtualPath: string, searchSpaceId?: number | null) => { + async (_event, virtualPath: string, workspaceId?: number | null) => { try { - const result = await readAgentLocalFileText(virtualPath, searchSpaceId); + const result = await readAgentLocalFileText(virtualPath, workspaceId); return { ok: true, path: result.path, content: result.content }; } catch (error) { const message = error instanceof Error ? error.message : 'Failed to read local file'; @@ -218,9 +218,9 @@ export function registerIpcHandlers(): void { ipcMain.handle( IPC_CHANNELS.WRITE_AGENT_LOCAL_FILE_TEXT, - async (_event, virtualPath: string, content: string, searchSpaceId?: number | null) => { + async (_event, virtualPath: string, content: string, workspaceId?: number | null) => { try { - const result = await writeAgentLocalFileText(virtualPath, content, searchSpaceId); + const result = await writeAgentLocalFileText(virtualPath, content, workspaceId); return { ok: true, path: result.path }; } catch (error) { const message = error instanceof Error ? error.message : 'Failed to write local file'; @@ -321,10 +321,10 @@ export function registerIpcHandlers(): void { }, ); - ipcMain.handle(IPC_CHANNELS.GET_ACTIVE_SEARCH_SPACE, () => getActiveSearchSpaceId()); + ipcMain.handle(IPC_CHANNELS.GET_ACTIVE_WORKSPACE, () => getActiveWorkspaceId()); - ipcMain.handle(IPC_CHANNELS.SET_ACTIVE_SEARCH_SPACE, (_event, id: string) => - setActiveSearchSpaceId(id) + ipcMain.handle(IPC_CHANNELS.SET_ACTIVE_WORKSPACE, (_event, id: string) => + setActiveWorkspaceId(id) ); ipcMain.handle(IPC_CHANNELS.SET_SHORTCUTS, async (_event, config: Partial) => { @@ -370,12 +370,12 @@ export function registerIpcHandlers(): void { }; }); - ipcMain.handle(IPC_CHANNELS.AGENT_FILESYSTEM_GET_SETTINGS, (_event, searchSpaceId?: number | null) => - getAgentFilesystemSettings(searchSpaceId) + ipcMain.handle(IPC_CHANNELS.AGENT_FILESYSTEM_GET_SETTINGS, (_event, workspaceId?: number | null) => + getAgentFilesystemSettings(workspaceId) ); - ipcMain.handle(IPC_CHANNELS.AGENT_FILESYSTEM_GET_MOUNTS, (_event, searchSpaceId?: number | null) => - getAgentFilesystemMounts(searchSpaceId) + ipcMain.handle(IPC_CHANNELS.AGENT_FILESYSTEM_GET_MOUNTS, (_event, workspaceId?: number | null) => + getAgentFilesystemMounts(workspaceId) ); ipcMain.handle( @@ -384,7 +384,7 @@ export function registerIpcHandlers(): void { _event, options: { rootPath: string; - searchSpaceId?: number | null; + workspaceId?: number | null; excludePatterns?: string[] | null; fileExtensions?: string[] | null; } @@ -397,10 +397,10 @@ export function registerIpcHandlers(): void { ( _event, payload: { - searchSpaceId?: number | null; + workspaceId?: number | null; settings: { mode?: 'cloud' | 'desktop_local_folder'; localRootPaths?: string[] | null }; } - ) => setAgentFilesystemSettings(payload?.searchSpaceId, payload?.settings ?? {}) + ) => setAgentFilesystemSettings(payload?.workspaceId, payload?.settings ?? {}) ); ipcMain.handle(IPC_CHANNELS.AGENT_FILESYSTEM_PICK_ROOT, () => @@ -415,7 +415,7 @@ export function registerIpcHandlers(): void { ipcMain.handle( IPC_CHANNELS.AGENT_FILESYSTEM_TREE_WATCH_STOP, - (_event, searchSpaceId?: number | null) => - stopAgentFilesystemTreeWatch(searchSpaceId) + (_event, workspaceId?: number | null) => + stopAgentFilesystemTreeWatch(workspaceId) ); } diff --git a/surfsense_desktop/src/modules/active-search-space.ts b/surfsense_desktop/src/modules/active-search-space.ts deleted file mode 100644 index e5f55c8f4..000000000 --- a/surfsense_desktop/src/modules/active-search-space.ts +++ /dev/null @@ -1,24 +0,0 @@ -const STORE_KEY = 'activeSearchSpaceId'; -// eslint-disable-next-line @typescript-eslint/no-explicit-any -let store: any = null; - -async function getStore() { - if (!store) { - const { default: Store } = await import('electron-store'); - store = new Store({ - name: 'active-search-space', - defaults: { [STORE_KEY]: null as string | null }, - }); - } - return store; -} - -export async function getActiveSearchSpaceId(): Promise { - const s = await getStore(); - return (s.get(STORE_KEY) as string | null) ?? null; -} - -export async function setActiveSearchSpaceId(id: string): Promise { - const s = await getStore(); - s.set(STORE_KEY, id); -} diff --git a/surfsense_desktop/src/modules/active-workspace.ts b/surfsense_desktop/src/modules/active-workspace.ts new file mode 100644 index 000000000..059ff5aa4 --- /dev/null +++ b/surfsense_desktop/src/modules/active-workspace.ts @@ -0,0 +1,35 @@ +const STORE_KEY = 'activeWorkspaceId'; +// eslint-disable-next-line @typescript-eslint/no-explicit-any +let store: any = null; + +async function getStore() { + if (!store) { + const { default: Store } = await import('electron-store'); + store = new Store({ + name: 'active-workspace', + defaults: { [STORE_KEY]: null as string | null }, + }); + // One-time migration from the legacy `active-search-space` store so the + // user's last-selected workspace survives the rename. + if (store.get(STORE_KEY) == null) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const legacy: any = new Store({ + name: 'active-search-space', + defaults: { activeSearchSpaceId: null as string | null }, + }); + const prev = legacy.get('activeSearchSpaceId') as string | null; + if (prev != null) store.set(STORE_KEY, prev); + } + } + return store; +} + +export async function getActiveWorkspaceId(): Promise { + const s = await getStore(); + return (s.get(STORE_KEY) as string | null) ?? null; +} + +export async function setActiveWorkspaceId(id: string): Promise { + const s = await getStore(); + s.set(STORE_KEY, id); +} diff --git a/surfsense_desktop/src/modules/agent-filesystem-tree-watcher.ts b/surfsense_desktop/src/modules/agent-filesystem-tree-watcher.ts index 600f84fd5..6235e0342 100644 --- a/surfsense_desktop/src/modules/agent-filesystem-tree-watcher.ts +++ b/surfsense_desktop/src/modules/agent-filesystem-tree-watcher.ts @@ -8,7 +8,7 @@ const SAFETY_POLL_MS = 60_000; const EVENT_DEBOUNCE_MS = 700; export type AgentFilesystemTreeWatchOptions = { - searchSpaceId?: number | null; + workspaceId?: number | null; rootPaths: string[]; excludePatterns?: string[] | null; fileExtensions?: string[] | null; @@ -17,7 +17,7 @@ export type AgentFilesystemTreeWatchOptions = { type TreeDirtyReason = 'watcher_event' | 'safety_poll'; type TreeDirtyEvent = { - searchSpaceId: number | null; + workspaceId: number | null; reason: TreeDirtyReason; rootPath: string; changedPath: string | null; @@ -25,7 +25,7 @@ type TreeDirtyEvent = { }; type WatchSession = { - searchSpaceId: number | null; + workspaceId: number | null; optionsSignature: string; rootPaths: string[]; excludePatterns: string[]; @@ -40,15 +40,15 @@ type WatchSession = { const sessions = new Map(); -function normalizeSearchSpaceId(searchSpaceId?: number | null): number | null { - if (typeof searchSpaceId === 'number' && Number.isFinite(searchSpaceId) && searchSpaceId > 0) { - return searchSpaceId; +function normalizeWorkspaceId(workspaceId?: number | null): number | null { + if (typeof workspaceId === 'number' && Number.isFinite(workspaceId) && workspaceId > 0) { + return workspaceId; } return null; } -function getSessionKey(searchSpaceId?: number | null): string { - const normalized = normalizeSearchSpaceId(searchSpaceId); +function getSessionKey(workspaceId?: number | null): string { + const normalized = normalizeWorkspaceId(workspaceId); return normalized === null ? 'default' : String(normalized); } @@ -71,13 +71,13 @@ function normalizeExtensions(value: string[] | null | undefined): string[] | nul } function buildOptionsSignature( - searchSpaceId: number | null, + workspaceId: number | null, rootPaths: string[], excludePatterns: string[], fileExtensions: string[] | null ): string { return JSON.stringify({ - searchSpaceId, + workspaceId, rootPaths: [...rootPaths].sort(), excludePatterns: [...excludePatterns].sort(), fileExtensions: fileExtensions ? [...fileExtensions].sort() : null, @@ -99,10 +99,10 @@ async function buildRootSnapshotSignature( rootPath: string ): Promise { let hash = 2166136261; - hash = hashText(`space:${session.searchSpaceId ?? 'default'}|root:${rootPath}`, hash); + hash = hashText(`space:${session.workspaceId ?? 'default'}|root:${rootPath}`, hash); const files = await listAgentFilesystemFiles({ rootPath, - searchSpaceId: session.searchSpaceId, + workspaceId: session.workspaceId, excludePatterns: session.excludePatterns, fileExtensions: session.fileExtensions, }); @@ -118,13 +118,13 @@ async function buildRootSnapshotSignature( } function sendTreeDirtyEvent( - searchSpaceId: number | null, + workspaceId: number | null, reason: TreeDirtyReason, rootPath: string, changedPath: string | null ): void { const payload: TreeDirtyEvent = { - searchSpaceId, + workspaceId, reason, rootPath, changedPath, @@ -158,7 +158,7 @@ function scheduleDirtyEmit( session.pendingDirtyByRoot.clear(); for (const [pendingRootPath, payload] of pending) { sendTreeDirtyEvent( - session.searchSpaceId, + session.workspaceId, payload.reason, pendingRootPath, payload.changedPath @@ -183,21 +183,21 @@ async function closeSession(session: WatchSession): Promise { export async function startAgentFilesystemTreeWatch( options: AgentFilesystemTreeWatchOptions ): Promise<{ ok: true }> { - const searchSpaceId = normalizeSearchSpaceId(options.searchSpaceId); + const workspaceId = normalizeWorkspaceId(options.workspaceId); const rootPaths = Array.from( new Set(normalizeList(options.rootPaths).map((rootPath) => normalizeRootPath(rootPath))) ); const excludePatterns = Array.from(new Set(normalizeList(options.excludePatterns))); const fileExtensions = normalizeExtensions(options.fileExtensions); - const sessionKey = getSessionKey(searchSpaceId); + const sessionKey = getSessionKey(workspaceId); if (rootPaths.length === 0) { - await stopAgentFilesystemTreeWatch(searchSpaceId); + await stopAgentFilesystemTreeWatch(workspaceId); return { ok: true }; } const optionsSignature = buildOptionsSignature( - searchSpaceId, + workspaceId, rootPaths, excludePatterns, fileExtensions @@ -228,7 +228,7 @@ export async function startAgentFilesystemTreeWatch( ); const session: WatchSession = { - searchSpaceId, + workspaceId, optionsSignature, rootPaths, excludePatterns, @@ -291,9 +291,9 @@ export async function startAgentFilesystemTreeWatch( } export async function stopAgentFilesystemTreeWatch( - searchSpaceId?: number | null + workspaceId?: number | null ): Promise<{ ok: true }> { - const sessionKey = getSessionKey(searchSpaceId); + const sessionKey = getSessionKey(workspaceId); const session = sessions.get(sessionKey); if (!session) return { ok: true }; sessions.delete(sessionKey); diff --git a/surfsense_desktop/src/modules/agent-filesystem.ts b/surfsense_desktop/src/modules/agent-filesystem.ts index 608f8c4a4..7a24876f2 100644 --- a/surfsense_desktop/src/modules/agent-filesystem.ts +++ b/surfsense_desktop/src/modules/agent-filesystem.ts @@ -119,9 +119,9 @@ async function normalizeLocalRootPathsCanonical(paths: unknown): Promise 0) { - return String(searchSpaceId); +function normalizeWorkspaceKey(workspaceId?: number | null): string { + if (typeof workspaceId === "number" && Number.isFinite(workspaceId) && workspaceId > 0) { + return String(workspaceId); } return DEFAULT_SPACE_KEY; } @@ -147,9 +147,9 @@ function getDefaultStore(): AgentFilesystemSettingsStore { function getSettingsFromStore( store: AgentFilesystemSettingsStore, - searchSpaceId?: number | null + workspaceId?: number | null ): AgentFilesystemSettings { - const key = normalizeSearchSpaceKey(searchSpaceId); + const key = normalizeWorkspaceKey(workspaceId); return store.spaces[key] ?? getDefaultSettings(); } @@ -194,22 +194,22 @@ async function loadAgentFilesystemSettingsStore(): Promise { const store = await loadAgentFilesystemSettingsStore(); - return getSettingsFromStore(store, searchSpaceId); + return getSettingsFromStore(store, workspaceId); } export async function setAgentFilesystemSettings( - searchSpaceId: number | null | undefined, + workspaceId: number | null | undefined, settings: { mode?: AgentFilesystemMode; localRootPaths?: string[] | null; } ): Promise { const store = await loadAgentFilesystemSettingsStore(); - const key = normalizeSearchSpaceKey(searchSpaceId); - const current = getSettingsFromStore(store, searchSpaceId); + const key = normalizeWorkspaceKey(workspaceId); + const current = getSettingsFromStore(store, workspaceId); const nextMode = settings.mode === "cloud" || settings.mode === "desktop_local_folder" ? settings.mode @@ -291,7 +291,7 @@ export type LocalRootMount = { export type AgentFilesystemListOptions = { rootPath: string; - searchSpaceId?: number | null; + workspaceId?: number | null; excludePatterns?: string[] | null; fileExtensions?: string[] | null; }; @@ -332,9 +332,9 @@ function buildRootMounts(rootPaths: string[]): LocalRootMount[] { } export async function getAgentFilesystemMounts( - searchSpaceId?: number | null + workspaceId?: number | null ): Promise { - const rootPaths = await resolveCurrentRootPaths(searchSpaceId); + const rootPaths = await resolveCurrentRootPaths(workspaceId); return buildRootMounts(rootPaths); } @@ -371,7 +371,7 @@ function normalizeExcludeSet(excludePatterns: string[] | null | undefined): Set< export async function listAgentFilesystemFiles( options: AgentFilesystemListOptions ): Promise { - const allowedRootPaths = await resolveCurrentRootPaths(options.searchSpaceId); + const allowedRootPaths = await resolveCurrentRootPaths(options.workspaceId); const requestedRootPath = await canonicalizeRootPath(options.rootPath); const normalizedRequestedRoot = normalizeComparablePath(requestedRootPath); const allowedRoots = new Set( @@ -474,8 +474,8 @@ function toMountedVirtualPath(mount: string, rootPath: string, absolutePath: str return `/${mount}${relativePath}`; } -async function resolveCurrentRootPaths(searchSpaceId?: number | null): Promise { - const settings = await getAgentFilesystemSettings(searchSpaceId); +async function resolveCurrentRootPaths(workspaceId?: number | null): Promise { + const settings = await getAgentFilesystemSettings(workspaceId); if (settings.localRootPaths.length === 0) { throw new Error("No local filesystem roots selected"); } @@ -484,9 +484,9 @@ async function resolveCurrentRootPaths(searchSpaceId?: number | null): Promise { - const rootPaths = await resolveCurrentRootPaths(searchSpaceId); + const rootPaths = await resolveCurrentRootPaths(workspaceId); const mounts = buildRootMounts(rootPaths); const { mount, subPath } = parseMountedVirtualPath(virtualPath, mounts); const rootMount = findMountByName(mounts, mount); @@ -507,9 +507,9 @@ export async function readAgentLocalFileText( export async function writeAgentLocalFileText( virtualPath: string, content: string, - searchSpaceId?: number | null + workspaceId?: number | null ): Promise<{ path: string }> { - const rootPaths = await resolveCurrentRootPaths(searchSpaceId); + const rootPaths = await resolveCurrentRootPaths(workspaceId); const mounts = buildRootMounts(rootPaths); const { mount, subPath } = parseMountedVirtualPath(virtualPath, mounts); const rootMount = findMountByName(mounts, mount); diff --git a/surfsense_desktop/src/modules/folder-watcher.ts b/surfsense_desktop/src/modules/folder-watcher.ts index ee4214d8a..4115b8db5 100644 --- a/surfsense_desktop/src/modules/folder-watcher.ts +++ b/surfsense_desktop/src/modules/folder-watcher.ts @@ -5,6 +5,7 @@ import * as path from 'path'; import * as fs from 'fs'; import { IPC_CHANNELS } from '../ipc/channels'; import { trackEvent } from './analytics'; +import { migrateWatchedFolderConfigs } from './migrate-watched-folders'; export interface WatchedFolderConfig { path: string; @@ -12,7 +13,7 @@ export interface WatchedFolderConfig { excludePatterns: string[]; fileExtensions: string[] | null; rootFolderId: number | null; - searchSpaceId: number; + workspaceId: number; active: boolean; } @@ -27,7 +28,7 @@ type FolderSyncAction = 'add' | 'change' | 'unlink'; export interface FolderSyncFileChangedEvent { id: string; rootFolderId: number | null; - searchSpaceId: number; + workspaceId: number; folderPath: string; folderName: string; relativePath: string; @@ -68,6 +69,12 @@ async function getStore() { [STORE_KEY]: [] as WatchedFolderConfig[], }, }); + // One-time read-migration: legacy persisted configs stored the workspace as + // `searchSpaceId`. Map it to `workspaceId` and write back once so existing + // watched folders keep their sync target after the rename. + const raw = store.get(STORE_KEY, []) as Array>; + const { configs, migrated } = migrateWatchedFolderConfigs(raw); + if (migrated) store.set(STORE_KEY, configs); } return store; } @@ -267,7 +274,7 @@ async function startWatcher(config: WatchedFolderConfig) { if (storedMtime === undefined) { sendFileChangedEvent({ rootFolderId: config.rootFolderId, - searchSpaceId: config.searchSpaceId, + workspaceId: config.workspaceId, folderPath: config.path, folderName: config.name, relativePath: rel, @@ -278,7 +285,7 @@ async function startWatcher(config: WatchedFolderConfig) { } else if (Math.abs(currentMtime - storedMtime) >= MTIME_TOLERANCE_S * 1000) { sendFileChangedEvent({ rootFolderId: config.rootFolderId, - searchSpaceId: config.searchSpaceId, + workspaceId: config.workspaceId, folderPath: config.path, folderName: config.name, relativePath: rel, @@ -295,7 +302,7 @@ async function startWatcher(config: WatchedFolderConfig) { if (!(rel in currentMap)) { sendFileChangedEvent({ rootFolderId: config.rootFolderId, - searchSpaceId: config.searchSpaceId, + workspaceId: config.workspaceId, folderPath: config.path, folderName: config.name, relativePath: rel, @@ -346,7 +353,7 @@ async function startWatcher(config: WatchedFolderConfig) { sendFileChangedEvent({ rootFolderId: config.rootFolderId, - searchSpaceId: config.searchSpaceId, + workspaceId: config.workspaceId, folderPath: config.path, folderName: config.name, relativePath, @@ -403,7 +410,7 @@ export async function addWatchedFolder( } trackEvent('desktop_folder_watch_added', { - search_space_id: config.searchSpaceId, + workspace_id: config.workspaceId, root_folder_id: config.rootFolderId, active: config.active, has_exclude_patterns: (config.excludePatterns?.length ?? 0) > 0, @@ -431,7 +438,7 @@ export async function removeWatchedFolder( if (removed) { trackEvent('desktop_folder_watch_removed', { - search_space_id: removed.searchSpaceId, + workspace_id: removed.workspaceId, root_folder_id: removed.rootFolderId, }); } diff --git a/surfsense_desktop/src/modules/migrate-watched-folders.test.ts b/surfsense_desktop/src/modules/migrate-watched-folders.test.ts new file mode 100644 index 000000000..cd7b3623f --- /dev/null +++ b/surfsense_desktop/src/modules/migrate-watched-folders.test.ts @@ -0,0 +1,21 @@ +import assert from "node:assert/strict"; +import { test } from "node:test"; +import { migrateWatchedFolderConfigs } from "./migrate-watched-folders.ts"; + +// Run with: node --test src/modules/migrate-watched-folders.test.ts +test("maps legacy searchSpaceId to workspaceId and flags migration", () => { + const { configs, migrated } = migrateWatchedFolderConfigs<{ workspaceId?: number }>([ + { path: "/tmp/a", searchSpaceId: 42 }, + ]); + assert.equal(migrated, true); + assert.equal(configs[0].workspaceId, 42); + assert.equal("searchSpaceId" in (configs[0] as object), false); +}); + +test("leaves configs that already have workspaceId untouched", () => { + const { configs, migrated } = migrateWatchedFolderConfigs<{ workspaceId?: number }>([ + { path: "/tmp/b", workspaceId: 5 }, + ]); + assert.equal(migrated, false); + assert.equal(configs[0].workspaceId, 5); +}); diff --git a/surfsense_desktop/src/modules/migrate-watched-folders.ts b/surfsense_desktop/src/modules/migrate-watched-folders.ts new file mode 100644 index 000000000..2aa30fcd3 --- /dev/null +++ b/surfsense_desktop/src/modules/migrate-watched-folders.ts @@ -0,0 +1,23 @@ +/** + * One-time read-migration for persisted watched-folder configs: legacy configs + * stored the workspace as `searchSpaceId`. Map it to `workspaceId` so existing + * watched folders keep their sync target after the rename. Pure + dependency-free + * so it can be unit-checked without loading electron-store. + * + * Returns the migrated configs and whether anything changed (so callers can + * write back only when needed). + */ +export function migrateWatchedFolderConfigs( + raw: Array> +): { configs: T[]; migrated: boolean } { + let migrated = false; + const configs = raw.map((c) => { + if (c.workspaceId === undefined && c.searchSpaceId !== undefined) { + migrated = true; + const { searchSpaceId, ...rest } = c; + return { ...rest, workspaceId: searchSpaceId } as unknown as T; + } + return c as unknown as T; + }); + return { configs, migrated }; +} diff --git a/surfsense_desktop/src/modules/quick-ask.ts b/surfsense_desktop/src/modules/quick-ask.ts index 0807e2e08..4b48a3d19 100644 --- a/surfsense_desktop/src/modules/quick-ask.ts +++ b/surfsense_desktop/src/modules/quick-ask.ts @@ -4,14 +4,14 @@ import { IPC_CHANNELS } from '../ipc/channels'; import { checkAccessibilityPermission, getFrontmostApp, simulateCopy, simulatePaste } from './platform'; import { getServerOrigin } from './server'; import { getShortcuts } from './shortcuts'; -import { getActiveSearchSpaceId } from './active-search-space'; +import { getActiveWorkspaceId } from './active-workspace'; import { trackEvent } from './analytics'; let currentShortcut = ''; let quickAskWindow: BrowserWindow | null = null; let pendingText = ''; let pendingMode = ''; -let pendingSearchSpaceId: string | null = null; +let pendingWorkspaceId: string | null = null; let sourceApp = ''; let savedClipboard = ''; @@ -57,7 +57,7 @@ function createQuickAskWindow(x: number, y: number): BrowserWindow { skipTaskbar: true, }); - const spaceId = pendingSearchSpaceId; + const spaceId = pendingWorkspaceId; const route = spaceId ? `/dashboard/${spaceId}/new-chat` : '/dashboard'; quickAskWindow.loadURL(`${getServerOrigin()}${route}?quickAssist=true`); @@ -87,7 +87,7 @@ function createQuickAskWindow(x: number, y: number): BrowserWindow { async function openQuickAsk(text: string): Promise { pendingText = text; pendingMode = 'quick-assist'; - pendingSearchSpaceId = await getActiveSearchSpaceId(); + pendingWorkspaceId = await getActiveWorkspaceId(); const cursor = screen.getCursorScreenPoint(); const pos = clampToScreen(cursor.x, cursor.y, 450, 750); createQuickAskWindow(pos.x, pos.y); diff --git a/surfsense_desktop/src/modules/window.ts b/surfsense_desktop/src/modules/window.ts index bfcd9b512..3ab47fb58 100644 --- a/surfsense_desktop/src/modules/window.ts +++ b/surfsense_desktop/src/modules/window.ts @@ -3,7 +3,7 @@ import path from 'path'; import { trackEvent } from './analytics'; import { showErrorDialog } from './errors'; import { getServerOrigin, getServerPort } from './server'; -import { setActiveSearchSpaceId } from './active-search-space'; +import { setActiveWorkspaceId } from './active-workspace'; const isDev = !app.isPackaged; const isMac = process.platform === 'darwin'; @@ -140,14 +140,14 @@ export function createMainWindow(initialPath = '/dashboard'): BrowserWindow { }); // Auto-sync active search space from URL navigation - const syncSearchSpace = (url: string) => { + const syncWorkspace = (url: string) => { const match = url.match(/\/dashboard\/(\d+)/); if (match) { - setActiveSearchSpaceId(match[1]); + setActiveWorkspaceId(match[1]); } }; - mainWindow.webContents.on('did-navigate', (_event, url) => syncSearchSpace(url)); - mainWindow.webContents.on('did-navigate-in-page', (_event, url) => syncSearchSpace(url)); + mainWindow.webContents.on('did-navigate', (_event, url) => syncWorkspace(url)); + mainWindow.webContents.on('did-navigate-in-page', (_event, url) => syncWorkspace(url)); if (isDev) { mainWindow.webContents.openDevTools(); diff --git a/surfsense_desktop/src/preload.ts b/surfsense_desktop/src/preload.ts index 07f363a59..96079d241 100644 --- a/surfsense_desktop/src/preload.ts +++ b/surfsense_desktop/src/preload.ts @@ -74,10 +74,10 @@ contextBridge.exposeInMainWorld('electronAPI', { // Browse files via native dialog browseFiles: () => ipcRenderer.invoke(IPC_CHANNELS.BROWSE_FILES), readLocalFiles: (paths: string[]) => ipcRenderer.invoke(IPC_CHANNELS.READ_LOCAL_FILES, paths), - readAgentLocalFileText: (virtualPath: string, searchSpaceId?: number | null) => - ipcRenderer.invoke(IPC_CHANNELS.READ_AGENT_LOCAL_FILE_TEXT, virtualPath, searchSpaceId), - writeAgentLocalFileText: (virtualPath: string, content: string, searchSpaceId?: number | null) => - ipcRenderer.invoke(IPC_CHANNELS.WRITE_AGENT_LOCAL_FILE_TEXT, virtualPath, content, searchSpaceId), + readAgentLocalFileText: (virtualPath: string, workspaceId?: number | null) => + ipcRenderer.invoke(IPC_CHANNELS.READ_AGENT_LOCAL_FILE_TEXT, virtualPath, workspaceId), + writeAgentLocalFileText: (virtualPath: string, content: string, workspaceId?: number | null) => + ipcRenderer.invoke(IPC_CHANNELS.WRITE_AGENT_LOCAL_FILE_TEXT, virtualPath, content, workspaceId), // Auth token sync across windows getAccessToken: () => ipcRenderer.invoke(IPC_CHANNELS.GET_ACCESS_TOKEN), @@ -104,9 +104,9 @@ contextBridge.exposeInMainWorld('electronAPI', { ipcRenderer.invoke(IPC_CHANNELS.SET_AUTO_LAUNCH, { enabled, openAsHidden }), // Active search space - getActiveSearchSpace: () => ipcRenderer.invoke(IPC_CHANNELS.GET_ACTIVE_SEARCH_SPACE), - setActiveSearchSpace: (id: string) => - ipcRenderer.invoke(IPC_CHANNELS.SET_ACTIVE_SEARCH_SPACE, id), + getActiveWorkspace: () => ipcRenderer.invoke(IPC_CHANNELS.GET_ACTIVE_WORKSPACE), + setActiveWorkspace: (id: string) => + ipcRenderer.invoke(IPC_CHANNELS.SET_ACTIVE_WORKSPACE, id), // Analytics bridge — lets posthog-js running inside the Next.js renderer // mirror identify/reset/capture into the Electron main-process PostHog @@ -118,27 +118,27 @@ contextBridge.exposeInMainWorld('electronAPI', { ipcRenderer.invoke(IPC_CHANNELS.ANALYTICS_CAPTURE, { event, properties }), getAnalyticsContext: () => ipcRenderer.invoke(IPC_CHANNELS.ANALYTICS_GET_CONTEXT), // Agent filesystem mode - getAgentFilesystemSettings: (searchSpaceId?: number | null) => - ipcRenderer.invoke(IPC_CHANNELS.AGENT_FILESYSTEM_GET_SETTINGS, searchSpaceId), - getAgentFilesystemMounts: (searchSpaceId?: number | null) => - ipcRenderer.invoke(IPC_CHANNELS.AGENT_FILESYSTEM_GET_MOUNTS, searchSpaceId), + getAgentFilesystemSettings: (workspaceId?: number | null) => + ipcRenderer.invoke(IPC_CHANNELS.AGENT_FILESYSTEM_GET_SETTINGS, workspaceId), + getAgentFilesystemMounts: (workspaceId?: number | null) => + ipcRenderer.invoke(IPC_CHANNELS.AGENT_FILESYSTEM_GET_MOUNTS, workspaceId), listAgentFilesystemFiles: (options: { rootPath: string; - searchSpaceId?: number | null; + workspaceId?: number | null; excludePatterns?: string[] | null; fileExtensions?: string[] | null; }) => ipcRenderer.invoke(IPC_CHANNELS.AGENT_FILESYSTEM_LIST_FILES, options), startAgentFilesystemTreeWatch: (options: { - searchSpaceId?: number | null; + workspaceId?: number | null; rootPaths: string[]; excludePatterns?: string[] | null; fileExtensions?: string[] | null; }) => ipcRenderer.invoke(IPC_CHANNELS.AGENT_FILESYSTEM_TREE_WATCH_START, options), - stopAgentFilesystemTreeWatch: (searchSpaceId?: number | null) => - ipcRenderer.invoke(IPC_CHANNELS.AGENT_FILESYSTEM_TREE_WATCH_STOP, searchSpaceId), + stopAgentFilesystemTreeWatch: (workspaceId?: number | null) => + ipcRenderer.invoke(IPC_CHANNELS.AGENT_FILESYSTEM_TREE_WATCH_STOP, workspaceId), onAgentFilesystemTreeDirty: ( callback: (data: { - searchSpaceId: number | null; + workspaceId: number | null; reason: 'watcher_event' | 'safety_poll'; rootPath: string; changedPath: string | null; @@ -148,7 +148,7 @@ contextBridge.exposeInMainWorld('electronAPI', { const listener = ( _event: unknown, data: { - searchSpaceId: number | null; + workspaceId: number | null; reason: 'watcher_event' | 'safety_poll'; rootPath: string; changedPath: string | null; @@ -163,7 +163,7 @@ contextBridge.exposeInMainWorld('electronAPI', { setAgentFilesystemSettings: (settings: { mode?: "cloud" | "desktop_local_folder"; localRootPaths?: string[] | null; - }, searchSpaceId?: number | null) => - ipcRenderer.invoke(IPC_CHANNELS.AGENT_FILESYSTEM_SET_SETTINGS, { searchSpaceId, settings }), + }, workspaceId?: number | null) => + ipcRenderer.invoke(IPC_CHANNELS.AGENT_FILESYSTEM_SET_SETTINGS, { workspaceId, settings }), pickAgentFilesystemRoot: () => ipcRenderer.invoke(IPC_CHANNELS.AGENT_FILESYSTEM_PICK_ROOT), }); diff --git a/surfsense_desktop/tsconfig.json b/surfsense_desktop/tsconfig.json index a7862e222..4315c7571 100644 --- a/surfsense_desktop/tsconfig.json +++ b/surfsense_desktop/tsconfig.json @@ -12,5 +12,5 @@ "noEmit": true }, "include": ["src/**/*.ts"], - "exclude": ["node_modules", "dist", "scripts"] + "exclude": ["node_modules", "dist", "scripts", "src/**/*.test.ts"] } diff --git a/surfsense_obsidian/README.md b/surfsense_obsidian/README.md index 6c4befcc9..52d88ab90 100644 --- a/surfsense_obsidian/README.md +++ b/surfsense_obsidian/README.md @@ -52,7 +52,7 @@ Open **Settings → SurfSense** in Obsidian and fill in: | --- | --- | | Server URL | `https://surfsense.com` for SurfSense Cloud, or your self-hosted URL | | API token | Create a personal access token from the *Connectors → Obsidian* dialog or *User settings → API access* in the SurfSense web app | -| Search space | Pick the search space this vault should sync into | +| Search space | Pick the workspace this vault should sync into | | Vault name | Defaults to your Obsidian vault name; rename if you have multiple vaults | | Sync mode | *Auto* (recommended) or *Manual* | | Exclude patterns | Glob patterns of folders/files to skip (e.g. `.trash`, `_attachments`, `templates/**`) | @@ -82,7 +82,7 @@ addendum. - `vault_id`: a random UUID minted in the plugin's `data.json` on first run - `vault_name`: the Obsidian vault folder name -- `search_space_id`: the SurfSense search space you picked +- `workspace_id`: the SurfSense workspace you picked **Sent per note on `/sync`, `/rename`, `/delete`:** diff --git a/surfsense_obsidian/pnpm-lock.yaml b/surfsense_obsidian/pnpm-lock.yaml new file mode 100644 index 000000000..92b269675 --- /dev/null +++ b/surfsense_obsidian/pnpm-lock.yaml @@ -0,0 +1,3153 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + obsidian: + specifier: latest + version: 1.13.1(@codemirror/state@6.5.0)(@codemirror/view@6.38.6) + devDependencies: + '@eslint/js': + specifier: 9.30.1 + version: 9.30.1 + '@types/node': + specifier: ^20.19.39 + version: 20.19.43 + esbuild: + specifier: 0.25.5 + version: 0.25.5 + eslint-plugin-obsidianmd: + specifier: 0.1.9 + version: 0.1.9(@eslint/js@9.30.1)(@eslint/json@0.14.0)(@typescript-eslint/parser@8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(obsidian@1.13.1(@codemirror/state@6.5.0)(@codemirror/view@6.38.6))(typescript-eslint@8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)) + globals: + specifier: 14.0.0 + version: 14.0.0 + jiti: + specifier: 2.6.1 + version: 2.6.1 + tslib: + specifier: 2.4.0 + version: 2.4.0 + typescript: + specifier: ^5.8.3 + version: 5.9.3 + typescript-eslint: + specifier: 8.35.1 + version: 8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + +packages: + + '@codemirror/state@6.5.0': + resolution: {integrity: sha512-MwBHVK60IiIHDcoMet78lxt6iw5gJOGSbNbOIVBHWVXIH4/Nq1+GQgLLGgI1KlnN86WDXsPudVaqYHKBIx7Eyw==} + + '@codemirror/view@6.38.6': + resolution: {integrity: sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw==} + + '@esbuild/aix-ppc64@0.25.5': + resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.5': + resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.5': + resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.5': + resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.5': + resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.5': + resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.5': + resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.5': + resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.5': + resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.5': + resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.5': + resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.5': + resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.5': + resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.5': + resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.5': + resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.5': + resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.5': + resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.5': + resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.5': + resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.5': + resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.5': + resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.25.5': + resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.5': + resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.5': + resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.5': + resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.30.1': + resolution: {integrity: sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.4': + resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/json@0.14.0': + resolution: {integrity: sha512-rvR/EZtvUG3p9uqrSmcDJPYSH7atmWr0RnFWN6m917MAPx82+zQgPUmDu0whPFG6XTyM0vB/hR6c1Q63OaYtCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/momoa@3.3.10': + resolution: {integrity: sha512-KWiFQpSAqEIyrTXko3hFNLeQvSK8zXlJQzhhxsyVn58WFRYXST99b3Nqnu+ttOtjds2Pl2grUHGpe2NzhPynuQ==} + engines: {node: '>=18'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@marijn/find-cluster-break@1.0.3': + resolution: {integrity: sha512-FY+MKLBoTsLNJF/eLWaOsXGdz6uh3Iu1axjPf6TUq92IYumcTcXWHoS747JARLkcdlJ/Waiaxc5wQfFO8jC6NA==} + + '@microsoft/eslint-plugin-sdl@1.1.0': + resolution: {integrity: sha512-dxdNHOemLnBhfY3eByrujX9KyLigcNtW8sU+axzWv5nLGcsSBeKW2YYyTpfPo1hV8YPOmIGnfA4fZHyKVtWqBQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + eslint: ^9 + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgr/core@0.1.2': + resolution: {integrity: sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@types/codemirror@5.60.8': + resolution: {integrity: sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==} + + '@types/eslint@8.56.2': + resolution: {integrity: sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + + '@types/node@20.19.43': + resolution: {integrity: sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==} + + '@types/tern@0.23.9': + resolution: {integrity: sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==} + + '@typescript-eslint/eslint-plugin@8.35.1': + resolution: {integrity: sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.35.1 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/parser@8.35.1': + resolution: {integrity: sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/project-service@8.35.1': + resolution: {integrity: sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/scope-manager@8.35.1': + resolution: {integrity: sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.35.1': + resolution: {integrity: sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/type-utils@8.35.1': + resolution: {integrity: sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/types@8.35.1': + resolution: {integrity: sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.35.1': + resolution: {integrity: sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/utils@8.35.1': + resolution: {integrity: sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/visitor-keys@8.35.1': + resolution: {integrity: sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-includes@3.1.9: + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + brace-expansion@1.1.15: + resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} + + brace-expansion@2.1.1: + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + crelt@1.0.7: + resolution: {integrity: sha512-aK6BbWfhf4U/wCcLHKPJl/xa6VkVstRaPywWtMKGwuOLc/wZTyQYuoxgvZnNsBvv7Kg3YTBQYYBCggcviQczuA==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + empathic@2.0.1: + resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==} + engines: {node: '>=14'} + + enhanced-resolve@5.24.1: + resolution: {integrity: sha512-7DdUaTjmNwMcH2gLr1qycesKII3BK4RLy/mdAb7x10Lq7bR4aNKHt1BR1ZALSv0rPM/hF5wYF0PhGop/rJm8vw==} + engines: {node: '>=10.13.0'} + + es-abstract-get@1.0.0: + resolution: {integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==} + engines: {node: '>= 0.4'} + + es-abstract@1.24.2: + resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.3.3: + resolution: {integrity: sha512-0PuBxFi+4uPanB97iDxCLWuHeYud2FALrw5HFZGtAF38UpJDbDC8frwp2cnDyae692CQ0dou60UwWfhgsa4U/g==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.4: + resolution: {integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==} + engines: {node: '>= 0.4'} + + esbuild@0.25.5: + resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} + engines: {node: '>=18'} + hasBin: true + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-compat-utils@0.5.1: + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + + eslint-import-resolver-node@0.3.10: + resolution: {integrity: sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==} + + eslint-module-utils@2.14.0: + resolution: {integrity: sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-depend@1.3.1: + resolution: {integrity: sha512-1uo2rFAr9vzNrCYdp7IBZRB54LiyVxfaIso0R6/QV3t6Dax6DTbW/EV2Hktf0f4UtmGHK8UyzJWI382pwW04jw==} + + eslint-plugin-es-x@7.8.0: + resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8' + + eslint-plugin-import@2.32.0: + resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-json-schema-validator@5.1.0: + resolution: {integrity: sha512-ZmVyxRIjm58oqe2kTuy90PpmZPrrKvOjRPXKzq8WCgRgAkidCgm5X8domL2KSfadZ3QFAmifMgGTcVNhZ5ez2g==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + eslint-plugin-n@17.10.3: + resolution: {integrity: sha512-ySZBfKe49nQZWR1yFaA0v/GsH6Fgp8ah6XV0WDz6CN8WO0ek4McMzb7A2xnf4DCYV43frjCygvb9f/wx7UUxRw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.23.0' + + eslint-plugin-obsidianmd@0.1.9: + resolution: {integrity: sha512-/gyo5vky3Y7re4BtT/8MQbHU5Wes4o6VRqas3YmXE7aTCnMsdV0kfzV1GDXJN9Hrsc9UQPoeKUMiapKL0aGE4g==} + engines: {node: '>= 18'} + hasBin: true + peerDependencies: + '@eslint/js': ^9.30.1 + '@eslint/json': 0.14.0 + eslint: '>=9.0.0 <10.0.0' + obsidian: 1.8.7 + typescript-eslint: ^8.35.1 + + eslint-plugin-react@7.37.3: + resolution: {integrity: sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-plugin-security@1.4.0: + resolution: {integrity: sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==} + + eslint-plugin-security@2.1.1: + resolution: {integrity: sha512-7cspIGj7WTfR3EhaILzAPcfCo5R9FbeWvbgsPYWivSurTBKW88VQxtP3c4aWMG9Hz/GfJlJVdXEJ3c8LqS+u2w==} + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.39.4: + resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.1.3: + resolution: {integrity: sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.2.0: + resolution: {integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-document.all@1.0.0: + resolution: {integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.3.0: + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-migrate@2.0.0: + resolution: {integrity: sha512-r38SVTtojDRp4eD6WsCqiE0eNDt4v1WalBXb9cyZYw9ai5cGtBwzRNWjHzJl38w6TxFkXAIA7h+fyX3tnrAFhQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonc-eslint-parser@2.4.2: + resolution: {integrity: sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimatch@8.0.7: + resolution: {integrity: sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + module-replacements@2.11.0: + resolution: {integrity: sha512-j5sNQm3VCpQQ7nTqGeOZtoJtV3uKERgCBm9QRhmGRiXiqkf7iRFOkfxdJRZWLkqYY8PNf4cDQF/WfXUYLENrRA==} + + moment@2.29.4: + resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-exports-info@1.6.2: + resolution: {integrity: sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==} + engines: {node: '>= 0.4'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + + obsidian@1.13.1: + resolution: {integrity: sha512-qtTEA2pmhJzhuhJqzbBFRYhpIOqvW+krDYjtFynv66KbxBbumHBlsJfWw3I4jtnK/6fZwbQhCrmmDdRwXmX56w==} + peerDependencies: + '@codemirror/state': 6.5.0 + '@codemirror/view': 6.38.6 + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@2.0.0-next.7: + resolution: {integrity: sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==} + engines: {node: '>= 0.4'} + hasBin: true + + ret@0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.4: + resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safe-regex@1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + + safe-regex@2.1.1: + resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.11: + resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.10: + resolution: {integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + style-mod@4.1.3: + resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + synckit@0.9.3: + resolution: {integrity: sha512-JJoOEKTfL1urb1mDoEblhD9NhEbWmq9jHEMEnxoC4ujUaZ4itA8vKgwkFAyNClgxplLi9tsUKX+EduK0p/l7sg==} + engines: {node: ^14.18.0 || >=16.0.0} + + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toml-eslint-parser@0.9.3: + resolution: {integrity: sha512-moYoCvkNUAPCxSW9jmHmRElhm4tVJpHL8ItC/+uYD0EpPSFXbck7yREz9tNdJVTSpHVod8+HoipcpbQ0oE6gsw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.8: + resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} + engines: {node: '>= 0.4'} + + typescript-eslint@8.35.1: + resolution: {integrity: sha512-xslJjFzhOmHYQzSB/QTeASAHbjmxOGEP6Coh93TXmUBFQoJ1VU35UHIDmG06Jd6taf3wqqC1ntBnCMeymy5Ovw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.22: + resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yaml-eslint-parser@1.3.2: + resolution: {integrity: sha512-odxVsHAkZYYglR30aPYRY4nUGJnoJ2y1ww2HDvZALo0BDETv9kWbi16J52eHs+PWRNmF4ub6nZqfVOeesOvntg==} + engines: {node: ^14.17.0 || >=16.0.0} + + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@codemirror/state@6.5.0': + dependencies: + '@marijn/find-cluster-break': 1.0.3 + + '@codemirror/view@6.38.6': + dependencies: + '@codemirror/state': 6.5.0 + crelt: 1.0.7 + style-mod: 4.1.3 + w3c-keyname: 2.2.8 + + '@esbuild/aix-ppc64@0.25.5': + optional: true + + '@esbuild/android-arm64@0.25.5': + optional: true + + '@esbuild/android-arm@0.25.5': + optional: true + + '@esbuild/android-x64@0.25.5': + optional: true + + '@esbuild/darwin-arm64@0.25.5': + optional: true + + '@esbuild/darwin-x64@0.25.5': + optional: true + + '@esbuild/freebsd-arm64@0.25.5': + optional: true + + '@esbuild/freebsd-x64@0.25.5': + optional: true + + '@esbuild/linux-arm64@0.25.5': + optional: true + + '@esbuild/linux-arm@0.25.5': + optional: true + + '@esbuild/linux-ia32@0.25.5': + optional: true + + '@esbuild/linux-loong64@0.25.5': + optional: true + + '@esbuild/linux-mips64el@0.25.5': + optional: true + + '@esbuild/linux-ppc64@0.25.5': + optional: true + + '@esbuild/linux-riscv64@0.25.5': + optional: true + + '@esbuild/linux-s390x@0.25.5': + optional: true + + '@esbuild/linux-x64@0.25.5': + optional: true + + '@esbuild/netbsd-arm64@0.25.5': + optional: true + + '@esbuild/netbsd-x64@0.25.5': + optional: true + + '@esbuild/openbsd-arm64@0.25.5': + optional: true + + '@esbuild/openbsd-x64@0.25.5': + optional: true + + '@esbuild/sunos-x64@0.25.5': + optional: true + + '@esbuild/win32-arm64@0.25.5': + optional: true + + '@esbuild/win32-ia32@0.25.5': + optional: true + + '@esbuild/win32-x64@0.25.5': + optional: true + + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.6.1))': + dependencies: + eslint: 9.39.4(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.2': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.5': + dependencies: + ajv: 6.15.0 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.3.0 + minimatch: 3.1.5 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.30.1': {} + + '@eslint/js@9.39.4': {} + + '@eslint/json@0.14.0': + dependencies: + '@eslint/core': 0.17.0 + '@eslint/plugin-kit': 0.4.1 + '@humanwhocodes/momoa': 3.3.10 + natural-compare: 1.4.0 + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/momoa@3.3.10': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@marijn/find-cluster-break@1.0.3': {} + + '@microsoft/eslint-plugin-sdl@1.1.0(eslint@9.39.4(jiti@2.6.1))': + dependencies: + eslint: 9.39.4(jiti@2.6.1) + eslint-plugin-n: 17.10.3(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-react: 7.37.3(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-security: 1.4.0 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@pkgr/core@0.1.2': {} + + '@rtsao/scc@1.1.0': {} + + '@types/codemirror@5.60.8': + dependencies: + '@types/tern': 0.23.9 + + '@types/eslint@8.56.2': + dependencies: + '@types/estree': 1.0.9 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.9': {} + + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + + '@types/node@20.12.12': + dependencies: + undici-types: 5.26.5 + + '@types/node@20.19.43': + dependencies: + undici-types: 6.21.0 + + '@types/tern@0.23.9': + dependencies: + '@types/estree': 1.0.9 + + '@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.35.1 + '@typescript-eslint/type-utils': 8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.35.1 + eslint: 9.39.4(jiti@2.6.1) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.35.1 + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.35.1 + debug: 4.4.3 + eslint: 9.39.4(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.35.1(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.9.3) + '@typescript-eslint/types': 8.35.1 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.35.1': + dependencies: + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/visitor-keys': 8.35.1 + + '@typescript-eslint/tsconfig-utils@8.35.1(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + debug: 4.4.3 + eslint: 9.39.4(jiti@2.6.1) + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.35.1': {} + + '@typescript-eslint/typescript-estree@8.35.1(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.35.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.9.3) + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/visitor-keys': 8.35.1 + debug: 4.4.3 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.9 + semver: 7.8.5 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.35.1 + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.9.3) + eslint: 9.39.4(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.35.1': + dependencies: + '@typescript-eslint/types': 8.35.1 + eslint-visitor-keys: 4.2.1 + + acorn-jsx@5.3.2(acorn@8.17.0): + dependencies: + acorn: 8.17.0 + + acorn@8.17.0: {} + + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-includes@3.1.9: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + math-intrinsics: 1.1.0 + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-shim-unscopables: 1.1.0 + + array.prototype.findlastindex@1.2.6: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-shim-unscopables: 1.1.0 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-shim-unscopables: 1.1.0 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-shim-unscopables: 1.1.0 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-shim-unscopables: 1.1.0 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + async-function@1.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + balanced-match@1.0.2: {} + + brace-expansion@1.1.15: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.1.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.9: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + concat-map@0.0.1: {} + + crelt@1.0.7: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + empathic@2.0.1: {} + + enhanced-resolve@5.24.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + + es-abstract-get@1.0.0: + dependencies: + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + is-callable: 1.2.7 + object-inspect: 1.13.4 + + es-abstract@1.24.2: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.4 + function.prototype.name: 1.2.0 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.4 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.11 + string.prototype.trimend: 1.0.10 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.8 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.22 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-iterator-helpers@1.3.3: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-set-tostringtag: 2.1.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + math-intrinsics: 1.1.0 + + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.4 + + es-to-primitive@1.3.4: + dependencies: + es-abstract-get: 1.0.0 + es-define-property: 1.0.1 + es-errors: 1.3.0 + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + esbuild@0.25.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.5 + '@esbuild/android-arm': 0.25.5 + '@esbuild/android-arm64': 0.25.5 + '@esbuild/android-x64': 0.25.5 + '@esbuild/darwin-arm64': 0.25.5 + '@esbuild/darwin-x64': 0.25.5 + '@esbuild/freebsd-arm64': 0.25.5 + '@esbuild/freebsd-x64': 0.25.5 + '@esbuild/linux-arm': 0.25.5 + '@esbuild/linux-arm64': 0.25.5 + '@esbuild/linux-ia32': 0.25.5 + '@esbuild/linux-loong64': 0.25.5 + '@esbuild/linux-mips64el': 0.25.5 + '@esbuild/linux-ppc64': 0.25.5 + '@esbuild/linux-riscv64': 0.25.5 + '@esbuild/linux-s390x': 0.25.5 + '@esbuild/linux-x64': 0.25.5 + '@esbuild/netbsd-arm64': 0.25.5 + '@esbuild/netbsd-x64': 0.25.5 + '@esbuild/openbsd-arm64': 0.25.5 + '@esbuild/openbsd-x64': 0.25.5 + '@esbuild/sunos-x64': 0.25.5 + '@esbuild/win32-arm64': 0.25.5 + '@esbuild/win32-ia32': 0.25.5 + '@esbuild/win32-x64': 0.25.5 + + escape-string-regexp@4.0.0: {} + + eslint-compat-utils@0.5.1(eslint@9.39.4(jiti@2.6.1)): + dependencies: + eslint: 9.39.4(jiti@2.6.1) + semver: 7.8.5 + + eslint-import-resolver-node@0.3.10: + dependencies: + debug: 3.2.7 + is-core-module: 2.16.2 + resolve: 2.0.0-next.7 + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.14.0(@typescript-eslint/parser@8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@9.39.4(jiti@2.6.1)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.6.1) + eslint-import-resolver-node: 0.3.10 + transitivePeerDependencies: + - supports-color + + eslint-plugin-depend@1.3.1: + dependencies: + empathic: 2.0.1 + module-replacements: 2.11.0 + semver: 7.8.5 + + eslint-plugin-es-x@7.8.0(eslint@9.39.4(jiti@2.6.1)): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + eslint: 9.39.4(jiti@2.6.1) + eslint-compat-utils: 0.5.1(eslint@9.39.4(jiti@2.6.1)) + + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.39.4(jiti@2.6.1) + eslint-import-resolver-node: 0.3.10 + eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@9.39.4(jiti@2.6.1)) + hasown: 2.0.4 + is-core-module: 2.16.2 + is-glob: 4.0.3 + minimatch: 3.1.5 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.10 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-json-schema-validator@5.1.0(eslint@9.39.4(jiti@2.6.1)): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + ajv: 8.20.0 + debug: 4.4.3 + eslint: 9.39.4(jiti@2.6.1) + eslint-compat-utils: 0.5.1(eslint@9.39.4(jiti@2.6.1)) + json-schema-migrate: 2.0.0 + jsonc-eslint-parser: 2.4.2 + minimatch: 8.0.7 + synckit: 0.9.3 + toml-eslint-parser: 0.9.3 + tunnel-agent: 0.6.0 + yaml-eslint-parser: 1.3.2 + transitivePeerDependencies: + - supports-color + + eslint-plugin-n@17.10.3(eslint@9.39.4(jiti@2.6.1)): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + enhanced-resolve: 5.24.1 + eslint: 9.39.4(jiti@2.6.1) + eslint-plugin-es-x: 7.8.0(eslint@9.39.4(jiti@2.6.1)) + get-tsconfig: 4.14.0 + globals: 15.15.0 + ignore: 5.3.2 + minimatch: 9.0.9 + semver: 7.8.5 + + eslint-plugin-obsidianmd@0.1.9(@eslint/js@9.30.1)(@eslint/json@0.14.0)(@typescript-eslint/parser@8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(obsidian@1.13.1(@codemirror/state@6.5.0)(@codemirror/view@6.38.6))(typescript-eslint@8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)): + dependencies: + '@eslint/js': 9.30.1 + '@eslint/json': 0.14.0 + '@microsoft/eslint-plugin-sdl': 1.1.0(eslint@9.39.4(jiti@2.6.1)) + '@types/eslint': 8.56.2 + '@types/node': 20.12.12 + eslint: 9.39.4(jiti@2.6.1) + eslint-plugin-depend: 1.3.1 + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-json-schema-validator: 5.1.0(eslint@9.39.4(jiti@2.6.1)) + eslint-plugin-security: 2.1.1 + globals: 14.0.0 + obsidian: 1.13.1(@codemirror/state@6.5.0)(@codemirror/view@6.38.6) + typescript: 5.4.5 + typescript-eslint: 8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-react@7.37.3(eslint@9.39.4(jiti@2.6.1)): + dependencies: + array-includes: 3.1.9 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.3.3 + eslint: 9.39.4(jiti@2.6.1) + estraverse: 5.3.0 + hasown: 2.0.4 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.5 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.7 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + + eslint-plugin-security@1.4.0: + dependencies: + safe-regex: 1.1.0 + + eslint-plugin-security@2.1.1: + dependencies: + safe-regex: 2.1.1 + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.39.4(jiti@2.6.1): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.4 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.1 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + eslint-visitor-keys: 4.2.1 + + espree@9.6.1: + dependencies: + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + eslint-visitor-keys: 3.4.3 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-uri@3.1.3: {} + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.4.2 + keyv: 4.5.4 + + flatted@3.4.2: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + function-bind@1.1.2: {} + + function.prototype.name@1.2.0: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + es-define-property: 1.0.1 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + hasown: 2.0.4 + is-callable: 1.2.7 + is-document.all: 1.0.0 + + functions-have-names@1.2.3: {} + + generator-function@2.0.1: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-tsconfig@4.14.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@14.0.0: {} + + globals@15.15.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-bigints@1.1.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.4 + side-channel: 1.1.1 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-core-module@2.16.2: + dependencies: + hasown: 2.0.4 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-document.all@1.0.0: + dependencies: + call-bound: 1.0.4 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.22 + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + iterator.prototype@1.1.5: + dependencies: + define-data-property: 1.1.4 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + has-symbols: 1.1.0 + set-function-name: 2.0.2 + + jiti@2.6.1: {} + + js-tokens@4.0.0: {} + + js-yaml@4.3.0: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-schema-migrate@2.0.0: + dependencies: + ajv: 8.20.0 + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + jsonc-eslint-parser@2.4.2: + dependencies: + acorn: 8.17.0 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + semver: 7.8.5 + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.9 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + math-intrinsics@1.1.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.15 + + minimatch@8.0.7: + dependencies: + brace-expansion: 2.1.1 + + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.1 + + minimist@1.2.8: {} + + module-replacements@2.11.0: {} + + moment@2.29.4: {} + + ms@2.1.3: {} + + natural-compare@1.4.0: {} + + node-exports-info@1.6.2: + dependencies: + array.prototype.flatmap: 1.3.3 + es-errors: 1.3.0 + object.entries: 1.1.9 + semver: 6.3.1 + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.9: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + obsidian@1.13.1(@codemirror/state@6.5.0)(@codemirror/view@6.38.6): + dependencies: + '@codemirror/state': 6.5.0 + '@codemirror/view': 6.38.6 + '@types/codemirror': 5.60.8 + moment: 2.29.4 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + picomatch@2.3.2: {} + + possible-typed-array-names@1.1.0: {} + + prelude-ls@1.2.1: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + react-is@16.13.1: {} + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regexp-tree@0.1.27: {} + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + require-from-string@2.0.2: {} + + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve@2.0.0-next.7: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.2 + node-exports-info: 1.6.2 + object-keys: 1.1.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + ret@0.1.15: {} + + reusify@1.1.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-array-concat@1.1.4: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safe-regex@1.1.0: + dependencies: + ret: 0.1.15 + + safe-regex@2.1.1: + dependencies: + regexp-tree: 0.1.27 + + semver@6.3.1: {} + + semver@7.8.5: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.1 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.24.2 + + string.prototype.trim@1.2.11: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + has-property-descriptors: 1.0.2 + safe-regex-test: 1.1.0 + + string.prototype.trimend@1.0.10: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + strip-bom@3.0.0: {} + + strip-json-comments@3.1.1: {} + + style-mod@4.1.3: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + synckit@0.9.3: + dependencies: + '@pkgr/core': 0.1.2 + tslib: 2.8.1 + + tapable@2.3.3: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toml-eslint-parser@0.9.3: + dependencies: + eslint-visitor-keys: 3.4.3 + + ts-api-utils@2.5.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.4.0: {} + + tslib@2.8.1: {} + + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.8: + dependencies: + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typescript-eslint@8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.35.1(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.4(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + typescript@5.4.5: {} + + typescript@5.9.3: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undici-types@5.26.5: {} + + undici-types@6.21.0: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + w3c-keyname@2.2.8: {} + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.2.0 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.22 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.22: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + yaml-eslint-parser@1.3.2: + dependencies: + eslint-visitor-keys: 3.4.3 + yaml: 2.9.0 + + yaml@2.9.0: {} + + yocto-queue@0.1.0: {} diff --git a/surfsense_obsidian/pnpm-workspace.yaml b/surfsense_obsidian/pnpm-workspace.yaml new file mode 100644 index 000000000..00f6fc470 --- /dev/null +++ b/surfsense_obsidian/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +allowBuilds: + esbuild: set this to true or false diff --git a/surfsense_obsidian/src/api-client.ts b/surfsense_obsidian/src/api-client.ts index 114e531f7..b66373f02 100644 --- a/surfsense_obsidian/src/api-client.ts +++ b/surfsense_obsidian/src/api-client.ts @@ -7,7 +7,7 @@ import type { NotePayload, RenameAck, RenameItem, - SearchSpace, + Workspace, SyncAck, } from "./types"; @@ -94,14 +94,14 @@ export class SurfSenseApiClient { return await this.request("GET", "/api/v1/obsidian/health"); } - async listSearchSpaces(): Promise { - const resp = await this.request( + async listWorkspaces(): Promise { + const resp = await this.request( "GET", - "/api/v1/searchspaces/" + "/api/v1/workspaces/" ); if (Array.isArray(resp)) return resp; - if (resp && Array.isArray((resp as { items?: SearchSpace[] }).items)) { - return (resp as { items: SearchSpace[] }).items; + if (resp && Array.isArray((resp as { items?: Workspace[] }).items)) { + return (resp as { items: Workspace[] }).items; } return []; } @@ -114,7 +114,7 @@ export class SurfSenseApiClient { } async connect(input: { - searchSpaceId: number; + workspaceId: number; vaultId: string; vaultName: string; vaultFingerprint: string; @@ -125,7 +125,7 @@ export class SurfSenseApiClient { { vault_id: input.vaultId, vault_name: input.vaultName, - search_space_id: input.searchSpaceId, + workspace_id: input.workspaceId, vault_fingerprint: input.vaultFingerprint, } ); diff --git a/surfsense_obsidian/src/main.ts b/surfsense_obsidian/src/main.ts index 6600b7145..ca5de7206 100644 --- a/surfsense_obsidian/src/main.ts +++ b/surfsense_obsidian/src/main.ts @@ -119,7 +119,7 @@ export default class SurfSensePlugin extends Plugin { name: "Sync current note", checkCallback: (checking) => { const file = this.app.workspace.getActiveFile(); - if (!file || file.extension.toLowerCase() !== "md") return false; + if (file?.extension.toLowerCase() !== "md") return false; if (checking) return true; this.queue.enqueueUpsert(file.path); void this.engine.flushQueue(); @@ -186,7 +186,7 @@ export default class SurfSensePlugin extends Plugin { if (!changed) return; this.engine?.refreshStatus(); this.notifyStatusChange(); - if (this.settings.searchSpaceId !== null) { + if (this.settings.workspaceId !== null) { void this.engine.ensureConnected(); } } @@ -252,16 +252,24 @@ export default class SurfSensePlugin extends Plugin { } async loadSettings() { - const data = (await this.loadData()) as Partial | null; + // One-time migration: the workspace was previously persisted as `searchSpaceId`. + // Destructure it out so the migrated value moves into `workspaceId` and the + // dead key is not spread back in / re-persisted. + const data = (await this.loadData()) as + | (Partial & { searchSpaceId?: number | null }) + | null; + const { searchSpaceId: legacyWorkspaceId, ...persisted } = data ?? {}; this.settings = { ...DEFAULT_SETTINGS, - ...(data ?? {}), - queue: (data?.queue ?? []).map((i: QueueItem) => ({ ...i })), - tombstones: { ...(data?.tombstones ?? {}) }, - includeFolders: [...(data?.includeFolders ?? [])], - excludeFolders: [...(data?.excludeFolders ?? [])], - excludePatterns: data?.excludePatterns?.length - ? [...data.excludePatterns] + ...persisted, + workspaceId: + persisted.workspaceId ?? legacyWorkspaceId ?? DEFAULT_SETTINGS.workspaceId, + queue: (persisted.queue ?? []).map((i: QueueItem) => ({ ...i })), + tombstones: { ...(persisted.tombstones ?? {}) }, + includeFolders: [...(persisted.includeFolders ?? [])], + excludeFolders: [...(persisted.excludeFolders ?? [])], + excludePatterns: persisted.excludePatterns?.length + ? [...persisted.excludePatterns] : [...DEFAULT_SETTINGS.excludePatterns], }; } diff --git a/surfsense_obsidian/src/settings.ts b/surfsense_obsidian/src/settings.ts index 7f404fc97..79e5762a9 100644 --- a/surfsense_obsidian/src/settings.ts +++ b/surfsense_obsidian/src/settings.ts @@ -13,13 +13,13 @@ import { normalizeFolder, parseExcludePatterns } from "./excludes"; import { FolderSuggestModal } from "./folder-suggest-modal"; import type SurfSensePlugin from "./main"; import { STATUS_VISUALS } from "./status-visuals"; -import type { SearchSpace } from "./types"; +import type { Workspace } from "./types"; /** Plugin settings tab. */ export class SurfSenseSettingTab extends PluginSettingTab { private readonly plugin: SurfSensePlugin; - private searchSpaces: SearchSpace[] = []; + private workspaces: Workspace[] = []; private loadingSpaces = false; private connectionIndicator: HTMLElement | null = null; private readonly onStatusChange = (): void => this.updateConnectionIndicator(); @@ -51,7 +51,7 @@ export class SurfSenseSettingTab extends PluginSettingTab { const next = value.trim(); const previous = this.plugin.settings.serverUrl; if (previous !== "" && next !== previous) { - this.plugin.settings.searchSpaceId = null; + this.plugin.settings.workspaceId = null; this.plugin.settings.connectorId = null; } this.plugin.settings.serverUrl = next; @@ -80,7 +80,7 @@ export class SurfSenseSettingTab extends PluginSettingTab { const next = value.trim(); const previous = this.plugin.settings.apiToken; if (previous !== "" && next !== previous) { - this.plugin.settings.searchSpaceId = null; + this.plugin.settings.workspaceId = null; this.plugin.settings.connectorId = null; } this.plugin.settings.apiToken = next; @@ -102,7 +102,7 @@ export class SurfSenseSettingTab extends PluginSettingTab { await this.plugin.api.verifyToken(); new Notice("Surfsense: token verified."); this.plugin.engine.refreshStatus({ force: true }); - await this.refreshSearchSpaces(); + await this.refreshWorkspaces(); this.display(); } catch (err) { this.handleApiError(err); @@ -115,21 +115,21 @@ export class SurfSenseSettingTab extends PluginSettingTab { new Setting(containerEl) .setName("Search space") .setDesc( - "Which Surfsense search space this vault syncs into. Reload after changing your token.", + "Which Surfsense workspace this vault syncs into. Reload after changing your token.", ) .addDropdown((drop) => { - drop.addOption("", this.loadingSpaces ? "Loading…" : "Select a search space"); - for (const space of this.searchSpaces) { + drop.addOption("", this.loadingSpaces ? "Loading…" : "Select a workspace"); + for (const space of this.workspaces) { drop.addOption(String(space.id), space.name); } - if (settings.searchSpaceId !== null) { - drop.setValue(String(settings.searchSpaceId)); + if (settings.workspaceId !== null) { + drop.setValue(String(settings.workspaceId)); } drop.onChange(async (value) => { - this.plugin.settings.searchSpaceId = value ? Number(value) : null; + this.plugin.settings.workspaceId = value ? Number(value) : null; this.plugin.settings.connectorId = null; await this.plugin.saveSettings(); - if (this.plugin.settings.searchSpaceId !== null) { + if (this.plugin.settings.workspaceId !== null) { try { await this.plugin.engine.ensureConnected(); await this.plugin.engine.maybeReconcile(true); @@ -144,9 +144,9 @@ export class SurfSenseSettingTab extends PluginSettingTab { .addExtraButton((btn) => btn .setIcon("refresh-ccw") - .setTooltip("Reload search spaces") + .setTooltip("Reload workspaces") .onClick(async () => { - await this.refreshSearchSpaces(); + await this.refreshWorkspaces(); this.display(); }), ); @@ -319,13 +319,13 @@ export class SurfSenseSettingTab extends PluginSettingTab { indicator.setAttr("title", visual.label); } - private async refreshSearchSpaces(): Promise { + private async refreshWorkspaces(): Promise { this.loadingSpaces = true; try { - this.searchSpaces = await this.plugin.api.listSearchSpaces(); + this.workspaces = await this.plugin.api.listWorkspaces(); } catch (err) { this.handleApiError(err); - this.searchSpaces = []; + this.workspaces = []; } finally { this.loadingSpaces = false; } diff --git a/surfsense_obsidian/src/sync-engine.ts b/surfsense_obsidian/src/sync-engine.ts index 80594dd9e..921067a37 100644 --- a/surfsense_obsidian/src/sync-engine.ts +++ b/surfsense_obsidian/src/sync-engine.ts @@ -48,7 +48,7 @@ export interface SyncEngineSettings { vaultId: string; apiToken: string; connectorId: number | null; - searchSpaceId: number | null; + workspaceId: number | null; includeFolders: string[]; excludeFolders: string[]; excludePatterns: string[]; @@ -96,7 +96,7 @@ export class SyncEngine { this.setStatus("syncing", "Connecting to SurfSense…"); const settings = this.deps.getSettings(); - if (!settings.searchSpaceId) { + if (!settings.workspaceId) { // No target yet — /health still surfaces auth/network errors. try { const health = await this.deps.apiClient.health(); @@ -124,7 +124,7 @@ export class SyncEngine { */ async ensureConnected(): Promise { const settings = this.deps.getSettings(); - if (!settings.searchSpaceId) { + if (!settings.workspaceId) { this.setStatus("idle"); return false; } @@ -132,7 +132,7 @@ export class SyncEngine { try { const fingerprint = await computeVaultFingerprint(this.deps.app); const resp = await this.deps.apiClient.connect({ - searchSpaceId: settings.searchSpaceId, + workspaceId: settings.workspaceId, vaultId: settings.vaultId, vaultName: this.deps.app.vault.getName(), vaultFingerprint: fingerprint, @@ -272,7 +272,7 @@ export class SyncEngine { this.refreshStatus({ force: true }); return; } - if (!settings.searchSpaceId) { + if (!settings.workspaceId) { try { const health = await this.deps.apiClient.health(); this.applyHealth(health); @@ -543,7 +543,7 @@ export class SyncEngine { const isError = last === "auth-error" || last === "offline" || last === "error"; const s = this.deps.getSettings(); - const setupComplete = !!(s.apiToken && s.searchSpaceId && s.connectorId); + const setupComplete = !!(s.apiToken && s.workspaceId && s.connectorId); if (isError && setupComplete) return; } this.setStatus(this.queueStatusKind(), this.statusDetail()); @@ -571,7 +571,7 @@ export class SyncEngine { kind = "needs-setup"; detail = this.setupHint(s); } else if (kind !== "auth-error" && kind !== "offline" && kind !== "error") { - if (!s.searchSpaceId || !s.connectorId) { + if (!s.workspaceId || !s.connectorId) { kind = "needs-setup"; detail = this.setupHint(s); } @@ -582,7 +582,7 @@ export class SyncEngine { private setupHint(s: SyncEngineSettings): string { if (!s.apiToken) return "Paste your API token in settings."; - if (!s.searchSpaceId) return "Pick a search space in settings."; + if (!s.workspaceId) return "Pick a workspace in settings."; return "Connecting…"; } diff --git a/surfsense_obsidian/src/types.ts b/surfsense_obsidian/src/types.ts index 192d34dc8..cfa9fbb74 100644 --- a/surfsense_obsidian/src/types.ts +++ b/surfsense_obsidian/src/types.ts @@ -3,7 +3,7 @@ export interface SurfsensePluginSettings { serverUrl: string; apiToken: string; - searchSpaceId: number | null; + workspaceId: number | null; connectorId: number | null; /** UUID for the vault — lives here so Obsidian Sync replicates it across devices. */ vaultId: string; @@ -25,7 +25,7 @@ export interface SurfsensePluginSettings { export const DEFAULT_SETTINGS: SurfsensePluginSettings = { serverUrl: "https://surfsense.com", apiToken: "", - searchSpaceId: null, + workspaceId: null, connectorId: null, vaultId: "", syncIntervalMinutes: 10, @@ -107,7 +107,7 @@ export interface HeadingRef { level: number; } -export interface SearchSpace { +export interface Workspace { id: number; name: string; description?: string; @@ -117,7 +117,7 @@ export interface SearchSpace { export interface ConnectResponse { connector_id: number; vault_id: string; - search_space_id: number; + workspace_id: number; capabilities: string[]; server_time_utc: string; [key: string]: unknown; diff --git a/surfsense_web/app/dashboard/[workspace_id]/automations/[automation_id]/automation-detail-content.tsx b/surfsense_web/app/dashboard/[workspace_id]/automations/[automation_id]/automation-detail-content.tsx index d4f0962f4..acf816629 100644 --- a/surfsense_web/app/dashboard/[workspace_id]/automations/[automation_id]/automation-detail-content.tsx +++ b/surfsense_web/app/dashboard/[workspace_id]/automations/[automation_id]/automation-detail-content.tsx @@ -45,7 +45,7 @@ export function AutomationDetailContent({

Access denied

- You don't have permission to view automations in this search space. + You don't have permission to view automations in this workspace.

); diff --git a/surfsense_web/app/dashboard/[workspace_id]/automations/[automation_id]/edit/automation-edit-content.tsx b/surfsense_web/app/dashboard/[workspace_id]/automations/[automation_id]/edit/automation-edit-content.tsx index 77e26e51a..470cf7d5c 100644 --- a/surfsense_web/app/dashboard/[workspace_id]/automations/[automation_id]/edit/automation-edit-content.tsx +++ b/surfsense_web/app/dashboard/[workspace_id]/automations/[automation_id]/edit/automation-edit-content.tsx @@ -32,7 +32,7 @@ export function AutomationEditContent({ workspaceId, automationId }: AutomationE

Access denied

- You don't have permission to edit automations in this search space. + You don't have permission to edit automations in this workspace.

); diff --git a/surfsense_web/app/dashboard/[workspace_id]/automations/automations-content.tsx b/surfsense_web/app/dashboard/[workspace_id]/automations/automations-content.tsx index 9e0fa81c6..826337a27 100644 --- a/surfsense_web/app/dashboard/[workspace_id]/automations/automations-content.tsx +++ b/surfsense_web/app/dashboard/[workspace_id]/automations/automations-content.tsx @@ -13,7 +13,7 @@ interface AutomationsContentProps { /** * Client orchestrator for the automations list page. Pulls the active - * search space's first page (via ``useAutomations`` → ``automationsListAtom``) + * workspace's first page (via ``useAutomations`` → ``automationsListAtom``) * and the user's permissions, then decides between empty / loading / table. * * Read access is mandatory; anything else is hidden behind RBAC. The @@ -46,7 +46,7 @@ export function AutomationsContent({ workspaceId }: AutomationsContentProps) {

Access denied

- You don't have permission to view automations in this search space. + You don't have permission to view automations in this workspace.

); diff --git a/surfsense_web/app/dashboard/[workspace_id]/automations/components/automations-empty-state.tsx b/surfsense_web/app/dashboard/[workspace_id]/automations/components/automations-empty-state.tsx index c689d85bb..1004c21b6 100644 --- a/surfsense_web/app/dashboard/[workspace_id]/automations/components/automations-empty-state.tsx +++ b/surfsense_web/app/dashboard/[workspace_id]/automations/components/automations-empty-state.tsx @@ -40,7 +40,7 @@ export function AutomationsEmptyState({ workspaceId, canCreate }: AutomationsEmp ) : (

- You don't have permission to create automations in this search space. + You don't have permission to create automations in this workspace.

)} diff --git a/surfsense_web/app/dashboard/[workspace_id]/automations/components/builder/automation-builder-form.tsx b/surfsense_web/app/dashboard/[workspace_id]/automations/components/builder/automation-builder-form.tsx index 1103307eb..0994ceb7d 100644 --- a/surfsense_web/app/dashboard/[workspace_id]/automations/components/builder/automation-builder-form.tsx +++ b/surfsense_web/app/dashboard/[workspace_id]/automations/components/builder/automation-builder-form.tsx @@ -120,7 +120,7 @@ export function AutomationBuilderForm({ const [submitting, setSubmitting] = useState(false); - // Eligible models + the search-space-seeded defaults. Models are chosen per + // Eligible models + the workspace-seeded defaults. Models are chosen per // automation on create; in edit mode the backend preserves the captured // snapshot, so the picker is create-only. const eligibleModels = useAutomationEligibleModels(); diff --git a/surfsense_web/app/dashboard/[workspace_id]/automations/components/builder/mention-task-input.tsx b/surfsense_web/app/dashboard/[workspace_id]/automations/components/builder/mention-task-input.tsx index 1814af6b7..d17b5f9a6 100644 --- a/surfsense_web/app/dashboard/[workspace_id]/automations/components/builder/mention-task-input.tsx +++ b/surfsense_web/app/dashboard/[workspace_id]/automations/components/builder/mention-task-input.tsx @@ -235,7 +235,7 @@ export function MentionTaskInput({

Access denied

- You don't have permission to create automations in this search space. + You don't have permission to create automations in this workspace.

); diff --git a/surfsense_web/app/dashboard/[workspace_id]/chats/page.tsx b/surfsense_web/app/dashboard/[workspace_id]/chats/page.tsx index 8186018ea..79a7b2ffc 100644 --- a/surfsense_web/app/dashboard/[workspace_id]/chats/page.tsx +++ b/surfsense_web/app/dashboard/[workspace_id]/chats/page.tsx @@ -5,7 +5,7 @@ export default async function ChatsPage({ params }: { params: Promise<{ workspac return (
- +
); } diff --git a/surfsense_web/app/dashboard/[workspace_id]/client-layout.tsx b/surfsense_web/app/dashboard/[workspace_id]/client-layout.tsx index 707663fff..b54ce0aad 100644 --- a/surfsense_web/app/dashboard/[workspace_id]/client-layout.tsx +++ b/surfsense_web/app/dashboard/[workspace_id]/client-layout.tsx @@ -52,12 +52,12 @@ export function DashboardClientLayout({ const isOnboardingPage = pathname?.includes("/onboard"); const isOwner = access?.is_owner ?? false; - const isSearchSpaceReady = activeWorkspaceId === workspaceId; + const isWorkspaceReady = activeWorkspaceId === workspaceId; useEffect(() => { - if (isSearchSpaceReady) return; + if (isWorkspaceReady) return; setHasCheckedOnboarding(false); - }, [isSearchSpaceReady]); + }, [isWorkspaceReady]); useEffect(() => { if (isOnboardingPage) { @@ -66,7 +66,7 @@ export function DashboardClientLayout({ } if ( - isSearchSpaceReady && + isWorkspaceReady && !loading && !accessLoading && !globalConfigsLoading && @@ -75,7 +75,7 @@ export function DashboardClientLayout({ !hasCheckedOnboarding ) { // Onboarding is only relevant when no operator-provided - // global_llm_config.yaml exists. When it does, search spaces inherit + // global_llm_config.yaml exists. When it does, workspaces inherit // the global config and should never be forced into onboarding. if (globalConfigStatus?.exists) { setHasCheckedOnboarding(true); @@ -102,7 +102,7 @@ export function DashboardClientLayout({ setHasCheckedOnboarding(true); } }, [ - isSearchSpaceReady, + isWorkspaceReady, loading, accessLoading, globalConfigsLoading, @@ -153,13 +153,13 @@ export function DashboardClientLayout({ setActiveWorkspaceIdState(activeSeacrhSpaceId); // Sync to Electron store if stored value is null (first navigation) - if (electronAPI?.getActiveSearchSpace && electronAPI.setActiveSearchSpace) { - const setActiveSearchSpace = electronAPI.setActiveSearchSpace; + if (electronAPI?.getActiveWorkspace && electronAPI.setActiveWorkspace) { + const setActiveWorkspace = electronAPI.setActiveWorkspace; electronAPI - .getActiveSearchSpace() + .getActiveWorkspace() .then((stored: string | null) => { if (!stored) { - setActiveSearchSpace(activeSeacrhSpaceId); + setActiveWorkspace(activeSeacrhSpaceId); } }) .catch(() => {}); @@ -169,7 +169,7 @@ export function DashboardClientLayout({ // Determine if we should show loading const shouldShowLoading = !hasCheckedOnboarding && - (!isSearchSpaceReady || + (!isWorkspaceReady || loading || accessLoading || globalConfigsLoading || @@ -214,7 +214,7 @@ export function DashboardClientLayout({ return ( - {children} + {children} ); } diff --git a/surfsense_web/app/dashboard/[workspace_id]/new-chat/[[...chat_id]]/page.tsx b/surfsense_web/app/dashboard/[workspace_id]/new-chat/[[...chat_id]]/page.tsx index 15f35cac1..4bb355049 100644 --- a/surfsense_web/app/dashboard/[workspace_id]/new-chat/[[...chat_id]]/page.tsx +++ b/surfsense_web/app/dashboard/[workspace_id]/new-chat/[[...chat_id]]/page.tsx @@ -579,7 +579,7 @@ export default function NewChatPage() { error, flow, context: { - searchSpaceId: workspaceId, + workspaceId: workspaceId, threadId, }, }); @@ -717,7 +717,7 @@ export default function NewChatPage() { data: typeof threadMessagesQuery.data; }>({ threadId: null, data: undefined }); - // Reset thread-local runtime state on route/search-space changes. Data fetching + // Reset thread-local runtime state on route/workspace changes. Data fetching // is handled by React Query below so the chat shell can render immediately. useEffect(() => { const nextThreadId = urlChatId > 0 ? urlChatId : null; @@ -755,7 +755,7 @@ export default function NewChatPage() { chatId: thread.id, title: thread.title, chatUrl: `/dashboard/${thread.workspace_id ?? workspaceId}/new-chat/${thread.id}`, - searchSpaceId: thread.workspace_id ?? workspaceId, + workspaceId: thread.workspace_id ?? workspaceId, visibility: thread.visibility, hasComments: thread.has_comments ?? false, }); @@ -892,7 +892,7 @@ export default function NewChatPage() { } setCurrentThreadMetadata({ id: null, - searchSpaceId: null, + workspaceId: null, visibility: null, hasComments: false, }); @@ -906,7 +906,7 @@ export default function NewChatPage() { setCurrentThreadMetadata({ id: currentThread.id, - searchSpaceId: currentThread.workspace_id ?? workspaceId, + workspaceId: currentThread.workspace_id ?? workspaceId, visibility, hasComments: currentThread.has_comments ?? false, }); diff --git a/surfsense_web/app/dashboard/[workspace_id]/onboard/page.tsx b/surfsense_web/app/dashboard/[workspace_id]/onboard/page.tsx index 9da14ef4a..861ceaa07 100644 --- a/surfsense_web/app/dashboard/[workspace_id]/onboard/page.tsx +++ b/surfsense_web/app/dashboard/[workspace_id]/onboard/page.tsx @@ -74,7 +74,7 @@ export default function OnboardPage() {

; diff --git a/surfsense_web/app/dashboard/[workspace_id]/team/team-content.tsx b/surfsense_web/app/dashboard/[workspace_id]/team/team-content.tsx index a43a07021..571512305 100644 --- a/surfsense_web/app/dashboard/[workspace_id]/team/team-content.tsx +++ b/surfsense_web/app/dashboard/[workspace_id]/team/team-content.tsx @@ -96,7 +96,7 @@ import type { Role } from "@/contracts/types/roles.types"; import { invitesApiService } from "@/lib/apis/invites-api.service"; import { rolesApiService } from "@/lib/apis/roles-api.service"; import { formatRelativeDate } from "@/lib/format-date"; -import { trackSearchSpaceInviteSent, trackSearchSpaceUsersViewed } from "@/lib/posthog/events"; +import { trackWorkspaceInviteSent, trackWorkspaceUsersViewed } from "@/lib/posthog/events"; import { cacheKeys } from "@/lib/query-client/cache-keys"; import { cn } from "@/lib/utils"; @@ -229,7 +229,7 @@ export function TeamContent({ workspaceId }: TeamContentProps) { useEffect(() => { if (members.length > 0 && !membersLoading) { const ownerCount = members.filter((m) => m.is_owner).length; - trackSearchSpaceUsersViewed(workspaceId, members.length, ownerCount); + trackWorkspaceUsersViewed(workspaceId, members.length, ownerCount); } }, [members, membersLoading, workspaceId]); @@ -654,7 +654,7 @@ function CreateInviteDialog({ setCreatedInvite(invite); const roleName = roleId ? roles.find((r) => r.id.toString() === roleId)?.name : undefined; - trackSearchSpaceInviteSent(workspaceId, { + trackWorkspaceInviteSent(workspaceId, { roleName, hasExpiry: !!expiresAt, hasMaxUses: !!maxUses, diff --git a/surfsense_web/app/dashboard/[workspace_id]/user-settings/components/AgentPermissionsContent.tsx b/surfsense_web/app/dashboard/[workspace_id]/user-settings/components/AgentPermissionsContent.tsx index bb19697f6..e8b15b00b 100644 --- a/surfsense_web/app/dashboard/[workspace_id]/user-settings/components/AgentPermissionsContent.tsx +++ b/surfsense_web/app/dashboard/[workspace_id]/user-settings/components/AgentPermissionsContent.tsx @@ -226,9 +226,7 @@ export function AgentPermissionsContent() { } if (!workspaceId) { - return ( -

Open a search space to manage agent rules.

- ); + return

Open a workspace to manage agent rules.

; } return ( diff --git a/surfsense_web/app/dashboard/[workspace_id]/user-settings/components/DesktopContent.tsx b/surfsense_web/app/dashboard/[workspace_id]/user-settings/components/DesktopContent.tsx index bccc146f0..4a775bc90 100644 --- a/surfsense_web/app/dashboard/[workspace_id]/user-settings/components/DesktopContent.tsx +++ b/surfsense_web/app/dashboard/[workspace_id]/user-settings/components/DesktopContent.tsx @@ -13,15 +13,15 @@ import { import { Separator } from "@/components/ui/separator"; import { Skeleton } from "@/components/ui/skeleton"; import { Switch } from "@/components/ui/switch"; -import type { SearchSpace } from "@/contracts/types/workspace.types"; +import type { Workspace } from "@/contracts/types/workspace.types"; import { useElectronAPI } from "@/hooks/use-platform"; -import { searchSpacesApiService } from "@/lib/apis/workspaces-api.service"; +import { workspacesApiService } from "@/lib/apis/workspaces-api.service"; export function DesktopContent() { const api = useElectronAPI(); const [loading, setLoading] = useState(true); - const [searchSpaces, setSearchSpaces] = useState([]); + const [workspaces, setWorkspaces] = useState([]); const [activeSpaceId, setActiveSpaceId] = useState(null); const [autoLaunchEnabled, setAutoLaunchEnabled] = useState(false); @@ -40,14 +40,14 @@ export function DesktopContent() { setAutoLaunchSupported(hasAutoLaunchApi); Promise.all([ - api.getActiveSearchSpace?.() ?? Promise.resolve(null), - searchSpacesApiService.getSearchSpaces(), + api.getActiveWorkspace?.() ?? Promise.resolve(null), + workspacesApiService.getWorkspaces(), hasAutoLaunchApi ? api.getAutoLaunch() : Promise.resolve(null), ]) .then(([spaceId, spaces, autoLaunch]) => { if (!mounted) return; setActiveSpaceId(spaceId); - if (spaces) setSearchSpaces(spaces); + if (spaces) setWorkspaces(spaces); if (autoLaunch) { setAutoLaunchEnabled(autoLaunch.enabled); setAutoLaunchHidden(autoLaunch.openAsHidden); @@ -136,30 +136,30 @@ export function DesktopContent() { } }; - const handleSearchSpaceChange = (value: string) => { + const handleWorkspaceChange = (value: string) => { setActiveSpaceId(value); - api.setActiveSearchSpace?.(value); - toast.success("Default search space updated"); + api.setActiveWorkspace?.(value); + toast.success("Default workspace updated"); }; return (
-

Default Search Space

+

Default Workspace

- Choose which search space General Assist, Screenshot Assist, and Quick Assist use by + Choose which workspace General Assist, Screenshot Assist, and Quick Assist use by default.

- {searchSpaces.length > 0 ? ( - - + - {searchSpaces.map((space) => ( + {workspaces.map((space) => ( {space.name} @@ -167,9 +167,7 @@ export function DesktopContent() { ) : ( -

- No search spaces found. Create one first. -

+

No workspaces found. Create one first.

)}
diff --git a/surfsense_web/app/dashboard/[workspace_id]/user-settings/components/MessagingChannelsContent.tsx b/surfsense_web/app/dashboard/[workspace_id]/user-settings/components/MessagingChannelsContent.tsx index 09472fd70..f5cdd1448 100644 --- a/surfsense_web/app/dashboard/[workspace_id]/user-settings/components/MessagingChannelsContent.tsx +++ b/surfsense_web/app/dashboard/[workspace_id]/user-settings/components/MessagingChannelsContent.tsx @@ -17,8 +17,8 @@ import { } from "@/components/ui/select"; import { Separator } from "@/components/ui/separator"; import { Skeleton } from "@/components/ui/skeleton"; -import type { SearchSpace } from "@/contracts/types/workspace.types"; -import { searchSpacesApiService } from "@/lib/apis/workspaces-api.service"; +import type { Workspace } from "@/contracts/types/workspace.types"; +import { workspacesApiService } from "@/lib/apis/workspaces-api.service"; import { authenticatedFetch } from "@/lib/auth-fetch"; import { buildBackendUrl } from "@/lib/env-config"; import { cn } from "@/lib/utils"; @@ -79,7 +79,7 @@ export function MessagingChannelsContent() { const workspaceId = Number(params.workspace_id); const [gatewayConfig, setGatewayConfig] = useState(null); const [connections, setConnections] = useState([]); - const [searchSpaces, setSearchSpaces] = useState([]); + const [workspaces, setWorkspaces] = useState([]); const [pairing, setPairing] = useState(null); const [pairingPlatform, setPairingPlatform] = useState(null); const [baileysHealth, setBaileysHealth] = useState(null); @@ -114,11 +114,11 @@ export function MessagingChannelsContent() { const refresh = useCallback(async () => { const [nextConnections, spaces, nextGatewayConfig] = await Promise.all([ fetchConnections(), - searchSpacesApiService.getSearchSpaces(), + workspacesApiService.getWorkspaces(), fetchGatewayConfig(), ]); setConnections(nextConnections); - setSearchSpaces(spaces); + setWorkspaces(spaces); setGatewayConfig(nextGatewayConfig); }, [fetchConnections, fetchGatewayConfig]); @@ -210,10 +210,7 @@ export function MessagingChannelsContent() { await refreshPlatform(connection.platform as GatewayPlatform); } - async function updateConnectionSearchSpace( - connection: GatewayConnection, - nextWorkspaceId: string - ) { + async function updateConnectionWorkspace(connection: GatewayConnection, nextWorkspaceId: string) { const previousConnections = connections; const parsedWorkspaceId = Number(nextWorkspaceId); const targetKey = connectionKey(connection); @@ -324,14 +321,14 @@ export function MessagingChannelsContent() {
-
diff --git a/surfsense_web/components/settings/roles-manager.tsx b/surfsense_web/components/settings/roles-manager.tsx index 09af63220..35d3039ac 100644 --- a/surfsense_web/components/settings/roles-manager.tsx +++ b/surfsense_web/components/settings/roles-manager.tsx @@ -160,7 +160,7 @@ const CATEGORY_CONFIG: Record< settings: { label: "Settings", icon: Settings, - description: "Manage search space settings", + description: "Manage workspace settings", order: 10, }, public_sharing: { @@ -172,7 +172,7 @@ const CATEGORY_CONFIG: Record< general: { label: "General", icon: SlidersHorizontal, - description: "General search space permissions", + description: "General workspace permissions", order: 12, }, }; @@ -270,7 +270,6 @@ type PermissionWithDescription = PermissionInfo; // ============ Roles Manager (for Settings page) ============ export function RolesManager({ workspaceId }: { workspaceId: number }) { - const searchSpaceId = workspaceId; const { data: access = null } = useAtomValue(myAccessAtom); const hasPermission = useCallback( @@ -279,9 +278,9 @@ export function RolesManager({ workspaceId }: { workspaceId: number }) { ); const { data: roles = [], isLoading: rolesLoading } = useQuery({ - queryKey: cacheKeys.roles.all(searchSpaceId.toString()), - queryFn: () => rolesApiService.getRoles({ workspace_id: searchSpaceId }), - enabled: !!searchSpaceId, + queryKey: cacheKeys.roles.all(workspaceId.toString()), + queryFn: () => rolesApiService.getRoles({ workspace_id: workspaceId }), + enabled: !!workspaceId, }); const { data: permissionsData } = useAtomValue(permissionsAtom); @@ -312,36 +311,36 @@ export function RolesManager({ workspaceId }: { workspaceId: number }) { } ): Promise => { const request: UpdateRoleRequest = { - workspace_id: searchSpaceId, + workspace_id: workspaceId, role_id: roleId, data: data, }; return await updateRole(request); }, - [updateRole, searchSpaceId] + [updateRole, workspaceId] ); const handleDeleteRole = useCallback( async (roleId: number): Promise => { const request: DeleteRoleRequest = { - workspace_id: searchSpaceId, + workspace_id: workspaceId, role_id: roleId, }; await deleteRole(request); return true; }, - [deleteRole, searchSpaceId] + [deleteRole, workspaceId] ); const handleCreateRole = useCallback( async (roleData: CreateRoleRequest["data"]): Promise => { const request: CreateRoleRequest = { - workspace_id: searchSpaceId, + workspace_id: workspaceId, data: roleData, }; return await createRole(request); }, - [createRole, searchSpaceId] + [createRole, workspaceId] ); return ( @@ -885,7 +884,7 @@ function CreateRoleDialog({ Create Custom Role - Define permissions for a new role in this search space + Define permissions for a new role in this workspace
diff --git a/surfsense_web/components/sources/DocumentUploadTab.tsx b/surfsense_web/components/sources/DocumentUploadTab.tsx index 3d45ac2ae..278632ecd 100644 --- a/surfsense_web/components/sources/DocumentUploadTab.tsx +++ b/surfsense_web/components/sources/DocumentUploadTab.tsx @@ -41,7 +41,7 @@ import { } from "@/lib/supported-extensions"; interface DocumentUploadTabProps { - searchSpaceId: string; + workspaceId: string; onSuccess?: () => void; onAccordionStateChange?: (isExpanded: boolean) => void; } @@ -132,7 +132,7 @@ const toggleRowClass = "flex items-center justify-between rounded-lg bg-slate-400/5 dark:bg-white/5 p-3"; export function DocumentUploadTab({ - searchSpaceId, + workspaceId, onSuccess, onAccordionStateChange, }: DocumentUploadTabProps) { @@ -319,7 +319,7 @@ export function DocumentUploadTab({ setUploadProgress(0); setIsFolderUploading(true); const total = folderUpload.entries.length; - trackDocumentUploadStarted(Number(searchSpaceId), total, totalFileSize); + trackDocumentUploadStarted(Number(workspaceId), total, totalFileSize); try { const batches: FolderEntry[][] = []; @@ -364,7 +364,7 @@ export function DocumentUploadTab({ batch.map((e) => e.file), { folder_name: folderUpload.folderName, - workspace_id: Number(searchSpaceId), + workspace_id: Number(workspaceId), relative_paths: batch.map((e) => e.relativePath), root_folder_id: rootFolderId, use_vision_llm: useVisionLlm, @@ -380,13 +380,13 @@ export function DocumentUploadTab({ setUploadProgress(Math.round((uploaded / total) * 100)); } - trackDocumentUploadSuccess(Number(searchSpaceId), total); + trackDocumentUploadSuccess(Number(workspaceId), total); toast(t("upload_initiated"), { description: t("upload_initiated_desc") }); setFolderUpload(null); onSuccess?.(); } catch (error) { const message = error instanceof Error ? error.message : "Upload failed"; - trackDocumentUploadFailure(Number(searchSpaceId), message); + trackDocumentUploadFailure(Number(workspaceId), message); toast(t("upload_error"), { description: `${t("upload_error_desc")}: ${message}`, }); @@ -403,7 +403,7 @@ export function DocumentUploadTab({ } setUploadProgress(0); - trackDocumentUploadStarted(Number(searchSpaceId), files.length, totalFileSize); + trackDocumentUploadStarted(Number(workspaceId), files.length, totalFileSize); progressIntervalRef.current = setInterval(() => { setUploadProgress((prev) => (prev >= 90 ? prev : prev + Math.random() * 10)); @@ -413,7 +413,7 @@ export function DocumentUploadTab({ uploadDocuments( { files: rawFiles, - workspace_id: Number(searchSpaceId), + workspace_id: Number(workspaceId), use_vision_llm: useVisionLlm, processing_mode: processingMode, }, @@ -421,7 +421,7 @@ export function DocumentUploadTab({ onSuccess: () => { if (progressIntervalRef.current) clearInterval(progressIntervalRef.current); setUploadProgress(100); - trackDocumentUploadSuccess(Number(searchSpaceId), files.length); + trackDocumentUploadSuccess(Number(workspaceId), files.length); toast(t("upload_initiated"), { description: t("upload_initiated_desc") }); onSuccess?.(); }, @@ -429,7 +429,7 @@ export function DocumentUploadTab({ if (progressIntervalRef.current) clearInterval(progressIntervalRef.current); setUploadProgress(0); const message = error instanceof Error ? error.message : "Upload failed"; - trackDocumentUploadFailure(Number(searchSpaceId), message); + trackDocumentUploadFailure(Number(workspaceId), message); toast(t("upload_error"), { description: `${t("upload_error_desc")}: ${message}`, }); diff --git a/surfsense_web/components/sources/FolderWatchDialog.tsx b/surfsense_web/components/sources/FolderWatchDialog.tsx index 7a64f3835..74d7c3a59 100644 --- a/surfsense_web/components/sources/FolderWatchDialog.tsx +++ b/surfsense_web/components/sources/FolderWatchDialog.tsx @@ -24,7 +24,7 @@ export interface SelectedFolder { interface FolderWatchDialogProps { open: boolean; onOpenChange: (open: boolean) => void; - searchSpaceId: number; + workspaceId: number; onSuccess?: () => void; initialFolder?: SelectedFolder | null; } @@ -41,7 +41,7 @@ export const DEFAULT_EXCLUDE_PATTERNS = [ export function FolderWatchDialog({ open, onOpenChange, - searchSpaceId, + workspaceId, onSuccess, initialFolder, }: FolderWatchDialogProps) { @@ -91,7 +91,7 @@ export function FolderWatchDialog({ const rootFolderId = await uploadFolderScan({ folderPath: selectedFolder.path, folderName: selectedFolder.name, - searchSpaceId, + workspaceId, excludePatterns: DEFAULT_EXCLUDE_PATTERNS, fileExtensions: supportedExtensions, onProgress: setProgress, @@ -104,7 +104,7 @@ export function FolderWatchDialog({ excludePatterns: DEFAULT_EXCLUDE_PATTERNS, fileExtensions: supportedExtensions, rootFolderId: rootFolderId ?? null, - searchSpaceId, + workspaceId, active: true, }); @@ -124,7 +124,7 @@ export function FolderWatchDialog({ setSubmitting(false); setProgress(null); } - }, [selectedFolder, searchSpaceId, supportedExtensions, onOpenChange, onSuccess]); + }, [selectedFolder, workspaceId, supportedExtensions, onOpenChange, onSuccess]); const handleOpenChange = useCallback( (nextOpen: boolean) => { diff --git a/surfsense_web/components/tool-ui/automation/create-automation.tsx b/surfsense_web/components/tool-ui/automation/create-automation.tsx index ffc8aa5b8..768372fb0 100644 --- a/surfsense_web/components/tool-ui/automation/create-automation.tsx +++ b/surfsense_web/components/tool-ui/automation/create-automation.tsx @@ -108,9 +108,9 @@ function ApprovalCard({ args, interruptData, onDecision }: ApprovalCardProps) { const draft = useMemo(() => extractDraft(effectiveArgs), [effectiveArgs]); // Per-automation model selection. The card always supplies models (chosen - // here, not snapshotted from the search space), so Approve dispatches an + // here, not snapshotted from the workspace), so Approve dispatches an // `edit` decision carrying `definition.models`. - const searchSpaceId = useAtomValue(activeWorkspaceIdAtom); + const workspaceId = useAtomValue(activeWorkspaceIdAtom); const eligibleModels = useAutomationEligibleModels(); const [modelSelection, setModelSelection] = useState({ chatModelId: 0, @@ -156,7 +156,7 @@ function ApprovalCard({ args, interruptData, onDecision }: ApprovalCardProps) { const plan = Array.isArray(baseDefinition.plan) ? baseDefinition.plan : []; const triggers = Array.isArray(baseArgs.triggers) ? baseArgs.triggers : []; trackAutomationChatApproved({ - workspace_id: searchSpaceId ? Number(searchSpaceId) : undefined, + workspace_id: workspaceId ? Number(workspaceId) : undefined, edited: pendingEdits !== null, task_count: plan.length, trigger_type: @@ -184,17 +184,17 @@ function ApprovalCard({ args, interruptData, onDecision }: ApprovalCardProps) { args, pendingEdits, resolvedModels, - searchSpaceId, + workspaceId, ]); const handleReject = useCallback(() => { if (phase !== "pending" || !canReject || isEditing) return; setRejected(); trackAutomationChatRejected({ - workspace_id: searchSpaceId ? Number(searchSpaceId) : undefined, + workspace_id: workspaceId ? Number(workspaceId) : undefined, }); onDecision({ type: "reject", message: "User rejected the automation draft." }); - }, [phase, canReject, isEditing, setRejected, onDecision, searchSpaceId]); + }, [phase, canReject, isEditing, setRejected, onDecision, workspaceId]); useEffect(() => { if (isEditing) return; @@ -268,7 +268,7 @@ function ApprovalCard({ args, interruptData, onDecision }: ApprovalCardProps) { setPendingEdits(parsed); setIsEditing(false); trackAutomationChatDraftEdited({ - workspace_id: searchSpaceId ? Number(searchSpaceId) : undefined, + workspace_id: workspaceId ? Number(workspaceId) : undefined, }); }} onCancel={() => setIsEditing(false)} @@ -284,7 +284,7 @@ function ApprovalCard({ args, interruptData, onDecision }: ApprovalCardProps) {

Models

setModelSelection((prev) => ({ ...prev, ...patch }))} /> @@ -385,7 +385,7 @@ function JsonEditor({ initialValue, onSave, onCancel }: JsonEditorProps) { // ---------------------------------------------------------------------------- function SavedCard({ result }: { result: SavedResult }) { - const searchSpaceId = useAtomValue(activeWorkspaceIdAtom); + const workspaceId = useAtomValue(activeWorkspaceIdAtom); const tracked = useRef(false); useEffect(() => { if (tracked.current) return; @@ -393,12 +393,12 @@ function SavedCard({ result }: { result: SavedResult }) { trackAutomationChatCreateSucceeded({ automation_id: result.automation_id, name: result.name, - workspace_id: searchSpaceId ? Number(searchSpaceId) : undefined, + workspace_id: workspaceId ? Number(workspaceId) : undefined, }); - }, [result.automation_id, result.name, searchSpaceId]); + }, [result.automation_id, result.name, workspaceId]); - const detailHref = searchSpaceId - ? `/dashboard/${searchSpaceId}/automations/${result.automation_id}` + const detailHref = workspaceId + ? `/dashboard/${workspaceId}/automations/${result.automation_id}` : null; return ( @@ -429,7 +429,7 @@ function SavedCard({ result }: { result: SavedResult }) { } function InvalidCard({ result }: { result: InvalidResult }) { - const searchSpaceId = useAtomValue(activeWorkspaceIdAtom); + const workspaceId = useAtomValue(activeWorkspaceIdAtom); const tracked = useRef(false); useEffect(() => { if (tracked.current) return; @@ -437,9 +437,9 @@ function InvalidCard({ result }: { result: InvalidResult }) { trackAutomationChatCreateFailed({ reason: "invalid", issue_count: result.issues.length, - workspace_id: searchSpaceId ? Number(searchSpaceId) : undefined, + workspace_id: workspaceId ? Number(workspaceId) : undefined, }); - }, [result.issues.length, searchSpaceId]); + }, [result.issues.length, workspaceId]); return (
@@ -464,7 +464,7 @@ function InvalidCard({ result }: { result: InvalidResult }) { } function ErrorCard({ result }: { result: ErrorResult }) { - const searchSpaceId = useAtomValue(activeWorkspaceIdAtom); + const workspaceId = useAtomValue(activeWorkspaceIdAtom); const tracked = useRef(false); useEffect(() => { if (tracked.current) return; @@ -472,9 +472,9 @@ function ErrorCard({ result }: { result: ErrorResult }) { trackAutomationChatCreateFailed({ reason: "error", message: result.message, - workspace_id: searchSpaceId ? Number(searchSpaceId) : undefined, + workspace_id: workspaceId ? Number(workspaceId) : undefined, }); - }, [result.message, searchSpaceId]); + }, [result.message, workspaceId]); return (
diff --git a/surfsense_web/components/workspace-form.tsx b/surfsense_web/components/workspace-form.tsx index e87b36504..4c23a724f 100644 --- a/surfsense_web/components/workspace-form.tsx +++ b/surfsense_web/components/workspace-form.tsx @@ -35,15 +35,15 @@ import { Tilt } from "@/components/ui/tilt"; import { cn } from "@/lib/utils"; // Define the form schema with Zod -const searchSpaceFormSchema = z.object({ +const workspaceFormSchema = z.object({ name: z.string().min(1, "Name is required"), description: z.string().optional(), }); // Define the type for the form values -type SearchSpaceFormValues = z.infer; +type WorkspaceFormValues = z.infer; -interface SearchSpaceFormProps { +interface WorkspaceFormProps { onSubmit?: (data: { name: string; description?: string }) => void; onDelete?: () => void; className?: string; @@ -51,19 +51,19 @@ interface SearchSpaceFormProps { initialData?: { name: string; description?: string }; } -export function SearchSpaceForm({ +export function WorkspaceForm({ onSubmit, onDelete, className, isEditing = false, initialData = { name: "", description: "" }, -}: SearchSpaceFormProps) { +}: WorkspaceFormProps) { const [showDeleteDialog, setShowDeleteDialog] = useState(false); const router = useRouter(); // Initialize the form with React Hook Form and Zod validation - const form = useForm({ - resolver: zodResolver(searchSpaceFormSchema), + const form = useForm({ + resolver: zodResolver(workspaceFormSchema), defaultValues: { name: initialData.name, description: initialData.description, @@ -71,7 +71,7 @@ export function SearchSpaceForm({ }); // Handle form submission - const handleFormSubmit = (values: SearchSpaceFormValues) => { + const handleFormSubmit = (values: WorkspaceFormValues) => { if (onSubmit) { onSubmit(values); } @@ -119,7 +119,7 @@ export function SearchSpaceForm({

- {isEditing ? "Edit Search Space" : "Create Search Space"} + {isEditing ? "Edit Workspace" : "Create Workspace"}

{isEditing && onDelete && ( @@ -193,7 +193,7 @@ export function SearchSpaceForm({ )}

- A search space is your personal workspace. Connect external sources, upload documents, + A workspace is your personal workspace. Connect external sources, upload documents, take notes, and get work done with AI agents.

@@ -211,9 +211,9 @@ export function SearchSpaceForm({ Name - + - A unique name for your search space. + A unique name for your workspace. )} @@ -228,10 +228,10 @@ export function SearchSpaceForm({ Description (optional) - + - A brief description of what this search space will be used for. + A brief description of what this workspace will be used for. @@ -250,4 +250,4 @@ export function SearchSpaceForm({ ); } -export default SearchSpaceForm; +export default WorkspaceForm; diff --git a/surfsense_web/content/docs/connectors/baidu-search.mdx b/surfsense_web/content/docs/connectors/baidu-search.mdx index b6e33f310..d773f4736 100644 --- a/surfsense_web/content/docs/connectors/baidu-search.mdx +++ b/surfsense_web/content/docs/connectors/baidu-search.mdx @@ -93,7 +93,7 @@ Baidu Search does not create indexed documents in your knowledge base. It runs w **No Baidu results appear** -- Confirm the Baidu Search connector is active in the current search space. +- Confirm the Baidu Search connector is active in the current workspace. - Try a Chinese query with clear search intent, for example `百度智能云千帆 AppBuilder 最新功能`. - Check whether other web search engines are returning results. If none are, review the general [Web Search](/docs/how-to/web-search) setup. diff --git a/surfsense_web/content/docs/connectors/circleback.mdx b/surfsense_web/content/docs/connectors/circleback.mdx index 709e35f45..743117952 100644 --- a/surfsense_web/content/docs/connectors/circleback.mdx +++ b/surfsense_web/content/docs/connectors/circleback.mdx @@ -44,7 +44,7 @@ The Circleback connector uses a **webhook-based integration**. Unlike other conn 3. Click **Connect** to create the connector -Circleback uses webhooks, so no API key or authentication is required. The webhook URL is unique to your search space. +Circleback uses webhooks, so no API key or authentication is required. The webhook URL is unique to your workspace. ### Step 2: Copy Your Webhook URL @@ -57,7 +57,7 @@ After creating the connector: The webhook URL looks like: ``` -https://your-surfsense-url/api/v1/webhooks/circleback/{search_space_id} +https://your-surfsense-url/api/v1/webhooks/circleback/{workspace_id} ``` ### Step 3: Configure Circleback Automation @@ -101,7 +101,7 @@ Once configured, new meetings will automatically appear in SurfSense after Circl 1. Attend or process a meeting with Circleback 2. Wait for Circleback to complete processing (usually a few minutes after the meeting ends) -3. Check your SurfSense search space for the new meeting document +3. Check your SurfSense workspace for the new meeting document Each meeting document includes: - A direct link to view the meeting on Circleback diff --git a/surfsense_web/content/docs/connectors/obsidian.mdx b/surfsense_web/content/docs/connectors/obsidian.mdx index 19c6a34c6..e69024913 100644 --- a/surfsense_web/content/docs/connectors/obsidian.mdx +++ b/surfsense_web/content/docs/connectors/obsidian.mdx @@ -29,7 +29,7 @@ This works for cloud and self-hosted deployments, including desktop and mobile c 3. In Obsidian, open **Settings → SurfSense**. 4. Paste your SurfSense API token from the user settings section. 5. Paste your Server URL in the plugin setting: either your SurfSense main domain (if `/api/v1` rewrites are enabled) or your direct backend URL. -6. Choose the Search Space in the plugin, then the first sync should run automatically. +6. Choose the Workspace in the plugin, then the first sync should run automatically. 7. Confirm the connector appears as **Obsidian - <vault>** in SurfSense. ## Install via BRAT (recommended) @@ -55,7 +55,7 @@ If you previously used the legacy Obsidian connector architecture, migrate to th ## Troubleshooting **Plugin connects but no files appear** -- Verify the plugin is pointed to the correct Search Space. +- Verify the plugin is pointed to the correct Workspace. - Trigger a manual sync from the plugin settings. - Confirm your API token is valid and not expired. diff --git a/surfsense_web/content/docs/how-to/realtime-collaboration.mdx b/surfsense_web/content/docs/how-to/realtime-collaboration.mdx index 73032c798..3031511fd 100644 --- a/surfsense_web/content/docs/how-to/realtime-collaboration.mdx +++ b/surfsense_web/content/docs/how-to/realtime-collaboration.mdx @@ -5,17 +5,17 @@ description: How to invite teammates, share chats, and collaborate in realtime o # Realtime Collaboration -SurfSense supports realtime collaboration so your team can work together on shared Search Spaces and chats. This guide walks you through the full setup. +SurfSense supports realtime collaboration so your team can work together on shared Workspaces and chats. This guide walks you through the full setup. ## Step 1: Invite Members -Go to the **Manage Members** page in your Search Space and create an invite for your teammates. +Go to the **Manage Members** page in your Workspace and create an invite for your teammates. Invite Members ## Step 2: Teammate Joins -Your teammate accepts the invite and the Search Space becomes shared between you. +Your teammate accepts the invite and the Workspace becomes shared between you. Invite Join Flow diff --git a/surfsense_web/content/docs/local-models/lm-studio.mdx b/surfsense_web/content/docs/local-models/lm-studio.mdx index 6877786e5..d43ac1532 100644 --- a/surfsense_web/content/docs/local-models/lm-studio.mdx +++ b/surfsense_web/content/docs/local-models/lm-studio.mdx @@ -6,7 +6,7 @@ description: Connect LM Studio to SurfSense # Connect LM Studio Connect to your LM Studio local server. Add it from -**Search Space Settings > Models**. +**Workspace Settings > Models**. ## Base URL @@ -51,7 +51,7 @@ Replace `` with the LAN IP or domain for that machine. ## Add the Connection -1. Open Search Space Settings. +1. Open Workspace Settings. 2. Go to Models. 3. Select LM Studio. 4. Set API Base URL. diff --git a/surfsense_web/content/docs/local-models/ollama.mdx b/surfsense_web/content/docs/local-models/ollama.mdx index b062d98b0..fdf9f30e6 100644 --- a/surfsense_web/content/docs/local-models/ollama.mdx +++ b/surfsense_web/content/docs/local-models/ollama.mdx @@ -6,7 +6,7 @@ description: Connect Ollama to SurfSense # Connect Ollama Connect to your Ollama local server. Add it from -**Search Space Settings > Models**. +**Workspace Settings > Models**. ## Base URL @@ -52,7 +52,7 @@ Replace `` with the LAN IP or domain for that machine. ## Add the Connection -1. Open Search Space Settings. +1. Open Workspace Settings. 2. Go to Models. 3. Select Ollama. 4. Set API Base URL. diff --git a/surfsense_web/content/docs/local-models/other-local-servers.mdx b/surfsense_web/content/docs/local-models/other-local-servers.mdx index 669684929..b747d5147 100644 --- a/surfsense_web/content/docs/local-models/other-local-servers.mdx +++ b/surfsense_web/content/docs/local-models/other-local-servers.mdx @@ -56,7 +56,7 @@ http://:/v1 ## Add the Connection -1. Open Search Space Settings. +1. Open Workspace Settings. 2. Go to Models. 3. Select OpenAI Compatible. 4. Set API Base URL. diff --git a/surfsense_web/content/docs/manual-installation.mdx b/surfsense_web/content/docs/manual-installation.mdx index ab09b4155..f35939048 100644 --- a/surfsense_web/content/docs/manual-installation.mdx +++ b/surfsense_web/content/docs/manual-installation.mdx @@ -685,7 +685,7 @@ To verify your installation: 1. Open your browser and navigate to `http://localhost:3000` 2. Sign in with your Google account (or local credentials if `AUTH_TYPE=LOCAL`) -3. Create a search space and try uploading a document +3. Create a workspace and try uploading a document 4. Watch the upload status update live without refreshing. This confirms zero-cache is wired up correctly 5. Test the chat functionality with your uploaded content @@ -709,7 +709,7 @@ To verify your installation: Now that you have SurfSense running locally, you can explore its features: -- Create search spaces for organizing your content +- Create workspaces for organizing your content - Upload documents or use the browser extension to save webpages - Ask questions about your saved content - Explore the advanced RAG capabilities diff --git a/surfsense_web/content/docs/messaging-channels/discord.mdx b/surfsense_web/content/docs/messaging-channels/discord.mdx index c0874dfe3..7671b0741 100644 --- a/surfsense_web/content/docs/messaging-channels/discord.mdx +++ b/surfsense_web/content/docs/messaging-channels/discord.mdx @@ -64,7 +64,7 @@ callback. 1. Discord sends a `MESSAGE_CREATE` event over its WebSocket API. 2. SurfSense stores the event in the durable gateway inbox. -3. SurfSense resolves the Discord user binding to a SurfSense user and search space. +3. SurfSense resolves the Discord user binding to a SurfSense user and workspace. 4. SurfSense runs the backend agent with that user's permissions. 5. The agent reply is posted back to the same Discord channel. diff --git a/surfsense_web/content/docs/messaging-channels/slack.mdx b/surfsense_web/content/docs/messaging-channels/slack.mdx index 4e001d13a..8c73e553b 100644 --- a/surfsense_web/content/docs/messaging-channels/slack.mdx +++ b/surfsense_web/content/docs/messaging-channels/slack.mdx @@ -79,6 +79,6 @@ the Slack app to your workspace so Slack grants the updated permissions. 1. Slack sends an `app_mention` event to SurfSense. 2. SurfSense verifies the Slack signature and stores the event in the gateway inbox. -3. SurfSense resolves the Slack user binding to a SurfSense user and search space. +3. SurfSense resolves the Slack user binding to a SurfSense user and workspace. 4. SurfSense runs the backend agent with that user's permissions. 5. The agent reply is posted back in the same Slack thread. diff --git a/surfsense_web/content/docs/messaging-channels/telegram.mdx b/surfsense_web/content/docs/messaging-channels/telegram.mdx index 3487da864..35fa1c4fb 100644 --- a/surfsense_web/content/docs/messaging-channels/telegram.mdx +++ b/surfsense_web/content/docs/messaging-channels/telegram.mdx @@ -59,4 +59,4 @@ webhook or pending `getUpdates` session before relying on the new mode. 2. The user starts Telegram pairing. 3. SurfSense provides a pairing code or bot link. 4. The user sends the pairing command to the Telegram bot. -5. SurfSense binds that Telegram chat to the selected search space. +5. SurfSense binds that Telegram chat to the selected workspace. diff --git a/surfsense_web/content/docs/messaging-channels/troubleshooting.mdx b/surfsense_web/content/docs/messaging-channels/troubleshooting.mdx index bdd385e28..e43015b4c 100644 --- a/surfsense_web/content/docs/messaging-channels/troubleshooting.mdx +++ b/surfsense_web/content/docs/messaging-channels/troubleshooting.mdx @@ -63,4 +63,4 @@ Check that: - Message Content Intent is enabled. - The bot can view and send messages in the channel. - Exactly one backend process is running the Discord listener. -- The Discord user is paired to a SurfSense user and search space. +- The Discord user is paired to a SurfSense user and workspace. diff --git a/surfsense_web/content/docs/testing.mdx b/surfsense_web/content/docs/testing.mdx index 9a79cae4e..7c51f38f1 100644 --- a/surfsense_web/content/docs/testing.mdx +++ b/surfsense_web/content/docs/testing.mdx @@ -101,5 +101,5 @@ import pytest pytestmark = pytest.mark.integration # or pytest.mark.unit ``` -3. Use fixtures from `conftest.py` — `client`, `headers`, `search_space_id`, and `cleanup_doc_ids` are available to integration tests. Unit tests get `make_connector_document` and sample ID fixtures. +3. Use fixtures from `conftest.py` — `client`, `headers`, `workspace_id`, and `cleanup_doc_ids` are available to integration tests. Unit tests get `make_connector_document` and sample ID fixtures. 4. Register any new markers in `pyproject.toml` under `markers`. diff --git a/surfsense_web/contracts/types/automation.types.ts b/surfsense_web/contracts/types/automation.types.ts index c9a286542..f90d6a52d 100644 --- a/surfsense_web/contracts/types/automation.types.ts +++ b/surfsense_web/contracts/types/automation.types.ts @@ -61,7 +61,7 @@ export const inputs = z.object({ export type Inputs = z.infer; // Captured model snapshot (server-managed). Set at create time and preserved -// across edits so runs are insulated from later chat/search-space model changes. +// across edits so runs are insulated from later chat/workspace model changes. export const automationModels = z.object({ chat_model_id: z.number().int().default(0), image_gen_model_id: z.number().int().default(0), diff --git a/surfsense_web/contracts/types/chat-threads.types.ts b/surfsense_web/contracts/types/chat-threads.types.ts index 1362d5fc1..e4b45ad61 100644 --- a/surfsense_web/contracts/types/chat-threads.types.ts +++ b/surfsense_web/contracts/types/chat-threads.types.ts @@ -59,7 +59,7 @@ export const publicChatSnapshotDetail = z.object({ }); /** - * List public chat snapshots for search space + * List public chat snapshots for workspace */ export const publicChatSnapshotsBySpaceRequest = z.object({ workspace_id: z.number(), diff --git a/surfsense_web/contracts/types/members.types.ts b/surfsense_web/contracts/types/members.types.ts index 5d3516a66..4872739c5 100644 --- a/surfsense_web/contracts/types/members.types.ts +++ b/surfsense_web/contracts/types/members.types.ts @@ -54,11 +54,11 @@ export const deleteMembershipResponse = z.object({ /** * Leave workspace */ -export const leaveSearchSpaceRequest = z.object({ +export const leaveWorkspaceRequest = z.object({ workspace_id: z.number(), }); -export const leaveSearchSpaceResponse = z.object({ +export const leaveWorkspaceResponse = z.object({ message: z.string(), }); @@ -84,7 +84,7 @@ export type UpdateMembershipRequest = z.infer; export type UpdateMembershipResponse = z.infer; export type DeleteMembershipRequest = z.infer; export type DeleteMembershipResponse = z.infer; -export type LeaveSearchSpaceRequest = z.infer; -export type LeaveSearchSpaceResponse = z.infer; +export type LeaveWorkspaceRequest = z.infer; +export type LeaveWorkspaceResponse = z.infer; export type GetMyAccessRequest = z.infer; export type GetMyAccessResponse = z.infer; diff --git a/surfsense_web/contracts/types/workspace.types.ts b/surfsense_web/contracts/types/workspace.types.ts index b41027aa1..9b4541b1e 100644 --- a/surfsense_web/contracts/types/workspace.types.ts +++ b/surfsense_web/contracts/types/workspace.types.ts @@ -1,7 +1,7 @@ import { z } from "zod"; import { paginationQueryParams } from "."; -export const searchSpace = z.object({ +export const workspace = z.object({ id: z.number(), name: z.string(), description: z.string().nullable(), @@ -16,9 +16,9 @@ export const searchSpace = z.object({ }); /** - * Get search spaces + * Get workspaces */ -export const getSearchSpacesRequest = z.object({ +export const getWorkspacesRequest = z.object({ queryParams: paginationQueryParams .extend({ owned_only: z.boolean().optional(), @@ -26,31 +26,31 @@ export const getSearchSpacesRequest = z.object({ .nullish(), }); -export const getSearchSpacesResponse = z.array(searchSpace); +export const getWorkspacesResponse = z.array(workspace); /** - * Create search space + * Create workspace */ -export const createSearchSpaceRequest = searchSpace.pick({ name: true, description: true }).extend({ +export const createWorkspaceRequest = workspace.pick({ name: true, description: true }).extend({ citations_enabled: z.boolean().prefault(true).optional(), qna_custom_instructions: z.string().nullable().optional(), }); -export const createSearchSpaceResponse = searchSpace.omit({ member_count: true, is_owner: true }); +export const createWorkspaceResponse = workspace.omit({ member_count: true, is_owner: true }); /** - * Get search space + * Get workspace */ -export const getSearchSpaceRequest = searchSpace.pick({ id: true }); +export const getWorkspaceRequest = workspace.pick({ id: true }); -export const getSearchSpaceResponse = searchSpace.omit({ member_count: true, is_owner: true }); +export const getWorkspaceResponse = workspace.omit({ member_count: true, is_owner: true }); /** - * Update search space + * Update workspace */ -export const updateSearchSpaceRequest = z.object({ +export const updateWorkspaceRequest = z.object({ id: z.number(), - data: searchSpace + data: workspace .pick({ name: true, description: true, @@ -61,45 +61,45 @@ export const updateSearchSpaceRequest = z.object({ .partial(), }); -export const updateSearchSpaceResponse = searchSpace.omit({ member_count: true, is_owner: true }); +export const updateWorkspaceResponse = workspace.omit({ member_count: true, is_owner: true }); -export const updateSearchSpaceApiAccessRequest = z.object({ +export const updateWorkspaceApiAccessRequest = z.object({ id: z.number(), api_access_enabled: z.boolean(), }); -export const updateSearchSpaceApiAccessResponse = searchSpace.omit({ +export const updateWorkspaceApiAccessResponse = workspace.omit({ member_count: true, is_owner: true, }); /** - * Delete search space + * Delete workspace */ -export const deleteSearchSpaceRequest = searchSpace.pick({ id: true }); +export const deleteWorkspaceRequest = workspace.pick({ id: true }); -export const deleteSearchSpaceResponse = z.object({ +export const deleteWorkspaceResponse = z.object({ message: z.literal("Workspace deleted successfully"), }); /** - * Leave search space (for non-owners) + * Leave workspace (for non-owners) */ -export const leaveSearchSpaceResponse = z.object({ +export const leaveWorkspaceResponse = z.object({ message: z.literal("Successfully left the workspace"), }); // Inferred types -export type SearchSpace = z.infer; -export type GetSearchSpacesRequest = z.infer; -export type GetSearchSpacesResponse = z.infer; -export type CreateSearchSpaceRequest = z.infer; -export type CreateSearchSpaceResponse = z.infer; -export type GetSearchSpaceRequest = z.infer; -export type GetSearchSpaceResponse = z.infer; -export type UpdateSearchSpaceRequest = z.infer; -export type UpdateSearchSpaceResponse = z.infer; -export type UpdateSearchSpaceApiAccessRequest = z.infer; -export type UpdateSearchSpaceApiAccessResponse = z.infer; -export type DeleteSearchSpaceRequest = z.infer; -export type DeleteSearchSpaceResponse = z.infer; +export type Workspace = z.infer; +export type GetWorkspacesRequest = z.infer; +export type GetWorkspacesResponse = z.infer; +export type CreateWorkspaceRequest = z.infer; +export type CreateWorkspaceResponse = z.infer; +export type GetWorkspaceRequest = z.infer; +export type GetWorkspaceResponse = z.infer; +export type UpdateWorkspaceRequest = z.infer; +export type UpdateWorkspaceResponse = z.infer; +export type UpdateWorkspaceApiAccessRequest = z.infer; +export type UpdateWorkspaceApiAccessResponse = z.infer; +export type DeleteWorkspaceRequest = z.infer; +export type DeleteWorkspaceResponse = z.infer; diff --git a/surfsense_web/features/artifacts-library/hooks/use-library-artifacts.ts b/surfsense_web/features/artifacts-library/hooks/use-library-artifacts.ts index e9ed68633..af53d35f9 100644 --- a/surfsense_web/features/artifacts-library/hooks/use-library-artifacts.ts +++ b/surfsense_web/features/artifacts-library/hooks/use-library-artifacts.ts @@ -19,12 +19,12 @@ function videoStatus(status: string): LibraryArtifactStatus { // Each list is fetched independently; one failing source shouldn't blank the // whole library, so failures degrade to an empty slice. -async function fetchLibraryArtifacts(searchSpaceId: number): Promise { +async function fetchLibraryArtifacts(workspaceId: number): Promise { const [reports, podcasts, videos, images] = await Promise.all([ - reportsApiService.list(searchSpaceId).catch(() => []), - podcastsApiService.list(searchSpaceId).catch(() => []), - videoPresentationsApiService.list(searchSpaceId).catch(() => []), - imageGenerationsApiService.list(searchSpaceId).catch(() => []), + reportsApiService.list(workspaceId).catch(() => []), + podcastsApiService.list(workspaceId).catch(() => []), + videoPresentationsApiService.list(workspaceId).catch(() => []), + imageGenerationsApiService.list(workspaceId).catch(() => []), ]); const artifacts: LibraryArtifact[] = []; @@ -86,11 +86,11 @@ async function fetchLibraryArtifacts(searchSpaceId: number): Promise fetchLibraryArtifacts(searchSpaceId), - enabled: Number.isFinite(searchSpaceId) && searchSpaceId > 0, + queryKey: ["artifacts-library", workspaceId], + queryFn: () => fetchLibraryArtifacts(workspaceId), + enabled: Number.isFinite(workspaceId) && workspaceId > 0, staleTime: 60 * 1000, }); diff --git a/surfsense_web/features/artifacts-library/model/artifact.ts b/surfsense_web/features/artifacts-library/model/artifact.ts index d55751737..9c726f5c0 100644 --- a/surfsense_web/features/artifacts-library/model/artifact.ts +++ b/surfsense_web/features/artifacts-library/model/artifact.ts @@ -1,10 +1,10 @@ -/** Deliverable kinds surfaced in the search-space-wide artifacts library. */ +/** Deliverable kinds surfaced in the workspace-wide artifacts library. */ export type LibraryArtifactKind = "report" | "resume" | "podcast" | "video" | "image"; export type LibraryArtifactStatus = "ready" | "running" | "error"; /** - * A deliverable aggregated from the search space's list endpoints. The heavy + * A deliverable aggregated from the workspace's list endpoints. The heavy * content (report body, audio, video frames, image bytes) is fetched lazily by * the viewer when a card is opened. */ diff --git a/surfsense_web/features/artifacts-library/ui/artifact-card.tsx b/surfsense_web/features/artifacts-library/ui/artifact-card.tsx index c0ffd1f93..d8abea14a 100644 --- a/surfsense_web/features/artifacts-library/ui/artifact-card.tsx +++ b/surfsense_web/features/artifacts-library/ui/artifact-card.tsx @@ -6,11 +6,11 @@ import { KIND_META } from "./kind-meta"; export function ArtifactCard({ artifact, - searchSpaceId, + workspaceId, onOpen, }: { artifact: LibraryArtifact; - searchSpaceId: number; + workspaceId: number; onOpen: (artifact: LibraryArtifact) => void; }) { const meta = KIND_META[artifact.kind]; @@ -50,7 +50,7 @@ export function ArtifactCard({ {artifact.sourceThreadId ? ( diff --git a/surfsense_web/features/artifacts-library/ui/artifacts-library.tsx b/surfsense_web/features/artifacts-library/ui/artifacts-library.tsx index 3c2d3f368..53010fba2 100644 --- a/surfsense_web/features/artifacts-library/ui/artifacts-library.tsx +++ b/surfsense_web/features/artifacts-library/ui/artifacts-library.tsx @@ -33,7 +33,7 @@ function ErrorState({ onRetry }: { onRetry: () => void }) {

Couldn't load artifacts

- Something went wrong fetching this search space's deliverables. + Something went wrong fetching this workspace's deliverables.