@se-studio/core-ui 1.0.46 → 1.0.47

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 (74) hide show
  1. package/ANALYTICS.md +136 -0
  2. package/CHANGELOG.md +466 -0
  3. package/CMS_INFRASTRUCTURE.md +335 -0
  4. package/CONSENT.md +121 -0
  5. package/README.md +11 -0
  6. package/dist/cmsRegistration.d.ts +152 -0
  7. package/dist/cmsRegistration.d.ts.map +1 -0
  8. package/dist/cmsRegistration.js +145 -0
  9. package/dist/cmsRegistration.js.map +1 -0
  10. package/dist/components/CmsCollection.d.ts +2 -1
  11. package/dist/components/CmsCollection.d.ts.map +1 -1
  12. package/dist/components/CmsCollection.js +1 -1
  13. package/dist/components/CmsCollection.js.map +1 -1
  14. package/dist/components/CmsComponent.d.ts +2 -1
  15. package/dist/components/CmsComponent.d.ts.map +1 -1
  16. package/dist/components/CmsComponent.js.map +1 -1
  17. package/dist/index.d.ts +3 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +3 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/showcase/components/AllViewPanel.d.ts +7 -0
  22. package/dist/showcase/components/AllViewPanel.d.ts.map +1 -0
  23. package/dist/showcase/components/AllViewPanel.js +35 -0
  24. package/dist/showcase/components/AllViewPanel.js.map +1 -0
  25. package/dist/showcase/components/Controls.d.ts +15 -0
  26. package/dist/showcase/components/Controls.d.ts.map +1 -0
  27. package/dist/showcase/components/Controls.js +74 -0
  28. package/dist/showcase/components/Controls.js.map +1 -0
  29. package/dist/showcase/components/ControlsWrapper.d.ts +13 -0
  30. package/dist/showcase/components/ControlsWrapper.d.ts.map +1 -0
  31. package/dist/showcase/components/ControlsWrapper.js +9 -0
  32. package/dist/showcase/components/ControlsWrapper.js.map +1 -0
  33. package/dist/showcase/components/PreviewPanel.d.ts +10 -0
  34. package/dist/showcase/components/PreviewPanel.d.ts.map +1 -0
  35. package/dist/showcase/components/PreviewPanel.js +42 -0
  36. package/dist/showcase/components/PreviewPanel.js.map +1 -0
  37. package/dist/showcase/components/ScaledIframe.d.ts +10 -0
  38. package/dist/showcase/components/ScaledIframe.d.ts.map +1 -0
  39. package/dist/showcase/components/ScaledIframe.js +16 -0
  40. package/dist/showcase/components/ScaledIframe.js.map +1 -0
  41. package/dist/showcase/components/ShowcaseAllRenderPage.d.ts +19 -0
  42. package/dist/showcase/components/ShowcaseAllRenderPage.d.ts.map +1 -0
  43. package/dist/showcase/components/ShowcaseAllRenderPage.js +46 -0
  44. package/dist/showcase/components/ShowcaseAllRenderPage.js.map +1 -0
  45. package/dist/showcase/components/ShowcasePage.d.ts +15 -0
  46. package/dist/showcase/components/ShowcasePage.d.ts.map +1 -0
  47. package/dist/showcase/components/ShowcasePage.js +16 -0
  48. package/dist/showcase/components/ShowcasePage.js.map +1 -0
  49. package/dist/showcase/components/ShowcaseRenderPage.d.ts +19 -0
  50. package/dist/showcase/components/ShowcaseRenderPage.d.ts.map +1 -0
  51. package/dist/showcase/components/ShowcaseRenderPage.js +51 -0
  52. package/dist/showcase/components/ShowcaseRenderPage.js.map +1 -0
  53. package/dist/showcase/components/TopBar.d.ts +11 -0
  54. package/dist/showcase/components/TopBar.d.ts.map +1 -0
  55. package/dist/showcase/components/TopBar.js +103 -0
  56. package/dist/showcase/components/TopBar.js.map +1 -0
  57. package/dist/showcase/index.d.ts +12 -0
  58. package/dist/showcase/index.d.ts.map +1 -0
  59. package/dist/showcase/index.js +12 -0
  60. package/dist/showcase/index.js.map +1 -0
  61. package/dist/showcase/mockFactory.d.ts +34 -0
  62. package/dist/showcase/mockFactory.d.ts.map +1 -0
  63. package/dist/showcase/mockFactory.js +352 -0
  64. package/dist/showcase/mockFactory.js.map +1 -0
  65. package/dist/showcase/types.d.ts +20 -0
  66. package/dist/showcase/types.d.ts.map +1 -0
  67. package/dist/showcase/types.js +18 -0
  68. package/dist/showcase/types.js.map +1 -0
  69. package/package.json +8 -5
  70. package/src/showcase/README.md +131 -0
  71. package/dist/__tests__/setup.d.ts +0 -2
  72. package/dist/__tests__/setup.d.ts.map +0 -1
  73. package/dist/__tests__/setup.js +0 -2
  74. package/dist/__tests__/setup.js.map +0 -1
@@ -0,0 +1,352 @@
1
+ import { BLOCKS, MARKS, } from '@contentful/rich-text-types';
2
+ import { DEFAULT_ALLOWED_UNUSED } from '../utils/UnusedChecker';
3
+ import { DEFAULT_SHOWCASE_CONTROL_STATE } from './types';
4
+ /**
5
+ * Parses inline marks (bold) from a text string.
6
+ * Returns an array of text nodes with appropriate marks.
7
+ */
8
+ function parseInlineMarks(text) {
9
+ const parts = text.split(/(\*\*.*?\*\*)/g);
10
+ return parts
11
+ .filter((part) => part.length > 0)
12
+ .map((part) => {
13
+ if (part.startsWith('**') && part.endsWith('**')) {
14
+ return {
15
+ nodeType: 'text',
16
+ value: part.slice(2, -2),
17
+ marks: [{ type: MARKS.BOLD }],
18
+ data: {},
19
+ };
20
+ }
21
+ return {
22
+ nodeType: 'text',
23
+ value: part,
24
+ marks: [],
25
+ data: {},
26
+ };
27
+ });
28
+ }
29
+ /**
30
+ * Creates a valid Contentful Rich Text document from a string, supporting basic markdown:
31
+ * - Paragraphs (split by double newline)
32
+ * - Bold text (**text**)
33
+ * - Headings (# H1, ## H2, etc.)
34
+ * - Bullet lists (- item or * item)
35
+ */
36
+ export function createRichTextFromMarkdown(text) {
37
+ if (!text) {
38
+ return null;
39
+ }
40
+ const paragraphs = text.split(/\n\n+/);
41
+ const content = paragraphs.map((paragraphText) => {
42
+ // Check for bullet lists (lines starting with - or *)
43
+ const lines = paragraphText.split('\n');
44
+ const isUnorderedList = lines.every((line) => /^[-*]\s+/.test(line) || line.trim() === '');
45
+ if (isUnorderedList && lines.some((line) => /^[-*]\s+/.test(line))) {
46
+ const listItems = lines
47
+ .filter((line) => /^[-*]\s+/.test(line))
48
+ .map((line) => {
49
+ const itemText = line.replace(/^[-*]\s+/, '');
50
+ return {
51
+ nodeType: BLOCKS.LIST_ITEM,
52
+ data: {},
53
+ content: [
54
+ {
55
+ nodeType: BLOCKS.PARAGRAPH,
56
+ data: {},
57
+ content: parseInlineMarks(itemText),
58
+ },
59
+ ],
60
+ };
61
+ });
62
+ return {
63
+ nodeType: BLOCKS.UL_LIST,
64
+ data: {},
65
+ content: listItems,
66
+ };
67
+ }
68
+ // Check for headings
69
+ let nodeType = BLOCKS.PARAGRAPH;
70
+ let cleanText = paragraphText;
71
+ const headingMatch = paragraphText.match(/^(#{1,6})\s+(.+)/);
72
+ if (headingMatch?.[1] && headingMatch[2]) {
73
+ const level = headingMatch[1].length;
74
+ cleanText = headingMatch[2];
75
+ switch (level) {
76
+ case 1:
77
+ nodeType = BLOCKS.HEADING_1;
78
+ break;
79
+ case 2:
80
+ nodeType = BLOCKS.HEADING_2;
81
+ break;
82
+ case 3:
83
+ nodeType = BLOCKS.HEADING_3;
84
+ break;
85
+ case 4:
86
+ nodeType = BLOCKS.HEADING_4;
87
+ break;
88
+ case 5:
89
+ nodeType = BLOCKS.HEADING_5;
90
+ break;
91
+ case 6:
92
+ nodeType = BLOCKS.HEADING_6;
93
+ break;
94
+ }
95
+ }
96
+ return {
97
+ nodeType,
98
+ data: {},
99
+ content: parseInlineMarks(cleanText),
100
+ };
101
+ });
102
+ const document = {
103
+ nodeType: BLOCKS.DOCUMENT,
104
+ data: {},
105
+ content: content,
106
+ };
107
+ return {
108
+ json: document,
109
+ };
110
+ }
111
+ /**
112
+ * Creates a valid Visual object
113
+ */
114
+ export function createVisual(id, width, height) {
115
+ return {
116
+ type: 'Visual',
117
+ id: `visual-${id}`,
118
+ image: {
119
+ type: 'Picture',
120
+ id: `img-${id}`,
121
+ name: 'Sample Image',
122
+ mimeType: 'image/jpeg',
123
+ width,
124
+ height,
125
+ size: 1024,
126
+ src: `https://placehold.co/${width}x${height}`,
127
+ description: 'Sample placeholder image',
128
+ },
129
+ };
130
+ }
131
+ /**
132
+ * Creates a Responsive Visual object
133
+ */
134
+ export function createResponsiveVisual(showVisual, showMobile, customSize, width = 800, height = 600) {
135
+ if (!showVisual) {
136
+ return undefined;
137
+ }
138
+ // Calculate mobile dimensions maintaining roughly the same aspect ratio, but max width 400
139
+ const aspectRatio = width / height;
140
+ const mobileWidth = 400;
141
+ const mobileHeight = Math.round(mobileWidth / aspectRatio);
142
+ return {
143
+ visual: createVisual('desktop', width, height),
144
+ mobileVisual: showMobile ? createVisual('mobile', mobileWidth, mobileHeight) : undefined,
145
+ hideVisual: false,
146
+ hideMobileVisual: !showMobile,
147
+ visualCustomSize: customSize > 0 ? customSize : null,
148
+ };
149
+ }
150
+ /**
151
+ * Creates sample links
152
+ */
153
+ export function createLinks(count) {
154
+ return Array.from({ length: count }).map((_, i) => ({
155
+ type: 'Internal link',
156
+ internalType: 'Page',
157
+ id: `link-${i}`,
158
+ name: `Sample Link ${i + 1}`,
159
+ title: `Action ${i + 1}`,
160
+ text: `Action ${i + 1}`,
161
+ slug: 'sample-page',
162
+ href: '#',
163
+ variant: i === 0 ? 'Primary' : 'Secondary',
164
+ }));
165
+ }
166
+ export function parseShowcaseControls(searchParams, defaultState = DEFAULT_SHOWCASE_CONTROL_STATE) {
167
+ const params = new URLSearchParams();
168
+ Object.entries(searchParams).forEach(([key, value]) => {
169
+ if (typeof value === 'string') {
170
+ params.set(key, value);
171
+ }
172
+ else if (Array.isArray(value) && value.length > 0 && value[0] !== undefined) {
173
+ params.set(key, value[0]);
174
+ }
175
+ });
176
+ const getBool = (key) => {
177
+ const val = params.get(key);
178
+ return (val === null ? defaultState[key] : val === 'true');
179
+ };
180
+ const getStr = (key) => {
181
+ return (params.get(key) || defaultState[key]);
182
+ };
183
+ const getNum = (key) => {
184
+ const val = params.get(key);
185
+ return (val ? Number(val) : defaultState[key]);
186
+ };
187
+ return {
188
+ heading: getStr('heading'),
189
+ showHeading: getBool('showHeading'),
190
+ preHeading: getStr('preHeading'),
191
+ postHeading: getStr('postHeading'),
192
+ body: getStr('body'),
193
+ additionalCopy: getStr('additionalCopy'),
194
+ showVisual: getBool('showVisual'),
195
+ showMobileVisual: getBool('showMobileVisual'),
196
+ visualCustomSize: getNum('visualCustomSize'),
197
+ backgroundColour: getStr('backgroundColour'),
198
+ textColour: getStr('textColour'),
199
+ textSize: getStr('textSize'),
200
+ showLinks: getBool('showLinks'),
201
+ numberOfLinks: getNum('numberOfLinks'),
202
+ cmsLabel: getStr('cmsLabel'),
203
+ };
204
+ }
205
+ /**
206
+ * Creates a mock card item for a collection
207
+ */
208
+ export function createMockCardContent(collectionType, index, controls, collectionCardFieldsMap, cardMockData) {
209
+ const cardId = `mock-card-${index}`;
210
+ const cardName = `Mock Card ${index + 1}`;
211
+ // Special handling for Media Carousel which expects Visuals
212
+ if (collectionType === 'Carousel: Media' || collectionType.includes('Media')) {
213
+ return createVisual(`media-${index}`, cardMockData?.visual?.width || 800, cardMockData?.visual?.height || 600);
214
+ }
215
+ // Extract visual dimensions from mock data if present
216
+ const visualDims = cardMockData?.visual;
217
+ const mockFields = cardMockData || {};
218
+ const getString = (key, defaultVal) => {
219
+ const val = mockFields[key];
220
+ return typeof val === 'string' ? val : defaultVal;
221
+ };
222
+ // Helper to get rich text from mock data (auto-converting markdown string)
223
+ const getRichText = (key, defaultVal) => {
224
+ const val = mockFields[key];
225
+ if (typeof val === 'string') {
226
+ return createRichTextFromMarkdown(val);
227
+ }
228
+ return createRichTextFromMarkdown(defaultVal);
229
+ };
230
+ const rawCard = {
231
+ id: cardId,
232
+ type: 'Component',
233
+ componentType: 'Generic',
234
+ name: cardName,
235
+ cmsLabel: cardName,
236
+ index,
237
+ isFirst: index === 0,
238
+ isLast: index === 3,
239
+ indexOfType: index,
240
+ preHeading: getString('preHeading', `Pre-heading ${index + 1}`),
241
+ heading: getString('heading', `Card Heading ${index + 1}`),
242
+ postHeading: getString('postHeading', `Post-heading ${index + 1}`),
243
+ body: getRichText('body', `This is the body content for mock card ${index + 1}.`),
244
+ additionalCopy: getRichText('additionalCopy', `Additional copy for card ${index + 1}.`),
245
+ // Spread other mock fields
246
+ ...Object.fromEntries(Object.entries(mockFields)
247
+ .filter(([key]) => !['visual', 'preHeading', 'heading', 'postHeading', 'body', 'additionalCopy'].includes(key))
248
+ .map(([key, val]) => {
249
+ // If it's a string, pass it as is (could be string field OR markdown for unknown rich text field)
250
+ // We can't automatically know if custom fields are rich text or not without schema.
251
+ return [key, val];
252
+ })),
253
+ visual: createResponsiveVisual(controls.showVisual, controls.showMobileVisual, controls.visualCustomSize, visualDims?.width, visualDims?.height),
254
+ icon: createVisual(`icon-${index}`, 64, 64),
255
+ backgroundColour: controls.backgroundColour,
256
+ textColour: controls.textColour,
257
+ textSize: controls.textSize,
258
+ links: createLinks(1),
259
+ };
260
+ const usedFields = collectionCardFieldsMap[collectionType];
261
+ if (!usedFields) {
262
+ return rawCard;
263
+ }
264
+ // Filter fields to only include those that are used or allowed
265
+ const filteredCard = Object.fromEntries(Object.entries(rawCard).filter(([key]) => {
266
+ if (['id', 'type', 'componentType', 'name', 'cmsLabel', 'index'].includes(key)) {
267
+ return true;
268
+ }
269
+ if (usedFields.has(key)) {
270
+ return true;
271
+ }
272
+ if (DEFAULT_ALLOWED_UNUSED.has(key)) {
273
+ return true;
274
+ }
275
+ return false;
276
+ }));
277
+ return filteredCard;
278
+ }
279
+ /**
280
+ * Generates a mock component or collection based on the control state
281
+ */
282
+ export function createMockShowcaseData(type, mode, controls, componentFieldsMap, collectionFieldsMap, collectionCardFieldsMap, componentMockMap = {}, collectionMockMap = {}, collectionCardMockMap = {}) {
283
+ // Determine used fields first so we can conditionally create contents
284
+ const usedFields = mode === 'component' ? componentFieldsMap[type] : collectionFieldsMap[type];
285
+ const mockData = mode === 'component' ? componentMockMap[type] : collectionMockMap[type];
286
+ const mockFields = mockData || {};
287
+ const visualDims = mockData?.visual;
288
+ const commonFields = {
289
+ id: 'mock-id',
290
+ name: controls.cmsLabel,
291
+ cmsLabel: controls.cmsLabel,
292
+ index: 0,
293
+ isFirst: true,
294
+ isLast: true,
295
+ indexOfType: 0,
296
+ // Prefer control state (which is merged with mock data in ShowcaseRenderPage),
297
+ // but here we are using the controls directly.
298
+ preHeading: controls.preHeading || null,
299
+ heading: controls.showHeading ? controls.heading : null,
300
+ postHeading: controls.postHeading || null,
301
+ // Rich Text - created from the control string (which was populated from mock data)
302
+ body: controls.body ? createRichTextFromMarkdown(controls.body) : null,
303
+ additionalCopy: controls.additionalCopy
304
+ ? createRichTextFromMarkdown(controls.additionalCopy)
305
+ : null,
306
+ // Spread other mock fields that are NOT standard controls
307
+ // (Standard controls like heading/body are passed via `controls` object,
308
+ // so we don't need to spread them again, but we do need custom fields)
309
+ ...Object.fromEntries(Object.entries(mockFields)
310
+ .filter(([key]) => !['visual', 'preHeading', 'heading', 'postHeading', 'body', 'additionalCopy'].includes(key))
311
+ .map(([key, val]) => [key, val])),
312
+ // Visuals
313
+ visual: createResponsiveVisual(controls.showVisual, controls.showMobileVisual, controls.visualCustomSize, visualDims?.width, visualDims?.height),
314
+ // Theme
315
+ backgroundColour: controls.backgroundColour,
316
+ textColour: controls.textColour,
317
+ textSize: controls.textSize,
318
+ // Links
319
+ links: controls.showLinks ? createLinks(controls.numberOfLinks) : [],
320
+ };
321
+ // Only create contents if the collection explicitly uses them
322
+ const collectionUsesContents = usedFields?.has('contents') ?? true;
323
+ const rawData = mode === 'component'
324
+ ? {
325
+ ...commonFields,
326
+ type: 'Component',
327
+ componentType: type,
328
+ }
329
+ : {
330
+ ...commonFields,
331
+ type: 'Collection',
332
+ collectionType: type,
333
+ ...(collectionUsesContents && {
334
+ contents: Array.from({ length: 4 }).map((_, i) => createMockCardContent(type, i, controls, collectionCardFieldsMap, collectionCardMockMap[type])),
335
+ }),
336
+ };
337
+ // Filter fields to only include those that are used or allowed
338
+ const filteredData = Object.fromEntries(Object.entries(rawData).filter(([key]) => {
339
+ if (['type', 'componentType', 'collectionType'].includes(key)) {
340
+ return true;
341
+ }
342
+ if (usedFields?.has(key)) {
343
+ return true;
344
+ }
345
+ if (DEFAULT_ALLOWED_UNUSED.has(key)) {
346
+ return true;
347
+ }
348
+ return false;
349
+ }));
350
+ return filteredData;
351
+ }
352
+ //# sourceMappingURL=mockFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockFactory.js","sourceRoot":"","sources":["../../src/showcase/mockFactory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface ShowcaseControlState<TColor = string, TGradient = string> {
2
+ heading: string;
3
+ showHeading: boolean;
4
+ preHeading: string;
5
+ postHeading: string;
6
+ body: string;
7
+ additionalCopy: string;
8
+ showVisual: boolean;
9
+ showMobileVisual: boolean;
10
+ visualCustomSize: number;
11
+ backgroundColour: TColor | TGradient;
12
+ textColour: TColor;
13
+ textSize: 'Large' | 'Medium' | 'Small';
14
+ showLinks: boolean;
15
+ numberOfLinks: number;
16
+ cmsLabel: string;
17
+ }
18
+ export type ShowcaseMode = 'component' | 'collection';
19
+ export declare const DEFAULT_SHOWCASE_CONTROL_STATE: ShowcaseControlState;
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/showcase/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB,CAAC,MAAM,GAAG,MAAM,EAAE,SAAS,GAAG,MAAM;IAEvE,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IAGvB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IAGzB,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAGvC,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IAGtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;AAEtD,eAAO,MAAM,8BAA8B,EAAE,oBAgB5C,CAAC"}
@@ -0,0 +1,18 @@
1
+ export const DEFAULT_SHOWCASE_CONTROL_STATE = {
2
+ heading: 'Sample Heading',
3
+ showHeading: true,
4
+ preHeading: 'Pre-heading',
5
+ postHeading: '',
6
+ body: 'This is a sample body text to demonstrate the component layout and typography. You can edit this text in the controls.',
7
+ additionalCopy: '',
8
+ showVisual: true,
9
+ showMobileVisual: false,
10
+ visualCustomSize: 0,
11
+ backgroundColour: 'White',
12
+ textColour: 'Primary Blue',
13
+ textSize: 'Medium',
14
+ showLinks: true,
15
+ numberOfLinks: 1,
16
+ cmsLabel: 'Showcase Component',
17
+ };
18
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/showcase/types.ts"],"names":[],"mappings":"AA6BA,MAAM,CAAC,MAAM,8BAA8B,GAAyB;IAClE,OAAO,EAAE,gBAAgB;IACzB,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,aAAa;IACzB,WAAW,EAAE,EAAE;IACf,IAAI,EAAE,wHAAwH;IAC9H,cAAc,EAAE,EAAE;IAClB,UAAU,EAAE,IAAI;IAChB,gBAAgB,EAAE,KAAK;IACvB,gBAAgB,EAAE,CAAC;IACnB,gBAAgB,EAAE,OAAO;IACzB,UAAU,EAAE,cAAc;IAC1B,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,IAAI;IACf,aAAa,EAAE,CAAC;IAChB,QAAQ,EAAE,oBAAoB;CAC/B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/core-ui",
3
- "version": "1.0.46",
3
+ "version": "1.0.47",
4
4
  "description": "Shared React UI component library with Tailwind CSS v4 for SE Studio applications",
5
5
  "repository": {
6
6
  "type": "git",
@@ -18,7 +18,9 @@
18
18
  }
19
19
  },
20
20
  "files": [
21
- "dist"
21
+ "dist",
22
+ "*.md",
23
+ "src/showcase/README.md"
22
24
  ],
23
25
  "keywords": [
24
26
  "react",
@@ -58,19 +60,20 @@
58
60
  "html-entities": "^2.6.0",
59
61
  "mustache": "4.2.0",
60
62
  "tailwind-merge": "^3.4.0",
61
- "@se-studio/contentful-rest-api": "1.0.46",
62
- "@se-studio/core-data-types": "1.0.46"
63
+ "@se-studio/contentful-rest-api": "1.0.47",
64
+ "@se-studio/core-data-types": "1.0.47"
63
65
  },
64
66
  "devDependencies": {
65
67
  "@biomejs/biome": "^2.3.10",
66
68
  "@testing-library/jest-dom": "^6.9.1",
67
69
  "@testing-library/react": "^16.3.1",
68
- "@types/node": "^24.10.4",
70
+ "@types/node": "^22.19.3",
69
71
  "@types/react": "^19.2.7",
70
72
  "@types/react-dom": "^19.2.3",
71
73
  "@vitejs/plugin-react": "^5.1.2",
72
74
  "jsdom": "^27.4.0",
73
75
  "next": "^15.5.9",
76
+ "tsup": "^8.5.1",
74
77
  "typescript": "^5.9.3",
75
78
  "vitest": "^4.0.16"
76
79
  },
@@ -0,0 +1,131 @@
1
+ # CMS Showcase Infrastructure
2
+
3
+ The CMS Showcase is a developer tool designed to test and preview CMS components and collections with mock data. This directory contains the shared infrastructure used by multiple projects to implement their own showcase pages.
4
+
5
+ ## Architecture
6
+
7
+ The showcase is split into several key parts:
8
+
9
+ - `ShowcasePage.tsx`: The main container component that handles the layout, top bar, and panels.
10
+ - `ShowcaseRenderPage.tsx`: The iframe content component that renders the actual CMS component or collection with mock data.
11
+ - `mockFactory.ts`: Logic for generating mock data based on component/collection types and control state.
12
+ - `components/`: UI components for the showcase interface (Sidebar, Controls, TopBar, etc.).
13
+ - `types.ts`: TypeScript definitions for the showcase state and control options.
14
+
15
+ ## Styling Conventions
16
+
17
+ **IMPORTANT:** Because this code is shared across multiple projects, it **must not** rely on project-specific Tailwind configurations.
18
+
19
+ All styling in this directory uses **hardcoded Tailwind arbitrary values** to ensure consistent rendering regardless of the host project's `tailwind.config.ts`.
20
+
21
+ - **Colors:** Use hex codes, e.g., `text-[#374151]`, `bg-[#f9fafb]`, `border-[#e5e7eb]`.
22
+ - **Spacing/Size:** Use pixel values, e.g., `text-[11px]`, `w-[300px]`, `p-[16px]`.
23
+ - **Fonts:** Use standard weights, e.g., `font-[500]`, `font-[600]`.
24
+
25
+ ## Registration Pattern & `usedFields`
26
+
27
+ The showcase uses the `usedFields` and `cardUsedFields` from the CMS registration system to determine which controls to show for a given component or collection. It also uses the `mock` and `cardMock` properties to generate realistic initial data.
28
+
29
+ When you register a component using `defineComponent` or a collection using `defineCollection`, you provide a `Set<string>` of fields that the component actually uses. The `mockFactory` uses these sets to:
30
+ 1. Filter the generated mock data to only include relevant fields.
31
+ 2. Show or hide controls in the sidebar based on whether a field is "used".
32
+
33
+ Example registration:
34
+
35
+ ```tsx
36
+ export const HeroRegistration = defineComponent({
37
+ name: 'Hero', // Must match CMS componentType
38
+ renderer: Hero,
39
+ usedFields: new Set(['heading', 'preHeading', 'body', 'visual', 'links']),
40
+ mock: {
41
+ heading: 'Hero Heading',
42
+ body: 'Hero body text description.',
43
+ visual: { width: 1200, height: 600 },
44
+ },
45
+ });
46
+ ```
47
+
48
+ ## Integration Guide
49
+
50
+ To add a CMS Showcase to a project:
51
+
52
+ 1. Create a `page.tsx` for the main showcase interface:
53
+ ```tsx
54
+ import { ShowcasePage } from '@se-studio/core-ui';
55
+ import {
56
+ componentFieldsMap,
57
+ collectionFieldsMap,
58
+ projectRendererConfig,
59
+ // ... other props
60
+ } from '@/lib/cms';
61
+
62
+ export default async function Page({ searchParams }) {
63
+ return (
64
+ <ShowcasePage
65
+ searchParams={await searchParams}
66
+ rendererConfig={projectRendererConfig}
67
+ componentFieldsMap={componentFieldsMap}
68
+ collectionFieldsMap={collectionFieldsMap}
69
+ basePath="/cms-showcase"
70
+ // ... project-specific color options
71
+ />
72
+ );
73
+ }
74
+ ```
75
+
76
+ 2. Create a separate route for the preview iframe (e.g., `/cms-showcase/render/page.tsx`):
77
+ ```tsx
78
+ import { ShowcaseRenderPage } from '@se-studio/core-ui';
79
+ import {
80
+ componentFieldsMap,
81
+ collectionFieldsMap,
82
+ collectionCardFieldsMap,
83
+ componentMockMap,
84
+ collectionMockMap,
85
+ collectionCardMockMap,
86
+ projectRendererConfig
87
+ } from '@/lib/cms';
88
+
89
+ export default async function Page({ searchParams }) {
90
+ return (
91
+ <ShowcaseRenderPage
92
+ searchParams={await searchParams}
93
+ rendererConfig={projectRendererConfig}
94
+ componentFieldsMap={componentFieldsMap}
95
+ collectionFieldsMap={collectionFieldsMap}
96
+ collectionCardFieldsMap={collectionCardFieldsMap}
97
+ componentMockMap={componentMockMap}
98
+ collectionMockMap={collectionMockMap}
99
+ collectionCardMockMap={collectionCardMockMap}
100
+ />
101
+ );
102
+ }
103
+ ```
104
+
105
+ 3. Ensure your `cms.ts` exports all the maps built from registrations:
106
+ ```ts
107
+ // Build maps from registrations
108
+ const {
109
+ componentMap,
110
+ componentFieldsMap,
111
+ componentMockMap
112
+ } = buildComponentMaps(componentRegistrations);
113
+
114
+ const {
115
+ collectionMap,
116
+ collectionFieldsMap,
117
+ collectionCardFieldsMap,
118
+ collectionMockMap,
119
+ collectionCardMockMap
120
+ } = buildCollectionMaps(collectionRegistrations);
121
+
122
+ // Export maps for cms-showcase
123
+ export {
124
+ componentFieldsMap,
125
+ collectionFieldsMap,
126
+ collectionCardFieldsMap,
127
+ componentMockMap,
128
+ collectionMockMap,
129
+ collectionCardMockMap,
130
+ };
131
+ ```
@@ -1,2 +0,0 @@
1
- import '@testing-library/jest-dom';
2
- //# sourceMappingURL=setup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/__tests__/setup.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC"}
@@ -1,2 +0,0 @@
1
- import '@testing-library/jest-dom';
2
- //# sourceMappingURL=setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/__tests__/setup.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC"}