@pagesmith/core 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/REFERENCE.md +281 -0
- package/dist/ai/index.d.mts +3 -2
- package/dist/ai/index.d.mts.map +1 -1
- package/dist/ai/index.mjs +454 -79
- package/dist/ai/index.mjs.map +1 -1
- package/dist/assets/index.mjs +1 -1
- package/dist/{assets-bX08zEJm.mjs → assets-DXiWF_KI.mjs} +1 -1
- package/dist/{assets-bX08zEJm.mjs.map → assets-DXiWF_KI.mjs.map} +1 -1
- package/dist/{content-config-wW-3r5gG.d.mts → content-config-Bfe4W9us.d.mts} +3 -3
- package/dist/{content-config-wW-3r5gG.d.mts.map → content-config-Bfe4W9us.d.mts.map} +1 -1
- package/dist/{content-layer-DWdgdBeI.mjs → content-layer-DPK1EmfY.mjs} +84 -47
- package/dist/content-layer-DPK1EmfY.mjs.map +1 -0
- package/dist/css/index.d.mts +1 -1
- package/dist/css/index.mjs +1 -1
- package/dist/{css-ekIt2Fdb.mjs → css-BneO430t.mjs} +5 -4
- package/dist/css-BneO430t.mjs.map +1 -0
- package/dist/{heading-Dhvzlay-.d.mts → heading-BpDXnl-7.d.mts} +1 -1
- package/dist/{heading-Dhvzlay-.d.mts.map → heading-BpDXnl-7.d.mts.map} +1 -1
- package/dist/{index-D79hUFbK.d.mts → index-BBYkDxwI.d.mts} +1 -1
- package/dist/{index-D79hUFbK.d.mts.map → index-BBYkDxwI.d.mts.map} +1 -1
- package/dist/index-Bg9srb5U.d.mts +13 -0
- package/dist/index-Bg9srb5U.d.mts.map +1 -0
- package/dist/{index-DpRBzO8Q.d.mts → index-CbOKbkjJ.d.mts} +3 -3
- package/dist/index-CbOKbkjJ.d.mts.map +1 -0
- package/dist/{index-Dbsw1QON.d.mts → index-YXQxMV6J.d.mts} +5 -3
- package/dist/{index-Dbsw1QON.d.mts.map → index-YXQxMV6J.d.mts.map} +1 -1
- package/dist/index.d.mts +18 -12
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +6 -7
- package/dist/index.mjs.map +1 -1
- package/dist/loaders/index.d.mts +3 -3
- package/dist/loaders/index.mjs +2 -2
- package/dist/{loaders-Bla48ZN9.mjs → loaders-Cf-BXf2L.mjs} +10 -2
- package/dist/{loaders-Bla48ZN9.mjs.map → loaders-Cf-BXf2L.mjs.map} +1 -1
- package/dist/markdown/index.d.mts +2 -2
- package/dist/markdown/index.mjs +1 -1
- package/dist/{markdown-Cj5X26FL.mjs → markdown-CyrHoDhP.mjs} +37 -9
- package/dist/markdown-CyrHoDhP.mjs.map +1 -0
- package/dist/schemas/index.d.mts +3 -3
- package/dist/schemas/index.mjs +1 -1
- package/dist/{schemas-BZEPTGWs.mjs → schemas-UL4ynWsA.mjs} +1 -1
- package/dist/{schemas-BZEPTGWs.mjs.map → schemas-UL4ynWsA.mjs.map} +1 -1
- package/dist/{types-B-V5qemH.d.mts → types-Cn52sdoq.d.mts} +1 -1
- package/dist/{types-B-V5qemH.d.mts.map → types-Cn52sdoq.d.mts.map} +1 -1
- package/dist/vite/index.d.mts +2 -2
- package/dist/vite/index.d.mts.map +1 -1
- package/dist/vite/index.mjs +15 -8
- package/dist/vite/index.mjs.map +1 -1
- package/package.json +3 -3
- package/dist/content-layer-DWdgdBeI.mjs.map +0 -1
- package/dist/convert-XdGgNqH0.mjs +0 -27
- package/dist/convert-XdGgNqH0.mjs.map +0 -1
- package/dist/css-ekIt2Fdb.mjs.map +0 -1
- package/dist/index-CeNDTM-y.d.mts +0 -7
- package/dist/index-CeNDTM-y.d.mts.map +0 -1
- package/dist/index-DpRBzO8Q.d.mts.map +0 -1
- package/dist/markdown-Cj5X26FL.mjs.map +0 -1
package/REFERENCE.md
ADDED
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
# @pagesmith/core — AI Reference
|
|
2
|
+
|
|
3
|
+
Link this file from your project's CLAUDE.md or AGENTS.md to give AI assistants a comprehensive reference for `@pagesmith/core`.
|
|
4
|
+
|
|
5
|
+
```markdown
|
|
6
|
+
<!-- In your CLAUDE.md or AGENTS.md -->
|
|
7
|
+
For the full @pagesmith/core API reference, see: node_modules/@pagesmith/core/REFERENCE.md
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
`@pagesmith/core` is a file-based content toolkit for Vite. It provides schema-validated content collections, lazy markdown rendering with Expressive Code syntax highlighting, a server-side JSX runtime, CSS bundles, and Vite plugins for framework integrations.
|
|
15
|
+
|
|
16
|
+
ESM only (`"type": "module"`). Node 18+.
|
|
17
|
+
|
|
18
|
+
## Content Layer API
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
import { createContentLayer, defineCollection, defineConfig, z } from '@pagesmith/core'
|
|
22
|
+
|
|
23
|
+
const posts = defineCollection({
|
|
24
|
+
loader: 'markdown',
|
|
25
|
+
directory: 'content/posts',
|
|
26
|
+
schema: z.object({
|
|
27
|
+
title: z.string(),
|
|
28
|
+
description: z.string(),
|
|
29
|
+
date: z.coerce.date(),
|
|
30
|
+
tags: z.array(z.string()).default([]),
|
|
31
|
+
draft: z.boolean().optional().default(false),
|
|
32
|
+
}),
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
const layer = createContentLayer(defineConfig({ collections: { posts } }))
|
|
36
|
+
const entries = await layer.getCollection('posts')
|
|
37
|
+
const rendered = await entries[0]?.render()
|
|
38
|
+
// rendered.html, rendered.headings, rendered.readTime
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### ContentLayer methods
|
|
42
|
+
|
|
43
|
+
| Method | Description |
|
|
44
|
+
|---|---|
|
|
45
|
+
| `createContentLayer(config)` | Create a content layer from a config object |
|
|
46
|
+
| `layer.getCollection(name)` | Load all entries in a collection (cached) |
|
|
47
|
+
| `layer.getEntry(collection, slug)` | Get a single entry by slug |
|
|
48
|
+
| `layer.convert(markdown, options?)` | Convert raw markdown to HTML outside collections |
|
|
49
|
+
| `layer.validate(collection?)` | Run all validators and return results |
|
|
50
|
+
| `layer.invalidate(collection, slug)` | Cache-bust a single entry |
|
|
51
|
+
| `layer.invalidateCollection(name)` | Cache-bust an entire collection |
|
|
52
|
+
| `layer.invalidateAll()` | Cache-bust all collections |
|
|
53
|
+
|
|
54
|
+
### ContentEntry properties
|
|
55
|
+
|
|
56
|
+
| Property | Type | Description |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| `slug` | `string` | URL-friendly identifier |
|
|
59
|
+
| `collection` | `string` | Collection name |
|
|
60
|
+
| `filePath` | `string` | Absolute source path |
|
|
61
|
+
| `data` | `T` | Validated data (typed by your Zod schema) |
|
|
62
|
+
| `rawContent` | `string` | Raw markdown body (markdown loader only) |
|
|
63
|
+
| `render(options?)` | `Promise<RenderedContent>` | Lazy markdown-to-HTML (cached) |
|
|
64
|
+
| `clearRenderCache()` | `void` | Force re-render on next call |
|
|
65
|
+
|
|
66
|
+
### RenderedContent
|
|
67
|
+
|
|
68
|
+
| Property | Type | Description |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| `html` | `string` | Rendered HTML |
|
|
71
|
+
| `headings` | `Heading[]` | `{ depth, text, slug }` |
|
|
72
|
+
| `readTime` | `number` | Estimated minutes |
|
|
73
|
+
|
|
74
|
+
## Collection Options
|
|
75
|
+
|
|
76
|
+
| Option | Type | Description |
|
|
77
|
+
|---|---|---|
|
|
78
|
+
| `loader` | `string \| Loader` | `'markdown'`, `'json'`, `'json5'`, `'jsonc'`, `'yaml'`, `'toml'`, or custom |
|
|
79
|
+
| `directory` | `string` | Directory containing collection files |
|
|
80
|
+
| `schema` | `z.ZodType` | Zod schema for validating entry data |
|
|
81
|
+
| `include` | `string[]` | Glob include patterns |
|
|
82
|
+
| `exclude` | `string[]` | Glob exclude patterns |
|
|
83
|
+
| `computed` | `Record<string, fn>` | Computed fields derived from entry data |
|
|
84
|
+
| `validate` | `fn` | Custom validation hook (return string for error) |
|
|
85
|
+
| `filter` | `fn` | Filter entries (return false to exclude) |
|
|
86
|
+
| `slugify` | `fn` | Custom slug generation |
|
|
87
|
+
| `transform` | `fn` | Pre-validation transform |
|
|
88
|
+
| `validators` | `ContentValidator[]` | Custom content validators |
|
|
89
|
+
| `disableBuiltinValidators` | `boolean` | Disable built-in markdown validators |
|
|
90
|
+
|
|
91
|
+
## Loaders
|
|
92
|
+
|
|
93
|
+
| Type | Extensions | Description |
|
|
94
|
+
|---|---|---|
|
|
95
|
+
| `markdown` | `.md` | gray-matter frontmatter + markdown body |
|
|
96
|
+
| `json` | `.json` | JSON.parse |
|
|
97
|
+
| `json5` | `.json` | Relaxed JSON with comments, trailing commas |
|
|
98
|
+
| `jsonc` | `.json`, `.jsonc` | JSON with comments |
|
|
99
|
+
| `yaml` | `.yml`, `.yaml` | YAML |
|
|
100
|
+
| `toml` | `.toml` | TOML |
|
|
101
|
+
|
|
102
|
+
Custom loaders: implement `Loader { name, kind, extensions, load(filePath) }`.
|
|
103
|
+
|
|
104
|
+
## Vite Plugins
|
|
105
|
+
|
|
106
|
+
### pagesmithContent
|
|
107
|
+
|
|
108
|
+
Virtual module plugin that exposes collections as importable modules:
|
|
109
|
+
|
|
110
|
+
```ts
|
|
111
|
+
import { pagesmithContent, pagesmithSsg, sharedAssetsPlugin } from '@pagesmith/core/vite'
|
|
112
|
+
import collections from './content.config'
|
|
113
|
+
|
|
114
|
+
export default defineConfig({
|
|
115
|
+
plugins: [
|
|
116
|
+
sharedAssetsPlugin(),
|
|
117
|
+
pagesmithContent({ collections }),
|
|
118
|
+
...pagesmithSsg({ entry: './src/entry-server.tsx', contentDirs: ['./content'] }),
|
|
119
|
+
],
|
|
120
|
+
})
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Options:
|
|
124
|
+
|
|
125
|
+
| Option | Type | Default | Description |
|
|
126
|
+
|---|---|---|---|
|
|
127
|
+
| `collections` | `Collections` | — | Collection definitions |
|
|
128
|
+
| `moduleId` | `string` | `'virtual:content'` | Virtual module prefix |
|
|
129
|
+
| `configPath` | `string` | `'./content.config.ts'` | Config file path |
|
|
130
|
+
| `dts` | `boolean \| string` | `true` | Generate .d.ts |
|
|
131
|
+
| `contentRoot` | `string` | `'content'` | Shared root for contentSlug |
|
|
132
|
+
| `markdown` | `MarkdownConfig` | — | Markdown pipeline config |
|
|
133
|
+
|
|
134
|
+
Import in your code:
|
|
135
|
+
|
|
136
|
+
```ts
|
|
137
|
+
import posts from 'virtual:content/posts'
|
|
138
|
+
// Each markdown entry: { id, contentSlug, html, headings, frontmatter }
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### pagesmithSsg
|
|
142
|
+
|
|
143
|
+
Static site generation plugin. Your SSR entry must export:
|
|
144
|
+
|
|
145
|
+
```ts
|
|
146
|
+
export function getRoutes(config: SsgRenderConfig): string[]
|
|
147
|
+
export function render(url: string, config: SsgRenderConfig): string | Promise<string>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
`SsgRenderConfig` provides: `base`, `root`, `cssPath`, `jsPath`, `searchEnabled`, `isDev`.
|
|
151
|
+
|
|
152
|
+
### sharedAssetsPlugin
|
|
153
|
+
|
|
154
|
+
Serves shared font assets (Open Sans, JetBrains Mono) bundled with `@pagesmith/core`.
|
|
155
|
+
|
|
156
|
+
## Markdown Pipeline
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
remark-parse → remark-gfm → remark-math → remark-frontmatter
|
|
160
|
+
→ remark-github-alerts → remark-smartypants → [user remark plugins]
|
|
161
|
+
→ remark-rehype
|
|
162
|
+
→ rehype-expressive-code (dual themes, line numbers, titles, copy, collapse, mark/ins/del)
|
|
163
|
+
→ rehype-mathjax → rehype-slug → rehype-autolink-headings
|
|
164
|
+
→ rehype-external-links → rehype-accessible-emojis
|
|
165
|
+
→ heading extraction → [user rehype plugins] → rehype-stringify
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Markdown Configuration
|
|
169
|
+
|
|
170
|
+
```ts
|
|
171
|
+
type MarkdownConfig = {
|
|
172
|
+
remarkPlugins?: any[]
|
|
173
|
+
rehypePlugins?: any[]
|
|
174
|
+
shiki?: {
|
|
175
|
+
themes: { light: string; dark: string }
|
|
176
|
+
langAlias?: Record<string, string>
|
|
177
|
+
defaultShowLineNumbers?: boolean
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Code Block Meta Syntax (Expressive Code)
|
|
183
|
+
|
|
184
|
+
| Meta | Example | Description |
|
|
185
|
+
|---|---|---|
|
|
186
|
+
| `title="..."` | `` ```js title="app.js" `` | File title |
|
|
187
|
+
| `showLineNumbers` | `` ```js showLineNumbers `` | Line numbers |
|
|
188
|
+
| `mark={lines}` | `` ```js mark={3,5-7} `` | Highlight lines |
|
|
189
|
+
| `ins={lines}` | `` ```js ins={4} `` | Inserted lines (green) |
|
|
190
|
+
| `del={lines}` | `` ```js del={5} `` | Deleted lines (red) |
|
|
191
|
+
| `collapse={lines}` | `` ```js collapse={1-5} `` | Collapsible section |
|
|
192
|
+
| `wrap` | `` ```js wrap `` | Text wrapping |
|
|
193
|
+
| `frame="..."` | `` ```js frame="terminal" `` | Frame style |
|
|
194
|
+
|
|
195
|
+
### Built-in Validators
|
|
196
|
+
|
|
197
|
+
- **linkValidator** — warns on bare URLs, empty link text, suspicious protocols
|
|
198
|
+
- **headingValidator** — enforces single h1, sequential heading depth
|
|
199
|
+
- **codeBlockValidator** — warns on missing language, unknown meta properties
|
|
200
|
+
|
|
201
|
+
## JSX Runtime
|
|
202
|
+
|
|
203
|
+
Configure tsconfig: `{ "jsx": "react-jsx", "jsxImportSource": "@pagesmith/core" }`
|
|
204
|
+
|
|
205
|
+
```tsx
|
|
206
|
+
import { h, Fragment, HtmlString } from '@pagesmith/core/jsx-runtime'
|
|
207
|
+
|
|
208
|
+
function Page({ title, content }: { title: string; content: string }) {
|
|
209
|
+
return (
|
|
210
|
+
<html lang="en">
|
|
211
|
+
<head><title>{title}</title></head>
|
|
212
|
+
<body>
|
|
213
|
+
<main innerHTML={new HtmlString(content)} />
|
|
214
|
+
</body>
|
|
215
|
+
</html>
|
|
216
|
+
)
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
- `h()` returns `HtmlString` — use `String(result)` or `.value` for raw HTML
|
|
221
|
+
- Use `innerHTML` prop to inject pre-rendered HTML without escaping
|
|
222
|
+
- `Fragment` renders children or raw `innerHTML` without a wrapper element
|
|
223
|
+
|
|
224
|
+
## CSS Exports
|
|
225
|
+
|
|
226
|
+
| Import Path | Contents |
|
|
227
|
+
|---|---|
|
|
228
|
+
| `@pagesmith/core/css/content` | Prose typography + inline code |
|
|
229
|
+
| `@pagesmith/core/css/standalone` | Full layout + prose + TOC |
|
|
230
|
+
| `@pagesmith/core/css/viewport` | Responsive viewport base |
|
|
231
|
+
| `@pagesmith/core/css/fonts` | Bundled Open Sans + JetBrains Mono |
|
|
232
|
+
|
|
233
|
+
Code block styling is handled by Expressive Code (inline styles).
|
|
234
|
+
|
|
235
|
+
## Runtime Exports
|
|
236
|
+
|
|
237
|
+
```ts
|
|
238
|
+
import { getRuntimeCSS, getRuntimeJS, getContentCSS, getContentJS } from '@pagesmith/core/runtime'
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
Two tiers:
|
|
242
|
+
- **Standalone** (`getRuntimeCSS/JS`) — full site with TOC highlight
|
|
243
|
+
- **Content** (`getContentCSS/JS`) — markdown rendering only
|
|
244
|
+
|
|
245
|
+
## Frontmatter Schemas
|
|
246
|
+
|
|
247
|
+
| Schema | Fields |
|
|
248
|
+
|---|---|
|
|
249
|
+
| `BaseFrontmatterSchema` | title, description, publishedDate, lastUpdatedOn, tags, draft |
|
|
250
|
+
| `BlogFrontmatterSchema` | extends base + category, featured, coverImage |
|
|
251
|
+
| `ProjectFrontmatterSchema` | extends base + gitRepo, links |
|
|
252
|
+
|
|
253
|
+
## Export Map
|
|
254
|
+
|
|
255
|
+
| Import Path | Purpose |
|
|
256
|
+
|---|---|
|
|
257
|
+
| `@pagesmith/core` | Main API (defineCollection, createContentLayer, z, etc.) |
|
|
258
|
+
| `@pagesmith/core/jsx-runtime` | h, Fragment, HtmlString |
|
|
259
|
+
| `@pagesmith/core/markdown` | processMarkdown |
|
|
260
|
+
| `@pagesmith/core/css` | buildCss (LightningCSS) |
|
|
261
|
+
| `@pagesmith/core/css/content` | Content CSS file |
|
|
262
|
+
| `@pagesmith/core/css/standalone` | Standalone CSS file |
|
|
263
|
+
| `@pagesmith/core/css/viewport` | Viewport CSS file |
|
|
264
|
+
| `@pagesmith/core/css/fonts` | Bundled font faces |
|
|
265
|
+
| `@pagesmith/core/schemas` | Zod schemas and types |
|
|
266
|
+
| `@pagesmith/core/loaders` | Loader classes and registry |
|
|
267
|
+
| `@pagesmith/core/assets` | Asset copying and hashing |
|
|
268
|
+
| `@pagesmith/core/runtime` | Pre-built CSS/JS accessors |
|
|
269
|
+
| `@pagesmith/core/vite` | Vite plugins |
|
|
270
|
+
| `@pagesmith/core/ai` | AI assistant artifact generator |
|
|
271
|
+
| `@pagesmith/core/create` | Project scaffolding |
|
|
272
|
+
|
|
273
|
+
## Key Rules
|
|
274
|
+
|
|
275
|
+
- Always use `z` re-exported from `@pagesmith/core`, not from `zod` directly
|
|
276
|
+
- Prefer folder-based entries (`guide/getting-started/README.md`) when content references sibling assets
|
|
277
|
+
- The `render()` result is cached — call `clearRenderCache()` to force re-render
|
|
278
|
+
- `getCollection()` results are cached — use `invalidate*()` methods for cache busting
|
|
279
|
+
- Runtime JS provides only TOC highlighting (standalone) — copy buttons are Expressive Code
|
|
280
|
+
- All exports are named (no default exports from core)
|
|
281
|
+
- Code block styling is inline via Expressive Code — do NOT import separate code block CSS
|
package/dist/ai/index.d.mts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
type AiAssistant = 'claude' | 'codex' | 'gemini';
|
|
3
3
|
type AiInstallScope = 'project' | 'user';
|
|
4
4
|
type AiInstallProfile = 'default' | 'docs';
|
|
5
|
-
type AiArtifactKind = 'memory' | 'skill' | 'llms' | 'llms-full';
|
|
5
|
+
type AiArtifactKind = 'memory' | 'skill' | 'llms' | 'llms-full' | 'markdown-guidelines' | 'update-docs';
|
|
6
6
|
type AiWriteMode = 'merge' | 'replace';
|
|
7
7
|
type AiInstallStatus = 'written' | 'merged' | 'replaced' | 'unchanged';
|
|
8
8
|
type AiArtifact = {
|
|
@@ -28,7 +28,8 @@ type AiInstallOptions = {
|
|
|
28
28
|
homeDir?: string;
|
|
29
29
|
includeLlms?: boolean;
|
|
30
30
|
force?: boolean;
|
|
31
|
-
skillName?: string;
|
|
31
|
+
skillName?: string; /** When true, return planned writes without actually writing files. */
|
|
32
|
+
dryRun?: boolean;
|
|
32
33
|
};
|
|
33
34
|
declare function getAiArtifactContent(assistant: AiAssistant | 'shared', kind: AiArtifactKind, options?: {
|
|
34
35
|
profile?: AiInstallProfile;
|
package/dist/ai/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/ai/index.ts"],"mappings":";KAIY,WAAA;AAAA,KACA,cAAA;AAAA,KACA,gBAAA;AAAA,KACA,cAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/ai/index.ts"],"mappings":";KAIY,WAAA;AAAA,KACA,cAAA;AAAA,KACA,gBAAA;AAAA,KACA,cAAA;AAAA,KAOA,WAAA;AAAA,KACA,eAAA;AAAA,KAEA,UAAA;EACV,SAAA,GAAY,WAAA;EACZ,IAAA,EAAM,cAAA;EACN,IAAA;EACA,OAAA;EACA,IAAA,EAAM,WAAA;EACN,KAAA;AAAA;AAAA,KAGU,eAAA;EACV,SAAA,GAAY,WAAA;EACZ,IAAA,EAAM,cAAA;EACN,IAAA;EACA,MAAA,EAAQ,eAAA;EACR,KAAA;AAAA;AAAA,KAGU,gBAAA;EACV,UAAA,GAAa,WAAA;EACb,KAAA,GAAQ,cAAA;EACR,OAAA,GAAU,gBAAA;EACV,GAAA;EACA,OAAA;EACA,WAAA;EACA,KAAA;EACA,SAAA,WA3ByB;EA6BzB,MAAA;AAAA;AAAA,iBA8sBc,oBAAA,CACd,SAAA,EAAW,WAAA,aACX,IAAA,EAAM,cAAA,EACN,OAAA;EAAW,OAAA,GAAU,gBAAA;EAAkB,SAAA;AAAA;AAAA,iBAuCzB,cAAA,CAAe,OAAA,GAAS,gBAAA,GAAwB,UAAA;AAAA,iBAiIhD,kBAAA,CAAmB,OAAA,GAAS,gBAAA,GAAwB,eAAA"}
|