shaders 2.5.101 → 2.5.103
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/dist/core/{FilmGrain-yBeLmqwl.js → FilmGrain-DSJiMtEp.js} +3 -3
- package/dist/core/Halftone-XFa7by1s.js +287 -0
- package/dist/core/VHS-CQJ1hV_D.js +123 -0
- package/dist/core/{VideoTexture-DJrkry82.js → VideoTexture-DnHIs4pp.js} +1 -1
- package/dist/core/{WebcamTexture-Cf8J7JB1.js → WebcamTexture-XBDo2kgN.js} +1 -1
- package/dist/core/index.js +13 -12
- package/dist/core/registry.js +13 -12
- package/dist/core/{shaderRegistry-X16MNgs8.js → shaderRegistry-BWuH2me2.js} +20 -18
- package/dist/core/shaderRegistry.d.ts.map +1 -1
- package/dist/core/shaders/FilmGrain/index.d.ts.map +1 -1
- package/dist/core/shaders/FilmGrain/index.js +1 -1
- package/dist/core/shaders/Halftone/index.d.ts +76 -4
- package/dist/core/shaders/Halftone/index.d.ts.map +1 -1
- package/dist/core/shaders/Halftone/index.js +2 -1
- package/dist/core/shaders/VHS/index.d.ts +32 -0
- package/dist/core/shaders/VHS/index.d.ts.map +1 -0
- package/dist/core/shaders/VHS/index.js +3 -0
- package/dist/core/shaders/Vibrance/index.js +1 -1
- package/dist/core/shaders/VideoTexture/index.js +2 -2
- package/dist/core/shaders/Vignette/index.js +1 -1
- package/dist/core/shaders/Voronoi/index.js +1 -1
- package/dist/core/shaders/WaveDistortion/index.js +1 -1
- package/dist/core/shaders/Weave/index.js +1 -1
- package/dist/core/shaders/WebcamTexture/index.js +2 -2
- package/dist/core/shaders/ZoomBlur/index.js +1 -1
- package/dist/js/createShader.js +1 -1
- package/dist/js/utils/generatePresetCode.d.ts.map +1 -1
- package/dist/js/utils/generatePresetCode.js +21 -1
- package/dist/react/Preview.js +1 -0
- package/dist/react/Shader.js +1 -1
- package/dist/react/VHS.js +223 -0
- package/dist/react/components/Halftone.d.ts +7 -2
- package/dist/react/components/Halftone.d.ts.map +1 -1
- package/dist/react/components/VHS.d.ts +35 -0
- package/dist/react/components/VHS.d.ts.map +1 -0
- package/dist/react/engine/Preview.d.ts.map +1 -1
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +2 -1
- package/dist/react/utils/generatePresetCode.d.ts.map +1 -1
- package/dist/react/utils/generatePresetCode.js +21 -1
- package/dist/registry.js +500 -16
- package/dist/solid/components/Halftone.d.ts +7 -2
- package/dist/solid/components/Halftone.d.ts.map +1 -1
- package/dist/solid/components/VHS.d.ts +32 -0
- package/dist/solid/components/VHS.d.ts.map +1 -0
- package/dist/solid/components/VHS.js +228 -0
- package/dist/solid/engine/Preview.d.ts.map +1 -1
- package/dist/solid/engine/Preview.js +190 -188
- package/dist/solid/engine/Shader.js +1 -1
- package/dist/solid/index.d.ts +1 -0
- package/dist/solid/index.d.ts.map +1 -1
- package/dist/solid/index.js +24 -22
- package/dist/solid/utils/generatePresetCode.d.ts.map +1 -1
- package/dist/solid/utils/generatePresetCode.js +21 -1
- package/dist/svelte/components/Halftone.svelte.d.ts +6 -1
- package/dist/svelte/components/VHS.svelte.d.ts +22 -0
- package/dist/svelte/{generatePresetCode-Cdho2JhN.js → generatePresetCode-psTzYsW3.js} +21 -1
- package/dist/svelte/index.d.ts +1 -0
- package/dist/svelte/index.js +631 -431
- package/dist/svelte/source/components/Halftone.svelte +6 -1
- package/dist/svelte/source/components/VHS.svelte +328 -0
- package/dist/svelte/source/engine/Preview.svelte +2 -0
- package/dist/svelte/source/index.js +1 -0
- package/dist/svelte/utils/generatePresetCode.js +1 -1
- package/dist/vue/Halftone.vue_vue_type_script_setup_true_lang.js +13 -2
- package/dist/vue/Preview.vue_vue_type_script_setup_true_lang.js +2 -0
- package/dist/vue/Shader.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/vue/VHS.js +3 -0
- package/dist/vue/VHS.vue_vue_type_script_setup_true_lang.js +216 -0
- package/dist/vue/components/Halftone.vue.d.ts +6 -1
- package/dist/vue/components/Halftone.vue.d.ts.map +1 -1
- package/dist/vue/components/VHS.vue.d.ts +57 -0
- package/dist/vue/components/VHS.vue.d.ts.map +1 -0
- package/dist/vue/index.d.ts +1 -0
- package/dist/vue/index.d.ts.map +1 -1
- package/dist/vue/index.js +2 -1
- package/dist/vue/utils/generatePresetCode.d.ts.map +1 -1
- package/dist/vue/utils/generatePresetCode.js +21 -1
- package/package.json +9 -1
- package/dist/core/Halftone-BVL2oy37.js +0 -67
- /package/dist/core/{Vibrance-dqIV6GBe.js → Vibrance-CGvYDeds.js} +0 -0
- /package/dist/core/{Vignette-DB1wO1dm.js → Vignette-BJaonUVL.js} +0 -0
- /package/dist/core/{Voronoi-C3WIJFWc.js → Voronoi-DZemzWA4.js} +0 -0
- /package/dist/core/{WaveDistortion-BKma8-Ju.js → WaveDistortion--Y-m667K.js} +0 -0
- /package/dist/core/{Weave-xuu_vQ5e.js → Weave-CtyohvHz.js} +0 -0
- /package/dist/core/{ZoomBlur-UcS2iFT2.js → ZoomBlur-BwkhsFRE.js} +0 -0
- /package/dist/core/{browser-ClWxLlIB.js → browser-DTNngPey.js} +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
import { BlendMode, PropDriver, TransformConfig } from '../../core';
|
|
3
|
+
import { ComponentProps } from '../../core/shaders/VHS';
|
|
4
|
+
export type { ComponentProps };
|
|
5
|
+
/**
|
|
6
|
+
* Base props that all shader components have
|
|
7
|
+
*/
|
|
8
|
+
interface BaseShaderProps {
|
|
9
|
+
children?: JSX.Element;
|
|
10
|
+
blendMode?: BlendMode;
|
|
11
|
+
opacity?: number;
|
|
12
|
+
visible?: boolean;
|
|
13
|
+
id?: string;
|
|
14
|
+
maskSource?: string;
|
|
15
|
+
maskType?: string;
|
|
16
|
+
renderOrder?: number;
|
|
17
|
+
transform?: Partial<TransformConfig>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Component-specific props that merge base props with shader-specific props
|
|
21
|
+
* Note: ComponentProps are made optional since they have defaults from the shader definition
|
|
22
|
+
*/
|
|
23
|
+
type ShaderComponentProps = BaseShaderProps & Partial<Omit<ComponentProps, 'wobble' | 'scanlineNoise' | 'smear'>> & {
|
|
24
|
+
wobble?: ComponentProps['wobble'] | PropDriver;
|
|
25
|
+
scanlineNoise?: ComponentProps['scanlineNoise'] | PropDriver;
|
|
26
|
+
smear?: ComponentProps['smear'] | PropDriver;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* The main Solid wrapper component for Shader shader nodes
|
|
30
|
+
*/
|
|
31
|
+
export default function ShaderComponent(props: ShaderComponentProps): JSX.Element;
|
|
32
|
+
//# sourceMappingURL=VHS.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VHS.d.ts","sourceRoot":"","sources":["../../src/components/VHS.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA0F,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAE5H,OAAO,EAGH,KAAK,SAAS,EAId,KAAK,UAAU,EACf,KAAK,eAAe,EACvB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG5E,YAAY,EAAE,cAAc,EAAE,CAAC;AAY/B;;GAEG;AACH,UAAU,eAAe;IACrB,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CACxC;AAOD;;;GAGG;AACH,KAAK,oBAAoB,GAAG,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,eAAe,GAAG,OAAO,CAAC,CAAC,GAAG;IAClH,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;IAC/C,aAAa,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC;IAC7D,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC;CAC9C,CAAC;AAmCF;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,KAAK,EAAE,oBAAoB,eA8NlE"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { createComponent, memo, template, setAttribute, insert, Portal, spread, mergeProps, use } from "solid-js/web";
|
|
2
|
+
import { splitProps, createUniqueId, createMemo, createSignal, onMount, onCleanup, createEffect } from "solid-js";
|
|
3
|
+
import { createUniformsMap } from "../../core/index.js";
|
|
4
|
+
import { setColorSpaceMode } from "../../core/utilities/transformations/index.js";
|
|
5
|
+
import { componentDefinition } from "../../core/shaders/VHS/index.js";
|
|
6
|
+
import { useShaderContext, ShaderContext } from "../engine/Shader.js";
|
|
7
|
+
var _tmpl$ = /* @__PURE__ */ template(`<span style=display:contents>`), _tmpl$2 = /* @__PURE__ */ template(`<canvas>`);
|
|
8
|
+
let _experimentalWarnedOnce = false;
|
|
9
|
+
if (componentDefinition.experimental && !_experimentalWarnedOnce) {
|
|
10
|
+
_experimentalWarnedOnce = true;
|
|
11
|
+
const _e = componentDefinition.experimental;
|
|
12
|
+
console.info(`%c⚠ [Shaders] ${componentDefinition.name} is experimental: ${_e.message}`, "color: #f59e0b; font-weight: bold");
|
|
13
|
+
}
|
|
14
|
+
function isPropDriver(value) {
|
|
15
|
+
return typeof value === "object" && value !== null && "type" in value && (value.type === "map" || value.type === "mouse" || value.type === "mouse-position" || value.type === "auto-animate");
|
|
16
|
+
}
|
|
17
|
+
const DEFAULT_TRANSFORM = {
|
|
18
|
+
offsetX: 0,
|
|
19
|
+
offsetY: 0,
|
|
20
|
+
rotation: 0,
|
|
21
|
+
scale: 1,
|
|
22
|
+
anchorX: 0.5,
|
|
23
|
+
anchorY: 0.5,
|
|
24
|
+
edges: "transparent"
|
|
25
|
+
};
|
|
26
|
+
const defaultProps = {
|
|
27
|
+
blendMode: "normal",
|
|
28
|
+
visible: true
|
|
29
|
+
// opacity intentionally has no default - handled by renderer
|
|
30
|
+
// transform intentionally has no default - handled by effectiveTransform
|
|
31
|
+
};
|
|
32
|
+
try {
|
|
33
|
+
if (componentDefinition && componentDefinition.props) {
|
|
34
|
+
Object.entries(componentDefinition.props).forEach(([key, config]) => {
|
|
35
|
+
const propConfig = config;
|
|
36
|
+
if (propConfig && typeof propConfig === "object" && "default" in propConfig) {
|
|
37
|
+
defaultProps[key] = propConfig.default;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
} catch (e) {
|
|
42
|
+
console.warn("Error extracting default props:", e);
|
|
43
|
+
}
|
|
44
|
+
function ShaderComponent(props) {
|
|
45
|
+
const [local, otherProps] = splitProps(props, ["children"]);
|
|
46
|
+
const context = useShaderContext();
|
|
47
|
+
const {
|
|
48
|
+
shaderParentId: parentId,
|
|
49
|
+
shaderNodeRegister: parentRegister,
|
|
50
|
+
shaderUniformUpdate: parentUniformUpdate,
|
|
51
|
+
shaderMetadataUpdate: parentMetadataUpdate,
|
|
52
|
+
shaderColorSpace
|
|
53
|
+
} = context;
|
|
54
|
+
const instanceId = (props.id ? props.id.replace(/[^a-zA-Z0-9_]/g, "_") : null) || createUniqueId();
|
|
55
|
+
const effectiveProps = createMemo(() => {
|
|
56
|
+
let baseProps = {
|
|
57
|
+
...defaultProps
|
|
58
|
+
};
|
|
59
|
+
for (const [key, value] of Object.entries(otherProps)) {
|
|
60
|
+
if (value !== void 0 && !isPropDriver(value)) {
|
|
61
|
+
baseProps[key] = value;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return baseProps;
|
|
65
|
+
});
|
|
66
|
+
const effectiveTransform = createMemo(() => ({
|
|
67
|
+
...DEFAULT_TRANSFORM,
|
|
68
|
+
...props.transform
|
|
69
|
+
}));
|
|
70
|
+
const mapsFromProps = createMemo(() => {
|
|
71
|
+
const maps = {};
|
|
72
|
+
for (const [key, value] of Object.entries(otherProps)) {
|
|
73
|
+
if (isPropDriver(value)) maps[key] = value;
|
|
74
|
+
}
|
|
75
|
+
return Object.keys(maps).length > 0 ? maps : void 0;
|
|
76
|
+
});
|
|
77
|
+
let uniformsMap = null;
|
|
78
|
+
const getUniformsMap = () => {
|
|
79
|
+
if (!uniformsMap) {
|
|
80
|
+
setColorSpaceMode(shaderColorSpace);
|
|
81
|
+
uniformsMap = createUniformsMap(componentDefinition, effectiveProps(), instanceId);
|
|
82
|
+
}
|
|
83
|
+
return uniformsMap;
|
|
84
|
+
};
|
|
85
|
+
const childContextValue = createMemo(() => ({
|
|
86
|
+
...context,
|
|
87
|
+
shaderParentId: instanceId
|
|
88
|
+
}));
|
|
89
|
+
const isCapturesDOM = !!componentDefinition.capturesDOM;
|
|
90
|
+
let captureCanvasEl;
|
|
91
|
+
const [captureSize, setCaptureSize] = createSignal({
|
|
92
|
+
w: typeof window !== "undefined" ? Math.round(window.innerWidth * Math.min(window.devicePixelRatio, 2)) : 0,
|
|
93
|
+
h: typeof window !== "undefined" ? Math.round(window.innerHeight * Math.min(window.devicePixelRatio, 2)) : 0
|
|
94
|
+
});
|
|
95
|
+
if (isCapturesDOM) {
|
|
96
|
+
const onWinResize = () => {
|
|
97
|
+
const d = Math.min(window.devicePixelRatio, 2);
|
|
98
|
+
setCaptureSize({
|
|
99
|
+
w: Math.round(window.innerWidth * d),
|
|
100
|
+
h: Math.round(window.innerHeight * d)
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
onMount(() => window.addEventListener("resize", onWinResize));
|
|
104
|
+
onCleanup(() => window.removeEventListener("resize", onWinResize));
|
|
105
|
+
}
|
|
106
|
+
let markerRef;
|
|
107
|
+
let detectedRenderOrder = void 0;
|
|
108
|
+
let isRegistered = false;
|
|
109
|
+
onMount(() => {
|
|
110
|
+
const uniforms = getUniformsMap();
|
|
111
|
+
if (!uniforms) return;
|
|
112
|
+
try {
|
|
113
|
+
const metadata = {
|
|
114
|
+
blendMode: props.blendMode || "normal",
|
|
115
|
+
opacity: props.opacity,
|
|
116
|
+
visible: props.visible === false ? false : true,
|
|
117
|
+
id: props.id,
|
|
118
|
+
mask: props.maskSource ? {
|
|
119
|
+
source: props.maskSource,
|
|
120
|
+
type: props.maskType || "alpha"
|
|
121
|
+
} : void 0,
|
|
122
|
+
maps: mapsFromProps(),
|
|
123
|
+
renderOrder: props.renderOrder ?? detectedRenderOrder,
|
|
124
|
+
transform: effectiveTransform()
|
|
125
|
+
};
|
|
126
|
+
parentRegister(instanceId, componentDefinition.fragmentNode, parentId, metadata, uniforms, componentDefinition, isCapturesDOM ? captureCanvasEl : void 0);
|
|
127
|
+
isRegistered = true;
|
|
128
|
+
if (props.renderOrder === void 0 && markerRef) {
|
|
129
|
+
const parent = markerRef.parentElement;
|
|
130
|
+
if (parent) {
|
|
131
|
+
const siblings = parent.querySelectorAll(":scope > [data-shader-id]");
|
|
132
|
+
const position = Array.from(siblings).indexOf(markerRef);
|
|
133
|
+
if (position >= 0) {
|
|
134
|
+
detectedRenderOrder = position;
|
|
135
|
+
parentMetadataUpdate(instanceId, {
|
|
136
|
+
renderOrder: position
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
} catch (error) {
|
|
142
|
+
console.error("Error registering shader node:", error);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
onCleanup(() => {
|
|
146
|
+
isRegistered = false;
|
|
147
|
+
parentRegister(instanceId, null, null, null, null);
|
|
148
|
+
});
|
|
149
|
+
createEffect(() => {
|
|
150
|
+
if (!isRegistered) return;
|
|
151
|
+
const uniforms = getUniformsMap();
|
|
152
|
+
if (!uniforms) return;
|
|
153
|
+
try {
|
|
154
|
+
const props_snapshot = effectiveProps();
|
|
155
|
+
Object.entries(uniforms).forEach(([propName, uniformData]) => {
|
|
156
|
+
if (!uniformData || typeof uniformData !== "object") return;
|
|
157
|
+
const {
|
|
158
|
+
uniform
|
|
159
|
+
} = uniformData;
|
|
160
|
+
if ((uniform == null ? void 0 : uniform.value) !== void 0 && propName in props_snapshot) {
|
|
161
|
+
const newValue = props_snapshot[propName];
|
|
162
|
+
parentUniformUpdate(instanceId, propName, newValue);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
} catch (error) {
|
|
166
|
+
console.error("Error updating uniforms:", error);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
createEffect(() => {
|
|
170
|
+
if (!isRegistered) return;
|
|
171
|
+
try {
|
|
172
|
+
const metadata = {
|
|
173
|
+
blendMode: props.blendMode || "normal",
|
|
174
|
+
opacity: props.opacity,
|
|
175
|
+
visible: props.visible === false ? false : true,
|
|
176
|
+
id: props.id,
|
|
177
|
+
mask: props.maskSource ? {
|
|
178
|
+
source: props.maskSource,
|
|
179
|
+
type: props.maskType || "alpha"
|
|
180
|
+
} : void 0,
|
|
181
|
+
maps: mapsFromProps(),
|
|
182
|
+
renderOrder: props.renderOrder ?? detectedRenderOrder,
|
|
183
|
+
transform: effectiveTransform()
|
|
184
|
+
};
|
|
185
|
+
parentMetadataUpdate(instanceId, metadata);
|
|
186
|
+
} catch (error) {
|
|
187
|
+
console.error("Error updating metadata:", error);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
const canUseDOM = typeof document !== "undefined" && typeof window !== "undefined";
|
|
191
|
+
return createComponent(ShaderContext.Provider, {
|
|
192
|
+
get value() {
|
|
193
|
+
return childContextValue();
|
|
194
|
+
},
|
|
195
|
+
get children() {
|
|
196
|
+
return [(() => {
|
|
197
|
+
var _el$ = _tmpl$();
|
|
198
|
+
var _ref$ = markerRef;
|
|
199
|
+
typeof _ref$ === "function" ? use(_ref$, _el$) : markerRef = _el$;
|
|
200
|
+
setAttribute(_el$, "data-shader-id", instanceId);
|
|
201
|
+
insert(_el$, () => (!isCapturesDOM || !canUseDOM) && local.children);
|
|
202
|
+
return _el$;
|
|
203
|
+
})(), memo(() => isCapturesDOM && canUseDOM && createComponent(Portal, {
|
|
204
|
+
get children() {
|
|
205
|
+
var _el$2 = _tmpl$2();
|
|
206
|
+
var _ref$2 = captureCanvasEl;
|
|
207
|
+
typeof _ref$2 === "function" ? use(_ref$2, _el$2) : captureCanvasEl = _el$2;
|
|
208
|
+
spread(_el$2, mergeProps({
|
|
209
|
+
"layoutsubtree": ""
|
|
210
|
+
}, {
|
|
211
|
+
get width() {
|
|
212
|
+
return captureSize().w;
|
|
213
|
+
},
|
|
214
|
+
get height() {
|
|
215
|
+
return captureSize().h;
|
|
216
|
+
},
|
|
217
|
+
"style": "position:fixed;inset:0;width:100vw;height:100vh;z-index:-9999"
|
|
218
|
+
}), false, true);
|
|
219
|
+
insert(_el$2, () => local.children);
|
|
220
|
+
return _el$2;
|
|
221
|
+
}
|
|
222
|
+
}))];
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
export {
|
|
227
|
+
ShaderComponent as default
|
|
228
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Preview.d.ts","sourceRoot":"","sources":["../../src/engine/Preview.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+C,KAAK,GAAG,EAAoC,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"Preview.d.ts","sourceRoot":"","sources":["../../src/engine/Preview.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+C,KAAK,GAAG,EAAoC,MAAM,UAAU,CAAA;AA8TlH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,GAAG,CAAC,aAAa,GAAG,MAAM,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAID,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,KAAK,EAAE,YAAY,eAmHlD"}
|