@se-studio/core-ui 1.17.2 → 1.19.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.
Files changed (79) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/analytics/video/classifySeek.d.ts +15 -0
  3. package/dist/analytics/video/classifySeek.d.ts.map +1 -0
  4. package/dist/analytics/video/classifySeek.js +32 -0
  5. package/dist/analytics/video/classifySeek.js.map +1 -0
  6. package/dist/analytics/video/createVideoEngagementSession.d.ts +51 -0
  7. package/dist/analytics/video/createVideoEngagementSession.d.ts.map +1 -0
  8. package/dist/analytics/video/createVideoEngagementSession.js +225 -0
  9. package/dist/analytics/video/createVideoEngagementSession.js.map +1 -0
  10. package/dist/analytics/video/index.d.ts +6 -0
  11. package/dist/analytics/video/index.d.ts.map +1 -0
  12. package/dist/analytics/video/index.js +6 -0
  13. package/dist/analytics/video/index.js.map +1 -0
  14. package/dist/analytics/video/loadYouTubeIframeApi.d.ts +50 -0
  15. package/dist/analytics/video/loadYouTubeIframeApi.d.ts.map +1 -0
  16. package/dist/analytics/video/loadYouTubeIframeApi.js +52 -0
  17. package/dist/analytics/video/loadYouTubeIframeApi.js.map +1 -0
  18. package/dist/analytics/video/useHtml5VideoEngagement.d.ts +8 -0
  19. package/dist/analytics/video/useHtml5VideoEngagement.d.ts.map +1 -0
  20. package/dist/analytics/video/useHtml5VideoEngagement.js +67 -0
  21. package/dist/analytics/video/useHtml5VideoEngagement.js.map +1 -0
  22. package/dist/analytics/video/useVideoEngagement.d.ts +19 -0
  23. package/dist/analytics/video/useVideoEngagement.d.ts.map +1 -0
  24. package/dist/analytics/video/useVideoEngagement.js +80 -0
  25. package/dist/analytics/video/useVideoEngagement.js.map +1 -0
  26. package/dist/analytics/video/videoEngagementTypes.d.ts +52 -0
  27. package/dist/analytics/video/videoEngagementTypes.d.ts.map +1 -0
  28. package/dist/analytics/video/videoEngagementTypes.js +45 -0
  29. package/dist/analytics/video/videoEngagementTypes.js.map +1 -0
  30. package/dist/components/ExternalVimeoEmbed.d.ts +1 -1
  31. package/dist/components/ExternalVimeoEmbed.d.ts.map +1 -1
  32. package/dist/components/ExternalVimeoEmbed.js +134 -9
  33. package/dist/components/ExternalVimeoEmbed.js.map +1 -1
  34. package/dist/components/ExternalYouTubeEmbed.d.ts +1 -1
  35. package/dist/components/ExternalYouTubeEmbed.d.ts.map +1 -1
  36. package/dist/components/ExternalYouTubeEmbed.js +167 -9
  37. package/dist/components/ExternalYouTubeEmbed.js.map +1 -1
  38. package/dist/components/ImageKitClientVideo.d.ts +6 -1
  39. package/dist/components/ImageKitClientVideo.d.ts.map +1 -1
  40. package/dist/components/ImageKitClientVideo.js +69 -7
  41. package/dist/components/ImageKitClientVideo.js.map +1 -1
  42. package/dist/components/ImageKitHlsVideoClient.d.ts +7 -1
  43. package/dist/components/ImageKitHlsVideoClient.d.ts.map +1 -1
  44. package/dist/components/ImageKitHlsVideoClient.js +65 -8
  45. package/dist/components/ImageKitHlsVideoClient.js.map +1 -1
  46. package/dist/components/LazyVideo.d.ts +5 -0
  47. package/dist/components/LazyVideo.d.ts.map +1 -1
  48. package/dist/components/LazyVideo.js +61 -36
  49. package/dist/components/LazyVideo.js.map +1 -1
  50. package/dist/components/LocalVideo.d.ts.map +1 -1
  51. package/dist/components/LocalVideo.js +8 -2
  52. package/dist/components/LocalVideo.js.map +1 -1
  53. package/dist/components/LocalVideoPlayChrome.d.ts +20 -0
  54. package/dist/components/LocalVideoPlayChrome.d.ts.map +1 -0
  55. package/dist/components/LocalVideoPlayChrome.js +22 -0
  56. package/dist/components/LocalVideoPlayChrome.js.map +1 -0
  57. package/dist/components/LocalVideoPlayOverlay.d.ts +19 -0
  58. package/dist/components/LocalVideoPlayOverlay.d.ts.map +1 -0
  59. package/dist/components/LocalVideoPlayOverlay.js +49 -0
  60. package/dist/components/LocalVideoPlayOverlay.js.map +1 -0
  61. package/dist/components/Video.d.ts +5 -0
  62. package/dist/components/Video.d.ts.map +1 -1
  63. package/dist/index.d.ts +5 -0
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +3 -0
  66. package/dist/index.js.map +1 -1
  67. package/dist/server/index.d.ts +1 -0
  68. package/dist/server/index.d.ts.map +1 -1
  69. package/dist/server/index.js.map +1 -1
  70. package/dist/utils/agent-ready.d.ts +17 -3
  71. package/dist/utils/agent-ready.d.ts.map +1 -1
  72. package/dist/utils/agent-ready.js +36 -6
  73. package/dist/utils/agent-ready.js.map +1 -1
  74. package/dist/utils/robots.d.ts +7 -0
  75. package/dist/utils/robots.d.ts.map +1 -1
  76. package/dist/utils/robots.js +7 -1
  77. package/dist/utils/robots.js.map +1 -1
  78. package/docs/llms.md +27 -2
  79. package/package.json +8 -3
@@ -90,6 +90,8 @@ export function prefersMarkdownAccept(acceptHeader) {
90
90
  }
91
91
  return markdownQ > htmlQ;
92
92
  }
93
+ /** Reject absurdly long paths (middleware / agent tool abuse). */
94
+ const MAX_HTML_PATH_LENGTH = 2048;
93
95
  /**
94
96
  * Map a public HTML pathname to the site's markdown export path.
95
97
  *
@@ -100,12 +102,34 @@ export function prefersMarkdownAccept(acceptHeader) {
100
102
  *
101
103
  * Returns `null` when the path is already markdown, a static asset, or an
102
104
  * infrastructure prefix that should not negotiate.
105
+ *
106
+ * Decodes URI components so encoded traversal (`%2e%2e`) is rejected the same
107
+ * as literal `..` segments.
103
108
  */
104
109
  export function htmlPathToMarkdownPath(pathname) {
105
- if (!pathname || pathname.includes('..') || pathname.includes('\\')) {
110
+ if (!pathname || pathname.includes('\\') || pathname.includes('\0')) {
111
+ return null;
112
+ }
113
+ if (pathname.length > MAX_HTML_PATH_LENGTH) {
114
+ return null;
115
+ }
116
+ let decoded;
117
+ try {
118
+ decoded = decodeURIComponent(pathname);
119
+ }
120
+ catch {
106
121
  return null;
107
122
  }
108
- const pathOnly = pathname.split('?')[0]?.split('#')[0] ?? pathname;
123
+ if (decoded.includes('\\') || decoded.includes('\0') || decoded.length > MAX_HTML_PATH_LENGTH) {
124
+ return null;
125
+ }
126
+ const pathOnly = decoded.split('?')[0]?.split('#')[0] ?? decoded;
127
+ // Segment-based traversal check (after decode)
128
+ for (const segment of pathOnly.split('/')) {
129
+ if (segment === '..') {
130
+ return null;
131
+ }
132
+ }
109
133
  for (const prefix of MARKDOWN_NEGOTIATION_SKIP_PREFIXES) {
110
134
  if (pathOnly === prefix.replace(/\/$/, '') || pathOnly.startsWith(prefix)) {
111
135
  return null;
@@ -142,30 +166,36 @@ export function resolveMarkdownNegotiationPath(pathname, acceptHeader) {
142
166
  }
143
167
  return htmlPathToMarkdownPath(pathname);
144
168
  }
169
+ const DEFAULT_MCP_SERVER_CARD_PATH = '/.well-known/mcp/server-card.json';
145
170
  /**
146
171
  * Build Link header values for agent discovery on HTML document responses.
147
172
  *
148
173
  * Always includes `describedby` → `/llms.txt` (registered relation for
149
174
  * isitagentready linkHeaders). Adds `alternate` markdown when mappable.
175
+ * Optionally adds MCP server-card discovery when `mcpServerCard` is true.
150
176
  *
151
177
  * @example
152
- * for (const value of buildAgentDiscoveryLinkValues('/about/')) {
178
+ * for (const value of buildAgentDiscoveryLinkValues('/about/', { mcpServerCard: true })) {
153
179
  * response.headers.append('Link', value);
154
180
  * }
155
181
  */
156
- export function buildAgentDiscoveryLinkValues(pathname) {
182
+ export function buildAgentDiscoveryLinkValues(pathname, options) {
157
183
  const links = ['</llms.txt>; rel="describedby"'];
158
184
  const markdownPath = htmlPathToMarkdownPath(pathname);
159
185
  if (markdownPath) {
160
186
  links.push(`<${markdownPath}>; rel="alternate"; type="text/markdown"`);
161
187
  }
188
+ if (options?.mcpServerCard) {
189
+ const cardPath = options.mcpServerCardPath ?? DEFAULT_MCP_SERVER_CARD_PATH;
190
+ links.push(`<${cardPath}>; rel="mcp-server-card"`);
191
+ }
162
192
  return links;
163
193
  }
164
194
  /**
165
195
  * Append agent discovery Link headers onto a headers bag (e.g. NextResponse.headers).
166
196
  */
167
- export function appendAgentDiscoveryLinkHeaders(headers, pathname) {
168
- for (const value of buildAgentDiscoveryLinkValues(pathname)) {
197
+ export function appendAgentDiscoveryLinkHeaders(headers, pathname, options) {
198
+ for (const value of buildAgentDiscoveryLinkValues(pathname, options)) {
169
199
  headers.append('Link', value);
170
200
  }
171
201
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-ready.js","sourceRoot":"","sources":["../../src/utils/agent-ready.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-ready.js","sourceRoot":"","sources":["../../src/utils/agent-ready.ts"],"names":[],"mappings":"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"}
@@ -52,6 +52,13 @@ export interface CreateRobotsConfigOptions {
52
52
  userAgent: string;
53
53
  allow: string;
54
54
  }>;
55
+ /**
56
+ * Extra production `Allow:` paths (emitted after `Allow: /`, before Disallow).
57
+ * Use for public agent/API surfaces under a broad disallowed prefix, e.g.
58
+ * `['/api/mcp', '/api/search']` while still `Disallow: /api/`.
59
+ * Google: more specific Allow can win over broader Disallow.
60
+ */
61
+ allowExtra?: readonly string[];
55
62
  }
56
63
  /** Options for plain-text robots.txt (supports Content-Signal). */
57
64
  export interface FormatRobotsTxtOptions extends CreateRobotsConfigOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAE1C,uEAAuE;AACvE,eAAO,MAAM,uBAAuB,8FAQ1B,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,kDAAmD,CAAC;AAE/F,kEAAkE;AAClE,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,IAAI,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,MAAM,EAAE,uBAAuB,CAAC;IAChC,yCAAyC;IACzC,OAAO,EAAE,uBAAuB,CAAC;IACjC,6DAA6D;IAC7D,OAAO,EAAE,uBAAuB,CAAC;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,0FAA0F;IAC1F,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,4CAA4C;IAC5C,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE;AAED,mEAAmE;AACnE,MAAM,WAAW,sBAAuB,SAAQ,yBAAyB;IACvE;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AA2CD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM,EAAE,CAwBhF;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,aAAa,CAAC,MAAM,CAiC3F;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CA8BvE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,sBAAsB,GAAG,QAAQ,CAIjF"}
1
+ {"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAE1C,uEAAuE;AACvE,eAAO,MAAM,uBAAuB,8FAQ1B,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,kDAAmD,CAAC;AAE/F,kEAAkE;AAClE,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,IAAI,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,MAAM,EAAE,uBAAuB,CAAC;IAChC,yCAAyC;IACzC,OAAO,EAAE,uBAAuB,CAAC;IACjC,6DAA6D;IAC7D,OAAO,EAAE,uBAAuB,CAAC;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,0FAA0F;IAC1F,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,4CAA4C;IAC5C,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE;;;;;OAKG;IACH,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,mEAAmE;AACnE,MAAM,WAAW,sBAAuB,SAAQ,yBAAyB;IACvE;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AA2CD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM,EAAE,CAwBhF;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,aAAa,CAAC,MAAM,CAoC3F;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAoCvE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,sBAAsB,GAAG,QAAQ,CAIjF"}
@@ -98,11 +98,12 @@ export function createRobotsConfig(options) {
98
98
  }
99
99
  return { rules, sitemap };
100
100
  }
101
+ const allow = options.allowExtra && options.allowExtra.length > 0 ? ['/', ...options.allowExtra] : '/';
101
102
  return {
102
103
  rules: [
103
104
  {
104
105
  userAgent: '*',
105
- allow: '/',
106
+ allow,
106
107
  disallow: buildRobotsDisallow(options),
107
108
  },
108
109
  ],
@@ -142,6 +143,11 @@ export function formatRobotsTxt(options) {
142
143
  lines.push(formatContentSignalLine(options.contentSignals));
143
144
  }
144
145
  lines.push('Allow: /');
146
+ if (options.allowExtra?.length) {
147
+ for (const path of options.allowExtra) {
148
+ lines.push(`Allow: ${path}`);
149
+ }
150
+ }
145
151
  for (const path of buildRobotsDisallow(options)) {
146
152
  lines.push(`Disallow: ${path}`);
147
153
  }
@@ -1 +1 @@
1
- {"version":3,"file":"robots.js","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"robots.js","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"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"}
package/docs/llms.md CHANGED
@@ -127,6 +127,21 @@ const { trackClick } = useAnalytics();
127
127
  trackClick({ label: 'CTA Button', href: '/signup' });
128
128
  ```
129
129
 
130
+ ### Video engagement events
131
+
132
+ Interactive (non-autoplay) Vimeo, YouTube, and local videos fire `trackEvent` with:
133
+
134
+ `video_impression` · `video_start` · `video_progress` · `video_complete` · `video_seek` · `video_unmute` · `video_fullscreen` · `video_exit`
135
+
136
+ Export `VIDEO_ENGAGEMENT_EVENTS` / `VIDEO_ENGAGEMENT_EVENT_NAMES` for GTM or HubSpot `eventNameMap`. Requires `analyticsContext` on the visual chain. Autoplay/background videos are not tracked.
137
+
138
+ ### Play button (external + local)
139
+
140
+ - Site-wide brand: wrap the app in `ExternalVideoPlayButtonProvider` with a custom icon (see Brightline / SE website / HopSkipDrive).
141
+ - Default: red `DefaultExternalVideoPlayButton`.
142
+ - Non-autoplay **local** ImageKit videos get built-in click-to-play using the same context.
143
+ - Escape hatch: `LocalVideoPlayOverlay` for wrapping an arbitrary `<video>` tree.
144
+
130
145
  ## Page Metadata
131
146
 
132
147
  Validate `baseUrl` at module init (fails the build on misconfiguration). No trailing slash — paths are joined as `` `${baseUrl}${path}` ``:
@@ -198,11 +213,13 @@ export function GET() {
198
213
  baseUrl,
199
214
  contentSignals: { search: 'yes', aiTrain: 'no', aiInput: 'yes' },
200
215
  // disallowExtra: ['/private/'],
216
+ // Public agent APIs under /api/ (Google: specific Allow can win over Disallow: /api/):
217
+ // allowExtra: ['/api/mcp', '/api/search'],
201
218
  });
202
219
  }
203
220
  ```
204
221
 
205
- Also: `formatRobotsTxt`, `formatContentSignalLine`, `buildRobotsDisallow`.
222
+ Also: `formatRobotsTxt`, `formatContentSignalLine`, `buildRobotsDisallow`. `allowExtra` emits extra production `Allow:` lines.
206
223
 
207
224
  ## Agent readiness (Band A)
208
225
 
@@ -247,7 +264,15 @@ export function middleware(request: NextRequest) {
247
264
  | `prefersMarkdownAccept` | Parse Accept; true when markdown preferred over HTML |
248
265
  | `htmlPathToMarkdownPath` | `/` → `/index.md`, `/about/` → `/about.md` |
249
266
  | `resolveMarkdownNegotiationPath` | Combine both for middleware rewrite target |
250
- | `buildAgentDiscoveryLinkValues` / `appendAgentDiscoveryLinkHeaders` | `Link: </llms.txt>; rel="describedby"` + alternate markdown |
267
+ | `buildAgentDiscoveryLinkValues` / `appendAgentDiscoveryLinkHeaders` | `Link: </llms.txt>; rel="describedby"` + alternate markdown; opt-in `{ mcpServerCard: true }` for `rel="mcp-server-card"` |
268
+
269
+ **Band B (public site MCP):** use `@se-studio/site-mcp` for a public read-only MCP (typically `/api/mcp`). Pair robots with `allowExtra: ['/api/mcp', '/api/search']` when those endpoints live under a broad `Disallow: /api/`.
270
+
271
+ Pure agent path helpers are also available without the main React barrel:
272
+
273
+ ```ts
274
+ import { htmlPathToMarkdownPath } from '@se-studio/core-ui/agent-ready';
275
+ ```
251
276
 
252
277
  ### Person profile pages
253
278
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/core-ui",
3
- "version": "1.17.2",
3
+ "version": "1.19.0",
4
4
  "description": "Shared React UI component library with Tailwind CSS v4 for SE Studio applications",
5
5
  "repository": {
6
6
  "type": "git",
@@ -23,6 +23,10 @@
23
23
  "./route-handlers": {
24
24
  "types": "./dist/route-handlers/index.d.ts",
25
25
  "import": "./dist/route-handlers/index.js"
26
+ },
27
+ "./agent-ready": {
28
+ "types": "./dist/utils/agent-ready.d.ts",
29
+ "import": "./dist/utils/agent-ready.js"
26
30
  }
27
31
  },
28
32
  "files": [
@@ -69,14 +73,15 @@
69
73
  "@contentful/rich-text-types": "^17.2.7",
70
74
  "@radix-ui/react-slot": "^1.3.3",
71
75
  "@types/mustache": "4.2.6",
76
+ "@vimeo/player": "^2.30.4",
72
77
  "clsx": "^2.1.1",
73
78
  "hls.js": "^1.6.16",
74
79
  "html-entities": "^2.6.0",
75
80
  "mustache": "4.2.0",
76
81
  "server-only": "0.0.1",
77
82
  "tailwind-merge": "^3.6.0",
78
- "@se-studio/core-data-types": "1.7.0",
79
- "@se-studio/contentful-rest-api": "1.17.0"
83
+ "@se-studio/contentful-rest-api": "1.17.0",
84
+ "@se-studio/core-data-types": "1.7.0"
80
85
  },
81
86
  "devDependencies": {
82
87
  "@biomejs/biome": "^2.5.5",