@se-studio/core-ui 1.0.67 → 1.0.69
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/CHANGELOG.md +18 -0
- package/CMS_INFRASTRUCTURE.md +3 -2
- package/README.md +76 -1
- package/dist/app-helpers.d.ts +20 -0
- package/dist/app-helpers.d.ts.map +1 -1
- package/dist/app-helpers.js +24 -43
- package/dist/app-helpers.js.map +1 -1
- package/dist/cmsRegistration.d.ts +3 -3
- package/dist/cmsRegistration.d.ts.map +1 -1
- package/dist/cmsRegistration.js.map +1 -1
- package/dist/components/Visual.d.ts +1 -1
- package/dist/components/Visual.d.ts.map +1 -1
- package/dist/components/Visual.js +3 -12
- package/dist/components/Visual.js.map +1 -1
- package/dist/framework/ResponsiveVisual.d.ts.map +1 -1
- package/dist/framework/ResponsiveVisual.js +2 -2
- package/dist/framework/ResponsiveVisual.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/showcase/components/Controls.d.ts.map +1 -1
- package/dist/showcase/components/Controls.js +1 -1
- package/dist/showcase/components/Controls.js.map +1 -1
- package/dist/showcase/mockFactory.d.ts +1 -1
- package/dist/showcase/mockFactory.d.ts.map +1 -1
- package/dist/showcase/mockFactory.js +3 -5
- package/dist/showcase/mockFactory.js.map +1 -1
- package/dist/showcase/types.d.ts +0 -1
- package/dist/showcase/types.d.ts.map +1 -1
- package/dist/showcase/types.js +0 -1
- package/dist/showcase/types.js.map +1 -1
- package/dist/utils/breadcrumbUtils.d.ts +12 -1
- package/dist/utils/breadcrumbUtils.d.ts.map +1 -1
- package/dist/utils/breadcrumbUtils.js +6 -1
- package/dist/utils/breadcrumbUtils.js.map +1 -1
- package/dist/utils/marketingSiteSitemap.d.ts +49 -0
- package/dist/utils/marketingSiteSitemap.d.ts.map +1 -0
- package/dist/utils/marketingSiteSitemap.js +179 -0
- package/dist/utils/marketingSiteSitemap.js.map +1 -0
- package/dist/utils/sitemap.d.ts +40 -0
- package/dist/utils/sitemap.d.ts.map +1 -1
- package/dist/utils/sitemap.js +70 -0
- package/dist/utils/sitemap.js.map +1 -1
- package/dist/utils/structuredDataUtils.d.ts +5 -2
- package/dist/utils/structuredDataUtils.d.ts.map +1 -1
- package/dist/utils/structuredDataUtils.js +24 -7
- package/dist/utils/structuredDataUtils.js.map +1 -1
- package/package.json +6 -6
package/dist/utils/sitemap.js
CHANGED
|
@@ -164,4 +164,74 @@ export function sortSitemapEntries(entries) {
|
|
|
164
164
|
return 0;
|
|
165
165
|
});
|
|
166
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* Builds a Next.js sitemap from multiple async sources.
|
|
169
|
+
* Calls each source in parallel, deduplicates by URL, and converts to MetadataRoute.Sitemap.
|
|
170
|
+
*
|
|
171
|
+
* @param sources - Array of async functions that return sitemap entries
|
|
172
|
+
* @param options - Configuration for URL normalization and defaults
|
|
173
|
+
* @returns Promise resolving to Next.js compatible sitemap array
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```ts
|
|
177
|
+
* const sitemap = await buildSitemap(
|
|
178
|
+
* [() => getPageEntries(), () => getArticleEntries()],
|
|
179
|
+
* { baseUrl: 'https://example.com', trailingSlash: true },
|
|
180
|
+
* );
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
export async function buildSitemap(sources, options) {
|
|
184
|
+
const results = await Promise.all(sources.map((source) => source()));
|
|
185
|
+
const allEntries = results.flat();
|
|
186
|
+
const deduped = deduplicateSitemapEntries(allEntries);
|
|
187
|
+
return generateNextSitemap(deduped, options);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Escapes a string for safe use in XML content.
|
|
191
|
+
*/
|
|
192
|
+
function escapeXml(s) {
|
|
193
|
+
return s
|
|
194
|
+
.replace(/&/g, '&')
|
|
195
|
+
.replace(/</g, '<')
|
|
196
|
+
.replace(/>/g, '>')
|
|
197
|
+
.replace(/"/g, '"')
|
|
198
|
+
.replace(/'/g, ''');
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Converts a Next.js sitemap to sitemap XML string.
|
|
202
|
+
* Use with Route Handlers that need to return raw XML (e.g. /sitemap-unindexed.xml).
|
|
203
|
+
*
|
|
204
|
+
* @param entries - Next.js MetadataRoute.Sitemap array (entries must have absolute URLs)
|
|
205
|
+
* @returns Sitemap XML string
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* ```ts
|
|
209
|
+
* export async function GET() {
|
|
210
|
+
* const entries = await buildSitemap(sources, options);
|
|
211
|
+
* return new NextResponse(sitemapToXml(entries), {
|
|
212
|
+
* headers: { 'Content-Type': 'application/xml' },
|
|
213
|
+
* });
|
|
214
|
+
* }
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
217
|
+
export function sitemapToXml(entries) {
|
|
218
|
+
const urlElements = entries
|
|
219
|
+
.map((entry) => {
|
|
220
|
+
const loc = `<loc>${escapeXml(entry.url)}</loc>`;
|
|
221
|
+
const lastmodStr = entry.lastModified
|
|
222
|
+
? typeof entry.lastModified === 'string'
|
|
223
|
+
? entry.lastModified
|
|
224
|
+
: entry.lastModified.toISOString()
|
|
225
|
+
: null;
|
|
226
|
+
const lastmod = lastmodStr ? `<lastmod>${lastmodStr}</lastmod>` : '';
|
|
227
|
+
const changefreq = entry.changeFrequency
|
|
228
|
+
? `<changefreq>${entry.changeFrequency}</changefreq>`
|
|
229
|
+
: '';
|
|
230
|
+
const priority = entry.priority !== undefined ? `<priority>${entry.priority}</priority>` : '';
|
|
231
|
+
return `<url>${loc}${lastmod}${changefreq}${priority}</url>`;
|
|
232
|
+
})
|
|
233
|
+
.join('');
|
|
234
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
235
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">${urlElements}</urlset>`;
|
|
236
|
+
}
|
|
167
237
|
//# sourceMappingURL=sitemap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sitemap.js","sourceRoot":"","sources":["../../src/utils/sitemap.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sitemap.js","sourceRoot":"","sources":["../../src/utils/sitemap.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,7 +52,10 @@ import type { IBuildInformation } from './buildPageMetadata';
|
|
|
52
52
|
* - `page.description` - Page description
|
|
53
53
|
* - `page.slug` - Page slug
|
|
54
54
|
* - `page.imageUrl` - Featured image URL (if available)
|
|
55
|
-
* - `page.breadcrumbs` - Array of breadcrumb objects
|
|
55
|
+
* - `page.breadcrumbs` - Array of breadcrumb objects. Each has position, name, last; url is optional.
|
|
56
|
+
* When a segment has no link (e.g. path in breadcrumbNoLinkPaths), url is omitted. BreadcrumbList
|
|
57
|
+
* templates in the CMS must output the ListItem "item" only when url is present (e.g. Mustache:
|
|
58
|
+
* {{#url}}"item": {"@id": "{{{url}}}"}{{/url}}) so non-link segments get only name and position.
|
|
56
59
|
* - `article.*` - Article-specific fields (only for Article pages)
|
|
57
60
|
* - `person.*` - Person-specific fields (only for Person pages)
|
|
58
61
|
*
|
|
@@ -79,7 +82,7 @@ export interface StructuredDataContext {
|
|
|
79
82
|
breadcrumbs: Array<{
|
|
80
83
|
position: number;
|
|
81
84
|
name: string;
|
|
82
|
-
url
|
|
85
|
+
url?: string;
|
|
83
86
|
last: boolean;
|
|
84
87
|
}>;
|
|
85
88
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structuredDataUtils.d.ts","sourceRoot":"","sources":["../../src/utils/structuredDataUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,UAAU,EAAe,MAAM,4BAA4B,CAAC;AACxF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D
|
|
1
|
+
{"version":3,"file":"structuredDataUtils.d.ts","sourceRoot":"","sources":["../../src/utils/structuredDataUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,UAAU,EAAe,MAAM,4BAA4B,CAAC;AACxF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AAEH;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IAEpC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IAGnB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;KACrF,CAAC;IAGF,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAGF,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAGF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAyGD;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD,0IAA0I;IAC1I,mBAAmB,CAAC,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;IACjD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,iBAAiB,EACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iCAAiC,GAClF,qBAAqB,CAmEvB"}
|
|
@@ -38,6 +38,7 @@ function buildBreadcrumbs(path, baseUrl, currentTitle, breadcrumbTitleOverride)
|
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
40
|
* Converts pre-resolved breadcrumb segments to Schema.org format.
|
|
41
|
+
* Non-last segments without seg.href get no url (for BreadcrumbList templates that use {{#url}}).
|
|
41
42
|
*
|
|
42
43
|
* @param segments - Pre-resolved segments from resolveBreadcrumbSegments
|
|
43
44
|
* @param baseUrl - Base URL for the site
|
|
@@ -49,13 +50,29 @@ function segmentsToStructuredData(segments, baseUrl, currentPath) {
|
|
|
49
50
|
];
|
|
50
51
|
segments.forEach((seg, index) => {
|
|
51
52
|
const isLast = index === segments.length - 1;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
if (isLast) {
|
|
54
|
+
breadcrumbs.push({
|
|
55
|
+
position: index + 2,
|
|
56
|
+
name: seg.label,
|
|
57
|
+
url: `${baseUrl}${currentPath}`,
|
|
58
|
+
last: true,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else if (seg.href) {
|
|
62
|
+
breadcrumbs.push({
|
|
63
|
+
position: index + 2,
|
|
64
|
+
name: seg.label,
|
|
65
|
+
url: `${baseUrl}${seg.href}`,
|
|
66
|
+
last: false,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
breadcrumbs.push({
|
|
71
|
+
position: index + 2,
|
|
72
|
+
name: seg.label,
|
|
73
|
+
last: false,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
59
76
|
});
|
|
60
77
|
return breadcrumbs;
|
|
61
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structuredDataUtils.js","sourceRoot":"","sources":["../../src/utils/structuredDataUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"structuredDataUtils.js","sourceRoot":"","sources":["../../src/utils/structuredDataUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@se-studio/core-ui",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.69",
|
|
4
4
|
"description": "Shared React UI component library with Tailwind CSS v4 for SE Studio applications",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -59,13 +59,13 @@
|
|
|
59
59
|
"html-entities": "^2.6.0",
|
|
60
60
|
"mustache": "4.2.0",
|
|
61
61
|
"tailwind-merge": "^3.4.0",
|
|
62
|
-
"@se-studio/contentful-rest-api": "1.0.
|
|
63
|
-
"@se-studio/core-data-types": "1.0.
|
|
62
|
+
"@se-studio/contentful-rest-api": "1.0.69",
|
|
63
|
+
"@se-studio/core-data-types": "1.0.69"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
|
-
"@biomejs/biome": "^2.3.
|
|
67
|
-
"@types/node": "^22.19.
|
|
68
|
-
"@types/react": "^19.2.
|
|
66
|
+
"@biomejs/biome": "^2.3.15",
|
|
67
|
+
"@types/node": "^22.19.11",
|
|
68
|
+
"@types/react": "^19.2.14",
|
|
69
69
|
"@types/react-dom": "^19.2.3",
|
|
70
70
|
"next": "^15.5.12",
|
|
71
71
|
"typescript": "^5.9.3"
|