@ankhorage/studio 0.17.0 → 0.18.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 (95) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/index.js +4 -1
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/contractGuards.d.ts.map +1 -1
  5. package/dist/contractGuards.js +5 -3
  6. package/dist/contractGuards.js.map +1 -1
  7. package/dist/core/StudioProvider.d.ts.map +1 -1
  8. package/dist/core/StudioProvider.js +0 -8
  9. package/dist/core/StudioProvider.js.map +1 -1
  10. package/dist/host/http/moduleRoutes.d.ts +6 -0
  11. package/dist/host/http/moduleRoutes.d.ts.map +1 -0
  12. package/dist/host/http/moduleRoutes.js +64 -0
  13. package/dist/host/http/moduleRoutes.js.map +1 -0
  14. package/dist/host/http/server.d.ts.map +1 -1
  15. package/dist/host/http/server.js +9 -114
  16. package/dist/host/http/server.js.map +1 -1
  17. package/dist/host/layout/layoutGenerator.js +8 -8
  18. package/dist/host/layout/templates/rootLayout.js +4 -4
  19. package/dist/host/modules/catalog.d.ts +18 -35
  20. package/dist/host/modules/catalog.d.ts.map +1 -1
  21. package/dist/host/modules/catalog.js +41 -105
  22. package/dist/host/modules/catalog.js.map +1 -1
  23. package/dist/host/modules/layout.d.ts +4 -4
  24. package/dist/host/modules/layout.d.ts.map +1 -1
  25. package/dist/host/orchestrator/moduleManager.d.ts +39 -46
  26. package/dist/host/orchestrator/moduleManager.d.ts.map +1 -1
  27. package/dist/host/orchestrator/moduleManager.js +213 -204
  28. package/dist/host/orchestrator/moduleManager.js.map +1 -1
  29. package/dist/host/orchestrator/projectManager.d.ts +1 -6
  30. package/dist/host/orchestrator/projectManager.d.ts.map +1 -1
  31. package/dist/host/orchestrator/projectManager.js +2 -45
  32. package/dist/host/orchestrator/projectManager.js.map +1 -1
  33. package/dist/host/orchestrator/resolveMutations.js +2 -2
  34. package/dist/host/orchestrator/resolveMutations.js.map +1 -1
  35. package/dist/index.d.ts +7 -26
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +7 -0
  38. package/dist/index.js.map +1 -1
  39. package/dist/manifestState.d.ts +0 -1
  40. package/dist/manifestState.d.ts.map +1 -1
  41. package/dist/manifestState.js +0 -43
  42. package/dist/manifestState.js.map +1 -1
  43. package/dist/manifestSync.js +1 -1
  44. package/dist/moduleAdminApi.d.ts +31 -0
  45. package/dist/moduleAdminApi.d.ts.map +1 -0
  46. package/dist/moduleAdminApi.js +169 -0
  47. package/dist/moduleAdminApi.js.map +1 -0
  48. package/dist/moduleAdminContracts.d.ts +39 -0
  49. package/dist/moduleAdminContracts.d.ts.map +1 -0
  50. package/dist/moduleAdminContracts.js +2 -0
  51. package/dist/moduleAdminContracts.js.map +1 -0
  52. package/dist/moduleAdminModel.d.ts +19 -0
  53. package/dist/moduleAdminModel.d.ts.map +1 -0
  54. package/dist/moduleAdminModel.js +58 -0
  55. package/dist/moduleAdminModel.js.map +1 -0
  56. package/dist/runtime/index.d.ts +0 -1
  57. package/dist/runtime/index.d.ts.map +1 -1
  58. package/dist/runtime/index.js +0 -1
  59. package/dist/runtime/index.js.map +1 -1
  60. package/dist/studioAdminRouteModel.d.ts +7 -1
  61. package/dist/studioAdminRouteModel.d.ts.map +1 -1
  62. package/dist/studioAdminRouteModel.js +41 -0
  63. package/dist/studioAdminRouteModel.js.map +1 -1
  64. package/dist/ui/admin/AnkhAdminPage.d.ts.map +1 -1
  65. package/dist/ui/admin/AnkhAdminPage.js +5 -1
  66. package/dist/ui/admin/AnkhAdminPage.js.map +1 -1
  67. package/dist/ui/admin/AnkhAdminShell.d.ts.map +1 -1
  68. package/dist/ui/admin/AnkhAdminShell.js +5 -2
  69. package/dist/ui/admin/AnkhAdminShell.js.map +1 -1
  70. package/dist/ui/admin/pages/AuthAdminPage.js +1 -1
  71. package/dist/ui/admin/pages/ModuleDetailAdminPage.d.ts +5 -0
  72. package/dist/ui/admin/pages/ModuleDetailAdminPage.d.ts.map +1 -0
  73. package/dist/ui/admin/pages/ModuleDetailAdminPage.js +122 -0
  74. package/dist/ui/admin/pages/ModuleDetailAdminPage.js.map +1 -0
  75. package/dist/ui/admin/pages/ModulesAdminPage.d.ts +3 -0
  76. package/dist/ui/admin/pages/ModulesAdminPage.d.ts.map +1 -0
  77. package/dist/ui/admin/pages/ModulesAdminPage.js +89 -0
  78. package/dist/ui/admin/pages/ModulesAdminPage.js.map +1 -0
  79. package/package.json +8 -24
  80. package/dist/localizationConfig.d.ts +0 -7
  81. package/dist/localizationConfig.d.ts.map +0 -1
  82. package/dist/localizationConfig.js +0 -19
  83. package/dist/localizationConfig.js.map +0 -1
  84. package/dist/localizationPanelModel.d.ts +0 -50
  85. package/dist/localizationPanelModel.d.ts.map +0 -1
  86. package/dist/localizationPanelModel.js +0 -81
  87. package/dist/localizationPanelModel.js.map +0 -1
  88. package/dist/runtime/localizationPreview.d.ts +0 -12
  89. package/dist/runtime/localizationPreview.d.ts.map +0 -1
  90. package/dist/runtime/localizationPreview.js +0 -11
  91. package/dist/runtime/localizationPreview.js.map +0 -1
  92. package/dist/runtimeLocalization.d.ts +0 -20
  93. package/dist/runtimeLocalization.d.ts.map +0 -1
  94. package/dist/runtimeLocalization.js +0 -78
  95. package/dist/runtimeLocalization.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ankhorage/studio",
3
- "version": "0.17.0",
3
+ "version": "0.18.0",
4
4
  "description": "Studio authoring package for Ankhorage apps",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/ankhorage/studio#readme",
@@ -52,10 +52,6 @@
52
52
  "types": "./dist/runtime/appExtensionRegistry.d.ts",
53
53
  "import": "./dist/runtime/appExtensionRegistry.js"
54
54
  },
55
- "./runtime/localizationPreview": {
56
- "types": "./dist/runtime/localizationPreview.d.ts",
57
- "import": "./dist/runtime/localizationPreview.js"
58
- },
59
55
  "./runtime/registry": {
60
56
  "types": "./dist/runtime/registry.d.ts",
61
57
  "import": "./dist/runtime/registry.js"
@@ -104,14 +100,6 @@
104
100
  "types": "./dist/insertModalModel.d.ts",
105
101
  "import": "./dist/insertModalModel.js"
106
102
  },
107
- "./localizationConfig": {
108
- "types": "./dist/localizationConfig.d.ts",
109
- "import": "./dist/localizationConfig.js"
110
- },
111
- "./localizationPanelModel": {
112
- "types": "./dist/localizationPanelModel.d.ts",
113
- "import": "./dist/localizationPanelModel.js"
114
- },
115
103
  "./manifestState": {
116
104
  "types": "./dist/manifestState.d.ts",
117
105
  "import": "./dist/manifestState.js"
@@ -144,10 +132,6 @@
144
132
  "types": "./dist/runtimeDiagnosticsModel.d.ts",
145
133
  "import": "./dist/runtimeDiagnosticsModel.js"
146
134
  },
147
- "./runtimeLocalization": {
148
- "types": "./dist/runtimeLocalization.d.ts",
149
- "import": "./dist/runtimeLocalization.js"
150
- },
151
135
  "./studioAdminRouteModel": {
152
136
  "types": "./dist/studioAdminRouteModel.d.ts",
153
137
  "import": "./dist/studioAdminRouteModel.js"
@@ -219,18 +203,18 @@
219
203
  ],
220
204
  "dependencies": {
221
205
  "@ankhorage/color-theory": "^0.0.8",
222
- "@ankhorage/contracts": "^5.0.0",
206
+ "@ankhorage/contracts": "^6.0.0",
223
207
  "@ankhorage/data-sources": "^1.0.1",
224
- "@ankhorage/expo-runtime": "^1.0.0",
225
- "@ankhorage/infra": "^2.0.1",
226
- "@ankhorage/orchestrator": "^0.2.4",
227
- "@ankhorage/orchestrator-module-expo-google-fonts": "^0.1.2",
228
- "@ankhorage/orchestrator-module-expo-localization": "^0.1.5",
208
+ "@ankhorage/expo-runtime": "^2.0.0",
209
+ "@ankhorage/infra": "^3.0.0",
210
+ "@ankhorage/orchestrator": "^0.3.0",
211
+ "@ankhorage/orchestrator-module-expo-google-fonts": "^0.2.0",
212
+ "@ankhorage/orchestrator-module-expo-localization": "^0.2.0",
229
213
  "@ankhorage/react-native-reanimated-dnd-web": "^0.3.2",
230
214
  "@ankhorage/runtime": "^1.0.0",
231
215
  "@ankhorage/supabase-auth": "^1.1.2",
232
216
  "@ankhorage/supabase-vault": "^0.2.4",
233
- "@ankhorage/templates": "^5.0.0",
217
+ "@ankhorage/templates": "^6.0.0",
234
218
  "@ankhorage/zora": "^2.9.3",
235
219
  "@ankhorage/zora-chess": "^0.1.2",
236
220
  "@ankhorage/zora-tabletop": "^0.0.5",
@@ -1,7 +0,0 @@
1
- export interface StudioLocalizationConfig {
2
- locales?: string[];
3
- }
4
- export declare function isStringArray(value: unknown): value is string[];
5
- export declare function isStringRecord(value: unknown): value is Record<string, string>;
6
- export declare function readLocalizationConfig(value: unknown): StudioLocalizationConfig | null;
7
- //# sourceMappingURL=localizationConfig.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"localizationConfig.d.ts","sourceRoot":"","sources":["../src/localizationConfig.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAMD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,EAAE,CAE/D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE9E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,wBAAwB,GAAG,IAAI,CAUtF"}
@@ -1,19 +0,0 @@
1
- function isRecord(value) {
2
- return typeof value === 'object' && value !== null && !Array.isArray(value);
3
- }
4
- export function isStringArray(value) {
5
- return Array.isArray(value) && value.every((item) => typeof item === 'string');
6
- }
7
- export function isStringRecord(value) {
8
- return isRecord(value) && Object.values(value).every((item) => typeof item === 'string');
9
- }
10
- export function readLocalizationConfig(value) {
11
- if (!isRecord(value)) {
12
- return null;
13
- }
14
- if (value.locales === undefined) {
15
- return {};
16
- }
17
- return isStringArray(value.locales) ? { locales: value.locales } : null;
18
- }
19
- //# sourceMappingURL=localizationConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"localizationConfig.js","sourceRoot":"","sources":["../src/localizationConfig.ts"],"names":[],"mappings":"AAIA,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC"}
@@ -1,50 +0,0 @@
1
- import type { UiNode } from '@ankhorage/contracts';
2
- export interface TranslatableFieldRef {
3
- screenId: string;
4
- nodeId: string;
5
- componentName: string;
6
- keyProp: string;
7
- defaultTextProp: string;
8
- currentKey: string;
9
- defaultText: string;
10
- path: string;
11
- }
12
- export interface TranslatableComponentMetaField {
13
- keyProp: string;
14
- defaultTextProp: string;
15
- }
16
- export interface TranslatableComponentMeta {
17
- i18n?: {
18
- fields?: readonly TranslatableComponentMetaField[];
19
- };
20
- }
21
- export type TranslatableComponentMetaRegistry = Record<string, TranslatableComponentMeta | undefined>;
22
- export declare function collectTranslatableFields(args: {
23
- root: UiNode;
24
- componentMeta: TranslatableComponentMetaRegistry;
25
- screenId: string;
26
- }): TranslatableFieldRef[];
27
- export declare function createLocalizationKeyFromText(text: string): string;
28
- export declare function filterTranslatableFields(args: {
29
- fields: readonly TranslatableFieldRef[];
30
- searchQuery: string;
31
- showOnlyMissing: boolean;
32
- activeLocale: string;
33
- dictionaries: Record<string, Record<string, string>>;
34
- }): TranslatableFieldRef[];
35
- export declare function createLocaleAddConfig(args: {
36
- currentLocales: readonly string[];
37
- localeInput: string;
38
- }): {
39
- locale: string;
40
- nextLocales: string[];
41
- } | null;
42
- export declare function createLocaleRemoveConfig(args: {
43
- locales: readonly string[];
44
- defaultLocale: string;
45
- localeToRemove: string;
46
- }): {
47
- nextLocales: string[];
48
- nextDefaultLocale: string;
49
- } | null;
50
- //# sourceMappingURL=localizationPanelModel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"localizationPanelModel.d.ts","sourceRoot":"","sources":["../src/localizationPanelModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,SAAS,8BAA8B,EAAE,CAAC;KACpD,CAAC;CACH;AAED,MAAM,MAAM,iCAAiC,GAAG,MAAM,CACpD,MAAM,EACN,yBAAyB,GAAG,SAAS,CACtC,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,iCAAiC,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,oBAAoB,EAAE,CA+BzB;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqBlE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACtD,GAAG,oBAAoB,EAAE,CAkBzB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAOnD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG;IAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAY9D"}
@@ -1,81 +0,0 @@
1
- export function collectTranslatableFields(args) {
2
- const { root, componentMeta, screenId } = args;
3
- const refs = [];
4
- function traverse(node, path) {
5
- const meta = componentMeta[node.type] ?? null;
6
- const fields = meta?.i18n?.fields ?? [];
7
- for (const field of fields) {
8
- const currentKey = node.props?.[field.keyProp] ?? '';
9
- const defaultText = node.props?.[field.defaultTextProp] ?? '';
10
- refs.push({
11
- screenId,
12
- nodeId: node.id,
13
- componentName: node.type,
14
- keyProp: field.keyProp,
15
- defaultTextProp: field.defaultTextProp,
16
- currentKey,
17
- defaultText,
18
- path: `${path} > ${node.alias ?? node.type}`,
19
- });
20
- }
21
- node.children?.forEach((child) => {
22
- traverse(child, `${path} > ${node.alias ?? node.type}`);
23
- });
24
- }
25
- traverse(root, screenId);
26
- return refs;
27
- }
28
- export function createLocalizationKeyFromText(text) {
29
- const normalized = text.trim().toLowerCase();
30
- let key = '';
31
- let previousWasSeparator = false;
32
- for (const char of normalized) {
33
- if ((char >= 'a' && char <= 'z') || (char >= '0' && char <= '9') || char === '-') {
34
- key += char;
35
- previousWasSeparator = false;
36
- continue;
37
- }
38
- if (char === ' ' || char === '_' || char === '\t' || char === '\n') {
39
- if (!previousWasSeparator && key.length > 0) {
40
- key += '_';
41
- previousWasSeparator = true;
42
- }
43
- }
44
- }
45
- return key.endsWith('_') ? key.slice(0, -1) : key;
46
- }
47
- export function filterTranslatableFields(args) {
48
- const { fields, searchQuery, showOnlyMissing, activeLocale, dictionaries } = args;
49
- const normalizedQuery = searchQuery.trim().toLowerCase();
50
- return fields.filter((field) => {
51
- const matchesSearch = normalizedQuery.length === 0 ||
52
- field.nodeId.toLowerCase().includes(normalizedQuery) ||
53
- field.currentKey.toLowerCase().includes(normalizedQuery) ||
54
- field.defaultText.toLowerCase().includes(normalizedQuery) ||
55
- field.path.toLowerCase().includes(normalizedQuery);
56
- if (!matchesSearch)
57
- return false;
58
- if (showOnlyMissing) {
59
- return !field.currentKey || !dictionaries[activeLocale]?.[field.currentKey];
60
- }
61
- return true;
62
- });
63
- }
64
- export function createLocaleAddConfig(args) {
65
- const locale = args.localeInput.trim().toLowerCase();
66
- if (!locale || args.currentLocales.includes(locale)) {
67
- return null;
68
- }
69
- return { locale, nextLocales: [...args.currentLocales, locale] };
70
- }
71
- export function createLocaleRemoveConfig(args) {
72
- if (args.locales.length <= 1) {
73
- return null;
74
- }
75
- const nextLocales = args.locales.filter((locale) => locale !== args.localeToRemove);
76
- const nextDefaultLocale = args.defaultLocale === args.localeToRemove
77
- ? (nextLocales[0] ?? args.defaultLocale)
78
- : args.defaultLocale;
79
- return { nextLocales, nextDefaultLocale };
80
- }
81
- //# sourceMappingURL=localizationPanelModel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"localizationPanelModel.js","sourceRoot":"","sources":["../src/localizationPanelModel.ts"],"names":[],"mappings":"AA6BA,MAAM,UAAU,yBAAyB,CAAC,IAIzC;IACC,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC/C,MAAM,IAAI,GAA2B,EAAE,CAAC;IAExC,SAAS,QAAQ,CAAC,IAAY,EAAE,IAAY;QAC1C,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;QAExC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAI,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,CAAwB,IAAI,EAAE,CAAC;YAC7E,MAAM,WAAW,GAAI,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,eAAe,CAAwB,IAAI,EAAE,CAAC;YAEtF,IAAI,CAAC,IAAI,CAAC;gBACR,QAAQ;gBACR,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,aAAa,EAAE,IAAI,CAAC,IAAI;gBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,UAAU;gBACV,WAAW;gBACX,IAAI,EAAE,GAAG,IAAI,MAAM,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;aAC7C,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/B,QAAQ,CAAC,KAAK,EAAE,GAAG,IAAI,MAAM,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,IAAY;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,oBAAoB,GAAG,KAAK,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjF,GAAG,IAAI,IAAI,CAAC;YACZ,oBAAoB,GAAG,KAAK,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACnE,IAAI,CAAC,oBAAoB,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,GAAG,IAAI,GAAG,CAAC;gBACX,oBAAoB,GAAG,IAAI,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAMxC;IACC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAClF,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEzD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7B,MAAM,aAAa,GACjB,eAAe,CAAC,MAAM,KAAK,CAAC;YAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YACpD,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YACxD,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAErD,IAAI,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC;QACjC,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAGrC;IACC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrD,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAIxC;IACC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC;IACpF,MAAM,iBAAiB,GACrB,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,cAAc;QACxC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC;QACxC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;IAEzB,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;AAC5C,CAAC"}
@@ -1,12 +0,0 @@
1
- export interface StudioLocalizationPreviewInput {
2
- readonly activeLocale?: string | null;
3
- readonly defaultLocale: string;
4
- readonly locales: readonly string[];
5
- }
6
- export interface StudioLocalizationPreview {
7
- readonly activeLocale: string;
8
- readonly defaultLocale: string;
9
- readonly locales: readonly string[];
10
- }
11
- export declare const resolveStudioLocalizationPreview: (input: StudioLocalizationPreviewInput) => StudioLocalizationPreview;
12
- //# sourceMappingURL=localizationPreview.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"localizationPreview.d.ts","sourceRoot":"","sources":["../../src/runtime/localizationPreview.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,eAAO,MAAM,gCAAgC,GAC3C,OAAO,8BAA8B,KACpC,yBAWF,CAAC"}
@@ -1,11 +0,0 @@
1
- export const resolveStudioLocalizationPreview = (input) => {
2
- const activeLocale = input.activeLocale && input.locales.includes(input.activeLocale)
3
- ? input.activeLocale
4
- : input.defaultLocale;
5
- return {
6
- activeLocale,
7
- defaultLocale: input.defaultLocale,
8
- locales: input.locales,
9
- };
10
- };
11
- //# sourceMappingURL=localizationPreview.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"localizationPreview.js","sourceRoot":"","sources":["../../src/runtime/localizationPreview.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,KAAqC,EACV,EAAE;IAC7B,MAAM,YAAY,GAChB,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;QAC9D,CAAC,CAAC,KAAK,CAAC,YAAY;QACpB,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;IAE1B,OAAO;QACL,YAAY;QACZ,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;AACJ,CAAC,CAAC"}
@@ -1,20 +0,0 @@
1
- import type { RuntimeNodePropsResolver, RuntimeResolveNodePropsArgs } from '@ankhorage/contracts/runtime';
2
- export declare const STUDIO_LOCALIZED_PROP_PAIRS: readonly [readonly ["i18nKey", "text"], readonly ["titleI18nKey", "title"], readonly ["descriptionI18nKey", "description"], readonly ["eyebrowI18nKey", "eyebrow"], readonly ["labelI18nKey", "label"], readonly ["helperTextI18nKey", "helperText"], readonly ["errorTextI18nKey", "errorText"], readonly ["metaI18nKey", "meta"], readonly ["childrenI18nKey", "children"]];
3
- export type StudioLocalizedPropPair = (typeof STUDIO_LOCALIZED_PROP_PAIRS)[number];
4
- export type StudioRuntimeNodePropsResolver = RuntimeNodePropsResolver;
5
- export type StudioRuntimeNodePropsResolverContext = RuntimeResolveNodePropsArgs;
6
- export interface StudioRuntimeActionHandlerContext {
7
- action: unknown;
8
- context: RuntimeResolveNodePropsArgs;
9
- }
10
- export type StudioRuntimeActionHandlers = Record<string, (context: StudioRuntimeActionHandlerContext) => void>;
11
- export declare function resolveLocalizedPropValue(args: {
12
- props: Record<string, unknown>;
13
- keyProp: string;
14
- targetProp: string;
15
- translate: (key: string) => string;
16
- }): string | undefined;
17
- export declare function createStudioLocalizationNodePropsResolver(translate: (key: string) => string): RuntimeNodePropsResolver;
18
- export declare function getSetLanguageLocale(action: unknown): string | undefined;
19
- export declare function createStudioLocalizationActionHandlers(setActiveLocale: (locale: string) => void): StudioRuntimeActionHandlers;
20
- //# sourceMappingURL=runtimeLocalization.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtimeLocalization.d.ts","sourceRoot":"","sources":["../src/runtimeLocalization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,2BAA2B,EAC5B,MAAM,8BAA8B,CAAC;AAEtC,eAAO,MAAM,2BAA2B,+WAU9B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AACnF,MAAM,MAAM,8BAA8B,GAAG,wBAAwB,CAAC;AACtE,MAAM,MAAM,qCAAqC,GAAG,2BAA2B,CAAC;AAEhF,MAAM,WAAW,iCAAiC;IAChD,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,2BAA2B,CAAC;CACtC;AAED,MAAM,MAAM,2BAA2B,GAAG,MAAM,CAC9C,MAAM,EACN,CAAC,OAAO,EAAE,iCAAiC,KAAK,IAAI,CACrD,CAAC;AAUF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACpC,GAAG,MAAM,GAAG,SAAS,CAkBrB;AAED,wBAAgB,yCAAyC,CACvD,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GACjC,wBAAwB,CAuB1B;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAiBxE;AAED,wBAAgB,sCAAsC,CACpD,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GACxC,2BAA2B,CAS7B"}
@@ -1,78 +0,0 @@
1
- export const STUDIO_LOCALIZED_PROP_PAIRS = [
2
- ['i18nKey', 'text'],
3
- ['titleI18nKey', 'title'],
4
- ['descriptionI18nKey', 'description'],
5
- ['eyebrowI18nKey', 'eyebrow'],
6
- ['labelI18nKey', 'label'],
7
- ['helperTextI18nKey', 'helperText'],
8
- ['errorTextI18nKey', 'errorText'],
9
- ['metaI18nKey', 'meta'],
10
- ['childrenI18nKey', 'children'],
11
- ];
12
- function isNonEmptyString(value) {
13
- return typeof value === 'string' && value.length > 0;
14
- }
15
- function hasOwnProp(props, key) {
16
- return Object.prototype.hasOwnProperty.call(props, key);
17
- }
18
- export function resolveLocalizedPropValue(args) {
19
- const { props, keyProp, targetProp, translate } = args;
20
- const key = props[keyProp];
21
- if (!isNonEmptyString(key)) {
22
- return undefined;
23
- }
24
- const translated = translate(key);
25
- if (isNonEmptyString(translated) && translated !== key) {
26
- return translated;
27
- }
28
- if (hasOwnProp(props, targetProp)) {
29
- return undefined;
30
- }
31
- return key;
32
- }
33
- export function createStudioLocalizationNodePropsResolver(translate) {
34
- return ({ props }) => {
35
- let resolvedProps;
36
- for (const [keyProp, targetProp] of STUDIO_LOCALIZED_PROP_PAIRS) {
37
- const localizedValue = resolveLocalizedPropValue({
38
- props,
39
- keyProp,
40
- targetProp,
41
- translate,
42
- });
43
- if (localizedValue === undefined) {
44
- continue;
45
- }
46
- const nextProps = resolvedProps ?? { ...props };
47
- nextProps[targetProp] = localizedValue;
48
- resolvedProps = nextProps;
49
- }
50
- return resolvedProps ?? props;
51
- };
52
- }
53
- export function getSetLanguageLocale(action) {
54
- if (typeof action !== 'object' || action === null || Array.isArray(action)) {
55
- return undefined;
56
- }
57
- const record = action;
58
- if (record.type !== 'setLanguage') {
59
- return undefined;
60
- }
61
- const { payload } = record;
62
- if (typeof payload !== 'object' || payload === null || Array.isArray(payload)) {
63
- return undefined;
64
- }
65
- const { locale } = payload;
66
- return typeof locale === 'string' && locale.length > 0 ? locale : undefined;
67
- }
68
- export function createStudioLocalizationActionHandlers(setActiveLocale) {
69
- return {
70
- setLanguage: ({ action }) => {
71
- const locale = getSetLanguageLocale(action);
72
- if (locale !== undefined) {
73
- setActiveLocale(locale);
74
- }
75
- },
76
- };
77
- }
78
- //# sourceMappingURL=runtimeLocalization.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtimeLocalization.js","sourceRoot":"","sources":["../src/runtimeLocalization.ts"],"names":[],"mappings":"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"}