storybook-addon-design-system-docs 1.0.1 → 1.0.2

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.
package/README.md CHANGED
@@ -64,35 +64,163 @@ export default config;
64
64
 
65
65
  ### Options
66
66
 
67
- | Option | Type | Required | Default | Description |
68
- | ---------------- | -------------- | -------- | ------------------ | ------------------------------------------ |
69
- | `tailwindConfig` | `string` | **Yes** | - | Path to `tailwind.config.js` |
70
- | `sidebarGroup` | `string` | No | `'Design System/'` | Sidebar group name for generated docs |
71
- | `assets` | `AssetGroup[]` | No | `[]` | List of asset groups to generate |
72
- | `showOnlyCustom` | `boolean` | No | `false` | If true, only shows custom Tailwind values |
67
+ | Option | Type | Required | Default | Description |
68
+ | ---------------- | --------------- | -------- | ------------------ | ------------------------------------------------ |
69
+ | `tailwindConfig` | `string` | **Yes** | - | Path to `tailwind.config.js` |
70
+ | `sidebarGroup` | `string` | No | `'Design System/'` | Global sidebar group prefix for all docs |
71
+ | `sections` | `Section[]` | No | Default sections | Customize which theme sections to display |
72
+ | `assets` | `AssetGroup[]` | No | `[]` | Asset groups to generate galleries for |
73
+ | `showOnlyCustom` | `boolean` | No | `false` | If true, only shows custom Tailwind values |
74
+ | `templates` | `TemplateConfig`| No | Built-in templates | Override default MDX templates |
75
+
76
+ ### Sidebar Organization
77
+
78
+ The addon provides flexible control over where documentation pages appear in Storybook's sidebar through the `sidebarGroup` option and individual `path` properties.
79
+
80
+ #### Understanding `sidebarGroup` and `path`
81
+
82
+ - **`sidebarGroup`**: A global prefix applied to all generated documentation (both sections and assets)
83
+ - **`path`**: An optional per-section or per-asset path that controls placement relative to the `sidebarGroup`
84
+
85
+ #### Path Resolution Rules
86
+
87
+ The final sidebar location is determined by combining `sidebarGroup` and `path`:
88
+
89
+ 1. **Absolute path** (starts with `/`): Ignores `sidebarGroup` entirely
90
+ ```ts
91
+ sidebarGroup: 'Design System/'
92
+ sections: [{ name: 'Colors', path: '/' }]
93
+ // Result: "Colors" (at root level)
94
+ ```
95
+
96
+ 2. **Relative path**: Appends to `sidebarGroup`
97
+ ```ts
98
+ sidebarGroup: 'Design System/'
99
+ sections: [{ name: 'Colors', path: 'Theme/' }]
100
+ // Result: "Design System/Theme/Colors"
101
+ ```
102
+
103
+ 3. **No path specified**: Uses `sidebarGroup` directly
104
+ ```ts
105
+ sidebarGroup: 'Design System/'
106
+ sections: [{ name: 'Colors' }]
107
+ // Result: "Design System/Colors"
108
+ ```
109
+
110
+ 4. **Empty `sidebarGroup`**: Uses only the `path` (or just the name if no path)
111
+ ```ts
112
+ sidebarGroup: ''
113
+ sections: [{ name: 'Colors', path: 'Theme/' }]
114
+ // Result: "Theme/Colors"
115
+ ```
116
+
117
+ #### Examples
118
+
119
+ ```ts
120
+ {
121
+ name: 'storybook-addon-design-system-docs',
122
+ options: {
123
+ tailwindConfig: '../tailwind.config.js',
124
+ sidebarGroup: 'Design System/',
125
+
126
+ // Customize section placement
127
+ sections: [
128
+ { name: 'Colors', path: '/' }, // → "Colors" (root level)
129
+ { name: 'Typography', path: '/' }, // → "Typography" (root level)
130
+ { name: 'Spacing', path: 'Layout/' }, // → "Design System/Layout/Spacing"
131
+ { name: 'Shadows', path: 'Layout/' }, // → "Design System/Layout/Shadows"
132
+ ],
133
+
134
+ // Asset paths work the same way
135
+ assets: [
136
+ {
137
+ name: 'Icons',
138
+ source: './src/icons',
139
+ path: '/Resources/', // → "Resources/Icons" (absolute path, ignores sidebarGroup)
140
+ },
141
+ {
142
+ name: 'Illustrations',
143
+ source: './src/illustrations',
144
+ path: 'Assets/', // → "Design System/Assets/Illustrations" (relative to sidebarGroup)
145
+ },
146
+ ],
147
+ }
148
+ }
149
+ ```
150
+
151
+ ### Section Configuration
152
+
153
+ Customize which Tailwind theme sections to display and where they appear:
154
+
155
+ ```ts
156
+ sections: [
157
+ 'Colors', // Simple string uses defaults
158
+ {
159
+ name: 'Typography',
160
+ path: 'Theme/', // Custom sidebar location
161
+ },
162
+ {
163
+ name: 'Spacing',
164
+ path: '/', // Place at root level
165
+ },
166
+ ]
167
+ ```
168
+
169
+ Available sections: `Colors`, `Typography`, `Spacing`, `Shadows`, `BorderRadius` (or `Radius`)
73
170
 
74
171
  ### Asset Configuration
75
172
 
173
+ Generate asset galleries from your file system:
174
+
76
175
  ```ts
77
176
  assets: [
78
177
  {
79
- name: 'Icons', // Display name
80
- source: './src/icons', // Source directory (relative to project root)
81
- staticPath: '/icons', // URL path (must match where you serve static files or let addon handle it)
178
+ name: 'Icons', // Display name
179
+ source: './src/icons', // Source directory (relative to project root)
180
+ path: 'Assets/', // Optional: sidebar location (relative to sidebarGroup)
181
+ staticPath: '/icons', // Optional: URL path to serve assets from
82
182
  variants: {
83
- // Optional variants
84
- enabled: true,
85
- suffixes: ['.light', '.dark'],
183
+ enabled: true, // Enable variant detection
184
+ suffixes: ['.light', '.dark'], // Filename suffixes for variants
86
185
  },
87
186
  display: {
88
- // Optional display settings
89
- layout: 'grid',
90
- showFilename: true,
187
+ layout: 'grid', // 'grid' or 'list'
188
+ showFilename: true, // Show filenames below assets
91
189
  },
92
190
  },
93
191
  ];
94
192
  ```
95
193
 
194
+ **Asset Path Resolution**: Works exactly like section paths - supports both absolute (`/`) and relative paths, combined with `sidebarGroup`.
195
+
196
+ ### Template Customization
197
+
198
+ Override the default MDX templates for any section:
199
+
200
+ ```ts
201
+ {
202
+ templates: {
203
+ directory: './.storybook/design-system-docs', // Custom template directory
204
+ }
205
+ }
206
+ ```
207
+
208
+ Place custom MDX files in the specified directory with names matching sections (e.g., `colors.mdx`, `typography.mdx`).
209
+
210
+ ## Tailwind v4 Support
211
+
212
+ The addon automatically detects and supports both Tailwind CSS v3 (config file) and v4 (CSS `@theme` directive):
213
+
214
+ **Tailwind v3:**
215
+ ```ts
216
+ { tailwindConfig: './tailwind.config.js' }
217
+ ```
218
+
219
+ **Tailwind v4:**
220
+ ```ts
221
+ { tailwindConfig: './src/app.css' } // CSS file with @theme directive
222
+ ```
223
+
96
224
  ## Contributing
97
225
 
98
226
  We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details.
@@ -418,11 +418,11 @@ function AssetSection({
418
418
  };
419
419
  const getImportPath = (asset) => {
420
420
  if (!copy.import) return "";
421
- return copy.import.replace(/\{\{name\}\}/g, asset.id).replace(/\{\{ext\}\}/g, asset.ext).replace(/\{\{path\}\}/g, asset.relativePath).replace(/\{\{basename\}\}/g, asset.filename + "." + asset.ext);
421
+ return copy.import.replace(/\{\{name\}\}/g, asset.id).replace(/\{\{ext\}\}/g, asset.ext).replace(/\{\{path\}\}/g, asset.relativePath).replace(/\{\{basename\}\}/g, `${asset.filename}.${asset.ext}`);
422
422
  };
423
423
  const getComponentUsage = (asset) => {
424
424
  if (!copy.component) return "";
425
- return copy.component.replace(/\{\{name\}\}/g, asset.id).replace(/\{\{ext\}\}/g, asset.ext).replace(/\{\{path\}\}/g, asset.relativePath).replace(/\{\{basename\}\}/g, asset.filename + "." + asset.ext);
425
+ return copy.component.replace(/\{\{name\}\}/g, asset.id).replace(/\{\{ext\}\}/g, asset.ext).replace(/\{\{path\}\}/g, asset.relativePath).replace(/\{\{basename\}\}/g, `${asset.filename}.${asset.ext}`);
426
426
  };
427
427
  const filteredAssets = react.useMemo(() => {
428
428
  if (!searchTerm.trim()) return assets;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/addon/components/assets/Icons.tsx","../../../src/addon/components/assets/styled.ts","../../../src/addon/components/assets/AssetSection.tsx"],"names":["jsxs","jsx","styled","useState","useMemo","assets","Fragment"],"mappings":";;;;;;;AAIO,SAAS,gBAAA,GAAmB;AAClC,EAAA,uBACCA,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,cAAA;AAAA,MACL,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAW,yBAAA;AAAA,MAEX,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,WAAM,QAAA,EAAA,yBAAA,EAAuB,CAAA;AAAA,wBAC9BA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,+GAAA,EAAgH;AAAA;AAAA;AAAA,GACzH;AAEF;AAEO,SAAS,WAAA,GAAc;AAC7B,EAAA,uBACCD,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,cAAA;AAAA,MACL,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAW,oBAAA;AAAA,MAEX,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,WAAM,QAAA,EAAA,oBAAA,EAAkB,CAAA;AAAA,wBACzBA,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACA,EAAA,EAAG,GAAA;AAAA,YACH,EAAA,EAAG,GAAA;AAAA,YACH,CAAA,EAAE,GAAA;AAAA,YACF,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAY;AAAA;AAAA,SACb;AAAA,wBACAA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,wBAAA,EAAyB;AAAA;AAAA;AAAA,GAClC;AAEF;AAEO,SAAS,SAAA,GAAY;AAC3B,EAAA,uBACCD,eAAA,CAAC,SAAI,OAAA,EAAQ,WAAA,EAAY,MAAK,cAAA,EAAe,IAAA,EAAK,KAAA,EAAM,YAAA,EAAW,OAAA,EAClE,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,WAAM,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,oBACZA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iEAAA,EAAkE,CAAA;AAAA,oBAC1EA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,qGAAA,EAAsG;AAAA,GAAA,EAC/G,CAAA;AAEF;ACxCO,IAAM,UAAUC,cAAA,CAAO,GAAA,CAAI,CAAC,EAAE,OAAM,MAAO;AAAA,EACjD,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,OAAA,IAAW,SAAA;AAAA,EACzC,SAAA,EAAW,OAAA;AAAA,EACX,OAAA,EAAS,WAAA;AAAA,EACT,SAAA,EAAW;AACZ,CAAA,CAAE;AAEK,IAAM,SAAA,GAAYA,eAAO,GAAA,CAAI;AAAA,EACnC,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ;AACT,CAAC;AAGM,IAAM,QAAQA,cAAA,CAAO,EAAA,CAAG,CAAC,EAAE,OAAM,MAAO;AAAA,EAC9C,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,KAAA,EAAO,IAAA,IAAQ,YAAA;AAAA,EAC7C,QAAA,EAAU,MAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,WAAA,IAAe,SAAA;AAAA,EACnC,YAAA,EAAc,KAAA;AAAA,EACd,SAAA,EAAW;AACZ,CAAA,CAAE;AAEK,IAAM,cAAcA,cAAA,CAAO,CAAA,CAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EACnD,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,KAAA,EAAO,IAAA,IAAQ,YAAA;AAAA,EAC7C,QAAA,EAAU,MAAA;AAAA,EACV,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,WAAA,IAAe,SAAA;AAAA,EACnC,OAAA,EAAS,GAAA;AAAA,EACT,YAAA,EAAc,MAAA;AAAA,EACd,SAAA,EAAW;AACZ,CAAA,CAAE;AAGK,IAAM,WAAA,GAAcA,eAAO,GAAA,CAAI;AAAA,EACrC,OAAA,EAAS,MAAA;AAAA,EACT,GAAA,EAAK,MAAA;AAAA,EACL,YAAA,EAAc,MAAA;AAAA,EACd,QAAA,EAAU,MAAA;AAAA,EACV,UAAA,EAAY;AACb,CAAC;AAEM,IAAM,cAAcA,cAAA,CAAO,KAAA,CAAM,CAAC,EAAE,OAAM,MAAO;AAAA,EACvD,IAAA,EAAM,WAAA;AAAA,EACN,QAAA,EAAU,OAAA;AAAA,EACV,OAAA,EAAS,WAAA;AAAA,EACT,QAAA,EAAU,MAAA;AAAA,EAEV,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,cAAA,IAAkB,SAAS,CAAA,CAAA;AAAA,EACtD,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,WAAA,IAAe,SAAA;AAAA,EACnC,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,OAAA,IAAW,SAAA;AAAA,EACzC,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,oCAAA;AAAA,EACZ,SAAA,EAAW;AAAA,IACV,WAAA,EAAa,KAAA,CAAM,KAAA,EAAO,SAAA,IAAa,SAAA;AAAA,IACvC,SAAA,EAAW,CAAA,UAAA,EAAa,KAAA,CAAM,KAAA,EAAO,aAAa,SAAS,CAAA,EAAA;AAAA,GAC5D;AAAA,EACA,gBAAA,EAAkB;AAAA,IACjB,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,WAAA,IAAe,SAAA;AAAA,IACnC,OAAA,EAAS;AAAA;AAEX,CAAA,CAAE;AAEK,IAAM,gBAAgBA,cAAA,CAAO,MAAA,CAAO,CAAC,EAAE,OAAM,MAAO;AAAA,EAC1D,OAAA,EAAS,WAAA;AAAA,EACT,QAAA,EAAU,MAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EAEZ,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,cAAA,IAAkB,SAAS,CAAA,CAAA;AAAA,EACtD,YAAA,EAAc,KAAA;AAAA,EACd,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,OAAA,IAAW,SAAA;AAAA,EACzC,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,WAAA,IAAe,SAAA;AAAA,EACnC,UAAA,EAAY,UAAA;AAAA,EACZ,SAAA,EAAW;AAAA,IACV,WAAA,EAAa,KAAA,CAAM,KAAA,EAAO,SAAA,IAAa,SAAA;AAAA,IACvC,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,SAAA,IAAa;AAAA;AAE7C,CAAA,CAAE;AAEK,IAAM,kBAAA,GAAqBA,eAAO,GAAA,CAAI;AAAA,EAC5C,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,GAAA,EAAK,MAAA;AAAA,EACL,UAAA,EAAY;AACb,CAAC;AAEM,IAAM,mBAAmBA,cAAA,CAAO,GAAA,CAAI,CAAC,EAAE,OAAM,MAAO;AAAA,EAC1D,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,GAAA,EAAK,KAAA;AAAA,EACL,OAAA,EAAS,KAAA;AAAA,EACT,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,cAAA,IAAkB,SAAS,CAAA,CAAA;AAAA,EACtD,YAAA,EAAc,KAAA;AAAA,EACd,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,OAAA,IAAW;AAC1C,CAAA,CAAE;AAEK,IAAM,eAAeA,cAAA,CAAO,MAAA,CAAO,CAAC,EAAE,OAAM,MAAO;AAAA,EACzD,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,cAAA,EAAgB,QAAA;AAAA,EAChB,KAAA,EAAO,MAAA;AAAA,EACP,MAAA,EAAQ,MAAA;AAAA,EACR,MAAA,EAAQ,MAAA;AAAA,EACR,YAAA,EAAc,KAAA;AAAA,EACd,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY,aAAA;AAAA,EACZ,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,WAAA,IAAe,SAAA;AAAA,EACnC,OAAA,EAAS,GAAA;AAAA,EACT,UAAA,EAAY,WAAA;AAAA,EACZ,uBAAA,EAAyB;AAAA,IACxB,UAAA,EAAY,KAAA,CAAM,KAAA,EAAO,SAAA,IAAa,SAAA;AAAA,IACtC,KAAA,EAAO,MAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACV;AAAA,EACA,mCAAA,EAAqC;AAAA,IACpC,OAAA,EAAS,GAAA;AAAA,IACT,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,SAAA,IAAa;AAAA,GAC5C;AAAA,EACA,OAAA,EAAS;AAAA,IACR,KAAA,EAAO,MAAA;AAAA,IACP,MAAA,EAAQ;AAAA;AAEV,CAAA,CAAE;AAEK,IAAM,mBAAmBA,cAAA,CAAO,GAAA,CAAI,CAAC,EAAE,OAAM,MAAO;AAAA,EAC1D,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,GAAA,EAAK,KAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,cAAA,IAAkB,SAAS,CAAA,CAAA;AAAA,EACtD,YAAA,EAAc,KAAA;AAAA,EACd,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,OAAA,IAAW,SAAA;AAAA,EACzC,UAAA,EAAY,mBAAA;AAAA,EACZ,gBAAA,EAAkB;AAAA,IACjB,WAAA,EAAa,KAAA,CAAM,KAAA,EAAO,SAAA,IAAa;AAAA;AAEzC,CAAA,CAAE;AAEK,IAAM,aAAaA,cAAA,CAAO,IAAA,CAAK,CAAC,EAAE,OAAM,MAAO;AAAA,EACrD,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,KAAA,EAAO,IAAA,IAAQ,YAAA;AAAA,EAC7C,QAAA,EAAU,MAAA;AAAA,EACV,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,WAAA,IAAe,SAAA;AAAA,EACnC,OAAA,EAAS,GAAA;AAAA,EACT,aAAA,EAAe,WAAA;AAAA,EACf,aAAA,EAAe;AAChB,CAAA,CAAE;AAEK,IAAM,UAAA,GAAaA,eAAO,KAAA,CAAM;AAAA,EACtC,KAAA,EAAO,MAAA;AAAA,EACP,MAAA,EAAQ,MAAA;AAAA,EACR,OAAA,EAAS,CAAA;AAAA,EACT,MAAA,EAAQ,MAAA;AAAA,EACR,YAAA,EAAc,KAAA;AAAA,EACd,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY,aAAA;AAAA,EACZ,iCAAA,EAAmC;AAAA,IAClC,OAAA,EAAS;AAAA,GACV;AAAA,EACA,yBAAA,EAA2B;AAAA,IAC1B,MAAA,EAAQ,MAAA;AAAA,IACR,YAAA,EAAc;AAAA,GACf;AAAA,EACA,sBAAA,EAAwB;AAAA,IACvB,MAAA,EAAQ,MAAA;AAAA,IACR,YAAA,EAAc;AAAA;AAEhB,CAAC;AAEM,IAAM,cAAcA,cAAA,CAAO,MAAA,CAAO,CAAC,EAAE,OAAM,MAAO;AAAA,EACxD,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,cAAA,EAAgB,QAAA;AAAA,EAChB,KAAA,EAAO,MAAA;AAAA,EACP,MAAA,EAAQ,MAAA;AAAA,EACR,OAAA,EAAS,CAAA;AAAA,EACT,MAAA,EAAQ,MAAA;AAAA,EACR,YAAA,EAAc,KAAA;AAAA,EACd,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY,aAAA;AAAA,EACZ,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,WAAA,IAAe,SAAA;AAAA,EACnC,OAAA,EAAS,GAAA;AAAA,EACT,UAAA,EAAY,WAAA;AAAA,EACZ,SAAA,EAAW;AAAA,IACV,OAAA,EAAS,CAAA;AAAA,IACT,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,SAAA,IAAa;AAAA,GAC5C;AAAA,EACA,OAAA,EAAS;AAAA,IACR,KAAA,EAAO,MAAA;AAAA,IACP,MAAA,EAAQ;AAAA;AAEV,CAAA,CAAE;AAEK,IAAM,YAAYA,cAAA,CAAO,GAAA,CAAI,CAAC,EAAE,OAAM,MAAO;AAAA,EACnD,OAAA,EAAS,MAAA;AAAA,EACT,aAAA,EAAe,QAAA;AAAA,EACf,UAAA,EAAY,QAAA;AAAA,EACZ,OAAA,EAAS,MAAA;AAAA,EACT,YAAA,EAAc,KAAA;AAAA,EACd,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,cAAA,IAAkB,SAAS,CAAA,CAAA;AAAA,EACtD,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,OAAA,IAAW,SAAA;AAAA,EACzC,UAAA,EAAY,UAAA;AAAA,EACZ,MAAA,EAAQ,SAAA;AAAA,EACR,SAAA,EAAW;AAAA,IACV,WAAA,EAAa,KAAA,CAAM,KAAA,EAAO,SAAA,IAAa,SAAA;AAAA,IACvC,SAAA,EAAW;AAAA;AAEb,CAAA,CAAE;AAEK,IAAM,YAAA,GAAeA,eAAO,GAAA,CAAI;AAAA,EACtC,KAAA,EAAO,4BAAA;AAAA,EACP,MAAA,EAAQ,4BAAA;AAAA,EACR,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,cAAA,EAAgB,QAAA;AAAA,EAChB,YAAA,EAAc,MAAA;AAAA,EACd,YAAA,EAAc;AACf,CAAC;AAEM,IAAM,UAAA,GAAaA,eAAO,GAAA,CAAI;AAAA,EACpC,QAAA,EAAU,MAAA;AAAA,EACV,SAAA,EAAW,MAAA;AAAA,EACX,SAAA,EAAW;AACZ,CAAC;AAEM,IAAM,YAAYA,cAAA,CAAO,GAAA,CAAI,CAAC,EAAE,OAAM,MAAO;AAAA,EACnD,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,KAAA,EAAO,IAAA,IAAQ,YAAA;AAAA,EAC7C,QAAA,EAAU,MAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,WAAA,IAAe,SAAA;AAAA,EACnC,SAAA,EAAW,QAAA;AAAA,EACX,SAAA,EAAW,YAAA;AAAA,EACX,UAAA,EAAY;AACb,CAAA,CAAE;AAEK,IAAM,gBAAgBA,cAAA,CAAO,GAAA,CAAI,CAAC,EAAE,OAAM,MAAO;AAAA,EACvD,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,KAAA,EAAO,IAAA,IAAQ,WAAA;AAAA,EAC7C,QAAA,EAAU,MAAA;AAAA,EACV,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,WAAA,IAAe,SAAA;AAAA,EACnC,OAAA,EAAS,GAAA;AAAA,EACT,SAAA,EAAW,QAAA;AAAA,EACX,SAAA,EAAW;AACZ,CAAA,CAAE;AAEK,IAAM,WAAA,GAAcA,eAAO,GAAA,CAAI;AAAA,EACrC,OAAA,EAAS,MAAA;AAAA,EACT,GAAA,EAAK,KAAA;AAAA,EACL,SAAA,EAAW,KAAA;AAAA,EACX,OAAA,EAAS,CAAA;AAAA,EACT,UAAA,EAAY,cAAA;AAAA,EACZ,qBAAA,EAAuB;AAAA,IACtB,OAAA,EAAS;AAAA;AAEX,CAAC;AAEM,IAAM,aAAaA,cAAA,CAAO,MAAA,CAAO,CAAC,EAAE,OAAM,MAAO;AAAA,EACvD,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU,MAAA;AAAA,EACV,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,cAAA,IAAkB,SAAS,CAAA,CAAA;AAAA,EACtD,YAAA,EAAc,KAAA;AAAA,EACd,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,OAAA,IAAW,SAAA;AAAA,EACzC,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,WAAA,IAAe,SAAA;AAAA,EACnC,UAAA,EAAY,WAAA;AAAA,EACZ,SAAA,EAAW;AAAA,IACV,UAAA,EAAY,KAAA,CAAM,KAAA,EAAO,SAAA,IAAa,SAAA;AAAA,IACtC,KAAA,EAAO,MAAA;AAAA,IACP,WAAA,EAAa,KAAA,CAAM,KAAA,EAAO,SAAA,IAAa;AAAA;AAEzC,CAAA,CAAE;AAEK,IAAM,YAAYA,cAAA,CAAO,GAAA,CAAI,CAAC,EAAE,OAAM,MAAO;AAAA,EACnD,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,KAAA,EAAO,IAAA,IAAQ,YAAA;AAAA,EAC7C,QAAA,EAAU,MAAA;AAAA,EACV,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,WAAA,IAAe,SAAA;AAAA,EACnC,OAAA,EAAS,GAAA;AAAA,EACT,SAAA,EAAW,QAAA;AAAA,EACX,OAAA,EAAS;AACV,CAAA,CAAE;AAGK,IAAM,aAAA,GAAgBA,eAAO,GAAA,CAAI;AAAA,EACvC,YAAA,EAAc;AACf,CAAC;AAEM,IAAM,cAAcA,cAAA,CAAO,EAAA,CAAG,CAAC,EAAE,OAAM,MAAO;AAAA,EACpD,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,KAAA,EAAO,IAAA,IAAQ,YAAA;AAAA,EAC7C,QAAA,EAAU,MAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,WAAA,IAAe,SAAA;AAAA,EACnC,YAAA,EAAc,MAAA;AAAA,EACd,SAAA,EAAW,CAAA;AAAA,EACX,aAAA,EAAe,KAAA;AAAA,EACf,YAAA,EAAc,CAAA,UAAA,EAAa,KAAA,CAAM,cAAA,IAAkB,SAAS,CAAA;AAC7D,CAAA,CAAE;AAGK,IAAM,QAAQA,cAAA,CAAO,GAAA,CAAI,CAAC,EAAE,OAAM,MAAO;AAAA,EAC/C,QAAA,EAAU,OAAA;AAAA,EACV,MAAA,EAAQ,MAAA;AAAA,EACR,KAAA,EAAO,MAAA;AAAA,EACP,OAAA,EAAS,WAAA;AAAA,EACT,UAAA,EAAY,KAAA,CAAM,KAAA,EAAO,QAAA,IAAY,SAAA;AAAA,EACrC,KAAA,EAAO,MAAA;AAAA,EACP,YAAA,EAAc,KAAA;AAAA,EACd,QAAA,EAAU,MAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,SAAA,EAAW,6BAAA;AAAA,EACX,MAAA,EAAQ,GAAA;AAAA,EACR,SAAA,EAAW;AACZ,CAAA,CAAE;AC3PK,SAAS,YAAA,CAAa;AAAA,EAC5B,KAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA;AACD,CAAA,EAAsB;AAErB,EAAA,MAAM,gBAAA,GAAmB,SAAA;AACzB,EAAA,MAAM,eAAA,GAAkB,SAAA;AACxB,EAAA,MAAM,iBAAA,GAAoB,GAAG,gBAAgB,CAAA,MAAA,CAAA;AAC7C,EAAA,MAAM,gBAAA,GAAmB,GAAG,gBAAgB,CAAA,KAAA,CAAA;AAC5C,EAAA,MAAM,gBAAA,GAAmB,GAAG,gBAAgB,CAAA,KAAA,CAAA;AAG5C,EAAA,MAAM,cAAA,GAAiB,CAAC,GAAA,EAAa,YAAA,KAAyB;AAC7D,IAAA,IAAI;AACH,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAA;AACvC,MAAA,OAAO,MAAA,KAAW,OAAO,MAAA,GAAS,YAAA;AAAA,IACnC,CAAA,CAAA,MAAQ;AACP,MAAA,OAAO,YAAA;AAAA,IACR;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,GAAA,EAAa,KAAA,KAAkB;AACtD,IAAA,IAAI;AACH,MAAA,YAAA,CAAa,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,IAChC,CAAA,CAAA,MAAQ;AAAA,IAAC;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,GAAA,KAAgB;AAC1C,IAAA,IAAI;AACH,MAAA,YAAA,CAAa,WAAW,GAAG,CAAA;AAAA,IAC5B,CAAA,CAAA,MAAQ;AAAA,IAAC;AAAA,EACV,CAAA;AAGA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIC,eAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,cAAA,CAAS,SAAS,cAAc,CAAA;AAC5E,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAwB,IAAI,CAAA;AACpE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,cAAA;AAAA,IAAS,MACpC,cAAA,CAAe,gBAAA,EAAkB,WAAW;AAAA,GAC7C;AACA,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,cAAA;AAAA,IAAS,MAChD,cAAA,CAAe,iBAAA,EAAmB,gBAAgB;AAAA,GACnD;AACA,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,cAAA;AAAA,IAAS,MAC9C,cAAA,CAAe,gBAAA,EAAkB,eAAe;AAAA,GACjD;AAGA,EAAA,MAAM,kBAAA,GAAqB,CAAC,IAAA,KAAiB;AAC5C,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,cAAA,CAAe,kBAAkB,IAAI,CAAA;AAAA,EACtC,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,KAAA,KAAkB;AAC9C,IAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,IAAA,cAAA,CAAe,mBAAmB,KAAK,CAAA;AAAA,EACxC,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAAkB;AAC7C,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,cAAA,CAAe,kBAAkB,KAAK,CAAA;AAAA,EACvC,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AAC1B,IAAA,eAAA,CAAgB,gBAAgB,CAAA;AAChC,IAAA,iBAAA,CAAkB,iBAAiB,CAAA;AAAA,EACpC,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACzB,IAAA,cAAA,CAAe,eAAe,CAAA;AAC9B,IAAA,iBAAA,CAAkB,gBAAgB,CAAA;AAAA,EACnC,CAAA;AAEA,EAAA,MAAM,iBAAiB,cAAA,KAAmB,OAAA;AAE1C,EAAA,MAAM,uBAAuB,MAAM;AAClC,IAAA,IAAI,WAAW,WAAA,EAAa;AAC3B,MAAA,OAAO,0EAAA;AAAA,IACR;AAEA,IAAA,OAAO,iBAAiB,WAAA,GAAc,YAAA;AAAA,EACvC,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,OAAA,KAAoB;AACtC,IAAA,eAAA,CAAgB,OAAO,CAAA;AACvB,IAAA,UAAA,CAAW,MAAM,eAAA,CAAgB,IAAI,CAAA,EAAG,GAAI,CAAA;AAAA,EAC7C,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,EAAc,IAAA,KAAiB;AACvD,IAAA,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA,CAAE,KAAK,MAAM;AAC9C,MAAA,SAAA,CAAU,CAAA,EAAG,IAAI,CAAA,qBAAA,CAAuB,CAAA;AAAA,IACzC,CAAC,CAAA;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAiB;AACvC,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,OAAO,EAAA;AACzB,IAAA,OAAO,IAAA,CAAK,OACV,OAAA,CAAQ,eAAA,EAAiB,MAAM,EAAE,CAAA,CACjC,OAAA,CAAQ,cAAA,EAAgB,KAAA,CAAM,GAAG,EACjC,OAAA,CAAQ,eAAA,EAAiB,KAAA,CAAM,YAAY,CAAA,CAC3C,OAAA,CAAQ,qBAAqB,KAAA,CAAM,QAAA,GAAW,GAAA,GAAM,KAAA,CAAM,GAAG,CAAA;AAAA,EAChE,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAiB;AAC3C,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,OAAO,EAAA;AAC5B,IAAA,OAAO,IAAA,CAAK,UACV,OAAA,CAAQ,eAAA,EAAiB,MAAM,EAAE,CAAA,CACjC,OAAA,CAAQ,cAAA,EAAgB,KAAA,CAAM,GAAG,EACjC,OAAA,CAAQ,eAAA,EAAiB,KAAA,CAAM,YAAY,CAAA,CAC3C,OAAA,CAAQ,qBAAqB,KAAA,CAAM,QAAA,GAAW,GAAA,GAAM,KAAA,CAAM,GAAG,CAAA;AAAA,EAChE,CAAA;AAGA,EAAA,MAAM,cAAA,GAAiBC,cAAQ,MAAM;AACpC,IAAA,IAAI,CAAC,UAAA,CAAW,IAAA,EAAK,EAAG,OAAO,MAAA;AAC/B,IAAA,MAAM,IAAA,GAAO,WAAW,WAAA,EAAY;AACpC,IAAA,OAAO,MAAA,CAAO,MAAA;AAAA,MACb,CAAC,KAAA,KACA,KAAA,CAAM,IAAA,CAAK,aAAY,CAAE,QAAA,CAAS,IAAI,CAAA,IACtC,KAAA,CAAM,QAAA,CAAS,WAAA,EAAY,CAAE,SAAS,IAAI;AAAA,KAC5C;AAAA,EACD,CAAA,EAAG,CAAC,MAAA,EAAQ,UAAU,CAAC,CAAA;AAGvB,EAAA,MAAM,aAAA,GAAgBA,cAAQ,MAAM;AACnC,IAAA,IAAI,CAAC,aAAA,EAAe,uBAAO,IAAI,GAAA,EAAI;AACnC,IAAA,MAAM,MAAA,uBAAa,GAAA,EAAqB;AACxC,IAAA,KAAA,MAAW,SAAS,cAAA,EAAgB;AACnC,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,IAAU,MAAA;AAC/B,MAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA,EAAG;AACxB,QAAA,MAAA,CAAO,GAAA,CAAI,MAAA,EAAQ,EAAE,CAAA;AAAA,MACtB;AACA,MAAA,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA,CAAG,IAAA,CAAK,KAAK,CAAA;AAAA,IAC/B;AACA,IAAA,OAAO,MAAA;AAAA,EACR,CAAA,EAAG,CAAC,cAAA,EAAgB,aAAa,CAAC,CAAA;AAElC,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAiB;AACrC,IAAA,MAAM,QAAA,GACL,cAAA,KAAmB,MAAA,IAAU,KAAA,CAAM,QAAA,CAAS,OACzC,KAAA,CAAM,QAAA,CAAS,IAAA,GACf,KAAA,CAAM,QAAA,CAAS,KAAA;AAEnB,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,SAAA;AAC1C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,GAAS,QAAA,GAAW,WAAA;AAC1C,IAAA,MAAM,WAAW,IAAA,CAAK,MAAA,GACnB,cAAc,KAAK,CAAA,GACnB,kBAAkB,KAAK,CAAA;AAE1B,IAAA,uBACCJ,eAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QAEA,SAAA,EAAU,YAAA;AAAA,QACV,OAAA,EAAS,MAAM,aAAA,IAAiB,eAAA,CAAgB,UAAU,QAAQ,CAAA;AAAA,QAElE,QAAA,EAAA;AAAA,0BAAAC,cAAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACA,KAAA,EAAO;AAAA,gBACN,KAAA,EAAO,CAAA,EAAG,OAAA,CAAQ,WAAW,CAAA,EAAA,CAAA;AAAA,gBAC7B,MAAA,EAAQ,CAAA,EAAG,OAAA,CAAQ,WAAW,CAAA,EAAA,CAAA;AAAA,gBAC9B,YAAY,oBAAA;AAAqB,eAClC;AAAA,cAEA,0BAAAA,cAAAA,CAAC,UAAA,EAAA,EAAW,KAAK,QAAA,EAAU,GAAA,EAAK,MAAM,IAAA,EAAM;AAAA;AAAA,WAC7C;AAAA,0BACAA,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,KAAA,CAAM,IAAA,EAAK,CAAA;AAAA,UACtB,OAAA,CAAQ,YAAA,oBACRD,eAAAA,CAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,QAAA;AAAA,YAAS,GAAA;AAAA,YAAE,KAAA,CAAM;AAAA,WAAA,EACzB,CAAA;AAAA,UAEA,aAAA,oBACAC,cAAAA,CAAC,WAAA,EAAA,EACA,QAAA,kBAAAA,cAAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACf,gBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,gBAAA,eAAA,CAAgB,UAAU,QAAQ,CAAA;AAAA,cACnC,CAAA;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACF,EACD;AAAA;AAAA,OAAA;AAAA,MA7BI,KAAA,CAAM;AAAA,KA+BZ;AAAA,EAEF,CAAA;AAEA,EAAA,MAAM,sBAAsB,MAAM;AACjC,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,aAAA,CAAc,SAAS,CAAA;AAClD,IAAA,OAAO,OAAA,CAAQ,IAAI,CAAC,CAAC,QAAQI,OAAM,CAAA,qBAClCL,eAAAA,CAAC,aAAA,EAAA,EACA,QAAA,EAAA;AAAA,sBAAAC,cAAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,MAAA,KAAW,MAAA,GAAS,SAAS,MAAA,EAAO,CAAA;AAAA,sBAClDA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACA,KAAA,EAAO;AAAA,YACN,OAAA,EAAS,MAAA;AAAA,YACT,mBAAA,EAAqB,CAAA,yBAAA,EAA4B,OAAA,CAAQ,WAAA,GAAc,EAAE,CAAA,SAAA,CAAA;AAAA,YACzE,GAAA,EAAK;AAAA,WACN;AAAA,UAEC,QAAA,EAAAI,OAAAA,CAAO,GAAA,CAAI,WAAW;AAAA;AAAA;AACxB,KAAA,EAAA,EAVmB,MAWpB,CACA,CAAA;AAAA,EACF,CAAA;AAEA,EAAA,uBACCJ,cAAAA,CAAC,OAAA,EAAA,EACA,QAAA,kBAAAD,gBAAC,SAAA,EAAA,EACA,QAAA,EAAA;AAAA,oBAAAC,cAAAA,CAAC,SAAO,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IACb,WAAA,oBAAeA,cAAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,oBAE1CD,gBAAC,WAAA,EAAA,EACA,QAAA,EAAA;AAAA,sBAAAC,cAAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UACA,KAAA,EAAO,UAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,aAAA,CAAc,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UAC7C,WAAA,EAAa,CAAA,OAAA,EAAU,KAAA,CAAM,WAAA,EAAa,CAAA,GAAA;AAAA;AAAA,OAC3C;AAAA,MAEC,QAAA,CAAS,2BACTA,cAAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACA,OAAA,EAAS,MACR,iBAAA,CAAkB,CAAC,MAAO,CAAA,KAAM,OAAA,GAAU,SAAS,OAAQ,CAAA;AAAA,UAG3D,QAAA,EAAA,cAAA,KAAmB,UAAU,OAAA,GAAU;AAAA;AAAA,OACzC;AAAA,sBAGDD,gBAAC,kBAAA,EAAA,EACA,QAAA,EAAA;AAAA,wBAAAA,gBAAC,gBAAA,EAAA,EACA,QAAA,EAAA;AAAA,0BAAAC,cAAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACA,eAAa,MAAA,KAAW,SAAA;AAAA,cACxB,OAAA,EAAS,MAAM,kBAAA,CAAmB,SAAS,CAAA;AAAA,cAC3C,KAAA,EAAM,oBAAA;AAAA,cAEN,QAAA,kBAAAA,eAAC,WAAA,EAAA,EAAY;AAAA;AAAA,WACd;AAAA,0BACAA,cAAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACA,eAAa,MAAA,KAAW,WAAA;AAAA,cACxB,OAAA,EAAS,MAAM,kBAAA,CAAmB,WAAW,CAAA;AAAA,cAC7C,KAAA,EAAM,sBAAA;AAAA,cAEN,QAAA,kBAAAA,eAAC,gBAAA,EAAA,EAAiB;AAAA;AAAA;AACnB,SAAA,EACD,CAAA;AAAA,QAEC,MAAA,KAAW,SAAA,oBACXD,eAAAA,CAAAM,mBAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAN,gBAAC,gBAAA,EAAA,EACA,QAAA,EAAA;AAAA,4BAAAC,cAAAA,CAAC,cAAW,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,4BACjBA,cAAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACA,IAAA,EAAK,OAAA;AAAA,gBACL,KAAA,EAAO,YAAA;AAAA,gBACP,UAAU,CAAC,CAAA,KAAM,mBAAA,CAAoB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,gBACnD,KAAA,EAAM;AAAA;AAAA,aACP;AAAA,YACC,YAAA,KAAiB,oCACjBA,cAAAA;AAAA,cAAC,WAAA;AAAA,cAAA;AAAA,gBACA,OAAA,EAAS,YAAA;AAAA,gBACT,KAAA,EAAM,kBAAA;AAAA,gBAEN,QAAA,kBAAAA,eAAC,SAAA,EAAA,EAAU;AAAA;AAAA;AACZ,WAAA,EAEF,CAAA;AAAA,0BACAD,gBAAC,gBAAA,EAAA,EACA,QAAA,EAAA;AAAA,4BAAAC,cAAAA,CAAC,cAAW,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,4BAChBA,cAAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACA,IAAA,EAAK,OAAA;AAAA,gBACL,KAAA,EAAO,WAAA;AAAA,gBACP,UAAU,CAAC,CAAA,KAAM,kBAAA,CAAmB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,gBAClD,KAAA,EAAM;AAAA;AAAA,aACP;AAAA,YACC,WAAA,KAAgB,eAAA,oBAChBA,cAAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAS,WAAA,EAAa,KAAA,EAAM,kBAAA,EACxC,QAAA,kBAAAA,cAAAA,CAAC,SAAA,EAAA,EAAU,CAAA,EACZ;AAAA,WAAA,EAEF;AAAA,SAAA,EACD;AAAA,OAAA,EAEF;AAAA,KAAA,EACD,CAAA;AAAA,IAEC,cAAA,CAAe,MAAA,KAAW,CAAA,mBAC1BD,gBAAC,SAAA,EAAA,EAAU,QAAA,EAAA;AAAA,MAAA,KAAA;AAAA,MACN,MAAM,WAAA,EAAY;AAAA,MAAE,mBAAA;AAAA,MAAkB,UAAA;AAAA,MAAW;AAAA,KAAA,EACtD,CAAA,GACG,aAAA,GACH,mBAAA,EAAoB,mBAEpBC,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACN,OAAA,EAAS,MAAA;AAAA,UACT,mBAAA,EAAqB,CAAA,yBAAA,EAA4B,OAAA,CAAQ,WAAA,GAAc,EAAE,CAAA,SAAA,CAAA;AAAA,UACzE,GAAA,EAAK;AAAA,SACN;AAAA,QAEC,QAAA,EAAA,cAAA,CAAe,IAAI,WAAW;AAAA;AAAA,KAChC;AAAA,IAGA,YAAA,oBAAgBA,cAAAA,CAAC,KAAA,EAAA,EAAO,QAAA,EAAA,YAAA,EAAa;AAAA,GAAA,EACvC,CAAA,EACD,CAAA;AAEF","file":"index.cjs","sourcesContent":["/**\n * SVG icon components for asset documentation.\n */\n\nexport function CheckerboardIcon() {\n\treturn (\n\t\t<svg\n\t\t\tviewBox=\"0 0 16 16\"\n\t\t\tfill=\"currentColor\"\n\t\t\trole=\"img\"\n\t\t\taria-label=\"Checkerboard background\"\n\t\t>\n\t\t\t<title>Checkerboard background</title>\n\t\t\t<path d=\"M0 0h4v4H0V0zm4 4h4v4H4V4zm4-4h4v4H8V0zm4 4h4v4h-4V4zM0 8h4v4H0V8zm8 0h4v4H8V8zm-4 4h4v4H4v-4zm8 0h4v4h-4v-4z\" />\n\t\t</svg>\n\t);\n}\n\nexport function InverseIcon() {\n\treturn (\n\t\t<svg\n\t\t\tviewBox=\"0 0 16 16\"\n\t\t\tfill=\"currentColor\"\n\t\t\trole=\"img\"\n\t\t\taria-label=\"Inverse background\"\n\t\t>\n\t\t\t<title>Inverse background</title>\n\t\t\t<circle\n\t\t\t\tcx=\"8\"\n\t\t\t\tcy=\"8\"\n\t\t\t\tr=\"7\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t/>\n\t\t\t<path d=\"M8 1a7 7 0 0 1 0 14V1z\" />\n\t\t</svg>\n\t);\n}\n\nexport function ResetIcon() {\n\treturn (\n\t\t<svg viewBox=\"0 0 16 16\" fill=\"currentColor\" role=\"img\" aria-label=\"Reset\">\n\t\t\t<title>Reset</title>\n\t\t\t<path d=\"M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z\" />\n\t\t\t<path d=\"M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z\" />\n\t\t</svg>\n\t);\n}\n","/**\n * Styled components for asset documentation pages.\n * Extracted from templates/default/assets/_common.edge\n */\n\nimport { styled } from \"storybook/theming\";\n\n// Base wrapper and container\nexport const Wrapper = styled.div(({ theme }) => ({\n\tbackground: theme.background?.content || \"#ffffff\",\n\tminHeight: \"100vh\",\n\tpadding: \"40px 20px\",\n\tboxSizing: \"border-box\",\n}));\n\nexport const Container = styled.div({\n\tmaxWidth: \"1200px\",\n\tmargin: \"0 auto\",\n});\n\n// Typography\nexport const Title = styled.h1(({ theme }) => ({\n\tfontFamily: theme.typography?.fonts?.base || \"sans-serif\",\n\tfontSize: \"32px\",\n\tfontWeight: 700,\n\tcolor: theme.color?.defaultText || \"#333333\",\n\tmarginBottom: \"8px\",\n\tmarginTop: 0,\n}));\n\nexport const Description = styled.p(({ theme }) => ({\n\tfontFamily: theme.typography?.fonts?.base || \"sans-serif\",\n\tfontSize: \"16px\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\topacity: 0.8,\n\tmarginBottom: \"24px\",\n\tmarginTop: 0,\n}));\n\n// Controls\nexport const ControlsBar = styled.div({\n\tdisplay: \"flex\",\n\tgap: \"16px\",\n\tmarginBottom: \"32px\",\n\tflexWrap: \"wrap\",\n\talignItems: \"center\",\n});\n\nexport const SearchInput = styled.input(({ theme }) => ({\n\tflex: \"1 1 300px\",\n\tmaxWidth: \"400px\",\n\tpadding: \"10px 14px\",\n\tfontSize: \"14px\",\n\n\tborder: `1px solid ${theme.appBorderColor || \"#eaeaea\"}`,\n\tborderRadius: \"6px\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\tbackground: theme.background?.content || \"#ffffff\",\n\toutline: \"none\",\n\ttransition: \"border-color 0.2s, box-shadow 0.2s\",\n\t\"&:focus\": {\n\t\tborderColor: theme.color?.secondary || \"#0271b6\",\n\t\tboxShadow: `0 0 0 2px ${theme.color?.secondary || \"#0271b6\"}22`,\n\t},\n\t\"&::placeholder\": {\n\t\tcolor: theme.color?.defaultText || \"#333333\",\n\t\topacity: 0.5,\n\t},\n}));\n\nexport const VariantToggle = styled.button(({ theme }) => ({\n\tpadding: \"10px 16px\",\n\tfontSize: \"14px\",\n\tfontWeight: 500,\n\n\tborder: `1px solid ${theme.appBorderColor || \"#eaeaea\"}`,\n\tborderRadius: \"6px\",\n\tcursor: \"pointer\",\n\tbackground: theme.background?.content || \"#ffffff\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\ttransition: \"all 0.2s\",\n\t\"&:hover\": {\n\t\tborderColor: theme.color?.secondary || \"#0271b6\",\n\t\tbackground: theme.background?.hoverable || \"#f5f5f5\",\n\t},\n}));\n\nexport const BackgroundControls = styled.div({\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tgap: \"12px\",\n\tmarginLeft: \"auto\",\n});\n\nexport const BackgroundToggle = styled.div(({ theme }) => ({\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tgap: \"6px\",\n\tpadding: \"4px\",\n\tborder: `1px solid ${theme.appBorderColor || \"#eaeaea\"}`,\n\tborderRadius: \"6px\",\n\tbackground: theme.background?.content || \"#ffffff\",\n}));\n\nexport const ToggleOption = styled.button(({ theme }) => ({\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\twidth: \"28px\",\n\theight: \"28px\",\n\tborder: \"none\",\n\tborderRadius: \"4px\",\n\tcursor: \"pointer\",\n\tbackground: \"transparent\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\topacity: 0.5,\n\ttransition: \"all 0.15s\",\n\t'&[data-active=\"true\"]': {\n\t\tbackground: theme.color?.secondary || \"#0271b6\",\n\t\tcolor: \"#fff\",\n\t\topacity: 1,\n\t},\n\t'&:hover:not([data-active=\"true\"])': {\n\t\topacity: 0.8,\n\t\tbackground: theme.background?.hoverable || \"#f5f5f5\",\n\t},\n\t\"& svg\": {\n\t\twidth: \"16px\",\n\t\theight: \"16px\",\n\t},\n}));\n\nexport const ColorPickerGroup = styled.div(({ theme }) => ({\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tgap: \"4px\",\n\tpadding: \"4px 6px\",\n\tborder: `1px solid ${theme.appBorderColor || \"#eaeaea\"}`,\n\tborderRadius: \"6px\",\n\tbackground: theme.background?.content || \"#ffffff\",\n\ttransition: \"border-color 0.2s\",\n\t\"&:focus-within\": {\n\t\tborderColor: theme.color?.secondary || \"#0271b6\",\n\t},\n}));\n\nexport const ColorLabel = styled.span(({ theme }) => ({\n\tfontFamily: theme.typography?.fonts?.base || \"sans-serif\",\n\tfontSize: \"11px\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\topacity: 0.6,\n\ttextTransform: \"uppercase\",\n\tletterSpacing: \"0.5px\",\n}));\n\nexport const ColorInput = styled.input({\n\twidth: \"24px\",\n\theight: \"24px\",\n\tpadding: 0,\n\tborder: \"none\",\n\tborderRadius: \"4px\",\n\tcursor: \"pointer\",\n\tbackground: \"transparent\",\n\t\"&::-webkit-color-swatch-wrapper\": {\n\t\tpadding: 0,\n\t},\n\t\"&::-webkit-color-swatch\": {\n\t\tborder: \"none\",\n\t\tborderRadius: \"4px\",\n\t},\n\t\"&::-moz-color-swatch\": {\n\t\tborder: \"none\",\n\t\tborderRadius: \"4px\",\n\t},\n});\n\nexport const ResetButton = styled.button(({ theme }) => ({\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\twidth: \"20px\",\n\theight: \"20px\",\n\tpadding: 0,\n\tborder: \"none\",\n\tborderRadius: \"4px\",\n\tcursor: \"pointer\",\n\tbackground: \"transparent\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\topacity: 0.4,\n\ttransition: \"all 0.15s\",\n\t\"&:hover\": {\n\t\topacity: 1,\n\t\tbackground: theme.background?.hoverable || \"#f5f5f5\",\n\t},\n\t\"& svg\": {\n\t\twidth: \"12px\",\n\t\theight: \"12px\",\n\t},\n}));\n\nexport const AssetCard = styled.div(({ theme }) => ({\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n\talignItems: \"center\",\n\tpadding: \"16px\",\n\tborderRadius: \"8px\",\n\tborder: `1px solid ${theme.appBorderColor || \"#eaeaea\"}`,\n\tbackground: theme.background?.content || \"#ffffff\",\n\ttransition: \"all 0.2s\",\n\tcursor: \"pointer\",\n\t\"&:hover\": {\n\t\tborderColor: theme.color?.secondary || \"#0271b6\",\n\t\tboxShadow: \"0 4px 12px rgba(0,0,0,0.1)\",\n\t},\n}));\n\nexport const AssetPreview = styled.div({\n\twidth: \"var(--preview-size, 200px)\",\n\theight: \"var(--preview-size, 200px)\",\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tmarginBottom: \"12px\",\n\tborderRadius: \"4px\",\n});\n\nexport const AssetImage = styled.img({\n\tmaxWidth: \"100%\",\n\tmaxHeight: \"100%\",\n\tobjectFit: \"contain\",\n});\n\nexport const AssetName = styled.div(({ theme }) => ({\n\tfontFamily: theme.typography?.fonts?.base || \"sans-serif\",\n\tfontSize: \"13px\",\n\tfontWeight: 500,\n\tcolor: theme.color?.defaultText || \"#333333\",\n\ttextAlign: \"center\",\n\twordBreak: \"break-word\",\n\tlineHeight: 1.3,\n}));\n\nexport const AssetFilename = styled.div(({ theme }) => ({\n\tfontFamily: theme.typography?.fonts?.mono || \"monospace\",\n\tfontSize: \"11px\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\topacity: 0.6,\n\ttextAlign: \"center\",\n\tmarginTop: \"4px\",\n}));\n\nexport const CopyButtons = styled.div({\n\tdisplay: \"flex\",\n\tgap: \"8px\",\n\tmarginTop: \"8px\",\n\topacity: 0,\n\ttransition: \"opacity 0.2s\",\n\t\".asset-card:hover &\": {\n\t\topacity: 1,\n\t},\n});\n\nexport const CopyButton = styled.button(({ theme }) => ({\n\tpadding: \"4px 8px\",\n\tfontSize: \"11px\",\n\tborder: `1px solid ${theme.appBorderColor || \"#eaeaea\"}`,\n\tborderRadius: \"4px\",\n\tcursor: \"pointer\",\n\tbackground: theme.background?.content || \"#ffffff\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\ttransition: \"all 0.15s\",\n\t\"&:hover\": {\n\t\tbackground: theme.color?.secondary || \"#0271b6\",\n\t\tcolor: \"#fff\",\n\t\tborderColor: theme.color?.secondary || \"#0271b6\",\n\t},\n}));\n\nexport const NoResults = styled.div(({ theme }) => ({\n\tfontFamily: theme.typography?.fonts?.base || \"sans-serif\",\n\tfontSize: \"16px\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\topacity: 0.6,\n\ttextAlign: \"center\",\n\tpadding: \"60px 20px\",\n}));\n\n// Folder sections (for groupByFolder mode)\nexport const FolderSection = styled.div({\n\tmarginBottom: \"48px\",\n});\n\nexport const FolderTitle = styled.h2(({ theme }) => ({\n\tfontFamily: theme.typography?.fonts?.base || \"sans-serif\",\n\tfontSize: \"20px\",\n\tfontWeight: 600,\n\tcolor: theme.color?.defaultText || \"#333333\",\n\tmarginBottom: \"16px\",\n\tmarginTop: 0,\n\tpaddingBottom: \"8px\",\n\tborderBottom: `1px solid ${theme.appBorderColor || \"#eaeaea\"}`,\n}));\n\n// Toast notifications\nexport const Toast = styled.div(({ theme }) => ({\n\tposition: \"fixed\",\n\tbottom: \"24px\",\n\tright: \"24px\",\n\tpadding: \"12px 20px\",\n\tbackground: theme.color?.positive || \"#44bb44\",\n\tcolor: \"#fff\",\n\tborderRadius: \"8px\",\n\tfontSize: \"14px\",\n\tfontWeight: 500,\n\tboxShadow: \"0 4px 12px rgba(0,0,0,0.15)\",\n\tzIndex: 1000,\n\tanimation: \"fadeInUp 0.3s ease\",\n}));\n","/**\n * AssetSection - Complete asset grid with search, variants, and background controls.\n */\n\nimport { useMemo, useState } from \"react\";\nimport type { Asset } from \"@/types\";\nimport { CheckerboardIcon, InverseIcon, ResetIcon } from \"./Icons\";\nimport {\n\tAssetCard,\n\tAssetFilename,\n\tAssetImage,\n\tAssetName,\n\tAssetPreview,\n\tBackgroundControls,\n\tBackgroundToggle,\n\tColorInput,\n\tColorLabel,\n\tColorPickerGroup,\n\tContainer,\n\tControlsBar,\n\tCopyButton,\n\tCopyButtons,\n\tDescription,\n\tFolderSection,\n\tFolderTitle,\n\tNoResults,\n\tResetButton,\n\tSearchInput,\n\tTitle,\n\tToast,\n\tToggleOption,\n\tVariantToggle,\n\tWrapper,\n} from \"./styled\";\n\nexport interface AssetSectionProps {\n\t/** Title for the page */\n\ttitle: string;\n\t/** Optional description */\n\tdescription?: string;\n\t/** Asset data array */\n\tassets: Asset[];\n\t/** Whether to group assets by folder */\n\tgroupByFolder: boolean;\n\t/** Variants configuration */\n\tvariants: {\n\t\tenabled: boolean;\n\t\tdefaultVariant: \"light\" | \"dark\";\n\t};\n\t/** Copy configuration */\n\tcopy: {\n\t\timport?: string;\n\t\tcomponent?: string;\n\t};\n\t/** Display configuration */\n\tdisplay: {\n\t\tpreviewSize: number;\n\t\tshowFilename: boolean;\n\t};\n\t/** Storage key prefix for localStorage */\n\tstorageKeyPrefix: string;\n}\n\n/**\n * Complete asset grid with search, variants, background controls, and copy functionality.\n */\nexport function AssetSection({\n\ttitle,\n\tdescription,\n\tassets,\n\tgroupByFolder,\n\tvariants,\n\tcopy,\n\tdisplay,\n\tstorageKeyPrefix,\n}: AssetSectionProps) {\n\t// Constants\n\tconst DEFAULT_LIGHT_BG = \"#eeeeee\";\n\tconst DEFAULT_DARK_BG = \"#181818\";\n\tconst STORAGE_KEY_LIGHT = `${storageKeyPrefix}-light`;\n\tconst STORAGE_KEY_DARK = `${storageKeyPrefix}-dark`;\n\tconst STORAGE_KEY_MODE = `${storageKeyPrefix}-mode`;\n\n\t// Load from localStorage\n\tconst getStoredValue = (key: string, defaultValue: string) => {\n\t\ttry {\n\t\t\tconst stored = localStorage.getItem(key);\n\t\t\treturn stored !== null ? stored : defaultValue;\n\t\t} catch {\n\t\t\treturn defaultValue;\n\t\t}\n\t};\n\n\tconst setStoredValue = (key: string, value: string) => {\n\t\ttry {\n\t\t\tlocalStorage.setItem(key, value);\n\t\t} catch {}\n\t};\n\n\tconst removeStoredValue = (key: string) => {\n\t\ttry {\n\t\t\tlocalStorage.removeItem(key);\n\t\t} catch {}\n\t};\n\n\t// State\n\tconst [searchTerm, setSearchTerm] = useState(\"\");\n\tconst [currentVariant, setCurrentVariant] = useState(variants.defaultVariant);\n\tconst [toastMessage, setToastMessage] = useState<string | null>(null);\n\tconst [bgMode, setBgMode] = useState(() =>\n\t\tgetStoredValue(STORAGE_KEY_MODE, \"checkered\"),\n\t);\n\tconst [lightBgColor, setLightBgColor] = useState(() =>\n\t\tgetStoredValue(STORAGE_KEY_LIGHT, DEFAULT_LIGHT_BG),\n\t);\n\tconst [darkBgColor, setDarkBgColor] = useState(() =>\n\t\tgetStoredValue(STORAGE_KEY_DARK, DEFAULT_DARK_BG),\n\t);\n\n\t// Handlers\n\tconst handleBgModeChange = (mode: string) => {\n\t\tsetBgMode(mode);\n\t\tsetStoredValue(STORAGE_KEY_MODE, mode);\n\t};\n\n\tconst handleLightBgChange = (color: string) => {\n\t\tsetLightBgColor(color);\n\t\tsetStoredValue(STORAGE_KEY_LIGHT, color);\n\t};\n\n\tconst handleDarkBgChange = (color: string) => {\n\t\tsetDarkBgColor(color);\n\t\tsetStoredValue(STORAGE_KEY_DARK, color);\n\t};\n\n\tconst resetLightBg = () => {\n\t\tsetLightBgColor(DEFAULT_LIGHT_BG);\n\t\tremoveStoredValue(STORAGE_KEY_LIGHT);\n\t};\n\n\tconst resetDarkBg = () => {\n\t\tsetDarkBgColor(DEFAULT_DARK_BG);\n\t\tremoveStoredValue(STORAGE_KEY_DARK);\n\t};\n\n\tconst isLightVariant = currentVariant === \"light\";\n\n\tconst getPreviewBackground = () => {\n\t\tif (bgMode === \"checkered\") {\n\t\t\treturn \"repeating-conic-gradient(#e0e0e0 0% 25%, #ffffff 0% 50%) 50% / 16px 16px\";\n\t\t}\n\t\t// Inverse mode: use opposite background of the variant\n\t\treturn isLightVariant ? darkBgColor : lightBgColor;\n\t};\n\n\tconst showToast = (message: string) => {\n\t\tsetToastMessage(message);\n\t\tsetTimeout(() => setToastMessage(null), 2000);\n\t};\n\n\tconst copyToClipboard = (text: string, type: string) => {\n\t\tnavigator.clipboard.writeText(text).then(() => {\n\t\t\tshowToast(`${type} copied to clipboard!`);\n\t\t});\n\t};\n\n\tconst getImportPath = (asset: Asset) => {\n\t\tif (!copy.import) return \"\";\n\t\treturn copy.import\n\t\t\t.replace(/\\{\\{name\\}\\}/g, asset.id)\n\t\t\t.replace(/\\{\\{ext\\}\\}/g, asset.ext)\n\t\t\t.replace(/\\{\\{path\\}\\}/g, asset.relativePath)\n\t\t\t.replace(/\\{\\{basename\\}\\}/g, asset.filename + \".\" + asset.ext);\n\t};\n\n\tconst getComponentUsage = (asset: Asset) => {\n\t\tif (!copy.component) return \"\";\n\t\treturn copy.component\n\t\t\t.replace(/\\{\\{name\\}\\}/g, asset.id)\n\t\t\t.replace(/\\{\\{ext\\}\\}/g, asset.ext)\n\t\t\t.replace(/\\{\\{path\\}\\}/g, asset.relativePath)\n\t\t\t.replace(/\\{\\{basename\\}\\}/g, asset.filename + \".\" + asset.ext);\n\t};\n\n\t// Filter assets\n\tconst filteredAssets = useMemo(() => {\n\t\tif (!searchTerm.trim()) return assets;\n\t\tconst term = searchTerm.toLowerCase();\n\t\treturn assets.filter(\n\t\t\t(asset) =>\n\t\t\t\tasset.name.toLowerCase().includes(term) ||\n\t\t\t\tasset.filename.toLowerCase().includes(term),\n\t\t);\n\t}, [assets, searchTerm]);\n\n\t// Group by folder if enabled\n\tconst groupedAssets = useMemo(() => {\n\t\tif (!groupByFolder) return new Map();\n\t\tconst groups = new Map<string, Asset[]>();\n\t\tfor (const asset of filteredAssets) {\n\t\t\tconst folder = asset.folder || \"root\";\n\t\t\tif (!groups.has(folder)) {\n\t\t\t\tgroups.set(folder, []);\n\t\t\t}\n\t\t\tgroups.get(folder)!.push(asset);\n\t\t}\n\t\treturn groups;\n\t}, [filteredAssets, groupByFolder]);\n\n\tconst renderAsset = (asset: Asset) => {\n\t\tconst imageSrc =\n\t\t\tcurrentVariant === \"dark\" && asset.variants.dark\n\t\t\t\t? asset.variants.dark\n\t\t\t\t: asset.variants.light;\n\n\t\tconst hasCopyAction = copy.import || copy.component;\n\t\tconst copyType = copy.import ? \"Import\" : \"Component\";\n\t\tconst copyText = copy.import\n\t\t\t? getImportPath(asset)\n\t\t\t: getComponentUsage(asset);\n\n\t\treturn (\n\t\t\t<AssetCard\n\t\t\t\tkey={asset.id}\n\t\t\t\tclassName=\"asset-card\"\n\t\t\t\tonClick={() => hasCopyAction && copyToClipboard(copyText, copyType)}\n\t\t\t>\n\t\t\t\t<AssetPreview\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: `${display.previewSize}px`,\n\t\t\t\t\t\theight: `${display.previewSize}px`,\n\t\t\t\t\t\tbackground: getPreviewBackground(),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<AssetImage src={imageSrc} alt={asset.name} />\n\t\t\t\t</AssetPreview>\n\t\t\t\t<AssetName>{asset.name}</AssetName>\n\t\t\t\t{display.showFilename && (\n\t\t\t\t\t<AssetFilename>\n\t\t\t\t\t\t{asset.filename}.{asset.ext}\n\t\t\t\t\t</AssetFilename>\n\t\t\t\t)}\n\t\t\t\t{hasCopyAction && (\n\t\t\t\t\t<CopyButtons>\n\t\t\t\t\t\t<CopyButton\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tcopyToClipboard(copyText, copyType);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{copyType}\n\t\t\t\t\t\t</CopyButton>\n\t\t\t\t\t</CopyButtons>\n\t\t\t\t)}\n\t\t\t</AssetCard>\n\t\t);\n\t};\n\n\tconst renderGroupedAssets = () => {\n\t\tconst entries = Array.from(groupedAssets.entries());\n\t\treturn entries.map(([folder, assets]) => (\n\t\t\t<FolderSection key={folder}>\n\t\t\t\t<FolderTitle>{folder === \"root\" ? \"Root\" : folder}</FolderTitle>\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: \"grid\",\n\t\t\t\t\t\tgridTemplateColumns: `repeat(auto-fill, minmax(${display.previewSize + 40}px, 1fr))`,\n\t\t\t\t\t\tgap: \"24px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{assets.map(renderAsset)}\n\t\t\t\t</div>\n\t\t\t</FolderSection>\n\t\t));\n\t};\n\n\treturn (\n\t\t<Wrapper>\n\t\t\t<Container>\n\t\t\t\t<Title>{title}</Title>\n\t\t\t\t{description && <Description>{description}</Description>}\n\n\t\t\t\t<ControlsBar>\n\t\t\t\t\t<SearchInput\n\t\t\t\t\t\tvalue={searchTerm}\n\t\t\t\t\t\tonChange={(e) => setSearchTerm(e.target.value)}\n\t\t\t\t\t\tplaceholder={`Search ${title.toLowerCase()}...`}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{variants.enabled && (\n\t\t\t\t\t\t<VariantToggle\n\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\tsetCurrentVariant((v) => (v === \"light\" ? \"dark\" : \"light\"))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{currentVariant === \"light\" ? \"Light\" : \"Dark\"}\n\t\t\t\t\t\t</VariantToggle>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<BackgroundControls>\n\t\t\t\t\t\t<BackgroundToggle>\n\t\t\t\t\t\t\t<ToggleOption\n\t\t\t\t\t\t\t\tdata-active={bgMode === \"inverse\"}\n\t\t\t\t\t\t\t\tonClick={() => handleBgModeChange(\"inverse\")}\n\t\t\t\t\t\t\t\ttitle=\"Inverse background\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<InverseIcon />\n\t\t\t\t\t\t\t</ToggleOption>\n\t\t\t\t\t\t\t<ToggleOption\n\t\t\t\t\t\t\t\tdata-active={bgMode === \"checkered\"}\n\t\t\t\t\t\t\t\tonClick={() => handleBgModeChange(\"checkered\")}\n\t\t\t\t\t\t\t\ttitle=\"Checkered background\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<CheckerboardIcon />\n\t\t\t\t\t\t\t</ToggleOption>\n\t\t\t\t\t\t</BackgroundToggle>\n\n\t\t\t\t\t\t{bgMode === \"inverse\" && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<ColorPickerGroup>\n\t\t\t\t\t\t\t\t\t<ColorLabel>Light</ColorLabel>\n\t\t\t\t\t\t\t\t\t<ColorInput\n\t\t\t\t\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\t\t\t\t\tvalue={lightBgColor}\n\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleLightBgChange(e.target.value)}\n\t\t\t\t\t\t\t\t\t\ttitle=\"Background for dark illustrations\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{lightBgColor !== DEFAULT_LIGHT_BG && (\n\t\t\t\t\t\t\t\t\t\t<ResetButton\n\t\t\t\t\t\t\t\t\t\t\tonClick={resetLightBg}\n\t\t\t\t\t\t\t\t\t\t\ttitle=\"Reset to default\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<ResetIcon />\n\t\t\t\t\t\t\t\t\t\t</ResetButton>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</ColorPickerGroup>\n\t\t\t\t\t\t\t\t<ColorPickerGroup>\n\t\t\t\t\t\t\t\t\t<ColorLabel>Dark</ColorLabel>\n\t\t\t\t\t\t\t\t\t<ColorInput\n\t\t\t\t\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\t\t\t\t\tvalue={darkBgColor}\n\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleDarkBgChange(e.target.value)}\n\t\t\t\t\t\t\t\t\t\ttitle=\"Background for light illustrations\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{darkBgColor !== DEFAULT_DARK_BG && (\n\t\t\t\t\t\t\t\t\t\t<ResetButton onClick={resetDarkBg} title=\"Reset to default\">\n\t\t\t\t\t\t\t\t\t\t\t<ResetIcon />\n\t\t\t\t\t\t\t\t\t\t</ResetButton>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</ColorPickerGroup>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</BackgroundControls>\n\t\t\t\t</ControlsBar>\n\n\t\t\t\t{filteredAssets.length === 0 ? (\n\t\t\t\t\t<NoResults>\n\t\t\t\t\t\tNo {title.toLowerCase()} found matching \"{searchTerm}\"\n\t\t\t\t\t</NoResults>\n\t\t\t\t) : groupByFolder ? (\n\t\t\t\t\trenderGroupedAssets()\n\t\t\t\t) : (\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"grid\",\n\t\t\t\t\t\t\tgridTemplateColumns: `repeat(auto-fill, minmax(${display.previewSize + 40}px, 1fr))`,\n\t\t\t\t\t\t\tgap: \"24px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{filteredAssets.map(renderAsset)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{toastMessage && <Toast>{toastMessage}</Toast>}\n\t\t\t</Container>\n\t\t</Wrapper>\n\t);\n}\n\n/**\n * Props for export-only mode (no wrapper, just the grid component).\n */\nexport interface AssetGridProps\n\textends Omit<AssetSectionProps, \"title\" | \"description\"> {\n\t/** Grid column configuration */\n\tcolumns?: number;\n}\n\n/**\n * Asset grid component for export-only mode (no page wrapper).\n */\nexport function AssetGrid(props: AssetGridProps) {\n\t// Reuse AssetSection but without the wrapper\n\tconst { columns = 4, ...rest } = props;\n\n\treturn (\n\t\t<AssetSection\n\t\t\ttitle=\"\"\n\t\t\tdescription=\"\"\n\t\t\tdisplay={{ ...rest.display, previewSize: rest.display.previewSize }}\n\t\t\t{...rest}\n\t\t/>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../../../src/addon/components/assets/Icons.tsx","../../../src/addon/components/assets/styled.ts","../../../src/addon/components/assets/AssetSection.tsx"],"names":["jsxs","jsx","styled","useState","useMemo","assets","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * SVG icon components for asset documentation.\n */\n\nexport function CheckerboardIcon() {\n\treturn (\n\t\t<svg\n\t\t\tviewBox=\"0 0 16 16\"\n\t\t\tfill=\"currentColor\"\n\t\t\trole=\"img\"\n\t\t\taria-label=\"Checkerboard background\"\n\t\t>\n\t\t\t<title>Checkerboard background</title>\n\t\t\t<path d=\"M0 0h4v4H0V0zm4 4h4v4H4V4zm4-4h4v4H8V0zm4 4h4v4h-4V4zM0 8h4v4H0V8zm8 0h4v4H8V8zm-4 4h4v4H4v-4zm8 0h4v4h-4v-4z\" />\n\t\t</svg>\n\t);\n}\n\nexport function InverseIcon() {\n\treturn (\n\t\t<svg\n\t\t\tviewBox=\"0 0 16 16\"\n\t\t\tfill=\"currentColor\"\n\t\t\trole=\"img\"\n\t\t\taria-label=\"Inverse background\"\n\t\t>\n\t\t\t<title>Inverse background</title>\n\t\t\t<circle\n\t\t\t\tcx=\"8\"\n\t\t\t\tcy=\"8\"\n\t\t\t\tr=\"7\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t/>\n\t\t\t<path d=\"M8 1a7 7 0 0 1 0 14V1z\" />\n\t\t</svg>\n\t);\n}\n\nexport function ResetIcon() {\n\treturn (\n\t\t<svg viewBox=\"0 0 16 16\" fill=\"currentColor\" role=\"img\" aria-label=\"Reset\">\n\t\t\t<title>Reset</title>\n\t\t\t<path d=\"M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z\" />\n\t\t\t<path d=\"M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z\" />\n\t\t</svg>\n\t);\n}\n","/**\n * Styled components for asset documentation pages.\n * Extracted from templates/default/assets/_common.edge\n */\n\nimport { styled } from \"storybook/theming\";\n\n// Base wrapper and container\nexport const Wrapper = styled.div(({ theme }) => ({\n\tbackground: theme.background?.content || \"#ffffff\",\n\tminHeight: \"100vh\",\n\tpadding: \"40px 20px\",\n\tboxSizing: \"border-box\",\n}));\n\nexport const Container = styled.div({\n\tmaxWidth: \"1200px\",\n\tmargin: \"0 auto\",\n});\n\n// Typography\nexport const Title = styled.h1(({ theme }) => ({\n\tfontFamily: theme.typography?.fonts?.base || \"sans-serif\",\n\tfontSize: \"32px\",\n\tfontWeight: 700,\n\tcolor: theme.color?.defaultText || \"#333333\",\n\tmarginBottom: \"8px\",\n\tmarginTop: 0,\n}));\n\nexport const Description = styled.p(({ theme }) => ({\n\tfontFamily: theme.typography?.fonts?.base || \"sans-serif\",\n\tfontSize: \"16px\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\topacity: 0.8,\n\tmarginBottom: \"24px\",\n\tmarginTop: 0,\n}));\n\n// Controls\nexport const ControlsBar = styled.div({\n\tdisplay: \"flex\",\n\tgap: \"16px\",\n\tmarginBottom: \"32px\",\n\tflexWrap: \"wrap\",\n\talignItems: \"center\",\n});\n\nexport const SearchInput = styled.input(({ theme }) => ({\n\tflex: \"1 1 300px\",\n\tmaxWidth: \"400px\",\n\tpadding: \"10px 14px\",\n\tfontSize: \"14px\",\n\n\tborder: `1px solid ${theme.appBorderColor || \"#eaeaea\"}`,\n\tborderRadius: \"6px\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\tbackground: theme.background?.content || \"#ffffff\",\n\toutline: \"none\",\n\ttransition: \"border-color 0.2s, box-shadow 0.2s\",\n\t\"&:focus\": {\n\t\tborderColor: theme.color?.secondary || \"#0271b6\",\n\t\tboxShadow: `0 0 0 2px ${theme.color?.secondary || \"#0271b6\"}22`,\n\t},\n\t\"&::placeholder\": {\n\t\tcolor: theme.color?.defaultText || \"#333333\",\n\t\topacity: 0.5,\n\t},\n}));\n\nexport const VariantToggle = styled.button(({ theme }) => ({\n\tpadding: \"10px 16px\",\n\tfontSize: \"14px\",\n\tfontWeight: 500,\n\n\tborder: `1px solid ${theme.appBorderColor || \"#eaeaea\"}`,\n\tborderRadius: \"6px\",\n\tcursor: \"pointer\",\n\tbackground: theme.background?.content || \"#ffffff\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\ttransition: \"all 0.2s\",\n\t\"&:hover\": {\n\t\tborderColor: theme.color?.secondary || \"#0271b6\",\n\t\tbackground: theme.background?.hoverable || \"#f5f5f5\",\n\t},\n}));\n\nexport const BackgroundControls = styled.div({\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tgap: \"12px\",\n\tmarginLeft: \"auto\",\n});\n\nexport const BackgroundToggle = styled.div(({ theme }) => ({\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tgap: \"6px\",\n\tpadding: \"4px\",\n\tborder: `1px solid ${theme.appBorderColor || \"#eaeaea\"}`,\n\tborderRadius: \"6px\",\n\tbackground: theme.background?.content || \"#ffffff\",\n}));\n\nexport const ToggleOption = styled.button(({ theme }) => ({\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\twidth: \"28px\",\n\theight: \"28px\",\n\tborder: \"none\",\n\tborderRadius: \"4px\",\n\tcursor: \"pointer\",\n\tbackground: \"transparent\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\topacity: 0.5,\n\ttransition: \"all 0.15s\",\n\t'&[data-active=\"true\"]': {\n\t\tbackground: theme.color?.secondary || \"#0271b6\",\n\t\tcolor: \"#fff\",\n\t\topacity: 1,\n\t},\n\t'&:hover:not([data-active=\"true\"])': {\n\t\topacity: 0.8,\n\t\tbackground: theme.background?.hoverable || \"#f5f5f5\",\n\t},\n\t\"& svg\": {\n\t\twidth: \"16px\",\n\t\theight: \"16px\",\n\t},\n}));\n\nexport const ColorPickerGroup = styled.div(({ theme }) => ({\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tgap: \"4px\",\n\tpadding: \"4px 6px\",\n\tborder: `1px solid ${theme.appBorderColor || \"#eaeaea\"}`,\n\tborderRadius: \"6px\",\n\tbackground: theme.background?.content || \"#ffffff\",\n\ttransition: \"border-color 0.2s\",\n\t\"&:focus-within\": {\n\t\tborderColor: theme.color?.secondary || \"#0271b6\",\n\t},\n}));\n\nexport const ColorLabel = styled.span(({ theme }) => ({\n\tfontFamily: theme.typography?.fonts?.base || \"sans-serif\",\n\tfontSize: \"11px\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\topacity: 0.6,\n\ttextTransform: \"uppercase\",\n\tletterSpacing: \"0.5px\",\n}));\n\nexport const ColorInput = styled.input({\n\twidth: \"24px\",\n\theight: \"24px\",\n\tpadding: 0,\n\tborder: \"none\",\n\tborderRadius: \"4px\",\n\tcursor: \"pointer\",\n\tbackground: \"transparent\",\n\t\"&::-webkit-color-swatch-wrapper\": {\n\t\tpadding: 0,\n\t},\n\t\"&::-webkit-color-swatch\": {\n\t\tborder: \"none\",\n\t\tborderRadius: \"4px\",\n\t},\n\t\"&::-moz-color-swatch\": {\n\t\tborder: \"none\",\n\t\tborderRadius: \"4px\",\n\t},\n});\n\nexport const ResetButton = styled.button(({ theme }) => ({\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\twidth: \"20px\",\n\theight: \"20px\",\n\tpadding: 0,\n\tborder: \"none\",\n\tborderRadius: \"4px\",\n\tcursor: \"pointer\",\n\tbackground: \"transparent\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\topacity: 0.4,\n\ttransition: \"all 0.15s\",\n\t\"&:hover\": {\n\t\topacity: 1,\n\t\tbackground: theme.background?.hoverable || \"#f5f5f5\",\n\t},\n\t\"& svg\": {\n\t\twidth: \"12px\",\n\t\theight: \"12px\",\n\t},\n}));\n\nexport const AssetCard = styled.div(({ theme }) => ({\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n\talignItems: \"center\",\n\tpadding: \"16px\",\n\tborderRadius: \"8px\",\n\tborder: `1px solid ${theme.appBorderColor || \"#eaeaea\"}`,\n\tbackground: theme.background?.content || \"#ffffff\",\n\ttransition: \"all 0.2s\",\n\tcursor: \"pointer\",\n\t\"&:hover\": {\n\t\tborderColor: theme.color?.secondary || \"#0271b6\",\n\t\tboxShadow: \"0 4px 12px rgba(0,0,0,0.1)\",\n\t},\n}));\n\nexport const AssetPreview = styled.div({\n\twidth: \"var(--preview-size, 200px)\",\n\theight: \"var(--preview-size, 200px)\",\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tmarginBottom: \"12px\",\n\tborderRadius: \"4px\",\n});\n\nexport const AssetImage = styled.img({\n\tmaxWidth: \"100%\",\n\tmaxHeight: \"100%\",\n\tobjectFit: \"contain\",\n});\n\nexport const AssetName = styled.div(({ theme }) => ({\n\tfontFamily: theme.typography?.fonts?.base || \"sans-serif\",\n\tfontSize: \"13px\",\n\tfontWeight: 500,\n\tcolor: theme.color?.defaultText || \"#333333\",\n\ttextAlign: \"center\",\n\twordBreak: \"break-word\",\n\tlineHeight: 1.3,\n}));\n\nexport const AssetFilename = styled.div(({ theme }) => ({\n\tfontFamily: theme.typography?.fonts?.mono || \"monospace\",\n\tfontSize: \"11px\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\topacity: 0.6,\n\ttextAlign: \"center\",\n\tmarginTop: \"4px\",\n}));\n\nexport const CopyButtons = styled.div({\n\tdisplay: \"flex\",\n\tgap: \"8px\",\n\tmarginTop: \"8px\",\n\topacity: 0,\n\ttransition: \"opacity 0.2s\",\n\t\".asset-card:hover &\": {\n\t\topacity: 1,\n\t},\n});\n\nexport const CopyButton = styled.button(({ theme }) => ({\n\tpadding: \"4px 8px\",\n\tfontSize: \"11px\",\n\tborder: `1px solid ${theme.appBorderColor || \"#eaeaea\"}`,\n\tborderRadius: \"4px\",\n\tcursor: \"pointer\",\n\tbackground: theme.background?.content || \"#ffffff\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\ttransition: \"all 0.15s\",\n\t\"&:hover\": {\n\t\tbackground: theme.color?.secondary || \"#0271b6\",\n\t\tcolor: \"#fff\",\n\t\tborderColor: theme.color?.secondary || \"#0271b6\",\n\t},\n}));\n\nexport const NoResults = styled.div(({ theme }) => ({\n\tfontFamily: theme.typography?.fonts?.base || \"sans-serif\",\n\tfontSize: \"16px\",\n\tcolor: theme.color?.defaultText || \"#333333\",\n\topacity: 0.6,\n\ttextAlign: \"center\",\n\tpadding: \"60px 20px\",\n}));\n\n// Folder sections (for groupByFolder mode)\nexport const FolderSection = styled.div({\n\tmarginBottom: \"48px\",\n});\n\nexport const FolderTitle = styled.h2(({ theme }) => ({\n\tfontFamily: theme.typography?.fonts?.base || \"sans-serif\",\n\tfontSize: \"20px\",\n\tfontWeight: 600,\n\tcolor: theme.color?.defaultText || \"#333333\",\n\tmarginBottom: \"16px\",\n\tmarginTop: 0,\n\tpaddingBottom: \"8px\",\n\tborderBottom: `1px solid ${theme.appBorderColor || \"#eaeaea\"}`,\n}));\n\n// Toast notifications\nexport const Toast = styled.div(({ theme }) => ({\n\tposition: \"fixed\",\n\tbottom: \"24px\",\n\tright: \"24px\",\n\tpadding: \"12px 20px\",\n\tbackground: theme.color?.positive || \"#44bb44\",\n\tcolor: \"#fff\",\n\tborderRadius: \"8px\",\n\tfontSize: \"14px\",\n\tfontWeight: 500,\n\tboxShadow: \"0 4px 12px rgba(0,0,0,0.15)\",\n\tzIndex: 1000,\n\tanimation: \"fadeInUp 0.3s ease\",\n}));\n","/**\n * AssetSection - Complete asset grid with search, variants, and background controls.\n */\n\nimport { useMemo, useState } from \"react\";\nimport type { Asset } from \"@/types\";\nimport { CheckerboardIcon, InverseIcon, ResetIcon } from \"./Icons\";\nimport {\n\tAssetCard,\n\tAssetFilename,\n\tAssetImage,\n\tAssetName,\n\tAssetPreview,\n\tBackgroundControls,\n\tBackgroundToggle,\n\tColorInput,\n\tColorLabel,\n\tColorPickerGroup,\n\tContainer,\n\tControlsBar,\n\tCopyButton,\n\tCopyButtons,\n\tDescription,\n\tFolderSection,\n\tFolderTitle,\n\tNoResults,\n\tResetButton,\n\tSearchInput,\n\tTitle,\n\tToast,\n\tToggleOption,\n\tVariantToggle,\n\tWrapper,\n} from \"./styled\";\n\nexport interface AssetSectionProps {\n\t/** Title for the page */\n\ttitle: string;\n\t/** Optional description */\n\tdescription?: string;\n\t/** Asset data array */\n\tassets: Asset[];\n\t/** Whether to group assets by folder */\n\tgroupByFolder: boolean;\n\t/** Variants configuration */\n\tvariants: {\n\t\tenabled: boolean;\n\t\tdefaultVariant: \"light\" | \"dark\";\n\t};\n\t/** Copy configuration */\n\tcopy: {\n\t\timport?: string;\n\t\tcomponent?: string;\n\t};\n\t/** Display configuration */\n\tdisplay: {\n\t\tpreviewSize: number;\n\t\tshowFilename: boolean;\n\t};\n\t/** Storage key prefix for localStorage */\n\tstorageKeyPrefix: string;\n}\n\n/**\n * Complete asset grid with search, variants, background controls, and copy functionality.\n */\nexport function AssetSection({\n\ttitle,\n\tdescription,\n\tassets,\n\tgroupByFolder,\n\tvariants,\n\tcopy,\n\tdisplay,\n\tstorageKeyPrefix,\n}: AssetSectionProps) {\n\t// Constants\n\tconst DEFAULT_LIGHT_BG = \"#eeeeee\";\n\tconst DEFAULT_DARK_BG = \"#181818\";\n\tconst STORAGE_KEY_LIGHT = `${storageKeyPrefix}-light`;\n\tconst STORAGE_KEY_DARK = `${storageKeyPrefix}-dark`;\n\tconst STORAGE_KEY_MODE = `${storageKeyPrefix}-mode`;\n\n\t// Load from localStorage\n\tconst getStoredValue = (key: string, defaultValue: string) => {\n\t\ttry {\n\t\t\tconst stored = localStorage.getItem(key);\n\t\t\treturn stored !== null ? stored : defaultValue;\n\t\t} catch {\n\t\t\treturn defaultValue;\n\t\t}\n\t};\n\n\tconst setStoredValue = (key: string, value: string) => {\n\t\ttry {\n\t\t\tlocalStorage.setItem(key, value);\n\t\t} catch {}\n\t};\n\n\tconst removeStoredValue = (key: string) => {\n\t\ttry {\n\t\t\tlocalStorage.removeItem(key);\n\t\t} catch {}\n\t};\n\n\t// State\n\tconst [searchTerm, setSearchTerm] = useState(\"\");\n\tconst [currentVariant, setCurrentVariant] = useState(variants.defaultVariant);\n\tconst [toastMessage, setToastMessage] = useState<string | null>(null);\n\tconst [bgMode, setBgMode] = useState(() =>\n\t\tgetStoredValue(STORAGE_KEY_MODE, \"checkered\"),\n\t);\n\tconst [lightBgColor, setLightBgColor] = useState(() =>\n\t\tgetStoredValue(STORAGE_KEY_LIGHT, DEFAULT_LIGHT_BG),\n\t);\n\tconst [darkBgColor, setDarkBgColor] = useState(() =>\n\t\tgetStoredValue(STORAGE_KEY_DARK, DEFAULT_DARK_BG),\n\t);\n\n\t// Handlers\n\tconst handleBgModeChange = (mode: string) => {\n\t\tsetBgMode(mode);\n\t\tsetStoredValue(STORAGE_KEY_MODE, mode);\n\t};\n\n\tconst handleLightBgChange = (color: string) => {\n\t\tsetLightBgColor(color);\n\t\tsetStoredValue(STORAGE_KEY_LIGHT, color);\n\t};\n\n\tconst handleDarkBgChange = (color: string) => {\n\t\tsetDarkBgColor(color);\n\t\tsetStoredValue(STORAGE_KEY_DARK, color);\n\t};\n\n\tconst resetLightBg = () => {\n\t\tsetLightBgColor(DEFAULT_LIGHT_BG);\n\t\tremoveStoredValue(STORAGE_KEY_LIGHT);\n\t};\n\n\tconst resetDarkBg = () => {\n\t\tsetDarkBgColor(DEFAULT_DARK_BG);\n\t\tremoveStoredValue(STORAGE_KEY_DARK);\n\t};\n\n\tconst isLightVariant = currentVariant === \"light\";\n\n\tconst getPreviewBackground = () => {\n\t\tif (bgMode === \"checkered\") {\n\t\t\treturn \"repeating-conic-gradient(#e0e0e0 0% 25%, #ffffff 0% 50%) 50% / 16px 16px\";\n\t\t}\n\t\t// Inverse mode: use opposite background of the variant\n\t\treturn isLightVariant ? darkBgColor : lightBgColor;\n\t};\n\n\tconst showToast = (message: string) => {\n\t\tsetToastMessage(message);\n\t\tsetTimeout(() => setToastMessage(null), 2000);\n\t};\n\n\tconst copyToClipboard = (text: string, type: string) => {\n\t\tnavigator.clipboard.writeText(text).then(() => {\n\t\t\tshowToast(`${type} copied to clipboard!`);\n\t\t});\n\t};\n\n\tconst getImportPath = (asset: Asset) => {\n\t\tif (!copy.import) return \"\";\n\t\treturn copy.import\n\t\t\t.replace(/\\{\\{name\\}\\}/g, asset.id)\n\t\t\t.replace(/\\{\\{ext\\}\\}/g, asset.ext)\n\t\t\t.replace(/\\{\\{path\\}\\}/g, asset.relativePath)\n\t\t\t.replace(/\\{\\{basename\\}\\}/g, `${asset.filename}.${asset.ext}`);\n\t};\n\n\tconst getComponentUsage = (asset: Asset) => {\n\t\tif (!copy.component) return \"\";\n\t\treturn copy.component\n\t\t\t.replace(/\\{\\{name\\}\\}/g, asset.id)\n\t\t\t.replace(/\\{\\{ext\\}\\}/g, asset.ext)\n\t\t\t.replace(/\\{\\{path\\}\\}/g, asset.relativePath)\n\t\t\t.replace(/\\{\\{basename\\}\\}/g, `${asset.filename}.${asset.ext}`);\n\t};\n\n\t// Filter assets\n\tconst filteredAssets = useMemo(() => {\n\t\tif (!searchTerm.trim()) return assets;\n\t\tconst term = searchTerm.toLowerCase();\n\t\treturn assets.filter(\n\t\t\t(asset) =>\n\t\t\t\tasset.name.toLowerCase().includes(term) ||\n\t\t\t\tasset.filename.toLowerCase().includes(term),\n\t\t);\n\t}, [assets, searchTerm]);\n\n\t// Group by folder if enabled\n\tconst groupedAssets = useMemo(() => {\n\t\tif (!groupByFolder) return new Map();\n\t\tconst groups = new Map<string, Asset[]>();\n\t\tfor (const asset of filteredAssets) {\n\t\t\tconst folder = asset.folder || \"root\";\n\t\t\tif (!groups.has(folder)) {\n\t\t\t\tgroups.set(folder, []);\n\t\t\t}\n\t\t\tgroups.get(folder)!.push(asset);\n\t\t}\n\t\treturn groups;\n\t}, [filteredAssets, groupByFolder]);\n\n\tconst renderAsset = (asset: Asset) => {\n\t\tconst imageSrc =\n\t\t\tcurrentVariant === \"dark\" && asset.variants.dark\n\t\t\t\t? asset.variants.dark\n\t\t\t\t: asset.variants.light;\n\n\t\tconst hasCopyAction = copy.import || copy.component;\n\t\tconst copyType = copy.import ? \"Import\" : \"Component\";\n\t\tconst copyText = copy.import\n\t\t\t? getImportPath(asset)\n\t\t\t: getComponentUsage(asset);\n\n\t\treturn (\n\t\t\t<AssetCard\n\t\t\t\tkey={asset.id}\n\t\t\t\tclassName=\"asset-card\"\n\t\t\t\tonClick={() => hasCopyAction && copyToClipboard(copyText, copyType)}\n\t\t\t>\n\t\t\t\t<AssetPreview\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: `${display.previewSize}px`,\n\t\t\t\t\t\theight: `${display.previewSize}px`,\n\t\t\t\t\t\tbackground: getPreviewBackground(),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<AssetImage src={imageSrc} alt={asset.name} />\n\t\t\t\t</AssetPreview>\n\t\t\t\t<AssetName>{asset.name}</AssetName>\n\t\t\t\t{display.showFilename && (\n\t\t\t\t\t<AssetFilename>\n\t\t\t\t\t\t{asset.filename}.{asset.ext}\n\t\t\t\t\t</AssetFilename>\n\t\t\t\t)}\n\t\t\t\t{hasCopyAction && (\n\t\t\t\t\t<CopyButtons>\n\t\t\t\t\t\t<CopyButton\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tcopyToClipboard(copyText, copyType);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{copyType}\n\t\t\t\t\t\t</CopyButton>\n\t\t\t\t\t</CopyButtons>\n\t\t\t\t)}\n\t\t\t</AssetCard>\n\t\t);\n\t};\n\n\tconst renderGroupedAssets = () => {\n\t\tconst entries = Array.from(groupedAssets.entries());\n\t\treturn entries.map(([folder, assets]) => (\n\t\t\t<FolderSection key={folder}>\n\t\t\t\t<FolderTitle>{folder === \"root\" ? \"Root\" : folder}</FolderTitle>\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: \"grid\",\n\t\t\t\t\t\tgridTemplateColumns: `repeat(auto-fill, minmax(${display.previewSize + 40}px, 1fr))`,\n\t\t\t\t\t\tgap: \"24px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{assets.map(renderAsset)}\n\t\t\t\t</div>\n\t\t\t</FolderSection>\n\t\t));\n\t};\n\n\treturn (\n\t\t<Wrapper>\n\t\t\t<Container>\n\t\t\t\t<Title>{title}</Title>\n\t\t\t\t{description && <Description>{description}</Description>}\n\n\t\t\t\t<ControlsBar>\n\t\t\t\t\t<SearchInput\n\t\t\t\t\t\tvalue={searchTerm}\n\t\t\t\t\t\tonChange={(e) => setSearchTerm(e.target.value)}\n\t\t\t\t\t\tplaceholder={`Search ${title.toLowerCase()}...`}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{variants.enabled && (\n\t\t\t\t\t\t<VariantToggle\n\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\tsetCurrentVariant((v) => (v === \"light\" ? \"dark\" : \"light\"))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{currentVariant === \"light\" ? \"Light\" : \"Dark\"}\n\t\t\t\t\t\t</VariantToggle>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<BackgroundControls>\n\t\t\t\t\t\t<BackgroundToggle>\n\t\t\t\t\t\t\t<ToggleOption\n\t\t\t\t\t\t\t\tdata-active={bgMode === \"inverse\"}\n\t\t\t\t\t\t\t\tonClick={() => handleBgModeChange(\"inverse\")}\n\t\t\t\t\t\t\t\ttitle=\"Inverse background\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<InverseIcon />\n\t\t\t\t\t\t\t</ToggleOption>\n\t\t\t\t\t\t\t<ToggleOption\n\t\t\t\t\t\t\t\tdata-active={bgMode === \"checkered\"}\n\t\t\t\t\t\t\t\tonClick={() => handleBgModeChange(\"checkered\")}\n\t\t\t\t\t\t\t\ttitle=\"Checkered background\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<CheckerboardIcon />\n\t\t\t\t\t\t\t</ToggleOption>\n\t\t\t\t\t\t</BackgroundToggle>\n\n\t\t\t\t\t\t{bgMode === \"inverse\" && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<ColorPickerGroup>\n\t\t\t\t\t\t\t\t\t<ColorLabel>Light</ColorLabel>\n\t\t\t\t\t\t\t\t\t<ColorInput\n\t\t\t\t\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\t\t\t\t\tvalue={lightBgColor}\n\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleLightBgChange(e.target.value)}\n\t\t\t\t\t\t\t\t\t\ttitle=\"Background for dark illustrations\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{lightBgColor !== DEFAULT_LIGHT_BG && (\n\t\t\t\t\t\t\t\t\t\t<ResetButton\n\t\t\t\t\t\t\t\t\t\t\tonClick={resetLightBg}\n\t\t\t\t\t\t\t\t\t\t\ttitle=\"Reset to default\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<ResetIcon />\n\t\t\t\t\t\t\t\t\t\t</ResetButton>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</ColorPickerGroup>\n\t\t\t\t\t\t\t\t<ColorPickerGroup>\n\t\t\t\t\t\t\t\t\t<ColorLabel>Dark</ColorLabel>\n\t\t\t\t\t\t\t\t\t<ColorInput\n\t\t\t\t\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\t\t\t\t\tvalue={darkBgColor}\n\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleDarkBgChange(e.target.value)}\n\t\t\t\t\t\t\t\t\t\ttitle=\"Background for light illustrations\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{darkBgColor !== DEFAULT_DARK_BG && (\n\t\t\t\t\t\t\t\t\t\t<ResetButton onClick={resetDarkBg} title=\"Reset to default\">\n\t\t\t\t\t\t\t\t\t\t\t<ResetIcon />\n\t\t\t\t\t\t\t\t\t\t</ResetButton>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</ColorPickerGroup>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</BackgroundControls>\n\t\t\t\t</ControlsBar>\n\n\t\t\t\t{filteredAssets.length === 0 ? (\n\t\t\t\t\t<NoResults>\n\t\t\t\t\t\tNo {title.toLowerCase()} found matching \"{searchTerm}\"\n\t\t\t\t\t</NoResults>\n\t\t\t\t) : groupByFolder ? (\n\t\t\t\t\trenderGroupedAssets()\n\t\t\t\t) : (\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"grid\",\n\t\t\t\t\t\t\tgridTemplateColumns: `repeat(auto-fill, minmax(${display.previewSize + 40}px, 1fr))`,\n\t\t\t\t\t\t\tgap: \"24px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{filteredAssets.map(renderAsset)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{toastMessage && <Toast>{toastMessage}</Toast>}\n\t\t\t</Container>\n\t\t</Wrapper>\n\t);\n}\n\n/**\n * Props for export-only mode (no wrapper, just the grid component).\n */\nexport interface AssetGridProps\n\textends Omit<AssetSectionProps, \"title\" | \"description\"> {\n\t/** Grid column configuration */\n\tcolumns?: number;\n}\n\n/**\n * Asset grid component for export-only mode (no page wrapper).\n */\nexport function AssetGrid(props: AssetGridProps) {\n\t// Reuse AssetSection but without the wrapper\n\tconst { columns = 4, ...rest } = props;\n\n\treturn (\n\t\t<AssetSection\n\t\t\ttitle=\"\"\n\t\t\tdescription=\"\"\n\t\t\tdisplay={{ ...rest.display, previewSize: rest.display.previewSize }}\n\t\t\t{...rest}\n\t\t/>\n\t);\n}\n"]}
@@ -416,11 +416,11 @@ function AssetSection({
416
416
  };
417
417
  const getImportPath = (asset) => {
418
418
  if (!copy.import) return "";
419
- return copy.import.replace(/\{\{name\}\}/g, asset.id).replace(/\{\{ext\}\}/g, asset.ext).replace(/\{\{path\}\}/g, asset.relativePath).replace(/\{\{basename\}\}/g, asset.filename + "." + asset.ext);
419
+ return copy.import.replace(/\{\{name\}\}/g, asset.id).replace(/\{\{ext\}\}/g, asset.ext).replace(/\{\{path\}\}/g, asset.relativePath).replace(/\{\{basename\}\}/g, `${asset.filename}.${asset.ext}`);
420
420
  };
421
421
  const getComponentUsage = (asset) => {
422
422
  if (!copy.component) return "";
423
- return copy.component.replace(/\{\{name\}\}/g, asset.id).replace(/\{\{ext\}\}/g, asset.ext).replace(/\{\{path\}\}/g, asset.relativePath).replace(/\{\{basename\}\}/g, asset.filename + "." + asset.ext);
423
+ return copy.component.replace(/\{\{name\}\}/g, asset.id).replace(/\{\{ext\}\}/g, asset.ext).replace(/\{\{path\}\}/g, asset.relativePath).replace(/\{\{basename\}\}/g, `${asset.filename}.${asset.ext}`);
424
424
  };
425
425
  const filteredAssets = useMemo(() => {
426
426
  if (!searchTerm.trim()) return assets;