@happyvertical/smrt-content 0.51.39 → 0.53.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/AGENTS.md +6 -0
- package/README.md +86 -0
- package/dist/body-format.d.ts +104 -0
- package/dist/body-format.d.ts.map +1 -1
- package/dist/body-format.js +439 -48
- package/dist/body-format.js.map +1 -1
- package/dist/chunks/content-query-C6RcW8V_.js +4131 -0
- package/dist/chunks/content-query-C6RcW8V_.js.map +1 -0
- package/dist/chunks/{content-versions-CvOoDLSK.js → content-versions-HUeMI1TV.js} +2 -2
- package/dist/chunks/{content-versions-CvOoDLSK.js.map → content-versions-HUeMI1TV.js.map} +1 -1
- package/dist/chunks/{contents-BB7RIBx2.js → contents-CHa5soKR.js} +4 -6
- package/dist/chunks/contents-CHa5soKR.js.map +1 -0
- package/dist/content-query.d.ts.map +1 -1
- package/dist/content.d.ts +13 -1
- package/dist/content.d.ts.map +1 -1
- package/dist/contents.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/manifest.json +113 -23
- package/dist/server/content-list-data-surface.d.ts +1 -1
- package/dist/server/content-list-data-surface.d.ts.map +1 -1
- package/dist/server.js +3 -3
- package/dist/server.js.map +1 -1
- package/dist/smrt-knowledge.json +92 -10
- package/dist/svelte/components/ContentBodyEditor.svelte +898 -38
- package/dist/svelte/components/ContentBodyEditor.svelte.d.ts +67 -0
- package/dist/svelte/components/ContentBodyEditor.svelte.d.ts.map +1 -1
- package/dist/svelte/components/ContentBodyRenderer.svelte +36 -11
- package/dist/svelte/components/ContentBodyRenderer.svelte.d.ts +2 -0
- package/dist/svelte/components/ContentBodyRenderer.svelte.d.ts.map +1 -1
- package/dist/svelte/components/ContentClaimAuditTool.svelte +45 -2
- package/dist/svelte/components/ContentCorrectionsTool.svelte +24 -2
- package/dist/svelte/components/ContentEditor.svelte +67 -17
- package/dist/svelte/components/ContentEditor.svelte.d.ts +12 -0
- package/dist/svelte/components/ContentEditor.svelte.d.ts.map +1 -1
- package/dist/svelte/components/ContentGovernancePanel.svelte +4 -2
- package/dist/svelte/components/ContentMetadataFields.svelte +141 -51
- package/dist/svelte/components/ContentMetadataFields.svelte.d.ts +20 -0
- package/dist/svelte/components/ContentMetadataFields.svelte.d.ts.map +1 -1
- package/dist/svelte/components/ContentPictureDrawer.svelte +611 -0
- package/dist/svelte/components/ContentPictureDrawer.svelte.d.ts +68 -0
- package/dist/svelte/components/ContentPictureDrawer.svelte.d.ts.map +1 -0
- package/dist/svelte/components/ContentReviewStatusTray.svelte +2 -2
- package/dist/svelte/components/ContentStatusFields.svelte +85 -38
- package/dist/svelte/components/ContentStatusFields.svelte.d.ts +10 -0
- package/dist/svelte/components/ContentStatusFields.svelte.d.ts.map +1 -1
- package/dist/svelte/components/ContentTitleField.svelte +109 -12
- package/dist/svelte/components/ContentTitleField.svelte.d.ts +12 -0
- package/dist/svelte/components/ContentTitleField.svelte.d.ts.map +1 -1
- package/dist/svelte/components/ContentTransparencyReport.svelte +3 -1
- package/dist/svelte/components/ContentTransparencyTool.svelte +18 -3
- package/dist/svelte/components/ContentVersionsTool.svelte +26 -2
- package/dist/svelte/components/content-field-mode.d.ts +20 -0
- package/dist/svelte/components/content-field-mode.d.ts.map +1 -0
- package/dist/svelte/components/content-field-mode.js +26 -0
- package/dist/svelte/content-editor-media.d.ts +14 -0
- package/dist/svelte/content-editor-media.d.ts.map +1 -1
- package/dist/svelte/content-editor-media.js +41 -0
- package/dist/svelte/content-editor-state.svelte.d.ts +17 -0
- package/dist/svelte/content-editor-state.svelte.d.ts.map +1 -1
- package/dist/svelte/content-editor-state.svelte.js +46 -0
- package/dist/svelte/i18n.editor.d.ts +49 -0
- package/dist/svelte/i18n.editor.d.ts.map +1 -1
- package/dist/svelte/i18n.editor.js +53 -1
- package/dist/svelte/index.d.ts +10 -5
- package/dist/svelte/index.d.ts.map +1 -1
- package/dist/svelte/index.js +5 -3
- package/package.json +27 -25
- package/dist/chunks/content-query-DPJCcD1V.js +0 -4092
- package/dist/chunks/content-query-DPJCcD1V.js.map +0 -1
- package/dist/chunks/contents-BB7RIBx2.js.map +0 -1
package/AGENTS.md
CHANGED
|
@@ -89,6 +89,12 @@ Three strategies via ThumbnailGenerator:
|
|
|
89
89
|
### Content Management
|
|
90
90
|
`ContentList`, `ContentEditor`, `GovernedContentEditor`, `ContentAgentChat`, `ContentTitleField`, `ContentStatusFields`, `ContentMetadataFields`, `ContentReferencesPanel`, `ContentImageBrowser`, `ContentReviewStatusTray`, `ArticleCard`, `ArticleList`, `ImageThumbnail`, `Markdown`
|
|
91
91
|
|
|
92
|
+
The editor fields (`ContentTitleField`, `ContentStatusFields`,
|
|
93
|
+
`ContentMetadataFields`, `ContentBodyEditor`) must keep a `name`, an `id`, and
|
|
94
|
+
a plain label on every control so they register for agents, and honour
|
|
95
|
+
`mode: 'simple' | 'full'` (+ `fields` allow-list; rules in
|
|
96
|
+
`components/content-field-mode.ts`). `full` stays the default.
|
|
97
|
+
|
|
92
98
|
### Governance
|
|
93
99
|
`ContentGovernanceManager`, `ContentGovernancePanel`, `ContentGovernancePolicyEditor`, `ContentGovernanceProfileEditor`, `ContentGovernanceAssignmentEditor`, `ContentTransparencyReport`
|
|
94
100
|
|
package/README.md
CHANGED
|
@@ -476,15 +476,91 @@ startup and seeds sample content (3 items) for immediate testing.
|
|
|
476
476
|
| `ImageThumbnail` | `src`, `alt` | Thumbnail image display |
|
|
477
477
|
| `Markdown` | `source` | Markdown renderer |
|
|
478
478
|
|
|
479
|
+
The governance panels (`ContentGovernancePanel`, the corrections, versions and
|
|
480
|
+
transparency tools, `ContentTransparencyReport`) lay out by their own width:
|
|
481
|
+
each is a `container-type: inline-size` container. A size container takes its
|
|
482
|
+
width from its host, not its content, so inside a shrink-to-fit host (an
|
|
483
|
+
absolutely positioned popover, an `auto` grid track, an inline-block) give the
|
|
484
|
+
panel or its host a definite width, or it collapses.
|
|
485
|
+
|
|
479
486
|
`ContentList` retry handlers must return a new job attempt with a distinct
|
|
480
487
|
`jobId`. The controller retains the failed attempt as immutable history so a
|
|
481
488
|
late event from it cannot overwrite the retry result.
|
|
482
489
|
|
|
490
|
+
#### Simple mode and agent-ready editor fields
|
|
491
|
+
|
|
492
|
+
`ContentTitleField`, `ContentStatusFields`, `ContentMetadataFields`, and
|
|
493
|
+
`ContentBodyEditor` render smrt-ui fields with a stable `name`, an `id`, and a
|
|
494
|
+
plain label, so inside any `Form`, rich `<Form webmcp>`, or `FormScope` they
|
|
495
|
+
register with the control registry and an agent can propose a title, status,
|
|
496
|
+
story, author, summary, or tags for the person to review (`ContentBodyEditor`
|
|
497
|
+
registers the whole story as one `body` control in its own HTML/Markdown
|
|
498
|
+
format). `ContentTitleField` registers once you give it a `name` (e.g.
|
|
499
|
+
`name="title"`). Pass `idPrefix` to the status and metadata fields, and
|
|
500
|
+
`id`/`name` to the title and body, when two editors share a page.
|
|
501
|
+
|
|
502
|
+
`mode` (`'full'` by default, or `'simple'`) sets how much of the editor an
|
|
503
|
+
everyday editor sees; `fields` is an explicit allow-list that overrides it:
|
|
504
|
+
|
|
505
|
+
| | `full` | `simple` |
|
|
506
|
+
|---|---|---|
|
|
507
|
+
| `ContentStatusFields` | Type, State, Status, Published | Status, Publish date (optional) |
|
|
508
|
+
| `ContentMetadataFields` | Author, Description, Tags, URL, File key | Author, Summary, Tags — each "(optional)" — in a collapsed **Details** section (`details` controls it) |
|
|
509
|
+
| `ContentEditor` | every field and drawer | Type, State and References (with URL/File key) hidden; Metadata becomes a collapsed "Details" |
|
|
510
|
+
|
|
511
|
+
Simple mode uses plain labels ("Ready for review", "Summary", "Story").
|
|
512
|
+
|
|
483
513
|
Applications that compose their own article editor can use
|
|
484
514
|
`createContentEditorState`, `getContentEditorAssetImageSource`, and
|
|
485
515
|
`resolveContentEditorImageSelection` to share the same form normalization,
|
|
486
516
|
thumbnail selection, and save payload behavior as the package editors.
|
|
487
517
|
|
|
518
|
+
#### Body format picker
|
|
519
|
+
|
|
520
|
+
The toolbar's "Save as" HTML/Markdown picker is hidden by default. Pass
|
|
521
|
+
`showFormatPicker` to `ContentBodyEditor` (or `showBodyFormatPicker` to
|
|
522
|
+
`ContentEditor`) to offer it to technical editors. Without it the body keeps
|
|
523
|
+
the `format` it was given.
|
|
524
|
+
|
|
525
|
+
#### Image panel and thumbnail block
|
|
526
|
+
|
|
527
|
+
`ContentBodyEditor` takes an `imagePanel` snippet with `imagePanelOpen` and
|
|
528
|
+
`onCloseImagePanel`: the application's picture chooser/editor opens between
|
|
529
|
+
the toolbar and the text (full width, in the page flow, no modal), the image
|
|
530
|
+
button reports `aria-expanded`/`aria-controls`, focus moves into the panel on
|
|
531
|
+
open and back to the button on close, and Escape inside it asks to close.
|
|
532
|
+
|
|
533
|
+
When content gets a thumbnail, `placeThumbnailInBody(body, format, image)`
|
|
534
|
+
also shows it in the body at the standard spot for its shape
|
|
535
|
+
(`thumbnailPlacementForSize`: width ÷ height ≥ 1.3 is a full-width header at
|
|
536
|
+
the top; portrait or square floats right of the first paragraph, stacking full
|
|
537
|
+
width on phones). The block is marked (`data-smrt-thumbnail` in HTML, the
|
|
538
|
+
image title `smrt-thumbnail:<placement>` in Markdown) so placing again
|
|
539
|
+
replaces it and `removeThumbnailFromBody` clears it.
|
|
540
|
+
`resolveContentEditorImageDimensions(asset, src)` reads the size from the
|
|
541
|
+
asset or by loading the image. Public pages render stored bodies of either
|
|
542
|
+
format with `renderContentBodyHtml(body, format, { thumbnailSrc })` (or
|
|
543
|
+
`ContentBodyRenderer`), which sanitizes, turns the Markdown token into the same
|
|
544
|
+
marked `<img>`, and can point the thumbnail at the page's own asset URL.
|
|
545
|
+
|
|
546
|
+
#### Body sanitizing
|
|
547
|
+
|
|
548
|
+
`sanitizeHtml`, `renderMarkdownToHtml`, `renderContentBodyHtml`, and the
|
|
549
|
+
editor load/save helpers parse bodies with
|
|
550
|
+
[sanitize-html](https://github.com/apostrophecms/sanitize-html) (htmlparser2,
|
|
551
|
+
no DOM — identical in Node SSR/prerender and the browser) against an
|
|
552
|
+
allowlist: headings, paragraphs, lists, blockquote, `pre`/`code`, tables,
|
|
553
|
+
figures, inline emphasis, links (`http(s)`, `mailto`, `tel`, relative;
|
|
554
|
+
`target="_blank"` gets `rel="noopener noreferrer"`), and images (`http(s)`,
|
|
555
|
+
relative, raster `data:image/*` — never SVG) with the editor's
|
|
556
|
+
`data-smrt-*` layout and thumbnail markers and a `width`/`max-width`/
|
|
557
|
+
`height: auto` style. Everything else is removed: scripts, event handlers,
|
|
558
|
+
`javascript:`/`vbscript:` URLs, iframes and embeds (there is no embed
|
|
559
|
+
feature), SVG/MathML, forms, media, classes, ids, and other CSS. Raw-text and
|
|
560
|
+
foreign-content elements are dropped with their content, and the output is
|
|
561
|
+
re-serialized with escaped text, so nested or malformed markup cannot
|
|
562
|
+
reassemble into a live tag.
|
|
563
|
+
|
|
488
564
|
### Governance
|
|
489
565
|
|
|
490
566
|
| Component | Props | Description |
|
|
@@ -650,3 +726,13 @@ also get standard CRUD + custom collection-level endpoints.
|
|
|
650
726
|
| `@happyvertical/geo` | Static map thumbnails |
|
|
651
727
|
| `@happyvertical/images` | Headline card rendering |
|
|
652
728
|
| `yaml` | YAML frontmatter parsing |
|
|
729
|
+
|
|
730
|
+
Browser QA: `pnpm test:e2e` builds package dependencies and runs Playwright.
|
|
731
|
+
Playwright resets its fixture-owned `.smrt/e2e-playwright.db`, builds the app
|
|
732
|
+
with the normal SvelteKit toolchain, and serves compiled assets with Vite preview
|
|
733
|
+
on `127.0.0.1:4173`. App output stays in `.svelte-kit/output/`, separate from the
|
|
734
|
+
published library's `dist/`. Build failures or an occupied port fail startup.
|
|
735
|
+
The six maintained scenarios retain their authorization and behavior assertions;
|
|
736
|
+
failure traces, screenshots, and videos remain available for diagnosis.
|
|
737
|
+
Set `PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/path/to/chromium` to use an installed
|
|
738
|
+
Chromium when Playwright's managed browser dependencies are unavailable.
|
package/dist/body-format.d.ts
CHANGED
|
@@ -7,6 +7,13 @@ export interface ContentBodyImage {
|
|
|
7
7
|
assetId?: string;
|
|
8
8
|
placement?: ContentBodyImagePlacement;
|
|
9
9
|
width?: number;
|
|
10
|
+
/** True for the content's thumbnail block (see `placeThumbnailInBody`). */
|
|
11
|
+
thumbnail?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* True for a picture in the story the person chose as the main picture
|
|
14
|
+
* (see `setBodyMainImage`).
|
|
15
|
+
*/
|
|
16
|
+
main?: boolean;
|
|
10
17
|
index: number;
|
|
11
18
|
}
|
|
12
19
|
export declare const DEFAULT_CONTENT_BODY_FORMAT: ContentBodyFormat;
|
|
@@ -15,6 +22,14 @@ export declare function looksLikeHtml(value: unknown): boolean;
|
|
|
15
22
|
export declare function resolveBodyFormat(format: unknown, body?: unknown): ContentBodyFormat;
|
|
16
23
|
export declare function escapeHtml(value: string): string;
|
|
17
24
|
export declare function escapeAttribute(value: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Allowlist-sanitize body HTML for rendering with `{@html}`: headings,
|
|
27
|
+
* paragraphs, lists, quotes, links (`http(s)`/`mailto`/`tel`/relative),
|
|
28
|
+
* images (`http(s)`/relative/raster `data:`) with the editor's layout and
|
|
29
|
+
* thumbnail markers, figures, tables, code, and inline emphasis. Everything
|
|
30
|
+
* else — scripts, event handlers, `javascript:` URLs, iframes/embeds,
|
|
31
|
+
* SVG/MathML, forms, classes, and all CSS except image width — is removed.
|
|
32
|
+
*/
|
|
18
33
|
export declare function sanitizeHtml(value: string): string;
|
|
19
34
|
export declare function renderMarkdownToHtml(markdown: string): string;
|
|
20
35
|
export declare function stripHtml(value: string): string;
|
|
@@ -41,4 +56,93 @@ export interface ImageAssetLike {
|
|
|
41
56
|
export declare function getImageSource(asset: ImageAssetLike | null | undefined): string;
|
|
42
57
|
export declare function getImageAlt(asset: ImageAssetLike | null | undefined): string;
|
|
43
58
|
export declare function imageAssetToHtml(asset: ImageAssetLike | null | undefined): string;
|
|
59
|
+
/** Where the thumbnail block sits: header (`full`) or floated `right`. */
|
|
60
|
+
export type ContentBodyThumbnailPlacement = 'full' | 'right';
|
|
61
|
+
/** Width ÷ height at or above which a thumbnail counts as wide (a header). */
|
|
62
|
+
export declare const THUMBNAIL_WIDE_ASPECT_RATIO = 1.3;
|
|
63
|
+
/** Attribute that marks the thumbnail block's `<img>` in HTML bodies. */
|
|
64
|
+
export declare const BODY_THUMBNAIL_ATTRIBUTE = "data-smrt-thumbnail";
|
|
65
|
+
/**
|
|
66
|
+
* Attribute that marks a picture already in the story as the one the person
|
|
67
|
+
* chose as the main picture (HTML bodies). It travels with the picture, so a
|
|
68
|
+
* choice sticks when pictures are moved or reordered.
|
|
69
|
+
*/
|
|
70
|
+
export declare const BODY_MAIN_IMAGE_ATTRIBUTE = "data-smrt-main";
|
|
71
|
+
export interface ContentBodyThumbnail {
|
|
72
|
+
/** Image URL written into the body. */
|
|
73
|
+
src: string;
|
|
74
|
+
/** Alternative text (default: empty — the article title usually says it). */
|
|
75
|
+
alt?: string | null;
|
|
76
|
+
/** Asset id, kept on the HTML `<img>` as `data-smrt-asset-id`. */
|
|
77
|
+
assetId?: string | null;
|
|
78
|
+
/** Natural width in pixels, used with `height` to choose the placement. */
|
|
79
|
+
width?: number | null;
|
|
80
|
+
/** Natural height in pixels. */
|
|
81
|
+
height?: number | null;
|
|
82
|
+
/** Force a placement instead of deriving it from `width`/`height`. */
|
|
83
|
+
placement?: ContentBodyThumbnailPlacement;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* The standard thumbnail placement for an image of this size: wide
|
|
87
|
+
* (ratio ≥ {@link THUMBNAIL_WIDE_ASPECT_RATIO}) → `full` header; portrait or
|
|
88
|
+
* square → `right`. Unknown sizes default to `full`.
|
|
89
|
+
*/
|
|
90
|
+
export declare function thumbnailPlacementForSize(width: unknown, height: unknown): ContentBodyThumbnailPlacement;
|
|
91
|
+
/** True when the body already contains a thumbnail block. */
|
|
92
|
+
export declare function bodyHasThumbnail(body: string | null | undefined, format?: ContentBodyFormat | null): boolean;
|
|
93
|
+
/** The body without its thumbnail block (unchanged when it has none). */
|
|
94
|
+
export declare function removeThumbnailFromBody(body: string | null | undefined, format?: ContentBodyFormat | null): string;
|
|
95
|
+
/**
|
|
96
|
+
* Put `thumbnail` into `body` at its standard spot, replacing any previous
|
|
97
|
+
* thumbnail block: `full` goes first in the body; `right` goes immediately
|
|
98
|
+
* before the first paragraph, floated so that paragraph wraps beside it.
|
|
99
|
+
* The placement comes from `thumbnail.placement` or its width/height
|
|
100
|
+
* ({@link thumbnailPlacementForSize}). Returns the body unchanged (minus any
|
|
101
|
+
* old block) when the image has no usable `src`.
|
|
102
|
+
*/
|
|
103
|
+
export declare function placeThumbnailInBody(body: string | null | undefined, format: ContentBodyFormat | null | undefined, thumbnail: ContentBodyThumbnail): string;
|
|
104
|
+
export interface RenderContentBodyOptions {
|
|
105
|
+
/**
|
|
106
|
+
* Replace the thumbnail block's image URL — for renderers (e.g. a public
|
|
107
|
+
* site) that serve assets from a different origin than the editor that
|
|
108
|
+
* wrote the body.
|
|
109
|
+
*/
|
|
110
|
+
thumbnailSrc?: string | null;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Sanitized HTML for a stored body in either format — what a public page
|
|
114
|
+
* renders. Markdown thumbnail blocks come out as the same marked `<img>` as
|
|
115
|
+
* HTML ones, so one stylesheet handles both.
|
|
116
|
+
*/
|
|
117
|
+
export declare function renderContentBodyHtml(body: string | null | undefined, format?: ContentBodyFormat | null, options?: RenderContentBodyOptions): string;
|
|
118
|
+
/** How the main picture was decided. */
|
|
119
|
+
export type ContentMainPictureMode = 'chosen' | 'automatic' | 'none';
|
|
120
|
+
export interface ContentMainPicture {
|
|
121
|
+
/** The main picture's asset id, or null when there is none. */
|
|
122
|
+
assetId: string | null;
|
|
123
|
+
/**
|
|
124
|
+
* `chosen`: the person picked it. `automatic`: the first picture in the
|
|
125
|
+
* story. `none`: the story has no pictures with an asset id, so the
|
|
126
|
+
* current value (passed in) is kept as it is.
|
|
127
|
+
*/
|
|
128
|
+
mode: ContentMainPictureMode;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* The content's main picture according to its body: the chosen picture when
|
|
132
|
+
* there is one, otherwise the first picture in the story. Returns `none`
|
|
133
|
+
* with `currentAssetId` when the story has no pictures with asset ids, so
|
|
134
|
+
* a caller never clears a thumbnail set some other way.
|
|
135
|
+
*/
|
|
136
|
+
export declare function resolveBodyMainPicture(body: string | null | undefined, format?: ContentBodyFormat | null, currentAssetId?: string | null): ContentMainPicture;
|
|
137
|
+
/**
|
|
138
|
+
* Mark the first picture in the story with `assetId` as the chosen main
|
|
139
|
+
* picture, clearing the mark from every other picture. `null` clears the
|
|
140
|
+
* choice, so the first picture is the main picture again. Works on HTML
|
|
141
|
+
* bodies and on Markdown ones (where the mark is the image title
|
|
142
|
+
* `smrt-image <id> main`); a body without that picture is returned with only
|
|
143
|
+
* the old marks cleared.
|
|
144
|
+
*/
|
|
145
|
+
export declare function setBodyMainImage(body: string | null | undefined, format: ContentBodyFormat | null | undefined, assetId: string | null): string;
|
|
146
|
+
/** True when the story contains the picture with this asset id (not the thumbnail block). */
|
|
147
|
+
export declare function bodyHasImage(body: string | null | undefined, format: ContentBodyFormat | null | undefined, assetId: string): boolean;
|
|
44
148
|
//# sourceMappingURL=body-format.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"body-format.d.ts","sourceRoot":"","sources":["../src/body-format.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"body-format.d.ts","sourceRoot":"","sources":["../src/body-format.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,MAAM,CAAC;AACpD,MAAM,MAAM,yBAAyB,GACjC,OAAO,GACP,MAAM,GACN,OAAO,GACP,QAAQ,GACR,MAAM,CAAC;AAEX,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,yBAAyB,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,2BAA2B,EAAE,iBAA0B,CAAC;AAwCrE,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,iBAAiB,CAE5B;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAErD;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,EACf,IAAI,GAAE,OAAY,GACjB,iBAAiB,CAcnB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiBhD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAyaD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AA6CD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAqE7D;AA6GD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAmFD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgCnD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWxD;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,GACxB,MAAM,CAIR;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,GACxB,MAAM,CAIR;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,iBAAsD,GAC7D,gBAAgB,EAAE,CAmHpB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GACvC,MAAM,CAER;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAE5E;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GACvC,MAAM,CAeR;AAiBD,0EAA0E;AAC1E,MAAM,MAAM,6BAA6B,GAAG,MAAM,GAAG,OAAO,CAAC;AAE7D,8EAA8E;AAC9E,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAE9D;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,mBAAmB,CAAC;AAI1D,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sEAAsE;IACtE,SAAS,CAAC,EAAE,6BAA6B,CAAC;CAC3C;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,OAAO,GACd,6BAA6B,CAO/B;AA4ED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,GAChC,OAAO,CAOT;AAED,yEAAyE;AACzE,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,GAChC,MAAM,CAsBR;AA8CD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC5C,SAAS,EAAE,oBAAoB,GAC9B,MAAM,CAqCR;AAED,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,EACjC,OAAO,GAAE,wBAA6B,GACrC,MAAM,CAcR;AAcD,wCAAwC;AACxC,MAAM,MAAM,sBAAsB,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;AAErE,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;OAIG;IACH,IAAI,EAAE,sBAAsB,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,EACjC,cAAc,GAAE,MAAM,GAAG,IAAW,GACnC,kBAAkB,CAiBpB;AASD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC5C,OAAO,EAAE,MAAM,GAAG,IAAI,GACrB,MAAM,CA0CR;AAED,6FAA6F;AAC7F,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC5C,OAAO,EAAE,MAAM,GACd,OAAO,CAQT"}
|