ecomcoder-cli 1.3.9 → 1.3.11

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 (55) hide show
  1. package/dist/cli.js +2 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/asset/delete.d.ts +5 -0
  4. package/dist/commands/asset/delete.d.ts.map +1 -0
  5. package/dist/commands/asset/delete.js +54 -0
  6. package/dist/commands/asset/delete.js.map +1 -0
  7. package/dist/commands/asset/external-apis.d.ts +13 -0
  8. package/dist/commands/asset/external-apis.d.ts.map +1 -0
  9. package/dist/commands/asset/external-apis.js +99 -0
  10. package/dist/commands/asset/external-apis.js.map +1 -0
  11. package/dist/commands/asset/get.d.ts +5 -0
  12. package/dist/commands/asset/get.d.ts.map +1 -0
  13. package/dist/commands/asset/get.js +54 -0
  14. package/dist/commands/asset/get.js.map +1 -0
  15. package/dist/commands/asset/import.d.ts +5 -0
  16. package/dist/commands/asset/import.d.ts.map +1 -0
  17. package/dist/commands/asset/import.js +57 -0
  18. package/dist/commands/asset/import.js.map +1 -0
  19. package/dist/commands/asset/index.d.ts +5 -0
  20. package/dist/commands/asset/index.d.ts.map +1 -0
  21. package/dist/commands/asset/index.js +75 -0
  22. package/dist/commands/asset/index.js.map +1 -0
  23. package/dist/commands/asset/list.d.ts +5 -0
  24. package/dist/commands/asset/list.d.ts.map +1 -0
  25. package/dist/commands/asset/list.js +53 -0
  26. package/dist/commands/asset/list.js.map +1 -0
  27. package/dist/commands/asset/queries.d.ts +12 -0
  28. package/dist/commands/asset/queries.d.ts.map +1 -0
  29. package/dist/commands/asset/queries.js +135 -0
  30. package/dist/commands/asset/queries.js.map +1 -0
  31. package/dist/commands/asset/search-icons.d.ts +6 -0
  32. package/dist/commands/asset/search-icons.d.ts.map +1 -0
  33. package/dist/commands/asset/search-icons.js +84 -0
  34. package/dist/commands/asset/search-icons.js.map +1 -0
  35. package/dist/commands/asset/search-stock.d.ts +6 -0
  36. package/dist/commands/asset/search-stock.d.ts.map +1 -0
  37. package/dist/commands/asset/search-stock.js +79 -0
  38. package/dist/commands/asset/search-stock.js.map +1 -0
  39. package/dist/commands/asset/service.d.ts +62 -0
  40. package/dist/commands/asset/service.d.ts.map +1 -0
  41. package/dist/commands/asset/service.js +417 -0
  42. package/dist/commands/asset/service.js.map +1 -0
  43. package/dist/commands/asset/types.d.ts +166 -0
  44. package/dist/commands/asset/types.d.ts.map +1 -0
  45. package/dist/commands/asset/types.js +5 -0
  46. package/dist/commands/asset/types.js.map +1 -0
  47. package/dist/commands/asset/upload.d.ts +5 -0
  48. package/dist/commands/asset/upload.d.ts.map +1 -0
  49. package/dist/commands/asset/upload.js +75 -0
  50. package/dist/commands/asset/upload.js.map +1 -0
  51. package/dist/commands/asset/utils.d.ts +13 -0
  52. package/dist/commands/asset/utils.d.ts.map +1 -0
  53. package/dist/commands/asset/utils.js +68 -0
  54. package/dist/commands/asset/utils.js.map +1 -0
  55. package/package.json +4 -2
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Shopify Files API GraphQL Operations
3
+ *
4
+ * Using Shopify Admin API 2025-10
5
+ * Docs: https://shopify.dev/docs/api/admin-graphql/2025-10/mutations/fileCreate
6
+ */
7
+ // Create staged upload (step 1 of upload process)
8
+ export const STAGED_UPLOADS_CREATE = `
9
+ mutation stagedUploadsCreate($input: [StagedUploadInput!]!) {
10
+ stagedUploadsCreate(input: $input) {
11
+ stagedTargets {
12
+ url
13
+ resourceUrl
14
+ parameters {
15
+ name
16
+ value
17
+ }
18
+ }
19
+ userErrors {
20
+ field
21
+ message
22
+ }
23
+ }
24
+ }
25
+ `;
26
+ // Upload asset via staged upload (step 2)
27
+ export const FILE_CREATE = `
28
+ mutation fileCreate($files: [FileCreateInput!]!) {
29
+ fileCreate(files: $files) {
30
+ files {
31
+ id
32
+ alt
33
+ fileStatus
34
+ createdAt
35
+ ... on MediaImage {
36
+ id
37
+ alt
38
+ preview {
39
+ image {
40
+ url
41
+ width
42
+ height
43
+ }
44
+ }
45
+ }
46
+ ... on Video {
47
+ id
48
+ alt
49
+ sources {
50
+ url
51
+ width
52
+ height
53
+ }
54
+ }
55
+ }
56
+ userErrors {
57
+ field
58
+ message
59
+ }
60
+ }
61
+ }
62
+ `;
63
+ // List all files (images + videos)
64
+ export const FILES_LIST = `
65
+ query files($first: Int!, $after: String, $query: String) {
66
+ files(first: $first, after: $after, query: $query) {
67
+ edges {
68
+ node {
69
+ id
70
+ alt
71
+ fileStatus
72
+ createdAt
73
+ ... on MediaImage {
74
+ image {
75
+ url
76
+ width
77
+ height
78
+ }
79
+ }
80
+ ... on Video {
81
+ sources {
82
+ url
83
+ width
84
+ height
85
+ }
86
+ }
87
+ }
88
+ }
89
+ pageInfo {
90
+ hasNextPage
91
+ endCursor
92
+ }
93
+ }
94
+ }
95
+ `;
96
+ // Get single file details
97
+ export const FILE_GET = `
98
+ query file($id: ID!) {
99
+ node(id: $id) {
100
+ ... on MediaImage {
101
+ id
102
+ alt
103
+ image {
104
+ url
105
+ width
106
+ height
107
+ }
108
+ createdAt
109
+ }
110
+ ... on Video {
111
+ id
112
+ alt
113
+ sources {
114
+ url
115
+ width
116
+ height
117
+ }
118
+ createdAt
119
+ }
120
+ }
121
+ }
122
+ `;
123
+ // Delete file
124
+ export const FILE_DELETE = `
125
+ mutation fileDelete($fileIds: [ID!]!) {
126
+ fileDelete(fileIds: $fileIds) {
127
+ deletedFileIds
128
+ userErrors {
129
+ field
130
+ message
131
+ }
132
+ }
133
+ }
134
+ `;
135
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/commands/asset/queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kDAAkD;AAClD,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;CAiBpC,CAAC;AAEF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC1B,CAAC;AAEF,mCAAmC;AACnC,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BzB,CAAC;AAEF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBvB,CAAC;AAEF,cAAc;AACd,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;CAU1B,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Search Icons Command
3
+ * Search open-source icons from Lucide library
4
+ */
5
+ export declare function run(argv?: string[]): Promise<void>;
6
+ //# sourceMappingURL=search-icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-icons.d.ts","sourceRoot":"","sources":["../../../src/commands/asset/search-icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqDH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBAiC/D"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Search Icons Command
3
+ * Search open-source icons from Lucide library
4
+ */
5
+ import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
6
+ import { AssetService } from './service.js';
7
+ function showHelp() {
8
+ console.log(`
9
+ Search Icons (Lucide)
10
+
11
+ USAGE:
12
+ ecomcoder asset search-icons --query=<search> [OPTIONS]
13
+
14
+ OPTIONS:
15
+ --query <text> Search query (required)
16
+ --limit <number> Max results (default: 10)
17
+ --help, -h Show this help message
18
+
19
+ ABOUT LUCIDE:
20
+ - Open-source icon library (ISC license)
21
+ - 1,667+ icons and growing
22
+ - SVG format (lightweight, customizable)
23
+ - No API key required
24
+ - Free for commercial use
25
+
26
+ EXAMPLES:
27
+ # Search for shopping cart icons
28
+ ecomcoder asset search-icons --query="cart"
29
+
30
+ # Search for payment icons
31
+ ecomcoder asset search-icons --query="credit card"
32
+
33
+ # Search for social icons
34
+ ecomcoder asset search-icons --query="heart" --limit=5
35
+
36
+ USAGE IN LIQUID:
37
+ Icons are returned as CDN URLs. Use directly in your theme:
38
+
39
+ <img src="{{icon_url}}" alt="Icon" width="24" height="24">
40
+
41
+ Or download and customize:
42
+
43
+ ecomcoder asset upload --url=<icon_url>
44
+
45
+ CATEGORIES:
46
+ ecommerce: cart, bag, tag, truck, package, gift
47
+ payment: credit-card, dollar, percent
48
+ social: heart, star, share, thumbs-up
49
+ ui: menu, search, x, check, arrow
50
+ communication: mail, phone, message
51
+ `);
52
+ process.exit(0);
53
+ }
54
+ export async function run(argv = process.argv.slice(2)) {
55
+ if (hasHelpFlag(argv)) {
56
+ showHelp();
57
+ }
58
+ const args = parseArgs(argv);
59
+ if (!args.query) {
60
+ console.error(JSON.stringify({
61
+ success: false,
62
+ error: 'Missing required argument: --query'
63
+ }));
64
+ process.exit(1);
65
+ }
66
+ try {
67
+ const result = await AssetService.searchIcons({
68
+ query: args.query,
69
+ limit: args.limit ? parseInt(args.limit) : undefined
70
+ });
71
+ console.log(JSON.stringify(result, null, 2));
72
+ if (!result.success) {
73
+ process.exit(1);
74
+ }
75
+ }
76
+ catch (error) {
77
+ console.error(JSON.stringify({
78
+ success: false,
79
+ error: error.message || 'Unknown error occurred'
80
+ }));
81
+ process.exit(1);
82
+ }
83
+ }
84
+ //# sourceMappingURL=search-icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-icons.js","sourceRoot":"","sources":["../../../src/commands/asset/search-icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Cb,CAAC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,QAAQ,EAAE,CAAC;IACb,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAE7B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,oCAAoC;SAC5C,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC;YAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;SACrD,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,wBAAwB;SACjD,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Search Stock Images Command
3
+ * Search free stock photos from Pexels API
4
+ */
5
+ export declare function run(argv?: string[]): Promise<void>;
6
+ //# sourceMappingURL=search-stock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-stock.d.ts","sourceRoot":"","sources":["../../../src/commands/asset/search-stock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6CH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBAoC/D"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Search Stock Images Command
3
+ * Search free stock photos from Pexels API
4
+ */
5
+ import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
6
+ import { AssetService } from './service.js';
7
+ function showHelp() {
8
+ console.log(`
9
+ Search Stock Images (Pexels)
10
+
11
+ USAGE:
12
+ ecomcoder asset search-stock --query=<search> [OPTIONS]
13
+
14
+ OPTIONS:
15
+ --query <text> Search query (required)
16
+ --limit <number> Max results (default: 10, max: 80)
17
+ --orientation <type> Filter by orientation (landscape|portrait|square)
18
+ --size <size> Filter by size (large|medium|small)
19
+ --color <color> Filter by color (e.g., red, blue, green)
20
+ --help, -h Show this help message
21
+
22
+ SETUP:
23
+ Get your free API key at: https://www.pexels.com/api/
24
+ Set environment variable: export PEXELS_API_KEY=your-key-here
25
+
26
+ EXAMPLES:
27
+ # Search for mountains
28
+ ecomcoder asset search-stock --query="mountains"
29
+
30
+ # Landscape photos of ocean
31
+ ecomcoder asset search-stock --query="ocean" --orientation=landscape --limit=5
32
+
33
+ # Large photos of sunset
34
+ ecomcoder asset search-stock --query="sunset" --size=large
35
+
36
+ WORKFLOW:
37
+ 1. Search for stock images
38
+ 2. Use returned URL with: ecomcoder asset upload --url=<url>
39
+ 3. Asset is uploaded to your Shopify store
40
+
41
+ RATE LIMITS:
42
+ Free tier: 200 requests/hour, 20,000 requests/month
43
+ `);
44
+ process.exit(0);
45
+ }
46
+ export async function run(argv = process.argv.slice(2)) {
47
+ if (hasHelpFlag(argv)) {
48
+ showHelp();
49
+ }
50
+ const args = parseArgs(argv);
51
+ if (!args.query) {
52
+ console.error(JSON.stringify({
53
+ success: false,
54
+ error: 'Missing required argument: --query'
55
+ }));
56
+ process.exit(1);
57
+ }
58
+ try {
59
+ const result = await AssetService.searchStock({
60
+ query: args.query,
61
+ limit: args.limit ? parseInt(args.limit) : undefined,
62
+ orientation: args.orientation,
63
+ size: args.size,
64
+ color: args.color
65
+ });
66
+ console.log(JSON.stringify(result, null, 2));
67
+ if (!result.success) {
68
+ process.exit(1);
69
+ }
70
+ }
71
+ catch (error) {
72
+ console.error(JSON.stringify({
73
+ success: false,
74
+ error: error.message || 'Unknown error occurred'
75
+ }));
76
+ process.exit(1);
77
+ }
78
+ }
79
+ //# sourceMappingURL=search-stock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-stock.js","sourceRoot":"","sources":["../../../src/commands/asset/search-stock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCb,CAAC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,QAAQ,EAAE,CAAC;IACb,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAE7B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,oCAAoC;SAC5C,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC;YAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;YACpD,WAAW,EAAE,IAAI,CAAC,WAA8D;YAChF,IAAI,EAAE,IAAI,CAAC,IAAgD;YAC3D,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,wBAAwB;SACjD,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Asset Service
3
+ *
4
+ * Handles all asset management business logic
5
+ * Following Service Layer Pattern
6
+ */
7
+ import { ShopifyCredentials } from '../../lib/types.js';
8
+ import { CommandResult, UploadAssetInput, ListAssetsInput, GetAssetInput, DeleteAssetInput, ImportAssetsInput, FormattedAsset, SearchStockInput, StockImage, SearchIconsInput, Icon } from './types.js';
9
+ export declare class AssetService {
10
+ /**
11
+ * Upload single asset to Shopify
12
+ *
13
+ * Three-step process:
14
+ * 1. Create staged upload target
15
+ * 2. Upload file to signed URL
16
+ * 3. Create file record in Shopify
17
+ */
18
+ static upload(credentials: ShopifyCredentials, input: UploadAssetInput): Promise<CommandResult<{
19
+ asset: FormattedAsset;
20
+ }>>;
21
+ /**
22
+ * List all assets
23
+ */
24
+ static list(credentials: ShopifyCredentials, input?: ListAssetsInput): Promise<CommandResult<{
25
+ assets: FormattedAsset[];
26
+ hasMore: boolean;
27
+ cursor: string | null;
28
+ }>>;
29
+ /**
30
+ * Get single asset details
31
+ */
32
+ static get(credentials: ShopifyCredentials, input: GetAssetInput): Promise<CommandResult<{
33
+ asset: FormattedAsset;
34
+ }>>;
35
+ /**
36
+ * Delete asset
37
+ */
38
+ static delete(credentials: ShopifyCredentials, input: DeleteAssetInput): Promise<CommandResult<{
39
+ deletedId: string;
40
+ }>>;
41
+ /**
42
+ * Bulk import assets from directory
43
+ */
44
+ static import(credentials: ShopifyCredentials, input: ImportAssetsInput): Promise<CommandResult<{
45
+ uploaded: number;
46
+ failed: number;
47
+ errors: string[];
48
+ }>>;
49
+ /**
50
+ * Search stock images from Pexels
51
+ */
52
+ static searchStock(input: SearchStockInput): Promise<CommandResult<{
53
+ images: StockImage[];
54
+ }>>;
55
+ /**
56
+ * Search icons from Lucide
57
+ */
58
+ static searchIcons(input: SearchIconsInput): Promise<CommandResult<{
59
+ icons: Icon[];
60
+ }>>;
61
+ }
62
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/commands/asset/service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAaxD,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EAMd,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,IAAI,EACL,MAAM,YAAY,CAAC;AAEpB,qBAAa,YAAY;IACvB;;;;;;;OAOG;WACU,MAAM,CACjB,WAAW,EAAE,kBAAkB,EAC/B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,aAAa,CAAC;QAAE,KAAK,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;IAiLpD;;OAEG;WACU,IAAI,CACf,WAAW,EAAE,kBAAkB,EAC/B,KAAK,GAAE,eAAoB,GAC1B,OAAO,CAAC,aAAa,CAAC;QAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAyChG;;OAEG;WACU,GAAG,CACd,WAAW,EAAE,kBAAkB,EAC/B,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,aAAa,CAAC;QAAE,KAAK,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;IA6BpD;;OAEG;WACU,MAAM,CACjB,WAAW,EAAE,kBAAkB,EAC/B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,aAAa,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA+BhD;;OAEG;WACU,MAAM,CACjB,WAAW,EAAE,kBAAkB,EAC/B,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,aAAa,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAmDjF;;OAEG;WACU,WAAW,CACtB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,aAAa,CAAC;QAAE,MAAM,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC,CAAC;IAiBnD;;OAEG;WACU,WAAW,CACtB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,aAAa,CAAC;QAAE,KAAK,EAAE,IAAI,EAAE,CAAA;KAAE,CAAC,CAAC;CAgB7C"}