@ankhorage/studio 5.9.2 → 5.10.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 (57) hide show
  1. package/README.md +1 -1
  2. package/apm/update.json +1 -1
  3. package/dist/features/authoring-engine/adapters/outbound/applyThemeAuthoringMutation.d.ts +6 -0
  4. package/dist/features/authoring-engine/adapters/outbound/applyThemeAuthoringMutation.d.ts.map +1 -0
  5. package/dist/features/authoring-engine/adapters/outbound/applyThemeAuthoringMutation.js +37 -0
  6. package/dist/features/authoring-engine/adapters/outbound/applyThemeAuthoringMutation.js.map +1 -0
  7. package/dist/features/authoring-engine/adapters/outbound/deriveThemeAuthoringModel.d.ts +10 -0
  8. package/dist/features/authoring-engine/adapters/outbound/deriveThemeAuthoringModel.d.ts.map +1 -0
  9. package/dist/features/authoring-engine/adapters/outbound/deriveThemeAuthoringModel.js +97 -0
  10. package/dist/features/authoring-engine/adapters/outbound/deriveThemeAuthoringModel.js.map +1 -0
  11. package/dist/features/authoring-engine/application/use-cases/applyAuthoringMutationToStructure.d.ts +4 -0
  12. package/dist/features/authoring-engine/application/use-cases/applyAuthoringMutationToStructure.d.ts.map +1 -0
  13. package/dist/features/authoring-engine/application/use-cases/applyAuthoringMutationToStructure.js +140 -0
  14. package/dist/features/authoring-engine/application/use-cases/applyAuthoringMutationToStructure.js.map +1 -0
  15. package/dist/ui/admin/pages/ThemeAdminPage.d.ts.map +1 -1
  16. package/dist/ui/admin/pages/ThemeAdminPage.js +16 -3
  17. package/dist/ui/admin/pages/ThemeAdminPage.js.map +1 -1
  18. package/dist/ui/admin/pages/ThemeColorsAdminPage.d.ts.map +1 -1
  19. package/dist/ui/admin/pages/ThemeColorsAdminPage.js +51 -31
  20. package/dist/ui/admin/pages/ThemeColorsAdminPage.js.map +1 -1
  21. package/dist/ui/admin/pages/ThemeNumericTokensAdminPage.d.ts +3 -2
  22. package/dist/ui/admin/pages/ThemeNumericTokensAdminPage.d.ts.map +1 -1
  23. package/dist/ui/admin/pages/ThemeNumericTokensAdminPage.js +37 -69
  24. package/dist/ui/admin/pages/ThemeNumericTokensAdminPage.js.map +1 -1
  25. package/dist/ui/admin/pages/ThemeTypographyAdminPage.d.ts +1 -1
  26. package/dist/ui/admin/pages/ThemeTypographyAdminPage.d.ts.map +1 -1
  27. package/dist/ui/admin/pages/ThemeTypographyAdminPage.js +23 -8
  28. package/dist/ui/admin/pages/ThemeTypographyAdminPage.js.map +1 -1
  29. package/dist/ui/admin/pages/adminThemeModel.d.ts +0 -13
  30. package/dist/ui/admin/pages/adminThemeModel.d.ts.map +1 -1
  31. package/dist/ui/admin/pages/adminThemeModel.js +0 -11
  32. package/dist/ui/admin/pages/adminThemeModel.js.map +1 -1
  33. package/package.json +2 -2
  34. package/dist/ui/admin/pages/ThemeTokenAction.d.ts +0 -10
  35. package/dist/ui/admin/pages/ThemeTokenAction.d.ts.map +0 -1
  36. package/dist/ui/admin/pages/ThemeTokenAction.js +0 -24
  37. package/dist/ui/admin/pages/ThemeTokenAction.js.map +0 -1
  38. package/dist/ui/admin/pages/ThemeTypographyHeadingEditor.d.ts +0 -4
  39. package/dist/ui/admin/pages/ThemeTypographyHeadingEditor.d.ts.map +0 -1
  40. package/dist/ui/admin/pages/ThemeTypographyHeadingEditor.js +0 -61
  41. package/dist/ui/admin/pages/ThemeTypographyHeadingEditor.js.map +0 -1
  42. package/dist/ui/admin/pages/ThemeTypographySizeEditor.d.ts +0 -4
  43. package/dist/ui/admin/pages/ThemeTypographySizeEditor.d.ts.map +0 -1
  44. package/dist/ui/admin/pages/ThemeTypographySizeEditor.js +0 -51
  45. package/dist/ui/admin/pages/ThemeTypographySizeEditor.js.map +0 -1
  46. package/dist/ui/admin/pages/ThemeTypographyWeightEditor.d.ts +0 -4
  47. package/dist/ui/admin/pages/ThemeTypographyWeightEditor.d.ts.map +0 -1
  48. package/dist/ui/admin/pages/ThemeTypographyWeightEditor.js +0 -57
  49. package/dist/ui/admin/pages/ThemeTypographyWeightEditor.js.map +0 -1
  50. package/dist/ui/admin/pages/adminThemeHarmony.d.ts +0 -8
  51. package/dist/ui/admin/pages/adminThemeHarmony.d.ts.map +0 -1
  52. package/dist/ui/admin/pages/adminThemeHarmony.js +0 -16
  53. package/dist/ui/admin/pages/adminThemeHarmony.js.map +0 -1
  54. package/dist/ui/admin/pages/themeTokenAuthoringModel.d.ts +0 -29
  55. package/dist/ui/admin/pages/themeTokenAuthoringModel.d.ts.map +0 -1
  56. package/dist/ui/admin/pages/themeTokenAuthoringModel.js +0 -74
  57. package/dist/ui/admin/pages/themeTokenAuthoringModel.js.map +0 -1
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  # @ankhorage/studio
5
5
 
6
- ![license: MIT](././paradox/badges/license.svg) ![npm: v5.9.2](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
6
+ ![license: MIT](././paradox/badges/license.svg) ![npm: v5.10.0](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
7
7
 
8
8
  Studio authoring package for Ankhorage apps
9
9
 
package/apm/update.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "protocolVersion": 1,
3
3
  "schemaVersion": 1,
4
- "owner": { "name": "@ankhorage/studio", "version": "5.9.2" },
4
+ "owner": { "name": "@ankhorage/studio", "version": "5.10.0" },
5
5
  "history": {
6
6
  "supported": [{ "sourceRange": ">=2.5.7 <3.0.0", "mode": "no-migration" }],
7
7
  "unsupported": [],
@@ -0,0 +1,6 @@
1
+ import type { ThemeConfig } from '@ankhorage/contracts';
2
+ import type { ThemeUpdates } from '../../../../index';
3
+ import type { AuthoringMutation, AuthoringMutationResult } from '../../../../types/authoring-engine';
4
+ /*** Apply one Theme authoring mutation through owner structure and project the result onto Studio's canonical updateTheme boundary. */
5
+ export declare function applyThemeAuthoringMutation(theme: ThemeConfig, mutation: AuthoringMutation): AuthoringMutationResult<ThemeUpdates>;
6
+ //# sourceMappingURL=applyThemeAuthoringMutation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyThemeAuthoringMutation.d.ts","sourceRoot":"","sources":["../../../../../src/features/authoring-engine/adapters/outbound/applyThemeAuthoringMutation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,oCAAoC,CAAC;AAI5C,uIAAuI;AACvI,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,iBAAiB,GAC1B,uBAAuB,CAAC,YAAY,CAAC,CAOvC"}
@@ -0,0 +1,37 @@
1
+ import { STRUCTURE_DESCRIPTOR } from '@ankhorage/contracts/structure';
2
+ import { applyAuthoringMutationToStructure } from '../../application/use-cases/applyAuthoringMutationToStructure';
3
+ import { resolveContractsAuthoringStructure } from './resolveContractsAuthoringStructure';
4
+ /*** Apply one Theme authoring mutation through owner structure and project the result onto Studio's canonical updateTheme boundary. */
5
+ export function applyThemeAuthoringMutation(theme, mutation) {
6
+ const resolution = resolveContractsAuthoringStructure(STRUCTURE_DESCRIPTOR, 'theme-config');
7
+ if (!resolution.ok)
8
+ return { ok: false, diagnostic: resolution.diagnostic };
9
+ const applied = applyAuthoringMutationToStructure(theme, resolution.structure, mutation);
10
+ if (!applied.ok)
11
+ return applied;
12
+ return projectThemeUpdate(applied.value, mutation);
13
+ }
14
+ /*** Project only the globally authored Theme branch touched by one neutral mutation. */
15
+ function projectThemeUpdate(theme, mutation) {
16
+ const [root] = mutation.path;
17
+ switch (root) {
18
+ case 'name':
19
+ return { ok: true, value: { name: theme.name } };
20
+ case 'light':
21
+ return { ok: true, value: { light: theme.light } };
22
+ case 'dark':
23
+ return { ok: true, value: { dark: theme.dark } };
24
+ case 'tokens':
25
+ return { ok: true, value: { tokens: theme.tokens } };
26
+ default:
27
+ return {
28
+ ok: false,
29
+ diagnostic: {
30
+ code: 'mutation-rejected',
31
+ message: `Theme path "${root ?? '<root>'}" is not exposed by global Theme authoring.`,
32
+ path: mutation.path,
33
+ },
34
+ };
35
+ }
36
+ }
37
+ //# sourceMappingURL=applyThemeAuthoringMutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyThemeAuthoringMutation.js","sourceRoot":"","sources":["../../../../../src/features/authoring-engine/adapters/outbound/applyThemeAuthoringMutation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAOtE,OAAO,EAAE,iCAAiC,EAAE,MAAM,+DAA+D,CAAC;AAClH,OAAO,EAAE,kCAAkC,EAAE,MAAM,sCAAsC,CAAC;AAE1F,uIAAuI;AACvI,MAAM,UAAU,2BAA2B,CACzC,KAAkB,EAClB,QAA2B;IAE3B,MAAM,UAAU,GAAG,kCAAkC,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAC;IAC5F,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC;IAE5E,MAAM,OAAO,GAAG,iCAAiC,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzF,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAChC,OAAO,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,wFAAwF;AACxF,SAAS,kBAAkB,CACzB,KAAkB,EAClB,QAA2B;IAE3B,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC7B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QACnD,KAAK,OAAO;YACV,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QACrD,KAAK,MAAM;YACT,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QACnD,KAAK,QAAQ;YACX,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACvD;YACE,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,UAAU,EAAE;oBACV,IAAI,EAAE,mBAAmB;oBACzB,OAAO,EAAE,eAAe,IAAI,IAAI,QAAQ,6CAA6C;oBACrF,IAAI,EAAE,QAAQ,CAAC,IAAI;iBACpB;aACF,CAAC;IACN,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ThemeConfig } from '@ankhorage/contracts';
2
+ import type { AuthoringNode, AuthoringPresentationPolicy } from '../../../../types/authoring-engine';
3
+ /*** Derive one selected Theme authoring node from the released Contracts root plus optional resolved inheritance evidence. */
4
+ export declare function deriveThemeAuthoringModel(args: {
5
+ readonly theme: ThemeConfig;
6
+ readonly path: readonly string[];
7
+ readonly resolvedValue?: unknown;
8
+ readonly policy?: AuthoringPresentationPolicy;
9
+ }): AuthoringNode;
10
+ //# sourceMappingURL=deriveThemeAuthoringModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deriveThemeAuthoringModel.d.ts","sourceRoot":"","sources":["../../../../../src/features/authoring-engine/adapters/outbound/deriveThemeAuthoringModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIxD,OAAO,KAAK,EACV,aAAa,EACb,2BAA2B,EAG5B,MAAM,oCAAoC,CAAC;AAI5C,8HAA8H;AAC9H,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,2BAA2B,CAAC;CAC/C,GAAG,aAAa,CA0BhB"}
@@ -0,0 +1,97 @@
1
+ import { STRUCTURE_DESCRIPTOR } from '@ankhorage/contracts/structure';
2
+ import { isRecord } from '@ankhorage/utility/object';
3
+ import { deriveAuthoringModel } from '../../application/use-cases/deriveAuthoringModel';
4
+ import { resolveContractsAuthoringStructure } from './resolveContractsAuthoringStructure';
5
+ /*** Derive one selected Theme authoring node from the released Contracts root plus optional resolved inheritance evidence. */
6
+ export function deriveThemeAuthoringModel(args) {
7
+ const resolution = resolveContractsAuthoringStructure(STRUCTURE_DESCRIPTOR, 'theme-config');
8
+ if (!resolution.ok) {
9
+ return deriveAuthoringModel({
10
+ structure: {
11
+ kind: 'unsupported',
12
+ sourceKind: 'theme-config',
13
+ diagnostic: resolution.diagnostic,
14
+ },
15
+ value: undefined,
16
+ label: 'Theme',
17
+ path: args.path,
18
+ });
19
+ }
20
+ const inheritedPolicy = args.resolvedValue === undefined
21
+ ? undefined
22
+ : createInheritancePolicy(resolution.structure, args.resolvedValue);
23
+ const root = deriveAuthoringModel({
24
+ structure: resolution.structure,
25
+ value: args.theme,
26
+ policy: args.policy ?? inheritedPolicy,
27
+ label: 'Theme',
28
+ });
29
+ return findAuthoringNode(root, args.path) ?? missingThemePath(args.path);
30
+ }
31
+ /*** Project resolved owner values into scalar-leaf inheritance metadata without copying them into authored state. */
32
+ function createInheritancePolicy(structure, value) {
33
+ if (structure.kind === 'scalar' || structure.kind === 'choice') {
34
+ return isAuthoringPrimitive(value) ? { inheritance: { value } } : undefined;
35
+ }
36
+ if (!isRecord(value))
37
+ return undefined;
38
+ if (structure.kind === 'object') {
39
+ const fields = structure.fields.flatMap((field) => {
40
+ const entry = Object.entries(value).find(([name]) => name === field.name);
41
+ if (!entry)
42
+ return [];
43
+ const policy = createInheritancePolicy(field.structure, entry[1]);
44
+ return policy ? [[field.name, policy]] : [];
45
+ });
46
+ return fields.length > 0 ? { fields: Object.fromEntries(fields) } : undefined;
47
+ }
48
+ if (structure.kind === 'value-map') {
49
+ const fields = Object.entries(value).flatMap(([key, entryValue]) => {
50
+ const policy = createInheritancePolicy(structure.value, entryValue);
51
+ return policy ? [[key, policy]] : [];
52
+ });
53
+ return fields.length > 0 ? { fields: Object.fromEntries(fields) } : undefined;
54
+ }
55
+ return undefined;
56
+ }
57
+ /*** Recursively locate one derived node by its stable canonical authoring path. */
58
+ function findAuthoringNode(node, path) {
59
+ if (pathsEqual(node.path, path))
60
+ return node;
61
+ if (node.kind === 'object') {
62
+ return node.fields.map((field) => findAuthoringNode(field, path)).find(Boolean);
63
+ }
64
+ if (node.kind === 'value-map') {
65
+ return node.entries.map((entry) => findAuthoringNode(entry.value, path)).find(Boolean);
66
+ }
67
+ return undefined;
68
+ }
69
+ /*** Compare two authoring paths without serializing them into an ambiguous delimiter form. */
70
+ function pathsEqual(left, right) {
71
+ return (left.length === right.length && left.every((segment, index) => segment === right.at(index)));
72
+ }
73
+ /*** Create an explicit unsupported node when a requested Theme path is absent from the released owner root. */
74
+ function missingThemePath(path) {
75
+ return deriveAuthoringModel({
76
+ structure: {
77
+ kind: 'unsupported',
78
+ sourceKind: 'theme-path',
79
+ diagnostic: {
80
+ code: 'unresolved-reference',
81
+ message: `Theme authoring path "${path.join('.')}" is not published by the owner structure.`,
82
+ path,
83
+ },
84
+ },
85
+ value: undefined,
86
+ label: 'Theme',
87
+ path,
88
+ });
89
+ }
90
+ /*** Narrow one resolved owner value to the primitive inheritance vocabulary supported by the neutral model. */
91
+ function isAuthoringPrimitive(value) {
92
+ return (value === null ||
93
+ typeof value === 'boolean' ||
94
+ typeof value === 'number' ||
95
+ typeof value === 'string');
96
+ }
97
+ //# sourceMappingURL=deriveThemeAuthoringModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deriveThemeAuthoringModel.js","sourceRoot":"","sources":["../../../../../src/features/authoring-engine/adapters/outbound/deriveThemeAuthoringModel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AuthoringMutation, AuthoringMutationResult, AuthoringStructure } from '../../../../types/authoring-engine';
2
+ /*** Apply one neutral mutation against owner structure, materializing valid parents and pruning empty optional overrides. */
3
+ export declare function applyAuthoringMutationToStructure<T>(current: T, structure: AuthoringStructure, mutation: AuthoringMutation): AuthoringMutationResult<T>;
4
+ //# sourceMappingURL=applyAuthoringMutationToStructure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyAuthoringMutationToStructure.d.ts","sourceRoot":"","sources":["../../../../../src/features/authoring-engine/application/use-cases/applyAuthoringMutationToStructure.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,oCAAoC,CAAC;AAG5C,6HAA6H;AAC7H,wBAAgB,iCAAiC,CAAC,CAAC,EACjD,OAAO,EAAE,CAAC,EACV,SAAS,EAAE,kBAAkB,EAC7B,QAAQ,EAAE,iBAAiB,GAC1B,uBAAuB,CAAC,CAAC,CAAC,CAuB5B"}
@@ -0,0 +1,140 @@
1
+ import { deleteOwnProperty, isRecord, readOwnProperty, setOwnProperty, } from '@ankhorage/utility/object';
2
+ import { applyAuthoringMutation } from './applyAuthoringMutation';
3
+ /*** Apply one neutral mutation against owner structure, materializing valid parents and pruning empty optional overrides. */
4
+ export function applyAuthoringMutationToStructure(current, structure, mutation) {
5
+ if (!isRecord(current)) {
6
+ return rejected(mutation, 'Structured authoring mutations require object state.');
7
+ }
8
+ if (mutation.kind === 'rename-key') {
9
+ const validation = validateValueMapRename(structure, mutation);
10
+ if (!validation.ok)
11
+ return validation;
12
+ }
13
+ const prepared = mutation.kind === 'set'
14
+ ? materializeMutationPath(current, structure, mutation.path, mutation)
15
+ : { ok: true, value: current };
16
+ if (!prepared.ok)
17
+ return prepared;
18
+ const applied = applyAuthoringMutation(prepared.value, mutation);
19
+ if (!applied.ok)
20
+ return applied;
21
+ return {
22
+ ok: true,
23
+ value: normalizeStructuredValue(structure, applied.value, mutation.kind === 'unset'),
24
+ };
25
+ }
26
+ /*** Validate one keyed rename against the owner map structure before applying it. */
27
+ function validateValueMapRename(structure, mutation) {
28
+ const target = resolveStructureAtPath(structure, mutation.path);
29
+ if (target?.kind !== 'value-map') {
30
+ return rejected(mutation, 'Authoring key rename requires a value-map target.');
31
+ }
32
+ if (!isValueMapKeyAllowed(target.key, mutation.toKey)) {
33
+ return rejected(mutation, `Value-map key "${mutation.toKey}" is not allowed by the owner structure.`);
34
+ }
35
+ return { ok: true };
36
+ }
37
+ /*** Resolve one owner structure node at a canonical object/value-map path. */
38
+ function resolveStructureAtPath(structure, path) {
39
+ if (path.length === 0)
40
+ return structure;
41
+ const [segment, ...remaining] = path;
42
+ if (!segment)
43
+ return undefined;
44
+ const child = resolveChildStructure(structure, segment);
45
+ return child ? resolveStructureAtPath(child, remaining) : undefined;
46
+ }
47
+ /*** Materialize missing object/value-map ancestors only when the owner structure authorizes the path. */
48
+ function materializeMutationPath(current, structure, path, mutation) {
49
+ const [segment, ...remaining] = path;
50
+ if (!segment)
51
+ return rejected(mutation, 'Structured authoring mutation path is empty.');
52
+ const childStructure = resolveChildStructure(structure, segment);
53
+ if (!childStructure) {
54
+ return rejected(mutation, `Authoring path segment "${segment}" is not allowed by the owner structure.`);
55
+ }
56
+ if (remaining.length === 0)
57
+ return { ok: true, value: current };
58
+ const existing = readOwnProperty(current, segment);
59
+ if (existing !== undefined && !isRecord(existing)) {
60
+ return rejected(mutation, `Cannot materialize through non-object authoring path segment "${segment}".`);
61
+ }
62
+ const nested = materializeMutationPath(isRecord(existing) ? existing : {}, childStructure, remaining, mutation);
63
+ if (!nested.ok)
64
+ return nested;
65
+ const value = { ...current };
66
+ setOwnProperty(value, segment, nested.value);
67
+ return { ok: true, value };
68
+ }
69
+ /*** Resolve one structural child for an object field or keyed value-map entry. */
70
+ function resolveChildStructure(structure, segment) {
71
+ if (structure.kind === 'object') {
72
+ return structure.fields.find((field) => field.name === segment)?.structure;
73
+ }
74
+ if (structure.kind !== 'value-map' || !isValueMapKeyAllowed(structure.key, segment)) {
75
+ return undefined;
76
+ }
77
+ return structure.value;
78
+ }
79
+ /*** Validate one keyed value-map path segment without guessing unsupported key semantics. */
80
+ function isValueMapKeyAllowed(structure, key) {
81
+ if (key.trim().length === 0)
82
+ return false;
83
+ if (structure.kind === 'scalar' && structure.scalarType === 'string')
84
+ return true;
85
+ return (structure.kind === 'choice' &&
86
+ structure.values.some((value) => typeof value === 'string' && value === key));
87
+ }
88
+ /*** Normalize known owner structure recursively while preserving unknown sibling fields. */
89
+ function normalizeStructuredValue(structure, value, pruneEmptyOverrides) {
90
+ if (!isRecord(value))
91
+ return value;
92
+ if (structure.kind === 'object') {
93
+ const normalized = { ...value };
94
+ for (const field of structure.fields) {
95
+ const current = readOwnProperty(normalized, field.name);
96
+ if (current === undefined)
97
+ continue;
98
+ const next = normalizeStructuredValue(field.structure, current, pruneEmptyOverrides);
99
+ if (pruneEmptyOverrides && field.optional && isEmptyRecord(next)) {
100
+ deleteOwnProperty(normalized, field.name);
101
+ }
102
+ else {
103
+ setOwnProperty(normalized, field.name, next);
104
+ }
105
+ }
106
+ return normalized;
107
+ }
108
+ if (structure.kind !== 'value-map')
109
+ return value;
110
+ const normalized = {};
111
+ for (const [key, current] of Object.entries(value)) {
112
+ const next = normalizeStructuredValue(structure.value, current, pruneEmptyOverrides);
113
+ if (pruneEmptyOverrides && shouldPruneEmptyMapValue(structure.value, next))
114
+ continue;
115
+ setOwnProperty(normalized, key, next);
116
+ }
117
+ return normalized;
118
+ }
119
+ /*** Remove empty object-valued map entries when every owner field is optional override state. */
120
+ function shouldPruneEmptyMapValue(structure, value) {
121
+ return (isEmptyRecord(value) &&
122
+ structure.kind === 'object' &&
123
+ structure.fields.every((field) => field.optional));
124
+ }
125
+ /*** Return whether a runtime value is an empty record. */
126
+ function isEmptyRecord(value) {
127
+ return isRecord(value) && Object.keys(value).length === 0;
128
+ }
129
+ /*** Create one structure-aware mutation rejection without mutating the authored value. */
130
+ function rejected(mutation, message) {
131
+ return {
132
+ ok: false,
133
+ diagnostic: {
134
+ code: 'mutation-rejected',
135
+ message,
136
+ path: mutation.path,
137
+ },
138
+ };
139
+ }
140
+ //# sourceMappingURL=applyAuthoringMutationToStructure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyAuthoringMutationToStructure.js","sourceRoot":"","sources":["../../../../../src/features/authoring-engine/application/use-cases/applyAuthoringMutationToStructure.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeAdminPage.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeAdminPage.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,4GAA4G;AAC5G,wBAAgB,cAAc,sBAwC7B"}
1
+ {"version":3,"file":"ThemeAdminPage.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeAdminPage.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B,4GAA4G;AAC5G,wBAAgB,cAAc,sBAiD7B"}
@@ -1,13 +1,26 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Card, Text } from '@ankhorage/zora';
3
3
  import React from 'react';
4
- import { AdminHeader, AdminScroll, Field, Input, KeyValue } from '../adminPagePrimitives';
4
+ import { AuthoringEditor } from '../../../features/authoring-engine/adapters/inbound/AuthoringEditor';
5
+ import { applyThemeAuthoringMutation } from '../../../features/authoring-engine/adapters/outbound/applyThemeAuthoringMutation';
6
+ import { deriveThemeAuthoringModel } from '../../../features/authoring-engine/adapters/outbound/deriveThemeAuthoringModel';
7
+ import { AdminHeader, AdminScroll, KeyValue } from '../adminPagePrimitives';
5
8
  import { ThemeModeEditorSelector } from './ThemeModeEditorSelector';
6
9
  import { ThemeRecipeCatalog } from './ThemeRecipeCatalog';
7
10
  import { useActiveThemeAdmin } from './useActiveThemeAdmin';
8
11
  /*** Render active-theme metadata, global/mode ownership guidance, and the catalog of ZORA theme recipes. */
9
12
  export function ThemeAdminPage() {
10
13
  const { selection, updateTheme } = useActiveThemeAdmin();
11
- return (_jsxs(AdminScroll, { children: [_jsx(AdminHeader, { title: "Theme", description: "Author the canonical project theme used by the real app and Studio preview." }), selection ? (_jsxs(_Fragment, { children: [_jsx(ThemeModeEditorSelector, {}), _jsxs(Card, { title: selection.theme.name, children: [_jsx(Field, { label: "Theme name", children: _jsx(Input, { value: selection.theme.name, onChangeText: (name) => updateTheme({ name }) }) }), _jsx(KeyValue, { label: "Editing runtime mode", value: selection.mode }), _jsx(KeyValue, { label: "Global token families", value: "Typography \u00B7 Spacing \u00B7 Radii \u00B7 Shadows" }), _jsx(KeyValue, { label: "Mode-specific source", value: "Colors \u00B7 Harmony" })] }), _jsx(ThemeRecipeCatalog, {}), _jsx(Card, { title: "Inheritance", children: _jsx(Text, { color: "neutral", emphasis: "muted", children: "Omitted values inherit Surface and ZORA owner defaults. Theme changes do not rewrite component instances." }) })] })) : (_jsx(Card, { title: "Theme unavailable", children: _jsx(Text, { color: "neutral", emphasis: "muted", children: "The Studio manifest does not contain a valid active theme." }) }))] }));
14
+ if (!selection) {
15
+ return (_jsxs(AdminScroll, { children: [_jsx(AdminHeader, { title: "Theme", description: "Author the canonical project theme used by the real app and Studio preview." }), _jsx(Card, { title: "Theme unavailable", children: _jsx(Text, { color: "neutral", emphasis: "muted", children: "The Studio manifest does not contain a valid active theme." }) })] }));
16
+ }
17
+ const model = deriveThemeAuthoringModel({ theme: selection.theme, path: ['name'] });
18
+ /*** Apply one owner-derived Theme field mutation through the canonical manifest Theme boundary. */
19
+ const updateAuthoredTheme = (mutation) => {
20
+ const result = applyThemeAuthoringMutation(selection.theme, mutation);
21
+ if (result.ok)
22
+ updateTheme(result.value);
23
+ };
24
+ return (_jsxs(AdminScroll, { children: [_jsx(AdminHeader, { title: "Theme", description: "Author the canonical project theme used by the real app and Studio preview." }), _jsx(ThemeModeEditorSelector, {}), _jsxs(Card, { title: selection.theme.name, children: [_jsx(AuthoringEditor, { model: model, onMutation: updateAuthoredTheme }), _jsx(KeyValue, { label: "Editing runtime mode", value: selection.mode }), _jsx(KeyValue, { label: "Global token families", value: "Typography \u00B7 Spacing \u00B7 Radii \u00B7 Shadows" }), _jsx(KeyValue, { label: "Mode-specific source", value: "Colors \u00B7 Harmony" })] }), _jsx(ThemeRecipeCatalog, {}), _jsx(Card, { title: "Inheritance", children: _jsx(Text, { color: "neutral", emphasis: "muted", children: "Omitted values inherit Surface and ZORA owner defaults. Theme changes do not rewrite component instances." }) })] }));
12
25
  }
13
26
  //# sourceMappingURL=ThemeAdminPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeAdminPage.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeAdminPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,4GAA4G;AAC5G,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAEzD,OAAO,CACL,MAAC,WAAW,eACV,KAAC,WAAW,IACV,KAAK,EAAC,OAAO,EACb,WAAW,EAAC,6EAA6E,GACzF,EACD,SAAS,CAAC,CAAC,CAAC,CACX,8BACE,KAAC,uBAAuB,KAAG,EAC3B,MAAC,IAAI,IAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,aAC/B,KAAC,KAAK,IAAC,KAAK,EAAC,YAAY,YACvB,KAAC,KAAK,IAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,GAAI,GAC/E,EACR,KAAC,QAAQ,IAAC,KAAK,EAAC,sBAAsB,EAAC,KAAK,EAAE,SAAS,CAAC,IAAI,GAAI,EAChE,KAAC,QAAQ,IACP,KAAK,EAAC,uBAAuB,EAC7B,KAAK,EAAC,uDAAwC,GAC9C,EACF,KAAC,QAAQ,IAAC,KAAK,EAAC,sBAAsB,EAAC,KAAK,EAAC,uBAAkB,GAAG,IAC7D,EACP,KAAC,kBAAkB,KAAG,EACtB,KAAC,IAAI,IAAC,KAAK,EAAC,aAAa,YACvB,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,0HAG/B,GACF,IACN,CACJ,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,KAAK,EAAC,mBAAmB,YAC7B,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,2EAE/B,GACF,CACR,IACW,CACf,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ThemeAdminPage.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeAdminPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,qEAAqE,CAAC;AACtG,OAAO,EAAE,2BAA2B,EAAE,MAAM,kFAAkF,CAAC;AAC/H,OAAO,EAAE,yBAAyB,EAAE,MAAM,gFAAgF,CAAC;AAE3H,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,4GAA4G;AAC5G,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAEzD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CACL,MAAC,WAAW,eACV,KAAC,WAAW,IACV,KAAK,EAAC,OAAO,EACb,WAAW,EAAC,6EAA6E,GACzF,EACF,KAAC,IAAI,IAAC,KAAK,EAAC,mBAAmB,YAC7B,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,2EAE/B,GACF,IACK,CACf,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,yBAAyB,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEpF,mGAAmG;IACnG,MAAM,mBAAmB,GAAG,CAAC,QAA2B,EAAE,EAAE;QAC1D,MAAM,MAAM,GAAG,2BAA2B,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,EAAE;YAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,WAAW,eACV,KAAC,WAAW,IACV,KAAK,EAAC,OAAO,EACb,WAAW,EAAC,6EAA6E,GACzF,EACF,KAAC,uBAAuB,KAAG,EAC3B,MAAC,IAAI,IAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,aAC/B,KAAC,eAAe,IAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,mBAAmB,GAAI,EAClE,KAAC,QAAQ,IAAC,KAAK,EAAC,sBAAsB,EAAC,KAAK,EAAE,SAAS,CAAC,IAAI,GAAI,EAChE,KAAC,QAAQ,IAAC,KAAK,EAAC,uBAAuB,EAAC,KAAK,EAAC,uDAAwC,GAAG,EACzF,KAAC,QAAQ,IAAC,KAAK,EAAC,sBAAsB,EAAC,KAAK,EAAC,uBAAkB,GAAG,IAC7D,EACP,KAAC,kBAAkB,KAAG,EACtB,KAAC,IAAI,IAAC,KAAK,EAAC,aAAa,YACvB,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,0HAG/B,GACF,IACK,CACf,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeColorsAdminPage.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeColorsAdminPage.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,gGAAgG;AAChG,wBAAgB,oBAAoB,sBAiDnC"}
1
+ {"version":3,"file":"ThemeColorsAdminPage.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeColorsAdminPage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAgB1B,gGAAgG;AAChG,wBAAgB,oBAAoB,sBAoDnC"}
@@ -1,11 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { parseHexColorOrThrow } from '@ankhorage/color-theory';
3
- import { Card, Text, TextInput } from '@ankhorage/zora';
3
+ import { Card, TextInput } from '@ankhorage/zora';
4
4
  import React from 'react';
5
- import { Pressable, StyleSheet, View } from 'react-native';
6
- import { AdminHeader, AdminScroll, Field } from '../adminPagePrimitives';
7
- import { formatHarmonyLabel, SUPPORTED_COLOR_HARMONIES } from './adminThemeHarmony';
8
- import { createThemeModeUpdates } from './adminThemeModel';
5
+ import { AuthoringEditor, } from '../../../features/authoring-engine/adapters/inbound/AuthoringEditor';
6
+ import { applyThemeAuthoringMutation } from '../../../features/authoring-engine/adapters/outbound/applyThemeAuthoringMutation';
7
+ import { deriveThemeAuthoringModel } from '../../../features/authoring-engine/adapters/outbound/deriveThemeAuthoringModel';
8
+ import { AdminHeader, AdminScroll } from '../adminPagePrimitives';
9
9
  import { ThemeModeEditorSelector } from './ThemeModeEditorSelector';
10
10
  import { useActiveThemeAdmin } from './useActiveThemeAdmin';
11
11
  /*** Render primary-color and harmony authoring for the active light/dark runtime theme mode. */
@@ -13,37 +13,57 @@ export function ThemeColorsAdminPage() {
13
13
  const { selection, updateTheme } = useActiveThemeAdmin();
14
14
  if (!selection)
15
15
  return _jsx(Unavailable, {});
16
- /*** Wrap partial mode config changes in the active light/dark branch before updating the theme. */
17
- const updateMode = (updates) => {
18
- updateTheme(createThemeModeUpdates(selection.mode, updates));
16
+ const modePolicy = selection.mode === 'light'
17
+ ? {
18
+ fields: {
19
+ light: {
20
+ fields: {
21
+ primaryColor: { editor: { kind: 'theme-hex-color' } },
22
+ },
23
+ },
24
+ },
25
+ }
26
+ : {
27
+ fields: {
28
+ dark: {
29
+ fields: {
30
+ primaryColor: { editor: { kind: 'theme-hex-color' } },
31
+ },
32
+ },
33
+ },
34
+ };
35
+ const model = deriveThemeAuthoringModel({
36
+ theme: selection.theme,
37
+ path: [selection.mode],
38
+ policy: modePolicy,
39
+ });
40
+ /*** Apply one owner-derived mode mutation through the canonical Theme boundary. */
41
+ const updateAuthoredTheme = (mutation) => {
42
+ const result = applyThemeAuthoringMutation(selection.theme, mutation);
43
+ if (result.ok)
44
+ updateTheme(result.value);
19
45
  };
20
- return (_jsxs(AdminScroll, { children: [_jsx(AdminHeader, { title: "Colors", description: "Edit the canonical color source for the runtime mode currently being previewed." }), _jsx(ThemeModeEditorSelector, {}), _jsxs(Card, { title: `${selection.theme.name} · ${selection.mode === 'light' ? 'Light' : 'Dark'}`, children: [_jsx(Field, { label: "Primary color", children: _jsx(TextInput, { defaultValue: selection.modeConfig.primaryColor, autoCapitalize: "none", autoCorrect: false, maxLength: 7, onChangeText: (primaryColor) => {
21
- try {
22
- parseHexColorOrThrow(primaryColor);
23
- }
24
- catch {
25
- return;
26
- }
27
- updateMode({ primaryColor });
28
- } }, `${selection.theme.id}:${selection.mode}:${selection.modeConfig.primaryColor}`) }), _jsx(Field, { label: "Harmony", children: _jsx(View, { style: styles.choiceRow, children: SUPPORTED_COLOR_HARMONIES.map((harmony) => (_jsx(HarmonyChoice, { harmony: harmony, selected: selection.modeConfig.harmony === harmony, onPress: () => updateMode({ harmony }) }, harmony))) }) })] })] }));
46
+ return (_jsxs(AdminScroll, { children: [_jsx(AdminHeader, { title: "Colors", description: "Edit the canonical color source for the runtime mode currently being previewed." }), _jsx(ThemeModeEditorSelector, {}), _jsx(Card, { title: `${selection.theme.name} · ${selection.mode === 'light' ? 'Light' : 'Dark'}`, children: _jsx(AuthoringEditor, { model: model, onMutation: updateAuthoredTheme, renderCustomControl: renderThemeColorControl }) })] }));
29
47
  }
30
- /*** Render one selectable color-harmony option. */
31
- function HarmonyChoice(props) {
32
- return (_jsx(Pressable, { accessibilityRole: "button", accessibilityState: { selected: props.selected }, onPress: props.onPress, style: [styles.choice, props.selected ? styles.choiceSelected : null], children: _jsx(Text, { color: props.selected ? 'primary' : 'neutral', variant: "bodySmall", weight: "semiBold", children: formatHarmonyLabel(props.harmony) }) }));
48
+ /*** Preserve incomplete color input locally while committing only valid Color Theory hex values. */
49
+ function renderThemeColorControl({ model, onMutation, }) {
50
+ if (model.editor?.kind !== 'theme-hex-color' ||
51
+ model.kind !== 'scalar' ||
52
+ model.scalarType !== 'string') {
53
+ return undefined;
54
+ }
55
+ return (_jsx(TextInput, { defaultValue: typeof model.value === 'string' ? model.value : '', autoCapitalize: "none", autoCorrect: false, maxLength: 7, onChangeText: (primaryColor) => {
56
+ try {
57
+ parseHexColorOrThrow(primaryColor);
58
+ }
59
+ catch {
60
+ return;
61
+ }
62
+ onMutation({ kind: 'set', path: model.path, value: primaryColor });
63
+ } }, `${model.path.join('.')}:${String(model.value ?? '')}`));
33
64
  }
34
65
  /*** Render the theme-colors fallback when no canonical active theme is available. */
35
66
  function Unavailable() {
36
67
  return (_jsx(AdminScroll, { children: _jsx(AdminHeader, { title: "Theme unavailable", description: "No canonical active theme is available." }) }));
37
68
  }
38
- const styles = StyleSheet.create({
39
- choiceRow: { flexDirection: 'row', flexWrap: 'wrap', gap: 8 },
40
- choice: {
41
- borderWidth: 1,
42
- borderRadius: 999,
43
- borderColor: 'transparent',
44
- paddingHorizontal: 12,
45
- paddingVertical: 8,
46
- },
47
- choiceSelected: { borderColor: '#4f46e5' },
48
- });
49
69
  //# sourceMappingURL=ThemeColorsAdminPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeColorsAdminPage.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeColorsAdminPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ThemeColorsAdminPage.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeColorsAdminPage.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import React from 'react';
2
- import { type NumericThemeTokenFamily } from './themeTokenAuthoringModel';
3
- /*** Render one numeric theme-token family with inherited/resolved values, authored overrides, reset actions, and token creation. */
2
+ /*** Render one numeric Theme token family from owner structure with resolved ZORA values as inheritance. */
4
3
  export declare function ThemeNumericTokensAdminPage(props: {
5
4
  readonly family: NumericThemeTokenFamily;
6
5
  }): React.JSX.Element;
6
+ type NumericThemeTokenFamily = 'spacing' | 'radii' | 'shadows';
7
+ export {};
7
8
  //# sourceMappingURL=ThemeNumericTokensAdminPage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeNumericTokensAdminPage.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeNumericTokensAdminPage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAIxC,OAAO,EAAE,KAAK,uBAAuB,EAA2B,MAAM,4BAA4B,CAAC;AAYnG,oIAAoI;AACpI,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAA;CAAE,qBA2D9F"}
1
+ {"version":3,"file":"ThemeNumericTokensAdminPage.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeNumericTokensAdminPage.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,4GAA4G;AAC5G,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAA;CAAE,qBAiC9F;AAED,KAAK,uBAAuB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC"}