@se-studio/project-build 1.0.119 → 1.0.120
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 +6 -0
- package/dist/cms-generate-html-style-guide.js +467 -58
- package/dist/cms-generate-html-style-guide.js.map +1 -1
- package/package.json +2 -2
- package/skills/contentful-cms/cms-guidelines/html-component-authoring.md +192 -50
- package/skills/contentful-cms/core/SKILL.md +14 -4
- package/skills/contentful-cms/rich-text/SKILL.md +7 -1
package/CHANGELOG.md
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* Run this whenever tailwind.config.json or globals.css changes, or as part of
|
|
20
20
|
* the update-cms-guidelines workflow.
|
|
21
21
|
*/
|
|
22
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
22
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
23
23
|
import { basename, join } from 'node:path';
|
|
24
24
|
import { loadTailwindConfig } from './loadTailwindConfig.js';
|
|
25
25
|
// ---------------------------------------------------------------------------
|
|
@@ -110,7 +110,7 @@ function buildBreakpointsSection(config) {
|
|
|
110
110
|
lines.push('');
|
|
111
111
|
lines.push('| Prefix | Min-width | Columns |');
|
|
112
112
|
lines.push('|--------|-----------|---------|');
|
|
113
|
-
lines.push(
|
|
113
|
+
lines.push(`| *(none)* | 0px (mobile) | ${sizes['mobile']?.cols ?? '—'} |`);
|
|
114
114
|
for (const [name, s] of Object.entries(sizes)) {
|
|
115
115
|
if (name === 'mobile' || s.breakpoint === undefined)
|
|
116
116
|
continue;
|
|
@@ -260,22 +260,29 @@ function buildGridSection(config) {
|
|
|
260
260
|
lines.push('');
|
|
261
261
|
lines.push('### Grid Container Classes');
|
|
262
262
|
lines.push('');
|
|
263
|
-
lines.push(
|
|
263
|
+
lines.push('The author is responsible for adding both grid layers. Without them, content has no page margins');
|
|
264
|
+
lines.push('and stretches edge-to-edge. **Outer layer** classes go on the section wrapper; **inner layer** classes');
|
|
265
|
+
lines.push('go on the div that receives `content-cols-grid`. Content spans go inside the inner layer.');
|
|
264
266
|
lines.push('');
|
|
265
|
-
lines.push('| Class | Description |');
|
|
266
|
-
lines.push('
|
|
267
|
-
lines.push('| `
|
|
268
|
-
lines.push('| `
|
|
269
|
-
lines.push('| `
|
|
270
|
-
lines.push('| `
|
|
271
|
-
lines.push('| `
|
|
272
|
-
lines.push('| `
|
|
267
|
+
lines.push('| Class | Layer | Description |');
|
|
268
|
+
lines.push('|-------|-------|-------------|');
|
|
269
|
+
lines.push('| `container-cols-grid` | Outer | 3-column grid: `[margin \\| content \\| margin]`. Background colour goes here. |');
|
|
270
|
+
lines.push('| `container-rows-grid` | Outer | Adds vertical spacing rows. Required when using `container-row-*`. |');
|
|
271
|
+
lines.push('| `container-row-6-12` | Outer | Vertical spacing (48px bottom — standard default). Replace with desired value. |');
|
|
272
|
+
lines.push('| `col-start-2 col-span-1` | Inner | Places inner div in the content column (skips margin columns). |');
|
|
273
|
+
lines.push('| `row-start-2 row-span-4` | Inner | Places inner div in the content rows (skips spacing rows). |');
|
|
274
|
+
lines.push('| `content-cols-grid` | Inner | Creates the 12-column content grid inside the inner div. |');
|
|
275
|
+
lines.push('| `col-span-full` | Content | Full width (all 12 columns) |');
|
|
276
|
+
lines.push('| `laptop:col-start-2 laptop:col-span-10` | Content | Centered with one-column margin each side (laptop+) |');
|
|
277
|
+
lines.push('| `laptop:col-start-2 laptop:col-span-4` | Content | Left column (text side in two-column layout) |');
|
|
278
|
+
lines.push('| `laptop:col-start-7 laptop:col-span-5` | Content | Right column (visual side in two-column layout) |');
|
|
279
|
+
lines.push('| `laptop:col-start-2 laptop:col-span-5` | Content | Narrow left half |');
|
|
280
|
+
lines.push('| `laptop:col-start-7 laptop:col-span-6` | Content | Wide right half |');
|
|
273
281
|
lines.push('');
|
|
274
282
|
lines.push('### Layout Notes');
|
|
275
283
|
lines.push('');
|
|
276
|
-
lines.push('-
|
|
277
|
-
lines.push('-
|
|
278
|
-
lines.push('- For edge-to-edge (full-bleed) content, set `fullWidth: true` on the HtmlComponent entry — the grid wrapper is removed.');
|
|
284
|
+
lines.push('- On mobile, all content columns are `col-span-full` by default.');
|
|
285
|
+
lines.push('- For edge-to-edge (full-bleed) content, set `fullWidth: true` on the HtmlComponent entry — the outer grid is removed and you control the full viewport width.');
|
|
279
286
|
return lines.join('\n');
|
|
280
287
|
}
|
|
281
288
|
function buildSpacingSection() {
|
|
@@ -292,6 +299,8 @@ function buildSpacingSection() {
|
|
|
292
299
|
lines.push('| Card padding | `p-6 laptop:p-10` |');
|
|
293
300
|
lines.push('');
|
|
294
301
|
lines.push('> **Note:** HtmlComponent renders inside the Section component which already provides top/bottom padding. Avoid adding extra outer padding that doubles the section gap.');
|
|
302
|
+
lines.push('');
|
|
303
|
+
lines.push('> All classes in the table above are included in the generated `src/generated/cms-rawhtml-safelist.css`', '> and are guaranteed to be compiled once that file is imported into `globals.css`.', '> See the Confirmed Safe Tailwind Utilities section for details.');
|
|
295
304
|
return lines.join('\n');
|
|
296
305
|
}
|
|
297
306
|
function buildUtilitiesSection(utilities) {
|
|
@@ -393,14 +402,20 @@ function buildPatternsSection(config) {
|
|
|
393
402
|
const lines = ['## Common Layout Patterns', ''];
|
|
394
403
|
lines.push('Copy-paste these patterns into `rawHtml`. Replace placeholder text with real content.');
|
|
395
404
|
lines.push('');
|
|
405
|
+
lines.push('> **All patterns use the mandatory two-layer grid structure.** The outer `container-cols-grid` provides');
|
|
406
|
+
lines.push('> page margin columns; the inner `content-cols-grid` provides the 12-column content grid.');
|
|
407
|
+
lines.push('> Never use `content-cols-grid` as the outermost element — content will have no page margins.');
|
|
408
|
+
lines.push('');
|
|
396
409
|
lines.push('### Centered Text Block');
|
|
397
410
|
lines.push('');
|
|
398
411
|
lines.push('```html');
|
|
399
|
-
lines.push('<div class="
|
|
400
|
-
lines.push(' <div class="col-
|
|
401
|
-
lines.push(' <
|
|
402
|
-
lines.push('
|
|
403
|
-
lines.push(' <
|
|
412
|
+
lines.push('<div class="w-full container-cols-grid container-rows-grid container-row-6-12">');
|
|
413
|
+
lines.push(' <div class="col-start-2 col-span-1 row-start-2 row-span-4 content-cols-grid">');
|
|
414
|
+
lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-10 flex flex-col gap-6">');
|
|
415
|
+
lines.push(' <h2 class="h2">Section Heading</h2>');
|
|
416
|
+
lines.push(' <div class="rtf-standard">');
|
|
417
|
+
lines.push(' <p>Body copy goes here.</p>');
|
|
418
|
+
lines.push(' </div>');
|
|
404
419
|
lines.push(' </div>');
|
|
405
420
|
lines.push(' </div>');
|
|
406
421
|
lines.push('</div>');
|
|
@@ -409,25 +424,30 @@ function buildPatternsSection(config) {
|
|
|
409
424
|
lines.push('### Two-Column Layout (Text + Visual)');
|
|
410
425
|
lines.push('');
|
|
411
426
|
lines.push('```html');
|
|
412
|
-
lines.push('<div class="
|
|
413
|
-
lines.push(' <div class="col-
|
|
414
|
-
lines.push(' <
|
|
415
|
-
lines.push('
|
|
416
|
-
lines.push('
|
|
417
|
-
lines.push('
|
|
418
|
-
lines.push(' <
|
|
427
|
+
lines.push('<div class="w-full container-cols-grid container-rows-grid container-row-6-12">');
|
|
428
|
+
lines.push(' <div class="col-start-2 col-span-1 row-start-2 row-span-4 content-cols-grid">');
|
|
429
|
+
lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-4 flex flex-col gap-6">');
|
|
430
|
+
lines.push(' <h2 class="h2">Heading</h2>');
|
|
431
|
+
lines.push(' <p class="p1">Descriptive text alongside the visual.</p>');
|
|
432
|
+
lines.push(' </div>');
|
|
433
|
+
lines.push(' <div class="col-span-full laptop:col-start-7 laptop:col-span-5">');
|
|
434
|
+
lines.push(' <img src="..." alt="..." class="w-full rounded-lg" />');
|
|
435
|
+
lines.push(' </div>');
|
|
419
436
|
lines.push(' </div>');
|
|
420
437
|
lines.push('</div>');
|
|
438
|
+
lines.push('<!-- For tablet column layout, use customCss @media instead of tablet: prefix -->');
|
|
421
439
|
lines.push('```');
|
|
422
440
|
lines.push('');
|
|
423
441
|
lines.push('### Coloured Card');
|
|
424
442
|
lines.push('');
|
|
425
443
|
lines.push('```html');
|
|
426
|
-
lines.push('<div class="
|
|
427
|
-
lines.push(' <div class="col-
|
|
428
|
-
lines.push(
|
|
429
|
-
lines.push(
|
|
430
|
-
lines.push('
|
|
444
|
+
lines.push('<div class="w-full container-cols-grid container-rows-grid container-row-6-12">');
|
|
445
|
+
lines.push(' <div class="col-start-2 col-span-1 row-start-2 row-span-4 content-cols-grid">');
|
|
446
|
+
lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-10">');
|
|
447
|
+
lines.push(` <div class="bg-${ac} text-${dc} p-8 rounded-lg flex flex-col gap-4">`);
|
|
448
|
+
lines.push(' <h3 class="h3">Card Title</h3>');
|
|
449
|
+
lines.push(' <p class="p2">Supporting description text.</p>');
|
|
450
|
+
lines.push(' </div>');
|
|
431
451
|
lines.push(' </div>');
|
|
432
452
|
lines.push(' </div>');
|
|
433
453
|
lines.push('</div>');
|
|
@@ -436,31 +456,40 @@ function buildPatternsSection(config) {
|
|
|
436
456
|
lines.push('### Card Grid');
|
|
437
457
|
lines.push('');
|
|
438
458
|
lines.push('```html');
|
|
439
|
-
lines.push('<div class="
|
|
440
|
-
lines.push('
|
|
441
|
-
lines.push('
|
|
442
|
-
lines.push('
|
|
443
|
-
lines.push('
|
|
444
|
-
lines.push('
|
|
445
|
-
lines.push('
|
|
446
|
-
lines.push('
|
|
447
|
-
lines.push('
|
|
448
|
-
lines.push('
|
|
449
|
-
lines.push('
|
|
459
|
+
lines.push('<div class="w-full container-cols-grid container-rows-grid container-row-6-12">');
|
|
460
|
+
lines.push(' <div class="col-start-2 col-span-1 row-start-2 row-span-4 content-cols-grid gap-y-8">');
|
|
461
|
+
lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-10">');
|
|
462
|
+
lines.push(' <h2 class="h2">Grid Title</h2>');
|
|
463
|
+
lines.push(' </div>');
|
|
464
|
+
lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-10">');
|
|
465
|
+
lines.push(' <!-- Use customCss for responsive grid columns (tablet:/laptop: not reliable in rawHtml) -->');
|
|
466
|
+
lines.push(' <div class="my-card-grid">');
|
|
467
|
+
lines.push(' <div class="flex flex-col gap-4 p-6 border rounded-lg">');
|
|
468
|
+
lines.push(' <h3 class="h3">Card 1</h3>');
|
|
469
|
+
lines.push(' <p class="p2">Description.</p>');
|
|
470
|
+
lines.push(' </div>');
|
|
471
|
+
lines.push(' </div>');
|
|
450
472
|
lines.push(' </div>');
|
|
451
|
-
lines.push(' <!-- repeat for more cards -->');
|
|
452
473
|
lines.push(' </div>');
|
|
453
474
|
lines.push('</div>');
|
|
475
|
+
lines.push('<!-- In customCss: -->');
|
|
476
|
+
lines.push('<!-- @media (min-width: 768px) { .my-card-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; } } -->');
|
|
477
|
+
lines.push('<!-- @media (min-width: 1024px) { .my-card-grid { grid-template-columns: repeat(3, 1fr); } } -->');
|
|
454
478
|
lines.push('```');
|
|
455
479
|
lines.push('');
|
|
456
480
|
lines.push('### Hero with Dark Background');
|
|
457
481
|
lines.push('');
|
|
458
482
|
lines.push('```html');
|
|
459
|
-
lines.push('<!-- Set isHero: true on this HtmlComponent entry -->');
|
|
460
|
-
lines.push(
|
|
461
|
-
lines.push('
|
|
462
|
-
lines.push('
|
|
463
|
-
lines.push(
|
|
483
|
+
lines.push('<!-- Set isHero: true and fullWidth: true on this HtmlComponent entry -->');
|
|
484
|
+
lines.push('<!-- fullWidth: true removes the outer grid — you own the full width -->');
|
|
485
|
+
lines.push('<!-- py-16 is used here because fullWidth: true removes the outer grid/row spacing. -->');
|
|
486
|
+
lines.push('<!-- In a standard (non-fullWidth) section, use container-row-6-* for vertical spacing. -->');
|
|
487
|
+
lines.push(`<div class="bg-${dc} text-${lc} w-full">`);
|
|
488
|
+
lines.push(' <div class="content-cols-grid py-16">');
|
|
489
|
+
lines.push(' <div class="col-span-full laptop:col-start-2 laptop:col-span-10 flex flex-col gap-8">');
|
|
490
|
+
lines.push(' <h1 class="h1">Hero Heading</h1>');
|
|
491
|
+
lines.push(' <p class="p1">Subtitle or intro text.</p>');
|
|
492
|
+
lines.push(' </div>');
|
|
464
493
|
lines.push(' </div>');
|
|
465
494
|
lines.push('</div>');
|
|
466
495
|
lines.push('```');
|
|
@@ -474,9 +503,9 @@ When authoring HTML for a \`HtmlComponent\` entry in Contentful, fill these fiel
|
|
|
474
503
|
| Field | Required | Notes |
|
|
475
504
|
|-------|----------|-------|
|
|
476
505
|
| \`rawHtml\` | ✓ | The HTML markup. Use Tailwind classes; avoid inline \`style=\` attributes for layout/colour/typography. |
|
|
477
|
-
| \`customCss\` | — | Scoped CSS
|
|
478
|
-
| \`customJs\` | — | JavaScript loaded via Next.js \`<Script>\`.
|
|
479
|
-
| \`markdownContent\` | — | Plain text summary
|
|
506
|
+
| \`customCss\` | — | Scoped CSS. Rules are automatically prefixed with \`[data-hc-id="<id>"]\` so they cannot leak. **Use for all responsive layout** (\`@media\` queries) and any utility class not in the Confirmed Safe list. |
|
|
507
|
+
| \`customJs\` | — | JavaScript loaded via Next.js \`<Script>\`. A \`hcRoot\` variable pointing to this component's root element is automatically injected — use it to scope all queries (see below). |
|
|
508
|
+
| \`markdownContent\` | — | Plain text summary for site search indexing. **Strongly recommended** — leaving it empty makes the component invisible to search. |
|
|
480
509
|
| \`isHero\` | — | Set \`true\` if the HTML contains an \`<h1>\`. Ensures this block appears first in the page content flow. |
|
|
481
510
|
| \`fullWidth\` | — | Set \`true\` for edge-to-edge (full-bleed) layouts that break out of the column grid. |
|
|
482
511
|
| \`excludeFromSearch\` | — | Set \`true\` to exclude from search indexing even if \`markdownContent\` is filled. |
|
|
@@ -485,11 +514,359 @@ When authoring HTML for a \`HtmlComponent\` entry in Contentful, fill these fiel
|
|
|
485
514
|
### Authoring Rules
|
|
486
515
|
|
|
487
516
|
1. **Classes, not inline styles.** Use Tailwind utility classes. Never write \`style="color: #FF5C00"\` — use \`class="text-orange"\` instead.
|
|
488
|
-
2. **
|
|
489
|
-
3. **
|
|
490
|
-
4. **
|
|
491
|
-
5. **
|
|
492
|
-
6. **
|
|
517
|
+
2. **Use the two-layer grid.** Every section needs an outer \`container-cols-grid\` wrapper (page margins) and an inner \`col-start-2 col-span-1 content-cols-grid\` wrapper (12-column content grid). See the Layout Patterns section.
|
|
518
|
+
3. **Only use responsive prefixes from the Confirmed Safe list.** Tailwind only compiles classes found in source files — classes in \`rawHtml\` are invisible to the scanner. Only use \`tablet:\` / \`laptop:\` prefixes that appear in the **Confirmed Safe Tailwind Utilities** section (they are proven to be in the compiled bundle). For any responsive behaviour not listed there, use \`customCss\` with \`@media\` queries instead.
|
|
519
|
+
4. **Semantic HTML.** Use correct heading levels (\`<h1>\` only once per page, \`<h2>\` for section heads, \`<h3>\` for cards).
|
|
520
|
+
5. **Accessible images.** Always include \`alt\` attributes. Decorative images use \`alt=""\`.
|
|
521
|
+
6. **No custom font stacks.** Use \`font-sans\` or rely on typography classes. The project font is loaded by Next.js automatically.
|
|
522
|
+
7. **Fill \`markdownContent\`.** This is strongly recommended — it is the only way site search can index the component's content. Leave it empty and the component is invisible to search.
|
|
523
|
+
8. **Set \`cmsLabel\` immediately.** Use a descriptive value — the Contentful UI shows only this name.
|
|
524
|
+
|
|
525
|
+
### Custom JavaScript (\`customJs\`)
|
|
526
|
+
|
|
527
|
+
The renderer automatically injects \`hcRoot\` — a reference to this component's root \`[data-hc-id]\` element — before your script runs. **Always use \`hcRoot\` instead of \`document.querySelector('[data-hc-id]')\`**, which would match the first component on the page, not this one.
|
|
528
|
+
|
|
529
|
+
\`\`\`js
|
|
530
|
+
// ✓ Correct — hcRoot is automatically scoped to this component
|
|
531
|
+
var btns = hcRoot.querySelectorAll('.my-btn');
|
|
532
|
+
btns.forEach(function (btn) {
|
|
533
|
+
btn.addEventListener('click', function () { /* ... */ });
|
|
534
|
+
});
|
|
535
|
+
|
|
536
|
+
// ✗ Wrong — matches the first [data-hc-id] on the page, not necessarily this component
|
|
537
|
+
var section = document.querySelector('[data-hc-id]');
|
|
538
|
+
\`\`\`
|
|
539
|
+
|
|
540
|
+
**Rules:**
|
|
541
|
+
- Use \`hcRoot\` as the root for all \`querySelector\` / \`querySelectorAll\` calls.
|
|
542
|
+
- Keep scripts small and self-contained — no module imports, no global state.
|
|
543
|
+
- Avoid \`document.getElementById\` unless the ID is unique across the entire page.
|
|
544
|
+
- Use \`afterInteractive\` (default) for toggle/tab interactions. Use \`lazyOnload\` for non-critical analytics or third-party widgets.`;
|
|
545
|
+
}
|
|
546
|
+
// ---------------------------------------------------------------------------
|
|
547
|
+
// Safe Tailwind utilities scanner
|
|
548
|
+
// ---------------------------------------------------------------------------
|
|
549
|
+
/** Responsive / state prefixes to strip before category matching. */
|
|
550
|
+
const VARIANT_PREFIXES = [
|
|
551
|
+
'tablet:',
|
|
552
|
+
'laptop:',
|
|
553
|
+
'desktop:',
|
|
554
|
+
'wide:',
|
|
555
|
+
'hover:',
|
|
556
|
+
'focus:',
|
|
557
|
+
'active:',
|
|
558
|
+
'group-hover:',
|
|
559
|
+
'dark:',
|
|
560
|
+
'motion-safe:',
|
|
561
|
+
'motion-reduce:',
|
|
562
|
+
];
|
|
563
|
+
/**
|
|
564
|
+
* Per-category patterns matched against the BASE class (after stripping variants).
|
|
565
|
+
* Order matters — first match wins.
|
|
566
|
+
*/
|
|
567
|
+
const SAFE_UTILITY_CATEGORIES = [
|
|
568
|
+
{
|
|
569
|
+
label: 'Display & Visibility',
|
|
570
|
+
pattern: /^(block|inline-block|inline|flex|inline-flex|grid|inline-grid|hidden|contents|flow-root|visible|invisible|sr-only|not-sr-only)$/,
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
label: 'Position',
|
|
574
|
+
pattern: /^(relative|absolute|fixed|sticky|static)$|^(inset(-[xy])?|top|right|bottom|left|z)-/,
|
|
575
|
+
},
|
|
576
|
+
{
|
|
577
|
+
label: 'Flexbox',
|
|
578
|
+
pattern: /^(flex(-col|-row|-wrap|-nowrap|-1|-auto|-initial|-none|-shrink|-shrink-0|-grow|-grow-0)?|items|justify|self|content|place-items|place-content|place-self|order|grow|shrink|basis)(-|$)/,
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
label: 'Grid',
|
|
582
|
+
pattern: /^(grid(-cols|-rows|-flow)?|col(-span|-start|-end)?|row(-span|-start|-end)?|auto-cols|auto-rows)(-|\d|$)/,
|
|
583
|
+
},
|
|
584
|
+
{
|
|
585
|
+
label: 'Gap',
|
|
586
|
+
pattern: /^gap(-[xy])?-/,
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
label: 'Padding',
|
|
590
|
+
pattern: /^(p|px|py|pt|pr|pb|pl|ps|pe)-/,
|
|
591
|
+
},
|
|
592
|
+
{
|
|
593
|
+
label: 'Margin',
|
|
594
|
+
pattern: /^-?(m|mx|my|mt|mr|mb|ml|ms|me)-/,
|
|
595
|
+
},
|
|
596
|
+
{
|
|
597
|
+
label: 'Space Between',
|
|
598
|
+
pattern: /^-?space-(x|y)-/,
|
|
599
|
+
},
|
|
600
|
+
{
|
|
601
|
+
label: 'Sizing',
|
|
602
|
+
pattern: /^(w|h|min-w|min-h|max-w|max-h|size)-/,
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
label: 'Typography Utilities',
|
|
606
|
+
pattern: /^(text-(center|left|right|justify|wrap|nowrap|balance|pretty)|font-(bold|semibold|medium|normal|light|thin|black|extrabold)|leading|tracking|uppercase|lowercase|capitalize|normal-case|truncate|break|whitespace|underline|no-underline|line-through|decoration|align|indent)(-|$)/,
|
|
607
|
+
},
|
|
608
|
+
{
|
|
609
|
+
label: 'Borders & Radius',
|
|
610
|
+
pattern: /^(border(-[0-9]|-(t|b|l|r|x|y|s|e|dashed|solid|dotted|none))?$|rounded)(-|$)/,
|
|
611
|
+
},
|
|
612
|
+
{
|
|
613
|
+
label: 'Opacity',
|
|
614
|
+
pattern: /^opacity-/,
|
|
615
|
+
},
|
|
616
|
+
{
|
|
617
|
+
label: 'Shadow & Ring',
|
|
618
|
+
pattern: /^(shadow|ring)(-|$)/,
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
label: 'Overflow',
|
|
622
|
+
pattern: /^overflow(-[xy])?-/,
|
|
623
|
+
},
|
|
624
|
+
{
|
|
625
|
+
label: 'Object Fit',
|
|
626
|
+
pattern: /^object-/,
|
|
627
|
+
},
|
|
628
|
+
{
|
|
629
|
+
label: 'Aspect Ratio',
|
|
630
|
+
pattern: /^aspect-/,
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
label: 'Transition & Animation',
|
|
634
|
+
pattern: /^(transition|duration|ease|delay|animate)(-|$)/,
|
|
635
|
+
},
|
|
636
|
+
{
|
|
637
|
+
label: 'Transform',
|
|
638
|
+
pattern: /^-?(translate|rotate|scale|skew|transform)(-|$)/,
|
|
639
|
+
},
|
|
640
|
+
{
|
|
641
|
+
label: 'Interactivity',
|
|
642
|
+
pattern: /^(cursor|pointer-events|select|resize|scroll|touch)(-|$)/,
|
|
643
|
+
},
|
|
644
|
+
];
|
|
645
|
+
/** Characters that are valid in a Tailwind class token. */
|
|
646
|
+
const VALID_CLASS_RE = /^[a-z0-9_-]+([:/[\].!a-z0-9_-])*$/i;
|
|
647
|
+
/**
|
|
648
|
+
* For spacing/sizing categories the value portion (after the last prefix hyphen)
|
|
649
|
+
* must look like a Tailwind scale — a number, fraction, keyword, or arbitrary value.
|
|
650
|
+
* This prevents descriptive classnames like `my-warning` from being included.
|
|
651
|
+
*/
|
|
652
|
+
const SPACING_CATEGORY_LABELS = new Set(['Padding', 'Margin', 'Gap', 'Space Between', 'Sizing']);
|
|
653
|
+
const VALID_SPACING_VALUE_RE = /^(\[.*\]|-?\d[\d.]*(?:\/\d+)?|px|auto|full|screen|fit|min|max|svh|dvh|unset|inherit|cols-\S+|gap-\S+)$/;
|
|
654
|
+
/** Patterns for strings we always exclude even if they match a category. */
|
|
655
|
+
const EXCLUDE_RE = /^(bg-|text-|border-|ring-|from-|to-|via-|fill-|stroke-|shadow-|outline-|accent-|caret-|divide-color|placeholder-)(?!opacity|none|current|inherit|transparent|clip|left|right|center|justify|auto|full|screen|fit|max|min|px|0|[0-9]|\.)/;
|
|
656
|
+
/** Custom design-system class names that should never appear in utility output. */
|
|
657
|
+
const CUSTOM_CLASS_RE = /^(content-cols-grid|container-cols-grid|container-rows-grid|container-row|section-spacing|col-start-2|rtf-|animate-ticker|animate-fade|animate-shape|animate-card|animate-clip|film-grain|h[1-4](Med|plus|l|lbold|MedYellow)?|p[1-3](Med)?|hHome|large-button|nav)(-|$)/;
|
|
658
|
+
function collectSourceFiles(dir) {
|
|
659
|
+
const results = [];
|
|
660
|
+
if (!existsSync(dir))
|
|
661
|
+
return results;
|
|
662
|
+
for (const entry of readdirSync(dir)) {
|
|
663
|
+
const full = join(dir, entry);
|
|
664
|
+
const st = statSync(full);
|
|
665
|
+
if (st.isDirectory()) {
|
|
666
|
+
if (entry === 'node_modules' || entry === '.next' || entry === 'dist')
|
|
667
|
+
continue;
|
|
668
|
+
results.push(...collectSourceFiles(full));
|
|
669
|
+
}
|
|
670
|
+
else if (/\.(tsx?|css)$/.test(entry)) {
|
|
671
|
+
results.push(full);
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
return results;
|
|
675
|
+
}
|
|
676
|
+
function extractClassTokens(files) {
|
|
677
|
+
// Match quoted strings that are plausibly class lists (contain spaces or look like single classes)
|
|
678
|
+
const QUOTED_RE = /(?:className|class)=(?:"([^"]+)"|'([^']+)'|`([^`]+)`)/g;
|
|
679
|
+
const CN_RE = /\bcn\(([^)]{1,500})\)/g;
|
|
680
|
+
const tokens = new Set();
|
|
681
|
+
for (const file of files) {
|
|
682
|
+
const src = readFileSync(file, 'utf-8');
|
|
683
|
+
for (const match of src.matchAll(QUOTED_RE)) {
|
|
684
|
+
const val = match[1] ?? match[2] ?? match[3] ?? '';
|
|
685
|
+
for (const tok of val.split(/\s+/)) {
|
|
686
|
+
if (tok)
|
|
687
|
+
tokens.add(tok);
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
for (const match of src.matchAll(CN_RE)) {
|
|
691
|
+
for (const quoted of (match[1] ?? '').matchAll(/"([^"]+)"|'([^']+)'/g)) {
|
|
692
|
+
const val = quoted[1] ?? quoted[2] ?? '';
|
|
693
|
+
for (const tok of val.split(/\s+/)) {
|
|
694
|
+
if (tok)
|
|
695
|
+
tokens.add(tok);
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
return tokens;
|
|
701
|
+
}
|
|
702
|
+
function stripVariantPrefix(cls) {
|
|
703
|
+
for (const prefix of VARIANT_PREFIXES) {
|
|
704
|
+
if (cls.startsWith(prefix))
|
|
705
|
+
return cls.slice(prefix.length);
|
|
706
|
+
}
|
|
707
|
+
return cls;
|
|
708
|
+
}
|
|
709
|
+
function categorizeSafeClasses(tokens) {
|
|
710
|
+
const result = new Map();
|
|
711
|
+
for (const { label } of SAFE_UTILITY_CATEGORIES) {
|
|
712
|
+
result.set(label, new Set());
|
|
713
|
+
}
|
|
714
|
+
for (const cls of tokens) {
|
|
715
|
+
// Must look like a valid class token
|
|
716
|
+
if (!VALID_CLASS_RE.test(cls))
|
|
717
|
+
continue;
|
|
718
|
+
// Exclude design-system colour classes (already in Colours section)
|
|
719
|
+
if (EXCLUDE_RE.test(stripVariantPrefix(cls)))
|
|
720
|
+
continue;
|
|
721
|
+
if (CUSTOM_CLASS_RE.test(stripVariantPrefix(cls)))
|
|
722
|
+
continue;
|
|
723
|
+
const base = stripVariantPrefix(cls);
|
|
724
|
+
for (const { label, pattern } of SAFE_UTILITY_CATEGORIES) {
|
|
725
|
+
if (pattern.test(base)) {
|
|
726
|
+
// For spacing/sizing categories validate the value portion looks like a
|
|
727
|
+
// Tailwind scale value, not a descriptive word (e.g. reject `my-warning`)
|
|
728
|
+
if (SPACING_CATEGORY_LABELS.has(label)) {
|
|
729
|
+
const valuePart = base.split('-').at(-1) ?? '';
|
|
730
|
+
if (!VALID_SPACING_VALUE_RE.test(valuePart))
|
|
731
|
+
break;
|
|
732
|
+
}
|
|
733
|
+
result.get(label)?.add(cls);
|
|
734
|
+
break;
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
return result;
|
|
739
|
+
}
|
|
740
|
+
/**
|
|
741
|
+
* Expands a single brace-expansion pattern into all concrete strings.
|
|
742
|
+
* E.g. "{,laptop:}py-{4,8}" → ["py-4", "py-8", "laptop:py-4", "laptop:py-8"]
|
|
743
|
+
*/
|
|
744
|
+
function braceExpand(pattern) {
|
|
745
|
+
const start = pattern.indexOf('{');
|
|
746
|
+
if (start === -1)
|
|
747
|
+
return [pattern];
|
|
748
|
+
const end = pattern.indexOf('}', start);
|
|
749
|
+
if (end === -1)
|
|
750
|
+
return [pattern];
|
|
751
|
+
const pre = pattern.slice(0, start);
|
|
752
|
+
const suf = pattern.slice(end + 1);
|
|
753
|
+
return pattern
|
|
754
|
+
.slice(start + 1, end)
|
|
755
|
+
.split(',')
|
|
756
|
+
.flatMap((alt) => braceExpand(pre + alt + suf));
|
|
757
|
+
}
|
|
758
|
+
/** Parse @source inline("...") entries from a CSS string and expand to class tokens. */
|
|
759
|
+
function expandInlineSources(css) {
|
|
760
|
+
const tokens = new Set();
|
|
761
|
+
const re = /@source\s+inline\("([^"]+)"\)/g;
|
|
762
|
+
let m = re.exec(css);
|
|
763
|
+
while (m !== null) {
|
|
764
|
+
for (const cls of braceExpand(m[1])) {
|
|
765
|
+
const t = cls.trim();
|
|
766
|
+
if (t)
|
|
767
|
+
tokens.add(t);
|
|
768
|
+
}
|
|
769
|
+
m = re.exec(css);
|
|
770
|
+
}
|
|
771
|
+
return tokens;
|
|
772
|
+
}
|
|
773
|
+
/**
|
|
774
|
+
* Build the cms-rawhtml-safelist.css content for this project.
|
|
775
|
+
* Uses project breakpoints from tailwind.config.json to generate the correct
|
|
776
|
+
* variant prefixes, and unions the baseline values with scanner-found values
|
|
777
|
+
* to cover project-specific spacing usage.
|
|
778
|
+
*/
|
|
779
|
+
function buildSafelistCss(config, scannerTokens) {
|
|
780
|
+
const sizes = config.sizes ?? {};
|
|
781
|
+
// Breakpoint names in config order, skipping 'mobile' (no prefix)
|
|
782
|
+
const bpNames = Object.entries(sizes)
|
|
783
|
+
.filter(([name, s]) => name !== 'mobile' && s.breakpoint !== undefined)
|
|
784
|
+
.map(([name]) => name);
|
|
785
|
+
// e.g. "{,tablet:,laptop:}" or "{,laptop:}" — empty string = base class (no prefix)
|
|
786
|
+
const vp = bpNames.length > 0 ? `{,${bpNames.map((n) => `${n}:`).join(',')}}` : '';
|
|
787
|
+
// Extract numeric values the scanner found for a given property prefix
|
|
788
|
+
function scannerValuesFor(propPrefix) {
|
|
789
|
+
const vals = new Set();
|
|
790
|
+
for (const tok of scannerTokens) {
|
|
791
|
+
const base = stripVariantPrefix(tok);
|
|
792
|
+
if (base.startsWith(`${propPrefix}-`)) {
|
|
793
|
+
const val = base.slice(propPrefix.length + 1);
|
|
794
|
+
if (/^\d+(\.\d+)?$/.test(val))
|
|
795
|
+
vals.add(val);
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
return [...vals];
|
|
799
|
+
}
|
|
800
|
+
// Curated baseline values per property (Tailwind default spacing scale subset)
|
|
801
|
+
const BASELINE = {
|
|
802
|
+
py: ['2', '4', '6', '8', '10', '12', '16', '20', '24'],
|
|
803
|
+
px: ['2', '4', '6', '8', '10', '12', '16', '20'],
|
|
804
|
+
pt: ['2', '4', '6', '8', '10', '12', '16', '20', '24'],
|
|
805
|
+
pb: ['2', '4', '6', '8', '10', '12', '16', '20', '24'],
|
|
806
|
+
p: ['2', '4', '6', '8', '10', '12'],
|
|
807
|
+
gap: ['1', '2', '3', '4', '5', '6', '8', '10', '12', '16'],
|
|
808
|
+
'gap-y': ['2', '4', '6', '8', '10', '12', '16'],
|
|
809
|
+
'gap-x': ['2', '4', '6', '8', '10', '12'],
|
|
810
|
+
'space-y': ['2', '4', '6', '8', '10', '12', '16'],
|
|
811
|
+
'space-x': ['2', '4', '6', '8', '10', '12'],
|
|
812
|
+
};
|
|
813
|
+
// Properties where responsive variants are meaningful for layout
|
|
814
|
+
const RESPONSIVE = new Set(['py', 'px', 'gap', 'gap-y', 'gap-x', 'space-y', 'space-x']);
|
|
815
|
+
const lines = [
|
|
816
|
+
'/* Auto-generated by cms-generate-html-style-guide — do not edit by hand */',
|
|
817
|
+
'/* Regenerate: pnpm cms-generate-html-style-guide */',
|
|
818
|
+
'',
|
|
819
|
+
'/*',
|
|
820
|
+
' * Forces common spacing/gap utilities into the CSS bundle so they can be',
|
|
821
|
+
' * safely used in HtmlComponent rawHtml fields (which Tailwind JIT never scans).',
|
|
822
|
+
' *',
|
|
823
|
+
' * Setup (one time per app):',
|
|
824
|
+
` * Add to src/app/globals.css: @import "../generated/cms-rawhtml-safelist.css"`,
|
|
825
|
+
' */',
|
|
826
|
+
'',
|
|
827
|
+
];
|
|
828
|
+
for (const [prop, baseline] of Object.entries(BASELINE)) {
|
|
829
|
+
// Union baseline with scanner-found values, sort numerically
|
|
830
|
+
const all = new Set([...baseline, ...scannerValuesFor(prop)]);
|
|
831
|
+
const values = [...all].sort((a, b) => Number(a) - Number(b));
|
|
832
|
+
const valBrace = `{${values.join(',')}}`;
|
|
833
|
+
const prefix = RESPONSIVE.has(prop) && vp ? vp : '';
|
|
834
|
+
lines.push(`@source inline("${prefix}${prop}-${valBrace}");`);
|
|
835
|
+
}
|
|
836
|
+
return `${lines.join('\n')}\n`;
|
|
837
|
+
}
|
|
838
|
+
function buildSafeUtilitiesSection(allTokens) {
|
|
839
|
+
const grouped = categorizeSafeClasses(allTokens);
|
|
840
|
+
const lines = [
|
|
841
|
+
'## Confirmed Safe Tailwind Utilities',
|
|
842
|
+
'',
|
|
843
|
+
'These classes are **guaranteed to be in the CSS bundle** — either found in compiled source',
|
|
844
|
+
'files or explicitly included in the generated `src/generated/cms-rawhtml-safelist.css`.',
|
|
845
|
+
'Use them freely in `rawHtml`.',
|
|
846
|
+
'',
|
|
847
|
+
'> **Setup required (one time):** Add `@import "../generated/cms-rawhtml-safelist.css"` to',
|
|
848
|
+
'> `src/app/globals.css`. Without this import the safelist classes are not compiled.',
|
|
849
|
+
'',
|
|
850
|
+
'> **Any class NOT listed here may not be compiled.** For responsive layout not in this list,',
|
|
851
|
+
'> use `customCss` with `@media` queries instead.',
|
|
852
|
+
'',
|
|
853
|
+
];
|
|
854
|
+
let totalCount = 0;
|
|
855
|
+
for (const { label } of SAFE_UTILITY_CATEGORIES) {
|
|
856
|
+
const classes = grouped.get(label);
|
|
857
|
+
if (!classes || classes.size === 0)
|
|
858
|
+
continue;
|
|
859
|
+
const sorted = [...classes].sort();
|
|
860
|
+
totalCount += sorted.length;
|
|
861
|
+
lines.push(`### ${label}`);
|
|
862
|
+
lines.push('');
|
|
863
|
+
lines.push(sorted.map((c) => `\`${c}\``).join(' '));
|
|
864
|
+
lines.push('');
|
|
865
|
+
}
|
|
866
|
+
if (totalCount === 0) {
|
|
867
|
+
lines.push('_No confirmed utility classes found — ensure source files are accessible._');
|
|
868
|
+
}
|
|
869
|
+
return lines.join('\n');
|
|
493
870
|
}
|
|
494
871
|
// ---------------------------------------------------------------------------
|
|
495
872
|
// Main
|
|
@@ -517,11 +894,27 @@ function main() {
|
|
|
517
894
|
const utilities = extractUtilities(globalsCss);
|
|
518
895
|
const rtfClasses = extractRtfClasses(globalsCss);
|
|
519
896
|
const rootVars = extractRootVars(globalsCss);
|
|
897
|
+
// Scan source files for confirmed-safe class tokens
|
|
898
|
+
const monorepoRoot = join(appRoot, '../..');
|
|
899
|
+
const scanDirs = [join(appRoot, 'src'), join(monorepoRoot, 'packages/core-ui/src')];
|
|
900
|
+
const sourceFiles = scanDirs.flatMap(collectSourceFiles);
|
|
901
|
+
const scannerTokens = extractClassTokens(sourceFiles);
|
|
902
|
+
// Generate the per-project safelist CSS (uses project breakpoints + scanner values)
|
|
903
|
+
const safelistCss = buildSafelistCss(config, scannerTokens);
|
|
904
|
+
const safelistDir = join(appRoot, 'src/generated');
|
|
905
|
+
const safelistPath = join(safelistDir, 'cms-rawhtml-safelist.css');
|
|
906
|
+
mkdirSync(safelistDir, { recursive: true });
|
|
907
|
+
writeFileSync(safelistPath, safelistCss);
|
|
908
|
+
// Expand safelist tokens and merge with scanner tokens
|
|
909
|
+
const safelistTokens = expandInlineSources(safelistCss);
|
|
910
|
+
const allTokens = new Set([...scannerTokens, ...safelistTokens]);
|
|
520
911
|
console.log(` Colours: ${Object.keys(config.colorOptions ?? {}).length}`);
|
|
521
912
|
console.log(` Typography styles: ${Object.keys(config.fontTable?.styles ?? {}).length}`);
|
|
522
913
|
console.log(` Utilities: ${utilities.length}`);
|
|
523
914
|
console.log(` RTF classes: ${rtfClasses.length}`);
|
|
524
915
|
console.log(` CSS variables: ${rootVars.length}`);
|
|
916
|
+
console.log(` Safelist classes: ${safelistTokens.size} (wrote ${safelistPath})`);
|
|
917
|
+
console.log(` ℹ One-time setup: add @import "../generated/cms-rawhtml-safelist.css" to src/app/globals.css`);
|
|
525
918
|
// Build sections
|
|
526
919
|
const now = new Date().toISOString().split('T')[0];
|
|
527
920
|
const sections = [
|
|
@@ -571,6 +964,10 @@ function main() {
|
|
|
571
964
|
'',
|
|
572
965
|
'---',
|
|
573
966
|
'',
|
|
967
|
+
buildSafeUtilitiesSection(allTokens),
|
|
968
|
+
'',
|
|
969
|
+
'---',
|
|
970
|
+
'',
|
|
574
971
|
buildPatternsSection(config),
|
|
575
972
|
];
|
|
576
973
|
// Include CSS variables if any interesting ones found
|
|
@@ -581,11 +978,23 @@ function main() {
|
|
|
581
978
|
sections.push('');
|
|
582
979
|
sections.push('| Variable | Default value |');
|
|
583
980
|
sections.push('|----------|---------------|');
|
|
981
|
+
// De-duplicate by name — keep the first (default/mobile) value; note responsive overrides
|
|
982
|
+
const seenVars = new Map();
|
|
983
|
+
const multipleVars = new Set();
|
|
584
984
|
for (const { name, value } of interestingVars) {
|
|
585
|
-
|
|
985
|
+
if (seenVars.has(name)) {
|
|
986
|
+
multipleVars.add(name);
|
|
987
|
+
}
|
|
988
|
+
else {
|
|
989
|
+
seenVars.set(name, value);
|
|
990
|
+
}
|
|
991
|
+
}
|
|
992
|
+
for (const [name, value] of seenVars) {
|
|
993
|
+
const note = multipleVars.has(name) ? ' *(has responsive override)*' : '';
|
|
994
|
+
sections.push(`| \`${name}\` | \`${value}\`${note} |`);
|
|
586
995
|
}
|
|
587
996
|
}
|
|
588
|
-
const output = sections.join('\n')
|
|
997
|
+
const output = `${sections.join('\n')}\n`;
|
|
589
998
|
// Write output
|
|
590
999
|
const outputDir = join(appRoot, 'docs/cms-guidelines');
|
|
591
1000
|
mkdirSync(outputDir, { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cms-generate-html-style-guide.js","sourceRoot":"","sources":["../src/cms-generate-html-style-guide.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cms-generate-html-style-guide.js","sourceRoot":"","sources":["../src/cms-generate-html-style-guide.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@se-studio/project-build",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.120",
|
|
4
4
|
"description": "Build tools and management scripts for SE Studio projects",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"change-case": "^5.4.4",
|
|
68
68
|
"chroma-js": "^3.2.0",
|
|
69
69
|
"contentful-management": "^12.2.0",
|
|
70
|
-
"dotenv": "^17.
|
|
70
|
+
"dotenv": "^17.4.0"
|
|
71
71
|
},
|
|
72
72
|
"devDependencies": {
|
|
73
73
|
"@types/chroma-js": "^3.1.2",
|
|
@@ -4,7 +4,7 @@ description: Guidelines for authoring HTML content in HtmlComponent CMS entries.
|
|
|
4
4
|
license: Private
|
|
5
5
|
metadata:
|
|
6
6
|
author: se-core-product
|
|
7
|
-
version: "1.
|
|
7
|
+
version: "1.1.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# HtmlComponent Authoring Guide
|
|
@@ -21,7 +21,7 @@ metadata:
|
|
|
21
21
|
docs/cms-guidelines/html-component-style-guide.md
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
This file contains the exact colour names, typography class names, grid configuration, and custom utilities available for that specific project. It is derived from `tailwind.config.json
|
|
24
|
+
This file contains the exact colour names, typography class names, grid configuration, confirmed-safe Tailwind utilities, and custom utilities available for that specific project. It is derived from `tailwind.config.json`, `globals.css`, and the compiled source files — always consult it before writing any HTML.
|
|
25
25
|
|
|
26
26
|
If the file does not exist, generate it first:
|
|
27
27
|
|
|
@@ -30,15 +30,27 @@ If the file does not exist, generate it first:
|
|
|
30
30
|
pnpm cms-generate-html-style-guide
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
+
**Ensure the rawHtml safelist is active.** The style guide generator also writes `src/generated/cms-rawhtml-safelist.css` containing `@source inline(...)` directives that force common spacing utilities into the compiled CSS bundle. This file must be imported once in `src/app/globals.css`:
|
|
34
|
+
|
|
35
|
+
```css
|
|
36
|
+
/* Add this line near the top of globals.css */
|
|
37
|
+
@import "../generated/cms-rawhtml-safelist.css";
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Without this import the safelist has no effect and the spacing classes in the Confirmed Safe list may not be compiled.
|
|
41
|
+
|
|
42
|
+
**Keep your working files in the project directory.** Write your `component.html`, `component.css`, and `component.js` files to a persistent location such as `/home/nick/test/cmsedit/<page-name>/` — not to `/tmp`. Files in `/tmp` are lost between sessions and cannot be reviewed or version-controlled.
|
|
43
|
+
|
|
33
44
|
---
|
|
34
45
|
|
|
35
46
|
## HtmlComponent Fields
|
|
36
47
|
|
|
37
48
|
| Field | Required | Type | Purpose |
|
|
38
49
|
|-------|----------|------|---------|
|
|
50
|
+
| `cmsLabel` | ✓ | Text | Internal label. **Set this immediately after creating the entry** — use a descriptive value like `"meridian-pricing-grid"` or `"demo-hero"`. The Contentful UI shows only this name; defaults like "New Hero" are useless at scale. |
|
|
39
51
|
| `rawHtml` | ✓ | Text | The HTML markup. Use Tailwind classes; never inline `style=` for colours/typography/layout. |
|
|
40
|
-
| `customCss` | — | Text | Scoped CSS. Rules are automatically prefixed with `[data-hc-id="<id>"]` — they cannot pollute other components. |
|
|
41
|
-
| `customJs` | — | Text | JavaScript loaded via Next.js `<Script>`. Use sparingly. |
|
|
52
|
+
| `customCss` | — | Text | Scoped CSS. Rules are automatically prefixed with `[data-hc-id="<id>"]` — they cannot pollute other components. Use for responsive layout (`@media` queries), `:hover`, `::before`/`::after`, and any utility class not in the confirmed-safe list. |
|
|
53
|
+
| `customJs` | — | Text | JavaScript loaded via Next.js `<Script>`. A `hcRoot` variable pointing to this component's root element is automatically injected — use it to scope all queries. Use sparingly. |
|
|
42
54
|
| `markdownContent` | — | Text | Plain text for search indexing. **Always fill this** so the component appears in site search. |
|
|
43
55
|
| `isHero` | — | Boolean | `true` if the HTML contains an `<h1>`. Moves this block to the top of the page content flow. |
|
|
44
56
|
| `fullWidth` | — | Boolean | `true` for edge-to-edge (full-bleed) layouts that break out of the column grid. |
|
|
@@ -62,7 +74,7 @@ pnpm cms-generate-html-style-guide
|
|
|
62
74
|
- ❌ `class="text-[48px] font-semibold"`
|
|
63
75
|
- ✓ `class="h2"`
|
|
64
76
|
|
|
65
|
-
4. **
|
|
77
|
+
4. **Use the two-layer grid structure.** Every section needs an outer `container-cols-grid` wrapper (for page margins) and an inner `content-cols-grid` wrapper (for the 12-column content grid). See [Grid & Layout](#grid--layout).
|
|
66
78
|
|
|
67
79
|
---
|
|
68
80
|
|
|
@@ -103,33 +115,60 @@ Pick from the named type styles in the style guide. Apply directly to the elemen
|
|
|
103
115
|
</div>
|
|
104
116
|
```
|
|
105
117
|
|
|
106
|
-
Available RTF classes: `rtf-standard`, `rtf-article`, `rtf-article-right`, `rtf-legal`.
|
|
118
|
+
Available RTF classes: `rtf-standard`, `rtf-article`, `rtf-article-right`, `rtf-legal`, `rtf-embedded-entry`.
|
|
107
119
|
|
|
108
120
|
---
|
|
109
121
|
|
|
110
122
|
## Grid & Layout
|
|
111
123
|
|
|
112
|
-
HtmlComponent
|
|
124
|
+
Every `HtmlComponent` section uses a **two-layer grid structure**. Without the outer layer, content has no page margins and elements stretch edge-to-edge.
|
|
113
125
|
|
|
114
126
|
```html
|
|
115
|
-
<!--
|
|
116
|
-
<div class="
|
|
117
|
-
<div class="col-
|
|
118
|
-
<!-- content -->
|
|
127
|
+
<!-- Required boilerplate for every section -->
|
|
128
|
+
<div class="w-full container-cols-grid container-rows-grid container-row-6-12 bg-dark text-light">
|
|
129
|
+
<div class="col-start-2 col-span-1 row-start-2 row-span-4 content-cols-grid">
|
|
130
|
+
<!-- col-span-* / laptop:col-start-* content here -->
|
|
119
131
|
</div>
|
|
120
132
|
</div>
|
|
121
133
|
```
|
|
122
134
|
|
|
123
|
-
|
|
135
|
+
**How the layers work:**
|
|
136
|
+
|
|
137
|
+
| Layer | Classes | Role |
|
|
138
|
+
|-------|---------|------|
|
|
139
|
+
| Outer | `container-cols-grid` | 3-column grid: `[margin \| content \| margin]`. Background colour and edge-to-edge visuals go here. |
|
|
140
|
+
| Outer | `container-rows-grid container-row-6-12` | Adds vertical spacing rows. Replace `container-row-6-12` with the spacing value you need (see table below). |
|
|
141
|
+
| Inner | `col-start-2 col-span-1` | Places the inner div in the centre content column (skips the margin columns). |
|
|
142
|
+
| Inner | `row-start-2 row-span-4` | Places the inner div in the content rows (skips the spacing rows). |
|
|
143
|
+
| Inner | `content-cols-grid` | Creates the 12-column content grid. `col-span-*` / `laptop:col-start-*` work inside here. |
|
|
144
|
+
|
|
145
|
+
### Vertical spacing values
|
|
146
|
+
|
|
147
|
+
Use `container-row-6-*` classes for bottom spacing. The values below all appear in the project's compiled source files and are guaranteed to be in the CSS bundle (confirmed via Tailwind JIT source scan).
|
|
148
|
+
|
|
149
|
+
| Class | Bottom space | Use for |
|
|
150
|
+
|-------|-------------|---------|
|
|
151
|
+
| `container-row-6-6` | 24px | Tight spacing |
|
|
152
|
+
| `container-row-6-8` | 32px | |
|
|
153
|
+
| `container-row-6-10` | 40px | |
|
|
154
|
+
| `container-row-6-12` | 48px | **Standard default** |
|
|
155
|
+
| `container-row-6-20` | 80px | Generous spacing |
|
|
156
|
+
| `container-row-6-24` | 96px | Hero / large sections |
|
|
157
|
+
|
|
158
|
+
For top spacing, source-confirmed values are `container-row-1-10` (40px), `container-row-1-24` (96px), `container-row-1-40` (160px).
|
|
159
|
+
|
|
160
|
+
> All values in the tables above appear in the project's source files and are compiled by Tailwind JIT. If you need a value not listed, use `padding-top` / `padding-bottom` in `customCss` instead — do not guess at unlisted `container-row-*` values as they may not be compiled.
|
|
161
|
+
|
|
162
|
+
### Column spans (inside the inner div)
|
|
124
163
|
|
|
125
164
|
| Use | Classes |
|
|
126
165
|
|-----|---------|
|
|
127
166
|
| Full width | `col-span-full` |
|
|
128
|
-
| Centered (one column margin) | `laptop:col-start-2 laptop:col-span-10` |
|
|
167
|
+
| Centered (one column margin each side) | `laptop:col-start-2 laptop:col-span-10` |
|
|
129
168
|
| Left half (text) | `laptop:col-start-2 laptop:col-span-4` |
|
|
130
169
|
| Right half (visual) | `laptop:col-start-7 laptop:col-span-5` |
|
|
131
170
|
|
|
132
|
-
For **full-bleed** content (background extends edge to edge), set `fullWidth: true` on the entry. The grid
|
|
171
|
+
For **full-bleed** content (background extends edge to edge), set `fullWidth: true` on the entry instead of using the two-layer structure. The outer grid is removed and you control the full viewport width.
|
|
133
172
|
|
|
134
173
|
---
|
|
135
174
|
|
|
@@ -144,45 +183,88 @@ All breakpoints are mobile-first. Use prefixes to override at larger sizes:
|
|
|
144
183
|
| `laptop:` | 1024px |
|
|
145
184
|
| `desktop:` | 1440px |
|
|
146
185
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Tailwind JIT Constraint
|
|
189
|
+
|
|
190
|
+
> **Critical — read before writing any classes.**
|
|
191
|
+
|
|
192
|
+
Tailwind only includes CSS for classes it finds in compiled source files (`.tsx`, `.ts`, `.css`). Classes written inside `rawHtml` CMS strings are **never scanned** — if a class isn't already used somewhere in the codebase, it silently has no effect.
|
|
193
|
+
|
|
194
|
+
**Rule: only use `tablet:` / `laptop:` prefixes that appear in the project style guide's Confirmed Safe Tailwind Utilities section** — they are proven to be in the compiled bundle. For any responsive behaviour not listed there, use `customCss` with `@media` queries instead.
|
|
195
|
+
|
|
196
|
+
For non-responsive utility classes, check the **Confirmed Safe Tailwind Utilities** section in the project style guide (`docs/cms-guidelines/html-component-style-guide.md`). These are extracted from the compiled source and are guaranteed to work. If a class isn't listed, use `customCss`.
|
|
150
197
|
|
|
151
198
|
---
|
|
152
199
|
|
|
153
200
|
## Scoped CSS (`customCss`)
|
|
154
201
|
|
|
155
|
-
Use `customCss`
|
|
202
|
+
Use `customCss` for:
|
|
203
|
+
- **Responsive layout** — `@media` queries for flex direction, grid column counts, show/hide (see Tailwind JIT constraint above)
|
|
204
|
+
- Complex `:hover`, `::before`/`::after` interactions impossible with Tailwind
|
|
205
|
+
- Any utility class not in the project's confirmed-safe list
|
|
156
206
|
|
|
157
|
-
Rules are automatically scoped to this entry's `data-hc-id` attribute — write selectors
|
|
207
|
+
Rules are automatically scoped to this entry's `data-hc-id` attribute — write selectors relative to the component root:
|
|
158
208
|
|
|
159
209
|
```css
|
|
160
|
-
/*
|
|
210
|
+
/* Responsive layout — use @media instead of tablet:/laptop: in rawHtml */
|
|
211
|
+
@media (min-width: 768px) {
|
|
212
|
+
.my-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
|
|
213
|
+
}
|
|
214
|
+
@media (min-width: 1024px) {
|
|
215
|
+
.my-card { flex-direction: row; }
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/* Hover and pseudo-elements */
|
|
161
219
|
.my-card:hover {
|
|
162
220
|
transform: translateY(-4px);
|
|
163
221
|
transition: transform 0.2s ease;
|
|
164
222
|
}
|
|
165
|
-
|
|
166
|
-
::before {
|
|
167
|
-
content: '';
|
|
168
|
-
display: block;
|
|
169
|
-
}
|
|
170
223
|
```
|
|
171
224
|
|
|
172
225
|
Never redeclare colours or typography in `customCss` — those already exist as Tailwind classes.
|
|
173
226
|
|
|
174
227
|
---
|
|
175
228
|
|
|
229
|
+
## Custom JavaScript (`customJs`)
|
|
230
|
+
|
|
231
|
+
The renderer automatically injects a `hcRoot` variable pointing to this component's own `[data-hc-id]` element before your script runs. **Always use `hcRoot` as the root for DOM queries** — never `document.querySelector('[data-hc-id]')`, which matches the first component on the page, not this one.
|
|
232
|
+
|
|
233
|
+
```js
|
|
234
|
+
// ✓ Correct — hcRoot is scoped to this component automatically
|
|
235
|
+
var btns = hcRoot.querySelectorAll('.my-btn');
|
|
236
|
+
btns.forEach(function (btn) {
|
|
237
|
+
btn.addEventListener('click', function () {
|
|
238
|
+
// toggle state…
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
// ✗ Wrong — querySelector matches the FIRST [data-hc-id] on the page
|
|
243
|
+
var section = document.querySelector('[data-hc-id]');
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Rules:**
|
|
247
|
+
- Use `hcRoot.querySelector` / `hcRoot.querySelectorAll` for all DOM lookups.
|
|
248
|
+
- Keep scripts small and self-contained — no module imports, no global state.
|
|
249
|
+
- Avoid `document.getElementById` unless the ID is guaranteed unique across the whole page.
|
|
250
|
+
- Default `scriptStrategy` is `afterInteractive` — runs after page hydration. Use `lazyOnload` for non-critical third-party widgets.
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
176
254
|
## Common Patterns
|
|
177
255
|
|
|
256
|
+
All patterns use the mandatory two-layer grid structure.
|
|
257
|
+
|
|
178
258
|
### Centered text block
|
|
179
259
|
|
|
180
260
|
```html
|
|
181
|
-
<div class="
|
|
182
|
-
<div class="col-
|
|
183
|
-
<
|
|
184
|
-
|
|
185
|
-
<
|
|
261
|
+
<div class="w-full container-cols-grid container-rows-grid container-row-6-12">
|
|
262
|
+
<div class="col-start-2 col-span-1 row-start-2 row-span-4 content-cols-grid">
|
|
263
|
+
<div class="col-span-full laptop:col-start-2 laptop:col-span-10 flex flex-col gap-6">
|
|
264
|
+
<h2 class="h2">Section Heading</h2>
|
|
265
|
+
<div class="rtf-standard">
|
|
266
|
+
<p>Body copy goes here.</p>
|
|
267
|
+
</div>
|
|
186
268
|
</div>
|
|
187
269
|
</div>
|
|
188
270
|
</div>
|
|
@@ -191,39 +273,52 @@ Never redeclare colours or typography in `customCss` — those already exist as
|
|
|
191
273
|
### Two-column (text + image)
|
|
192
274
|
|
|
193
275
|
```html
|
|
194
|
-
<div class="
|
|
195
|
-
<div class="col-
|
|
196
|
-
<
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
<
|
|
276
|
+
<div class="w-full container-cols-grid container-rows-grid container-row-6-12">
|
|
277
|
+
<div class="col-start-2 col-span-1 row-start-2 row-span-4 content-cols-grid">
|
|
278
|
+
<div class="col-span-full laptop:col-start-2 laptop:col-span-4 flex flex-col gap-6">
|
|
279
|
+
<h2 class="h2">Heading</h2>
|
|
280
|
+
<p class="p1">Supporting description.</p>
|
|
281
|
+
</div>
|
|
282
|
+
<div class="col-span-full laptop:col-start-7 laptop:col-span-5">
|
|
283
|
+
<img src="..." alt="..." class="w-full rounded-lg" />
|
|
284
|
+
</div>
|
|
201
285
|
</div>
|
|
202
286
|
</div>
|
|
203
287
|
```
|
|
204
288
|
|
|
289
|
+
Note: the two columns stack on mobile by default. To flip to side-by-side on tablet, use `customCss`:
|
|
290
|
+
```css
|
|
291
|
+
@media (min-width: 768px) {
|
|
292
|
+
/* If you need column layout earlier than laptop, use customCss @media */
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
205
296
|
### Coloured card
|
|
206
297
|
|
|
207
298
|
```html
|
|
208
|
-
<div class="
|
|
209
|
-
<div class="col-
|
|
210
|
-
<div class="
|
|
211
|
-
<
|
|
212
|
-
|
|
299
|
+
<div class="w-full container-cols-grid container-rows-grid container-row-6-12">
|
|
300
|
+
<div class="col-start-2 col-span-1 row-start-2 row-span-4 content-cols-grid">
|
|
301
|
+
<div class="col-span-full laptop:col-start-2 laptop:col-span-10">
|
|
302
|
+
<div class="bg-orange text-dark p-8 rounded-lg flex flex-col gap-4">
|
|
303
|
+
<h3 class="h3">Card Title</h3>
|
|
304
|
+
<p class="p2">Supporting text.</p>
|
|
305
|
+
</div>
|
|
213
306
|
</div>
|
|
214
307
|
</div>
|
|
215
308
|
</div>
|
|
216
309
|
```
|
|
217
310
|
|
|
218
|
-
### Hero (set `isHero: true`)
|
|
311
|
+
### Hero (set `isHero: true`, `fullWidth: true`)
|
|
312
|
+
|
|
313
|
+
With `fullWidth: true` the outer grid is removed — you control the full viewport width directly:
|
|
219
314
|
|
|
220
315
|
```html
|
|
221
|
-
<!-- fullWidth: true →
|
|
222
|
-
<div class="bg-dark text-light">
|
|
223
|
-
<div class="content-cols-grid py-16
|
|
316
|
+
<!-- fullWidth: true → no outer grid, you own the full width -->
|
|
317
|
+
<div class="bg-dark text-light w-full">
|
|
318
|
+
<div class="content-cols-grid py-16">
|
|
224
319
|
<div class="col-span-full laptop:col-start-2 laptop:col-span-10 flex flex-col gap-8">
|
|
225
320
|
<h1 class="h1">Hero Heading</h1>
|
|
226
|
-
<p class="p1
|
|
321
|
+
<p class="p1">Subtitle or intro text.</p>
|
|
227
322
|
</div>
|
|
228
323
|
</div>
|
|
229
324
|
</div>
|
|
@@ -231,16 +326,63 @@ Never redeclare colours or typography in `customCss` — those already exist as
|
|
|
231
326
|
|
|
232
327
|
---
|
|
233
328
|
|
|
329
|
+
## Images
|
|
330
|
+
|
|
331
|
+
**Do not hardcode Contentful CDN URLs in `rawHtml`.** If the asset is deleted or re-uploaded, the image silently breaks and the CMS has no record of the dependency.
|
|
332
|
+
|
|
333
|
+
For images in `rawHtml`, use a plain `<img>` tag with Contentful's image transformation API for basic optimisation:
|
|
334
|
+
|
|
335
|
+
```html
|
|
336
|
+
<img
|
|
337
|
+
src="https://images.ctfassets.net/…/image.jpg?w=800&fm=webp&fit=fill"
|
|
338
|
+
srcset="
|
|
339
|
+
https://images.ctfassets.net/…/image.jpg?w=400&fm=webp&fit=fill 400w,
|
|
340
|
+
https://images.ctfassets.net/…/image.jpg?w=800&fm=webp&fit=fill 800w,
|
|
341
|
+
https://images.ctfassets.net/…/image.jpg?w=1200&fm=webp&fit=fill 1200w
|
|
342
|
+
"
|
|
343
|
+
sizes="(max-width: 768px) 100vw, 50vw"
|
|
344
|
+
alt="Descriptive alt text"
|
|
345
|
+
class="w-full rounded-lg"
|
|
346
|
+
loading="lazy"
|
|
347
|
+
/>
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
**Trade-off:** A plain `<img>` does not use Next.js `<Image>` optimisation (no automatic WebP conversion, no LQIP placeholder, no automatic `srcset`). The Contentful image API partially compensates — append `?fm=webp` to serve WebP, `?w=N` to resize, and `?fit=fill` to crop. Always add `loading="lazy"` manually.
|
|
351
|
+
|
|
352
|
+
**Rules:**
|
|
353
|
+
- Always include a descriptive `alt` attribute. Decorative images use `alt=""`.
|
|
354
|
+
- Prefer managing images via a CMS asset field where possible — that creates a tracked dependency. Use `rawHtml` images only for layout-specific embedding that can't be achieved via component fields.
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
## Iteration Expectation
|
|
359
|
+
|
|
360
|
+
**Authoring `rawHtml` without live preview requires iteration.** Expect 4–8 rounds of save → screenshot → fix for a multi-section page. This is normal, not a sign of failure. Approach each round with a focus:
|
|
361
|
+
|
|
362
|
+
1. **Structure** — does the two-layer grid produce correct page margins?
|
|
363
|
+
2. **Spacing** — are sections spaced correctly vertically?
|
|
364
|
+
3. **Responsive** — do cards/columns lay out correctly at tablet and laptop widths?
|
|
365
|
+
4. **Interactions** — if there's JavaScript, does it work correctly?
|
|
366
|
+
|
|
367
|
+
---
|
|
368
|
+
|
|
234
369
|
## Checklist Before Saving
|
|
235
370
|
|
|
236
|
-
|
|
371
|
+
> **Visual verification is mandatory**, not optional. Tailwind JIT failures and grid structure issues are invisible without a rendered view. Take a screenshot and check before marking done.
|
|
372
|
+
|
|
373
|
+
- [ ] `cmsLabel` is set to a descriptive, unique value (not the default "New Hero" etc.)
|
|
374
|
+
- [ ] `rawHtml` uses only confirmed-safe Tailwind classes — no inline `style=` for colours/typography/layout
|
|
237
375
|
- [ ] All colour references use named classes (`text-dark`, `bg-orange`), not hex values
|
|
238
376
|
- [ ] Typography uses named classes (`h2`, `p1`), not raw `text-[Npx]`
|
|
239
|
-
- [ ] Content
|
|
377
|
+
- [ ] Content uses the two-layer grid structure (`container-cols-grid` outer + `content-cols-grid` inner)
|
|
378
|
+
- [ ] Responsive layout not covered by the Confirmed Safe list uses `customCss` with `@media` queries (not raw `tablet:` / `laptop:` prefixes in `rawHtml`)
|
|
379
|
+
- [ ] Any Tailwind utility class not in the confirmed-safe list uses `customCss` instead
|
|
240
380
|
- [ ] `markdownContent` is filled with the plain-text equivalent for search indexing
|
|
241
381
|
- [ ] `isHero: true` if the HTML contains an `<h1>`
|
|
242
382
|
- [ ] `fullWidth: true` if the design needs an edge-to-edge background
|
|
243
|
-
- [ ]
|
|
383
|
+
- [ ] **Took a screenshot and reviewed the render — no layout bugs visible**
|
|
384
|
+
- [ ] **If interactive: tested the interaction in browser (toggles, tabs, JS)**
|
|
385
|
+
- [ ] Source files (`component.html`, `component.css`, `component.js`) saved to project directory, not `/tmp`
|
|
244
386
|
|
|
245
387
|
---
|
|
246
388
|
|
|
@@ -104,7 +104,7 @@ cms-edit set @p0 bottomContent @c4 --links --append
|
|
|
104
104
|
|
|
105
105
|
**Rich text fields** (body, additionalCopy):
|
|
106
106
|
```bash
|
|
107
|
-
|
|
107
|
+
printf '## Why it matters\n\nOur platform helps teams **move faster** with [confidence](https://example.com).\n\n- Instant setup\n- No code required\n- 99.9%% uptime\n' | cms-edit rtf @c1 body -
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
Markdown support:
|
|
@@ -116,13 +116,23 @@ Markdown support:
|
|
|
116
116
|
- `` `inline code` ``
|
|
117
117
|
- `---` for horizontal rule
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
For any content with multiple paragraphs or newlines, use `printf` piped to stdin — `\n` in a double-quoted shell string is **not** interpreted as a newline by bash:
|
|
120
120
|
|
|
121
121
|
```bash
|
|
122
|
+
# Correct — printf interprets \n properly
|
|
123
|
+
printf '## Why it matters\n\nOur platform helps teams **move faster**.\n\n- Instant setup\n- No code required\n' | cms-edit rtf @c1 body -
|
|
124
|
+
|
|
125
|
+
# Also correct — file input
|
|
122
126
|
cms-edit rtf @c1 body --file path/to/file.md
|
|
123
127
|
cms-edit rtf @c1 body - < path/to/file.md
|
|
124
128
|
```
|
|
125
129
|
|
|
130
|
+
Single-line content (no newlines) can be passed as a quoted argument directly:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
cms-edit rtf @c1 body "Simple single-paragraph body text with **bold**."
|
|
134
|
+
```
|
|
135
|
+
|
|
126
136
|
**Surgical rich text replace** (compliance / quidget tokens — does not re-import the whole field):
|
|
127
137
|
|
|
128
138
|
- Matching is **per Contentful text node** only. If the author split a phrase with bold (e.g. `**Annual fee: **$95`), the string `Annual fee: $95` will **not** match as one piece; use a shorter `--find` or full `rtf … --file`.
|
|
@@ -377,8 +387,8 @@ cms-edit read @c0
|
|
|
377
387
|
# 4. Update the heading
|
|
378
388
|
cms-edit set @c0 heading "We build for the future"
|
|
379
389
|
|
|
380
|
-
# 5. Update the body copy
|
|
381
|
-
|
|
390
|
+
# 5. Update the body copy (use printf for multiline content)
|
|
391
|
+
printf '## Our mission\n\nWe help companies **ship faster** and _smarter_.\n\n- Founded in 2018\n- 500+ clients\n- [Join us](/careers)\n' | cms-edit rtf @c0 body -
|
|
382
392
|
|
|
383
393
|
# 6. Review
|
|
384
394
|
cms-edit diff
|
|
@@ -4,7 +4,11 @@ Use this skill when editing **rich text** fields (body, additionalCopy) and inse
|
|
|
4
4
|
|
|
5
5
|
## Rich text (rtf)
|
|
6
6
|
|
|
7
|
-
- **Replace** body with Markdown: `cms-edit rtf @c1 body "
|
|
7
|
+
- **Replace** body with Markdown (single paragraph, no newlines): `cms-edit rtf @c1 body "Simple body with **bold** and [link](https://example.com)."`
|
|
8
|
+
- **Multiline content** — use `printf` piped to stdin; `\n` in a double-quoted shell string is **not** a newline in bash:
|
|
9
|
+
```bash
|
|
10
|
+
printf '## Heading\n\nParagraph with **bold** and [link](https://example.com).\n' | cms-edit rtf @c1 body -
|
|
11
|
+
```
|
|
8
12
|
- Use `--file path/to/file.md` or stdin (`-`) for long content.
|
|
9
13
|
- Markdown supported: headings, bold/italic, links, lists, blockquote, inline code, `---`.
|
|
10
14
|
|
|
@@ -15,6 +19,8 @@ Use **set** for scalar and link fields; use **rtf** only for rich text fields.
|
|
|
15
19
|
- **Append** an embedded entry: `cms-edit rtf embed @c1 body <entry-id>`
|
|
16
20
|
- **Insert** at position: `cms-edit rtf embed @c1 body <entry-id> --at 0`
|
|
17
21
|
- **Asset** embed: `cms-edit rtf embed @c1 body <asset-id> --asset`
|
|
22
|
+
- **Asset layout (optional, requires `--asset`):** `--align left|center|right` or `--center` (same as `--align center`); `--width-percent <1–100>` for per-embed width without changing the asset globally. Example:
|
|
23
|
+
`cms-edit rtf embed @c1 body <asset-id> --asset --at 12 --align center --width-percent 40`
|
|
18
24
|
|
|
19
25
|
Editing or moving existing embeds is **not supported in v1**.
|
|
20
26
|
|