crew-recommendation-ui 0.0.1

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 (43) hide show
  1. package/README.md +156 -0
  2. package/dist/Card-C6fF0ZrH.js +197 -0
  3. package/dist/Card-C6fF0ZrH.js.map +1 -0
  4. package/dist/dls/index.d.ts +8 -0
  5. package/dist/dls/index.d.ts.map +1 -0
  6. package/dist/dls/index.js +25 -0
  7. package/dist/dls/index.js.map +1 -0
  8. package/dist/dls/tokens/colors.d.ts +77 -0
  9. package/dist/dls/tokens/colors.d.ts.map +1 -0
  10. package/dist/dls/tokens/index.d.ts +215 -0
  11. package/dist/dls/tokens/index.d.ts.map +1 -0
  12. package/dist/dls/tokens/spacing.d.ts +46 -0
  13. package/dist/dls/tokens/spacing.d.ts.map +1 -0
  14. package/dist/dls/tokens/typography.d.ts +102 -0
  15. package/dist/dls/tokens/typography.d.ts.map +1 -0
  16. package/dist/index.d.ts +17 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +20 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/package.json +60 -0
  21. package/dist/recommendation/components/Card.d.ts +13 -0
  22. package/dist/recommendation/components/Card.d.ts.map +1 -0
  23. package/dist/recommendation/components/index.d.ts +6 -0
  24. package/dist/recommendation/components/index.d.ts.map +1 -0
  25. package/dist/recommendation/index.d.ts +9 -0
  26. package/dist/recommendation/index.d.ts.map +1 -0
  27. package/dist/recommendation/index.js +6 -0
  28. package/dist/recommendation/index.js.map +1 -0
  29. package/dist/recommendation/types.d.ts +71 -0
  30. package/dist/recommendation/types.d.ts.map +1 -0
  31. package/dist/typography-zz5GzgjI.js +245 -0
  32. package/dist/typography-zz5GzgjI.js.map +1 -0
  33. package/package.json +60 -0
  34. package/src/dls/index.ts +15 -0
  35. package/src/dls/tokens/colors.ts +94 -0
  36. package/src/dls/tokens/index.ts +30 -0
  37. package/src/dls/tokens/spacing.ts +62 -0
  38. package/src/dls/tokens/typography.ts +119 -0
  39. package/src/index.ts +25 -0
  40. package/src/recommendation/components/Card.tsx +191 -0
  41. package/src/recommendation/components/index.ts +14 -0
  42. package/src/recommendation/index.ts +15 -0
  43. package/src/recommendation/types.ts +87 -0
package/README.md ADDED
@@ -0,0 +1,156 @@
1
+ # @crew-copilot/recommendation-ui
2
+
3
+ A shared UI library for recommendation listing components that can be used across web, mobile, and dashboard applications.
4
+
5
+ ## Features
6
+
7
+ - **DLS (Design Language System)**: Consistent design tokens for colors, spacing, typography
8
+ - **Recommendation Cards**: Pre-built components for hotels, flights, cabs, etc.
9
+ - **Platform Agnostic**: Works with React DOM and React Native Web
10
+
11
+ ## Installation
12
+
13
+ ```bash
14
+ # From the monorepo root
15
+ yarn workspace @crew-copilot/recommendation-ui build
16
+
17
+ # Or install as a dependency in another package
18
+ yarn add @crew-copilot/recommendation-ui
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ ### Import DLS Tokens
24
+
25
+ ```tsx
26
+ import { colors, spacing, textStyles, tokens } from '@crew-copilot/recommendation-ui/dls';
27
+
28
+ // Use tokens in your styles
29
+ const styles = {
30
+ container: {
31
+ padding: spacing[4],
32
+ backgroundColor: colors.neutral[900],
33
+ },
34
+ title: {
35
+ ...textStyles.h2,
36
+ color: colors.neutral[0],
37
+ },
38
+ };
39
+ ```
40
+
41
+ ### Import Recommendation Components
42
+
43
+ ```tsx
44
+ import { Card, RecommendationCard } from '@crew-copilot/recommendation-ui/recommendation';
45
+ import type { HotelItem } from '@crew-copilot/recommendation-ui/recommendation';
46
+
47
+ const hotelData: HotelItem = {
48
+ id: '1',
49
+ type: 'hotel',
50
+ title: 'Luxury Resort & Spa',
51
+ subtitle: 'Beachfront property',
52
+ price: '₹12,500',
53
+ originalPrice: '₹15,000',
54
+ rating: '4.8',
55
+ location: 'Goa, India',
56
+ image_signed_urls: ['https://example.com/hotel.jpg'],
57
+ tags: ['Pool', 'Spa', 'Beach Access'],
58
+ };
59
+
60
+ function MyComponent() {
61
+ return (
62
+ <Card
63
+ item={hotelData}
64
+ onSelect={(item) => console.log('Selected:', item)}
65
+ onExpand={(item) => console.log('Expanded:', item)}
66
+ />
67
+ );
68
+ }
69
+ ```
70
+
71
+ ### Import Everything
72
+
73
+ ```tsx
74
+ import {
75
+ // DLS
76
+ colors,
77
+ spacing,
78
+ tokens,
79
+
80
+ // Recommendation
81
+ Card,
82
+ RecommendationCard,
83
+
84
+ // Types
85
+ HotelItem,
86
+ FlightItem,
87
+ CabItem,
88
+ } from '@crew-copilot/recommendation-ui';
89
+ ```
90
+
91
+ ## Development
92
+
93
+ ```bash
94
+ # Install dependencies
95
+ cd packages/recommendation-ui
96
+ yarn install
97
+
98
+ # Build the library
99
+ yarn build
100
+
101
+ # Watch mode for development
102
+ yarn dev
103
+
104
+ # Type check
105
+ yarn type-check
106
+ ```
107
+
108
+ ## Library Structure
109
+
110
+ ```
111
+ src/
112
+ ├── index.ts # Main entry point
113
+ ├── dls/ # Design Language System
114
+ │ ├── index.ts
115
+ │ └── tokens/
116
+ │ ├── colors.ts
117
+ │ ├── spacing.ts
118
+ │ ├── typography.ts
119
+ │ └── index.ts
120
+ └── recommendation/ # Recommendation components
121
+ ├── index.ts
122
+ ├── types.ts
123
+ └── components/
124
+ ├── Card.tsx
125
+ └── index.ts
126
+ ```
127
+
128
+ ## Consuming in Other Packages
129
+
130
+ ### In crew-website (Vite)
131
+
132
+ ```tsx
133
+ // Already configured in yarn workspaces
134
+ import { Card } from '@crew-copilot/recommendation-ui';
135
+ ```
136
+
137
+ ### In crew-app (React Native / Expo)
138
+
139
+ ```tsx
140
+ // Add to package.json dependencies:
141
+ // "@crew-copilot/recommendation-ui": "workspace:*"
142
+
143
+ import { tokens, Card } from '@crew-copilot/recommendation-ui';
144
+ ```
145
+
146
+ ## Future Additions
147
+
148
+ - [ ] HotelCard component
149
+ - [ ] FlightCard component
150
+ - [ ] CabCard component
151
+ - [ ] VoteButton component
152
+ - [ ] BottomMsgBar component
153
+ - [ ] React Native Web primitives
154
+
155
+
156
+
@@ -0,0 +1,197 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { c as colors, s as spacing, t as textStyles } from "./typography-zz5GzgjI.js";
3
+ function r(e) {
4
+ var t, f, n = "";
5
+ if ("string" == typeof e || "number" == typeof e) n += e;
6
+ else if ("object" == typeof e) if (Array.isArray(e)) {
7
+ var o = e.length;
8
+ for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
9
+ } else for (f in e) e[f] && (n && (n += " "), n += f);
10
+ return n;
11
+ }
12
+ function clsx() {
13
+ for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
14
+ return n;
15
+ }
16
+ const Card = ({
17
+ item,
18
+ onSelect,
19
+ onExpand,
20
+ isSelected = false,
21
+ isExpanded = false
22
+ }) => {
23
+ var _a, _b, _c;
24
+ const handleClick = () => {
25
+ if (onExpand) {
26
+ onExpand(item);
27
+ }
28
+ };
29
+ const handleSelect = (e) => {
30
+ e.stopPropagation();
31
+ if (onSelect) {
32
+ onSelect(item);
33
+ }
34
+ };
35
+ const imageUrl = ((_a = item.image_signed_urls) == null ? void 0 : _a[0]) || ((_c = (_b = item.image) == null ? void 0 : _b[0]) == null ? void 0 : _c.data);
36
+ return /* @__PURE__ */ jsxs(
37
+ "div",
38
+ {
39
+ onClick: handleClick,
40
+ className: clsx(
41
+ "recommendation-card",
42
+ isSelected && "recommendation-card--selected",
43
+ isExpanded && "recommendation-card--expanded"
44
+ ),
45
+ style: {
46
+ display: "flex",
47
+ flexDirection: "column",
48
+ backgroundColor: isSelected ? colors.card.selected.dark : colors.card.background.dark,
49
+ borderRadius: 16,
50
+ overflow: "hidden",
51
+ cursor: "pointer",
52
+ transition: "all 0.2s ease-in-out",
53
+ border: `1px solid ${isSelected ? colors.primary[500] : colors.card.border.dark}`
54
+ },
55
+ children: [
56
+ imageUrl && /* @__PURE__ */ jsx(
57
+ "div",
58
+ {
59
+ style: {
60
+ width: "100%",
61
+ height: 180,
62
+ overflow: "hidden"
63
+ },
64
+ children: /* @__PURE__ */ jsx(
65
+ "img",
66
+ {
67
+ src: imageUrl,
68
+ alt: item.title,
69
+ style: {
70
+ width: "100%",
71
+ height: "100%",
72
+ objectFit: "cover"
73
+ }
74
+ }
75
+ )
76
+ }
77
+ ),
78
+ /* @__PURE__ */ jsxs(
79
+ "div",
80
+ {
81
+ style: {
82
+ padding: spacing[4],
83
+ display: "flex",
84
+ flexDirection: "column",
85
+ gap: spacing[2]
86
+ },
87
+ children: [
88
+ /* @__PURE__ */ jsx(
89
+ "h3",
90
+ {
91
+ style: {
92
+ ...textStyles.cardTitle,
93
+ color: colors.neutral[0],
94
+ margin: 0
95
+ },
96
+ children: item.title
97
+ }
98
+ ),
99
+ item.subtitle && /* @__PURE__ */ jsx(
100
+ "p",
101
+ {
102
+ style: {
103
+ ...textStyles.cardSubtitle,
104
+ color: colors.neutral[400],
105
+ margin: 0
106
+ },
107
+ children: item.subtitle
108
+ }
109
+ ),
110
+ item.tags && item.tags.length > 0 && /* @__PURE__ */ jsx(
111
+ "div",
112
+ {
113
+ style: {
114
+ display: "flex",
115
+ flexWrap: "wrap",
116
+ gap: spacing[1]
117
+ },
118
+ children: item.tags.map((tag, index) => /* @__PURE__ */ jsx(
119
+ "span",
120
+ {
121
+ style: {
122
+ ...textStyles.caption,
123
+ backgroundColor: colors.primary[900],
124
+ color: colors.primary[300],
125
+ padding: `${spacing[0.5]}px ${spacing[2]}px`,
126
+ borderRadius: 4
127
+ },
128
+ children: tag
129
+ },
130
+ index
131
+ ))
132
+ }
133
+ ),
134
+ /* @__PURE__ */ jsxs(
135
+ "div",
136
+ {
137
+ style: {
138
+ display: "flex",
139
+ alignItems: "baseline",
140
+ gap: spacing[2],
141
+ marginTop: spacing[2]
142
+ },
143
+ children: [
144
+ /* @__PURE__ */ jsx(
145
+ "span",
146
+ {
147
+ style: {
148
+ ...textStyles.cardPrice,
149
+ color: colors.neutral[0]
150
+ },
151
+ children: item.price
152
+ }
153
+ ),
154
+ item.originalPrice && /* @__PURE__ */ jsx(
155
+ "span",
156
+ {
157
+ style: {
158
+ ...textStyles.bodySmall,
159
+ color: colors.neutral[500],
160
+ textDecoration: "line-through"
161
+ },
162
+ children: item.originalPrice
163
+ }
164
+ )
165
+ ]
166
+ }
167
+ ),
168
+ /* @__PURE__ */ jsx(
169
+ "button",
170
+ {
171
+ onClick: handleSelect,
172
+ style: {
173
+ marginTop: spacing[2],
174
+ padding: `${spacing[2]}px ${spacing[4]}px`,
175
+ backgroundColor: isSelected ? colors.success[600] : colors.primary[600],
176
+ color: colors.neutral[0],
177
+ border: "none",
178
+ borderRadius: 8,
179
+ cursor: "pointer",
180
+ ...textStyles.label,
181
+ transition: "background-color 0.2s ease-in-out"
182
+ },
183
+ children: isSelected ? "✓ Selected" : "Select"
184
+ }
185
+ )
186
+ ]
187
+ }
188
+ )
189
+ ]
190
+ }
191
+ );
192
+ };
193
+ Card.displayName = "RecommendationCard";
194
+ export {
195
+ Card as C
196
+ };
197
+ //# sourceMappingURL=Card-C6fF0ZrH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card-C6fF0ZrH.js","sources":["../../../node_modules/clsx/dist/clsx.mjs","../src/recommendation/components/Card.tsx"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import React from 'react';\nimport { clsx } from 'clsx';\nimport { colors, spacing, textStyles } from '../../dls/tokens';\nimport type { BaseRecommendationItem, RecommendationCardProps } from '../types';\n\n/**\n * Base Recommendation Card Component\n * \n * This is a generic card that can display any recommendation item.\n * Specific card types (Hotel, Flight, Cab) will extend this.\n */\nexport const Card = <T extends BaseRecommendationItem>({\n item,\n onSelect,\n onExpand,\n isSelected = false,\n isExpanded = false,\n}: RecommendationCardProps<T>) => {\n const handleClick = () => {\n if (onExpand) {\n onExpand(item);\n }\n };\n\n const handleSelect = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (onSelect) {\n onSelect(item);\n }\n };\n\n // Get the first image URL\n const imageUrl = item.image_signed_urls?.[0] || item.image?.[0]?.data;\n\n return (\n <div\n onClick={handleClick}\n className={clsx(\n 'recommendation-card',\n isSelected && 'recommendation-card--selected',\n isExpanded && 'recommendation-card--expanded'\n )}\n style={{\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: isSelected ? colors.card.selected.dark : colors.card.background.dark,\n borderRadius: 16,\n overflow: 'hidden',\n cursor: 'pointer',\n transition: 'all 0.2s ease-in-out',\n border: `1px solid ${isSelected ? colors.primary[500] : colors.card.border.dark}`,\n }}\n >\n {/* Image Section */}\n {imageUrl && (\n <div\n style={{\n width: '100%',\n height: 180,\n overflow: 'hidden',\n }}\n >\n <img\n src={imageUrl}\n alt={item.title}\n style={{\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n }}\n />\n </div>\n )}\n\n {/* Content Section */}\n <div\n style={{\n padding: spacing[4],\n display: 'flex',\n flexDirection: 'column',\n gap: spacing[2],\n }}\n >\n {/* Title */}\n <h3\n style={{\n ...textStyles.cardTitle,\n color: colors.neutral[0],\n margin: 0,\n }}\n >\n {item.title}\n </h3>\n\n {/* Subtitle */}\n {item.subtitle && (\n <p\n style={{\n ...textStyles.cardSubtitle,\n color: colors.neutral[400],\n margin: 0,\n }}\n >\n {item.subtitle}\n </p>\n )}\n\n {/* Tags */}\n {item.tags && item.tags.length > 0 && (\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: spacing[1],\n }}\n >\n {item.tags.map((tag, index) => (\n <span\n key={index}\n style={{\n ...textStyles.caption,\n backgroundColor: colors.primary[900],\n color: colors.primary[300],\n padding: `${spacing[0.5]}px ${spacing[2]}px`,\n borderRadius: 4,\n }}\n >\n {tag}\n </span>\n ))}\n </div>\n )}\n\n {/* Price Section */}\n <div\n style={{\n display: 'flex',\n alignItems: 'baseline',\n gap: spacing[2],\n marginTop: spacing[2],\n }}\n >\n <span\n style={{\n ...textStyles.cardPrice,\n color: colors.neutral[0],\n }}\n >\n {item.price}\n </span>\n {item.originalPrice && (\n <span\n style={{\n ...textStyles.bodySmall,\n color: colors.neutral[500],\n textDecoration: 'line-through',\n }}\n >\n {item.originalPrice}\n </span>\n )}\n </div>\n\n {/* Select Button */}\n <button\n onClick={handleSelect}\n style={{\n marginTop: spacing[2],\n padding: `${spacing[2]}px ${spacing[4]}px`,\n backgroundColor: isSelected ? colors.success[600] : colors.primary[600],\n color: colors.neutral[0],\n border: 'none',\n borderRadius: 8,\n cursor: 'pointer',\n ...textStyles.label,\n transition: 'background-color 0.2s ease-in-out',\n }}\n >\n {isSelected ? '✓ Selected' : 'Select'}\n </button>\n </div>\n </div>\n );\n};\n\nCard.displayName = 'RecommendationCard';\n\nexport default Card;\n\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Design Language System (DLS)
3
+ *
4
+ * This module exports all design tokens and primitives
5
+ * for building consistent UI across platforms.
6
+ */
7
+ export * from './tokens';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dls/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,cAAc,UAAU,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { t as textStyles, e as letterSpacing, l as lineHeight, d as fontWeight, b as fontSize, f as fontFamily, a as semanticSpacing, s as spacing, c as colors } from "../typography-zz5GzgjI.js";
2
+ const tokens = {
3
+ colors,
4
+ spacing,
5
+ semanticSpacing,
6
+ fontFamily,
7
+ fontSize,
8
+ fontWeight,
9
+ lineHeight,
10
+ letterSpacing,
11
+ textStyles
12
+ };
13
+ export {
14
+ colors,
15
+ fontFamily,
16
+ fontSize,
17
+ fontWeight,
18
+ letterSpacing,
19
+ lineHeight,
20
+ semanticSpacing,
21
+ spacing,
22
+ textStyles,
23
+ tokens
24
+ };
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/dls/tokens/index.ts"],"sourcesContent":["/**\n * Design Language System - Tokens\n * Export all design tokens from a single entry point\n */\n\nexport * from './colors';\nexport * from './spacing';\nexport * from './typography';\n\n// Combined tokens object for convenience\nimport { colors } from './colors';\nimport { spacing, semanticSpacing } from './spacing';\nimport { fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, textStyles } from './typography';\n\nexport const tokens = {\n colors,\n spacing,\n semanticSpacing,\n fontFamily,\n fontSize,\n fontWeight,\n lineHeight,\n letterSpacing,\n textStyles,\n} as const;\n\nexport type Tokens = typeof tokens;\n\n"],"names":[],"mappings":";AAcO,MAAM,SAAS;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Color tokens for the Crew Design Language System
3
+ * These colors are used across all recommendation cards and UI components
4
+ */
5
+ export declare const colors: {
6
+ readonly primary: {
7
+ readonly 50: "#f0f9ff";
8
+ readonly 100: "#e0f2fe";
9
+ readonly 200: "#bae6fd";
10
+ readonly 300: "#7dd3fc";
11
+ readonly 400: "#38bdf8";
12
+ readonly 500: "#0ea5e9";
13
+ readonly 600: "#0284c7";
14
+ readonly 700: "#0369a1";
15
+ readonly 800: "#075985";
16
+ readonly 900: "#0c4a6e";
17
+ };
18
+ readonly neutral: {
19
+ readonly 0: "#ffffff";
20
+ readonly 50: "#fafafa";
21
+ readonly 100: "#f4f4f5";
22
+ readonly 200: "#e4e4e7";
23
+ readonly 300: "#d4d4d8";
24
+ readonly 400: "#a1a1aa";
25
+ readonly 500: "#71717a";
26
+ readonly 600: "#52525b";
27
+ readonly 700: "#3f3f46";
28
+ readonly 800: "#27272a";
29
+ readonly 900: "#18181b";
30
+ readonly 950: "#09090b";
31
+ };
32
+ readonly success: {
33
+ readonly 50: "#f0fdf4";
34
+ readonly 100: "#dcfce7";
35
+ readonly 500: "#22c55e";
36
+ readonly 600: "#16a34a";
37
+ readonly 700: "#15803d";
38
+ };
39
+ readonly warning: {
40
+ readonly 50: "#fffbeb";
41
+ readonly 100: "#fef3c7";
42
+ readonly 500: "#f59e0b";
43
+ readonly 600: "#d97706";
44
+ readonly 700: "#b45309";
45
+ };
46
+ readonly error: {
47
+ readonly 50: "#fef2f2";
48
+ readonly 100: "#fee2e2";
49
+ readonly 500: "#ef4444";
50
+ readonly 600: "#dc2626";
51
+ readonly 700: "#b91c1c";
52
+ };
53
+ readonly card: {
54
+ readonly background: {
55
+ readonly light: "#ffffff";
56
+ readonly dark: "#1a1a1a";
57
+ };
58
+ readonly border: {
59
+ readonly light: "#e4e4e7";
60
+ readonly dark: "#3f3f46";
61
+ };
62
+ readonly selected: {
63
+ readonly light: "#e0f2fe";
64
+ readonly dark: "#0c4a6e";
65
+ };
66
+ };
67
+ readonly categoryHue: {
68
+ readonly hotel: 220;
69
+ readonly flight: 200;
70
+ readonly cab: 35;
71
+ readonly restaurant: 15;
72
+ readonly gifting: 280;
73
+ readonly default: 220;
74
+ };
75
+ };
76
+ export type Colors = typeof colors;
77
+ //# sourceMappingURL=colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../../src/dls/tokens/colors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmFT,CAAC;AAEX,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC"}