@riverbankcms/sdk 0.4.3 → 0.5.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 +84 -0
- package/dist/cli/index.js +3104 -120
- package/dist/cli/index.js.map +1 -1
- package/dist/client/analytics.js +1 -1
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/analytics.mjs +1 -1
- package/dist/client/analytics.mjs.map +1 -1
- package/dist/client/bookings.js +6 -6
- package/dist/client/bookings.js.map +1 -1
- package/dist/client/bookings.mjs +6 -6
- package/dist/client/bookings.mjs.map +1 -1
- package/dist/client/client.d.mts +2 -2
- package/dist/client/client.d.ts +2 -2
- package/dist/client/client.js +1357 -519
- package/dist/client/client.js.map +1 -1
- package/dist/client/client.mjs +1357 -519
- package/dist/client/client.mjs.map +1 -1
- package/dist/client/hooks.d.mts +2 -2
- package/dist/client/hooks.d.ts +2 -2
- package/dist/client/hooks.js +26 -11
- package/dist/client/hooks.js.map +1 -1
- package/dist/client/hooks.mjs +26 -11
- package/dist/client/hooks.mjs.map +1 -1
- package/dist/client/rendering/client.js +20 -14
- package/dist/client/rendering/client.js.map +1 -1
- package/dist/client/rendering/client.mjs +20 -14
- package/dist/client/rendering/client.mjs.map +1 -1
- package/dist/client/usePage-BTPnCuWC.d.mts +6511 -0
- package/dist/client/usePage-BafOS9UT.d.mts +6512 -0
- package/dist/client/usePage-Bnx-kA6x.d.mts +6670 -0
- package/dist/client/usePage-DoPI6b8V.d.ts +6511 -0
- package/dist/client/usePage-QNWArrVO.d.ts +6670 -0
- package/dist/client/usePage-fBgPB6Oq.d.ts +6512 -0
- package/dist/server/{Layout-CXI_VkhN.d.ts → Layout-B-q2Py4v.d.ts} +4 -4
- package/dist/server/{Layout-p6f3TLw9.d.mts → Layout-Cc5HUXAH.d.mts} +4 -4
- package/dist/server/{chunk-6JBKKV3G.js → chunk-2KCF2DNK.js} +30 -10
- package/dist/server/chunk-2KCF2DNK.js.map +1 -0
- package/dist/server/{chunk-N3PX76AP.mjs → chunk-4HIRA33Z.mjs} +247 -135
- package/dist/server/chunk-4HIRA33Z.mjs.map +1 -0
- package/dist/server/chunk-5STV4MWD.js +189 -0
- package/dist/server/chunk-5STV4MWD.js.map +1 -0
- package/dist/server/{chunk-R5B6IOFQ.js → chunk-6OSNCH4F.js} +247 -135
- package/dist/server/chunk-6OSNCH4F.js.map +1 -0
- package/dist/server/{chunk-VHDDXCK6.js → chunk-7UPVCT3K.js} +1206 -496
- package/dist/server/chunk-7UPVCT3K.js.map +1 -0
- package/dist/server/{chunk-7DS4Q3GA.mjs → chunk-AEFWG657.mjs} +3 -3
- package/dist/server/chunk-AEFWG657.mjs.map +1 -0
- package/dist/server/{chunk-USQF2XTU.mjs → chunk-BYBJA6SP.mjs} +26 -11
- package/dist/server/chunk-BYBJA6SP.mjs.map +1 -0
- package/dist/server/{chunk-ES6QDZUX.mjs → chunk-C6FIJC7T.mjs} +2 -2
- package/dist/server/{chunk-TO7FD6TQ.js → chunk-I2D7KOEA.js} +4 -4
- package/dist/server/{chunk-TO7FD6TQ.js.map → chunk-I2D7KOEA.js.map} +1 -1
- package/dist/server/chunk-KFLZGNPO.mjs +189 -0
- package/dist/server/chunk-KFLZGNPO.mjs.map +1 -0
- package/dist/server/chunk-L5EA4FXU.mjs +134 -0
- package/dist/server/chunk-L5EA4FXU.mjs.map +1 -0
- package/dist/server/{chunk-U2NI3TS3.mjs → chunk-LNOUXALA.mjs} +1135 -425
- package/dist/server/chunk-LNOUXALA.mjs.map +1 -0
- package/dist/server/{chunk-24F6FTCI.mjs → chunk-OSF34JTQ.mjs} +4 -4
- package/dist/server/{chunk-G35R7N7B.js → chunk-P3NNN73G.js} +3 -3
- package/dist/server/{chunk-G35R7N7B.js.map → chunk-P3NNN73G.js.map} +1 -1
- package/dist/server/{chunk-I6K5REFT.mjs → chunk-P4K63SBZ.mjs} +24 -4
- package/dist/server/chunk-P4K63SBZ.mjs.map +1 -0
- package/dist/server/{chunk-HOY77YBF.js → chunk-RVDS7VSP.js} +5 -5
- package/dist/server/chunk-RVDS7VSP.js.map +1 -0
- package/dist/server/{chunk-2SSEBAHC.js → chunk-TT5JWA4X.js} +9 -9
- package/dist/server/{chunk-2SSEBAHC.js.map → chunk-TT5JWA4X.js.map} +1 -1
- package/dist/server/chunk-VSFQRHYZ.js +134 -0
- package/dist/server/chunk-VSFQRHYZ.js.map +1 -0
- package/dist/server/{chunk-EGTDJ4PL.js → chunk-YYO3RIFO.js} +26 -11
- package/dist/server/chunk-YYO3RIFO.js.map +1 -0
- package/dist/server/{chunk-OP2GHK27.mjs → chunk-Z5ZA6Q4D.mjs} +2 -2
- package/dist/server/{components-Dhiemsjd.d.ts → components-CU46ZkAv.d.mts} +20 -75
- package/dist/server/{components-C75e4poV.d.mts → components-DvozDwRN.d.ts} +20 -75
- package/dist/server/components.d.mts +11 -8
- package/dist/server/components.d.ts +11 -8
- package/dist/server/components.js +5 -4
- package/dist/server/components.js.map +1 -1
- package/dist/server/components.mjs +4 -3
- package/dist/server/config-validation.d.mts +3 -3
- package/dist/server/config-validation.d.ts +3 -3
- package/dist/server/config-validation.js +9 -5
- package/dist/server/config-validation.js.map +1 -1
- package/dist/server/config-validation.mjs +8 -4
- package/dist/server/config.d.mts +243 -5
- package/dist/server/config.d.ts +243 -5
- package/dist/server/config.js +72 -5
- package/dist/server/config.js.map +1 -1
- package/dist/server/config.mjs +72 -5
- package/dist/server/config.mjs.map +1 -1
- package/dist/server/core-DsNWrl3o.d.mts +44 -0
- package/dist/server/core-DsNWrl3o.d.ts +44 -0
- package/dist/server/data.d.mts +4 -3
- package/dist/server/data.d.ts +4 -3
- package/dist/server/data.js +3 -3
- package/dist/server/data.mjs +2 -2
- package/dist/server/{index-C6o9LPvq.d.mts → index-CJfMXZQr.d.ts} +2 -1
- package/dist/server/{index-CAwBj3-A.d.ts → index-Q7RLMAQ6.d.mts} +2 -1
- package/dist/server/index.d.mts +63 -6
- package/dist/server/index.d.ts +63 -6
- package/dist/server/index.js +91 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +90 -1
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/link-DjxLyC82.d.mts +23 -0
- package/dist/server/link-DjxLyC82.d.ts +23 -0
- package/dist/server/{loadContent-CdXfuCuE.d.mts → loadContent-DgpSKWqY.d.mts} +4 -4
- package/dist/server/{loadContent-CsvQRoxb.d.ts → loadContent-GPvUI1bN.d.ts} +4 -4
- package/dist/server/{loadPage-p3AWwwrd.d.mts → loadPage-DGnIK7s4.d.mts} +5 -46
- package/dist/server/loadPage-DNQTTRHL.mjs +11 -0
- package/dist/server/{loadPage-BA0HiT-6.d.ts → loadPage-DW9WB-u9.d.ts} +5 -46
- package/dist/server/loadPage-IDGVDFBB.js +11 -0
- package/dist/server/{loadPage-DLC7DJZP.js.map → loadPage-IDGVDFBB.js.map} +1 -1
- package/dist/server/metadata.d.mts +6 -4
- package/dist/server/metadata.d.ts +6 -4
- package/dist/server/navigation.d.mts +199 -29
- package/dist/server/navigation.d.ts +199 -29
- package/dist/server/navigation.js +27 -43
- package/dist/server/navigation.js.map +1 -1
- package/dist/server/navigation.mjs +20 -36
- package/dist/server/navigation.mjs.map +1 -1
- package/dist/server/rendering/server.d.mts +8 -6
- package/dist/server/rendering/server.d.ts +8 -6
- package/dist/server/rendering/server.js +7 -6
- package/dist/server/rendering/server.js.map +1 -1
- package/dist/server/rendering/server.mjs +6 -5
- package/dist/server/rendering.d.mts +14 -10
- package/dist/server/rendering.d.ts +14 -10
- package/dist/server/rendering.js +9 -8
- package/dist/server/rendering.js.map +1 -1
- package/dist/server/rendering.mjs +8 -7
- package/dist/server/richTextSchema-DURiozvD.d.mts +62 -0
- package/dist/server/richTextSchema-DURiozvD.d.ts +62 -0
- package/dist/server/routing.d.mts +178 -11
- package/dist/server/routing.d.ts +178 -11
- package/dist/server/routing.js +95 -2
- package/dist/server/routing.js.map +1 -1
- package/dist/server/routing.mjs +94 -1
- package/dist/server/routing.mjs.map +1 -1
- package/dist/server/{schema-Bpy9N5ZI.d.mts → schema-Z6-afHJG.d.mts} +1 -1
- package/dist/server/{schema-Bpy9N5ZI.d.ts → schema-Z6-afHJG.d.ts} +1 -1
- package/dist/server/server.d.mts +9 -7
- package/dist/server/server.d.ts +9 -7
- package/dist/server/server.js +6 -6
- package/dist/server/server.mjs +5 -5
- package/dist/server/theme-bridge.js +8 -8
- package/dist/server/theme-bridge.mjs +2 -2
- package/dist/server/{types-Dj8B3QRb.d.ts → types-0f4PIlgx.d.mts} +55 -2
- package/dist/server/{types-txWsSxN7.d.mts → types-BjgZt8xJ.d.mts} +63 -2
- package/dist/server/{types-BWQ-TohG.d.ts → types-C28kMfa1.d.ts} +254 -82
- package/dist/server/{types-CL916r6x.d.ts → types-DLBhEPSt.d.ts} +63 -2
- package/dist/server/{types-BLf-hE50.d.mts → types-DuzJZKJI.d.mts} +254 -82
- package/dist/server/{types-CdhKJrB0.d.mts → types-kOQyCFXO.d.ts} +55 -2
- package/dist/server/{validation-DzvDwwRo.d.mts → validation-BGuRo8P1.d.mts} +18 -5
- package/dist/server/{validation-CoU8uAiu.d.ts → validation-DU2YE7u5.d.ts} +18 -5
- package/package.json +3 -1
- package/dist/server/chunk-6JBKKV3G.js.map +0 -1
- package/dist/server/chunk-7DS4Q3GA.mjs.map +0 -1
- package/dist/server/chunk-EGTDJ4PL.js.map +0 -1
- package/dist/server/chunk-HOY77YBF.js.map +0 -1
- package/dist/server/chunk-I6K5REFT.mjs.map +0 -1
- package/dist/server/chunk-LCYGQDAB.mjs +0 -835
- package/dist/server/chunk-LCYGQDAB.mjs.map +0 -1
- package/dist/server/chunk-N3PX76AP.mjs.map +0 -1
- package/dist/server/chunk-R5B6IOFQ.js.map +0 -1
- package/dist/server/chunk-TNYU5EIO.js +0 -835
- package/dist/server/chunk-TNYU5EIO.js.map +0 -1
- package/dist/server/chunk-U2NI3TS3.mjs.map +0 -1
- package/dist/server/chunk-USQF2XTU.mjs.map +0 -1
- package/dist/server/chunk-VHDDXCK6.js.map +0 -1
- package/dist/server/loadPage-DLC7DJZP.js +0 -11
- package/dist/server/loadPage-GEGN4UAL.mjs +0 -11
- /package/dist/server/{chunk-ES6QDZUX.mjs.map → chunk-C6FIJC7T.mjs.map} +0 -0
- /package/dist/server/{chunk-24F6FTCI.mjs.map → chunk-OSF34JTQ.mjs.map} +0 -0
- /package/dist/server/{chunk-OP2GHK27.mjs.map → chunk-Z5ZA6Q4D.mjs.map} +0 -0
- /package/dist/server/{loadPage-GEGN4UAL.mjs.map → loadPage-DNQTTRHL.mjs.map} +0 -0
|
@@ -1,33 +1,115 @@
|
|
|
1
|
-
import { N as NavigationMenuWithItems } from './types-
|
|
2
|
-
export { L as LinkPayload, a as NavigationItemRecord } from './types-
|
|
1
|
+
import { N as NavigationMenuWithItems } from './types-DuzJZKJI.mjs';
|
|
2
|
+
export { L as LinkPayload, a as NavigationItemRecord } from './types-DuzJZKJI.mjs';
|
|
3
|
+
import { R as RouteMap } from './core-DsNWrl3o.mjs';
|
|
4
|
+
import './schema-Z6-afHJG.mjs';
|
|
3
5
|
import '@riverbankcms/ai';
|
|
4
|
-
import './schema-Bpy9N5ZI.mjs';
|
|
5
6
|
import 'zod';
|
|
7
|
+
import './link-DjxLyC82.mjs';
|
|
6
8
|
import '@riverbankcms/media-storage-supabase';
|
|
7
9
|
import '@riverbankcms/db';
|
|
8
10
|
|
|
9
11
|
/**
|
|
10
12
|
* Navigation helper utilities for SDK sites.
|
|
11
13
|
*
|
|
12
|
-
* Provides
|
|
13
|
-
*
|
|
14
|
+
* Provides helpers to transform CMS navigation data into render-ready structures.
|
|
15
|
+
* Supports both simple NavItem arrays and full MenuViewModels for block rendering.
|
|
14
16
|
*
|
|
15
|
-
* @example
|
|
17
|
+
* @example Simple usage
|
|
16
18
|
* ```ts
|
|
17
|
-
* import { getPrimaryNavItems
|
|
19
|
+
* import { getPrimaryNavItems } from '@riverbankcms/sdk/navigation';
|
|
18
20
|
*
|
|
19
|
-
* // Get header navigation (primary menu)
|
|
20
21
|
* const headerNav = getPrimaryNavItems(siteData.navigation);
|
|
22
|
+
* // [{ href: '/', label: 'Home', isExternal: false }, ...]
|
|
23
|
+
* ```
|
|
21
24
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
25
|
+
* @example Block rendering usage
|
|
26
|
+
* ```ts
|
|
27
|
+
* import { buildMenuViewModel, buildLogoViewModel } from '@riverbankcms/sdk/navigation';
|
|
28
|
+
*
|
|
29
|
+
* const menu = buildMenuViewModel(siteData.navigation);
|
|
30
|
+
* const logo = buildLogoViewModel(siteData.layout.logo, siteData.site.title);
|
|
24
31
|
*
|
|
25
|
-
*
|
|
32
|
+
* renderBlock(siteHeaderManifest, layout.header, {
|
|
33
|
+
* viewModelOverrides: { menu, content: { logo } },
|
|
34
|
+
* });
|
|
26
35
|
* ```
|
|
27
36
|
*
|
|
28
37
|
* @packageDocumentation
|
|
29
38
|
*/
|
|
30
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Link value types matching @riverbankcms/blocks
|
|
42
|
+
*/
|
|
43
|
+
type InternalLinkValue = {
|
|
44
|
+
kind: 'internal';
|
|
45
|
+
routeId: string;
|
|
46
|
+
entityId: string;
|
|
47
|
+
entityType: 'page' | 'content';
|
|
48
|
+
href: string;
|
|
49
|
+
title: string;
|
|
50
|
+
typeLabel: string;
|
|
51
|
+
contentTypeKey?: string | null;
|
|
52
|
+
contentTypeName?: string | null;
|
|
53
|
+
updatedAt?: string | null;
|
|
54
|
+
};
|
|
55
|
+
type ExternalLinkValue = {
|
|
56
|
+
kind: 'external';
|
|
57
|
+
href: string;
|
|
58
|
+
};
|
|
59
|
+
type CustomLinkValue = {
|
|
60
|
+
kind: 'url';
|
|
61
|
+
href: string;
|
|
62
|
+
};
|
|
63
|
+
type LinkValue = InternalLinkValue | ExternalLinkValue | CustomLinkValue;
|
|
64
|
+
/**
|
|
65
|
+
* Menu link view model for block rendering
|
|
66
|
+
*/
|
|
67
|
+
type MenuLinkViewModel = {
|
|
68
|
+
id: string;
|
|
69
|
+
label: string;
|
|
70
|
+
link: LinkValue | null;
|
|
71
|
+
target: string | null;
|
|
72
|
+
rel: string | null;
|
|
73
|
+
active?: boolean;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* CTA link view model (extends MenuLinkViewModel with variant)
|
|
77
|
+
*/
|
|
78
|
+
type MenuCtaViewModel = MenuLinkViewModel & {
|
|
79
|
+
variant: string;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Complete menu view model for header/footer blocks
|
|
83
|
+
*/
|
|
84
|
+
type MenuViewModel = {
|
|
85
|
+
items: MenuLinkViewModel[];
|
|
86
|
+
ctaItem: MenuCtaViewModel | null;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Logo source data from site layout
|
|
90
|
+
*/
|
|
91
|
+
type LogoSource = {
|
|
92
|
+
url: string | null;
|
|
93
|
+
alt: string | null;
|
|
94
|
+
assetId?: string | null;
|
|
95
|
+
width?: number | null;
|
|
96
|
+
height?: number | null;
|
|
97
|
+
storagePath?: string | null;
|
|
98
|
+
storageBucket?: string | null;
|
|
99
|
+
} | null;
|
|
100
|
+
/**
|
|
101
|
+
* Logo view model for block rendering
|
|
102
|
+
*/
|
|
103
|
+
type LogoViewModel = {
|
|
104
|
+
type: 'image';
|
|
105
|
+
src: string;
|
|
106
|
+
alt: string;
|
|
107
|
+
assetId?: string;
|
|
108
|
+
width?: number | null;
|
|
109
|
+
height?: number | null;
|
|
110
|
+
storagePath?: string;
|
|
111
|
+
storageBucket?: string;
|
|
112
|
+
} | null;
|
|
31
113
|
/**
|
|
32
114
|
* A simplified navigation item structure for component rendering.
|
|
33
115
|
*/
|
|
@@ -39,6 +121,53 @@ type NavItem = {
|
|
|
39
121
|
/** Whether link should open in new tab (external links) */
|
|
40
122
|
isExternal: boolean;
|
|
41
123
|
};
|
|
124
|
+
/**
|
|
125
|
+
* Simple nav link with pre-resolved href for block rendering.
|
|
126
|
+
*/
|
|
127
|
+
type SimpleNavLink = {
|
|
128
|
+
id: string;
|
|
129
|
+
label: string;
|
|
130
|
+
href: string;
|
|
131
|
+
isExternal: boolean;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Simple menu view model with pre-resolved hrefs.
|
|
135
|
+
* Use this instead of MenuViewModel for cleaner data flow.
|
|
136
|
+
*/
|
|
137
|
+
type SimpleMenuViewModel = {
|
|
138
|
+
items: SimpleNavLink[];
|
|
139
|
+
ctaItem: SimpleNavLink | null;
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* Simple logo data for block rendering.
|
|
143
|
+
*/
|
|
144
|
+
type SimpleLogo = {
|
|
145
|
+
type: 'image';
|
|
146
|
+
src: string;
|
|
147
|
+
alt: string;
|
|
148
|
+
width?: number;
|
|
149
|
+
height?: number;
|
|
150
|
+
} | null;
|
|
151
|
+
/**
|
|
152
|
+
* Get the primary navigation menu object.
|
|
153
|
+
* Returns menu marked as isPrimary, or first menu if none marked.
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```ts
|
|
157
|
+
* const menu = getPrimaryNavigation(siteData.navigation);
|
|
158
|
+
* console.log(menu?.title); // "Main Navigation"
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
declare function getPrimaryNavigation(navigation: NavigationMenuWithItems[]): NavigationMenuWithItems | null;
|
|
162
|
+
/**
|
|
163
|
+
* Get a navigation menu by name/slug.
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```ts
|
|
167
|
+
* const footerMenu = getNavigationBySlug(siteData.navigation, 'footer');
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
declare function getNavigationBySlug(navigation: NavigationMenuWithItems[], slug: string): NavigationMenuWithItems | null;
|
|
42
171
|
/**
|
|
43
172
|
* Get nav items from the primary menu (marked isPrimary, or first menu).
|
|
44
173
|
* Returns empty array if no navigation configured.
|
|
@@ -62,39 +191,80 @@ declare function getPrimaryNavItems(navigation: NavigationMenuWithItems[]): NavI
|
|
|
62
191
|
*/
|
|
63
192
|
declare function getNavItemsBySlug(navigation: NavigationMenuWithItems[], slug: string): NavItem[];
|
|
64
193
|
/**
|
|
65
|
-
*
|
|
66
|
-
|
|
194
|
+
* Transform a menu into simple NavItem array.
|
|
195
|
+
*/
|
|
196
|
+
declare function transformToNavItems(menu: NavigationMenuWithItems | null): NavItem[];
|
|
197
|
+
/**
|
|
198
|
+
* Build a MenuViewModel from navigation data for block rendering.
|
|
199
|
+
* Extracts CTA item separately and preserves full link data.
|
|
67
200
|
*
|
|
68
201
|
* @example
|
|
69
202
|
* ```ts
|
|
70
|
-
* const
|
|
71
|
-
*
|
|
72
|
-
*
|
|
203
|
+
* const menuViewModel = buildMenuViewModel(siteData.navigation);
|
|
204
|
+
*
|
|
205
|
+
* renderBlock(siteHeaderManifest, layout.header, {
|
|
206
|
+
* viewModelOverrides: { menu: menuViewModel },
|
|
207
|
+
* });
|
|
73
208
|
* ```
|
|
74
209
|
*/
|
|
75
|
-
declare function
|
|
210
|
+
declare function buildMenuViewModel(navigation: NavigationMenuWithItems[]): MenuViewModel;
|
|
76
211
|
/**
|
|
77
|
-
*
|
|
212
|
+
* Build a LogoViewModel from site layout data.
|
|
213
|
+
*
|
|
214
|
+
* @param logo - Logo source from siteData.layout.logo
|
|
215
|
+
* @param fallbackTitle - Site title to use as alt text fallback
|
|
78
216
|
*
|
|
79
217
|
* @example
|
|
80
218
|
* ```ts
|
|
81
|
-
* const
|
|
219
|
+
* const logoViewModel = buildLogoViewModel(siteData.layout.logo, siteData.site.title);
|
|
220
|
+
*
|
|
221
|
+
* renderBlock(siteHeaderManifest, layout.header, {
|
|
222
|
+
* viewModelOverrides: { content: { logo: logoViewModel } },
|
|
223
|
+
* });
|
|
82
224
|
* ```
|
|
83
225
|
*/
|
|
84
|
-
declare function
|
|
226
|
+
declare function buildLogoViewModel(logo: LogoSource, fallbackTitle: string | null | undefined): LogoViewModel;
|
|
227
|
+
/**
|
|
228
|
+
* Build a SimpleMenuViewModel from navigation data with pre-resolved hrefs.
|
|
229
|
+
* Use this instead of buildMenuViewModel for cleaner data flow.
|
|
230
|
+
*
|
|
231
|
+
* @param navigation - Navigation menus from site data
|
|
232
|
+
* @param routes - Route map for resolving internal links
|
|
233
|
+
*
|
|
234
|
+
* @example
|
|
235
|
+
* ```ts
|
|
236
|
+
* const menu = buildSimpleMenu(siteData.navigation, siteData.routes);
|
|
237
|
+
* // { items: [{ id, label, href: '/', isExternal: false }], cta: null }
|
|
238
|
+
* ```
|
|
239
|
+
*/
|
|
240
|
+
declare function buildSimpleMenu(navigation: NavigationMenuWithItems[], routes: RouteMap): SimpleMenuViewModel;
|
|
85
241
|
/**
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
* -
|
|
89
|
-
* -
|
|
90
|
-
* - Filters out items without valid hrefs
|
|
242
|
+
* Build a SimpleLogo from site layout data.
|
|
243
|
+
*
|
|
244
|
+
* @param logo - Logo data from site layout
|
|
245
|
+
* @param fallbackAlt - Fallback alt text (usually site title)
|
|
91
246
|
*
|
|
92
247
|
* @example
|
|
93
248
|
* ```ts
|
|
94
|
-
* const
|
|
95
|
-
*
|
|
249
|
+
* const logo = buildSimpleLogo(siteData.layout.logo, siteData.site.title);
|
|
250
|
+
* // { src: 'https://...', alt: 'Site Name', width: 200, height: 50 }
|
|
96
251
|
* ```
|
|
97
252
|
*/
|
|
98
|
-
declare function
|
|
253
|
+
declare function buildSimpleLogo(logo: {
|
|
254
|
+
url?: string | null;
|
|
255
|
+
alt?: string | null;
|
|
256
|
+
width?: number | null;
|
|
257
|
+
height?: number | null;
|
|
258
|
+
} | null, fallbackAlt: string | null | undefined): SimpleLogo;
|
|
259
|
+
/**
|
|
260
|
+
* @deprecated Use `transformToNavItems` instead.
|
|
261
|
+
* This alias is maintained for backwards compatibility only.
|
|
262
|
+
*/
|
|
263
|
+
declare const transformNavItems: typeof transformToNavItems;
|
|
264
|
+
/**
|
|
265
|
+
* @deprecated Use `getPrimaryNavigation` instead.
|
|
266
|
+
* This alias is maintained for backwards compatibility only.
|
|
267
|
+
*/
|
|
268
|
+
declare const selectPrimaryMenu: typeof getPrimaryNavigation;
|
|
99
269
|
|
|
100
|
-
export { type NavItem, NavigationMenuWithItems, getNavItemsBySlug, getNavigationBySlug, getPrimaryNavItems, getPrimaryNavigation, transformNavItems };
|
|
270
|
+
export { type CustomLinkValue, type ExternalLinkValue, type InternalLinkValue, type LinkValue, type LogoSource, type LogoViewModel, type MenuCtaViewModel, type MenuLinkViewModel, type MenuViewModel, type NavItem, NavigationMenuWithItems, type SimpleLogo, type SimpleMenuViewModel, type SimpleNavLink, buildLogoViewModel, buildMenuViewModel, buildSimpleLogo, buildSimpleMenu, getNavItemsBySlug, getNavigationBySlug, getPrimaryNavItems, getPrimaryNavigation, selectPrimaryMenu, transformNavItems, transformToNavItems };
|
|
@@ -1,33 +1,115 @@
|
|
|
1
|
-
import { N as NavigationMenuWithItems } from './types-
|
|
2
|
-
export { L as LinkPayload, a as NavigationItemRecord } from './types-
|
|
1
|
+
import { N as NavigationMenuWithItems } from './types-C28kMfa1.js';
|
|
2
|
+
export { L as LinkPayload, a as NavigationItemRecord } from './types-C28kMfa1.js';
|
|
3
|
+
import { R as RouteMap } from './core-DsNWrl3o.js';
|
|
4
|
+
import './schema-Z6-afHJG.js';
|
|
3
5
|
import '@riverbankcms/ai';
|
|
4
|
-
import './schema-Bpy9N5ZI.js';
|
|
5
6
|
import 'zod';
|
|
7
|
+
import './link-DjxLyC82.js';
|
|
6
8
|
import '@riverbankcms/media-storage-supabase';
|
|
7
9
|
import '@riverbankcms/db';
|
|
8
10
|
|
|
9
11
|
/**
|
|
10
12
|
* Navigation helper utilities for SDK sites.
|
|
11
13
|
*
|
|
12
|
-
* Provides
|
|
13
|
-
*
|
|
14
|
+
* Provides helpers to transform CMS navigation data into render-ready structures.
|
|
15
|
+
* Supports both simple NavItem arrays and full MenuViewModels for block rendering.
|
|
14
16
|
*
|
|
15
|
-
* @example
|
|
17
|
+
* @example Simple usage
|
|
16
18
|
* ```ts
|
|
17
|
-
* import { getPrimaryNavItems
|
|
19
|
+
* import { getPrimaryNavItems } from '@riverbankcms/sdk/navigation';
|
|
18
20
|
*
|
|
19
|
-
* // Get header navigation (primary menu)
|
|
20
21
|
* const headerNav = getPrimaryNavItems(siteData.navigation);
|
|
22
|
+
* // [{ href: '/', label: 'Home', isExternal: false }, ...]
|
|
23
|
+
* ```
|
|
21
24
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
25
|
+
* @example Block rendering usage
|
|
26
|
+
* ```ts
|
|
27
|
+
* import { buildMenuViewModel, buildLogoViewModel } from '@riverbankcms/sdk/navigation';
|
|
28
|
+
*
|
|
29
|
+
* const menu = buildMenuViewModel(siteData.navigation);
|
|
30
|
+
* const logo = buildLogoViewModel(siteData.layout.logo, siteData.site.title);
|
|
24
31
|
*
|
|
25
|
-
*
|
|
32
|
+
* renderBlock(siteHeaderManifest, layout.header, {
|
|
33
|
+
* viewModelOverrides: { menu, content: { logo } },
|
|
34
|
+
* });
|
|
26
35
|
* ```
|
|
27
36
|
*
|
|
28
37
|
* @packageDocumentation
|
|
29
38
|
*/
|
|
30
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Link value types matching @riverbankcms/blocks
|
|
42
|
+
*/
|
|
43
|
+
type InternalLinkValue = {
|
|
44
|
+
kind: 'internal';
|
|
45
|
+
routeId: string;
|
|
46
|
+
entityId: string;
|
|
47
|
+
entityType: 'page' | 'content';
|
|
48
|
+
href: string;
|
|
49
|
+
title: string;
|
|
50
|
+
typeLabel: string;
|
|
51
|
+
contentTypeKey?: string | null;
|
|
52
|
+
contentTypeName?: string | null;
|
|
53
|
+
updatedAt?: string | null;
|
|
54
|
+
};
|
|
55
|
+
type ExternalLinkValue = {
|
|
56
|
+
kind: 'external';
|
|
57
|
+
href: string;
|
|
58
|
+
};
|
|
59
|
+
type CustomLinkValue = {
|
|
60
|
+
kind: 'url';
|
|
61
|
+
href: string;
|
|
62
|
+
};
|
|
63
|
+
type LinkValue = InternalLinkValue | ExternalLinkValue | CustomLinkValue;
|
|
64
|
+
/**
|
|
65
|
+
* Menu link view model for block rendering
|
|
66
|
+
*/
|
|
67
|
+
type MenuLinkViewModel = {
|
|
68
|
+
id: string;
|
|
69
|
+
label: string;
|
|
70
|
+
link: LinkValue | null;
|
|
71
|
+
target: string | null;
|
|
72
|
+
rel: string | null;
|
|
73
|
+
active?: boolean;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* CTA link view model (extends MenuLinkViewModel with variant)
|
|
77
|
+
*/
|
|
78
|
+
type MenuCtaViewModel = MenuLinkViewModel & {
|
|
79
|
+
variant: string;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Complete menu view model for header/footer blocks
|
|
83
|
+
*/
|
|
84
|
+
type MenuViewModel = {
|
|
85
|
+
items: MenuLinkViewModel[];
|
|
86
|
+
ctaItem: MenuCtaViewModel | null;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Logo source data from site layout
|
|
90
|
+
*/
|
|
91
|
+
type LogoSource = {
|
|
92
|
+
url: string | null;
|
|
93
|
+
alt: string | null;
|
|
94
|
+
assetId?: string | null;
|
|
95
|
+
width?: number | null;
|
|
96
|
+
height?: number | null;
|
|
97
|
+
storagePath?: string | null;
|
|
98
|
+
storageBucket?: string | null;
|
|
99
|
+
} | null;
|
|
100
|
+
/**
|
|
101
|
+
* Logo view model for block rendering
|
|
102
|
+
*/
|
|
103
|
+
type LogoViewModel = {
|
|
104
|
+
type: 'image';
|
|
105
|
+
src: string;
|
|
106
|
+
alt: string;
|
|
107
|
+
assetId?: string;
|
|
108
|
+
width?: number | null;
|
|
109
|
+
height?: number | null;
|
|
110
|
+
storagePath?: string;
|
|
111
|
+
storageBucket?: string;
|
|
112
|
+
} | null;
|
|
31
113
|
/**
|
|
32
114
|
* A simplified navigation item structure for component rendering.
|
|
33
115
|
*/
|
|
@@ -39,6 +121,53 @@ type NavItem = {
|
|
|
39
121
|
/** Whether link should open in new tab (external links) */
|
|
40
122
|
isExternal: boolean;
|
|
41
123
|
};
|
|
124
|
+
/**
|
|
125
|
+
* Simple nav link with pre-resolved href for block rendering.
|
|
126
|
+
*/
|
|
127
|
+
type SimpleNavLink = {
|
|
128
|
+
id: string;
|
|
129
|
+
label: string;
|
|
130
|
+
href: string;
|
|
131
|
+
isExternal: boolean;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Simple menu view model with pre-resolved hrefs.
|
|
135
|
+
* Use this instead of MenuViewModel for cleaner data flow.
|
|
136
|
+
*/
|
|
137
|
+
type SimpleMenuViewModel = {
|
|
138
|
+
items: SimpleNavLink[];
|
|
139
|
+
ctaItem: SimpleNavLink | null;
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* Simple logo data for block rendering.
|
|
143
|
+
*/
|
|
144
|
+
type SimpleLogo = {
|
|
145
|
+
type: 'image';
|
|
146
|
+
src: string;
|
|
147
|
+
alt: string;
|
|
148
|
+
width?: number;
|
|
149
|
+
height?: number;
|
|
150
|
+
} | null;
|
|
151
|
+
/**
|
|
152
|
+
* Get the primary navigation menu object.
|
|
153
|
+
* Returns menu marked as isPrimary, or first menu if none marked.
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```ts
|
|
157
|
+
* const menu = getPrimaryNavigation(siteData.navigation);
|
|
158
|
+
* console.log(menu?.title); // "Main Navigation"
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
declare function getPrimaryNavigation(navigation: NavigationMenuWithItems[]): NavigationMenuWithItems | null;
|
|
162
|
+
/**
|
|
163
|
+
* Get a navigation menu by name/slug.
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```ts
|
|
167
|
+
* const footerMenu = getNavigationBySlug(siteData.navigation, 'footer');
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
declare function getNavigationBySlug(navigation: NavigationMenuWithItems[], slug: string): NavigationMenuWithItems | null;
|
|
42
171
|
/**
|
|
43
172
|
* Get nav items from the primary menu (marked isPrimary, or first menu).
|
|
44
173
|
* Returns empty array if no navigation configured.
|
|
@@ -62,39 +191,80 @@ declare function getPrimaryNavItems(navigation: NavigationMenuWithItems[]): NavI
|
|
|
62
191
|
*/
|
|
63
192
|
declare function getNavItemsBySlug(navigation: NavigationMenuWithItems[], slug: string): NavItem[];
|
|
64
193
|
/**
|
|
65
|
-
*
|
|
66
|
-
|
|
194
|
+
* Transform a menu into simple NavItem array.
|
|
195
|
+
*/
|
|
196
|
+
declare function transformToNavItems(menu: NavigationMenuWithItems | null): NavItem[];
|
|
197
|
+
/**
|
|
198
|
+
* Build a MenuViewModel from navigation data for block rendering.
|
|
199
|
+
* Extracts CTA item separately and preserves full link data.
|
|
67
200
|
*
|
|
68
201
|
* @example
|
|
69
202
|
* ```ts
|
|
70
|
-
* const
|
|
71
|
-
*
|
|
72
|
-
*
|
|
203
|
+
* const menuViewModel = buildMenuViewModel(siteData.navigation);
|
|
204
|
+
*
|
|
205
|
+
* renderBlock(siteHeaderManifest, layout.header, {
|
|
206
|
+
* viewModelOverrides: { menu: menuViewModel },
|
|
207
|
+
* });
|
|
73
208
|
* ```
|
|
74
209
|
*/
|
|
75
|
-
declare function
|
|
210
|
+
declare function buildMenuViewModel(navigation: NavigationMenuWithItems[]): MenuViewModel;
|
|
76
211
|
/**
|
|
77
|
-
*
|
|
212
|
+
* Build a LogoViewModel from site layout data.
|
|
213
|
+
*
|
|
214
|
+
* @param logo - Logo source from siteData.layout.logo
|
|
215
|
+
* @param fallbackTitle - Site title to use as alt text fallback
|
|
78
216
|
*
|
|
79
217
|
* @example
|
|
80
218
|
* ```ts
|
|
81
|
-
* const
|
|
219
|
+
* const logoViewModel = buildLogoViewModel(siteData.layout.logo, siteData.site.title);
|
|
220
|
+
*
|
|
221
|
+
* renderBlock(siteHeaderManifest, layout.header, {
|
|
222
|
+
* viewModelOverrides: { content: { logo: logoViewModel } },
|
|
223
|
+
* });
|
|
82
224
|
* ```
|
|
83
225
|
*/
|
|
84
|
-
declare function
|
|
226
|
+
declare function buildLogoViewModel(logo: LogoSource, fallbackTitle: string | null | undefined): LogoViewModel;
|
|
227
|
+
/**
|
|
228
|
+
* Build a SimpleMenuViewModel from navigation data with pre-resolved hrefs.
|
|
229
|
+
* Use this instead of buildMenuViewModel for cleaner data flow.
|
|
230
|
+
*
|
|
231
|
+
* @param navigation - Navigation menus from site data
|
|
232
|
+
* @param routes - Route map for resolving internal links
|
|
233
|
+
*
|
|
234
|
+
* @example
|
|
235
|
+
* ```ts
|
|
236
|
+
* const menu = buildSimpleMenu(siteData.navigation, siteData.routes);
|
|
237
|
+
* // { items: [{ id, label, href: '/', isExternal: false }], cta: null }
|
|
238
|
+
* ```
|
|
239
|
+
*/
|
|
240
|
+
declare function buildSimpleMenu(navigation: NavigationMenuWithItems[], routes: RouteMap): SimpleMenuViewModel;
|
|
85
241
|
/**
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
* -
|
|
89
|
-
* -
|
|
90
|
-
* - Filters out items without valid hrefs
|
|
242
|
+
* Build a SimpleLogo from site layout data.
|
|
243
|
+
*
|
|
244
|
+
* @param logo - Logo data from site layout
|
|
245
|
+
* @param fallbackAlt - Fallback alt text (usually site title)
|
|
91
246
|
*
|
|
92
247
|
* @example
|
|
93
248
|
* ```ts
|
|
94
|
-
* const
|
|
95
|
-
*
|
|
249
|
+
* const logo = buildSimpleLogo(siteData.layout.logo, siteData.site.title);
|
|
250
|
+
* // { src: 'https://...', alt: 'Site Name', width: 200, height: 50 }
|
|
96
251
|
* ```
|
|
97
252
|
*/
|
|
98
|
-
declare function
|
|
253
|
+
declare function buildSimpleLogo(logo: {
|
|
254
|
+
url?: string | null;
|
|
255
|
+
alt?: string | null;
|
|
256
|
+
width?: number | null;
|
|
257
|
+
height?: number | null;
|
|
258
|
+
} | null, fallbackAlt: string | null | undefined): SimpleLogo;
|
|
259
|
+
/**
|
|
260
|
+
* @deprecated Use `transformToNavItems` instead.
|
|
261
|
+
* This alias is maintained for backwards compatibility only.
|
|
262
|
+
*/
|
|
263
|
+
declare const transformNavItems: typeof transformToNavItems;
|
|
264
|
+
/**
|
|
265
|
+
* @deprecated Use `getPrimaryNavigation` instead.
|
|
266
|
+
* This alias is maintained for backwards compatibility only.
|
|
267
|
+
*/
|
|
268
|
+
declare const selectPrimaryMenu: typeof getPrimaryNavigation;
|
|
99
269
|
|
|
100
|
-
export { type NavItem, NavigationMenuWithItems, getNavItemsBySlug, getNavigationBySlug, getPrimaryNavItems, getPrimaryNavigation, transformNavItems };
|
|
270
|
+
export { type CustomLinkValue, type ExternalLinkValue, type InternalLinkValue, type LinkValue, type LogoSource, type LogoViewModel, type MenuCtaViewModel, type MenuLinkViewModel, type MenuViewModel, type NavItem, NavigationMenuWithItems, type SimpleLogo, type SimpleMenuViewModel, type SimpleNavLink, buildLogoViewModel, buildMenuViewModel, buildSimpleLogo, buildSimpleMenu, getNavItemsBySlug, getNavigationBySlug, getPrimaryNavItems, getPrimaryNavigation, selectPrimaryMenu, transformNavItems, transformToNavItems };
|
|
@@ -1,44 +1,28 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const link = item.url;
|
|
29
|
-
if (!link || typeof link !== "object" || !("href" in link)) return "";
|
|
30
|
-
return link.href;
|
|
31
|
-
}
|
|
32
|
-
function isExternalLink(item) {
|
|
33
|
-
const link = item.url;
|
|
34
|
-
if (!link || typeof link !== "object" || !("kind" in link)) return false;
|
|
35
|
-
return link.kind === "external";
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
exports.getNavItemsBySlug = getNavItemsBySlug; exports.getNavigationBySlug = getNavigationBySlug; exports.getPrimaryNavItems = getPrimaryNavItems; exports.getPrimaryNavigation = getPrimaryNavigation; exports.transformNavItems = transformNavItems;
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
var _chunk5STV4MWDjs = require('./chunk-5STV4MWD.js');
|
|
14
|
+
require('./chunk-DGUM43GV.js');
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
exports.buildLogoViewModel = _chunk5STV4MWDjs.buildLogoViewModel; exports.buildMenuViewModel = _chunk5STV4MWDjs.buildMenuViewModel; exports.buildSimpleLogo = _chunk5STV4MWDjs.buildSimpleLogo; exports.buildSimpleMenu = _chunk5STV4MWDjs.buildSimpleMenu; exports.getNavItemsBySlug = _chunk5STV4MWDjs.getNavItemsBySlug; exports.getNavigationBySlug = _chunk5STV4MWDjs.getNavigationBySlug; exports.getPrimaryNavItems = _chunk5STV4MWDjs.getPrimaryNavItems; exports.getPrimaryNavigation = _chunk5STV4MWDjs.getPrimaryNavigation; exports.selectPrimaryMenu = _chunk5STV4MWDjs.selectPrimaryMenu; exports.transformNavItems = _chunk5STV4MWDjs.transformNavItems; exports.transformToNavItems = _chunk5STV4MWDjs.transformToNavItems;
|
|
44
28
|
//# sourceMappingURL=navigation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/navigation.js"
|
|
1
|
+
{"version":3,"sources":["/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/navigation.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,2sBAAC","file":"/Users/will/Projects/Business/cms/builder/packages/sdk/dist/server/navigation.js"}
|