@byline/cli 2.3.3 → 2.4.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/phases/wire/byline-layout-tsx.d.ts +3 -0
- package/dist/phases/wire/byline-layout-tsx.d.ts.map +1 -0
- package/dist/phases/wire/byline-layout-tsx.js +58 -0
- package/dist/phases/wire/byline-layout-tsx.js.map +1 -0
- package/dist/phases/wire/index.js +2 -2
- package/dist/phases/wire/index.js.map +1 -1
- package/dist/templates/byline/admin.config.ts +3 -3
- package/dist/templates/byline-examples/admin.config.ts +3 -3
- package/dist/templates/routes/_byline/route.lazy.tsx +44 -0
- package/dist/templates/routes/_byline/route.tsx +13 -35
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"byline-layout-tsx.d.ts","sourceRoot":"","sources":["../../../src/phases/wire/byline-layout-tsx.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,aAAa,CAAA;AAUzD,eAAO,MAAM,mBAAmB,EAAE,OASjC,CAAA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { Project } from 'ts-morph';
|
|
3
|
+
const REL = 'src/routes/_byline/route.lazy.tsx';
|
|
4
|
+
const IMPORT_SPECIFIER = '../../../byline/admin.config';
|
|
5
|
+
const SNIPPET = `// Initialize Byline admin config — sits in the lazy companion so the
|
|
6
|
+
// Lexical editor module graph only loads when a _byline/* URL matches.
|
|
7
|
+
// See byline/admin.config.ts for the comment on why this is side-effecty.
|
|
8
|
+
import '${IMPORT_SPECIFIER}'
|
|
9
|
+
`;
|
|
10
|
+
export const wireBylineLayoutTsx = {
|
|
11
|
+
key: 'byline-layout-tsx',
|
|
12
|
+
title: `Inject side-effect import into ${REL}`,
|
|
13
|
+
async preview(ctx) {
|
|
14
|
+
return run(ctx, true);
|
|
15
|
+
},
|
|
16
|
+
async apply(ctx) {
|
|
17
|
+
return run(ctx, false);
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
async function run(ctx, dryRun) {
|
|
21
|
+
const path = ctx.resolve(REL);
|
|
22
|
+
if (!existsSync(path)) {
|
|
23
|
+
return { status: 'blocked', message: `${REL} not found — routes phase should have caught this` };
|
|
24
|
+
}
|
|
25
|
+
const text = readFileSync(path, 'utf8');
|
|
26
|
+
if (hasImport(text, IMPORT_SPECIFIER)) {
|
|
27
|
+
return { status: 'skipped', message: `${REL}: admin config import already present` };
|
|
28
|
+
}
|
|
29
|
+
if (dryRun) {
|
|
30
|
+
return { status: 'done', message: `${REL}: will inject \`import '${IMPORT_SPECIFIER}'\`` };
|
|
31
|
+
}
|
|
32
|
+
const project = new Project({ useInMemoryFileSystem: false, skipAddingFilesFromTsConfig: true });
|
|
33
|
+
let source;
|
|
34
|
+
try {
|
|
35
|
+
source = project.addSourceFileAtPath(path);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return {
|
|
39
|
+
status: 'manual',
|
|
40
|
+
message: `${REL}: could not parse — please add the import manually`,
|
|
41
|
+
snippet: SNIPPET,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// Place after the last existing import — admin config registration only
|
|
45
|
+
// needs to run once at module load; ordering with other side-effect
|
|
46
|
+
// imports doesn't matter as long as it lands in the route module graph.
|
|
47
|
+
const imports = source.getImportDeclarations();
|
|
48
|
+
const insertIndex = imports.length;
|
|
49
|
+
source.insertImportDeclaration(insertIndex, { moduleSpecifier: IMPORT_SPECIFIER });
|
|
50
|
+
source.saveSync();
|
|
51
|
+
return { status: 'done', message: `${REL}: injected \`import '${IMPORT_SPECIFIER}'\`` };
|
|
52
|
+
}
|
|
53
|
+
function hasImport(source, specifier) {
|
|
54
|
+
const escaped = specifier.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
55
|
+
const re = new RegExp(`import\\s+['"]${escaped}(?:\\.ts|\\.tsx)?['"]`);
|
|
56
|
+
return re.test(source);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=byline-layout-tsx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"byline-layout-tsx.js","sourceRoot":"","sources":["../../../src/phases/wire/byline-layout-tsx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAElD,OAAO,EAAE,OAAO,EAAmB,MAAM,UAAU,CAAA;AAKnD,MAAM,GAAG,GAAG,mCAAmC,CAAA;AAC/C,MAAM,gBAAgB,GAAG,8BAA8B,CAAA;AACvD,MAAM,OAAO,GAAG;;;UAGN,gBAAgB;CACzB,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAY;IAC1C,GAAG,EAAE,mBAAmB;IACxB,KAAK,EAAE,kCAAkC,GAAG,EAAE;IAC9C,KAAK,CAAC,OAAO,CAAC,GAAG;QACf,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACvB,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,GAAG;QACb,OAAO,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACxB,CAAC;CACF,CAAA;AAED,KAAK,UAAU,GAAG,CAAC,GAAY,EAAE,MAAe;IAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,GAAG,mDAAmD,EAAE,CAAA;IAClG,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACvC,IAAI,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,GAAG,uCAAuC,EAAE,CAAA;IACtF,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,2BAA2B,gBAAgB,KAAK,EAAE,CAAA;IAC5F,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,qBAAqB,EAAE,KAAK,EAAE,2BAA2B,EAAE,IAAI,EAAE,CAAC,CAAA;IAChG,IAAI,MAAkB,CAAA;IACtB,IAAI,CAAC;QACH,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,GAAG,GAAG,oDAAoD;YACnE,OAAO,EAAE,OAAO;SACjB,CAAA;IACH,CAAC;IAED,wEAAwE;IACxE,oEAAoE;IACpE,wEAAwE;IACxE,MAAM,OAAO,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAA;IAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAA;IAClC,MAAM,CAAC,uBAAuB,CAAC,WAAW,EAAE,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC,CAAA;IAClF,MAAM,CAAC,QAAQ,EAAE,CAAA;IAEjB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,wBAAwB,gBAAgB,KAAK,EAAE,CAAA;AACzF,CAAC;AAED,SAAS,SAAS,CAAC,MAAc,EAAE,SAAiB;IAClD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;IAChE,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,iBAAiB,OAAO,uBAAuB,CAAC,CAAA;IACtE,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACxB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { wireBylineLayoutTsx } from './byline-layout-tsx.js';
|
|
2
2
|
import { wireServerTs } from './server-ts.js';
|
|
3
3
|
import { wireServerUploads } from './server-uploads.js';
|
|
4
4
|
import { wireStartTs } from './start-ts.js';
|
|
@@ -13,7 +13,7 @@ const SUB_EDITS = [
|
|
|
13
13
|
wireServerTs,
|
|
14
14
|
wireServerUploads,
|
|
15
15
|
wireStartTs,
|
|
16
|
-
|
|
16
|
+
wireBylineLayoutTsx,
|
|
17
17
|
wireTsconfig,
|
|
18
18
|
wireViteConfig,
|
|
19
19
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/phases/wire/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/phases/wire/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAIjD,mEAAmE;AACnE,4EAA4E;AAC5E,0EAA0E;AAC1E,sEAAsE;AACtE,oDAAoD;AACpD,MAAM,SAAS,GAAc;IAC3B,YAAY;IACZ,iBAAiB;IACjB,WAAW;IACX,mBAAmB;IACnB,YAAY;IACZ,cAAc;CACf,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAU;IAC9B,EAAE,EAAE,MAAM;IACV,KAAK,EAAE,+DAA+D;IACtE,WAAW,EAAE,SAAS;IAEtB,KAAK,CAAC,MAAM,CAAC,GAAG;QACd,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAA;QAC/C,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG;QACZ,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAChC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;QACpC,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG;QACpB,MAAM,OAAO,GAA6C,EAAE,CAAA;QAC5D,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC9B,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;YACzC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;YAE9D,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;gBACjB,KAAK,MAAM;oBACT,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;oBAChD,MAAK;gBACP,KAAK,SAAS;oBACZ,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;oBAC7C,MAAK;gBACP,KAAK,QAAQ;oBACX,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;oBAC7C,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;wBACd,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,GAAG,uBAAuB,CAAC,CAAA;oBACjE,CAAC;oBACD,MAAK;gBACP,KAAK,SAAS;oBACZ,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;oBAC9C,MAAK;YACT,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;IAChE,CAAC;CACF,CAAA;AAED,SAAS,UAAU,CAAC,GAAW,EAAE,CAAgB;IAC/C,MAAM,GAAG,GACP,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;IAC9F,OAAO,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAA;AACxC,CAAC;AAED,SAAS,iBAAiB,CAAC,CAA0B;IACnD,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACrC,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,cAAc,CAAC,OAAwB;IAC9C,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC;QAAE,OAAO,SAAS,CAAA;IACjE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAA;IAChE,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
/**
|
|
10
10
|
* Registers Byline's client-side config (collection admin UI configs,
|
|
11
11
|
* field editors, i18n, routes) in the current module graph. Imported as
|
|
12
|
-
* a side-effect from `src/routes/
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* a side-effect from `src/routes/_byline/route.lazy.tsx` so registration
|
|
13
|
+
* fires only when a `_byline/*` URL matches — keeping the Lexical
|
|
14
|
+
* editor module graph out of public-route bundles entirely.
|
|
15
15
|
*
|
|
16
16
|
* This is the minimal scaffold: no example collections registered. Add
|
|
17
17
|
* collection schemas + admin configs to the `collections` and `admin`
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
/**
|
|
10
10
|
* Registers Byline's client-side config (collection admin UI configs,
|
|
11
11
|
* field editors, i18n, routes) in the current module graph. Imported as
|
|
12
|
-
* a side-effect from `src/routes/
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* a side-effect from `src/routes/_byline/route.lazy.tsx` so registration
|
|
13
|
+
* fires only when a `_byline/*` URL matches — keeping the Lexical
|
|
14
|
+
* editor module graph out of public-route bundles entirely.
|
|
15
15
|
*
|
|
16
16
|
* In TanStack Start with Vite 6 the server entry (`src/server.ts`) and
|
|
17
17
|
* the SSR rendering context run in separate Vite environments, so
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This Source Code is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Infonomic Company Limited
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Lazy companion to `_byline/route.tsx`. TanStack Router loads this on
|
|
11
|
+
* demand when a `_byline/*` URL matches, so the Byline UI providers,
|
|
12
|
+
* stylesheets, and the admin config side-effect import (which
|
|
13
|
+
* transitively pulls in the Lexical editor module graph) only run when
|
|
14
|
+
* an admin route is actually visited — public routes stay clean.
|
|
15
|
+
*
|
|
16
|
+
* If you also want to use the Byline UI components on your public site,
|
|
17
|
+
* import the same stylesheets from your front-end's pathless layout
|
|
18
|
+
* instead (e.g. `_front-end/route.tsx`).
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { createLazyFileRoute, Outlet } from '@tanstack/react-router'
|
|
22
|
+
|
|
23
|
+
import { BreadcrumbsProvider } from '@byline/host-tanstack-start/admin-shell/chrome/breadcrumbs/breadcrumbs-provider'
|
|
24
|
+
import { ToastProvider, ToastViewport } from '@byline/ui/react'
|
|
25
|
+
|
|
26
|
+
import '@byline/ui/reset.css'
|
|
27
|
+
import '@byline/ui/styles.css'
|
|
28
|
+
|
|
29
|
+
export const Route = createLazyFileRoute('/_byline')({
|
|
30
|
+
component: BylineLayout,
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
function BylineLayout() {
|
|
34
|
+
return (
|
|
35
|
+
<div className="byline-ui flex flex-col flex-1 w-full max-w-full h-full">
|
|
36
|
+
<ToastProvider timeout={5000}>
|
|
37
|
+
<BreadcrumbsProvider>
|
|
38
|
+
<Outlet />
|
|
39
|
+
</BreadcrumbsProvider>
|
|
40
|
+
<ToastViewport position="bottom-right" />
|
|
41
|
+
</ToastProvider>
|
|
42
|
+
</div>
|
|
43
|
+
)
|
|
44
|
+
}
|
|
@@ -7,44 +7,22 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
* Pathless
|
|
11
|
-
* and the sign-in page). The `_byline` prefix doesn't contribute
|
|
12
|
-
* paths — `/_byline/admin/...` resolves to `/admin/...` and
|
|
10
|
+
* Pathless route definition for everything Byline-rendered (the admin
|
|
11
|
+
* shell and the sign-in page). The `_byline` prefix doesn't contribute
|
|
12
|
+
* to URL paths — `/_byline/admin/...` resolves to `/admin/...` and
|
|
13
13
|
* `/_byline/sign-in` resolves to `/sign-in`.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
15
|
+
* This file is intentionally bare. The router needs the route definition
|
|
16
|
+
* at startup to build the tree for URL matching, so anything declared
|
|
17
|
+
* here ends up in the eager module graph (and Vite will modulepreload
|
|
18
|
+
* its dependencies on every page).
|
|
19
19
|
*
|
|
20
|
-
*
|
|
21
|
-
* import
|
|
22
|
-
*
|
|
23
|
-
*
|
|
20
|
+
* The component, providers, Byline UI stylesheets, and the admin config
|
|
21
|
+
* side-effect import live in the sibling `route.lazy.tsx` — TanStack
|
|
22
|
+
* Router loads that file on demand when a `_byline/*` URL matches, so
|
|
23
|
+
* the editor + admin shell deps stay out of public-route bundles.
|
|
24
24
|
*/
|
|
25
25
|
|
|
26
|
-
import {
|
|
26
|
+
import { createFileRoute } from '@tanstack/react-router'
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
import { BreadcrumbsProvider } from '@byline/host-tanstack-start/admin-shell/chrome/breadcrumbs/breadcrumbs-provider'
|
|
31
|
-
|
|
32
|
-
import '@byline/ui/reset.css'
|
|
33
|
-
import '@byline/ui/styles.css'
|
|
34
|
-
|
|
35
|
-
export const Route = createFileRoute('/_byline')({
|
|
36
|
-
component: BylineLayout,
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
function BylineLayout() {
|
|
40
|
-
return (
|
|
41
|
-
<div className="byline-ui flex flex-col flex-1 w-full max-w-full h-full">
|
|
42
|
-
<ToastProvider timeout={5000}>
|
|
43
|
-
<BreadcrumbsProvider>
|
|
44
|
-
<Outlet />
|
|
45
|
-
</BreadcrumbsProvider>
|
|
46
|
-
<ToastViewport position="bottom-right" />
|
|
47
|
-
</ToastProvider>
|
|
48
|
-
</div>
|
|
49
|
-
)
|
|
50
|
-
}
|
|
28
|
+
export const Route = createFileRoute('/_byline')({})
|