@dxos/plugin-deck 0.8.4-staging.60fe92afc8 → 0.9.1-main.c7dcc2e112
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/neutral/{DeckLayout-DEURA3KR.mjs → DeckLayout-VX2BP4Q2.mjs} +35 -22
- package/dist/lib/neutral/DeckLayout-VX2BP4Q2.mjs.map +7 -0
- package/dist/lib/neutral/DeckPlugin.mjs +2 -2
- package/dist/lib/neutral/DeckPlugin.mjs.map +4 -4
- package/dist/lib/neutral/{DeckSettings-W5I57OXM.mjs → DeckSettings-CQQZJ2YS.mjs} +3 -3
- package/dist/lib/neutral/DeckSettings-CQQZJ2YS.mjs.map +7 -0
- package/dist/lib/neutral/{add-toast-TNB6DXWU.mjs → add-toast-APKTCLIA.mjs} +2 -2
- package/dist/lib/neutral/{adjust-HNU5CCRO.mjs → adjust-7CZI4GK3.mjs} +3 -3
- package/dist/lib/neutral/{app-graph-builder-HMLT627T.mjs → app-graph-builder-6HTXRTU2.mjs} +5 -5
- package/dist/lib/neutral/app-graph-builder-6HTXRTU2.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +8 -8
- package/dist/lib/neutral/{check-app-scheme-INSOF72J.mjs → check-app-scheme-HSAORHHX.mjs} +2 -2
- package/dist/lib/neutral/{chunk-BS4EOYMK.mjs → chunk-CL7JIOI5.mjs} +28 -14
- package/dist/lib/neutral/chunk-CL7JIOI5.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-WAXJPQJI.mjs → chunk-DNG3L5QN.mjs} +31 -33
- package/dist/lib/neutral/chunk-DNG3L5QN.mjs.map +7 -0
- package/dist/lib/neutral/chunk-KY7LMF4D.mjs +46 -0
- package/dist/lib/neutral/chunk-KY7LMF4D.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-324PPIZB.mjs → chunk-KZFJ4PBT.mjs} +4 -4
- package/dist/lib/neutral/chunk-KZFJ4PBT.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-GBIGQKYW.mjs → chunk-NGX6RXNV.mjs} +4 -4
- package/dist/lib/neutral/chunk-NGX6RXNV.mjs.map +7 -0
- package/dist/lib/neutral/chunk-UZLAR4DR.mjs +8 -0
- package/dist/lib/neutral/{close-ASKR22A6.mjs → close-KJUCFIJ5.mjs} +3 -3
- package/dist/lib/neutral/components/index.mjs +1 -1
- package/dist/lib/neutral/containers/index.mjs +3 -3
- package/dist/lib/neutral/index.mjs +12 -2
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/meta.mjs +1 -1
- package/dist/lib/neutral/{notification-tracker-P36322BH.mjs → notification-tracker-CUDFRDCF.mjs} +9 -9
- package/dist/lib/neutral/{notification-tracker-P36322BH.mjs.map → notification-tracker-CUDFRDCF.mjs.map} +3 -3
- package/dist/lib/neutral/{open-5OYNO3RT.mjs → open-VU7YS3HB.mjs} +7 -7
- package/dist/lib/neutral/open-VU7YS3HB.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +1 -1
- package/dist/lib/neutral/plugin.mjs +2 -2
- package/dist/lib/neutral/{react-root-HH5DEUOG.mjs → react-root-E6TAFHX6.mjs} +2 -2
- package/dist/lib/neutral/react-root-E6TAFHX6.mjs.map +7 -0
- package/dist/lib/neutral/{react-surface-3UVVCK3O.mjs → react-surface-O4POQWYL.mjs} +4 -5
- package/dist/lib/neutral/react-surface-O4POQWYL.mjs.map +7 -0
- package/dist/lib/neutral/{revert-workspace-B2QLT2C4.mjs → revert-workspace-24TKG3I7.mjs} +2 -2
- package/dist/lib/neutral/{scroll-into-view-B52C3PJO.mjs → scroll-into-view-3VXT6TWC.mjs} +2 -2
- package/dist/lib/neutral/{set-PA35ONXO.mjs → set-RFOLTI57.mjs} +3 -3
- package/dist/lib/neutral/{set-layout-mode-RPCCPQRB.mjs → set-layout-mode-AZ73W52Z.mjs} +2 -2
- package/dist/lib/neutral/{settings-EGNYUM4T.mjs → settings-6CDQEB6B.mjs} +3 -3
- package/dist/lib/neutral/settings-6CDQEB6B.mjs.map +7 -0
- package/dist/lib/neutral/{state-IIDXMQUO.mjs → state-D3YXB5NP.mjs} +3 -3
- package/dist/lib/neutral/{state-IIDXMQUO.mjs.map → state-D3YXB5NP.mjs.map} +2 -2
- package/dist/lib/neutral/{switch-workspace-LZF4KZXH.mjs → switch-workspace-TBPT23CZ.mjs} +4 -4
- package/dist/lib/neutral/switch-workspace-TBPT23CZ.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +1 -1
- package/dist/lib/neutral/translations.mjs.map +3 -3
- package/dist/lib/neutral/types/index.mjs +11 -1
- package/dist/lib/neutral/{update-companion-YUCZZVGY.mjs → update-companion-5LCY6QME.mjs} +2 -2
- package/dist/lib/neutral/{update-complementary-7FZNB55J.mjs → update-complementary-HZ7QXZYE.mjs} +2 -2
- package/dist/lib/neutral/{update-dialog-FNQTSSAP.mjs → update-dialog-A7W3R5EI.mjs} +2 -2
- package/dist/lib/neutral/{update-plank-size-3YW4NXEY.mjs → update-plank-size-XHTYBLSD.mjs} +2 -2
- package/dist/lib/neutral/{update-popover-G2VUD7E6.mjs → update-popover-RDIHG73B.mjs} +2 -2
- package/dist/lib/neutral/{update-sidebar-KRHPUHUB.mjs → update-sidebar-GEI7USA5.mjs} +2 -2
- package/dist/lib/neutral/{url-handler-A6HLW4RB.mjs → url-handler-PUS4X33T.mjs} +10 -10
- package/dist/lib/neutral/url-handler-PUS4X33T.mjs.map +7 -0
- package/dist/types/dx.config.d.ts +28 -0
- package/dist/types/dx.config.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +8 -196
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/state.d.ts +2 -2
- package/dist/types/src/components/Matrix/Matrix.stories.d.ts.map +1 -1
- package/dist/types/src/containers/Deck/Banner.d.ts.map +1 -1
- package/dist/types/src/containers/Deck/DeckViewport.d.ts.map +1 -1
- package/dist/types/src/containers/Deck/StatusBar.d.ts.map +1 -1
- package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts.map +1 -1
- package/dist/types/src/containers/DeckLayout/Popover.d.ts.map +1 -1
- package/dist/types/src/containers/Plank/PlankHeading.d.ts.map +1 -1
- package/dist/types/src/containers/Sidebar/ComplementarySidebar.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +28 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/open.d.ts.map +1 -1
- package/dist/types/src/operations/switch-workspace.d.ts.map +1 -1
- package/dist/types/src/types/DeckCapabilities.d.ts +2 -2
- package/dist/types/src/types/DeckCapabilities.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +1 -0
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +4 -2
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/src/types/surface.d.ts +12 -0
- package/dist/types/src/types/surface.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dx.config.ts +35 -0
- package/package.json +39 -39
- package/src/DeckPlugin.test.ts +1 -1
- package/src/DeckPlugin.ts +1 -1
- package/src/capabilities/app-graph-builder.ts +4 -4
- package/src/capabilities/check-app-scheme.ts +3 -3
- package/src/capabilities/notification-tracker.ts +8 -8
- package/src/capabilities/react-root.tsx +1 -1
- package/src/capabilities/react-surface.tsx +3 -4
- package/src/capabilities/settings.ts +2 -2
- package/src/capabilities/state.ts +1 -1
- package/src/capabilities/url-handler.ts +7 -15
- package/src/components/DeckSettings/DeckSettings.tsx +2 -2
- package/src/components/Matrix/Matrix.stories.tsx +2 -1
- package/src/containers/Deck/Banner.tsx +5 -4
- package/src/containers/Deck/DeckViewport.tsx +3 -4
- package/src/containers/Deck/StatusBar.tsx +4 -2
- package/src/containers/DeckLayout/DeckLayout.stories.tsx +6 -9
- package/src/containers/DeckLayout/Fallback.tsx +1 -1
- package/src/containers/DeckLayout/Popover.tsx +37 -20
- package/src/containers/DeckLayout/Toast.tsx +1 -1
- package/src/containers/Plank/Plank.stories.tsx +2 -2
- package/src/containers/Plank/PlankControls.tsx +2 -2
- package/src/containers/Plank/PlankError.tsx +1 -1
- package/src/containers/Plank/PlankHeading.tsx +5 -6
- package/src/containers/Sidebar/ComplementarySidebar.tsx +6 -5
- package/src/containers/Sidebar/Sidebar.tsx +1 -1
- package/src/containers/Sidebar/SidebarButton.tsx +3 -3
- package/src/meta.ts +2 -27
- package/src/operations/open.ts +12 -10
- package/src/operations/switch-workspace.ts +2 -2
- package/src/translations.ts +1 -1
- package/src/types/DeckCapabilities.ts +5 -3
- package/src/types/DeckEvents.ts +1 -1
- package/src/types/DeckOperation.ts +1 -1
- package/src/types/index.ts +1 -0
- package/src/types/schema.ts +16 -12
- package/src/types/surface.ts +28 -0
- package/src/util/plank-url-params.ts +3 -3
- package/dist/lib/neutral/DeckLayout-DEURA3KR.mjs.map +0 -7
- package/dist/lib/neutral/DeckSettings-W5I57OXM.mjs.map +0 -7
- package/dist/lib/neutral/app-graph-builder-HMLT627T.mjs.map +0 -7
- package/dist/lib/neutral/chunk-324PPIZB.mjs.map +0 -7
- package/dist/lib/neutral/chunk-BS4EOYMK.mjs.map +0 -7
- package/dist/lib/neutral/chunk-GBIGQKYW.mjs.map +0 -7
- package/dist/lib/neutral/chunk-PYEY5SEC.mjs +0 -37
- package/dist/lib/neutral/chunk-PYEY5SEC.mjs.map +0 -7
- package/dist/lib/neutral/chunk-Q4W6B4IB.mjs +0 -8
- package/dist/lib/neutral/chunk-WAXJPQJI.mjs.map +0 -7
- package/dist/lib/neutral/open-5OYNO3RT.mjs.map +0 -7
- package/dist/lib/neutral/react-root-HH5DEUOG.mjs.map +0 -7
- package/dist/lib/neutral/react-surface-3UVVCK3O.mjs.map +0 -7
- package/dist/lib/neutral/settings-EGNYUM4T.mjs.map +0 -7
- package/dist/lib/neutral/switch-workspace-LZF4KZXH.mjs.map +0 -7
- package/dist/lib/neutral/url-handler-A6HLW4RB.mjs.map +0 -7
- /package/dist/lib/neutral/{add-toast-TNB6DXWU.mjs.map → add-toast-APKTCLIA.mjs.map} +0 -0
- /package/dist/lib/neutral/{adjust-HNU5CCRO.mjs.map → adjust-7CZI4GK3.mjs.map} +0 -0
- /package/dist/lib/neutral/{check-app-scheme-INSOF72J.mjs.map → check-app-scheme-HSAORHHX.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-Q4W6B4IB.mjs.map → chunk-UZLAR4DR.mjs.map} +0 -0
- /package/dist/lib/neutral/{close-ASKR22A6.mjs.map → close-KJUCFIJ5.mjs.map} +0 -0
- /package/dist/lib/neutral/{revert-workspace-B2QLT2C4.mjs.map → revert-workspace-24TKG3I7.mjs.map} +0 -0
- /package/dist/lib/neutral/{scroll-into-view-B52C3PJO.mjs.map → scroll-into-view-3VXT6TWC.mjs.map} +0 -0
- /package/dist/lib/neutral/{set-PA35ONXO.mjs.map → set-RFOLTI57.mjs.map} +0 -0
- /package/dist/lib/neutral/{set-layout-mode-RPCCPQRB.mjs.map → set-layout-mode-AZ73W52Z.mjs.map} +0 -0
- /package/dist/lib/neutral/{update-companion-YUCZZVGY.mjs.map → update-companion-5LCY6QME.mjs.map} +0 -0
- /package/dist/lib/neutral/{update-complementary-7FZNB55J.mjs.map → update-complementary-HZ7QXZYE.mjs.map} +0 -0
- /package/dist/lib/neutral/{update-dialog-FNQTSSAP.mjs.map → update-dialog-A7W3R5EI.mjs.map} +0 -0
- /package/dist/lib/neutral/{update-plank-size-3YW4NXEY.mjs.map → update-plank-size-XHTYBLSD.mjs.map} +0 -0
- /package/dist/lib/neutral/{update-popover-G2VUD7E6.mjs.map → update-popover-RDIHG73B.mjs.map} +0 -0
- /package/dist/lib/neutral/{update-sidebar-KRHPUHUB.mjs.map → update-sidebar-GEI7USA5.mjs.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/operations/open.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport {\n AppCapabilities,\n LayoutOperation,\n createEdgeExistenceChecker,\n expandPath,\n validateNavigationTarget,\n} from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\nimport { Context } from '@dxos/context';\nimport { Database, EID, Obj } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { Graph } from '@dxos/plugin-graph';\nimport { ObservabilityOperation } from '@dxos/plugin-observability';\n\nimport { openSubjectsOnActiveDeck } from '../layout';\nimport { DeckCapabilities } from '../types';\nimport { computeActiveUpdates } from '../util';\nimport { updateActiveDeck } from './helpers';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.Open> = LayoutOperation.Open.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n log('LayoutOperation.Open handler start');\n const { graph } = yield* Capability.get(AppCapabilities.AppGraph);\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n\n // Validate navigation targets, redirecting to 404 if not found.\n const capabilities = yield* Capability.Service;\n const pathResolvers = capabilities.getAll(AppCapabilities.NavigationPathResolver);\n const client = yield* Capability.get(ClientCapabilities.Client).pipe(\n Effect.catchAll(() => Effect.succeed(undefined)),\n );\n // Existence checkers for the resolved EID: local (load + catchTag) first, then remote (edge).\n const checkLocalExistence = client\n ? (id: EID.EID) => {\n const spaceId = EID.getSpaceId(id);\n const space = spaceId ? client.spaces.get(spaceId) : undefined;\n if (!space) {\n return Effect.succeed(false);\n }\n return Database.load(space.db.makeRef(id)).pipe(\n Effect.as(true),\n Effect.catchTag('EntityNotFoundError', () => Effect.succeed(false)),\n Effect.catchAll(() => Effect.succeed(false)),\n );\n }\n : undefined;\n const checkRemoteExistence = client\n ? createEdgeExistenceChecker((spaceId, body) => client.edge.http.execQuery(new Context(), spaceId, body))\n : undefined;\n\n // Immediate: skip 404 / resolver checks but still expand the path (same as validate’s first step).\n if (input.navigation === 'immediate') {\n for (const subjectId of input.subject) {\n expandPath(graph, subjectId);\n }\n }\n\n const validatedSubjects = yield* Effect.all(\n input.subject.map((subjectId) =>\n input.navigation === 'immediate'\n ? Effect.succeed(subjectId)\n : validateNavigationTarget({ graph, subjectId, pathResolvers, checkLocalExistence, checkRemoteExistence }),\n ),\n );\n input = { ...input, subject: validatedSubjects };\n\n {\n const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);\n if (input.workspace && state.activeDeck !== input.workspace) {\n yield* Operation.invoke(LayoutOperation.SwitchWorkspace, { subject: input.workspace });\n }\n }\n\n // Dedup subjects against the active deck using DXN identity.\n // The same object can appear under different graph paths (e.g., via collections vs types).\n // Resolve each subject's DXN and, if it matches an already-open deck item, remap the\n // subject to the existing deck entry so that openEntry's exact-match check succeeds.\n // Only needed in multi (deck) mode; solo mode replaces the single visible item anyway.\n {\n const deck = yield* DeckCapabilities.getDeck();\n const active = !deck.solo && deck.initialized ? deck.active : [];\n if (active.length > 0 && input.subject.length > 0) {\n const resolveDXN = (qualifiedPath: string) =>\n Effect.reduce(pathResolvers, Option.none<string>(), (acc, resolver) =>\n Option.isSome(acc)\n ? Effect.succeed(acc)\n : resolver(qualifiedPath).pipe(\n Effect.map((opt) => Option.map(opt, (dxn) => dxn.toString())),\n Effect.catchAll(() => Effect.succeed(Option.none<string>())),\n ),\n );\n\n // Build DXN → deck item ID map for active items.\n const deckDxnMap = new Map<string, string>();\n yield* Effect.all(\n active.map((deckId) =>\n resolveDXN(deckId).pipe(\n Effect.map((opt) => {\n if (Option.isSome(opt)) {\n deckDxnMap.set(opt.value, deckId);\n }\n }),\n ),\n ),\n { concurrency: 'unbounded' },\n );\n\n // Remap subjects whose DXN matches an existing deck item.\n if (deckDxnMap.size > 0) {\n const remapped = yield* Effect.all(\n input.subject.map((subjectId) =>\n resolveDXN(subjectId).pipe(\n Effect.map((opt) => {\n if (Option.isSome(opt)) {\n const existing = deckDxnMap.get(opt.value);\n if (existing && existing !== subjectId) {\n return existing;\n }\n }\n return subjectId;\n }),\n ),\n ),\n { concurrency: 'unbounded' },\n );\n input = { ...input, subject: remapped };\n }\n }\n }\n\n // Compute the next active deck state and apply it.\n // In solo or uninitialized mode the subject list replaces the deck entirely.\n // In multi (deck) mode, subjects are merged via openSubjectsOnActiveDeck which\n // uses stack semantics (truncate after pivot, then push new entries).\n let previouslyOpenIds: Set<string>;\n {\n const deck = yield* DeckCapabilities.getDeck();\n previouslyOpenIds = new Set<string>(deck.solo ? [deck.solo] : deck.active);\n const next =\n deck.solo || !deck.initialized\n ? [...input.subject]\n : openSubjectsOnActiveDeck(deck.active, input.subject, {\n pivotId: input.pivotId,\n key: input.key,\n });\n\n const { deckUpdates, toAttend: _toAttend } = computeActiveUpdates({ next, deck, attention });\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));\n }\n\n // Schedule side-effects for the newly opened items: scroll into view, expose in\n // the navigation sidebar, and emit observability events.\n // When nothing is newly opened (subject was already visible), the fallback\n // `input.subject[0]` still triggers scroll and expose so the user is taken there.\n {\n const deck = yield* DeckCapabilities.getDeck();\n const ids = deck.solo ? [deck.solo] : deck.active;\n const newlyOpen = ids.filter((i: string) => !previouslyOpenIds.has(i));\n\n if (input.scrollIntoView !== false && (newlyOpen[0] ?? input.subject[0])) {\n yield* Operation.schedule(LayoutOperation.ScrollIntoView, {\n subject: newlyOpen[0] ?? input.subject[0],\n });\n }\n\n if (newlyOpen[0] ?? input.subject[0]) {\n yield* Operation.schedule(LayoutOperation.Expose, { subject: newlyOpen[0] ?? input.subject[0] });\n }\n\n for (const subjectId of newlyOpen) {\n const typename = Option.match(Graph.getNode(graph, subjectId), {\n onNone: () => undefined,\n onSome: (node) => {\n const active = node.data;\n return Obj.isObject(active) ? Obj.getTypename(active) : undefined;\n },\n });\n yield* Operation.schedule(ObservabilityOperation.SendEvent, {\n name: 'navigation.activate',\n properties: { subjectId, typename },\n });\n }\n }\n\n return validatedSubjects;\n }),\n ),\n);\n\nexport default handler;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Effect", "Option", "Capabilities", "Capability", "AppCapabilities", "LayoutOperation", "createEdgeExistenceChecker", "expandPath", "validateNavigationTarget", "Operation", "Context", "Database", "EID", "Obj", "log", "AttentionCapabilities", "ClientCapabilities", "Graph", "ObservabilityOperation", "LayoutOperation", "graph", "Capability", "get", "AppCapabilities", "AttentionCapabilities", "capabilities", "Service", "client", "ClientCapabilities", "checkLocalExistence", "id", "spaces", "space", "Effect", "succeed", "load", "makeRef", "undefined", "checkRemoteExistence", "createEdgeExistenceChecker", "spaceId", "body", "Context", "input", "expandPath", "subjectId", "pathResolvers", "subject", "Operation", "invoke", "SwitchWorkspace", "workspace", "active", "length", "resolveDXN", "qualifiedPath", "reduce", "deckDxnMap", "Map", "isSome", "opt", "set", "deckId", "concurrency", "Option", "value", "existing", "deck", "next", "openSubjectsOnActiveDeck", "pivotId", "key", "deckUpdates", "attention", "newlyOpen", "schedule", "ScrollIntoView", "onNone", "onSome", "node", "isObject", "properties", "typename"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/react-root.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React, { useCallback } from 'react';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\n\nimport { DeckLayout } from '#containers';\nimport { useDeckState } from '#hooks';\nimport { meta } from '#meta';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Capabilities.ReactRoot, {\n id: meta.id,\n root: () => {\n const { state, updateEphemeral } = useDeckState();\n\n const handleDismissToast = useCallback(\n (id: string) => {\n if (!state.toasts.some((toast) => toast.id === id)) {\n return;\n }\n // Allow time for the toast exit animation (animate-toast-hide, 100ms) before unmounting.\n // TODO(burdon): Factor out and unregister timeout.\n setTimeout(() => {\n // Re-resolve the toast by id inside the update: the toast list may have changed during\n // the delay, so a captured index would point at the wrong (or a missing) entry.\n updateEphemeral((s) => {\n const toastToRemove = s.toasts.find((toast) => toast.id === id);\n if (!toastToRemove) {\n return s;\n }\n const newCurrentUndoId = toastToRemove.id === s.currentUndoId ? undefined : s.currentUndoId;\n return {\n ...s,\n currentUndoId: newCurrentUndoId,\n toasts: s.toasts.filter((toast) => toast.id !== id),\n };\n });\n }, 150);\n },\n [state.toasts, updateEphemeral],\n );\n\n return <DeckLayout onDismissToast={handleDismissToast} />;\n },\n }),\n ),\n);\n"],
|
|
5
|
-
"mappings": ";;;AAIA,YAAYA,YAAY;AACxB,OAAOC,SAASC,mBAAmB;AAEnC,SAASC,cAAcC,kBAAkB;AAEzC,SAASC,kBAAkB;AAC3B,SAASC,oBAAoB;AAC7B,SAASC,YAAY;AAErB,IAAA,qBAAeH,WAAWI,WAAW,MAC5BC,eACLL,WAAWM,YAAYP,aAAaQ,WAAW;EAC7CC,IAAIL,KAAKK;EACTC,MAAM,MAAA;AACJ,UAAM,EAAEC,OAAOC,gBAAe,IAAKT,aAAAA;AAEnC,UAAMU,qBAAqBd,YACzB,CAACU,OAAAA;AACC,UAAI,CAACE,MAAMG,OAAOC,KAAK,CAACC,UAAUA,MAAMP,OAAOA,EAAAA,GAAK;AAClD;MACF;AAGAQ,iBAAW,MAAA;AAGTL,wBAAgB,CAACM,MAAAA;AACf,gBAAMC,gBAAgBD,EAAEJ,OAAOM,KAAK,CAACJ,UAAUA,MAAMP,OAAOA,EAAAA;AAC5D,cAAI,CAACU,eAAe;AAClB,mBAAOD;UACT;AACA,gBAAMG,mBAAmBF,cAAcV,OAAOS,EAAEI,gBAAgBC,SAAYL,EAAEI;AAC9E,iBAAO;YACL,GAAGJ;YACHI,eAAeD;YACfP,QAAQI,EAAEJ,OAAOU,OAAO,CAACR,UAAUA,MAAMP,OAAOA,EAAAA;UAClD;QACF,CAAA;MACF,GAAG,GAAA;IACL,GACA;MAACE,MAAMG;MAAQF;KAAgB;AAGjC,WAAO,sBAAA,cAACV,YAAAA;MAAWuB,gBAAgBZ;;EACrC;AACF,CAAA,CAAA,CAAA;",
|
|
6
|
-
"names": ["Effect", "React", "useCallback", "Capabilities", "Capability", "DeckLayout", "useDeckState", "meta", "makeModule", "succeed", "contributes", "ReactRoot", "id", "root", "state", "updateEphemeral", "handleDismissToast", "toasts", "some", "toast", "setTimeout", "s", "toastToRemove", "find", "newCurrentUndoId", "currentUndoId", "undefined", "filter", "onDismissToast"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/react-surface.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React from 'react';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Surface, useSettingsState } from '@dxos/app-framework/ui';\nimport { NOT_FOUND_PATH } from '@dxos/app-toolkit';\nimport { AppSurface, NotFoundArticle } from '@dxos/app-toolkit/ui';\n\nimport { DeckSettings } from '#components';\nimport { meta } from '#meta';\nimport { type Settings } from '#types';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Capabilities.ReactSurface, [\n Surface.create({\n id: 'pluginSettings',\n filter: AppSurface.settings(AppSurface.Article, meta.id),\n component: ({ data: { subject } }) => {\n const { settings, updateSettings } = useSettingsState<Settings.Settings>(subject.atom);\n return <DeckSettings settings={settings} onSettingsChange={updateSettings} />;\n },\n }),\n Surface.create({\n id: 'notFound',\n role: 'article',\n filter: (data): data is { attendableId: string } => data.attendableId === NOT_FOUND_PATH,\n component: () => <NotFoundArticle />,\n }),\n ]),\n ),\n);\n"],
|
|
5
|
-
"mappings": ";;;AAIA,YAAYA,YAAY;AACxB,OAAOC,WAAW;AAElB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,SAASC,wBAAwB;AAC1C,SAASC,sBAAsB;AAC/B,SAASC,YAAYC,uBAAuB;AAE5C,SAASC,oBAAoB;AAC7B,SAASC,YAAY;AAGrB,IAAA,wBAAeP,WAAWQ,WAAW,MAC5BC,eACLT,WAAWU,YAAYX,aAAaY,cAAc;EAChDV,QAAQW,OAAO;IACbC,IAAI;IACJC,QAAQV,WAAWW,SAASX,WAAWY,SAAST,KAAKM,EAAE;IACvDI,WAAW,CAAC,EAAEC,MAAM,EAAEC,QAAO,EAAE,MAAE;AAC/B,YAAM,EAAEJ,UAAUK,eAAc,IAAKlB,iBAAoCiB,QAAQE,IAAI;AACrF,aAAO,sBAAA,cAACf,cAAAA;QAAaS;QAAoBO,kBAAkBF;;IAC7D;EACF,CAAA;EACAnB,QAAQW,OAAO;IACbC,IAAI;IACJU,MAAM;IACNT,QAAQ,CAACI,SAA2CA,KAAKM,iBAAiBrB;IAC1Ec,WAAW,MAAM,sBAAA,cAACZ,iBAAAA,IAAAA;EACpB,CAAA;CACD,CAAA,CAAA;",
|
|
6
|
-
"names": ["Effect", "React", "Capabilities", "Capability", "Surface", "useSettingsState", "NOT_FOUND_PATH", "AppSurface", "NotFoundArticle", "DeckSettings", "meta", "makeModule", "succeed", "contributes", "ReactSurface", "create", "id", "filter", "settings", "Article", "component", "data", "subject", "updateSettings", "atom", "onSettingsChange", "role", "attendableId"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/settings.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { createKvsStore } from '@dxos/effect';\n\nimport { meta } from '#meta';\nimport { DeckCapabilities, Settings } from '#types';\n\nexport default Capability.makeModule(() =>\n Effect.sync(() => {\n const settingsAtom = createKvsStore({\n key: meta.id,\n schema: Settings.Settings,\n defaultValue: () => ({\n showHints: false,\n enableDeck: false,\n enableNativeRedirect: false,\n encapsulatedPlanks: false,\n }),\n });\n\n return [\n Capability.contributes(DeckCapabilities.Settings, settingsAtom),\n Capability.contributes(AppCapabilities.Settings, {\n prefix: meta.id,\n schema: Settings.Settings,\n atom: settingsAtom,\n }),\n ];\n }),\n);\n"],
|
|
5
|
-
"mappings": ";;;AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,uBAAuB;AAChC,SAASC,sBAAsB;AAE/B,SAASC,YAAY;AACrB,SAASC,kBAAkBC,gBAAgB;AAE3C,IAAA,mBAAeL,WAAWM,WAAW,MAC5BC,YAAK,MAAA;AACV,QAAMC,eAAeN,eAAe;IAClCO,KAAKN,KAAKO;IACVC,QAAQN,SAASA;IACjBO,cAAc,OAAO;MACnBC,WAAW;MACXC,YAAY;MACZC,sBAAsB;MACtBC,oBAAoB;IACtB;EACF,CAAA;AAEA,SAAO;IACLhB,WAAWiB,YAAYb,iBAAiBC,UAAUG,YAAAA;IAClDR,WAAWiB,YAAYhB,gBAAgBI,UAAU;MAC/Ca,QAAQf,KAAKO;MACbC,QAAQN,SAASA;MACjBc,MAAMX;IACR,CAAA;;AAEJ,CAAA,CAAA;",
|
|
6
|
-
"names": ["Effect", "Capability", "AppCapabilities", "createKvsStore", "meta", "DeckCapabilities", "Settings", "makeModule", "sync", "settingsAtom", "key", "id", "schema", "defaultValue", "showHints", "enableDeck", "enableNativeRedirect", "encapsulatedPlanks", "contributes", "prefix", "atom"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/operations/switch-workspace.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { AppCapabilities, isPinnedWorkspace, LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\nimport { invariant } from '@dxos/invariant';\nimport { Graph, Node } from '@dxos/plugin-graph';\n\nimport { DeckCapabilities, defaultDeck } from '../types';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.SwitchWorkspace> = LayoutOperation.SwitchWorkspace.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n const { graph } = yield* Capability.get(AppCapabilities.AppGraph);\n\n {\n const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);\n // TODO(wittjosiah): This is a hack to prevent the previous deck from being set for pinned items.\n // Ideally this should be worked into the data model in a generic way.\n const shouldUpdatePrevious = !isPinnedWorkspace(state.activeDeck);\n\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => {\n const newDecks = state.decks[input.subject]\n ? state.decks\n : { ...state.decks, [input.subject]: { ...defaultDeck } };\n return {\n ...state,\n previousDeck: shouldUpdatePrevious ? state.activeDeck : state.previousDeck,\n activeDeck: input.subject,\n decks: newDecks,\n };\n });\n }\n\n {\n const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);\n const deck = state.decks[input.subject];\n invariant(deck, `Deck not found: ${input.subject}`);\n\n const first = deck.solo ? deck.solo : deck.active[0];\n if (first) {\n yield* Operation.schedule(LayoutOperation.ScrollIntoView, { subject: first });\n } else {\n const [item] = Graph.getConnections(graph, input.subject, 'child').filter(\n (node) => !Node.isActionLike(node) && !node.properties.disposition,\n );\n if (item) {\n // Use `invoke` (synchronous) rather than `schedule` (fire-and-forget) so\n // that the implicit \"open first child\" finishes BEFORE this handler\n // returns. Otherwise, a caller that follows `SwitchWorkspace` with its\n // own `SetLayoutMode`/`Open` (e.g. WelcomePlugin DefaultContent) has\n // its `solo`/`active` clobbered by this scheduled Open when it later\n // races behind the caller's state writes.\n yield* Operation.invoke(LayoutOperation.Open, { subject: [item.id] });\n }\n }\n }\n }),\n ),\n);\n\nexport default handler;\n"],
|
|
5
|
-
"mappings": ";;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,iBAAiBC,mBAAmBC,uBAAuB;AACpE,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAC1B,SAASC,OAAOC,YAAY;AAI5B,IAAA,eAA+EC;IAKzE,UAAA,gBAAA,gBAAA,KAAA,UAAA,YAAA,kBAAA,WAAA,OAAA;QACE,EAAA,MAAMC,IAAQ,OAAOC,WAAAA,IAAaC,gBAAaC,QAAAA;;AAE/C,UAAA,QAAA,OAAA,aAAA,aAAA,yBAAA,KAAA;UAIE,uBAAuBC,CAAAA,kBAAoB,MACvCJ,UACA;wBAAWI,gBAAK,yBAAA,OAAA,CAAAJ,WAAA;YAAGK,WAAMC,OAAU,MAAA,MAAA,OAAA,IAAAN,OAAA,QAAA;kBAAKO;QAAY,CAAA,MAAA,OAAA,GAAA;UAAE,GAAA;QAC1D;;aAEEC;QACAC,GAAAA;QACAL,cAAOM,uBAAAA,OAAAA,aAAAA,OAAAA;QACT,YAAA,MAAA;QACF,OAAA;MACF;IAEA,CAAA;;;AAGEC,UAAAA,QAAUC,OAAO,aAAgB,aAAQN,yBAAS,KAAA;AAElD,UAAMO,OAAAA,MAAaC,MAAI,MAAQA,OAAOF;AACtC,cAAIC,MAAO,mBAAA,MAAA,OAAA,IAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,MAAA,GAAA,CAAA,QAAA,oCAAA,EAAA,CAAA;UACT,QAAOE,KAAAA,OAAUC,KAASjB,OAAAA,KAAAA,OAAgBkB,CAAAA;eAAkBX;AAAe,aAAA,UAAA,SAAA,gBAAA,gBAAA;QACtE,SAAA;MACL,CAAA;WAGA;YACE,CAAA,IAAA,IAAA,MAAA,eAAA,OAAA,MAAA,SAAA,OAAA,EAAA,OAAA,CAAA,SAAyE,CAAA,KAAA,aAAA,IAAA,KAAA,CAAA,KAAA,WAAA,WAAA;UACzE,MAAA;yBAKiE,OAAA,gBAAA,MAAA;mBAAC;YAAC,KAAA;UACrE;QACF,CAAA;MACF;IACF;EAIJ;;;",
|
|
6
|
-
"names": ["Effect", "Capabilities", "Capability", "AppCapabilities", "isPinnedWorkspace", "LayoutOperation", "Operation", "invariant", "Graph", "Node", "LayoutOperation", "state", "Capabilities", "getAtomValue", "DeckCapabilities", "decks", "input", "subject", "defaultDeck", "previousDeck", "activeDeck", "newDecks", "invariant", "deck", "first", "solo", "Operation", "schedule", "ScrollIntoView"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/url-handler.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport {\n AppCapabilities,\n LayoutOperation,\n NOT_FOUND_PATH,\n expandPath,\n fromUrlPath,\n getWorkspaceFromPath,\n toUrlPath,\n} from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\nimport { EffectEx } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { Node } from '@dxos/plugin-graph';\nimport { isTauri } from '@dxos/util';\n\nimport { DeckCapabilities, type StoredDeckState, defaultDeck } from '#types';\n\nimport { updateActiveDeck } from '../operations/helpers';\nimport { deserializePlanks, serializePlanks, stripPlanks } from '../util';\nimport { shouldDeferNavigationHandlers } from './check-app-scheme';\n\n/** Dispatch all NavigationHandler contributions with a given URL. */\nconst dispatchNavigationHandlers = Effect.fn(function* (url: URL) {\n const handlers = yield* Capability.getAll(AppCapabilities.NavigationHandler);\n yield* Effect.all(\n handlers.map((handler) => handler(url)),\n { concurrency: 'unbounded' },\n );\n});\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const operationService = yield* Capability.get(Capabilities.OperationInvoker);\n const capabilities = yield* Capability.Service;\n const registry = yield* Capability.get(Capabilities.AtomRegistry);\n const stateAtom = yield* Capability.get(DeckCapabilities.State);\n const settingsAtom = yield* Capability.get(DeckCapabilities.Settings);\n\n const provideServices = <A, E>(effect: Effect.Effect<A, E, Capability.Service | Operation.Service>) =>\n effect.pipe(\n Effect.provideService(Capability.Service, capabilities),\n Effect.provideService(Operation.Service, operationService),\n );\n\n // Helper to get state.\n const getState = () => registry.get(stateAtom);\n\n // Helper to get computed deck from state.\n const getDeck = () => {\n const state = getState();\n const deck = state.decks[state.activeDeck];\n invariant(deck, `Deck not found: ${state.activeDeck}`);\n return deck;\n };\n\n // Helper to update state.\n const updateState = (fn: (current: StoredDeckState) => StoredDeckState) => {\n registry.set(stateAtom, fn(getState()));\n };\n\n const handleNavigation = Effect.fn(function* (url?: URL) {\n const { graph } = yield* Capability.get(AppCapabilities.AppGraph);\n const resolvedUrl = url ?? new URL(window.location.href);\n // When native redirect is active, check-app-scheme owns the initial dispatch\n // to prevent one-time tokens from being consumed before the native app can use them.\n const settings = registry.get(settingsAtom);\n const deferHandlers = settings?.enableNativeRedirect && shouldDeferNavigationHandlers();\n if (!deferHandlers) {\n yield* dispatchNavigationHandlers(resolvedUrl);\n }\n\n const pathname = resolvedUrl.pathname;\n const state = getState();\n if (pathname === '/reset') {\n updateState((s) => ({\n ...s,\n activeDeck: 'default',\n decks: {\n default: { ...defaultDeck },\n },\n }));\n window.location.pathname = '/';\n return;\n }\n\n const qualifiedId = fromUrlPath(pathname);\n const workspace = getWorkspaceFromPath(qualifiedId);\n if (workspace !== Node.RootId && workspace !== state.activeDeck) {\n yield* Operation.invoke(LayoutOperation.SwitchWorkspace, { subject: workspace });\n }\n\n const deck = getDeck();\n const activeId = qualifiedId !== workspace ? qualifiedId : undefined;\n if (activeId) {\n // Ensure the object referenced by the URL is open in the deck.\n // Open validates the target and may redirect to 404, returning the resolved IDs.\n const resolvedIds = yield* Operation.invoke(LayoutOperation.Open, { subject: [activeId] });\n // If not already in solo mode, switch to solo for the resolved target.\n if (!deck.solo) {\n yield* Operation.invoke(LayoutOperation.SetLayoutMode, {\n subject: resolvedIds?.[0] ?? activeId,\n mode: 'solo',\n });\n }\n } else if (deck.solo && deck.solo !== NOT_FOUND_PATH) {\n // Stay in solo mode; redirect URL to reflect the current solo item.\n // Do not switch to deck mode here — only explicit user action should change layout mode.\n const path = toUrlPath(deck.solo);\n if (window.location.pathname !== path) {\n history.replaceState(null, '', `${path}${stripPlanks(window.location.search)}`);\n }\n } else if (!activeId && !deck.solo) {\n // Multi-mode: restore planks from query params.\n const plankIds = deserializePlanks(resolvedUrl);\n if (plankIds.length > 0) {\n for (const plankId of plankIds) {\n expandPath(graph, plankId);\n }\n updateState((state) => updateActiveDeck(state, { active: plankIds, initialized: true }));\n }\n }\n });\n\n const onPopState = () => void EffectEx.runAndForwardErrors(provideServices(handleNavigation()));\n\n // Install before handleNavigation()/state-sync push entries on top of the sentinel.\n const sentinelKey = installLeaveTrap();\n\n // Landing on the sentinel means a Back is about to leave Composer; confirm and act on it.\n // The guard stops our own back()/forward() from re-entering.\n let handlingSentinel = false;\n const onCurrentEntryChange = () => {\n const current = window.navigation.currentEntry;\n if (handlingSentinel || !current || current.key !== sentinelKey) {\n return;\n }\n handlingSentinel = true;\n queueMicrotask(() => {\n if (window.confirm('Leave Composer?')) {\n history.back(); // Past the sentinel to the prior page.\n } else {\n history.forward(); // Back to where the user was.\n }\n setTimeout(() => {\n handlingSentinel = false;\n });\n });\n };\n\n yield* provideServices(handleNavigation());\n window.addEventListener('popstate', onPopState);\n if ('navigation' in window) {\n window.navigation.addEventListener('currententrychange', onCurrentEntryChange);\n }\n\n // Tauri deep link support.\n let unlistenDeepLink: (() => void) | undefined;\n if (isTauri()) {\n yield* Effect.gen(function* () {\n const { getCurrent, onOpenUrl } = yield* Effect.promise(() => import('@tauri-apps/plugin-deep-link'));\n\n const launchUrls = yield* Effect.promise(() => getCurrent());\n if (launchUrls && launchUrls.length > 0) {\n log('app launched with deep links', { urls: launchUrls });\n for (const urlString of launchUrls) {\n yield* provideServices(handleDeepLink(urlString, handleNavigation));\n }\n }\n\n unlistenDeepLink = yield* Effect.promise(() =>\n onOpenUrl((urls) => {\n for (const urlString of urls) {\n void EffectEx.runAndForwardErrors(provideServices(handleDeepLink(urlString, handleNavigation)));\n }\n }),\n );\n }).pipe(\n Effect.catchAll((error) => Effect.sync(() => log.warn('failed to initialize deep link listener', { error }))),\n );\n }\n\n // Sync URL with layout state changes.\n let lastSolo: string | undefined;\n let lastActiveDeck: string | undefined;\n let lastActiveKey: string | undefined;\n const unsubscribe = registry.subscribe(stateAtom, () => {\n const state = getState();\n const deck = getDeck();\n const solo = deck.solo;\n const activeDeck = state.activeDeck;\n const activeKey = solo ? undefined : JSON.stringify(deck.active);\n\n if (solo !== lastSolo || activeDeck !== lastActiveDeck || activeKey !== lastActiveKey) {\n lastSolo = solo;\n lastActiveDeck = activeDeck;\n lastActiveKey = activeKey;\n\n const path = solo && solo !== NOT_FOUND_PATH ? toUrlPath(solo) : toUrlPath(activeDeck);\n const search = !solo\n ? serializePlanks(deck.active, window.location.search)\n : stripPlanks(window.location.search);\n const newUrl = `${path}${search}`;\n\n if (`${window.location.pathname}${window.location.search}` !== newUrl) {\n history.pushState(null, '', newUrl);\n }\n }\n });\n\n return Capability.contributes(Capabilities.Null, null, () =>\n Effect.sync(() => {\n window.removeEventListener('popstate', onPopState);\n if ('navigation' in window) {\n window.navigation.removeEventListener('currententrychange', onCurrentEntryChange);\n }\n unsubscribe();\n unlistenDeepLink?.();\n }),\n );\n }),\n);\n\n/**\n * sessionStorage key holding the sentinel history entry's key. The entry is identified by its\n * (reload-stable) Navigation API key rather than by entry state, because the deck overwrites\n * history state via replaceState during URL sync — which would erase a state marker. sessionStorage\n * survives reloads within the tab and the deck never touches it.\n */\nconst SENTINEL_STORAGE_KEY = 'dxos.composer.deck.leaveTrap.sentinelKey';\n\n/**\n * Insert a \"sentinel\" history entry beneath the app's working entries, so a Back-press that would\n * leave Composer instead lands on the sentinel — where `onCurrentEntryChange` confirms the exit. A\n * cross-document back is uncancelable and `beforeunload` cannot distinguish reload from leave, so\n * this same-document floor is required; reload fires no traversal and is never trapped. Requires the\n * Navigation API (Chromium); no-op otherwise. Idempotent across reloads via the sessionStorage-held\n * entry key, so the sentinel is not duplicated. Returns the sentinel entry's key, or undefined.\n */\nconst installLeaveTrap = (): string | undefined => {\n if (!('navigation' in window)) {\n return undefined;\n }\n const saved = sessionStorage.getItem(SENTINEL_STORAGE_KEY);\n if (saved && window.navigation.entries().some((entry) => entry.key === saved)) {\n // The sentinel survived (reload, or the user returned to Composer after leaving). If we are\n // sitting ON it — e.g. the user left via the sentinel then came back Forward onto it — push a\n // working entry above so the user is above the floor again and the trap re-arms.\n if (window.navigation.currentEntry?.key === saved) {\n history.pushState(null, '', window.location.pathname + window.location.search);\n }\n return saved;\n }\n // history.length > 1 (not navigation.canGoBack, which is false for a cross-origin prior entry)\n // means there is somewhere to leave to; otherwise Back can't exit and no sentinel is needed.\n const key = window.navigation.currentEntry?.key;\n if (key && window.history.length > 1) {\n // Record the current (landing) entry as the sentinel, then push the working entry above it.\n sessionStorage.setItem(SENTINEL_STORAGE_KEY, key);\n history.pushState(null, '', window.location.pathname + window.location.search);\n return key;\n }\n return undefined;\n};\n\n/** Check if a path is a redirect path handled elsewhere (e.g., OAuth). */\nconst isRedirectPath = (pathname: string): boolean => pathname.startsWith('/redirect/');\n\n/** Handle a deep link URL string. Merges query params into window.location and navigates. */\nconst handleDeepLink = Effect.fn(function* (urlString: string, navigate: (url?: URL) => Effect.Effect<void, any, any>) {\n log('deep link received', { url: urlString });\n\n const deepLinkUrl = new URL(urlString);\n\n // For custom schemes (e.g., composer://a/b/c), new URL() treats the first segment as the\n // hostname. Reconstruct the full path from hostname + pathname.\n const fullPath =\n deepLinkUrl.protocol !== 'https:' && deepLinkUrl.protocol !== 'http:' && deepLinkUrl.hostname\n ? '/' + deepLinkUrl.hostname + deepLinkUrl.pathname\n : deepLinkUrl.pathname;\n\n if (isRedirectPath(fullPath)) {\n return;\n }\n\n // Merge deep link query params into the current window URL so handlers can read them.\n const current = new URL(window.location.href);\n if (deepLinkUrl.search) {\n deepLinkUrl.searchParams.forEach((value, key) => current.searchParams.set(key, value));\n }\n current.pathname = fullPath;\n history.replaceState(null, '', current.pathname + current.search);\n\n yield* navigate(current);\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Effect", "Capabilities", "Capability", "AppCapabilities", "LayoutOperation", "NOT_FOUND_PATH", "expandPath", "fromUrlPath", "getWorkspaceFromPath", "toUrlPath", "Operation", "EffectEx", "invariant", "log", "Node", "isTauri", "DeckCapabilities", "defaultDeck", "concurrency", "capabilities", "Service", "registry", "Capability", "Capabilities", "AtomRegistry", "stateAtom", "settingsAtom", "get", "DeckCapabilities", "Settings", "provideServices", "effect", "provideService", "getState", "getDeck", "deck", "state", "invariant", "fn", "handleNavigation", "Effect", "URL", "window", "location", "deferHandlers", "dispatchNavigationHandlers", "resolvedUrl", "pathname", "updateState", "activeDeck", "decks", "default", "workspace", "Node", "Operation", "LayoutOperation", "SwitchWorkspace", "activeId", "subject", "mode", "history", "replaceState", "plankIds", "deserializePlanks", "plankId", "expandPath", "graph", "updateActiveDeck", "initialized", "sentinelKey", "installLeaveTrap", "current", "handlingSentinel", "queueMicrotask", "confirm", "back", "forward", "setTimeout", "addEventListener", "launchUrls", "length", "log", "handleDeepLink", "urlString", "unlistenDeepLink", "EffectEx", "runAndForwardErrors", "lastActiveKey", "solo", "activeKey", "lastSolo", "lastActiveDeck", "newUrl", "path", "search", "pushState", "removeEventListener", "unsubscribe", "undefined", "saved", "sessionStorage", "SENTINEL_STORAGE_KEY", "key", "deepLinkUrl", "searchParams", "forEach", "value", "fullPath", "navigate"]
|
|
7
|
-
}
|
|
File without changes
|
|
File without changes
|
/package/dist/lib/neutral/{check-app-scheme-INSOF72J.mjs.map → check-app-scheme-HSAORHHX.mjs.map}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/lib/neutral/{revert-workspace-B2QLT2C4.mjs.map → revert-workspace-24TKG3I7.mjs.map}
RENAMED
|
File without changes
|
/package/dist/lib/neutral/{scroll-into-view-B52C3PJO.mjs.map → scroll-into-view-3VXT6TWC.mjs.map}
RENAMED
|
File without changes
|
|
File without changes
|
/package/dist/lib/neutral/{set-layout-mode-RPCCPQRB.mjs.map → set-layout-mode-AZ73W52Z.mjs.map}
RENAMED
|
File without changes
|
/package/dist/lib/neutral/{update-companion-YUCZZVGY.mjs.map → update-companion-5LCY6QME.mjs.map}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/lib/neutral/{update-plank-size-3YW4NXEY.mjs.map → update-plank-size-XHTYBLSD.mjs.map}
RENAMED
|
File without changes
|
/package/dist/lib/neutral/{update-popover-G2VUD7E6.mjs.map → update-popover-RDIHG73B.mjs.map}
RENAMED
|
File without changes
|
/package/dist/lib/neutral/{update-sidebar-KRHPUHUB.mjs.map → update-sidebar-GEI7USA5.mjs.map}
RENAMED
|
File without changes
|