@framingui/mcp-server 0.6.26 → 0.6.27

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 (81) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -2
  3. package/dist/__tests__/react-native-contract.test.d.ts +2 -0
  4. package/dist/__tests__/react-native-contract.test.d.ts.map +1 -0
  5. package/dist/__tests__/react-native-contract.test.js +50 -0
  6. package/dist/__tests__/react-native-contract.test.js.map +1 -0
  7. package/dist/auth/state.d.ts +5 -0
  8. package/dist/auth/state.d.ts.map +1 -1
  9. package/dist/auth/state.js +33 -0
  10. package/dist/auth/state.js.map +1 -1
  11. package/dist/cli/agent-md-templates.d.ts.map +1 -1
  12. package/dist/cli/agent-md-templates.js +54 -36
  13. package/dist/cli/agent-md-templates.js.map +1 -1
  14. package/dist/cli/guide-template.d.ts.map +1 -1
  15. package/dist/cli/guide-template.js +17 -35
  16. package/dist/cli/guide-template.js.map +1 -1
  17. package/dist/cli/init.d.ts +2 -3
  18. package/dist/cli/init.d.ts.map +1 -1
  19. package/dist/cli/init.js +33 -48
  20. package/dist/cli/init.js.map +1 -1
  21. package/dist/data/component-fallback-catalog.d.ts +26 -0
  22. package/dist/data/component-fallback-catalog.d.ts.map +1 -0
  23. package/dist/data/component-fallback-catalog.js +149 -0
  24. package/dist/data/component-fallback-catalog.js.map +1 -0
  25. package/dist/data/react-native-runtime-catalog.d.ts +24 -0
  26. package/dist/data/react-native-runtime-catalog.d.ts.map +1 -0
  27. package/dist/data/react-native-runtime-catalog.js +265 -0
  28. package/dist/data/react-native-runtime-catalog.js.map +1 -0
  29. package/dist/index.js +114 -47
  30. package/dist/index.js.map +1 -1
  31. package/dist/platform-support.d.ts +22 -0
  32. package/dist/platform-support.d.ts.map +1 -0
  33. package/dist/platform-support.js +148 -0
  34. package/dist/platform-support.js.map +1 -0
  35. package/dist/project-context-resolution.d.ts +7 -0
  36. package/dist/project-context-resolution.d.ts.map +1 -0
  37. package/dist/project-context-resolution.js +21 -0
  38. package/dist/project-context-resolution.js.map +1 -0
  39. package/dist/project-context-state.d.ts +12 -0
  40. package/dist/project-context-state.d.ts.map +1 -0
  41. package/dist/project-context-state.js +14 -0
  42. package/dist/project-context-state.js.map +1 -0
  43. package/dist/project-context.d.ts +15 -0
  44. package/dist/project-context.d.ts.map +1 -0
  45. package/dist/project-context.js +78 -0
  46. package/dist/project-context.js.map +1 -0
  47. package/dist/prompts/getting-started.d.ts.map +1 -1
  48. package/dist/prompts/getting-started.js +27 -7
  49. package/dist/prompts/getting-started.js.map +1 -1
  50. package/dist/prompts/screen-workflow.d.ts.map +1 -1
  51. package/dist/prompts/screen-workflow.js +53 -2
  52. package/dist/prompts/screen-workflow.js.map +1 -1
  53. package/dist/schemas/mcp-schemas.d.ts +1058 -528
  54. package/dist/schemas/mcp-schemas.d.ts.map +1 -1
  55. package/dist/schemas/mcp-schemas.js +98 -0
  56. package/dist/schemas/mcp-schemas.js.map +1 -1
  57. package/dist/tools/detect-project-context.d.ts +3 -0
  58. package/dist/tools/detect-project-context.d.ts.map +1 -0
  59. package/dist/tools/detect-project-context.js +36 -0
  60. package/dist/tools/detect-project-context.js.map +1 -0
  61. package/dist/tools/get-screen-generation-context.d.ts.map +1 -1
  62. package/dist/tools/get-screen-generation-context.js +118 -18
  63. package/dist/tools/get-screen-generation-context.js.map +1 -1
  64. package/dist/tools/list-components.d.ts.map +1 -1
  65. package/dist/tools/list-components.js +42 -3
  66. package/dist/tools/list-components.js.map +1 -1
  67. package/dist/tools/preview-component.d.ts.map +1 -1
  68. package/dist/tools/preview-component.js +57 -7
  69. package/dist/tools/preview-component.js.map +1 -1
  70. package/dist/tools/preview-theme.d.ts.map +1 -1
  71. package/dist/tools/preview-theme.js +20 -2
  72. package/dist/tools/preview-theme.js.map +1 -1
  73. package/dist/tools/theme-authority.js +1 -1
  74. package/dist/tools/theme-authority.js.map +1 -1
  75. package/dist/tools/validate-environment.d.ts.map +1 -1
  76. package/dist/tools/validate-environment.js +102 -9
  77. package/dist/tools/validate-environment.js.map +1 -1
  78. package/dist/tools/validate-screen-definition.d.ts.map +1 -1
  79. package/dist/tools/validate-screen-definition.js +41 -7
  80. package/dist/tools/validate-screen-definition.js.map +1 -1
  81. package/package.json +16 -17
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Tekton Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -115,8 +115,7 @@ FramingUI exposes guidance for:
115
115
  `init` can:
116
116
 
117
117
  - install the FramingUI screen-generation runtime and peer dependencies in one pass
118
- - install `tailwindcss-animate`
119
- - configure Tailwind content paths for Tailwind v3 projects
118
+ - configure Tailwind content paths and `tailwindcss-animate`
120
119
  - add `@import '@framingui/ui/styles';` to a detected global stylesheet
121
120
  - generate a local `framingui-theme` module
122
121
  - wire `FramingUIProvider` into `app/layout.tsx` or `src/main.tsx`
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=react-native-contract.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-native-contract.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/react-native-contract.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,50 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { getPlatformSupportInfo, getImportStatementForPlatform, getReactNativeAuditRules, getSupportedPlatforms, } from '../platform-support.js';
3
+ import { GetScreenGenerationContextInputSchema, ListComponentsInputSchema, PreviewComponentInputSchema, ValidateEnvironmentInputSchema, } from '../schemas/mcp-schemas.js';
4
+ describe('React Native direct-write contract', () => {
5
+ it('exposes web and react-native platform targets', () => {
6
+ expect(getSupportedPlatforms()).toEqual(['web', 'react-native']);
7
+ });
8
+ it('marks primitive components as recommended for react-native direct write', () => {
9
+ const info = getPlatformSupportInfo('Button', 'react-native');
10
+ expect(info.supported).toBe(true);
11
+ expect(info.recommended).toBe(true);
12
+ expect(info.status).toBe('full');
13
+ expect(info.recommendedImports).toContain('@framingui/react-native');
14
+ expect(info.recommendedPackages).toContain('@framingui/react-native');
15
+ });
16
+ it('returns runtime package imports for primitives with extracted native exports', () => {
17
+ expect(getImportStatementForPlatform('Button', 'react-native')).toBe("import { Button } from '@framingui/react-native';");
18
+ expect(getImportStatementForPlatform('Input', 'react-native')).toBe("import { TextField } from '@framingui/react-native';");
19
+ });
20
+ it('marks web-centric components as avoid for react-native direct write', () => {
21
+ const info = getPlatformSupportInfo('Table', 'react-native');
22
+ expect(info.supported).toBe(false);
23
+ expect(info.status).toBe('avoid');
24
+ expect(info.notes[0]).toContain('web-only');
25
+ });
26
+ it('defines react-native audit rules for direct-write qc', () => {
27
+ const rules = getReactNativeAuditRules();
28
+ expect(rules.map(rule => rule.id)).toEqual([
29
+ 'rn-hardcoded-color',
30
+ 'rn-hardcoded-spacing',
31
+ 'rn-web-classname',
32
+ ]);
33
+ });
34
+ it('accepts react-native as a schema input target', () => {
35
+ expect(ListComponentsInputSchema.parse({ platform: 'react-native' }).platform).toBe('react-native');
36
+ expect(PreviewComponentInputSchema.parse({ componentId: 'button', platform: 'react-native' })
37
+ .platform).toBe('react-native');
38
+ expect(GetScreenGenerationContextInputSchema.parse({
39
+ description: 'profile screen',
40
+ platform: 'react-native',
41
+ }).platform).toBe('react-native');
42
+ expect(ValidateEnvironmentInputSchema.parse({
43
+ projectPath: '/tmp/project',
44
+ requiredPackages: [],
45
+ platform: 'react-native',
46
+ sourceFiles: ['/tmp/App.tsx'],
47
+ }).platform).toBe('react-native');
48
+ });
49
+ });
50
+ //# sourceMappingURL=react-native-contract.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-native-contract.test.js","sourceRoot":"","sources":["../../src/__tests__/react-native-contract.test.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,11 @@ export declare function setAuthData(authData: VerifyResponse | null): void;
13
13
  * @returns Current authentication data or null if not authenticated
14
14
  */
15
15
  export declare function getAuthData(): VerifyResponse | null;
16
+ /**
17
+ * Whether auth state was explicitly injected via login/verify/test helpers.
18
+ * When false, the server is operating on credential-file fallback only.
19
+ */
20
+ export declare function isAuthStateExplicitlySet(): boolean;
16
21
  /**
17
22
  * Store raw API key for data-client API calls
18
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/auth/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAiBlD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAOjE;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,cAAc,GAAG,IAAI,CAWnD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAExD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAoBnE"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/auth/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAmBlD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAQjE;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,cAAc,GAAG,IAAI,CA4BnD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAExD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAQ5C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAoBnE"}
@@ -5,12 +5,14 @@
5
5
  import { MemoryCache } from './cache.js';
6
6
  import { info } from '../utils/logger.js';
7
7
  import { isMasterAccount } from './theme-access.js';
8
+ import { loadCredentials } from '../cli/credentials.js';
8
9
  // Cache TTL: 5 minutes (300,000 milliseconds)
9
10
  const CACHE_TTL_MS = 5 * 60 * 1000;
10
11
  // Global authentication data cache
11
12
  const authCache = new MemoryCache();
12
13
  // Current authentication state
13
14
  let currentAuthData = null;
15
+ let authStateExplicitlySet = false;
14
16
  // Raw API key (API 데이터 클라이언트에서 Bearer 헤더로 사용)
15
17
  let rawApiKey = null;
16
18
  /**
@@ -19,6 +21,7 @@ let rawApiKey = null;
19
21
  */
20
22
  export function setAuthData(authData) {
21
23
  currentAuthData = authData;
24
+ authStateExplicitlySet = true;
22
25
  if (authData && authData.valid) {
23
26
  authCache.set('auth', authData, CACHE_TTL_MS);
24
27
  info('Authentication data cached for 5 minutes');
@@ -35,9 +38,32 @@ export function getAuthData() {
35
38
  info('Using cached authentication data');
36
39
  return cachedAuth;
37
40
  }
41
+ if (!authStateExplicitlySet) {
42
+ const credentials = loadCredentials();
43
+ if (credentials?.api_key) {
44
+ rawApiKey = rawApiKey ?? credentials.api_key;
45
+ currentAuthData = {
46
+ valid: true,
47
+ user: {
48
+ id: 'credentials-user',
49
+ email: credentials.user_email,
50
+ plan: 'pro',
51
+ },
52
+ themes: { licensed: [] },
53
+ };
54
+ return currentAuthData;
55
+ }
56
+ }
38
57
  // Return current state
39
58
  return currentAuthData;
40
59
  }
60
+ /**
61
+ * Whether auth state was explicitly injected via login/verify/test helpers.
62
+ * When false, the server is operating on credential-file fallback only.
63
+ */
64
+ export function isAuthStateExplicitlySet() {
65
+ return authStateExplicitlySet;
66
+ }
41
67
  /**
42
68
  * Store raw API key for data-client API calls
43
69
  */
@@ -48,6 +74,12 @@ export function setRawApiKey(apiKey) {
48
74
  * Get raw API key for data-client API calls
49
75
  */
50
76
  export function getRawApiKey() {
77
+ if (!rawApiKey) {
78
+ const credentials = loadCredentials();
79
+ if (credentials?.api_key) {
80
+ rawApiKey = credentials.api_key;
81
+ }
82
+ }
51
83
  return rawApiKey;
52
84
  }
53
85
  /**
@@ -56,6 +88,7 @@ export function getRawApiKey() {
56
88
  export function clearAuthData() {
57
89
  currentAuthData = null;
58
90
  rawApiKey = null;
91
+ authStateExplicitlySet = false;
59
92
  authCache.clear();
60
93
  info('Authentication data cleared');
61
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/auth/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,8CAA8C;AAC9C,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnC,mCAAmC;AACnC,MAAM,SAAS,GAAG,IAAI,WAAW,EAAkB,CAAC;AAEpD,+BAA+B;AAC/B,IAAI,eAAe,GAA0B,IAAI,CAAC;AAElD,8CAA8C;AAC9C,IAAI,SAAS,GAAkB,IAAI,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,QAA+B;IACzD,eAAe,GAAG,QAAQ,CAAC;IAE3B,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC/B,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,8BAA8B;IAC9B,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEzC,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACzC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,uBAAuB;IACvB,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAqB;IAChD,SAAS,GAAG,MAAM,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,eAAe,GAAG,IAAI,CAAC;IACvB,SAAS,GAAG,IAAI,CAAC;IACjB,SAAS,CAAC,KAAK,EAAE,CAAC;IAClB,IAAI,CAAC,6BAA6B,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,OAAO,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC;AACtD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAqB;IACvD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,qBAAqB;IACrB,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,sBAAsB;IACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACnC,IAAI,KAAK,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;IAC1B,CAAC;IAED,sBAAsB;IACtB,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;IACvD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IAEjD,kBAAkB;IAClB,OAAO,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/auth/state.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-md-templates.d.ts","sourceRoot":"","sources":["../../src/cli/agent-md-templates.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1C,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CA2FpE;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CA6DpE"}
1
+ {"version":3,"file":"agent-md-templates.d.ts","sourceRoot":"","sources":["../../src/cli/agent-md-templates.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1C,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAgGpE;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CA0EpE"}
@@ -13,40 +13,43 @@ framingui-mcp login
13
13
 
14
14
  ### Production Screen Flow
15
15
 
16
- 1. Decide the style contract:
16
+ 1. If the project path is known, call \`detect-project-context\` to establish the session default platform/runtime.
17
+ 2. Decide the style contract:
17
18
  - \`host-utility\`
18
19
  - \`framingui-native\`
19
20
  - \`migrate\`
20
- 2. Inspect the theme when defaults matter:
21
+ 3. Inspect the theme when defaults matter:
21
22
  - \`preview-theme\`
22
- 3. Gather generation context:
23
+ 4. Gather generation context:
23
24
  - \`get-screen-generation-context\`
24
- 4. Resolve ambiguity before drafting:
25
+ 5. Resolve ambiguity before drafting:
25
26
  - \`preview-component\`
26
27
  - \`list-icon-libraries\` when icons are needed
27
- 5. Validate structure:
28
+ 6. Validate structure for web screen-definition work:
28
29
  - \`validate-screen-definition\`
29
- 6. Write React code from the validated definition
30
- 7. Verify project integration:
30
+ 7. Write React or React Native code from the returned contract
31
+ 8. Verify project integration:
31
32
  - \`validate-environment\` with \`sourceFiles\`
32
33
 
33
- ### Style Contract Rules
34
+ ### React Native Direct-Write Flow
34
35
 
35
- - If the project stays \`host-utility\`, keep utility classes explicit.
36
- - If the project uses \`framingui-native\`, ensure the global stylesheet imports \`@framingui/ui/styles\`, \`tailwindcss-animate\` is installed, and the app root mounts \`FramingUIProvider\` with the generated \`framingui-theme\`.
37
- - In Tailwind v4 apps, do not add manual \`@source\` entries for \`@framingui/ui\` unless you are debugging the package itself. The shared styles import is the source of truth.
38
- - Do not duplicate \`FramingUIProvider\` or re-declare theme tokens in app CSS.
36
+ For Expo or React Native targets:
39
37
 
40
- ### Runtime Contract
38
+ 1. Call \`detect-project-context\` with the project path when available
39
+ 2. Call \`get-screen-generation-context\` without repeating \`platform\` unless you need an explicit override
40
+ 3. Review only React Native compatible components and guidance
41
+ 4. Write the screen directly with \`@framingui/react-native\` exports where available, then \`react-native\` primitives or local app abstractions
42
+ 5. Run \`validate-environment\` with:
43
+ - \`platform: "react-native"\`
44
+ - \`projectPath\`
45
+ - \`requiredPackages\`
46
+ - \`sourceFiles\`
47
+ 6. Fix any hardcoded style drift or web-only patterns before handoff
41
48
 
42
- Before changing recipes or component code, verify:
49
+ ### Style Contract Rules
43
50
 
44
- 1. \`@import '@framingui/ui/styles';\` exists exactly once in the global stylesheet.
45
- 2. \`tailwindcss-animate\` is installed.
46
- 3. The root layout or entry mounts \`FramingUIProvider theme={framinguiTheme}\`.
47
- 4. The generated \`framingui-theme\` module is still the theme source of truth.
48
- 5. Host CSS is not overriding base primitives in a way that defeats FramingUI styles.
49
- 6. Page code is not carrying stale copied recipe utilities.
51
+ - If the project stays \`host-utility\`, keep utility classes explicit.
52
+ - If the project uses \`framingui-native\`, ensure the global stylesheet imports \`@framingui/ui/styles\` and the app root mounts \`FramingUIProvider\` with the generated \`framingui-theme\`.
50
53
 
51
54
  ### Slash Commands
52
55
 
@@ -64,6 +67,8 @@ Before changing recipes or component code, verify:
64
67
  ### Component Rule
65
68
 
66
69
  Do not claim a FramingUI component is unavailable without checking \`list-components\` or \`preview-component\`.
70
+ Do not recommend \`@framingui/ui\` imports for React Native targets.
71
+ Prefer \`@framingui/react-native\` when the runtime surface exists for the requested primitive.
67
72
 
68
73
  ### Example
69
74
 
@@ -99,32 +104,45 @@ FramingUI is available in this project through MCP.
99
104
  ### Required Sequence
100
105
 
101
106
  1. Confirm authentication if licensed themes are needed.
102
- 2. Decide the style contract before generation.
103
- 3. Use \`preview-theme\` when theme defaults or recipes matter.
104
- 4. Use \`get-screen-generation-context\` as the main entry point.
105
- 5. Use \`preview-component\` for any ambiguous component contract.
106
- 6. Use \`list-icon-libraries\` before adding icons.
107
- 7. Validate structure with \`validate-screen-definition\`.
108
- 8. Write React code directly from the validated definition.
109
- 9. Run \`validate-environment\` with \`sourceFiles\` before final handoff.
107
+ 2. If the project path is known, call \`detect-project-context\` first.
108
+ 3. Decide the style contract before generation.
109
+ 4. Use \`preview-theme\` when theme defaults or recipes matter.
110
+ 5. Use \`get-screen-generation-context\` as the main entry point.
111
+ 6. Use \`preview-component\` for any ambiguous component contract.
112
+ 7. Use \`list-icon-libraries\` before adding icons.
113
+ 8. Validate structure with \`validate-screen-definition\` for web screen-definition work.
114
+ 9. Write code directly from the returned contract.
115
+ 10. Run \`validate-environment\` with \`sourceFiles\` before final handoff.
116
+
117
+ ### React Native Projects
118
+
119
+ If the target project is Expo or React Native:
120
+
121
+ - call \`detect-project-context\` when the project path is available
122
+ - rely on the stored session default instead of repeating \`platform: "react-native"\` on every discovery call
123
+ - write the screen directly using \`@framingui/react-native\` where available, then host app primitives or local abstractions
124
+ - do **not** import \`@framingui/ui\`
125
+ - run \`validate-environment\` with \`platform: "react-native"\` and \`sourceFiles\`
126
+ - fix hardcoded colors, spacing, radius values, and web-only patterns such as \`className\`
127
+
128
+ ### React Native / Expo
129
+
130
+ - Use \`get-screen-generation-context\` with \`platform: "react-native"\` for native direct-write work.
131
+ - Prefer \`@framingui/react-native\` exports before inventing app-local shells.
132
+ - Keep custom native layout inside \`StyleSheet.create\`.
133
+ - Run \`validate-environment\` with \`platform: "react-native"\` and \`sourceFiles\` to catch web-only drift.
110
134
 
111
135
  ### Style Contract
112
136
 
113
137
  - \`host-utility\`: keep explicit utility styling
114
- - \`framingui-native\`: import \`@framingui/ui/styles\`, install \`tailwindcss-animate\`, mount \`FramingUIProvider\`, and treat the generated \`framingui-theme\` module as the source of truth
138
+ - \`framingui-native\`: import \`@framingui/ui/styles\`, mount \`FramingUIProvider\`, then rely on FramingUI variants
115
139
  - \`migrate\`: stop and clarify the migration path
116
140
 
117
- ### Runtime Contract
118
-
119
- - In Tailwind v4 apps, the shared FramingUI stylesheet import already handles package source scanning and animate plugin registration.
120
- - Do not duplicate \`FramingUIProvider\` inside pages.
121
- - Do not hand-copy FramingUI CSS variables into app stylesheets.
122
- - If component shape or motion looks broken, check the install/runtime contract before editing recipes.
123
-
124
141
  ### Allowed HTML
125
142
 
126
143
  Semantic wrappers such as \`header\`, \`nav\`, \`section\`, and \`footer\` may remain HTML.
127
144
  Interactive and form primitives should use FramingUI components when they exist.
145
+ For React Native targets, use \`@framingui/react-native\` where available, then host app/native primitives instead of HTML or \`@framingui/ui\`.
128
146
 
129
147
  ### Example
130
148
 
@@ -1 +1 @@
1
- {"version":3,"file":"agent-md-templates.js","sourceRoot":"","sources":["../../src/cli/agent-md-templates.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB,CAAC,SAAoB;IAC1D,MAAM,UAAU,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;IAE3E,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAoEJ,UAAU;;;;;;;;;;;;;;;;;;;CAmBd,CAAC;AACF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,SAAoB;IAC1D,MAAM,UAAU,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;IAE3E,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsCJ,UAAU;;;;;;;;;;;;;;;;;;;CAmBd,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"agent-md-templates.js","sourceRoot":"","sources":["../../src/cli/agent-md-templates.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB,CAAC,SAAoB;IAC1D,MAAM,UAAU,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;IAE3E,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyEJ,UAAU;;;;;;;;;;;;;;;;;;;CAmBd,CAAC;AACF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,SAAoB;IAC1D,MAAM,UAAU,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;IAE3E,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmDJ,UAAU;;;;;;;;;;;;;;;;;;;CAmBd,CAAC;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"guide-template.d.ts","sourceRoot":"","sources":["../../src/cli/guide-template.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1C,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CA8H1D"}
1
+ {"version":3,"file":"guide-template.d.ts","sourceRoot":"","sources":["../../src/cli/guide-template.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1C,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CA4G1D"}
@@ -20,18 +20,28 @@ framingui-mcp status
20
20
 
21
21
  ## Recommended Workflow
22
22
 
23
- 1. Decide the style contract for this project:
23
+ 1. If the project path is known, call \`detect-project-context\` first to store the default platform/runtime for this session.
24
+ 2. Decide the style contract for this project:
24
25
  - \`host-utility\`
25
26
  - \`framingui-native\`
26
27
  - \`migrate\`
27
- 2. Inspect theme and component contracts before drafting:
28
+ 3. Inspect theme and component contracts before drafting:
28
29
  - \`preview-theme\`
29
30
  - \`preview-component\`
30
31
  - \`list-icon-libraries\` when icons are needed
31
- 3. Call \`get-screen-generation-context\`
32
- 4. Validate the generated definition with \`validate-screen-definition\`
33
- 5. Write React code from the validated definition
34
- 6. Run \`validate-environment\` with \`sourceFiles\` before handoff
32
+ 4. Call \`get-screen-generation-context\`
33
+ 5. For web projects, validate the generated definition with \`validate-screen-definition\`
34
+ 6. Write React or React Native code from the returned contract
35
+ 7. Run \`validate-environment\` with \`sourceFiles\` before handoff
36
+
37
+ If the detected project is Expo or React Native, keep using the direct-write path and do not repeat \`platform: "react-native"\` on every tool call unless you need an explicit override. Prefer \`@framingui/react-native\` where the runtime surface exists, then fall back to host primitives.
38
+
39
+ ### React Native / Expo
40
+
41
+ - Call \`get-screen-generation-context\` with \`platform: "react-native"\`
42
+ - Prefer \`@framingui/react-native\` exports for common screen structure and controls
43
+ - Keep custom screen styles inside \`StyleSheet.create\`
44
+ - Run \`validate-environment\` with \`platform: "react-native"\` and \`sourceFiles\` before handoff
35
45
 
36
46
  ## Style Contract Rules
37
47
 
@@ -49,33 +59,6 @@ Your global stylesheet should import:
49
59
 
50
60
  Your root app entry should also mount \`FramingUIProvider\` with the generated \`framingui-theme\` module.
51
61
 
52
- This contract assumes:
53
-
54
- - \`tailwindcss-animate\` is installed
55
- - the stylesheet import happens exactly once at the app root
56
- - \`FramingUIProvider\` is mounted exactly once near the root
57
- - the generated \`framingui-theme\` module is the source of truth for theme tokens
58
-
59
- For Tailwind v4 projects, \`@import '@framingui/ui/styles';\` already provides FramingUI package source scanning and the animate plugin hook. Do not copy manual \`@source\` blocks for \`@framingui/ui\` into app CSS unless you are debugging the package itself.
60
-
61
- Do not:
62
-
63
- - duplicate \`FramingUIProvider\` inside pages or sections
64
- - re-declare FramingUI theme tokens by hand in \`globals.css\`
65
- - mix \`framingui-native\` and ad hoc host-utility overrides without intent
66
- - diagnose missing padding or height first as a theme bug; check the runtime contract before editing recipes
67
-
68
- ## Runtime Contract Checklist
69
-
70
- When FramingUI components look unstyled or partially styled, check these first:
71
-
72
- 1. \`@import '@framingui/ui/styles';\` exists in the global stylesheet and only once.
73
- 2. \`tailwindcss-animate\` is installed.
74
- 3. The app root mounts \`FramingUIProvider theme={framinguiTheme}\`.
75
- 4. The project uses the generated \`framingui-theme\` module instead of copied CSS variables.
76
- 5. Host CSS is not overriding \`body\`, \`button\`, \`input\`, or other primitives in a way that defeats the theme contract.
77
- 6. Page code is not reimplementing FramingUI recipes with stale utility classes.
78
-
79
62
  ## Slash Commands
80
63
 
81
64
  FramingUI guidance is available for:
@@ -120,8 +103,7 @@ export default function Page() {
120
103
  - Treat templates as hints, not the final structure.
121
104
  - Treat the validated screen definition as the production contract.
122
105
  - Keep semantic wrappers as HTML only when there is no FramingUI primitive to replace them.
123
- - Treat \`@framingui/ui/styles\` and \`framingui-theme\` as the installation contract for \`framingui-native\`.
124
- - If a Tailwind v4 app shows broken shape or missing motion, check the runtime contract before editing component code.
106
+ - For Expo / React Native targets, use \`detect-project-context\` once, prefer \`@framingui/react-native\` where possible, and avoid \`@framingui/ui\` imports.
125
107
  `;
126
108
  }
127
109
  //# sourceMappingURL=guide-template.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"guide-template.js","sourceRoot":"","sources":["../../src/cli/guide-template.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,SAAoB;IAChD,MAAM,OAAO,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;IAExE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA8FJ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BX,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"guide-template.js","sourceRoot":"","sources":["../../src/cli/guide-template.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,SAAoB;IAChD,MAAM,OAAO,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;IAExE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6EJ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BX,CAAC;AACF,CAAC"}
@@ -4,13 +4,11 @@
4
4
  */
5
5
  import { type Framework } from './guide-template.js';
6
6
  export declare const SCREEN_GENERATION_RUNTIME_PACKAGES: readonly ["@framingui/ui", "@framingui/core", "@framingui/tokens", "@hookform/resolvers", "@radix-ui/react-alert-dialog", "@radix-ui/react-avatar", "@radix-ui/react-checkbox", "@radix-ui/react-dialog", "@radix-ui/react-dropdown-menu", "@radix-ui/react-label", "@radix-ui/react-navigation-menu", "@radix-ui/react-popover", "@radix-ui/react-progress", "@radix-ui/react-radio-group", "@radix-ui/react-scroll-area", "@radix-ui/react-select", "@radix-ui/react-separator", "@radix-ui/react-slider", "@radix-ui/react-slot", "@radix-ui/react-switch", "@radix-ui/react-tabs", "@radix-ui/react-toast", "@radix-ui/react-tooltip", "class-variance-authority", "clsx", "cmdk", "date-fns", "framer-motion", "lucide-react", "react-day-picker", "react-hook-form", "tailwind-merge", "zod"];
7
- export declare const TAILWIND_BUILD_PACKAGES: {
8
- readonly 'tailwindcss-animate': "^1.0.7";
9
- };
10
7
  export declare const TAILWIND_V3_TOOLCHAIN_PACKAGES: {
11
8
  readonly tailwindcss: "^3.4.17";
12
9
  readonly postcss: "^8.4.38";
13
10
  readonly autoprefixer: "^10.4.19";
11
+ readonly 'tailwindcss-animate': "^1.0.7";
14
12
  };
15
13
  export declare const SCREEN_GENERATION_PACKAGES: readonly ["@framingui/ui", "@framingui/core", "@framingui/tokens", "@hookform/resolvers", "@radix-ui/react-alert-dialog", "@radix-ui/react-avatar", "@radix-ui/react-checkbox", "@radix-ui/react-dialog", "@radix-ui/react-dropdown-menu", "@radix-ui/react-label", "@radix-ui/react-navigation-menu", "@radix-ui/react-popover", "@radix-ui/react-progress", "@radix-ui/react-radio-group", "@radix-ui/react-scroll-area", "@radix-ui/react-select", "@radix-ui/react-separator", "@radix-ui/react-slider", "@radix-ui/react-slot", "@radix-ui/react-switch", "@radix-ui/react-tabs", "@radix-ui/react-toast", "@radix-ui/react-tooltip", "class-variance-authority", "clsx", "cmdk", "date-fns", "framer-motion", "lucide-react", "react-day-picker", "react-hook-form", "tailwind-merge", "zod", ...string[]];
16
14
  type InitVerification = {
@@ -39,6 +37,7 @@ export declare function setupThemeBootstrap(cwd: string, framework: Framework, t
39
37
  };
40
38
  export declare function setupMCP(cwd: string): void;
41
39
  export declare function verifyInitSetup(cwd: string): InitVerification;
40
+ export declare function getInitSuccessMessage(projectPath: string): string;
42
41
  export declare function initCommand(): Promise<void>;
43
42
  export {};
44
43
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAepE,eAAO,MAAM,kCAAkC,qwBAkCrC,CAAC;AAEX,eAAO,MAAM,uBAAuB;;CAE1B,CAAC;AAEX,eAAO,MAAM,8BAA8B;;;;CAIjC,CAAC;AAEX,eAAO,MAAM,0BAA0B,kxBAI7B,CAAC;AASX,KAAK,gBAAgB,GAAG;IACtB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,uBAAuB,EAAE,OAAO,CAAC;IACjC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAwRF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAsD7D;AAmCD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAOxF;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAmB9E;AAiDD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,SAAS,EACpB,OAAO,SAAmB,GACzB;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,CAsDlD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAqB1C;AA6DD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CA6E7D;AA2DD,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAsGjD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAepE,eAAO,MAAM,kCAAkC,qwBAkCrC,CAAC;AAEX,eAAO,MAAM,8BAA8B;;;;;CAKjC,CAAC;AAEX,eAAO,MAAM,0BAA0B,kxBAG7B,CAAC;AASX,KAAK,gBAAgB,GAAG;IACtB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,uBAAuB,EAAE,OAAO,CAAC;IACjC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAkRF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA8C7D;AAmCD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAOxF;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAmB9E;AAiDD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,SAAS,EACpB,OAAO,SAAmB,GACzB;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,CAsDlD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAqB1C;AA6DD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAiF7D;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAejE;AAuCD,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAsGjD"}