@forumone/throughline-design-system 0.0.0 → 1.0.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/CHANGELOG.md +180 -0
  2. package/LICENSE +21 -0
  3. package/README.md +21 -0
  4. package/bin/check-block-props.mjs +51 -0
  5. package/bin/stub-styles.mjs +28 -0
  6. package/dist/admin/BlockGuidance.d.ts +13 -0
  7. package/dist/admin/BlockGuidance.d.ts.map +1 -0
  8. package/dist/admin/BlockGuidance.js +13 -0
  9. package/dist/admin/BlockGuidance.js.map +1 -0
  10. package/dist/admin/BlockSummary.d.ts +10 -0
  11. package/dist/admin/BlockSummary.d.ts.map +1 -0
  12. package/dist/admin/BlockSummary.js +73 -0
  13. package/dist/admin/BlockSummary.js.map +1 -0
  14. package/dist/admin/RowSummary.d.ts +15 -0
  15. package/dist/admin/RowSummary.d.ts.map +1 -0
  16. package/dist/admin/RowSummary.js +16 -0
  17. package/dist/admin/RowSummary.js.map +1 -0
  18. package/dist/admin/summary.d.ts +18 -0
  19. package/dist/admin/summary.d.ts.map +1 -0
  20. package/dist/admin/summary.js +48 -0
  21. package/dist/admin/summary.js.map +1 -0
  22. package/dist/altText.d.ts +16 -0
  23. package/dist/altText.d.ts.map +1 -0
  24. package/dist/altText.js +54 -0
  25. package/dist/altText.js.map +1 -0
  26. package/dist/client.d.ts +15 -0
  27. package/dist/client.d.ts.map +1 -0
  28. package/dist/client.js +12 -0
  29. package/dist/client.js.map +1 -0
  30. package/dist/contract/index.d.ts +5 -0
  31. package/dist/contract/index.d.ts.map +1 -0
  32. package/dist/contract/index.js +4 -0
  33. package/dist/contract/index.js.map +1 -0
  34. package/dist/contract/lint.d.ts +38 -0
  35. package/dist/contract/lint.d.ts.map +1 -0
  36. package/dist/contract/lint.js +110 -0
  37. package/dist/contract/lint.js.map +1 -0
  38. package/dist/contract/loader.d.ts +49 -0
  39. package/dist/contract/loader.d.ts.map +1 -0
  40. package/dist/contract/loader.js +95 -0
  41. package/dist/contract/loader.js.map +1 -0
  42. package/dist/contract/manifest.d.ts +454 -0
  43. package/dist/contract/manifest.d.ts.map +1 -0
  44. package/dist/contract/manifest.js +29 -0
  45. package/dist/contract/manifest.js.map +1 -0
  46. package/dist/contract/schema.d.ts +334 -0
  47. package/dist/contract/schema.d.ts.map +1 -0
  48. package/dist/contract/schema.js +224 -0
  49. package/dist/contract/schema.js.map +1 -0
  50. package/dist/generate/blocks.d.ts +79 -0
  51. package/dist/generate/blocks.d.ts.map +1 -0
  52. package/dist/generate/blocks.js +118 -0
  53. package/dist/generate/blocks.js.map +1 -0
  54. package/dist/generate/fields.d.ts +60 -0
  55. package/dist/generate/fields.d.ts.map +1 -0
  56. package/dist/generate/fields.js +478 -0
  57. package/dist/generate/fields.js.map +1 -0
  58. package/dist/generate/guidance.d.ts +5 -0
  59. package/dist/generate/guidance.d.ts.map +1 -0
  60. package/dist/generate/guidance.js +29 -0
  61. package/dist/generate/guidance.js.map +1 -0
  62. package/dist/generate/index.d.ts +13 -0
  63. package/dist/generate/index.d.ts.map +1 -0
  64. package/dist/generate/index.js +9 -0
  65. package/dist/generate/index.js.map +1 -0
  66. package/dist/generate/labels.d.ts +42 -0
  67. package/dist/generate/labels.d.ts.map +1 -0
  68. package/dist/generate/labels.js +226 -0
  69. package/dist/generate/labels.js.map +1 -0
  70. package/dist/generate/layout.d.ts +42 -0
  71. package/dist/generate/layout.d.ts.map +1 -0
  72. package/dist/generate/layout.js +252 -0
  73. package/dist/generate/layout.js.map +1 -0
  74. package/dist/generate/selectOptionSnapshot.d.ts +26 -0
  75. package/dist/generate/selectOptionSnapshot.d.ts.map +1 -0
  76. package/dist/generate/selectOptionSnapshot.js +47 -0
  77. package/dist/generate/selectOptionSnapshot.js.map +1 -0
  78. package/dist/generate/selectOptions.d.ts +64 -0
  79. package/dist/generate/selectOptions.d.ts.map +1 -0
  80. package/dist/generate/selectOptions.js +145 -0
  81. package/dist/generate/selectOptions.js.map +1 -0
  82. package/dist/overrides.d.ts +71 -0
  83. package/dist/overrides.d.ts.map +1 -0
  84. package/dist/overrides.js +16 -0
  85. package/dist/overrides.js.map +1 -0
  86. package/dist/render/RenderBlocks.d.ts +67 -0
  87. package/dist/render/RenderBlocks.d.ts.map +1 -0
  88. package/dist/render/RenderBlocks.js +31 -0
  89. package/dist/render/RenderBlocks.js.map +1 -0
  90. package/dist/render/coerce.d.ts +78 -0
  91. package/dist/render/coerce.d.ts.map +1 -0
  92. package/dist/render/coerce.js +243 -0
  93. package/dist/render/coerce.js.map +1 -0
  94. package/dist/render/index.d.ts +5 -0
  95. package/dist/render/index.d.ts.map +1 -0
  96. package/dist/render/index.js +3 -0
  97. package/dist/render/index.js.map +1 -0
  98. package/dist/testing/checkBlockProps.d.ts +66 -0
  99. package/dist/testing/checkBlockProps.d.ts.map +1 -0
  100. package/dist/testing/checkBlockProps.js +241 -0
  101. package/dist/testing/checkBlockProps.js.map +1 -0
  102. package/dist/testing/checkBlockPropsCli.d.ts +12 -0
  103. package/dist/testing/checkBlockPropsCli.d.ts.map +1 -0
  104. package/dist/testing/checkBlockPropsCli.js +86 -0
  105. package/dist/testing/checkBlockPropsCli.js.map +1 -0
  106. package/dist/testing/contractDefaults.d.ts +21 -0
  107. package/dist/testing/contractDefaults.d.ts.map +1 -0
  108. package/dist/testing/contractDefaults.js +65 -0
  109. package/dist/testing/contractDefaults.js.map +1 -0
  110. package/dist/testing/describeBlockInvariants.d.ts +39 -0
  111. package/dist/testing/describeBlockInvariants.d.ts.map +1 -0
  112. package/dist/testing/describeBlockInvariants.js +71 -0
  113. package/dist/testing/describeBlockInvariants.js.map +1 -0
  114. package/dist/testing/index.d.ts +18 -0
  115. package/dist/testing/index.d.ts.map +1 -0
  116. package/dist/testing/index.js +14 -0
  117. package/dist/testing/index.js.map +1 -0
  118. package/dist/testing/untouchedBlocks.d.ts +48 -0
  119. package/dist/testing/untouchedBlocks.d.ts.map +1 -0
  120. package/dist/testing/untouchedBlocks.js +155 -0
  121. package/dist/testing/untouchedBlocks.js.map +1 -0
  122. package/package.json +108 -1
@@ -0,0 +1,48 @@
1
+ import type { Block, Field } from 'payload';
2
+ /** How many rows an untouched array holds: none, or one an author added and left empty. */
3
+ export type UntouchedRows = 'none' | 'one';
4
+ /**
5
+ * A block's fields, as Payload stores them for a freshly-added one.
6
+ *
7
+ * A value of `undefined` means the key is absent, which is what an untyped text
8
+ * field is. Everything else is a default somebody declared: the contract's own,
9
+ * or the `false` the generator gives a boolean whose contract says nothing.
10
+ */
11
+ export declare function untouchedData(fields: Field[], rows: UntouchedRows): Record<string, unknown>;
12
+ /** One field's `validate`, with what Payload would hand it for an untouched block. */
13
+ export interface ValidateCase {
14
+ /** `Block.group.field`, `Block.items[0].title` — so a failure is a finding, not a search. */
15
+ path: string;
16
+ validate: (value: unknown, options: unknown) => unknown;
17
+ value: unknown;
18
+ siblingData: Record<string, unknown>;
19
+ }
20
+ /** Every field carrying a `validate`, flattened, with the value it would be handed. */
21
+ export declare function validateCases(fields: Field[], data: Record<string, unknown>, path: string): ValidateCase[];
22
+ /**
23
+ * The second argument Payload passes a `validate`.
24
+ *
25
+ * `req.payload` throws on use rather than answering. A validate that looks
26
+ * something up should return early for an empty value before it does; if one
27
+ * stops doing that, it fails here, loudly, rather than reaching for a database
28
+ * from a suite that has none.
29
+ */
30
+ export declare function validateOptions(siblingData: Record<string, unknown>, data: Record<string, unknown>): Record<string, unknown>;
31
+ /** A validate that refused an untouched block. */
32
+ export interface UntouchedFailure {
33
+ path: string;
34
+ rows: UntouchedRows;
35
+ /** What the validate returned or threw. */
36
+ result: string;
37
+ }
38
+ /** The validate cases for every block, for both row counts. */
39
+ export declare function untouchedCases(blocks: readonly Block[], rows: UntouchedRows): Array<ValidateCase & {
40
+ blockData: Record<string, unknown>;
41
+ }>;
42
+ /** Run one case; `true` when it passes, the message when it does not. */
43
+ export declare function runValidateCase(found: ValidateCase & {
44
+ blockData: Record<string, unknown>;
45
+ }): Promise<true | string>;
46
+ /** Every validate that refuses an untouched block, with no rows and with one empty row. */
47
+ export declare function checkUntouchedBlocks(blocks: readonly Block[]): Promise<UntouchedFailure[]>;
48
+ //# sourceMappingURL=untouchedBlocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"untouchedBlocks.d.ts","sourceRoot":"","sources":["../../src/testing/untouchedBlocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAwB3C,2FAA2F;AAC3F,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,CAAA;AA4B1C;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmC3F;AAED,sFAAsF;AACtF,MAAM,WAAW,YAAY;IAC3B,6FAA6F;IAC7F,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAA;IACvD,KAAK,EAAE,OAAO,CAAA;IACd,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAC3B,MAAM,EAAE,KAAK,EAAE,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,EAAE,MAAM,GACX,YAAY,EAAE,CA2ChB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsBzB;AAED,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,aAAa,CAAA;IACnB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAA;CACf;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,IAAI,EAAE,aAAa,GAClB,KAAK,CAAC,YAAY,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAQ9D;AAED,yEAAyE;AACzE,wBAAsB,eAAe,CACnC,KAAK,EAAE,YAAY,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC3D,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CAUxB;AAED,2FAA2F;AAC3F,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAShG"}
@@ -0,0 +1,155 @@
1
+ function isNamed(field) {
2
+ return 'name' in field && typeof field.name === 'string';
3
+ }
4
+ /**
5
+ * The fields a wrapper holds under the same data object as itself: a `row` or
6
+ * `collapsible`'s children, and an unnamed tab's. A named tab is a key of its
7
+ * own and is returned by `namedChildren` instead.
8
+ */
9
+ function childrenOf(field) {
10
+ if (field.type === 'tabs') {
11
+ return field.tabs.flatMap(tab => ('name' in tab && tab.name ? [] : tab.fields));
12
+ }
13
+ return 'fields' in field && Array.isArray(field.fields) ? field.fields : [];
14
+ }
15
+ /** A `tabs` field's named tabs, which store their fields under the tab's name. */
16
+ function namedTabs(field) {
17
+ if (field.type !== 'tabs')
18
+ return [];
19
+ return field.tabs.flatMap(tab => 'name' in tab && typeof tab.name === 'string' ? [{ name: tab.name, fields: tab.fields }] : []);
20
+ }
21
+ /**
22
+ * A block's fields, as Payload stores them for a freshly-added one.
23
+ *
24
+ * A value of `undefined` means the key is absent, which is what an untyped text
25
+ * field is. Everything else is a default somebody declared: the contract's own,
26
+ * or the `false` the generator gives a boolean whose contract says nothing.
27
+ */
28
+ export function untouchedData(fields, rows) {
29
+ const data = {};
30
+ for (const field of fields) {
31
+ if (!isNamed(field)) {
32
+ // Presentational wrappers hold their children under the same data
33
+ // object rather than a key of their own.
34
+ Object.assign(data, untouchedData(childrenOf(field), rows));
35
+ for (const tab of namedTabs(field))
36
+ data[tab.name] = untouchedData(tab.fields, rows);
37
+ continue;
38
+ }
39
+ let value;
40
+ if (field.type === 'group') {
41
+ value = untouchedData(childrenOf(field), rows);
42
+ }
43
+ else if (field.type === 'array') {
44
+ /*
45
+ `[]` rather than nothing — Payload stores the empty list — and `one` is
46
+ an author who clicks "Add row" and saves before filling it in: the same
47
+ defect one level down, reachable in the admin with two clicks.
48
+ */
49
+ value = rows === 'one' ? [untouchedData(childrenOf(field), 'none')] : [];
50
+ }
51
+ else if (field.type === 'blocks') {
52
+ value = [];
53
+ }
54
+ else {
55
+ // Payload resolves a function default at save time.
56
+ const { defaultValue } = field;
57
+ value = typeof defaultValue === 'function' ? defaultValue() : defaultValue;
58
+ }
59
+ if (value !== undefined)
60
+ data[field.name] = value;
61
+ }
62
+ return data;
63
+ }
64
+ /** Every field carrying a `validate`, flattened, with the value it would be handed. */
65
+ export function validateCases(fields, data, path) {
66
+ const found = [];
67
+ for (const field of fields) {
68
+ if (!isNamed(field)) {
69
+ found.push(...validateCases(childrenOf(field), data, path));
70
+ for (const tab of namedTabs(field)) {
71
+ const value = data[tab.name];
72
+ if (value && typeof value === 'object') {
73
+ found.push(...validateCases(tab.fields, value, `${path}.${tab.name}`));
74
+ }
75
+ }
76
+ continue;
77
+ }
78
+ const value = data[field.name];
79
+ const here = `${path}.${field.name}`;
80
+ if (typeof field.validate === 'function') {
81
+ found.push({
82
+ path: here,
83
+ validate: field.validate,
84
+ value,
85
+ siblingData: data,
86
+ });
87
+ }
88
+ if (field.type === 'group' && value && typeof value === 'object') {
89
+ found.push(...validateCases(childrenOf(field), value, here));
90
+ }
91
+ if (field.type === 'array' && Array.isArray(value)) {
92
+ value.forEach((row, index) => {
93
+ found.push(...validateCases(childrenOf(field), row, `${here}[${index}]`));
94
+ });
95
+ }
96
+ }
97
+ return found;
98
+ }
99
+ /**
100
+ * The second argument Payload passes a `validate`.
101
+ *
102
+ * `req.payload` throws on use rather than answering. A validate that looks
103
+ * something up should return early for an empty value before it does; if one
104
+ * stops doing that, it fails here, loudly, rather than reaching for a database
105
+ * from a suite that has none.
106
+ */
107
+ export function validateOptions(siblingData, data) {
108
+ const payload = new Proxy({}, {
109
+ get(_target, property) {
110
+ if (property === 'then' || typeof property === 'symbol')
111
+ return undefined;
112
+ return () => Promise.reject(new Error(`A field validate called payload.${property} for an untouched block. ` +
113
+ 'An empty value should pass before anything is looked up.'));
114
+ },
115
+ });
116
+ return {
117
+ siblingData,
118
+ data,
119
+ operation: 'create',
120
+ req: { payload, user: null },
121
+ };
122
+ }
123
+ /** The validate cases for every block, for both row counts. */
124
+ export function untouchedCases(blocks, rows) {
125
+ return blocks.flatMap(block => {
126
+ const data = untouchedData(block.fields, rows);
127
+ return validateCases(block.fields, data, block.slug).map(found => ({
128
+ ...found,
129
+ blockData: data,
130
+ }));
131
+ });
132
+ }
133
+ /** Run one case; `true` when it passes, the message when it does not. */
134
+ export async function runValidateCase(found) {
135
+ try {
136
+ const result = await found.validate(found.value, validateOptions(found.siblingData, found.blockData));
137
+ return result === true ? true : String(result);
138
+ }
139
+ catch (error) {
140
+ return `threw: ${error instanceof Error ? error.message : String(error)}`;
141
+ }
142
+ }
143
+ /** Every validate that refuses an untouched block, with no rows and with one empty row. */
144
+ export async function checkUntouchedBlocks(blocks) {
145
+ const failures = [];
146
+ for (const rows of ['none', 'one']) {
147
+ for (const found of untouchedCases(blocks, rows)) {
148
+ const result = await runValidateCase(found);
149
+ if (result !== true)
150
+ failures.push({ path: found.path, rows, result });
151
+ }
152
+ }
153
+ return failures;
154
+ }
155
+ //# sourceMappingURL=untouchedBlocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"untouchedBlocks.js","sourceRoot":"","sources":["../../src/testing/untouchedBlocks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1 +1,108 @@
1
- {"name":"@forumone/throughline-design-system","version":"0.0.0","description":"Placeholder for npm trusted publishing setup; 1.0 releases publish from github.com/forumone/throughline."}
1
+ {
2
+ "name": "@forumone/throughline-design-system",
3
+ "version": "1.0.0-next.0",
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
+ "type": "module",
6
+ "exports": {
7
+ "./contract": {
8
+ "types": "./dist/contract/index.d.ts",
9
+ "default": "./dist/contract/index.js"
10
+ },
11
+ "./lint": {
12
+ "types": "./dist/contract/lint.d.ts",
13
+ "default": "./dist/contract/lint.js"
14
+ },
15
+ "./generate": {
16
+ "types": "./dist/generate/index.d.ts",
17
+ "default": "./dist/generate/index.js"
18
+ },
19
+ "./render": {
20
+ "types": "./dist/render/index.d.ts",
21
+ "default": "./dist/render/index.js"
22
+ },
23
+ "./client": {
24
+ "types": "./dist/client.d.ts",
25
+ "default": "./dist/client.js"
26
+ },
27
+ "./testing": {
28
+ "types": "./dist/testing/index.d.ts",
29
+ "default": "./dist/testing/index.js"
30
+ }
31
+ },
32
+ "bin": {
33
+ "check-block-props": "./bin/check-block-props.mjs"
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "bin/*.mjs",
38
+ "README.md",
39
+ "CHANGELOG.md"
40
+ ],
41
+ "keywords": [
42
+ "throughline",
43
+ "payload",
44
+ "design-system",
45
+ "manifest",
46
+ "mcp"
47
+ ],
48
+ "license": "MIT",
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "git+https://github.com/forumone/throughline.git",
52
+ "directory": "packages/design-system"
53
+ },
54
+ "homepage": "https://github.com/forumone/throughline/tree/main/packages/design-system#readme",
55
+ "bugs": {
56
+ "url": "https://github.com/forumone/throughline/issues"
57
+ },
58
+ "publishConfig": {
59
+ "access": "public"
60
+ },
61
+ "dependencies": {
62
+ "tsx": "^4.23.11",
63
+ "zod": "^3.23.0"
64
+ },
65
+ "peerDependencies": {
66
+ "@payloadcms/ui": "^3.0.0",
67
+ "payload": "^3.89.0",
68
+ "react": "^18.0.0 || ^19.0.0",
69
+ "typescript": "^5.0.0",
70
+ "vitest": "^3.0.0 || ^4.0.0"
71
+ },
72
+ "peerDependenciesMeta": {
73
+ "@payloadcms/ui": {
74
+ "optional": true
75
+ },
76
+ "payload": {
77
+ "optional": true
78
+ },
79
+ "react": {
80
+ "optional": true
81
+ },
82
+ "typescript": {
83
+ "optional": true
84
+ },
85
+ "vitest": {
86
+ "optional": true
87
+ }
88
+ },
89
+ "devDependencies": {
90
+ "@payloadcms/ui": "^3.83.0",
91
+ "@types/node": "^24.13.2",
92
+ "@types/react": "^19.2.0",
93
+ "eslint": "^10.11.0",
94
+ "payload": "3.90.2",
95
+ "typescript": "^5.9.3",
96
+ "vitest": "^4.1.10",
97
+ "@forumone/throughline-eslint-config": "0.0.0",
98
+ "@forumone/throughline-tsconfig": "0.0.0"
99
+ },
100
+ "scripts": {
101
+ "build": "tsc -b",
102
+ "dev": "tsc -b -w",
103
+ "clean": "rm -rf dist .turbo *.tsbuildinfo",
104
+ "typecheck": "tsc --noEmit",
105
+ "lint": "eslint src bin",
106
+ "test": "vitest run"
107
+ }
108
+ }