@forumone/throughline-design-system 2.3.1-pr-317-97d9e21 → 2.4.0-next-c49a98b
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 +14 -1
- package/dist/render/RenderBlocks.d.ts +18 -1
- package/dist/render/RenderBlocks.d.ts.map +1 -1
- package/dist/render/RenderBlocks.js +6 -1
- package/dist/render/RenderBlocks.js.map +1 -1
- package/dist/render/incomplete.d.ts +4 -0
- package/dist/render/incomplete.d.ts.map +1 -0
- package/dist/render/incomplete.js +65 -0
- package/dist/render/incomplete.js.map +1 -0
- package/dist/render/index.d.ts +2 -1
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +1 -0
- package/dist/render/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
# @forumone/throughline-design-system
|
|
2
2
|
|
|
3
|
-
## 2.
|
|
3
|
+
## 2.4.0-next-c49a98b
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- c49a98b: A block with an empty required field no longer passes `check` or takes a page down (forumone-2026#840).
|
|
8
|
+
|
|
9
|
+
- **Publishing:** the composition step reports a `required-field` issue for each required field inside a block that is empty, for example "Block 3 (Featured Work) › Item 2 › Image is required before this can be published."
|
|
10
|
+
- `check`, `get_publish_status` and the admin's publish all see it before the write.
|
|
11
|
+
- Before this, only Payload's write enforced `required`, and `check` called such a page ready.
|
|
12
|
+
- The rule walks the block's Payload config. So a field the site adds counts, such as a form block's `source.form`. A field the site omits or hides doesn't. A required link counts too, because the contract says so even though a generated link enforces it with a validate.
|
|
13
|
+
- **Render:** `RenderBlocks` no longer renders a component whose required image didn't arrive, whether the slot is empty in a draft or the image no longer resolves.
|
|
14
|
+
- The component would read `item.image.src` from nothing and throw, and one card took Live Preview down to the error page.
|
|
15
|
+
- The new `onIncompleteBlock` decides what renders instead. It defaults to nothing.
|
|
16
|
+
- `missingRequiredImages` is exported for a host to ask the same question.
|
|
4
17
|
|
|
5
18
|
## 2.3.0
|
|
6
19
|
|
|
@@ -55,6 +55,23 @@ export interface RenderBlocksProps {
|
|
|
55
55
|
* Applied before `slots`, so a route still outranks a block.
|
|
56
56
|
*/
|
|
57
57
|
resolveProps?: (block: StoredBlock) => Record<string, unknown> | undefined;
|
|
58
|
+
/**
|
|
59
|
+
* What to render instead of a block whose required image did not arrive —
|
|
60
|
+
* an empty slot in a draft, or an image that no longer resolves.
|
|
61
|
+
*
|
|
62
|
+
* The component would throw on it (`item.image.src`) and take the page down
|
|
63
|
+
* with it, so it is never rendered with one missing. Defaults to rendering
|
|
64
|
+
* nothing; a host typically says what is missing in a draft and renders
|
|
65
|
+
* nothing on a published page. `missing` is the contract's paths, e.g.
|
|
66
|
+
* `items[1].image.src`. forumone-2026#840.
|
|
67
|
+
*/
|
|
68
|
+
onIncompleteBlock?: (incomplete: IncompleteBlock) => ReactNode;
|
|
69
|
+
}
|
|
70
|
+
export interface IncompleteBlock {
|
|
71
|
+
blockType: string;
|
|
72
|
+
block: StoredBlock;
|
|
73
|
+
/** The required images that did not arrive, by contract path. */
|
|
74
|
+
missing: string[];
|
|
58
75
|
}
|
|
59
76
|
/**
|
|
60
77
|
* Renders a stored `layout` as design-system components.
|
|
@@ -63,5 +80,5 @@ export interface RenderBlocksProps {
|
|
|
63
80
|
* `'use client'`, so the boundary is drawn per component by the design system
|
|
64
81
|
* rather than here — which is what keeps the rest out of the client bundle.
|
|
65
82
|
*/
|
|
66
|
-
export declare function RenderBlocks({ blocks, registry, fields, context, onUnknownBlock, slots, resolveProps, }: RenderBlocksProps): JSX.Element | null;
|
|
83
|
+
export declare function RenderBlocks({ blocks, registry, fields, context, onUnknownBlock, slots, resolveProps, onIncompleteBlock, }: RenderBlocksProps): JSX.Element | null;
|
|
67
84
|
//# sourceMappingURL=RenderBlocks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderBlocks.d.ts","sourceRoot":"","sources":["../../src/render/RenderBlocks.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,aAAa,EAAE,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"RenderBlocks.d.ts","sourceRoot":"","sources":["../../src/render/RenderBlocks.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,aAAa,EAAE,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAG7D,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI,GAAG,SAAS,CAAA;IACjD,uDAAuD;IACvD,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1E,oEAAoE;IACpE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAA;IAChD,OAAO,EAAE,aAAa,CAAA;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,SAAS,CAAA;IACjD;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IACzD;;;;;;;;;;;;;;;;OAgBG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAC1E;;;;;;;;;OASG;IACH,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,SAAS,CAAA;CAC/D;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,WAAW,CAAA;IAClB,iEAAiE;IACjE,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,QAAQ,EACR,MAAM,EACN,OAAO,EACP,cAAc,EACd,KAAK,EACL,YAAY,EACZ,iBAAiB,GAClB,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAwCxC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { Fragment } from 'react';
|
|
3
3
|
import { coerceBlock } from './coerce.js';
|
|
4
|
+
import { missingRequiredImages } from './incomplete.js';
|
|
4
5
|
/**
|
|
5
6
|
* Renders a stored `layout` as design-system components.
|
|
6
7
|
*
|
|
@@ -8,7 +9,7 @@ import { coerceBlock } from './coerce.js';
|
|
|
8
9
|
* `'use client'`, so the boundary is drawn per component by the design system
|
|
9
10
|
* rather than here — which is what keeps the rest out of the client bundle.
|
|
10
11
|
*/
|
|
11
|
-
export function RenderBlocks({ blocks, registry, fields, context, onUnknownBlock, slots, resolveProps, }) {
|
|
12
|
+
export function RenderBlocks({ blocks, registry, fields, context, onUnknownBlock, slots, resolveProps, onIncompleteBlock, }) {
|
|
12
13
|
if (!blocks || blocks.length === 0)
|
|
13
14
|
return null;
|
|
14
15
|
return (_jsx(_Fragment, { children: blocks.map((block, index) => {
|
|
@@ -25,6 +26,10 @@ export function RenderBlocks({ blocks, registry, fields, context, onUnknownBlock
|
|
|
25
26
|
...resolveProps?.(block),
|
|
26
27
|
...slots?.[block.blockType],
|
|
27
28
|
};
|
|
29
|
+
const missing = missingRequiredImages(block.blockType, contractFields, props, context.overrides);
|
|
30
|
+
if (missing.length > 0) {
|
|
31
|
+
return (_jsx(Fragment, { children: onIncompleteBlock?.({ blockType: block.blockType, block, missing }) ?? null }, block.id ?? index));
|
|
32
|
+
}
|
|
28
33
|
return _jsx(Component, { ...props }, block.id ?? index);
|
|
29
34
|
}) }));
|
|
30
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderBlocks.js","sourceRoot":"","sources":["../../src/render/RenderBlocks.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAgD,MAAM,OAAO,CAAA;AAE9E,OAAO,EAAE,WAAW,EAAsB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"RenderBlocks.js","sourceRoot":"","sources":["../../src/render/RenderBlocks.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAgD,MAAM,OAAO,CAAA;AAE9E,OAAO,EAAE,WAAW,EAAsB,MAAM,aAAa,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AA6EvD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,MAAM,EACN,QAAQ,EACR,MAAM,EACN,OAAO,EACP,cAAc,EACd,KAAK,EACL,YAAY,EACZ,iBAAiB,GACC;IAClB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAE/C,OAAO,CACL,4BACG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC3B,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAC3C,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAE9C,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc,EAAE,CAAC;gBAClC,OAAO,CACL,KAAC,QAAQ,cAA0B,cAAc,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,IAA7D,KAAK,CAAC,EAAE,IAAI,KAAK,CAAwD,CACzF,CAAA;YACH,CAAC;YAED;;kCAEsB;YACtB,MAAM,KAAK,GAAG;gBACZ,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC;gBAC/D,GAAG,YAAY,EAAE,CAAC,KAAK,CAAC;gBACxB,GAAG,KAAK,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;aAC5B,CAAA;YACD,MAAM,OAAO,GAAG,qBAAqB,CACnC,KAAK,CAAC,SAAS,EACf,cAAc,EACd,KAAK,EACL,OAAO,CAAC,SAAS,CAClB,CAAA;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,CACL,KAAC,QAAQ,cACN,iBAAiB,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,IAAI,IAD/D,KAAK,CAAC,EAAE,IAAI,KAAK,CAErB,CACZ,CAAA;YACH,CAAC;YACD,OAAO,KAAC,SAAS,OAA6B,KAAK,IAA5B,KAAK,CAAC,EAAE,IAAI,KAAK,CAAe,CAAA;QACzD,CAAC,CAAC,GACD,CACJ,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Overrides } from '../overrides.js';
|
|
2
|
+
import type { ContentField } from '../generate/fields.js';
|
|
3
|
+
export declare function missingRequiredImages(component: string, fields: readonly ContentField[], props: Record<string, unknown>, overrides: Overrides, parentPath?: string, displayPath?: string): string[];
|
|
4
|
+
//# sourceMappingURL=incomplete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incomplete.d.ts","sourceRoot":"","sources":["../../src/render/incomplete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAyBzD,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,SAAS,EAAE,SAAS,EACpB,UAAU,SAAK,EACf,WAAW,SAAK,GACf,MAAM,EAAE,CAiDV"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { fieldOverride } from '../overrides.js';
|
|
2
|
+
/*
|
|
3
|
+
A block whose required image did not arrive. forumone-2026#840.
|
|
4
|
+
|
|
5
|
+
A component trusts its contract: an image the contract requires is read as
|
|
6
|
+
`item.image.src` with no guard, because a published block cannot lack one —
|
|
7
|
+
publishing refuses an empty required field. A draft can, by design, and so can
|
|
8
|
+
a published block whose image no longer resolves. Rendered anyway, the
|
|
9
|
+
component throws on `undefined.src`, and one card takes the whole page down
|
|
10
|
+
with it: Live Preview showed the site's error page for a landing page with one
|
|
11
|
+
empty image slot.
|
|
12
|
+
|
|
13
|
+
So the props are checked against the contract after coercion, which is when
|
|
14
|
+
"no usable image" is known — an id for a media document that is gone resolves
|
|
15
|
+
to nothing, exactly as an empty slot does — and the block is handed to the host
|
|
16
|
+
to decide about instead of to the component.
|
|
17
|
+
|
|
18
|
+
Images only, deliberately. A missing image is the shape that throws; an empty
|
|
19
|
+
required heading renders an empty heading, which the publish checks catch and
|
|
20
|
+
which does not take a page down.
|
|
21
|
+
|
|
22
|
+
Paths are the contract's names with row numbers, `items[1].image.src`, for a
|
|
23
|
+
host to put in front of an editor.
|
|
24
|
+
*/
|
|
25
|
+
export function missingRequiredImages(component, fields, props, overrides, parentPath = '', displayPath = '') {
|
|
26
|
+
const out = [];
|
|
27
|
+
for (const field of fields) {
|
|
28
|
+
const path = parentPath ? `${parentPath}.${field.name}` : field.name;
|
|
29
|
+
const shown = displayPath ? `${displayPath}.${field.name}` : field.name;
|
|
30
|
+
const override = fieldOverride(overrides, component, path);
|
|
31
|
+
if (override?.omit || override?.as === 'icon')
|
|
32
|
+
continue;
|
|
33
|
+
const value = props[override?.propName ?? field.name];
|
|
34
|
+
if (field.type === 'image') {
|
|
35
|
+
if (field.required && (typeof value !== 'string' || value === ''))
|
|
36
|
+
out.push(shown);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (field.type === 'group' && field.of) {
|
|
40
|
+
if (value && typeof value === 'object') {
|
|
41
|
+
out.push(...missingRequiredImages(component, field.of, value, overrides, path, shown));
|
|
42
|
+
}
|
|
43
|
+
else if (field.required && containsRequiredImage(field.of)) {
|
|
44
|
+
out.push(shown);
|
|
45
|
+
}
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (field.type === 'array' && field.of && Array.isArray(value)) {
|
|
49
|
+
value.forEach((row, index) => {
|
|
50
|
+
if (!row || typeof row !== 'object')
|
|
51
|
+
return;
|
|
52
|
+
out.push(...missingRequiredImages(component, field.of ?? [], row, overrides, path, `${shown}[${index}]`));
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
function containsRequiredImage(fields) {
|
|
59
|
+
return fields.some((field) => (field.type === 'image' && field.required) ||
|
|
60
|
+
(field.type === 'group' &&
|
|
61
|
+
field.required &&
|
|
62
|
+
field.of !== undefined &&
|
|
63
|
+
containsRequiredImage(field.of)));
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=incomplete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incomplete.js","sourceRoot":"","sources":["../../src/render/incomplete.ts"],"names":[],"mappings":"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"}
|
package/dist/render/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { coerceBlock } from './coerce.js';
|
|
2
2
|
export type { CoerceContext, LinkValue, MediaLike } from './coerce.js';
|
|
3
3
|
export { RenderBlocks } from './RenderBlocks.js';
|
|
4
|
-
export type { RenderBlocksProps, StoredBlock } from './RenderBlocks.js';
|
|
4
|
+
export type { IncompleteBlock, RenderBlocksProps, StoredBlock } from './RenderBlocks.js';
|
|
5
|
+
export { missingRequiredImages } from './incomplete.js';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA"}
|
package/dist/render/index.js
CHANGED
package/dist/render/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forumone/throughline-design-system",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0-next-c49a98b",
|
|
4
4
|
"description": "The design-system side of Throughline: the component contract and manifest a design system publishes, its linter, and the Payload blocks, rendering and admin components generated from it.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|