foundrycms 0.1.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/LICENSE +21 -0
- package/README.md +152 -0
- package/dist/__tests__/foundry.test.d.ts +2 -0
- package/dist/__tests__/foundry.test.d.ts.map +1 -0
- package/dist/__tests__/foundry.test.js +1013 -0
- package/dist/__tests__/foundry.test.js.map +1 -0
- package/dist/config-manager.d.ts +33 -0
- package/dist/config-manager.d.ts.map +1 -0
- package/dist/config-manager.js +169 -0
- package/dist/config-manager.js.map +1 -0
- package/dist/hook-system.d.ts +61 -0
- package/dist/hook-system.d.ts.map +1 -0
- package/dist/hook-system.js +114 -0
- package/dist/hook-system.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/page-builder/element-registry.d.ts +47 -0
- package/dist/page-builder/element-registry.d.ts.map +1 -0
- package/dist/page-builder/element-registry.js +98 -0
- package/dist/page-builder/element-registry.js.map +1 -0
- package/dist/page-builder/elements/index.d.ts +22 -0
- package/dist/page-builder/elements/index.d.ts.map +1 -0
- package/dist/page-builder/elements/index.js +770 -0
- package/dist/page-builder/elements/index.js.map +1 -0
- package/dist/page-builder/renderer.d.ts +14 -0
- package/dist/page-builder/renderer.d.ts.map +1 -0
- package/dist/page-builder/renderer.js +240 -0
- package/dist/page-builder/renderer.js.map +1 -0
- package/dist/page-builder/serializer.d.ts +1220 -0
- package/dist/page-builder/serializer.d.ts.map +1 -0
- package/dist/page-builder/serializer.js +111 -0
- package/dist/page-builder/serializer.js.map +1 -0
- package/dist/page-builder/template-studio.d.ts +37 -0
- package/dist/page-builder/template-studio.d.ts.map +1 -0
- package/dist/page-builder/template-studio.js +923 -0
- package/dist/page-builder/template-studio.js.map +1 -0
- package/dist/page-builder/types.d.ts +99 -0
- package/dist/page-builder/types.d.ts.map +1 -0
- package/dist/page-builder/types.js +5 -0
- package/dist/page-builder/types.js.map +1 -0
- package/dist/plugin-system.d.ts +128 -0
- package/dist/plugin-system.d.ts.map +1 -0
- package/dist/plugin-system.js +252 -0
- package/dist/plugin-system.js.map +1 -0
- package/dist/plugins/communication.d.ts +6 -0
- package/dist/plugins/communication.d.ts.map +1 -0
- package/dist/plugins/communication.js +922 -0
- package/dist/plugins/communication.js.map +1 -0
- package/dist/plugins/core.d.ts +6 -0
- package/dist/plugins/core.d.ts.map +1 -0
- package/dist/plugins/core.js +675 -0
- package/dist/plugins/core.js.map +1 -0
- package/dist/plugins/growth.d.ts +6 -0
- package/dist/plugins/growth.d.ts.map +1 -0
- package/dist/plugins/growth.js +668 -0
- package/dist/plugins/growth.js.map +1 -0
- package/dist/plugins/index.d.ts +8 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +43 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/operations.d.ts +7 -0
- package/dist/plugins/operations.d.ts.map +1 -0
- package/dist/plugins/operations.js +930 -0
- package/dist/plugins/operations.js.map +1 -0
- package/dist/theme/presets.d.ts +8 -0
- package/dist/theme/presets.d.ts.map +1 -0
- package/dist/theme/presets.js +257 -0
- package/dist/theme/presets.js.map +1 -0
- package/dist/theme/types.d.ts +83 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +5 -0
- package/dist/theme/types.js.map +1 -0
- package/package.json +38 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// @foundry/core — barrel export
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Plugin system
|
|
5
|
+
export { PluginRegistry, } from './plugin-system.js';
|
|
6
|
+
// Hook system
|
|
7
|
+
export { HookEngine, } from './hook-system.js';
|
|
8
|
+
// Configuration
|
|
9
|
+
export { ConfigManager } from './config-manager.js';
|
|
10
|
+
// Element registry
|
|
11
|
+
export { ElementRegistry, } from './page-builder/element-registry.js';
|
|
12
|
+
// Page builder renderer
|
|
13
|
+
export { renderPage, renderRow, renderColumn, renderElement, escapeHtml, escapeAttr, } from './page-builder/renderer.js';
|
|
14
|
+
// Page builder elements
|
|
15
|
+
export { defaultElements, registerDefaultElements, rowElement, columnElement, spacerElement, dividerElement, headingElement, textBlockElement, buttonElement, iconElement, imageElement, galleryElement, videoElement, pricingTableElement, testimonialElement, accordionElement, callToActionElement, } from './page-builder/elements/index.js';
|
|
16
|
+
// Page builder serializer
|
|
17
|
+
export { serializePage, deserializePage, validatePageData, PageDataSchema, RowSchema, ColumnSchema, ElementSchema, PageMetaSchema, } from './page-builder/serializer.js';
|
|
18
|
+
// Template studio
|
|
19
|
+
export { TemplateStudio, defaultTemplates, registerDefaultTemplates, heroSplitTemplate, aboutTeamTemplate, servicesCardsTemplate, pricingThreeTierTemplate, testimonialsCarouselTemplate, ctaBannerTemplate, contactFormTemplate, footerMultiColumnTemplate, galleryMasonryTemplate, featuresAlternatingTemplate, } from './page-builder/template-studio.js';
|
|
20
|
+
// Theme presets
|
|
21
|
+
export { architectPreset, quantumPreset, elegantPreset, builtInPresets, getPresetById, } from './theme/presets.js';
|
|
22
|
+
// Plugins
|
|
23
|
+
export {
|
|
24
|
+
// Core
|
|
25
|
+
forgePlugin, ledgerPlugin, compassPlugin, oraclePlugin,
|
|
26
|
+
// Growth
|
|
27
|
+
scoutPlugin, beaconPlugin, chroniclePlugin, atlasPlugin,
|
|
28
|
+
// Operations
|
|
29
|
+
rosterPlugin, depotPlugin, stagePlugin, blueprintPlugin, pulsePlugin,
|
|
30
|
+
// Communication
|
|
31
|
+
relayPlugin, canvasPlugin, marketPlugin, sentinelPlugin,
|
|
32
|
+
// All plugins array
|
|
33
|
+
allPlugins, } from './plugins/index.js';
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Convenience factory — create a fully wired Foundry core instance
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
import { HookEngine } from './hook-system.js';
|
|
38
|
+
import { ConfigManager } from './config-manager.js';
|
|
39
|
+
import { PluginRegistry } from './plugin-system.js';
|
|
40
|
+
import { ElementRegistry } from './page-builder/element-registry.js';
|
|
41
|
+
import { TemplateStudio } from './page-builder/template-studio.js';
|
|
42
|
+
import { registerDefaultElements } from './page-builder/elements/index.js';
|
|
43
|
+
import { registerDefaultTemplates } from './page-builder/template-studio.js';
|
|
44
|
+
/**
|
|
45
|
+
* Create a new Foundry CMS core instance with all subsystems wired together.
|
|
46
|
+
*
|
|
47
|
+
* ```ts
|
|
48
|
+
* import { createFoundry } from '@foundry/core';
|
|
49
|
+
*
|
|
50
|
+
* const foundry = createFoundry();
|
|
51
|
+
* foundry.plugins.register(myPlugin);
|
|
52
|
+
* await foundry.plugins.activateAll();
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export function createFoundry(options) {
|
|
56
|
+
const hooks = new HookEngine();
|
|
57
|
+
const config = new ConfigManager(hooks);
|
|
58
|
+
const plugins = new PluginRegistry(hooks, config);
|
|
59
|
+
const elements = new ElementRegistry();
|
|
60
|
+
const templates = new TemplateStudio();
|
|
61
|
+
if (options?.config) {
|
|
62
|
+
config.load(options.config);
|
|
63
|
+
}
|
|
64
|
+
return { hooks, config, plugins, elements, templates };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Create a Foundry instance with all default elements and templates pre-registered.
|
|
68
|
+
*
|
|
69
|
+
* ```ts
|
|
70
|
+
* import { createFoundryWithDefaults } from '@foundry/core';
|
|
71
|
+
*
|
|
72
|
+
* const foundry = createFoundryWithDefaults();
|
|
73
|
+
* // 15 elements + 10 templates ready to go
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export function createFoundryWithDefaults(options) {
|
|
77
|
+
const instance = createFoundry(options);
|
|
78
|
+
registerDefaultElements(instance.elements);
|
|
79
|
+
registerDefaultTemplates(instance.templates);
|
|
80
|
+
return instance;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export interface ElementDefinition {
|
|
3
|
+
/** Unique type key (e.g. 'text-block', 'image', 'button') */
|
|
4
|
+
type: string;
|
|
5
|
+
/** Human-readable display name */
|
|
6
|
+
name: string;
|
|
7
|
+
/** Category for organising in the add-element panel */
|
|
8
|
+
category: ElementCategory;
|
|
9
|
+
/** Icon identifier (icon name, SVG string, or URL) */
|
|
10
|
+
icon: string;
|
|
11
|
+
/** Description shown in the element picker */
|
|
12
|
+
description?: string;
|
|
13
|
+
/** Default settings applied when the element is first added */
|
|
14
|
+
defaultSettings: Record<string, any>;
|
|
15
|
+
/** Zod schema for validating element settings */
|
|
16
|
+
settingsSchema: z.ZodType<any>;
|
|
17
|
+
/** Server-side render function: takes settings, returns HTML string */
|
|
18
|
+
render: (settings: Record<string, any>) => string;
|
|
19
|
+
/** Reference to the render component (framework-agnostic string key) */
|
|
20
|
+
renderComponent?: string;
|
|
21
|
+
/** Reference to the settings panel component */
|
|
22
|
+
settingsComponent?: string;
|
|
23
|
+
/** Whether the element can contain child elements */
|
|
24
|
+
allowsChildren?: boolean;
|
|
25
|
+
/** Keywords for search in the element picker */
|
|
26
|
+
keywords?: string[];
|
|
27
|
+
/** Preview image URL */
|
|
28
|
+
previewImage?: string;
|
|
29
|
+
}
|
|
30
|
+
export type ElementCategory = 'content' | 'media' | 'layout' | 'interactive' | 'data' | 'social' | 'commerce' | 'forms' | 'advanced' | string;
|
|
31
|
+
export declare class ElementRegistry {
|
|
32
|
+
private elements;
|
|
33
|
+
register(element: ElementDefinition): void;
|
|
34
|
+
unregister(type: string): boolean;
|
|
35
|
+
get(type: string): ElementDefinition | undefined;
|
|
36
|
+
has(type: string): boolean;
|
|
37
|
+
list(): ElementDefinition[];
|
|
38
|
+
listByCategory(): Map<string, ElementDefinition[]>;
|
|
39
|
+
search(query: string): ElementDefinition[];
|
|
40
|
+
validateSettings(type: string, settings: Record<string, any>): {
|
|
41
|
+
success: boolean;
|
|
42
|
+
error?: string;
|
|
43
|
+
};
|
|
44
|
+
getDefaultSettings(type: string): Record<string, any> | undefined;
|
|
45
|
+
get count(): number;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=element-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-registry.d.ts","sourceRoot":"","sources":["../../src/page-builder/element-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,QAAQ,EAAE,eAAe,CAAC;IAC1B,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,iDAAiD;IACjD,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,uEAAuE;IACvE,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC;IAClD,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qDAAqD;IACrD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,wBAAwB;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,OAAO,GACP,QAAQ,GACR,aAAa,GACb,MAAM,GACN,QAAQ,GACR,UAAU,GACV,OAAO,GACP,UAAU,GACV,MAAM,CAAC;AAMX,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAwC;IAMxD,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAa1C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAQhD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ1B,IAAI,IAAI,iBAAiB,EAAE;IAQ3B,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAkBlD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAgB1C,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAkBvC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS;IASjE,IAAI,KAAK,IAAI,MAAM,CAElB;CACF"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Element Registry
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
export class ElementRegistry {
|
|
5
|
+
elements = new Map();
|
|
6
|
+
// -----------------------------------------------------------------------
|
|
7
|
+
// register — add an element definition
|
|
8
|
+
// -----------------------------------------------------------------------
|
|
9
|
+
register(element) {
|
|
10
|
+
if (this.elements.has(element.type)) {
|
|
11
|
+
throw new Error(`Element type "${element.type}" is already registered. Use a unique type key.`);
|
|
12
|
+
}
|
|
13
|
+
this.elements.set(element.type, element);
|
|
14
|
+
}
|
|
15
|
+
// -----------------------------------------------------------------------
|
|
16
|
+
// unregister — remove an element definition
|
|
17
|
+
// -----------------------------------------------------------------------
|
|
18
|
+
unregister(type) {
|
|
19
|
+
return this.elements.delete(type);
|
|
20
|
+
}
|
|
21
|
+
// -----------------------------------------------------------------------
|
|
22
|
+
// get — retrieve a single element definition by type
|
|
23
|
+
// -----------------------------------------------------------------------
|
|
24
|
+
get(type) {
|
|
25
|
+
return this.elements.get(type);
|
|
26
|
+
}
|
|
27
|
+
// -----------------------------------------------------------------------
|
|
28
|
+
// has — check if a type is registered
|
|
29
|
+
// -----------------------------------------------------------------------
|
|
30
|
+
has(type) {
|
|
31
|
+
return this.elements.has(type);
|
|
32
|
+
}
|
|
33
|
+
// -----------------------------------------------------------------------
|
|
34
|
+
// list — return all registered elements
|
|
35
|
+
// -----------------------------------------------------------------------
|
|
36
|
+
list() {
|
|
37
|
+
return Array.from(this.elements.values());
|
|
38
|
+
}
|
|
39
|
+
// -----------------------------------------------------------------------
|
|
40
|
+
// listByCategory — group elements by category
|
|
41
|
+
// -----------------------------------------------------------------------
|
|
42
|
+
listByCategory() {
|
|
43
|
+
const grouped = new Map();
|
|
44
|
+
for (const element of this.elements.values()) {
|
|
45
|
+
const cat = element.category;
|
|
46
|
+
if (!grouped.has(cat)) {
|
|
47
|
+
grouped.set(cat, []);
|
|
48
|
+
}
|
|
49
|
+
grouped.get(cat).push(element);
|
|
50
|
+
}
|
|
51
|
+
return grouped;
|
|
52
|
+
}
|
|
53
|
+
// -----------------------------------------------------------------------
|
|
54
|
+
// search — find elements by keyword or name
|
|
55
|
+
// -----------------------------------------------------------------------
|
|
56
|
+
search(query) {
|
|
57
|
+
const q = query.toLowerCase();
|
|
58
|
+
return this.list().filter((el) => {
|
|
59
|
+
if (el.name.toLowerCase().includes(q))
|
|
60
|
+
return true;
|
|
61
|
+
if (el.type.toLowerCase().includes(q))
|
|
62
|
+
return true;
|
|
63
|
+
if (el.description?.toLowerCase().includes(q))
|
|
64
|
+
return true;
|
|
65
|
+
if (el.keywords?.some((kw) => kw.toLowerCase().includes(q)))
|
|
66
|
+
return true;
|
|
67
|
+
return false;
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
// -----------------------------------------------------------------------
|
|
71
|
+
// validateSettings — validate element settings against its schema
|
|
72
|
+
// -----------------------------------------------------------------------
|
|
73
|
+
validateSettings(type, settings) {
|
|
74
|
+
const element = this.elements.get(type);
|
|
75
|
+
if (!element) {
|
|
76
|
+
return { success: false, error: `Unknown element type "${type}"` };
|
|
77
|
+
}
|
|
78
|
+
const result = element.settingsSchema.safeParse(settings);
|
|
79
|
+
if (!result.success) {
|
|
80
|
+
return { success: false, error: result.error.message };
|
|
81
|
+
}
|
|
82
|
+
return { success: true };
|
|
83
|
+
}
|
|
84
|
+
// -----------------------------------------------------------------------
|
|
85
|
+
// getDefaultSettings — get merged default settings for an element type
|
|
86
|
+
// -----------------------------------------------------------------------
|
|
87
|
+
getDefaultSettings(type) {
|
|
88
|
+
const element = this.elements.get(type);
|
|
89
|
+
return element ? { ...element.defaultSettings } : undefined;
|
|
90
|
+
}
|
|
91
|
+
// -----------------------------------------------------------------------
|
|
92
|
+
// count
|
|
93
|
+
// -----------------------------------------------------------------------
|
|
94
|
+
get count() {
|
|
95
|
+
return this.elements.size;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=element-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element-registry.js","sourceRoot":"","sources":["../../src/page-builder/element-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ElementDefinition } from '../element-registry.js';
|
|
2
|
+
export declare const rowElement: ElementDefinition;
|
|
3
|
+
export declare const columnElement: ElementDefinition;
|
|
4
|
+
export declare const spacerElement: ElementDefinition;
|
|
5
|
+
export declare const dividerElement: ElementDefinition;
|
|
6
|
+
export declare const headingElement: ElementDefinition;
|
|
7
|
+
export declare const textBlockElement: ElementDefinition;
|
|
8
|
+
export declare const buttonElement: ElementDefinition;
|
|
9
|
+
export declare const iconElement: ElementDefinition;
|
|
10
|
+
export declare const imageElement: ElementDefinition;
|
|
11
|
+
export declare const galleryElement: ElementDefinition;
|
|
12
|
+
export declare const videoElement: ElementDefinition;
|
|
13
|
+
export declare const pricingTableElement: ElementDefinition;
|
|
14
|
+
export declare const testimonialElement: ElementDefinition;
|
|
15
|
+
export declare const accordionElement: ElementDefinition;
|
|
16
|
+
export declare const callToActionElement: ElementDefinition;
|
|
17
|
+
export declare const defaultElements: ElementDefinition[];
|
|
18
|
+
/**
|
|
19
|
+
* Register all default elements into an ElementRegistry instance.
|
|
20
|
+
*/
|
|
21
|
+
export declare function registerDefaultElements(registry: import('../element-registry.js').ElementRegistry): void;
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/page-builder/elements/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAuBhE,eAAO,MAAM,UAAU,EAAE,iBAkCxB,CAAC;AAMF,eAAO,MAAM,aAAa,EAAE,iBAuB3B,CAAC;AAMF,eAAO,MAAM,aAAa,EAAE,iBAe3B,CAAC;AAMF,eAAO,MAAM,cAAc,EAAE,iBAwB5B,CAAC;AAMF,eAAO,MAAM,cAAc,EAAE,iBAoC5B,CAAC;AAMF,eAAO,MAAM,gBAAgB,EAAE,iBAkC9B,CAAC;AAMF,eAAO,MAAM,aAAa,EAAE,iBAgD3B,CAAC;AAMF,eAAO,MAAM,WAAW,EAAE,iBAyBzB,CAAC;AAMF,eAAO,MAAM,YAAY,EAAE,iBAiD1B,CAAC;AAYF,eAAO,MAAM,cAAc,EAAE,iBA0C5B,CAAC;AAMF,eAAO,MAAM,YAAY,EAAE,iBA4E1B,CAAC;AAWF,eAAO,MAAM,mBAAmB,EAAE,iBAqEjC,CAAC;AAMF,eAAO,MAAM,kBAAkB,EAAE,iBA0EhC,CAAC;AAWF,eAAO,MAAM,gBAAgB,EAAE,iBAyD9B,CAAC;AAMF,eAAO,MAAM,mBAAmB,EAAE,iBAuDjC,CAAC;AAMF,eAAO,MAAM,eAAe,EAAE,iBAAiB,EAgB9C,CAAC;AAEF;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,wBAAwB,EAAE,eAAe,GAAG,IAAI,CAMxG"}
|