@shipfox/client-shell 12.0.2 → 13.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/main-layout.js +2 -2
- package/dist/components/main-layout.js.map +1 -1
- package/dist/components/settings-nav.d.ts +2 -1
- package/dist/components/settings-nav.d.ts.map +1 -1
- package/dist/components/settings-nav.js +17 -13
- package/dist/components/settings-nav.js.map +1 -1
- package/dist/components/workspace-crumb.js +2 -2
- package/dist/components/workspace-crumb.js.map +1 -1
- package/dist/components/workspace-switcher.d.ts.map +1 -1
- package/dist/components/workspace-switcher.js +4 -2
- package/dist/components/workspace-switcher.js.map +1 -1
- package/dist/compose/compose-routes.d.ts.map +1 -1
- package/dist/compose/compose-routes.js +4 -1
- package/dist/compose/compose-routes.js.map +1 -1
- package/dist/compose/validate-registries.d.ts.map +1 -1
- package/dist/compose/validate-registries.js +1 -1
- package/dist/compose/validate-registries.js.map +1 -1
- package/dist/contract.d.ts +2 -1
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js.map +1 -1
- package/dist/core/session.d.ts +1 -0
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js.map +1 -1
- package/dist/hooks/api/session-auth.d.ts.map +1 -1
- package/dist/hooks/api/session-auth.js +1 -0
- package/dist/hooks/api/session-auth.js.map +1 -1
- package/dist/runtime/active-workspace.js +3 -3
- package/dist/runtime/active-workspace.js.map +1 -1
- package/dist/runtime/anchor-paths.d.ts +14 -4
- package/dist/runtime/anchor-paths.d.ts.map +1 -1
- package/dist/runtime/anchor-paths.js +57 -4
- package/dist/runtime/anchor-paths.js.map +1 -1
- package/dist/runtime/anchors.d.ts +9 -6
- package/dist/runtime/anchors.d.ts.map +1 -1
- package/dist/runtime/anchors.js +85 -42
- package/dist/runtime/anchors.js.map +1 -1
- package/dist/runtime/assemble-route-tree.d.ts.map +1 -1
- package/dist/runtime/assemble-route-tree.js +7 -2
- package/dist/runtime/assemble-route-tree.js.map +1 -1
- package/dist/runtime/chrome-context.d.ts +2 -1
- package/dist/runtime/chrome-context.d.ts.map +1 -1
- package/dist/runtime/chrome-context.js.map +1 -1
- package/dist/runtime/compose-client-app.d.ts.map +1 -1
- package/dist/runtime/compose-client-app.js +5 -3
- package/dist/runtime/compose-client-app.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +1 -0
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/registries.js +4 -1
- package/dist/runtime/registries.js.map +1 -1
- package/dist/runtime/route-inputs.d.ts +3 -3
- package/dist/runtime/route-inputs.d.ts.map +1 -1
- package/dist/runtime/route-inputs.js +9 -9
- package/dist/runtime/route-inputs.js.map +1 -1
- package/dist/runtime/router-context.d.ts +7 -0
- package/dist/runtime/router-context.d.ts.map +1 -1
- package/dist/runtime/router-context.js.map +1 -1
- package/dist/runtime/search-serialization.d.ts +26 -0
- package/dist/runtime/search-serialization.d.ts.map +1 -0
- package/dist/runtime/search-serialization.js +78 -0
- package/dist/runtime/search-serialization.js.map +1 -0
- package/dist/runtime/workspace-setup.d.ts +1 -0
- package/dist/runtime/workspace-setup.d.ts.map +1 -1
- package/dist/runtime/workspace-setup.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/dist/vite/generate.d.ts.map +1 -1
- package/dist/vite/generate.js +12 -3
- package/dist/vite/generate.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import type { RouteParentId } from '#contract.js';
|
|
2
2
|
declare const anchorPaths: {
|
|
3
3
|
readonly root: "/";
|
|
4
|
-
readonly workspaceLayout: "/
|
|
5
|
-
readonly projectLayout: "/
|
|
6
|
-
readonly workspaceSettings: "/
|
|
4
|
+
readonly workspaceLayout: "/w/$workspaceSlug";
|
|
5
|
+
readonly projectLayout: "/w/$workspaceSlug/p/$projectSlug";
|
|
6
|
+
readonly workspaceSettings: "/w/$workspaceSlug/settings";
|
|
7
|
+
readonly projectSettings: "/w/$workspaceSlug/p/$projectSlug/settings";
|
|
7
8
|
};
|
|
8
|
-
|
|
9
|
+
declare const entityPrefixRegistry: {
|
|
10
|
+
readonly w: "workspace";
|
|
11
|
+
readonly p: "project";
|
|
12
|
+
};
|
|
13
|
+
declare const slugParamPrefixes: {
|
|
14
|
+
readonly workspaceSlug: "w";
|
|
15
|
+
readonly projectSlug: "p";
|
|
16
|
+
};
|
|
17
|
+
export { anchorPaths, entityPrefixRegistry, slugParamPrefixes };
|
|
18
|
+
export declare function validateRoutePathInvariants(path: string): void;
|
|
9
19
|
export declare function routePathForAnchor(anchor: keyof typeof anchorPaths, fullPath: string): string;
|
|
10
20
|
export declare function routePathForParent(parent: RouteParentId, fullPath: string, layoutPaths?: ReadonlyMap<string, string>): string;
|
|
11
21
|
//# sourceMappingURL=anchor-paths.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anchor-paths.d.ts","sourceRoot":"","sources":["../../src/runtime/anchor-paths.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAEhD,QAAA,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"anchor-paths.d.ts","sourceRoot":"","sources":["../../src/runtime/anchor-paths.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAEhD,QAAA,MAAM,WAAW;;;;;;CAMP,CAAC;AAEX,QAAA,MAAM,oBAAoB;;;CAGhB,CAAC;AAEX,QAAA,MAAM,iBAAiB;;;CAGb,CAAC;AAEX,OAAO,EAAC,WAAW,EAAE,oBAAoB,EAAE,iBAAiB,EAAC,CAAC;AAE9D,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CA+D9D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,OAAO,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQ7F;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa,GACnD,MAAM,CAiBR"}
|
|
@@ -1,11 +1,64 @@
|
|
|
1
1
|
import { normalizeRoutePath } from '#compose/normalize-route-path.js';
|
|
2
2
|
const anchorPaths = {
|
|
3
3
|
root: '/',
|
|
4
|
-
workspaceLayout: '/
|
|
5
|
-
projectLayout: '/
|
|
6
|
-
workspaceSettings: '/
|
|
4
|
+
workspaceLayout: '/w/$workspaceSlug',
|
|
5
|
+
projectLayout: '/w/$workspaceSlug/p/$projectSlug',
|
|
6
|
+
workspaceSettings: '/w/$workspaceSlug/settings',
|
|
7
|
+
projectSettings: '/w/$workspaceSlug/p/$projectSlug/settings'
|
|
7
8
|
};
|
|
8
|
-
|
|
9
|
+
const entityPrefixRegistry = {
|
|
10
|
+
w: 'workspace',
|
|
11
|
+
p: 'project'
|
|
12
|
+
};
|
|
13
|
+
const slugParamPrefixes = {
|
|
14
|
+
workspaceSlug: 'w',
|
|
15
|
+
projectSlug: 'p'
|
|
16
|
+
};
|
|
17
|
+
export { anchorPaths, entityPrefixRegistry, slugParamPrefixes };
|
|
18
|
+
export function validateRoutePathInvariants(path) {
|
|
19
|
+
const segments = path.split('/').filter(Boolean);
|
|
20
|
+
const seenSlugParams = new Set();
|
|
21
|
+
if (segments[0] === 'workspaces' && segments[1]?.startsWith('$')) {
|
|
22
|
+
throw new Error(`Route "${path}" must use the slug-based workspace prefix "w" instead of the legacy "/workspaces" path.`);
|
|
23
|
+
}
|
|
24
|
+
for (const [index, segment] of segments.entries()){
|
|
25
|
+
const nextSegment = segments[index + 1];
|
|
26
|
+
if (segment.length === 1 && Object.hasOwn(entityPrefixRegistry, segment)) {
|
|
27
|
+
if (!nextSegment?.startsWith('$')) {
|
|
28
|
+
throw new Error(`Route "${path}" uses prefix "${segment}" without a dynamic parameter immediately after it.`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (!segment.startsWith('$')) continue;
|
|
32
|
+
const param = segment.slice(1);
|
|
33
|
+
const prefix = Object.hasOwn(slugParamPrefixes, param) ? slugParamPrefixes[param] : undefined;
|
|
34
|
+
if (prefix !== undefined) {
|
|
35
|
+
if (seenSlugParams.has(param)) {
|
|
36
|
+
throw new Error(`Route "${path}" repeats slug parameter "${param}".`);
|
|
37
|
+
}
|
|
38
|
+
seenSlugParams.add(param);
|
|
39
|
+
if (segments[index - 1] !== prefix) {
|
|
40
|
+
throw new Error(`Route "${path}" places slug parameter "${param}" outside prefix "${prefix}".`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (prefix === undefined) {
|
|
44
|
+
const previousSegment = segments[index - 1];
|
|
45
|
+
if (!previousSegment || previousSegment.startsWith('$') || Object.hasOwn(entityPrefixRegistry, previousSegment)) {
|
|
46
|
+
throw new Error(`Route "${path}" must place UUID parameter "${param}" after a page segment.`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const workspacePrefixIndex = segments.indexOf('w');
|
|
51
|
+
const projectPrefixIndex = segments.indexOf('p');
|
|
52
|
+
if (workspacePrefixIndex !== -1 && projectPrefixIndex !== -1 && workspacePrefixIndex > projectPrefixIndex) {
|
|
53
|
+
throw new Error(`Route "${path}" must place workspace prefix "w" before project prefix "p".`);
|
|
54
|
+
}
|
|
55
|
+
if (workspacePrefixIndex !== -1 && workspacePrefixIndex !== 0) {
|
|
56
|
+
throw new Error(`Route "${path}" must place workspace prefix "w" at the start of the path.`);
|
|
57
|
+
}
|
|
58
|
+
if (projectPrefixIndex !== -1 && (workspacePrefixIndex !== 0 || projectPrefixIndex !== 2)) {
|
|
59
|
+
throw new Error(`Route "${path}" must place workspace prefix "w" before project prefix "p".`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
9
62
|
export function routePathForAnchor(anchor, fullPath) {
|
|
10
63
|
const anchorPath = anchorPaths[anchor];
|
|
11
64
|
if (anchor === 'root') return fullPath;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/runtime/anchor-paths.ts"],"sourcesContent":["import {normalizeRoutePath} from '#compose/normalize-route-path.js';\nimport type {RouteParentId} from '#contract.js';\n\nconst anchorPaths = {\n root: '/',\n workspaceLayout: '/
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/anchor-paths.ts"],"sourcesContent":["import {normalizeRoutePath} from '#compose/normalize-route-path.js';\nimport type {RouteParentId} from '#contract.js';\n\nconst anchorPaths = {\n root: '/',\n workspaceLayout: '/w/$workspaceSlug',\n projectLayout: '/w/$workspaceSlug/p/$projectSlug',\n workspaceSettings: '/w/$workspaceSlug/settings',\n projectSettings: '/w/$workspaceSlug/p/$projectSlug/settings',\n} as const;\n\nconst entityPrefixRegistry = {\n w: 'workspace',\n p: 'project',\n} as const;\n\nconst slugParamPrefixes = {\n workspaceSlug: 'w',\n projectSlug: 'p',\n} as const;\n\nexport {anchorPaths, entityPrefixRegistry, slugParamPrefixes};\n\nexport function validateRoutePathInvariants(path: string): void {\n const segments = path.split('/').filter(Boolean);\n const seenSlugParams = new Set<string>();\n\n if (segments[0] === 'workspaces' && segments[1]?.startsWith('$')) {\n throw new Error(\n `Route \"${path}\" must use the slug-based workspace prefix \"w\" instead of the legacy \"/workspaces\" path.`,\n );\n }\n\n for (const [index, segment] of segments.entries()) {\n const nextSegment = segments[index + 1];\n if (segment.length === 1 && Object.hasOwn(entityPrefixRegistry, segment)) {\n if (!nextSegment?.startsWith('$')) {\n throw new Error(\n `Route \"${path}\" uses prefix \"${segment}\" without a dynamic parameter immediately after it.`,\n );\n }\n }\n\n if (!segment.startsWith('$')) continue;\n const param = segment.slice(1) as keyof typeof slugParamPrefixes;\n const prefix = Object.hasOwn(slugParamPrefixes, param) ? slugParamPrefixes[param] : undefined;\n if (prefix !== undefined) {\n if (seenSlugParams.has(param)) {\n throw new Error(`Route \"${path}\" repeats slug parameter \"${param}\".`);\n }\n seenSlugParams.add(param);\n if (segments[index - 1] !== prefix) {\n throw new Error(\n `Route \"${path}\" places slug parameter \"${param}\" outside prefix \"${prefix}\".`,\n );\n }\n }\n if (prefix === undefined) {\n const previousSegment = segments[index - 1];\n if (\n !previousSegment ||\n previousSegment.startsWith('$') ||\n Object.hasOwn(entityPrefixRegistry, previousSegment)\n ) {\n throw new Error(\n `Route \"${path}\" must place UUID parameter \"${param}\" after a page segment.`,\n );\n }\n }\n }\n\n const workspacePrefixIndex = segments.indexOf('w');\n const projectPrefixIndex = segments.indexOf('p');\n if (\n workspacePrefixIndex !== -1 &&\n projectPrefixIndex !== -1 &&\n workspacePrefixIndex > projectPrefixIndex\n ) {\n throw new Error(`Route \"${path}\" must place workspace prefix \"w\" before project prefix \"p\".`);\n }\n if (workspacePrefixIndex !== -1 && workspacePrefixIndex !== 0) {\n throw new Error(`Route \"${path}\" must place workspace prefix \"w\" at the start of the path.`);\n }\n if (projectPrefixIndex !== -1 && (workspacePrefixIndex !== 0 || projectPrefixIndex !== 2)) {\n throw new Error(`Route \"${path}\" must place workspace prefix \"w\" before project prefix \"p\".`);\n }\n}\n\nexport function routePathForAnchor(anchor: keyof typeof anchorPaths, fullPath: string): string {\n const anchorPath = anchorPaths[anchor];\n if (anchor === 'root') return fullPath;\n if (fullPath === anchorPath) return '/';\n if (!fullPath.startsWith(`${anchorPath}/`)) {\n throw new Error(`Route \"${fullPath}\" must be nested under anchor \"${anchor}\" (${anchorPath}).`);\n }\n return fullPath.slice(anchorPath.length);\n}\n\nexport function routePathForParent(\n parent: RouteParentId,\n fullPath: string,\n layoutPaths: ReadonlyMap<string, string> = new Map(),\n): string {\n const normalizedPath = normalizeRoutePath(fullPath);\n const parentPath = Object.hasOwn(anchorPaths, parent)\n ? anchorPaths[parent as keyof typeof anchorPaths]\n : layoutPaths.get(parent);\n if (!parentPath) {\n throw new Error(`Route \"${normalizedPath}\" targets missing layout parent \"${parent}\".`);\n }\n if (parentPath === '/') return normalizedPath;\n if (normalizedPath === parentPath) return '/';\n if (parentPath !== '/' && !normalizedPath.startsWith(`${parentPath}/`)) {\n const parentKind = Object.hasOwn(anchorPaths, parent) ? 'anchor' : 'layout';\n throw new Error(\n `Route \"${normalizedPath}\" must be nested under ${parentKind} \"${parent}\" (${parentPath}).`,\n );\n }\n return normalizedPath.slice(parentPath.length);\n}\n"],"names":["normalizeRoutePath","anchorPaths","root","workspaceLayout","projectLayout","workspaceSettings","projectSettings","entityPrefixRegistry","w","p","slugParamPrefixes","workspaceSlug","projectSlug","validateRoutePathInvariants","path","segments","split","filter","Boolean","seenSlugParams","Set","startsWith","Error","index","segment","entries","nextSegment","length","Object","hasOwn","param","slice","prefix","undefined","has","add","previousSegment","workspacePrefixIndex","indexOf","projectPrefixIndex","routePathForAnchor","anchor","fullPath","anchorPath","routePathForParent","parent","layoutPaths","Map","normalizedPath","parentPath","get","parentKind"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { NavTabEntry, SettingsSectionEntry } from '#contract.js';
|
|
2
2
|
import type { RouterContext } from './router-context.js';
|
|
3
|
+
import type { WorkspaceSetupState } from './workspace-setup.js';
|
|
3
4
|
export { routePathForAnchor } from './anchor-paths.js';
|
|
4
5
|
export declare function buildAnchorSkeleton({ navigation, settingsSections, }: {
|
|
5
6
|
navigation: readonly NavTabEntry[];
|
|
@@ -7,13 +8,15 @@ export declare function buildAnchorSkeleton({ navigation, settingsSections, }: {
|
|
|
7
8
|
}): {
|
|
8
9
|
anchors: {
|
|
9
10
|
root: import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
10
|
-
workspaceLayout: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/
|
|
11
|
-
projectLayout: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/
|
|
12
|
-
workspaceSettings: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/
|
|
11
|
+
workspaceLayout: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/w/$workspaceSlug", "/w/$workspaceSlug", string, "/w/$workspaceSlug", undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, ({ context, params, location }: import("@tanstack/router-core").BeforeLoadContextOptions<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, "/w/$workspaceSlug", unknown, undefined>) => Promise<WorkspaceSetupState | undefined>, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
12
|
+
projectLayout: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/w/$workspaceSlug", "/w/$workspaceSlug", string, "/w/$workspaceSlug", undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, ({ context, params, location }: import("@tanstack/router-core").BeforeLoadContextOptions<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, "/w/$workspaceSlug", unknown, undefined>) => Promise<WorkspaceSetupState | undefined>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/p/$projectSlug", "/w/$workspaceSlug/p/$projectSlug", string, "/w/$workspaceSlug/p/$projectSlug", undefined, import("@tanstack/router-core").ResolveParams<"/p/$projectSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, ({ context, params }: import("@tanstack/router-core").BeforeLoadContextOptions<unknown, import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/w/$workspaceSlug", "/w/$workspaceSlug", string, "/w/$workspaceSlug", undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, ({ context, params, location }: import("@tanstack/router-core").BeforeLoadContextOptions<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, "/w/$workspaceSlug", unknown, undefined>) => Promise<WorkspaceSetupState | undefined>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import("@tanstack/router-core").ResolveParams<"/p/$projectSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, "/w/$workspaceSlug/p/$projectSlug", unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
13
|
+
workspaceSettings: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/w/$workspaceSlug", "/w/$workspaceSlug", string, "/w/$workspaceSlug", undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, ({ context, params, location }: import("@tanstack/router-core").BeforeLoadContextOptions<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, "/w/$workspaceSlug", unknown, undefined>) => Promise<WorkspaceSetupState | undefined>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/settings", "/w/$workspaceSlug/settings", string, "/w/$workspaceSlug/settings", undefined, import("@tanstack/router-core").ResolveParams<"/settings">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
14
|
+
projectSettings: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/w/$workspaceSlug", "/w/$workspaceSlug", string, "/w/$workspaceSlug", undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, ({ context, params, location }: import("@tanstack/router-core").BeforeLoadContextOptions<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, "/w/$workspaceSlug", unknown, undefined>) => Promise<WorkspaceSetupState | undefined>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/p/$projectSlug", "/w/$workspaceSlug/p/$projectSlug", string, "/w/$workspaceSlug/p/$projectSlug", undefined, import("@tanstack/router-core").ResolveParams<"/p/$projectSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, ({ context, params }: import("@tanstack/router-core").BeforeLoadContextOptions<unknown, import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/w/$workspaceSlug", "/w/$workspaceSlug", string, "/w/$workspaceSlug", undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, ({ context, params, location }: import("@tanstack/router-core").BeforeLoadContextOptions<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, "/w/$workspaceSlug", unknown, undefined>) => Promise<WorkspaceSetupState | undefined>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import("@tanstack/router-core").ResolveParams<"/p/$projectSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, "/w/$workspaceSlug/p/$projectSlug", unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/settings", "/w/$workspaceSlug/p/$projectSlug/settings", string, "/w/$workspaceSlug/p/$projectSlug/settings", undefined, import("@tanstack/router-core").ResolveParams<"/settings">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
13
15
|
};
|
|
14
16
|
rootRoute: import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
15
|
-
workspaceLayout: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/
|
|
16
|
-
projectLayout: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/
|
|
17
|
-
workspaceSettings: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/
|
|
17
|
+
workspaceLayout: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/w/$workspaceSlug", "/w/$workspaceSlug", string, "/w/$workspaceSlug", undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, ({ context, params, location }: import("@tanstack/router-core").BeforeLoadContextOptions<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, "/w/$workspaceSlug", unknown, undefined>) => Promise<WorkspaceSetupState | undefined>, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
18
|
+
projectLayout: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/w/$workspaceSlug", "/w/$workspaceSlug", string, "/w/$workspaceSlug", undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, ({ context, params, location }: import("@tanstack/router-core").BeforeLoadContextOptions<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, "/w/$workspaceSlug", unknown, undefined>) => Promise<WorkspaceSetupState | undefined>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/p/$projectSlug", "/w/$workspaceSlug/p/$projectSlug", string, "/w/$workspaceSlug/p/$projectSlug", undefined, import("@tanstack/router-core").ResolveParams<"/p/$projectSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, ({ context, params }: import("@tanstack/router-core").BeforeLoadContextOptions<unknown, import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/w/$workspaceSlug", "/w/$workspaceSlug", string, "/w/$workspaceSlug", undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, ({ context, params, location }: import("@tanstack/router-core").BeforeLoadContextOptions<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, "/w/$workspaceSlug", unknown, undefined>) => Promise<WorkspaceSetupState | undefined>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import("@tanstack/router-core").ResolveParams<"/p/$projectSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, "/w/$workspaceSlug/p/$projectSlug", unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
19
|
+
workspaceSettings: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/w/$workspaceSlug", "/w/$workspaceSlug", string, "/w/$workspaceSlug", undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, ({ context, params, location }: import("@tanstack/router-core").BeforeLoadContextOptions<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, "/w/$workspaceSlug", unknown, undefined>) => Promise<WorkspaceSetupState | undefined>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/settings", "/w/$workspaceSlug/settings", string, "/w/$workspaceSlug/settings", undefined, import("@tanstack/router-core").ResolveParams<"/settings">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
20
|
+
projectSettings: import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/w/$workspaceSlug", "/w/$workspaceSlug", string, "/w/$workspaceSlug", undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, ({ context, params, location }: import("@tanstack/router-core").BeforeLoadContextOptions<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, "/w/$workspaceSlug", unknown, undefined>) => Promise<WorkspaceSetupState | undefined>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/p/$projectSlug", "/w/$workspaceSlug/p/$projectSlug", string, "/w/$workspaceSlug/p/$projectSlug", undefined, import("@tanstack/router-core").ResolveParams<"/p/$projectSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, ({ context, params }: import("@tanstack/router-core").BeforeLoadContextOptions<unknown, import("@tanstack/react-router").Route<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/w/$workspaceSlug", "/w/$workspaceSlug", string, "/w/$workspaceSlug", undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, ({ context, params, location }: import("@tanstack/router-core").BeforeLoadContextOptions<unknown, import("@tanstack/react-router").RootRoute<import("@tanstack/router-core").Register, undefined, RouterContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import("@tanstack/router-core").ResolveParams<"/w/$workspaceSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, "/w/$workspaceSlug", unknown, undefined>) => Promise<WorkspaceSetupState | undefined>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import("@tanstack/router-core").ResolveParams<"/p/$projectSlug">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, "/w/$workspaceSlug/p/$projectSlug", unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/settings", "/w/$workspaceSlug/p/$projectSlug/settings", string, "/w/$workspaceSlug/p/$projectSlug/settings", undefined, import("@tanstack/router-core").ResolveParams<"/settings">, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, import("@tanstack/router-core").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
18
21
|
};
|
|
19
22
|
//# sourceMappingURL=anchors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anchors.d.ts","sourceRoot":"","sources":["../../src/runtime/anchors.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,WAAW,EAAE,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAKpE,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"anchors.d.ts","sourceRoot":"","sources":["../../src/runtime/anchors.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,WAAW,EAAE,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAKpE,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,sBAAsB,CAAC;AAO9D,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AAErD,wBAAgB,mBAAmB,CAAC,EAClC,UAAU,EACV,gBAAgB,GACjB,EAAE;IACD,UAAU,EAAE,SAAS,WAAW,EAAE,CAAC;IACnC,gBAAgB,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACnD;;;;;;;;;;;;;EAsHA"}
|
package/dist/runtime/anchors.js
CHANGED
|
@@ -7,8 +7,8 @@ import { NotFoundPage } from '#components/not-found-page.js';
|
|
|
7
7
|
import { SettingsNav } from '#components/settings-nav.js';
|
|
8
8
|
import { useActiveWorkspace, useMaybeActiveWorkspace } from './active-workspace.js';
|
|
9
9
|
import { anchorPaths } from './anchor-paths.js';
|
|
10
|
-
import { useChrome } from './chrome-context.js';
|
|
11
10
|
import { rememberLastWorkspaceId } from './last-workspace.js';
|
|
11
|
+
import { parseWorkspaceParams, parseWorkspaceProjectParams, useRouteParams } from './route-inputs.js';
|
|
12
12
|
import { WorkspaceLayoutErrorRoute, WorkspaceSetupPending, WorkspaceUnavailablePage } from './workspace-setup.js';
|
|
13
13
|
export { routePathForAnchor } from './anchor-paths.js';
|
|
14
14
|
export function buildAnchorSkeleton({ navigation, settingsSections }) {
|
|
@@ -28,18 +28,20 @@ export function buildAnchorSkeleton({ navigation, settingsSections }) {
|
|
|
28
28
|
redirect: location.href
|
|
29
29
|
}
|
|
30
30
|
});
|
|
31
|
-
|
|
31
|
+
const workspace = auth.workspaces.find((candidate)=>candidate.slug === params.workspaceSlug);
|
|
32
|
+
if (!workspace) throw redirect({
|
|
32
33
|
to: '/'
|
|
33
34
|
});
|
|
34
35
|
try {
|
|
35
|
-
if (auth.user?.id) rememberLastWorkspaceId(auth.user.id,
|
|
36
|
+
if (auth.user?.id) rememberLastWorkspaceId(auth.user.id, workspace.id);
|
|
36
37
|
} catch {
|
|
37
38
|
// Local storage is best effort.
|
|
38
39
|
}
|
|
39
40
|
if (!context.workspaceSetup) throw new Error('Client composition includes workspace routes but no workspaceSetup gate.');
|
|
40
41
|
return await context.workspaceSetup({
|
|
41
42
|
queryClient: context.queryClient,
|
|
42
|
-
workspaceId:
|
|
43
|
+
workspaceId: workspace.id,
|
|
44
|
+
workspaceSlug: params.workspaceSlug,
|
|
43
45
|
pathname: location.pathname
|
|
44
46
|
});
|
|
45
47
|
},
|
|
@@ -66,48 +68,54 @@ export function buildAnchorSkeleton({ navigation, settingsSections }) {
|
|
|
66
68
|
});
|
|
67
69
|
const projectLayout = createRoute({
|
|
68
70
|
getParentRoute: ()=>workspaceLayout,
|
|
69
|
-
path: '/
|
|
70
|
-
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
path: '/p/$projectSlug',
|
|
72
|
+
beforeLoad: async ({ context, params })=>{
|
|
73
|
+
const auth = context.auth;
|
|
74
|
+
if (!auth || auth.isLoading || !context.queryClient) return;
|
|
75
|
+
if (context.unavailable) return;
|
|
76
|
+
const workspace = auth.workspaces.find((candidate)=>candidate.slug === params.workspaceSlug);
|
|
77
|
+
if (!workspace) throw redirect({
|
|
78
|
+
to: '/'
|
|
79
|
+
});
|
|
80
|
+
if (!context.projectSlugResolver) {
|
|
81
|
+
throw new Error('Client composition includes project routes but no project slug resolver.');
|
|
82
|
+
}
|
|
83
|
+
const projectId = await context.projectSlugResolver({
|
|
84
|
+
queryClient: context.queryClient,
|
|
85
|
+
workspaceId: workspace.id,
|
|
86
|
+
projectSlug: params.projectSlug
|
|
87
|
+
});
|
|
88
|
+
if (!projectId) {
|
|
89
|
+
throw redirect({
|
|
90
|
+
to: '/w/$workspaceSlug',
|
|
91
|
+
params: {
|
|
92
|
+
workspaceSlug: params.workspaceSlug
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
component: Outlet
|
|
98
|
+
});
|
|
99
|
+
const projectSettings = createRoute({
|
|
100
|
+
getParentRoute: ()=>projectLayout,
|
|
101
|
+
path: '/settings',
|
|
102
|
+
component: ()=>/*#__PURE__*/ _jsx(SettingsAnchorLayout, {
|
|
103
|
+
scope: "project",
|
|
104
|
+
title: "Project settings",
|
|
105
|
+
description: "Configure this project.",
|
|
106
|
+
settingsSections: settingsSections
|
|
107
|
+
})
|
|
74
108
|
});
|
|
75
109
|
const workspaceSettings = createRoute({
|
|
76
110
|
getParentRoute: ()=>workspaceLayout,
|
|
77
111
|
path: '/settings',
|
|
78
112
|
component: ()=>{
|
|
79
113
|
const workspace = useActiveWorkspace();
|
|
80
|
-
return /*#__PURE__*/
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
children: [
|
|
86
|
-
/*#__PURE__*/ _jsx(Header, {
|
|
87
|
-
variant: "h2",
|
|
88
|
-
children: "Workspace settings"
|
|
89
|
-
}),
|
|
90
|
-
/*#__PURE__*/ _jsxs(Text, {
|
|
91
|
-
size: "sm",
|
|
92
|
-
className: "text-foreground-neutral-muted",
|
|
93
|
-
children: [
|
|
94
|
-
"Configure ",
|
|
95
|
-
workspace.name,
|
|
96
|
-
"."
|
|
97
|
-
]
|
|
98
|
-
})
|
|
99
|
-
]
|
|
100
|
-
}),
|
|
101
|
-
/*#__PURE__*/ _jsxs("div", {
|
|
102
|
-
className: "grid grid-cols-[180px_minmax(0,1fr)] gap-32 max-[760px]:grid-cols-1",
|
|
103
|
-
children: [
|
|
104
|
-
/*#__PURE__*/ _jsx(SettingsNav, {
|
|
105
|
-
entries: settingsSections
|
|
106
|
-
}),
|
|
107
|
-
/*#__PURE__*/ _jsx(Outlet, {})
|
|
108
|
-
]
|
|
109
|
-
})
|
|
110
|
-
]
|
|
114
|
+
return /*#__PURE__*/ _jsx(SettingsAnchorLayout, {
|
|
115
|
+
scope: "workspace",
|
|
116
|
+
title: "Workspace settings",
|
|
117
|
+
description: `Configure ${workspace.name}.`,
|
|
118
|
+
settingsSections: settingsSections
|
|
111
119
|
});
|
|
112
120
|
}
|
|
113
121
|
});
|
|
@@ -116,13 +124,48 @@ export function buildAnchorSkeleton({ navigation, settingsSections }) {
|
|
|
116
124
|
root: rootRoute,
|
|
117
125
|
workspaceLayout,
|
|
118
126
|
projectLayout,
|
|
119
|
-
workspaceSettings
|
|
127
|
+
workspaceSettings,
|
|
128
|
+
projectSettings
|
|
120
129
|
},
|
|
121
130
|
rootRoute,
|
|
122
131
|
workspaceLayout,
|
|
123
132
|
projectLayout,
|
|
124
|
-
workspaceSettings
|
|
133
|
+
workspaceSettings,
|
|
134
|
+
projectSettings
|
|
125
135
|
};
|
|
126
136
|
}
|
|
137
|
+
function SettingsAnchorLayout({ scope, title, description, settingsSections }) {
|
|
138
|
+
const params = useRouteParams((input)=>scope === 'workspace' ? parseWorkspaceParams(input) : parseWorkspaceProjectParams(input));
|
|
139
|
+
if (!params.workspaceSlug || scope === 'project' && !params.projectSlug) return null;
|
|
140
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
141
|
+
className: "flex w-full flex-col gap-24",
|
|
142
|
+
children: [
|
|
143
|
+
/*#__PURE__*/ _jsxs("header", {
|
|
144
|
+
className: "flex flex-col gap-6",
|
|
145
|
+
children: [
|
|
146
|
+
/*#__PURE__*/ _jsx(Header, {
|
|
147
|
+
variant: "h2",
|
|
148
|
+
children: title
|
|
149
|
+
}),
|
|
150
|
+
/*#__PURE__*/ _jsx(Text, {
|
|
151
|
+
size: "sm",
|
|
152
|
+
className: "text-foreground-neutral-muted",
|
|
153
|
+
children: description
|
|
154
|
+
})
|
|
155
|
+
]
|
|
156
|
+
}),
|
|
157
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
158
|
+
className: "grid grid-cols-[180px_minmax(0,1fr)] gap-32 max-[760px]:grid-cols-1",
|
|
159
|
+
children: [
|
|
160
|
+
/*#__PURE__*/ _jsx(SettingsNav, {
|
|
161
|
+
entries: settingsSections,
|
|
162
|
+
scope: scope
|
|
163
|
+
}),
|
|
164
|
+
/*#__PURE__*/ _jsx(Outlet, {})
|
|
165
|
+
]
|
|
166
|
+
})
|
|
167
|
+
]
|
|
168
|
+
});
|
|
169
|
+
}
|
|
127
170
|
|
|
128
171
|
//# sourceMappingURL=anchors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/runtime/anchors.tsx"],"sourcesContent":["import {ShipfoxLoader} from '@shipfox/react-ui/loader';\nimport {Header, Text} from '@shipfox/react-ui/typography';\nimport {createRootRouteWithContext, createRoute, Outlet, redirect} from '@tanstack/react-router';\nimport {MainLayout} from '#components/main-layout.js';\nimport {NotFoundPage} from '#components/not-found-page.js';\nimport {SettingsNav} from '#components/settings-nav.js';\nimport type {NavTabEntry, SettingsSectionEntry} from '#contract.js';\nimport {useActiveWorkspace, useMaybeActiveWorkspace} from './active-workspace.js';\nimport {anchorPaths} from './anchor-paths.js';\nimport {useChrome} from './chrome-context.js';\nimport {rememberLastWorkspaceId} from './last-workspace.js';\nimport type {RouterContext} from './router-context.js';\nimport {\n WorkspaceLayoutErrorRoute,\n WorkspaceSetupPending,\n WorkspaceUnavailablePage,\n} from './workspace-setup.js';\n\nexport {routePathForAnchor} from './anchor-paths.js';\n\nexport function buildAnchorSkeleton({\n navigation,\n settingsSections,\n}: {\n navigation: readonly NavTabEntry[];\n settingsSections: readonly SettingsSectionEntry[];\n}) {\n const rootRoute = createRootRouteWithContext<RouterContext>()({\n component: Outlet,\n notFoundComponent: NotFoundPage,\n });\n const workspaceLayout = createRoute({\n getParentRoute: () => rootRoute,\n path: anchorPaths.workspaceLayout,\n beforeLoad: async ({context, params, location}) => {\n const auth = context.auth;\n if (!auth || auth.isLoading || !context.queryClient) return;\n if (!auth.isAuthenticated)\n throw redirect({to: '/auth/login' as never, search: {redirect: location.href} as never});\n if (!auth.workspaces.some((workspace) => workspace.id === params.wid))\n throw redirect({to: '/'});\n try {\n if (auth.user?.id) rememberLastWorkspaceId(auth.user.id, params.wid);\n } catch {\n // Local storage is best effort.\n }\n if (!context.workspaceSetup)\n throw new Error('Client composition includes workspace routes but no workspaceSetup gate.');\n return await context.workspaceSetup({\n queryClient: context.queryClient,\n workspaceId: params.wid,\n pathname: location.pathname,\n });\n },\n pendingComponent: () => (\n <div className=\"flex h-screen items-center justify-center\">\n <ShipfoxLoader size={64} animation=\"circular\" color=\"orange\" background=\"dark\" />\n </div>\n ),\n errorComponent: WorkspaceLayoutErrorRoute,\n component: () => {\n const setupState = workspaceLayout.useRouteContext() as {\n hideProjectNavigation?: boolean;\n unavailable?: boolean;\n };\n const workspace = useMaybeActiveWorkspace();\n return setupState.hideProjectNavigation === undefined ? (\n <WorkspaceSetupPending />\n ) : setupState.unavailable ? (\n <WorkspaceUnavailablePage workspaceName={workspace?.name} />\n ) : (\n <MainLayout\n navigation={navigation}\n hideProjectNavigation={setupState.hideProjectNavigation}\n />\n );\n },\n });\n const projectLayout = createRoute({\n getParentRoute: () => workspaceLayout,\n path: '/projects/$pid',\n component: () => {\n const {ProjectLayoutGuard} = useChrome();\n return <ProjectLayoutGuard />;\n },\n });\n const workspaceSettings = createRoute({\n getParentRoute: () => workspaceLayout,\n path: '/settings',\n component: () => {\n const workspace = useActiveWorkspace();\n return (\n <div className=\"flex w-full flex-col gap-24\">\n <header className=\"flex flex-col gap-6\">\n <Header variant=\"h2\">Workspace settings</Header>\n <Text size=\"sm\" className=\"text-foreground-neutral-muted\">\n Configure {workspace.name}.\n </Text>\n </header>\n\n <div className=\"grid grid-cols-[180px_minmax(0,1fr)] gap-32 max-[760px]:grid-cols-1\">\n <SettingsNav entries={settingsSections} />\n <Outlet />\n </div>\n </div>\n );\n },\n });\n return {\n anchors: {root: rootRoute, workspaceLayout, projectLayout, workspaceSettings},\n rootRoute,\n workspaceLayout,\n projectLayout,\n workspaceSettings,\n };\n}\n"],"names":["ShipfoxLoader","Header","Text","createRootRouteWithContext","createRoute","Outlet","redirect","MainLayout","NotFoundPage","SettingsNav","useActiveWorkspace","useMaybeActiveWorkspace","anchorPaths","useChrome","rememberLastWorkspaceId","WorkspaceLayoutErrorRoute","WorkspaceSetupPending","WorkspaceUnavailablePage","routePathForAnchor","buildAnchorSkeleton","navigation","settingsSections","rootRoute","component","notFoundComponent","workspaceLayout","getParentRoute","path","beforeLoad","context","params","location","auth","isLoading","queryClient","isAuthenticated","to","search","href","workspaces","some","workspace","id","wid","user","workspaceSetup","Error","workspaceId","pathname","pendingComponent","div","className","size","animation","color","background","errorComponent","setupState","useRouteContext","hideProjectNavigation","undefined","unavailable","workspaceName","name","projectLayout","ProjectLayoutGuard","workspaceSettings","header","variant","entries","anchors","root"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/anchors.tsx"],"sourcesContent":["import {ShipfoxLoader} from '@shipfox/react-ui/loader';\nimport {Header, Text} from '@shipfox/react-ui/typography';\nimport {createRootRouteWithContext, createRoute, Outlet, redirect} from '@tanstack/react-router';\nimport {MainLayout} from '#components/main-layout.js';\nimport {NotFoundPage} from '#components/not-found-page.js';\nimport {SettingsNav} from '#components/settings-nav.js';\nimport type {NavTabEntry, SettingsSectionEntry} from '#contract.js';\nimport {useActiveWorkspace, useMaybeActiveWorkspace} from './active-workspace.js';\nimport {anchorPaths} from './anchor-paths.js';\nimport {rememberLastWorkspaceId} from './last-workspace.js';\nimport {parseWorkspaceParams, parseWorkspaceProjectParams, useRouteParams} from './route-inputs.js';\nimport type {RouterContext} from './router-context.js';\nimport type {WorkspaceSetupState} from './workspace-setup.js';\nimport {\n WorkspaceLayoutErrorRoute,\n WorkspaceSetupPending,\n WorkspaceUnavailablePage,\n} from './workspace-setup.js';\n\nexport {routePathForAnchor} from './anchor-paths.js';\n\nexport function buildAnchorSkeleton({\n navigation,\n settingsSections,\n}: {\n navigation: readonly NavTabEntry[];\n settingsSections: readonly SettingsSectionEntry[];\n}) {\n const rootRoute = createRootRouteWithContext<RouterContext>()({\n component: Outlet,\n notFoundComponent: NotFoundPage,\n });\n const workspaceLayout = createRoute({\n getParentRoute: () => rootRoute,\n path: anchorPaths.workspaceLayout,\n beforeLoad: async ({context, params, location}) => {\n const auth = context.auth;\n if (!auth || auth.isLoading || !context.queryClient) return;\n if (!auth.isAuthenticated)\n throw redirect({to: '/auth/login' as never, search: {redirect: location.href} as never});\n const workspace = auth.workspaces.find(\n (candidate) => candidate.slug === params.workspaceSlug,\n );\n if (!workspace) throw redirect({to: '/'});\n try {\n if (auth.user?.id) rememberLastWorkspaceId(auth.user.id, workspace.id);\n } catch {\n // Local storage is best effort.\n }\n if (!context.workspaceSetup)\n throw new Error('Client composition includes workspace routes but no workspaceSetup gate.');\n return await context.workspaceSetup({\n queryClient: context.queryClient,\n workspaceId: workspace.id,\n workspaceSlug: params.workspaceSlug,\n pathname: location.pathname,\n });\n },\n pendingComponent: () => (\n <div className=\"flex h-screen items-center justify-center\">\n <ShipfoxLoader size={64} animation=\"circular\" color=\"orange\" background=\"dark\" />\n </div>\n ),\n errorComponent: WorkspaceLayoutErrorRoute,\n component: () => {\n const setupState = workspaceLayout.useRouteContext() as {\n hideProjectNavigation?: boolean;\n unavailable?: boolean;\n };\n const workspace = useMaybeActiveWorkspace();\n return setupState.hideProjectNavigation === undefined ? (\n <WorkspaceSetupPending />\n ) : setupState.unavailable ? (\n <WorkspaceUnavailablePage workspaceName={workspace?.name} />\n ) : (\n <MainLayout\n navigation={navigation}\n hideProjectNavigation={setupState.hideProjectNavigation}\n />\n );\n },\n });\n const projectLayout = createRoute({\n getParentRoute: () => workspaceLayout,\n path: '/p/$projectSlug',\n beforeLoad: async ({context, params}) => {\n const auth = context.auth;\n if (!auth || auth.isLoading || !context.queryClient) return;\n if ((context as RouterContext & Partial<WorkspaceSetupState>).unavailable) return;\n const workspace = auth.workspaces.find(\n (candidate) => candidate.slug === params.workspaceSlug,\n );\n if (!workspace) throw redirect({to: '/'});\n if (!context.projectSlugResolver) {\n throw new Error('Client composition includes project routes but no project slug resolver.');\n }\n const projectId = await context.projectSlugResolver({\n queryClient: context.queryClient,\n workspaceId: workspace.id,\n projectSlug: params.projectSlug,\n });\n if (!projectId) {\n throw redirect({\n to: '/w/$workspaceSlug',\n params: {workspaceSlug: params.workspaceSlug},\n });\n }\n },\n component: Outlet,\n });\n const projectSettings = createRoute({\n getParentRoute: () => projectLayout,\n path: '/settings',\n component: () => (\n <SettingsAnchorLayout\n scope=\"project\"\n title=\"Project settings\"\n description=\"Configure this project.\"\n settingsSections={settingsSections}\n />\n ),\n });\n const workspaceSettings = createRoute({\n getParentRoute: () => workspaceLayout,\n path: '/settings',\n component: () => {\n const workspace = useActiveWorkspace();\n return (\n <SettingsAnchorLayout\n scope=\"workspace\"\n title=\"Workspace settings\"\n description={`Configure ${workspace.name}.`}\n settingsSections={settingsSections}\n />\n );\n },\n });\n return {\n anchors: {root: rootRoute, workspaceLayout, projectLayout, workspaceSettings, projectSettings},\n rootRoute,\n workspaceLayout,\n projectLayout,\n workspaceSettings,\n projectSettings,\n };\n}\n\nfunction SettingsAnchorLayout({\n scope,\n title,\n description,\n settingsSections,\n}: {\n scope: 'workspace' | 'project';\n title: string;\n description: string;\n settingsSections: readonly SettingsSectionEntry[];\n}) {\n const params = useRouteParams((input): {workspaceSlug?: string; projectSlug?: string} =>\n scope === 'workspace' ? parseWorkspaceParams(input) : parseWorkspaceProjectParams(input),\n );\n if (!params.workspaceSlug || (scope === 'project' && !params.projectSlug)) return null;\n\n return (\n <div className=\"flex w-full flex-col gap-24\">\n <header className=\"flex flex-col gap-6\">\n <Header variant=\"h2\">{title}</Header>\n <Text size=\"sm\" className=\"text-foreground-neutral-muted\">\n {description}\n </Text>\n </header>\n\n <div className=\"grid grid-cols-[180px_minmax(0,1fr)] gap-32 max-[760px]:grid-cols-1\">\n <SettingsNav entries={settingsSections} scope={scope} />\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["ShipfoxLoader","Header","Text","createRootRouteWithContext","createRoute","Outlet","redirect","MainLayout","NotFoundPage","SettingsNav","useActiveWorkspace","useMaybeActiveWorkspace","anchorPaths","rememberLastWorkspaceId","parseWorkspaceParams","parseWorkspaceProjectParams","useRouteParams","WorkspaceLayoutErrorRoute","WorkspaceSetupPending","WorkspaceUnavailablePage","routePathForAnchor","buildAnchorSkeleton","navigation","settingsSections","rootRoute","component","notFoundComponent","workspaceLayout","getParentRoute","path","beforeLoad","context","params","location","auth","isLoading","queryClient","isAuthenticated","to","search","href","workspace","workspaces","find","candidate","slug","workspaceSlug","user","id","workspaceSetup","Error","workspaceId","pathname","pendingComponent","div","className","size","animation","color","background","errorComponent","setupState","useRouteContext","hideProjectNavigation","undefined","unavailable","workspaceName","name","projectLayout","projectSlugResolver","projectId","projectSlug","projectSettings","SettingsAnchorLayout","scope","title","description","workspaceSettings","anchors","root","input","header","variant","entries"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assemble-route-tree.d.ts","sourceRoot":"","sources":["../../src/runtime/assemble-route-tree.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,cAAc,EAAE,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAG9E,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAC;AAExD,MAAM,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"assemble-route-tree.d.ts","sourceRoot":"","sources":["../../src/runtime/assemble-route-tree.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,cAAc,EAAE,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAG9E,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAC;AAExD,MAAM,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAwCrF,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,OAAO,EAAE;IACP,OAAO,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,WAAW,EAAE,gBAAgB,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACpE,gBAAgB,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;CACjF,4SAoFF"}
|
|
@@ -5,7 +5,8 @@ const shellAnchors = [
|
|
|
5
5
|
'root',
|
|
6
6
|
'workspaceLayout',
|
|
7
7
|
'projectLayout',
|
|
8
|
-
'workspaceSettings'
|
|
8
|
+
'workspaceSettings',
|
|
9
|
+
'projectSettings'
|
|
9
10
|
];
|
|
10
11
|
function isShellAnchor(parent) {
|
|
11
12
|
return shellAnchors.includes(parent);
|
|
@@ -85,7 +86,11 @@ export async function assembleRouteTree(routes, options) {
|
|
|
85
86
|
...routeChildrenFor(parent),
|
|
86
87
|
...layouts.filter((layout)=>layout.parent === parent).map((layout)=>layoutTree(layout.id))
|
|
87
88
|
];
|
|
88
|
-
const
|
|
89
|
+
const projectSettings = skeleton.projectSettings.addChildren(childrenFor('projectSettings'));
|
|
90
|
+
const projectLayout = skeleton.projectLayout.addChildren([
|
|
91
|
+
...childrenFor('projectLayout'),
|
|
92
|
+
projectSettings
|
|
93
|
+
]);
|
|
89
94
|
const workspaceSettings = skeleton.workspaceSettings.addChildren(childrenFor('workspaceSettings'));
|
|
90
95
|
const workspaceLayout = skeleton.workspaceLayout.addChildren([
|
|
91
96
|
...childrenFor('workspaceLayout'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/runtime/assemble-route-tree.ts"],"sourcesContent":["import {type AnyRoute, createRoute} from '@tanstack/react-router';\nimport type {ComposedLayout, ComposedRoute} from '#compose/compose-routes.js';\nimport type {RouteParentId} from '#contract.js';\nimport {routePathForParent} from '#runtime/anchor-paths.js';\nimport {buildAnchorSkeleton} from '#runtime/anchors.js';\nimport type {RouteImpl} from '#runtime/define-route.js';\n\nexport type ResolveRouteImpl = (specifier: string) => RouteImpl | Promise<RouteImpl>;\n\nconst shellAnchors = ['root'
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/assemble-route-tree.ts"],"sourcesContent":["import {type AnyRoute, createRoute} from '@tanstack/react-router';\nimport type {ComposedLayout, ComposedRoute} from '#compose/compose-routes.js';\nimport type {RouteParentId} from '#contract.js';\nimport {routePathForParent} from '#runtime/anchor-paths.js';\nimport {buildAnchorSkeleton} from '#runtime/anchors.js';\nimport type {RouteImpl} from '#runtime/define-route.js';\n\nexport type ResolveRouteImpl = (specifier: string) => RouteImpl | Promise<RouteImpl>;\n\nconst shellAnchors = [\n 'root',\n 'workspaceLayout',\n 'projectLayout',\n 'workspaceSettings',\n 'projectSettings',\n] as const;\n\nfunction isShellAnchor(parent: RouteParentId): parent is (typeof shellAnchors)[number] {\n return shellAnchors.includes(parent as (typeof shellAnchors)[number]);\n}\n\nfunction orderLayouts(layouts: readonly ComposedLayout[]): ComposedLayout[] {\n const byId = new Map(layouts.map((layout) => [layout.id, layout]));\n const ordered: ComposedLayout[] = [];\n const visiting = new Set<string>();\n const visited = new Set<string>();\n\n function visit(layout: ComposedLayout): void {\n if (visited.has(layout.id)) return;\n if (!isShellAnchor(layout.parent)) {\n if (visiting.has(layout.id))\n throw new Error(`Layout \"${layout.id}\" has a cyclic parent reference.`);\n const parent = byId.get(layout.parent);\n if (!parent)\n throw new Error(`Layout \"${layout.id}\" targets missing parent \"${layout.parent}\".`);\n visiting.add(layout.id);\n visit(parent);\n visiting.delete(layout.id);\n }\n visited.add(layout.id);\n ordered.push(layout);\n }\n\n for (const layout of layouts) visit(layout);\n return ordered;\n}\n\nexport async function assembleRouteTree(\n routes: readonly ComposedRoute[],\n options: {\n layouts?: readonly ComposedLayout[];\n resolveImpl: ResolveRouteImpl;\n navigation: Parameters<typeof buildAnchorSkeleton>[0]['navigation'];\n settingsSections: Parameters<typeof buildAnchorSkeleton>[0]['settingsSections'];\n },\n) {\n const layouts = orderLayouts(options.layouts ?? []);\n const layoutPaths = new Map(layouts.map((layout) => [layout.id, layout.path]));\n const skeleton = buildAnchorSkeleton(options);\n const layoutRoutes = new Map<string, AnyRoute>();\n\n for (const layout of layouts) {\n const impl = await options.resolveImpl(layout.impl);\n const parentRoute = isShellAnchor(layout.parent)\n ? skeleton.anchors[layout.parent]\n : layoutRoutes.get(layout.parent);\n if (!parentRoute) throw new Error(`Missing layout parent \"${layout.parent}\".`);\n layoutRoutes.set(\n layout.id,\n createRoute({\n getParentRoute: () => parentRoute as never,\n path: routePathForParent(layout.parent, layout.path, layoutPaths),\n ...impl.options,\n } as never) as unknown as AnyRoute,\n );\n }\n\n const routeEntries: Array<{parent: RouteParentId; route: AnyRoute}> = await Promise.all(\n routes.map(async (route) => {\n const impl = await options.resolveImpl(route.impl);\n const parentRoute = isShellAnchor(route.parent)\n ? skeleton.anchors[route.parent]\n : layoutRoutes.get(route.parent);\n if (!parentRoute) throw new Error(`Missing route parent \"${route.parent}\".`);\n return {\n parent: route.parent,\n route: createRoute({\n getParentRoute: () => parentRoute as never,\n path: routePathForParent(route.parent, route.path, layoutPaths),\n ...impl.options,\n } as never) as unknown as AnyRoute,\n };\n }),\n );\n\n const routeChildrenFor = (parent: RouteParentId) =>\n routeEntries.filter((entry) => entry.parent === parent).map((entry) => entry.route);\n const layoutTrees = new Map<string, AnyRoute>();\n function layoutTree(layoutId: string): AnyRoute {\n const existing = layoutTrees.get(layoutId);\n if (existing) return existing;\n const layout = layouts.find((candidate) => candidate.id === layoutId);\n const route = layoutRoutes.get(layoutId);\n if (!layout || !route) throw new Error(`Missing layout \"${layoutId}\".`);\n const children = [\n ...routeChildrenFor(layoutId),\n ...layouts\n .filter((candidate) => candidate.parent === layoutId)\n .map((candidate) => layoutTree(candidate.id)),\n ];\n const tree = route.addChildren(children as never) as unknown as AnyRoute;\n layoutTrees.set(layoutId, tree);\n return tree;\n }\n\n const childrenFor = (parent: RouteParentId) => [\n ...routeChildrenFor(parent),\n ...layouts.filter((layout) => layout.parent === parent).map((layout) => layoutTree(layout.id)),\n ];\n const projectSettings = skeleton.projectSettings.addChildren(\n childrenFor('projectSettings') as never,\n );\n const projectLayout = skeleton.projectLayout.addChildren([\n ...childrenFor('projectLayout'),\n projectSettings,\n ] as never);\n const workspaceSettings = skeleton.workspaceSettings.addChildren(\n childrenFor('workspaceSettings') as never,\n );\n const workspaceLayout = skeleton.workspaceLayout.addChildren([\n ...childrenFor('workspaceLayout'),\n projectLayout,\n workspaceSettings,\n ] as never);\n return skeleton.rootRoute.addChildren([\n ...childrenFor('root'),\n workspaceLayout,\n ] as never) as unknown as typeof skeleton.rootRoute;\n}\n"],"names":["createRoute","routePathForParent","buildAnchorSkeleton","shellAnchors","isShellAnchor","parent","includes","orderLayouts","layouts","byId","Map","map","layout","id","ordered","visiting","Set","visited","visit","has","Error","get","add","delete","push","assembleRouteTree","routes","options","layoutPaths","path","skeleton","layoutRoutes","impl","resolveImpl","parentRoute","anchors","set","getParentRoute","routeEntries","Promise","all","route","routeChildrenFor","filter","entry","layoutTrees","layoutTree","layoutId","existing","find","candidate","children","tree","addChildren","childrenFor","projectSettings","projectLayout","workspaceSettings","workspaceLayout","rootRoute"],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { ComponentType, PropsWithChildren } from 'react';
|
|
2
|
+
import type { ProjectSlugResolver } from './router-context.js';
|
|
2
3
|
export interface ChromeSlots {
|
|
3
4
|
ProjectBreadcrumb: ComponentType;
|
|
4
|
-
|
|
5
|
+
projectSlugResolver: ProjectSlugResolver;
|
|
5
6
|
/**
|
|
6
7
|
* Optional content rendered in the account menu before the shell-owned logout
|
|
7
8
|
* action. The composing component must render one DropdownMenuItem or return
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chrome-context.d.ts","sourceRoot":"","sources":["../../src/runtime/chrome-context.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAE,iBAAiB,EAAC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"chrome-context.d.ts","sourceRoot":"","sources":["../../src/runtime/chrome-context.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAE,iBAAiB,EAAC,MAAM,OAAO,CAAC;AAE5D,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,iBAAiB,EAAE,aAAa,CAAC;IACjC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,aAAa,CAAC;CAClC;AAID,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,QAAQ,GACT,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAA;CAAC,CAAC,+BAEtD;AAED,wBAAgB,SAAS,IAAI,WAAW,CAIvC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/runtime/chrome-context.tsx"],"sourcesContent":["import type {ComponentType, PropsWithChildren} from 'react';\nimport {createContext, useContext} from 'react';\n\nexport interface ChromeSlots {\n ProjectBreadcrumb: ComponentType;\n
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/chrome-context.tsx"],"sourcesContent":["import type {ComponentType, PropsWithChildren} from 'react';\nimport {createContext, useContext} from 'react';\nimport type {ProjectSlugResolver} from './router-context.js';\n\nexport interface ChromeSlots {\n ProjectBreadcrumb: ComponentType;\n projectSlugResolver: ProjectSlugResolver;\n /**\n * Optional content rendered in the account menu before the shell-owned logout\n * action. The composing component must render one DropdownMenuItem or return\n * null, and owns whether this content renders from the current session.\n */\n AccountMenuEntry?: ComponentType;\n}\n\nconst ChromeContext = createContext<ChromeSlots | undefined>(undefined);\n\nexport function ChromeProvider({\n chrome,\n children,\n}: PropsWithChildren<{chrome: ChromeSlots | undefined}>) {\n return <ChromeContext.Provider value={chrome}>{children}</ChromeContext.Provider>;\n}\n\nexport function useChrome(): ChromeSlots {\n const chrome = useContext(ChromeContext);\n if (!chrome) throw new Error('Client composition must provide browser chrome slots.');\n return chrome;\n}\n"],"names":["createContext","useContext","ChromeContext","undefined","ChromeProvider","chrome","children","Provider","value","useChrome","Error"],"mappings":";AACA,SAAQA,aAAa,EAAEC,UAAU,QAAO,QAAQ;AAchD,MAAMC,8BAAgBF,cAAuCG;AAE7D,OAAO,SAASC,eAAe,EAC7BC,MAAM,EACNC,QAAQ,EAC6C;IACrD,qBAAO,KAACJ,cAAcK,QAAQ;QAACC,OAAOH;kBAASC;;AACjD;AAEA,OAAO,SAASG;IACd,MAAMJ,SAASJ,WAAWC;IAC1B,IAAI,CAACG,QAAQ,MAAM,IAAIK,MAAM;IAC7B,OAAOL;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-client-app.d.ts","sourceRoot":"","sources":["../../src/runtime/compose-client-app.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAC,KAAK,SAAS,EAAiB,MAAM,wBAAwB,CAAC;AAKtE,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAiB,KAAK,WAAW,EAAC,MAAM,qBAAqB,CAAC;AAErE,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAE7D,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,MAAM,EACN,MAAM,EACN,cAAc,GACf,EAAE;IACD,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IACnC,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACrC;mBASkB,WAAW,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"compose-client-app.d.ts","sourceRoot":"","sources":["../../src/runtime/compose-client-app.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAC,KAAK,SAAS,EAAiB,MAAM,wBAAwB,CAAC;AAKtE,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAiB,KAAK,WAAW,EAAC,MAAM,qBAAqB,CAAC;AAErE,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAE7D,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,MAAM,EACN,MAAM,EACN,cAAc,GACf,EAAE;IACD,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IACnC,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACrC;mBASkB,WAAW,GAAG,IAAI;EAkCpC"}
|