@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
@@ -1,84 +1,52 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { parseNonNegativeNumber } from '@ankhorage/utility/number';
3
- import { Card, Text, useZoraTheme } from '@ankhorage/zora';
4
- import React, { useState } from 'react';
5
- import { Pressable, StyleSheet, View } from 'react-native';
6
- import { AdminHeader, AdminScroll, Field, Input } from '../adminPagePrimitives';
7
- import { updateNumericThemeToken } from './themeTokenAuthoringModel';
2
+ import { Card, useZoraTheme } from '@ankhorage/zora';
3
+ import React from 'react';
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 } from '../adminPagePrimitives';
8
8
  import { useActiveThemeAdmin } from './useActiveThemeAdmin';
9
- const COPY = {
10
- spacing: { title: 'Spacing', description: 'Shared spacing tokens used by Theme recipes.' },
11
- radii: { title: 'Radii', description: 'Shared corner-radius tokens used by Theme recipes.' },
12
- shadows: {
13
- title: 'Shadows',
14
- description: 'Shared shadow-strength tokens used by Theme recipes.',
15
- },
16
- };
17
- /*** Render one numeric theme-token family with inherited/resolved values, authored overrides, reset actions, and token creation. */
9
+ /*** Render one numeric Theme token family from owner structure with resolved ZORA values as inheritance. */
18
10
  export function ThemeNumericTokensAdminPage(props) {
19
11
  const { theme: resolvedTheme } = useZoraTheme();
20
12
  const { selection, updateTheme } = useActiveThemeAdmin();
21
- const [newKey, setNewKey] = useState('');
22
- const [newValue, setNewValue] = useState('');
23
- const copy = COPY[props.family];
13
+ const copy = resolveNumericThemeTokenCopy(props.family);
24
14
  if (!selection)
25
15
  return _jsx(ThemeUnavailable, {});
26
- const resolved = resolvedTheme[props.family];
27
- const authored = selection.theme.tokens?.[props.family];
28
- /*** Set or remove one authored numeric token override and persist the updated theme token tree. */
29
- const updateValue = (key, value) => {
30
- const tokens = updateNumericThemeToken({
31
- tokens: selection.theme.tokens,
32
- family: props.family,
33
- key,
34
- value,
35
- });
36
- updateTheme({ tokens });
16
+ const resolvedValue = props.family === 'spacing'
17
+ ? { tokens: { spacing: resolvedTheme.spacing } }
18
+ : props.family === 'radii'
19
+ ? { tokens: { radii: resolvedTheme.radii } }
20
+ : { tokens: { shadows: resolvedTheme.shadows } };
21
+ const model = deriveThemeAuthoringModel({
22
+ theme: selection.theme,
23
+ path: ['tokens', props.family],
24
+ resolvedValue,
25
+ });
26
+ /*** Apply one owner-derived token mutation through the canonical Theme boundary. */
27
+ const updateAuthoredTheme = (mutation) => {
28
+ const result = applyThemeAuthoringMutation(selection.theme, mutation);
29
+ if (result.ok)
30
+ updateTheme(result.value);
37
31
  };
38
- /*** Validate and insert a newly named non-negative numeric theme token. */
39
- const addToken = () => {
40
- const key = newKey.trim();
41
- const value = parseNonNegativeNumber(newValue);
42
- if (!key || key === 'none' || value === null)
43
- return;
44
- updateValue(key, value);
45
- setNewKey('');
46
- setNewValue('');
47
- };
48
- return (_jsxs(AdminScroll, { children: [_jsx(AdminHeader, { title: copy.title, description: copy.description }), _jsx(Card, { title: `${selection.theme.name} · ${copy.title}`, children: _jsx(View, { style: styles.list, children: Object.entries(resolved).map(([key, value]) => (_jsx(NumericTokenRow, { tokenKey: key, value: value, authored: authored?.[key] !== undefined, locked: key === 'none', onChange: (next) => updateValue(key, next) }, key))) }) }), _jsxs(Card, { title: "Add token", children: [_jsx(Field, { label: "Token name", children: _jsx(Input, { value: newKey, autoCapitalize: "none", onChangeText: setNewKey }) }), _jsx(Field, { label: "Value", children: _jsx(Input, { value: newValue, keyboardType: "numeric", onChangeText: setNewValue }) }), _jsx(Action, { label: "Add token", onPress: addToken })] })] }));
49
- }
50
- /*** Render one resolved numeric token with editable value and reset control for authored overrides. */
51
- function NumericTokenRow(props) {
52
- return (_jsxs(View, { style: styles.row, children: [_jsx(View, { style: styles.rowInput, children: _jsx(Field, { label: props.tokenKey, children: _jsx(Input, { value: String(props.value), editable: !props.locked, keyboardType: "numeric", onChangeText: (text) => {
53
- const value = parseNonNegativeNumber(text);
54
- if (value !== null)
55
- props.onChange(value);
56
- } }) }) }), props.authored && !props.locked ? (_jsx(Action, { label: "Reset", onPress: () => props.onChange(undefined) })) : null] }));
32
+ return (_jsxs(AdminScroll, { children: [_jsx(AdminHeader, { title: copy.title, description: copy.description }), _jsx(Card, { title: `${selection.theme.name} · ${copy.title}`, children: _jsx(AuthoringEditor, { model: model, onMutation: updateAuthoredTheme }) })] }));
57
33
  }
58
- /***
59
- * Render a bordered theme-token action.
60
- * @todo Reuse canonical ZORA Button instead of a local generic action primitive.
61
- */
62
- function Action(props) {
63
- const { theme } = useZoraTheme();
64
- return (_jsx(Pressable, { accessibilityRole: "button", onPress: props.onPress, style: [styles.action, { borderColor: theme.colors.border }], children: _jsx(Text, { color: "primary", weight: "semiBold", children: props.label }) }));
34
+ /*** Resolve route-specific numeric Theme copy without dynamic object indexing. */
35
+ function resolveNumericThemeTokenCopy(family) {
36
+ switch (family) {
37
+ case 'spacing':
38
+ return { title: 'Spacing', description: 'Shared spacing tokens used by Theme recipes.' };
39
+ case 'radii':
40
+ return { title: 'Radii', description: 'Shared corner-radius tokens used by Theme recipes.' };
41
+ case 'shadows':
42
+ return {
43
+ title: 'Shadows',
44
+ description: 'Shared shadow-strength tokens used by Theme recipes.',
45
+ };
46
+ }
65
47
  }
66
48
  /*** Render the numeric-token page fallback when no active theme is available. */
67
49
  function ThemeUnavailable() {
68
50
  return (_jsx(AdminScroll, { children: _jsx(AdminHeader, { title: "Theme unavailable", description: "No canonical active theme is available." }) }));
69
51
  }
70
- const styles = StyleSheet.create({
71
- list: { gap: 12 },
72
- row: { flexDirection: 'row', alignItems: 'flex-end', gap: 12 },
73
- rowInput: { flex: 1 },
74
- action: {
75
- minHeight: 42,
76
- borderWidth: 1,
77
- borderRadius: 8,
78
- paddingHorizontal: 12,
79
- paddingVertical: 9,
80
- justifyContent: 'center',
81
- alignSelf: 'flex-start',
82
- },
83
- });
84
52
  //# sourceMappingURL=ThemeNumericTokensAdminPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeNumericTokensAdminPage.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeNumericTokensAdminPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ThemeNumericTokensAdminPage.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeNumericTokensAdminPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrD,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,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,4GAA4G;AAC5G,MAAM,UAAU,2BAA2B,CAAC,KAAmD;IAC7F,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,YAAY,EAAE,CAAC;IAChD,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,mBAAmB,EAAE,CAAC;IACzD,MAAM,IAAI,GAAG,4BAA4B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAExD,IAAI,CAAC,SAAS;QAAE,OAAO,KAAC,gBAAgB,KAAG,CAAC;IAE5C,MAAM,aAAa,GACjB,KAAK,CAAC,MAAM,KAAK,SAAS;QACxB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,EAAE;QAChD,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO;YACxB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,EAAE;YAC5C,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;IACvD,MAAM,KAAK,GAAG,yBAAyB,CAAC;QACtC,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;QAC9B,aAAa;KACd,CAAC,CAAC;IAEH,oFAAoF;IACpF,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,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,GAAI,EACjE,KAAC,IAAI,IAAC,KAAK,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,IAAI,CAAC,KAAK,EAAE,YACpD,KAAC,eAAe,IAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,mBAAmB,GAAI,GAC7D,IACK,CACf,CAAC;AACJ,CAAC;AASD,kFAAkF;AAClF,SAAS,4BAA4B,CAAC,MAA+B;IACnE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,8CAA8C,EAAE,CAAC;QAC3F,KAAK,OAAO;YACV,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,oDAAoD,EAAE,CAAC;QAC/F,KAAK,SAAS;YACZ,OAAO;gBACL,KAAK,EAAE,SAAS;gBAChB,WAAW,EAAE,sDAAsD;aACpE,CAAC;IACN,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,SAAS,gBAAgB;IACvB,OAAO,CACL,KAAC,WAAW,cACV,KAAC,WAAW,IACV,KAAK,EAAC,mBAAmB,EACzB,WAAW,EAAC,yCAAyC,GACrD,GACU,CACf,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
- /*** Compose heading, type-size, and font-weight editors for the active theme's global typography token set. */
2
+ /*** Render global typography overrides from the owner structure with resolved ZORA typography as inheritance. */
3
3
  export declare function ThemeTypographyAdminPage(): React.JSX.Element;
4
4
  //# sourceMappingURL=ThemeTypographyAdminPage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeTypographyAdminPage.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeTypographyAdminPage.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,+GAA+G;AAC/G,wBAAgB,wBAAwB,sBAuBvC"}
1
+ {"version":3,"file":"ThemeTypographyAdminPage.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeTypographyAdminPage.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,iHAAiH;AACjH,wBAAgB,wBAAwB,sBA2CvC"}
@@ -1,14 +1,29 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Card, Text } from '@ankhorage/zora';
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Card, Text, useZoraTheme } from '@ankhorage/zora';
3
3
  import React from 'react';
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';
4
7
  import { AdminHeader, AdminScroll } from '../adminPagePrimitives';
5
- import { ThemeTypographyHeadingEditor } from './ThemeTypographyHeadingEditor';
6
- import { ThemeTypographySizeEditor } from './ThemeTypographySizeEditor';
7
- import { ThemeTypographyWeightEditor } from './ThemeTypographyWeightEditor';
8
8
  import { useActiveThemeAdmin } from './useActiveThemeAdmin';
9
- /*** Compose heading, type-size, and font-weight editors for the active theme's global typography token set. */
9
+ /*** Render global typography overrides from the owner structure with resolved ZORA typography as inheritance. */
10
10
  export function ThemeTypographyAdminPage() {
11
- const { selection } = useActiveThemeAdmin();
12
- return (_jsxs(AdminScroll, { children: [_jsx(AdminHeader, { title: "Typography", description: "Edit theme-global type scales and semantic weights shared across runtime modes." }), selection ? (_jsxs(_Fragment, { children: [_jsx(ThemeTypographyHeadingEditor, {}), _jsx(ThemeTypographySizeEditor, {}), _jsx(ThemeTypographyWeightEditor, {})] })) : (_jsx(Card, { title: "Theme unavailable", children: _jsx(Text, { color: "neutral", emphasis: "muted", children: "The Studio manifest does not contain a valid active theme." }) }))] }));
11
+ const { theme: resolvedTheme } = useZoraTheme();
12
+ const { selection, updateTheme } = useActiveThemeAdmin();
13
+ if (!selection) {
14
+ return (_jsxs(AdminScroll, { children: [_jsx(AdminHeader, { title: "Typography", description: "Edit theme-global type scales and semantic weights shared across runtime modes." }), _jsx(Card, { title: "Theme unavailable", children: _jsx(Text, { color: "neutral", emphasis: "muted", children: "The Studio manifest does not contain a valid active theme." }) })] }));
15
+ }
16
+ const model = deriveThemeAuthoringModel({
17
+ theme: selection.theme,
18
+ path: ['tokens', 'typography'],
19
+ resolvedValue: { tokens: { typography: resolvedTheme.typography } },
20
+ });
21
+ /*** Apply one owner-derived typography mutation through the canonical Theme boundary. */
22
+ const updateAuthoredTheme = (mutation) => {
23
+ const result = applyThemeAuthoringMutation(selection.theme, mutation);
24
+ if (result.ok)
25
+ updateTheme(result.value);
26
+ };
27
+ return (_jsxs(AdminScroll, { children: [_jsx(AdminHeader, { title: "Typography", description: "Edit theme-global type scales and semantic weights shared across runtime modes." }), _jsx(Card, { title: `${selection.theme.name} · Typography`, children: _jsx(AuthoringEditor, { model: model, onMutation: updateAuthoredTheme }) })] }));
13
28
  }
14
29
  //# sourceMappingURL=ThemeTypographyAdminPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeTypographyAdminPage.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeTypographyAdminPage.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,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,+GAA+G;AAC/G,MAAM,UAAU,wBAAwB;IACtC,MAAM,EAAE,SAAS,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAC5C,OAAO,CACL,MAAC,WAAW,eACV,KAAC,WAAW,IACV,KAAK,EAAC,YAAY,EAClB,WAAW,EAAC,iFAAiF,GAC7F,EACD,SAAS,CAAC,CAAC,CAAC,CACX,8BACE,KAAC,4BAA4B,KAAG,EAChC,KAAC,yBAAyB,KAAG,EAC7B,KAAC,2BAA2B,KAAG,IAC9B,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":"ThemeTypographyAdminPage.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeTypographyAdminPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC3D,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,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,iHAAiH;AACjH,MAAM,UAAU,wBAAwB;IACtC,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,YAAY,EAAE,CAAC;IAChD,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,YAAY,EAClB,WAAW,EAAC,iFAAiF,GAC7F,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;QACtC,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,IAAI,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;QAC9B,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,UAAU,EAAE,EAAE;KACpE,CAAC,CAAC;IAEH,yFAAyF;IACzF,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,YAAY,EAClB,WAAW,EAAC,iFAAiF,GAC7F,EACF,KAAC,IAAI,IAAC,KAAK,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,eAAe,YACjD,KAAC,eAAe,IAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,mBAAmB,GAAI,GAC7D,IACK,CACf,CAAC;AACJ,CAAC"}
@@ -14,19 +14,6 @@ export declare function resolveActiveThemeModeSelection(args: {
14
14
  readonly activeThemeId: string | undefined;
15
15
  readonly surfaceMode: ActiveThemeMode;
16
16
  }): ActiveThemeModeSelection | null;
17
- /*** Project partial mode updates into the light or dark branch expected by Studio theme mutations. */
18
- export declare function createThemeModeUpdates(mode: ActiveThemeMode, updates: Partial<ThemeModeConfig>): {
19
- readonly light?: Partial<ThemeModeConfig>;
20
- readonly dark?: Partial<ThemeModeConfig>;
21
- };
22
- /***
23
- * Resolve the source color/harmony values used to seed ZORA theme administration for one mode.
24
- * @todo Keep this ZORA/theme bridge with the theme owner rather than generic UI.
25
- */
26
- export declare function resolveZoraThemeSourceModeConfig(args: {
27
- readonly theme: ThemeConfig;
28
- readonly mode: ActiveThemeMode;
29
- }): Pick<ThemeModeConfig, 'primaryColor' | 'harmony'>;
30
17
  /***
31
18
  * Clone the theme and both mode configs before passing it into mutable/derived ZORA surface theme flows.
32
19
  * @todo Keep this theme-boundary adapter with theme/ZORA integration ownership.
@@ -1 +1 @@
1
- {"version":3,"file":"adminThemeModel.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminThemeModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,aAAa,EACd,MAAM,sBAAsB,CAAC;AAG9B,KAAK,eAAe,GAAG,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAEnE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE;IACpD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;CACvC,GAAG,wBAAwB,GAAG,IAAI,CAQlC;AAED,sGAAsG;AACtG,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAChC;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;CAAE,CAEzF;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,IAAI,EAAE;IACrD,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;CAChC,GAAG,IAAI,CAAC,eAAe,EAAE,cAAc,GAAG,SAAS,CAAC,CAEpD;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAM7E"}
1
+ {"version":3,"file":"adminThemeModel.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminThemeModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,aAAa,EACd,MAAM,sBAAsB,CAAC;AAG9B,KAAK,eAAe,GAAG,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAEnE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE;IACpD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;CACvC,GAAG,wBAAwB,GAAG,IAAI,CAQlC;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAM7E"}
@@ -12,17 +12,6 @@ export function resolveActiveThemeModeSelection(args) {
12
12
  const modeConfig = theme[args.surfaceMode];
13
13
  return { theme, mode: args.surfaceMode, modeConfig };
14
14
  }
15
- /*** Project partial mode updates into the light or dark branch expected by Studio theme mutations. */
16
- export function createThemeModeUpdates(mode, updates) {
17
- return mode === 'dark' ? { dark: updates } : { light: updates };
18
- }
19
- /***
20
- * Resolve the source color/harmony values used to seed ZORA theme administration for one mode.
21
- * @todo Keep this ZORA/theme bridge with the theme owner rather than generic UI.
22
- */
23
- export function resolveZoraThemeSourceModeConfig(args) {
24
- return args.theme[args.mode];
25
- }
26
15
  /***
27
16
  * Clone the theme and both mode configs before passing it into mutable/derived ZORA surface theme flows.
28
17
  * @todo Keep this theme-boundary adapter with theme/ZORA integration ownership.
@@ -1 +1 @@
1
- {"version":3,"file":"adminThemeModel.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminThemeModel.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAU5D;;;GAGG;AACH,MAAM,UAAU,+BAA+B,CAAC,IAI/C;IACC,IAAI,CAAC,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,KAAK,GAAG,eAAe,CAAc,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5E,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE3C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;AACvD,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,sBAAsB,CACpC,IAAqB,EACrB,OAAiC;IAEjC,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gCAAgC,CAAC,IAGhD;IACC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAAC,KAAkB;IAC9D,OAAO;QACL,GAAG,KAAK;QACR,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE;QACzB,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE;KACxB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"adminThemeModel.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminThemeModel.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAU5D;;;GAGG;AACH,MAAM,UAAU,+BAA+B,CAAC,IAI/C;IACC,IAAI,CAAC,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,KAAK,GAAG,eAAe,CAAc,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5E,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE3C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAAC,KAAkB;IAC9D,OAAO;QACL,GAAG,KAAK;QACR,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE;QACzB,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE;KACxB,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ankhorage/studio",
3
- "version": "5.9.2",
3
+ "version": "5.10.0",
4
4
  "description": "Studio authoring package for Ankhorage apps",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/ankhorage/studio#readme",
@@ -218,7 +218,7 @@
218
218
  "@ankhorage/apm": "^0.8.10",
219
219
  "@ankhorage/color-theory": "^0.3.1",
220
220
  "@ankhorage/contracts": "^22.8.0",
221
- "@ankhorage/data-sources": "^2.0.14",
221
+ "@ankhorage/data-sources": "^2.0.15",
222
222
  "@ankhorage/deploy": "^0.12.9",
223
223
  "@ankhorage/expo-runtime": "^4.0.6",
224
224
  "@ankhorage/infra": "^7.1.6",
@@ -1,10 +0,0 @@
1
- import React from 'react';
2
- /***
3
- * Render a bordered theme-token action button used by token editors.
4
- * @todo Replace with canonical ZORA Button instead of maintaining a Studio-local generic action primitive.
5
- */
6
- export declare function ThemeTokenAction(props: {
7
- readonly label: string;
8
- readonly onPress: () => void;
9
- }): React.JSX.Element;
10
- //# sourceMappingURL=ThemeTokenAction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThemeTokenAction.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeTokenAction.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,qBAa/F"}
@@ -1,24 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Text, useZoraTheme } from '@ankhorage/zora';
3
- import React from 'react';
4
- import { Pressable, StyleSheet } from 'react-native';
5
- /***
6
- * Render a bordered theme-token action button used by token editors.
7
- * @todo Replace with canonical ZORA Button instead of maintaining a Studio-local generic action primitive.
8
- */
9
- export function ThemeTokenAction(props) {
10
- const { theme } = useZoraTheme();
11
- return (_jsx(Pressable, { accessibilityRole: "button", onPress: props.onPress, style: [styles.action, { borderColor: theme.colors.border }], children: _jsx(Text, { color: "primary", weight: "semiBold", children: props.label }) }));
12
- }
13
- const styles = StyleSheet.create({
14
- action: {
15
- minHeight: 42,
16
- borderWidth: 1,
17
- borderRadius: 8,
18
- paddingHorizontal: 12,
19
- paddingVertical: 9,
20
- justifyContent: 'center',
21
- alignSelf: 'flex-start',
22
- },
23
- });
24
- //# sourceMappingURL=ThemeTokenAction.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThemeTokenAction.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeTokenAction.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAErD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA+D;IAC9F,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,CAAC;IACjC,OAAO,CACL,KAAC,SAAS,IACR,iBAAiB,EAAC,QAAQ,EAC1B,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,YAE5D,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,MAAM,EAAC,UAAU,YACpC,KAAK,CAAC,KAAK,GACP,GACG,CACb,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE;QACN,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,iBAAiB,EAAE,EAAE;QACrB,eAAe,EAAE,CAAC;QAClB,cAAc,EAAE,QAAQ;QACxB,SAAS,EAAE,YAAY;KACxB;CACF,CAAC,CAAC"}
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- /*** Render resolved heading typography tokens with authored size/line-height/weight overrides and reset actions. */
3
- export declare function ThemeTypographyHeadingEditor(): React.JSX.Element | null;
4
- //# sourceMappingURL=ThemeTypographyHeadingEditor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThemeTypographyHeadingEditor.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeTypographyHeadingEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,oHAAoH;AACpH,wBAAgB,4BAA4B,6BAoC3C"}
@@ -1,61 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { parseNonNegativeNumber } from '@ankhorage/utility/number';
3
- import { Card, Text, useZoraTheme } from '@ankhorage/zora';
4
- import React from 'react';
5
- import { Pressable, StyleSheet, View } from 'react-native';
6
- import { Field, Input } from '../adminPagePrimitives';
7
- import { ThemeTokenAction } from './ThemeTokenAction';
8
- import { updateTypographyHeading } from './themeTokenAuthoringModel';
9
- import { useActiveThemeAdmin } from './useActiveThemeAdmin';
10
- const HEADING_WEIGHTS = ['regular', 'medium', 'semiBold', 'bold'];
11
- /*** Render resolved heading typography tokens with authored size/line-height/weight overrides and reset actions. */
12
- export function ThemeTypographyHeadingEditor() {
13
- const { theme: resolvedTheme } = useZoraTheme();
14
- const { selection, updateTheme } = useActiveThemeAdmin();
15
- if (!selection)
16
- return null;
17
- /*** Set or remove one authored heading token field and persist the resulting theme token tree. */
18
- const updateHeading = (level, field, value) => {
19
- updateTheme({
20
- tokens: updateTypographyHeading({
21
- tokens: selection.theme.tokens,
22
- level,
23
- field,
24
- value,
25
- }),
26
- });
27
- };
28
- return (_jsx(Card, { title: "Headings", children: _jsx(View, { style: styles.list, children: Object.entries(resolvedTheme.typography.headings).map(([level, heading]) => (_jsx(HeadingRow, { level: level, heading: heading, authored: selection.theme.tokens?.typography?.headings?.[level], onChange: (field, value) => updateHeading(level, field, value) }, level))) }) }));
29
- }
30
- /*** Render one heading token level with numeric metrics and semantic weight selection. */
31
- function HeadingRow(props) {
32
- return (_jsxs(View, { style: styles.heading, children: [_jsxs(Text, { weight: "semiBold", children: ["Heading ", props.level] }), _jsxs(View, { style: styles.metrics, children: [_jsx(MetricInput, { label: "Size", value: props.heading.size, authored: props.authored?.size !== undefined, onChange: (value) => props.onChange('size', value) }), _jsx(MetricInput, { label: "Line height", value: props.heading.lineHeight, authored: props.authored?.lineHeight !== undefined, onChange: (value) => props.onChange('lineHeight', value) })] }), _jsx(HeadingWeightChoice, { value: props.heading.weight, authored: props.authored?.weight !== undefined, onChange: (value) => props.onChange('weight', value) })] }));
33
- }
34
- /*** Render one numeric heading metric input with reset-to-inherited support. */
35
- function MetricInput(props) {
36
- return (_jsxs(View, { style: styles.metric, children: [_jsx(Field, { label: props.label, children: _jsx(Input, { value: String(props.value), keyboardType: "numeric", onChangeText: (text) => {
37
- const value = parseNonNegativeNumber(text);
38
- if (value !== null)
39
- props.onChange(value);
40
- } }) }), props.authored ? (_jsx(ThemeTokenAction, { label: "Reset", onPress: () => props.onChange(undefined) })) : null] }));
41
- }
42
- /*** Render semantic heading-weight choices plus reset-to-inherited behavior. */
43
- function HeadingWeightChoice(props) {
44
- const { theme } = useZoraTheme();
45
- return (_jsx(Field, { label: "Weight", children: _jsxs(View, { style: styles.weightRow, children: [_jsx(View, { style: styles.weightChoices, children: HEADING_WEIGHTS.map((weight) => (_jsx(Pressable, { accessibilityRole: "button", accessibilityState: { selected: weight === props.value }, onPress: () => props.onChange(weight), style: [
46
- styles.weight,
47
- {
48
- borderColor: weight === props.value ? theme.colors.primary : theme.colors.border,
49
- },
50
- ], children: _jsx(Text, { color: weight === props.value ? 'primary' : 'neutral', variant: "bodySmall", children: weight }) }, weight))) }), props.authored ? (_jsx(ThemeTokenAction, { label: "Reset", onPress: () => props.onChange(undefined) })) : null] }) }));
51
- }
52
- const styles = StyleSheet.create({
53
- list: { gap: 18 },
54
- heading: { gap: 10 },
55
- metrics: { flexDirection: 'row', gap: 12 },
56
- metric: { flex: 1, flexDirection: 'row', alignItems: 'flex-end', gap: 8 },
57
- weightRow: { flexDirection: 'row', alignItems: 'center', gap: 12 },
58
- weightChoices: { flex: 1, flexDirection: 'row', flexWrap: 'wrap', gap: 6 },
59
- weight: { borderWidth: 1, borderRadius: 999, paddingHorizontal: 10, paddingVertical: 6 },
60
- });
61
- //# sourceMappingURL=ThemeTypographyHeadingEditor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThemeTypographyHeadingEditor.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeTypographyHeadingEditor.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- /*** Render resolved typography size tokens with authored overrides, reset controls, and custom token creation. */
3
- export declare function ThemeTypographySizeEditor(): React.JSX.Element | null;
4
- //# sourceMappingURL=ThemeTypographySizeEditor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThemeTypographySizeEditor.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeTypographySizeEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAQxC,kHAAkH;AAClH,wBAAgB,yBAAyB,6BAoDxC"}
@@ -1,51 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { parseNonNegativeNumber } from '@ankhorage/utility/number';
3
- import { Card, useZoraTheme } from '@ankhorage/zora';
4
- import React, { useState } from 'react';
5
- import { StyleSheet, View } from 'react-native';
6
- import { Field, Input } from '../adminPagePrimitives';
7
- import { ThemeTokenAction } from './ThemeTokenAction';
8
- import { updateTypographySize } from './themeTokenAuthoringModel';
9
- import { useActiveThemeAdmin } from './useActiveThemeAdmin';
10
- /*** Render resolved typography size tokens with authored overrides, reset controls, and custom token creation. */
11
- export function ThemeTypographySizeEditor() {
12
- const { theme: resolvedTheme } = useZoraTheme();
13
- const { selection, updateTheme } = useActiveThemeAdmin();
14
- const [newKey, setNewKey] = useState('');
15
- const [newValue, setNewValue] = useState('');
16
- if (!selection)
17
- return null;
18
- /*** Set or remove one authored typography size token. */
19
- const updateSize = (key, value) => {
20
- updateTheme({
21
- tokens: updateTypographySize({ tokens: selection.theme.tokens, key, value }),
22
- });
23
- };
24
- /*** Validate and insert one custom non-negative typography size token. */
25
- const addSize = () => {
26
- const key = newKey.trim();
27
- const value = parseNonNegativeNumber(newValue);
28
- if (!key || value === null)
29
- return;
30
- updateSize(key, value);
31
- setNewKey('');
32
- setNewValue('');
33
- };
34
- return (_jsxs(Card, { title: "Type sizes", children: [_jsx(View, { style: styles.list, children: Object.entries(resolvedTheme.typography.sizes).map(([key, value]) => (_jsx(SizeRow, { tokenKey: key, value: value, authored: selection.theme.tokens?.typography?.sizes?.[key] !== undefined, onChange: (next) => updateSize(key, next) }, key))) }), _jsxs(View, { style: styles.addRow, children: [_jsx(View, { style: styles.grow, children: _jsx(Field, { label: "New size token", children: _jsx(Input, { value: newKey, autoCapitalize: "none", onChangeText: setNewKey }) }) }), _jsx(View, { style: styles.value, children: _jsx(Field, { label: "Value", children: _jsx(Input, { value: newValue, keyboardType: "numeric", onChangeText: setNewValue }) }) }), _jsx(ThemeTokenAction, { label: "Add", onPress: addSize })] })] }));
35
- }
36
- /*** Render one typography size token with reset-to-inherited support. */
37
- function SizeRow(props) {
38
- return (_jsxs(View, { style: styles.row, children: [_jsx(View, { style: styles.grow, children: _jsx(Field, { label: props.tokenKey, children: _jsx(Input, { value: String(props.value), keyboardType: "numeric", onChangeText: (text) => {
39
- const value = parseNonNegativeNumber(text);
40
- if (value !== null)
41
- props.onChange(value);
42
- } }) }) }), props.authored ? (_jsx(ThemeTokenAction, { label: "Reset", onPress: () => props.onChange(undefined) })) : null] }));
43
- }
44
- const styles = StyleSheet.create({
45
- list: { gap: 12 },
46
- row: { flexDirection: 'row', alignItems: 'flex-end', gap: 12 },
47
- addRow: { flexDirection: 'row', alignItems: 'flex-end', gap: 12, marginTop: 16 },
48
- grow: { flex: 1 },
49
- value: { width: 140 },
50
- });
51
- //# sourceMappingURL=ThemeTypographySizeEditor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThemeTypographySizeEditor.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeTypographySizeEditor.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- /*** Render resolved typography weight tokens as selectable CSS/React Native font-weight values with reset-to-inherited controls. */
3
- export declare function ThemeTypographyWeightEditor(): React.JSX.Element | null;
4
- //# sourceMappingURL=ThemeTypographyWeightEditor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThemeTypographyWeightEditor.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeTypographyWeightEditor.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAsB1B,oIAAoI;AACpI,wBAAgB,2BAA2B,6BA2B1C"}
@@ -1,57 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Card, Text, useZoraTheme } from '@ankhorage/zora';
3
- import React from 'react';
4
- import { Pressable, StyleSheet, View } from 'react-native';
5
- import { Field } from '../adminPagePrimitives';
6
- import { ThemeTokenAction } from './ThemeTokenAction';
7
- import { updateTypographyWeight } from './themeTokenAuthoringModel';
8
- import { useActiveThemeAdmin } from './useActiveThemeAdmin';
9
- const FONT_WEIGHTS = [
10
- '100',
11
- '200',
12
- '300',
13
- '400',
14
- '500',
15
- '600',
16
- '700',
17
- '800',
18
- '900',
19
- 'normal',
20
- 'bold',
21
- ];
22
- /*** Render resolved typography weight tokens as selectable CSS/React Native font-weight values with reset-to-inherited controls. */
23
- export function ThemeTypographyWeightEditor() {
24
- const { theme: resolvedTheme } = useZoraTheme();
25
- const { selection, updateTheme } = useActiveThemeAdmin();
26
- if (!selection)
27
- return null;
28
- /*** Set or remove one authored typography weight token. */
29
- const updateWeight = (key, value) => {
30
- updateTheme({
31
- tokens: updateTypographyWeight({ tokens: selection.theme.tokens, key, value }),
32
- });
33
- };
34
- return (_jsx(Card, { title: "Font weights", children: _jsx(View, { style: styles.list, children: Object.entries(resolvedTheme.typography.weights).map(([key, value]) => (_jsx(WeightRow, { tokenKey: key, value: value, authored: selection.theme.tokens?.typography?.weights?.[key] !== undefined, onChange: (next) => updateWeight(key, next) }, key))) }) }));
35
- }
36
- /*** Render one typography weight token with explicit weight choices and reset-to-inherited behavior. */
37
- function WeightRow(props) {
38
- const { theme } = useZoraTheme();
39
- return (_jsx(Field, { label: props.tokenKey, children: _jsxs(View, { style: styles.row, children: [_jsx(View, { style: styles.choices, children: FONT_WEIGHTS.map((weight) => (_jsx(Pressable, { accessibilityRole: "button", accessibilityState: { selected: weight === props.value }, onPress: () => props.onChange(weight), style: [
40
- styles.choice,
41
- {
42
- borderColor: weight === props.value ? theme.colors.primary : theme.colors.border,
43
- },
44
- ], children: _jsx(Text, { color: weight === props.value ? 'primary' : 'neutral', variant: "bodySmall", children: weight }) }, weight))) }), props.authored ? (_jsx(ThemeTokenAction, { label: "Reset", onPress: () => props.onChange(undefined) })) : null] }) }));
45
- }
46
- const styles = StyleSheet.create({
47
- list: { gap: 14 },
48
- row: { flexDirection: 'row', alignItems: 'center', gap: 12 },
49
- choices: { flex: 1, flexDirection: 'row', flexWrap: 'wrap', gap: 6 },
50
- choice: {
51
- borderWidth: 1,
52
- borderRadius: 999,
53
- paddingHorizontal: 10,
54
- paddingVertical: 6,
55
- },
56
- });
57
- //# sourceMappingURL=ThemeTypographyWeightEditor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThemeTypographyWeightEditor.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ThemeTypographyWeightEditor.tsx"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type { ThemeModeConfig } from '@ankhorage/contracts';
2
- export declare const SUPPORTED_COLOR_HARMONIES: readonly ["monochromatic", "analogous", "complementary", "triadic", "tetradic", "splitComplementary"];
3
- /***
4
- * Convert a camelCase identifier into a space-separated human label with an initial capital.
5
- * @utility @ankhorage/utility/string
6
- */
7
- export declare function formatHarmonyLabel(harmony: ThemeModeConfig['harmony']): string;
8
- //# sourceMappingURL=adminThemeHarmony.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adminThemeHarmony.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminThemeHarmony.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,eAAO,MAAM,yBAAyB,uGAOoB,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,GAAG,MAAM,CAE9E"}
@@ -1,16 +0,0 @@
1
- export const SUPPORTED_COLOR_HARMONIES = [
2
- 'monochromatic',
3
- 'analogous',
4
- 'complementary',
5
- 'triadic',
6
- 'tetradic',
7
- 'splitComplementary',
8
- ];
9
- /***
10
- * Convert a camelCase identifier into a space-separated human label with an initial capital.
11
- * @utility @ankhorage/utility/string
12
- */
13
- export function formatHarmonyLabel(harmony) {
14
- return harmony.replace(/([A-Z])/g, ' $1').replace(/^./, (value) => value.toUpperCase());
15
- }
16
- //# sourceMappingURL=adminThemeHarmony.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adminThemeHarmony.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminThemeHarmony.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,eAAe;IACf,WAAW;IACX,eAAe;IACf,SAAS;IACT,UAAU;IACV,oBAAoB;CACoC,CAAC;AAE3D;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAmC;IACpE,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AAC1F,CAAC"}