@riverbankcms/sdk 0.6.0 → 0.7.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/README.md +239 -0
- package/dist/cli/index.js +22 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/client/client.js +1 -1
- package/dist/client/client.js.map +1 -1
- package/dist/client/client.mjs +1 -1
- package/dist/client/client.mjs.map +1 -1
- package/dist/server/{Layout-BClXUTsd.d.mts → Layout-B7cvis7r.d.mts} +3 -3
- package/dist/server/{Layout-UXGjXv8M.d.ts → Layout-wBtJLTVX.d.ts} +3 -3
- package/dist/server/{chunk-Z5ZA6Q4D.mjs → chunk-74XUVNOO.mjs} +5 -3
- package/dist/server/chunk-74XUVNOO.mjs.map +1 -0
- package/dist/server/{chunk-PHS2KWJX.js → chunk-7BVRA5MY.js} +7 -52
- package/dist/server/chunk-7BVRA5MY.js.map +1 -0
- package/dist/server/{chunk-SQMGHEJM.mjs → chunk-7FIJSGHU.mjs} +2 -2
- package/dist/server/{chunk-SQMGHEJM.mjs.map → chunk-7FIJSGHU.mjs.map} +1 -1
- package/dist/server/chunk-ARNCLSQT.mjs +52 -0
- package/dist/server/chunk-ARNCLSQT.mjs.map +1 -0
- package/dist/server/chunk-BNQV3PXP.js +69 -0
- package/dist/server/chunk-BNQV3PXP.js.map +1 -0
- package/dist/server/{chunk-SSS7CCRR.js → chunk-EIVISR62.js} +15 -57
- package/dist/server/chunk-EIVISR62.js.map +1 -0
- package/dist/server/{chunk-I2D7KOEA.js → chunk-JWRNMNWI.js} +5 -3
- package/dist/server/chunk-JWRNMNWI.js.map +1 -0
- package/dist/server/{chunk-EOWGKCUZ.js → chunk-P7UVAMK6.js} +2 -2
- package/dist/server/{chunk-EOWGKCUZ.js.map → chunk-P7UVAMK6.js.map} +1 -1
- package/dist/server/{chunk-2HXHFSMI.mjs → chunk-RBJFXNDM.mjs} +6 -51
- package/dist/server/chunk-RBJFXNDM.mjs.map +1 -0
- package/dist/server/chunk-SWYWZT3L.mjs +69 -0
- package/dist/server/chunk-SWYWZT3L.mjs.map +1 -0
- package/dist/server/chunk-T26N3P26.js +52 -0
- package/dist/server/chunk-T26N3P26.js.map +1 -0
- package/dist/server/{chunk-PMHLZ3FW.mjs → chunk-YXA4GAAQ.mjs} +15 -57
- package/dist/server/chunk-YXA4GAAQ.mjs.map +1 -0
- package/dist/server/{components-DppHY5oD.d.ts → components-CICSJyp_.d.ts} +1 -1
- package/dist/server/{components-BmaJxgCV.d.mts → components-CMMwDXTW.d.mts} +1 -1
- package/dist/server/components.d.mts +2 -2
- package/dist/server/components.d.ts +2 -2
- package/dist/server/components.js +5 -3
- package/dist/server/components.js.map +1 -1
- package/dist/server/components.mjs +5 -3
- package/dist/server/index-BTwWvSBu.d.ts +130 -0
- package/dist/server/index-DI_qlYx3.d.mts +130 -0
- package/dist/server/index.js +2 -2
- package/dist/server/index.mjs +1 -1
- package/dist/server/{loadContent-BS-3wesN.d.mts → loadContent-C-YYUKQa.d.mts} +10 -2
- package/dist/server/{loadContent-Buvmudee.d.ts → loadContent-DmgpFcFC.d.ts} +10 -2
- package/dist/server/metadata.d.mts +8 -135
- package/dist/server/metadata.d.ts +8 -135
- package/dist/server/metadata.js +5 -65
- package/dist/server/metadata.js.map +1 -1
- package/dist/server/metadata.mjs +4 -64
- package/dist/server/metadata.mjs.map +1 -1
- package/dist/server/navigation.d.mts +80 -145
- package/dist/server/navigation.d.ts +80 -145
- package/dist/server/navigation.js +2 -10
- package/dist/server/navigation.js.map +1 -1
- package/dist/server/navigation.mjs +7 -15
- package/dist/server/next.d.mts +274 -0
- package/dist/server/next.d.ts +274 -0
- package/dist/server/next.js +150 -0
- package/dist/server/next.js.map +1 -0
- package/dist/server/next.mjs +150 -0
- package/dist/server/next.mjs.map +1 -0
- package/dist/server/rendering/server.d.mts +1 -1
- package/dist/server/rendering/server.d.ts +1 -1
- package/dist/server/rendering/server.js +5 -3
- package/dist/server/rendering/server.js.map +1 -1
- package/dist/server/rendering/server.mjs +5 -3
- package/dist/server/rendering.d.mts +4 -4
- package/dist/server/rendering.d.ts +4 -4
- package/dist/server/rendering.js +6 -4
- package/dist/server/rendering.js.map +1 -1
- package/dist/server/rendering.mjs +6 -4
- package/dist/server/server.d.mts +1 -1
- package/dist/server/server.d.ts +1 -1
- package/dist/server/server.js +3 -3
- package/dist/server/server.mjs +2 -2
- package/package.json +13 -1
- package/dist/server/chunk-2HXHFSMI.mjs.map +0 -1
- package/dist/server/chunk-I2D7KOEA.js.map +0 -1
- package/dist/server/chunk-PHS2KWJX.js.map +0 -1
- package/dist/server/chunk-PMHLZ3FW.mjs.map +0 -1
- package/dist/server/chunk-SSS7CCRR.js.map +0 -1
- package/dist/server/chunk-Z5ZA6Q4D.mjs.map +0 -1
package/dist/server/metadata.js
CHANGED
|
@@ -1,70 +1,10 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
// src/metadata/generatePageMetadata.ts
|
|
4
|
-
function generatePageMetadata(input) {
|
|
5
|
-
const { page, site, path, siteUrl, overrides, googleSiteVerification } = input;
|
|
6
|
-
const pageTitle = _nullishCoalesce(_optionalChain([overrides, 'optionalAccess', _ => _.title]), () => ( page.name));
|
|
7
|
-
const fullTitle = pageTitle === site.title ? pageTitle : `${pageTitle} | ${site.title}`;
|
|
8
|
-
const description = _nullishCoalesce(_optionalChain([overrides, 'optionalAccess', _2 => _2.description]), () => ( page.purpose));
|
|
9
|
-
const canonicalUrl = _nullishCoalesce(_optionalChain([overrides, 'optionalAccess', _3 => _3.canonicalUrl]), () => ( `${siteUrl}${path}`));
|
|
10
|
-
const fullUrl = `${siteUrl}${path}`;
|
|
11
|
-
const metadata = {
|
|
12
|
-
title: fullTitle,
|
|
13
|
-
description: _nullishCoalesce(description, () => ( void 0)),
|
|
14
|
-
alternates: {
|
|
15
|
-
canonical: canonicalUrl
|
|
16
|
-
},
|
|
17
|
-
openGraph: {
|
|
18
|
-
title: pageTitle,
|
|
19
|
-
description: _nullishCoalesce(description, () => ( void 0)),
|
|
20
|
-
url: fullUrl,
|
|
21
|
-
siteName: site.title,
|
|
22
|
-
type: "website",
|
|
23
|
-
..._optionalChain([overrides, 'optionalAccess', _4 => _4.ogImage]) ? {
|
|
24
|
-
images: [
|
|
25
|
-
{
|
|
26
|
-
url: overrides.ogImage,
|
|
27
|
-
alt: pageTitle
|
|
28
|
-
}
|
|
29
|
-
]
|
|
30
|
-
} : {}
|
|
31
|
-
},
|
|
32
|
-
twitter: {
|
|
33
|
-
card: "summary_large_image",
|
|
34
|
-
title: pageTitle,
|
|
35
|
-
description: _nullishCoalesce(description, () => ( void 0)),
|
|
36
|
-
..._optionalChain([overrides, 'optionalAccess', _5 => _5.ogImage]) ? {
|
|
37
|
-
images: [overrides.ogImage]
|
|
38
|
-
} : {}
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
if (_optionalChain([overrides, 'optionalAccess', _6 => _6.robots])) {
|
|
42
|
-
metadata.robots = {
|
|
43
|
-
index: _nullishCoalesce(overrides.robots.index, () => ( true)),
|
|
44
|
-
follow: _nullishCoalesce(overrides.robots.follow, () => ( true))
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
if (googleSiteVerification) {
|
|
48
|
-
metadata.verification = {
|
|
49
|
-
google: googleSiteVerification
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
return metadata;
|
|
53
|
-
}
|
|
54
|
-
function generatePreviewMetadata(input) {
|
|
55
|
-
return generatePageMetadata({
|
|
56
|
-
...input,
|
|
57
|
-
overrides: {
|
|
58
|
-
...input.overrides,
|
|
59
|
-
robots: {
|
|
60
|
-
index: false,
|
|
61
|
-
follow: false
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
3
|
|
|
4
|
+
var _chunkBNQV3PXPjs = require('./chunk-BNQV3PXP.js');
|
|
5
|
+
require('./chunk-DGUM43GV.js');
|
|
67
6
|
|
|
68
7
|
|
|
69
|
-
|
|
8
|
+
|
|
9
|
+
exports.generatePageMetadata = _chunkBNQV3PXPjs.generatePageMetadata; exports.generatePreviewMetadata = _chunkBNQV3PXPjs.generatePreviewMetadata;
|
|
70
10
|
//# sourceMappingURL=metadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/metadata.js"
|
|
1
|
+
{"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/metadata.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACF,iJAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/metadata.js"}
|
package/dist/server/metadata.mjs
CHANGED
|
@@ -1,68 +1,8 @@
|
|
|
1
|
+
import {
|
|
2
|
+
generatePageMetadata,
|
|
3
|
+
generatePreviewMetadata
|
|
4
|
+
} from "./chunk-SWYWZT3L.mjs";
|
|
1
5
|
import "./chunk-BJTO5JO5.mjs";
|
|
2
|
-
|
|
3
|
-
// src/metadata/generatePageMetadata.ts
|
|
4
|
-
function generatePageMetadata(input) {
|
|
5
|
-
const { page, site, path, siteUrl, overrides, googleSiteVerification } = input;
|
|
6
|
-
const pageTitle = overrides?.title ?? page.name;
|
|
7
|
-
const fullTitle = pageTitle === site.title ? pageTitle : `${pageTitle} | ${site.title}`;
|
|
8
|
-
const description = overrides?.description ?? page.purpose;
|
|
9
|
-
const canonicalUrl = overrides?.canonicalUrl ?? `${siteUrl}${path}`;
|
|
10
|
-
const fullUrl = `${siteUrl}${path}`;
|
|
11
|
-
const metadata = {
|
|
12
|
-
title: fullTitle,
|
|
13
|
-
description: description ?? void 0,
|
|
14
|
-
alternates: {
|
|
15
|
-
canonical: canonicalUrl
|
|
16
|
-
},
|
|
17
|
-
openGraph: {
|
|
18
|
-
title: pageTitle,
|
|
19
|
-
description: description ?? void 0,
|
|
20
|
-
url: fullUrl,
|
|
21
|
-
siteName: site.title,
|
|
22
|
-
type: "website",
|
|
23
|
-
...overrides?.ogImage ? {
|
|
24
|
-
images: [
|
|
25
|
-
{
|
|
26
|
-
url: overrides.ogImage,
|
|
27
|
-
alt: pageTitle
|
|
28
|
-
}
|
|
29
|
-
]
|
|
30
|
-
} : {}
|
|
31
|
-
},
|
|
32
|
-
twitter: {
|
|
33
|
-
card: "summary_large_image",
|
|
34
|
-
title: pageTitle,
|
|
35
|
-
description: description ?? void 0,
|
|
36
|
-
...overrides?.ogImage ? {
|
|
37
|
-
images: [overrides.ogImage]
|
|
38
|
-
} : {}
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
if (overrides?.robots) {
|
|
42
|
-
metadata.robots = {
|
|
43
|
-
index: overrides.robots.index ?? true,
|
|
44
|
-
follow: overrides.robots.follow ?? true
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
if (googleSiteVerification) {
|
|
48
|
-
metadata.verification = {
|
|
49
|
-
google: googleSiteVerification
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
return metadata;
|
|
53
|
-
}
|
|
54
|
-
function generatePreviewMetadata(input) {
|
|
55
|
-
return generatePageMetadata({
|
|
56
|
-
...input,
|
|
57
|
-
overrides: {
|
|
58
|
-
...input.overrides,
|
|
59
|
-
robots: {
|
|
60
|
-
index: false,
|
|
61
|
-
follow: false
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
6
|
export {
|
|
67
7
|
generatePageMetadata,
|
|
68
8
|
generatePreviewMetadata
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -12,26 +12,28 @@ import '@riverbankcms/db';
|
|
|
12
12
|
* Navigation helper utilities for SDK sites.
|
|
13
13
|
*
|
|
14
14
|
* Provides helpers to transform CMS navigation data into render-ready structures.
|
|
15
|
-
*
|
|
15
|
+
* All navigation functions return nested structures supporting dropdowns.
|
|
16
16
|
*
|
|
17
|
-
* @example
|
|
17
|
+
* @example Getting nav items
|
|
18
18
|
* ```ts
|
|
19
|
-
* import { getPrimaryNavItems } from '@riverbankcms/sdk/navigation';
|
|
19
|
+
* import { getPrimaryNavItems, isNavLink, isNavDropdown } from '@riverbankcms/sdk/navigation';
|
|
20
20
|
*
|
|
21
21
|
* const headerNav = getPrimaryNavItems(siteData.navigation);
|
|
22
|
-
*
|
|
22
|
+
* headerNav.forEach(item => {
|
|
23
|
+
* if (isNavLink(item)) {
|
|
24
|
+
* console.log(item.href);
|
|
25
|
+
* } else {
|
|
26
|
+
* console.log(`${item.label} has ${item.children.length} children`);
|
|
27
|
+
* }
|
|
28
|
+
* });
|
|
23
29
|
* ```
|
|
24
30
|
*
|
|
25
|
-
* @example
|
|
31
|
+
* @example Building menu and logo
|
|
26
32
|
* ```ts
|
|
27
|
-
* import {
|
|
28
|
-
*
|
|
29
|
-
* const menu = buildMenuViewModel(siteData.navigation);
|
|
30
|
-
* const logo = buildLogoViewModel(siteData.layout.logo, siteData.site.title);
|
|
33
|
+
* import { buildMenu, buildLogo } from '@riverbankcms/sdk/navigation';
|
|
31
34
|
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* });
|
|
35
|
+
* const menu = buildMenu(siteData.navigation, siteData.routes);
|
|
36
|
+
* const logo = buildLogo(siteData.layout.logo, siteData.site.title);
|
|
35
37
|
* ```
|
|
36
38
|
*
|
|
37
39
|
* @packageDocumentation
|
|
@@ -110,17 +112,6 @@ type LogoViewModel = {
|
|
|
110
112
|
storagePath?: string;
|
|
111
113
|
storageBucket?: string;
|
|
112
114
|
} | null;
|
|
113
|
-
/**
|
|
114
|
-
* A simplified navigation item structure for component rendering.
|
|
115
|
-
*/
|
|
116
|
-
type NavItem = {
|
|
117
|
-
/** The URL to navigate to */
|
|
118
|
-
href: string;
|
|
119
|
-
/** Display text for the navigation link */
|
|
120
|
-
label: string;
|
|
121
|
-
/** Whether link should open in new tab (external links) */
|
|
122
|
-
isExternal: boolean;
|
|
123
|
-
};
|
|
124
115
|
/**
|
|
125
116
|
* A navigation link item with a direct URL.
|
|
126
117
|
* Use `kind` discriminator for type-safe narrowing.
|
|
@@ -160,12 +151,12 @@ type NavDropdown = {
|
|
|
160
151
|
children: NavLink[];
|
|
161
152
|
};
|
|
162
153
|
/**
|
|
163
|
-
*
|
|
154
|
+
* Navigation item - either a link or a dropdown container.
|
|
164
155
|
* Use `kind` property for type-safe discrimination.
|
|
165
156
|
*
|
|
166
157
|
* @example
|
|
167
158
|
* ```ts
|
|
168
|
-
* const items =
|
|
159
|
+
* const items = getPrimaryNavItems(navigation);
|
|
169
160
|
* items.forEach(item => {
|
|
170
161
|
* if (item.kind === 'link') {
|
|
171
162
|
* console.log(item.href);
|
|
@@ -175,72 +166,63 @@ type NavDropdown = {
|
|
|
175
166
|
* });
|
|
176
167
|
* ```
|
|
177
168
|
*/
|
|
178
|
-
type
|
|
169
|
+
type NavItem = NavLink | NavDropdown;
|
|
179
170
|
/**
|
|
180
171
|
* Type guard to check if a navigation item is a link.
|
|
181
172
|
*/
|
|
182
|
-
declare function isNavLink(item:
|
|
173
|
+
declare function isNavLink(item: NavItem): item is NavLink;
|
|
183
174
|
/**
|
|
184
175
|
* Type guard to check if a navigation item is a dropdown.
|
|
185
176
|
*/
|
|
186
|
-
declare function isNavDropdown(item:
|
|
187
|
-
/**
|
|
188
|
-
* Simple nav link with pre-resolved href for block rendering.
|
|
189
|
-
*/
|
|
190
|
-
type SimpleNavLink = {
|
|
191
|
-
id: string;
|
|
192
|
-
label: string;
|
|
193
|
-
href: string;
|
|
194
|
-
isExternal: boolean;
|
|
195
|
-
};
|
|
177
|
+
declare function isNavDropdown(item: NavItem): item is NavDropdown;
|
|
196
178
|
/**
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
*
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
href: string;
|
|
212
|
-
isExternal: boolean;
|
|
213
|
-
};
|
|
214
|
-
/**
|
|
215
|
-
* Simple nested dropdown with pre-resolved children.
|
|
216
|
-
*/
|
|
217
|
-
type SimpleNestedNavDropdown = {
|
|
218
|
-
kind: 'dropdown';
|
|
219
|
-
id: string;
|
|
220
|
-
label: string;
|
|
221
|
-
children: SimpleNestedNavLink[];
|
|
222
|
-
};
|
|
223
|
-
/**
|
|
224
|
-
* Unified simple nested navigation item.
|
|
225
|
-
*/
|
|
226
|
-
type SimpleNestedNavItem = SimpleNestedNavLink | SimpleNestedNavDropdown;
|
|
227
|
-
/**
|
|
228
|
-
* Simple menu view model with nested navigation support.
|
|
179
|
+
* Navigation menu with items and optional CTA.
|
|
180
|
+
* Built from CMS navigation data with pre-resolved hrefs.
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* ```ts
|
|
184
|
+
* const menu = buildMenu(siteData.navigation, siteData.routes);
|
|
185
|
+
* menu.items.forEach(item => {
|
|
186
|
+
* if (item.kind === 'link') {
|
|
187
|
+
* console.log(item.href);
|
|
188
|
+
* } else {
|
|
189
|
+
* console.log(item.children);
|
|
190
|
+
* }
|
|
191
|
+
* });
|
|
192
|
+
* ```
|
|
229
193
|
*/
|
|
230
|
-
type
|
|
231
|
-
items:
|
|
232
|
-
ctaItem:
|
|
194
|
+
type Menu = {
|
|
195
|
+
items: NavItem[];
|
|
196
|
+
ctaItem: NavLink | null;
|
|
233
197
|
};
|
|
234
198
|
/**
|
|
235
|
-
*
|
|
199
|
+
* Logo data for site rendering.
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* ```ts
|
|
203
|
+
* const logo = buildLogo(siteData.layout.logo, siteData.site.title);
|
|
204
|
+
* if (logo) {
|
|
205
|
+
* <img src={logo.src} alt={logo.alt} />
|
|
206
|
+
* }
|
|
207
|
+
* ```
|
|
236
208
|
*/
|
|
237
|
-
type
|
|
209
|
+
type Logo = {
|
|
238
210
|
type: 'image';
|
|
239
211
|
src: string;
|
|
240
212
|
alt: string;
|
|
241
213
|
width?: number;
|
|
242
214
|
height?: number;
|
|
243
215
|
} | null;
|
|
216
|
+
/** @deprecated Use `NavLink` instead */
|
|
217
|
+
type SimpleNavLink = NavLink;
|
|
218
|
+
/** @deprecated Use `NavDropdown` instead */
|
|
219
|
+
type SimpleNavDropdown = NavDropdown;
|
|
220
|
+
/** @deprecated Use `NavItem` instead */
|
|
221
|
+
type SimpleNavItem = NavItem;
|
|
222
|
+
/** @deprecated Use `Menu` instead */
|
|
223
|
+
type SimpleMenuViewModel = Menu;
|
|
224
|
+
/** @deprecated Use `Logo` instead */
|
|
225
|
+
type SimpleLogo = Logo;
|
|
244
226
|
/**
|
|
245
227
|
* Get the primary navigation menu object.
|
|
246
228
|
* Returns menu marked as isPrimary, or first menu if none marked.
|
|
@@ -248,7 +230,7 @@ type SimpleLogo = {
|
|
|
248
230
|
* @example
|
|
249
231
|
* ```ts
|
|
250
232
|
* const menu = getPrimaryNavigation(siteData.navigation);
|
|
251
|
-
* console.log(menu?.
|
|
233
|
+
* console.log(menu?.name); // "main"
|
|
252
234
|
* ```
|
|
253
235
|
*/
|
|
254
236
|
declare function getPrimaryNavigation(navigation: NavigationMenuWithItems[]): NavigationMenuWithItems | null;
|
|
@@ -263,19 +245,22 @@ declare function getPrimaryNavigation(navigation: NavigationMenuWithItems[]): Na
|
|
|
263
245
|
declare function getNavigationBySlug(navigation: NavigationMenuWithItems[], slug: string): NavigationMenuWithItems | null;
|
|
264
246
|
/**
|
|
265
247
|
* Get nav items from the primary menu (marked isPrimary, or first menu).
|
|
266
|
-
* Returns
|
|
248
|
+
* Returns nested structure supporting both links and dropdowns.
|
|
267
249
|
*
|
|
268
250
|
* @example
|
|
269
251
|
* ```ts
|
|
270
252
|
* const headerNav = getPrimaryNavItems(siteData.navigation);
|
|
271
|
-
*
|
|
253
|
+
* headerNav.forEach(item => {
|
|
254
|
+
* if (item.kind === 'dropdown') {
|
|
255
|
+
* console.log(`${item.label} has ${item.children.length} children`);
|
|
256
|
+
* }
|
|
257
|
+
* });
|
|
272
258
|
* ```
|
|
273
259
|
*/
|
|
274
260
|
declare function getPrimaryNavItems(navigation: NavigationMenuWithItems[]): NavItem[];
|
|
275
261
|
/**
|
|
276
262
|
* Get nav items from a specific menu by slug.
|
|
277
|
-
*
|
|
278
|
-
* Returns empty array if menu not found.
|
|
263
|
+
* Returns nested structure supporting both links and dropdowns.
|
|
279
264
|
*
|
|
280
265
|
* @example
|
|
281
266
|
* ```ts
|
|
@@ -284,47 +269,19 @@ declare function getPrimaryNavItems(navigation: NavigationMenuWithItems[]): NavI
|
|
|
284
269
|
*/
|
|
285
270
|
declare function getNavItemsBySlug(navigation: NavigationMenuWithItems[], slug: string): NavItem[];
|
|
286
271
|
/**
|
|
287
|
-
* Transform a menu into
|
|
288
|
-
|
|
289
|
-
declare function transformToNavItems(menu: NavigationMenuWithItems | null): NavItem[];
|
|
290
|
-
/**
|
|
291
|
-
* Transform a menu into nested NestedNavItem array.
|
|
292
|
-
* Builds tree structure from flat items, supporting dropdowns with children.
|
|
272
|
+
* Transform a menu into NavItem array.
|
|
273
|
+
* Builds nested structure from flat items, supporting dropdowns with children.
|
|
293
274
|
*
|
|
294
275
|
* @example
|
|
295
276
|
* ```ts
|
|
296
|
-
* const nav =
|
|
277
|
+
* const nav = transformToNavItems(menu);
|
|
297
278
|
* // [
|
|
298
279
|
* // { kind: 'link', href: '/', label: 'Home', ... },
|
|
299
280
|
* // { kind: 'dropdown', label: 'Services', children: [...] },
|
|
300
281
|
* // ]
|
|
301
282
|
* ```
|
|
302
283
|
*/
|
|
303
|
-
declare function
|
|
304
|
-
/**
|
|
305
|
-
* Get nested nav items from the primary menu.
|
|
306
|
-
* Supports dropdowns with children for complex navigation structures.
|
|
307
|
-
*
|
|
308
|
-
* @example
|
|
309
|
-
* ```ts
|
|
310
|
-
* const nav = getNestedPrimaryNavItems(siteData.navigation);
|
|
311
|
-
* nav.forEach(item => {
|
|
312
|
-
* if (item.kind === 'dropdown') {
|
|
313
|
-
* console.log(`${item.label} has ${item.children.length} children`);
|
|
314
|
-
* }
|
|
315
|
-
* });
|
|
316
|
-
* ```
|
|
317
|
-
*/
|
|
318
|
-
declare function getNestedPrimaryNavItems(navigation: NavigationMenuWithItems[]): NestedNavItem[];
|
|
319
|
-
/**
|
|
320
|
-
* Get nested nav items from a specific menu by slug.
|
|
321
|
-
*
|
|
322
|
-
* @example
|
|
323
|
-
* ```ts
|
|
324
|
-
* const footerNav = getNestedNavItemsBySlug(siteData.navigation, 'footer');
|
|
325
|
-
* ```
|
|
326
|
-
*/
|
|
327
|
-
declare function getNestedNavItemsBySlug(navigation: NavigationMenuWithItems[], slug: string): NestedNavItem[];
|
|
284
|
+
declare function transformToNavItems(menu: NavigationMenuWithItems | null): NavItem[];
|
|
328
285
|
/**
|
|
329
286
|
* Build a MenuViewModel from navigation data for block rendering.
|
|
330
287
|
* Extracts CTA item separately and preserves full link data.
|
|
@@ -356,26 +313,15 @@ declare function buildMenuViewModel(navigation: NavigationMenuWithItems[]): Menu
|
|
|
356
313
|
*/
|
|
357
314
|
declare function buildLogoViewModel(logo: LogoSource, fallbackTitle: string | null | undefined): LogoViewModel;
|
|
358
315
|
/**
|
|
359
|
-
* Build a
|
|
360
|
-
*
|
|
316
|
+
* Build a Menu from navigation data with pre-resolved hrefs.
|
|
317
|
+
* Supports dropdown containers with nested children.
|
|
361
318
|
*
|
|
362
319
|
* @param navigation - Navigation menus from site data
|
|
363
320
|
* @param routes - Route map for resolving internal links
|
|
364
321
|
*
|
|
365
322
|
* @example
|
|
366
323
|
* ```ts
|
|
367
|
-
* const menu =
|
|
368
|
-
* // { items: [{ id, label, href: '/', isExternal: false }], cta: null }
|
|
369
|
-
* ```
|
|
370
|
-
*/
|
|
371
|
-
declare function buildSimpleMenu(navigation: NavigationMenuWithItems[], routes: RouteMap): SimpleMenuViewModel;
|
|
372
|
-
/**
|
|
373
|
-
* Build a SimpleNestedMenuViewModel with pre-resolved hrefs.
|
|
374
|
-
* Supports dropdown containers with nested children.
|
|
375
|
-
*
|
|
376
|
-
* @example
|
|
377
|
-
* ```ts
|
|
378
|
-
* const menu = buildSimpleNestedMenu(siteData.navigation, siteData.routes);
|
|
324
|
+
* const menu = buildMenu(siteData.navigation, siteData.routes);
|
|
379
325
|
* menu.items.forEach(item => {
|
|
380
326
|
* if (item.kind === 'dropdown') {
|
|
381
327
|
* console.log(item.children);
|
|
@@ -383,34 +329,23 @@ declare function buildSimpleMenu(navigation: NavigationMenuWithItems[], routes:
|
|
|
383
329
|
* });
|
|
384
330
|
* ```
|
|
385
331
|
*/
|
|
386
|
-
declare function
|
|
332
|
+
declare function buildMenu(navigation: NavigationMenuWithItems[], routes: RouteMap): Menu;
|
|
333
|
+
/** @deprecated Use `buildMenu` instead */
|
|
334
|
+
declare const buildSimpleMenu: typeof buildMenu;
|
|
387
335
|
/**
|
|
388
|
-
* Build a
|
|
336
|
+
* Build a Logo from site layout data.
|
|
389
337
|
*
|
|
390
338
|
* @param logo - Logo data from site layout
|
|
391
339
|
* @param fallbackAlt - Fallback alt text (usually site title)
|
|
392
340
|
*
|
|
393
341
|
* @example
|
|
394
342
|
* ```ts
|
|
395
|
-
* const logo =
|
|
343
|
+
* const logo = buildLogo(siteData.layout.logo, siteData.site.title);
|
|
396
344
|
* // { src: 'https://...', alt: 'Site Name', width: 200, height: 50 }
|
|
397
345
|
* ```
|
|
398
346
|
*/
|
|
399
|
-
declare function
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
width?: number | null;
|
|
403
|
-
height?: number | null;
|
|
404
|
-
} | null, fallbackAlt: string | null | undefined): SimpleLogo;
|
|
405
|
-
/**
|
|
406
|
-
* @deprecated Use `transformToNavItems` instead.
|
|
407
|
-
* This alias is maintained for backwards compatibility only.
|
|
408
|
-
*/
|
|
409
|
-
declare const transformNavItems: typeof transformToNavItems;
|
|
410
|
-
/**
|
|
411
|
-
* @deprecated Use `getPrimaryNavigation` instead.
|
|
412
|
-
* This alias is maintained for backwards compatibility only.
|
|
413
|
-
*/
|
|
414
|
-
declare const selectPrimaryMenu: typeof getPrimaryNavigation;
|
|
347
|
+
declare function buildLogo(logo: Partial<LogoSource> | null, fallbackAlt: string | null | undefined): Logo;
|
|
348
|
+
/** @deprecated Use `buildLogo` instead */
|
|
349
|
+
declare const buildSimpleLogo: typeof buildLogo;
|
|
415
350
|
|
|
416
|
-
export { type CustomLinkValue, type ExternalLinkValue, type InternalLinkValue, type LinkValue, type LogoSource, type LogoViewModel, type MenuCtaViewModel, type MenuLinkViewModel, type MenuViewModel, type NavDropdown, type NavItem, type NavLink, NavigationMenuWithItems, type
|
|
351
|
+
export { type CustomLinkValue, type ExternalLinkValue, type InternalLinkValue, type LinkValue, type Logo, type LogoSource, type LogoViewModel, type Menu, type MenuCtaViewModel, type MenuLinkViewModel, type MenuViewModel, type NavDropdown, type NavItem, type NavLink, NavigationMenuWithItems, type SimpleLogo, type SimpleMenuViewModel, type SimpleNavDropdown, type SimpleNavItem, type SimpleNavLink, buildLogo, buildLogoViewModel, buildMenu, buildMenuViewModel, buildSimpleLogo, buildSimpleMenu, getNavItemsBySlug, getNavigationBySlug, getPrimaryNavItems, getPrimaryNavigation, isNavDropdown, isNavLink, transformToNavItems };
|