@symbiote-native/glass-effect 0.0.0-stage → 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.
Files changed (78) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +205 -2
  3. package/build/angular/glass/index.android.d.ts +7 -0
  4. package/build/angular/glass/index.android.js +97 -0
  5. package/build/angular/glass/index.d.ts +1 -0
  6. package/build/angular/glass/index.ios.d.ts +9 -0
  7. package/build/angular/glass/index.ios.js +116 -0
  8. package/build/angular/glass/index.js +2 -0
  9. package/build/angular/glass/shared.d.ts +16 -0
  10. package/build/angular/glass/shared.js +121 -0
  11. package/build/angular/index.d.ts +2 -0
  12. package/build/angular/index.js +3 -0
  13. package/build/core/glass-effect.d.ts +62 -0
  14. package/build/core/glass-effect.js +71 -0
  15. package/build/core/index.d.ts +1 -0
  16. package/build/core/index.js +1 -0
  17. package/build/react/glass-effect.d.ts +17 -0
  18. package/build/react/glass-effect.js +14 -0
  19. package/build/react/index.d.ts +3 -0
  20. package/build/react/index.js +3 -0
  21. package/build/solid/glass-effect.d.ts +16 -0
  22. package/build/solid/glass-effect.js +6 -0
  23. package/build/solid/index.d.ts +3 -0
  24. package/build/solid/index.js +3 -0
  25. package/build/svelte/glass-container.svelte +14 -0
  26. package/build/svelte/glass-container.svelte.d.ts +4 -0
  27. package/build/svelte/glass-props.d.ts +13 -0
  28. package/build/svelte/glass-props.js +1 -0
  29. package/build/svelte/glass-view.svelte +10 -0
  30. package/build/svelte/glass-view.svelte.d.ts +4 -0
  31. package/build/svelte/index.d.ts +4 -0
  32. package/build/svelte/index.js +4 -0
  33. package/build/vue/glass-effect.d.ts +9 -0
  34. package/build/vue/glass-effect.js +20 -0
  35. package/build/vue/index.d.ts +3 -0
  36. package/build/vue/index.js +3 -0
  37. package/build-ngc/angular/glass/index.android.d.ts +12 -0
  38. package/build-ngc/angular/glass/index.android.js +51 -0
  39. package/build-ngc/angular/glass/index.android.js.map +1 -0
  40. package/build-ngc/angular/glass/index.d.ts +1 -0
  41. package/build-ngc/angular/glass/index.ios.d.ts +14 -0
  42. package/build-ngc/angular/glass/index.ios.js +74 -0
  43. package/build-ngc/angular/glass/index.ios.js.map +1 -0
  44. package/build-ngc/angular/glass/index.js +3 -0
  45. package/build-ngc/angular/glass/index.js.map +1 -0
  46. package/build-ngc/angular/glass/shared.d.ts +21 -0
  47. package/build-ngc/angular/glass/shared.js +50 -0
  48. package/build-ngc/angular/glass/shared.js.map +1 -0
  49. package/build-ngc/angular/index.d.ts +2 -0
  50. package/build-ngc/angular/index.js +4 -0
  51. package/build-ngc/angular/index.js.map +1 -0
  52. package/build-ngc/core/glass-effect.d.ts +62 -0
  53. package/build-ngc/core/glass-effect.js +72 -0
  54. package/build-ngc/core/glass-effect.js.map +1 -0
  55. package/build-ngc/core/index.d.ts +1 -0
  56. package/build-ngc/core/index.js +2 -0
  57. package/build-ngc/core/index.js.map +1 -0
  58. package/native-link.json +5 -0
  59. package/package.json +145 -3
  60. package/src/angular/glass/index.android.ts +31 -0
  61. package/src/angular/glass/index.ios.ts +61 -0
  62. package/src/angular/glass/index.ts +2 -0
  63. package/src/angular/glass/shared.ts +38 -0
  64. package/src/angular/index.ts +15 -0
  65. package/src/core/glass-effect.ts +160 -0
  66. package/src/core/index.ts +16 -0
  67. package/src/react/glass-effect.ts +34 -0
  68. package/src/react/index.ts +17 -0
  69. package/src/solid/glass-effect.ts +27 -0
  70. package/src/solid/index.ts +17 -0
  71. package/src/svelte/glass-container.svelte +14 -0
  72. package/src/svelte/glass-props.ts +18 -0
  73. package/src/svelte/glass-view.svelte +10 -0
  74. package/src/svelte/index.ts +18 -0
  75. package/src/svelte/svelte-ambient.d.ts +6 -0
  76. package/src/svelte/svelte-compile.test-helper.ts +6 -0
  77. package/src/vue/glass-effect.ts +39 -0
  78. package/src/vue/index.ts +17 -0
@@ -0,0 +1,62 @@
1
+ import type { IAccessibilityProps, IAriaProps, IDescriptor, IResponderProps } from '@symbiote-native/components';
2
+ import type { IColorValue, IStyleProp, ISymbioteEvent, IViewStyle } from '@symbiote-native/engine';
3
+ export declare const GLASS_EFFECT_MODULE_NAME = "ExpoGlassEffect";
4
+ export type IGlassStyle = 'clear' | 'regular' | 'none';
5
+ export type IGlassEffectStyleConfig = {
6
+ /** The glass effect style to apply */
7
+ style: IGlassStyle;
8
+ /**
9
+ * Whether to animate the style change
10
+ * @default false
11
+ */
12
+ animate?: boolean;
13
+ /** Duration of the animation in seconds, the system default when omitted */
14
+ animationDuration?: number;
15
+ };
16
+ export type IGlassColorScheme = 'auto' | 'light' | 'dark';
17
+ type IViewSurface = IAccessibilityProps & IAriaProps & IResponderProps & {
18
+ style?: IStyleProp<IViewStyle>;
19
+ testID?: string;
20
+ nativeID?: string;
21
+ onLayout?: (event: ISymbioteEvent) => void;
22
+ };
23
+ export type IGlassViewProps = IViewSurface & {
24
+ /**
25
+ * A style name or a config object that controls the animation
26
+ * @default 'regular'
27
+ */
28
+ glassEffectStyle?: IGlassStyle | IGlassEffectStyleConfig;
29
+ tintColor?: IColorValue;
30
+ /**
31
+ * @default false
32
+ */
33
+ isInteractive?: boolean;
34
+ /**
35
+ * Overrides the system appearance when the app has its own theme toggle
36
+ * @default 'auto'
37
+ */
38
+ colorScheme?: IGlassColorScheme;
39
+ };
40
+ export type IGlassContainerProps = IViewSurface & {
41
+ /** The distance at which glass elements start affecting each other */
42
+ spacing?: number;
43
+ };
44
+ export declare const glassViewName: () => string;
45
+ export declare const glassContainerName: () => string;
46
+ export declare const ensureGlassViewRegistered: () => boolean;
47
+ export declare const ensureGlassContainerRegistered: () => boolean;
48
+ export declare function renderGlassView(props: object): IDescriptor;
49
+ export declare function renderGlassContainer(props: object): IDescriptor;
50
+ /**
51
+ * Whether the app renders with the Liquid Glass design, component availability only
52
+ * Accessibility settings can still limit the effect, see `AccessibilityInfo`
53
+ * @platform ios
54
+ */
55
+ export declare function isLiquidGlassAvailable(): boolean;
56
+ /**
57
+ * Whether the Liquid Glass API exists at runtime, some iOS 26 betas lack it and crash
58
+ * Check before using `GlassView` and `GlassContainer`
59
+ * @platform ios
60
+ */
61
+ export declare function isGlassEffectAPIAvailable(): boolean;
62
+ export {};
@@ -0,0 +1,71 @@
1
+ // Ядро `GlassView` и `GlassContainer`, порт expo-glass-effect, нативное только на iOS
2
+ import { Platform, requireNativeModule, requireNativeViewManager, } from 'expo-modules-core';
3
+ import { el } from '@symbiote-native/components';
4
+ import { defineExpoNativeViews } from '@symbiote-native/engine';
5
+ export const GLASS_EFFECT_MODULE_NAME = 'ExpoGlassEffect';
6
+ const GLASS_VIEW_NAME = 'GlassView';
7
+ const GLASS_CONTAINER_NAME = 'GlassContainer';
8
+ // Эти ключи имеют смысл только у нативного view, у обычного View их быть не должно
9
+ const GLASS_VIEW_KEYS = new Set([
10
+ 'glassEffectStyle',
11
+ 'tintColor',
12
+ 'isInteractive',
13
+ 'colorScheme',
14
+ ]);
15
+ const GLASS_CONTAINER_KEYS = new Set(['spacing']);
16
+ // Регистрация идёт при рендере: побочный эффект барреля теряется в release
17
+ const views = defineExpoNativeViews(requireNativeViewManager, GLASS_EFFECT_MODULE_NAME, { glass: GLASS_VIEW_NAME, container: GLASS_CONTAINER_NAME });
18
+ export const glassViewName = views.glass.name;
19
+ export const glassContainerName = views.container.name;
20
+ export const ensureGlassViewRegistered = views.glass.ensureRegistered;
21
+ export const ensureGlassContainerRegistered = views.container.ensureRegistered;
22
+ function runsOnIos() {
23
+ return Platform.select({ ios: true, default: false });
24
+ }
25
+ function withoutKeys(props, keys) {
26
+ return Object.fromEntries(Object.entries(props).filter(([key]) => !keys.has(key)));
27
+ }
28
+ // `object`, а не тип пропсов: Vue и Angular отдают нетипизированный набор атрибутов
29
+ export function renderGlassView(props) {
30
+ if (!runsOnIos())
31
+ return el('view', withoutKeys(props, GLASS_VIEW_KEYS));
32
+ if (!ensureGlassViewRegistered()) {
33
+ console.warn('GlassView is not available on this platform');
34
+ return el('view', withoutKeys(props, GLASS_VIEW_KEYS));
35
+ }
36
+ return el(glassViewName(), { ...props });
37
+ }
38
+ export function renderGlassContainer(props) {
39
+ if (!runsOnIos()) {
40
+ return el('view', withoutKeys(props, GLASS_CONTAINER_KEYS));
41
+ }
42
+ if (!ensureGlassContainerRegistered()) {
43
+ console.warn('GlassContainer is not available on this platform');
44
+ return el('view', withoutKeys(props, GLASS_CONTAINER_KEYS));
45
+ }
46
+ return el(glassContainerName(), { ...props });
47
+ }
48
+ let isLiquidGlass;
49
+ let isGlassApi;
50
+ /**
51
+ * Whether the app renders with the Liquid Glass design, component availability only
52
+ * Accessibility settings can still limit the effect, see `AccessibilityInfo`
53
+ * @platform ios
54
+ */
55
+ export function isLiquidGlassAvailable() {
56
+ if (!runsOnIos())
57
+ return false;
58
+ isLiquidGlass ??= !!Reflect.get(requireNativeModule(GLASS_EFFECT_MODULE_NAME), 'isLiquidGlassAvailable');
59
+ return isLiquidGlass;
60
+ }
61
+ /**
62
+ * Whether the Liquid Glass API exists at runtime, some iOS 26 betas lack it and crash
63
+ * Check before using `GlassView` and `GlassContainer`
64
+ * @platform ios
65
+ */
66
+ export function isGlassEffectAPIAvailable() {
67
+ if (!runsOnIos())
68
+ return false;
69
+ isGlassApi ??= !!Reflect.get(requireNativeModule(GLASS_EFFECT_MODULE_NAME), 'isGlassEffectAPIAvailable');
70
+ return isGlassApi;
71
+ }
@@ -0,0 +1 @@
1
+ export { GLASS_EFFECT_MODULE_NAME, ensureGlassContainerRegistered, ensureGlassViewRegistered, glassContainerName, glassViewName, isGlassEffectAPIAvailable, isLiquidGlassAvailable, renderGlassContainer, renderGlassView, type IGlassColorScheme, type IGlassContainerProps, type IGlassEffectStyleConfig, type IGlassStyle, type IGlassViewProps, } from './glass-effect';
@@ -0,0 +1 @@
1
+ export { GLASS_EFFECT_MODULE_NAME, ensureGlassContainerRegistered, ensureGlassViewRegistered, glassContainerName, glassViewName, isGlassEffectAPIAvailable, isLiquidGlassAvailable, renderGlassContainer, renderGlassView, } from './glass-effect.js';
@@ -0,0 +1,17 @@
1
+ import type { ReactElement, ReactNode, RefObject } from 'react';
2
+ import type { IHostInstance, IViewProps } from '@symbiote-native/react';
3
+ import type { IGlassContainerProps, IGlassViewProps } from '../core';
4
+ export type IGlassViewReactProps = IGlassViewProps & Omit<IViewProps, keyof IGlassViewProps | 'children' | 'ref'> & {
5
+ ref?: RefObject<IHostInstance | null>;
6
+ children?: ReactNode;
7
+ className?: string;
8
+ };
9
+ export type IGlassContainerReactProps = IGlassContainerProps & Omit<IViewProps, keyof IGlassContainerProps | 'children' | 'ref'> & {
10
+ ref?: RefObject<IHostInstance | null>;
11
+ children?: ReactNode;
12
+ className?: string;
13
+ };
14
+ /** React twin of `expo-glass-effect`'s `GlassView`, native on iOS and a plain View elsewhere */
15
+ export declare function GlassView(props: IGlassViewReactProps): ReactElement;
16
+ /** React twin of `expo-glass-effect`'s `GlassContainer`, merges the glass views it holds */
17
+ export declare function GlassContainer(props: IGlassContainerReactProps): ReactElement;
@@ -0,0 +1,14 @@
1
+ import { createElement } from 'react';
2
+ import { renderGlassContainer, renderGlassView } from '../core/index.js';
3
+ /** React twin of `expo-glass-effect`'s `GlassView`, native on iOS and a plain View elsewhere */
4
+ export function GlassView(props) {
5
+ const { children, ...rest } = props;
6
+ const descriptor = renderGlassView(rest);
7
+ return createElement(descriptor.type, descriptor.props, children);
8
+ }
9
+ /** React twin of `expo-glass-effect`'s `GlassContainer`, merges the glass views it holds */
10
+ export function GlassContainer(props) {
11
+ const { children, ...rest } = props;
12
+ const descriptor = renderGlassContainer(rest);
13
+ return createElement(descriptor.type, descriptor.props, children);
14
+ }
@@ -0,0 +1,3 @@
1
+ export { GlassContainer, GlassView } from './glass-effect';
2
+ export type { IGlassContainerReactProps as IGlassContainerProps, IGlassViewReactProps as IGlassViewProps, } from './glass-effect';
3
+ export { GLASS_EFFECT_MODULE_NAME, glassContainerName, glassViewName, isGlassEffectAPIAvailable, isLiquidGlassAvailable, type IGlassColorScheme, type IGlassEffectStyleConfig, type IGlassStyle, } from '../core';
@@ -0,0 +1,3 @@
1
+ // @symbiote-native/glass-effect/react: компоненты `GlassView` и `GlassContainer` поверх общего ядра
2
+ export { GlassContainer, GlassView } from './glass-effect.js';
3
+ export { GLASS_EFFECT_MODULE_NAME, glassContainerName, glassViewName, isGlassEffectAPIAvailable, isLiquidGlassAvailable, } from '../core/index.js';
@@ -0,0 +1,16 @@
1
+ import type { JSX } from 'solid-js';
2
+ import type { IViewProps } from '@symbiote-native/solid';
3
+ import type { IClassNameValue } from '@symbiote-native/engine';
4
+ import type { IGlassContainerProps, IGlassViewProps } from '../core';
5
+ export type IGlassViewSolidProps = IGlassViewProps & Omit<IViewProps, keyof IGlassViewProps | 'children'> & {
6
+ children?: JSX.Element;
7
+ class?: IClassNameValue;
8
+ };
9
+ export type IGlassContainerSolidProps = IGlassContainerProps & Omit<IViewProps, keyof IGlassContainerProps | 'children'> & {
10
+ children?: JSX.Element;
11
+ class?: IClassNameValue;
12
+ };
13
+ /** Solid twin of `expo-glass-effect`'s `GlassView`, native on iOS and a plain View elsewhere */
14
+ export declare const GlassView: (props: IGlassViewSolidProps) => import("@symbiote-native/engine").ISymbioteNode;
15
+ /** Solid twin of `expo-glass-effect`'s `GlassContainer`, merges the glass views it holds */
16
+ export declare const GlassContainer: (props: IGlassContainerSolidProps) => import("@symbiote-native/engine").ISymbioteNode;
@@ -0,0 +1,6 @@
1
+ import { defineDescriptorComponent } from '@symbiote-native/solid';
2
+ import { renderGlassContainer, renderGlassView } from '../core/index.js';
3
+ /** Solid twin of `expo-glass-effect`'s `GlassView`, native on iOS and a plain View elsewhere */
4
+ export const GlassView = defineDescriptorComponent(renderGlassView);
5
+ /** Solid twin of `expo-glass-effect`'s `GlassContainer`, merges the glass views it holds */
6
+ export const GlassContainer = defineDescriptorComponent(renderGlassContainer);
@@ -0,0 +1,3 @@
1
+ export { GlassContainer, GlassView } from './glass-effect';
2
+ export type { IGlassContainerSolidProps as IGlassContainerProps, IGlassViewSolidProps as IGlassViewProps, } from './glass-effect';
3
+ export { GLASS_EFFECT_MODULE_NAME, glassContainerName, glassViewName, isGlassEffectAPIAvailable, isLiquidGlassAvailable, type IGlassColorScheme, type IGlassEffectStyleConfig, type IGlassStyle, } from '../core';
@@ -0,0 +1,3 @@
1
+ // @symbiote-native/glass-effect/solid: компоненты `GlassView` и `GlassContainer` поверх общего ядра
2
+ export { GlassContainer, GlassView } from './glass-effect.js';
3
+ export { GLASS_EFFECT_MODULE_NAME, glassContainerName, glassViewName, isGlassEffectAPIAvailable, isLiquidGlassAvailable, } from '../core/index.js';
@@ -0,0 +1,14 @@
1
+ <script lang="ts">
2
+ import DescriptorHost from '@symbiote-native/svelte/descriptor-host';
3
+ import { renderGlassContainer } from '../core';
4
+ import type { IGlassContainerSvelteProps } from './glass-props';
5
+
6
+ let {
7
+ children,
8
+ ref = $bindable(),
9
+ ...rest
10
+ }: IGlassContainerSvelteProps = $props();
11
+ const descriptor = $derived(renderGlassContainer({ ...rest }));
12
+ </script>
13
+
14
+ <DescriptorHost {descriptor} bind:ref {children} />
@@ -0,0 +1,4 @@
1
+ import type { IGlassContainerSvelteProps } from './glass-props';
2
+ declare const GlassContainer: import("svelte").Component<IGlassContainerSvelteProps, {}, "ref">;
3
+ type GlassContainer = ReturnType<typeof GlassContainer>;
4
+ export default GlassContainer;
@@ -0,0 +1,13 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { IViewProps } from '@symbiote-native/svelte';
3
+ import type { IGlassContainerProps, IGlassViewProps } from '../core';
4
+ export type IGlassViewSvelteProps = IGlassViewProps & Omit<IViewProps, keyof IGlassViewProps | 'children'> & {
5
+ /** Host-ref через `bind:ref` */
6
+ ref?: unknown;
7
+ children?: Snippet;
8
+ };
9
+ export type IGlassContainerSvelteProps = IGlassContainerProps & Omit<IViewProps, keyof IGlassContainerProps | 'children'> & {
10
+ /** Host-ref через `bind:ref` */
11
+ ref?: unknown;
12
+ children?: Snippet;
13
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ <script lang="ts">
2
+ import DescriptorHost from '@symbiote-native/svelte/descriptor-host';
3
+ import { renderGlassView } from '../core';
4
+ import type { IGlassViewSvelteProps } from './glass-props';
5
+
6
+ let { children, ref = $bindable(), ...rest }: IGlassViewSvelteProps = $props();
7
+ const descriptor = $derived(renderGlassView({ ...rest }));
8
+ </script>
9
+
10
+ <DescriptorHost {descriptor} bind:ref {children} />
@@ -0,0 +1,4 @@
1
+ import type { IGlassViewSvelteProps } from './glass-props';
2
+ declare const GlassView: import("svelte").Component<IGlassViewSvelteProps, {}, "ref">;
3
+ type GlassView = ReturnType<typeof GlassView>;
4
+ export default GlassView;
@@ -0,0 +1,4 @@
1
+ export { default as GlassContainer } from './glass-container.svelte';
2
+ export { default as GlassView } from './glass-view.svelte';
3
+ export type { IGlassContainerSvelteProps as IGlassContainerProps, IGlassViewSvelteProps as IGlassViewProps, } from './glass-props';
4
+ export { GLASS_EFFECT_MODULE_NAME, glassContainerName, glassViewName, isGlassEffectAPIAvailable, isLiquidGlassAvailable, type IGlassColorScheme, type IGlassEffectStyleConfig, type IGlassStyle, } from '../core';
@@ -0,0 +1,4 @@
1
+ // @symbiote-native/glass-effect/svelte: компоненты `GlassView` и `GlassContainer` поверх общего ядра
2
+ export { default as GlassContainer } from './glass-container.svelte';
3
+ export { default as GlassView } from './glass-view.svelte';
4
+ export { GLASS_EFFECT_MODULE_NAME, glassContainerName, glassViewName, isGlassEffectAPIAvailable, isLiquidGlassAvailable, } from '../core/index.js';
@@ -0,0 +1,9 @@
1
+ import { type VNode } from '@vue/runtime-core';
2
+ import type { IViewProps } from '@symbiote-native/vue';
3
+ import type { IGlassContainerProps, IGlassViewProps } from '../core';
4
+ export type IGlassViewVueProps = IGlassViewProps & Omit<IViewProps, keyof IGlassViewProps>;
5
+ export type IGlassContainerVueProps = IGlassContainerProps & Omit<IViewProps, keyof IGlassContainerProps>;
6
+ /** Vue twin of `expo-glass-effect`'s `GlassView`, native on iOS and a plain View elsewhere */
7
+ export declare const GlassView: import("vue").DefineComponent<{}, () => VNode, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
8
+ /** Vue twin of `expo-glass-effect`'s `GlassContainer`, merges the glass views it holds */
9
+ export declare const GlassContainer: import("vue").DefineComponent<{}, () => VNode, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -0,0 +1,20 @@
1
+ import { defineComponent } from '@vue/runtime-core';
2
+ import { descriptorToVue, normalizeVueAttrs } from '@symbiote-native/vue';
3
+ import { renderGlassContainer, renderGlassView } from '../core/index.js';
4
+ /** Vue twin of `expo-glass-effect`'s `GlassView`, native on iOS and a plain View elsewhere */
5
+ export const GlassView = defineComponent({
6
+ name: 'GlassView',
7
+ // Все атрибуты это пропсы нативного view, на обёртку ничего не должно просочиться
8
+ inheritAttrs: false,
9
+ setup(_props, { attrs, slots }) {
10
+ return () => descriptorToVue(renderGlassView(normalizeVueAttrs(attrs)), slots.default?.() ?? []);
11
+ },
12
+ });
13
+ /** Vue twin of `expo-glass-effect`'s `GlassContainer`, merges the glass views it holds */
14
+ export const GlassContainer = defineComponent({
15
+ name: 'GlassContainer',
16
+ inheritAttrs: false,
17
+ setup(_props, { attrs, slots }) {
18
+ return () => descriptorToVue(renderGlassContainer(normalizeVueAttrs(attrs)), slots.default?.() ?? []);
19
+ },
20
+ });
@@ -0,0 +1,3 @@
1
+ export { GlassContainer, GlassView } from './glass-effect';
2
+ export type { IGlassContainerVueProps as IGlassContainerProps, IGlassViewVueProps as IGlassViewProps, } from './glass-effect';
3
+ export { GLASS_EFFECT_MODULE_NAME, glassContainerName, glassViewName, isGlassEffectAPIAvailable, isLiquidGlassAvailable, type IGlassColorScheme, type IGlassEffectStyleConfig, type IGlassStyle, } from '../core';
@@ -0,0 +1,3 @@
1
+ // @symbiote-native/glass-effect/vue: компоненты `GlassView` и `GlassContainer` поверх общего ядра
2
+ export { GlassContainer, GlassView } from './glass-effect.js';
3
+ export { GLASS_EFFECT_MODULE_NAME, glassContainerName, glassViewName, isGlassEffectAPIAvailable, isLiquidGlassAvailable, } from '../core/index.js';
@@ -0,0 +1,12 @@
1
+ import { GlassContainerBase, GlassViewBase } from './shared';
2
+ import * as i0 from "@angular/core";
3
+ /** Angular twin of `expo-glass-effect`'s `GlassView`, a plain View off iOS */
4
+ export declare class GlassView extends GlassViewBase {
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<GlassView, never>;
6
+ static ɵcmp: i0.ɵɵComponentDeclaration<GlassView, "GlassView", never, {}, {}, never, ["*"], true, never>;
7
+ }
8
+ /** Angular twin of `expo-glass-effect`'s `GlassContainer`, a plain View off iOS */
9
+ export declare class GlassContainer extends GlassContainerBase {
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<GlassContainer, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<GlassContainer, "GlassContainer", never, {}, {}, never, ["*"], true, never>;
12
+ }
@@ -0,0 +1,51 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { DescriptorHost } from '@symbiote-native/angular';
3
+ import { GlassContainerBase, GlassViewBase } from './shared';
4
+ import * as i0 from "@angular/core";
5
+ /** Angular twin of `expo-glass-effect`'s `GlassView`, a plain View off iOS */
6
+ export class GlassView extends GlassViewBase {
7
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GlassView, deps: null, target: i0.ɵɵFactoryTarget.Component });
8
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: GlassView, isStandalone: true, selector: "GlassView", usesInheritance: true, ngImport: i0, template: `@if (descriptor; as node) {
9
+ <symbiote-descriptor-host [node]="node"
10
+ ><ng-content
11
+ /></symbiote-descriptor-host>
12
+ }`, isInline: true, dependencies: [{ kind: "component", type: DescriptorHost, selector: "symbiote-descriptor-host", inputs: ["node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GlassView, decorators: [{
15
+ type: Component,
16
+ args: [{
17
+ selector: 'GlassView',
18
+ standalone: true,
19
+ imports: [DescriptorHost],
20
+ changeDetection: ChangeDetectionStrategy.OnPush,
21
+ template: `@if (descriptor; as node) {
22
+ <symbiote-descriptor-host [node]="node"
23
+ ><ng-content
24
+ /></symbiote-descriptor-host>
25
+ }`,
26
+ }]
27
+ }] });
28
+ /** Angular twin of `expo-glass-effect`'s `GlassContainer`, a plain View off iOS */
29
+ export class GlassContainer extends GlassContainerBase {
30
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GlassContainer, deps: null, target: i0.ɵɵFactoryTarget.Component });
31
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: GlassContainer, isStandalone: true, selector: "GlassContainer", usesInheritance: true, ngImport: i0, template: `@if (descriptor; as node) {
32
+ <symbiote-descriptor-host [node]="node"
33
+ ><ng-content
34
+ /></symbiote-descriptor-host>
35
+ }`, isInline: true, dependencies: [{ kind: "component", type: DescriptorHost, selector: "symbiote-descriptor-host", inputs: ["node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
36
+ }
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GlassContainer, decorators: [{
38
+ type: Component,
39
+ args: [{
40
+ selector: 'GlassContainer',
41
+ standalone: true,
42
+ imports: [DescriptorHost],
43
+ changeDetection: ChangeDetectionStrategy.OnPush,
44
+ template: `@if (descriptor; as node) {
45
+ <symbiote-descriptor-host [node]="node"
46
+ ><ng-content
47
+ /></symbiote-descriptor-host>
48
+ }`,
49
+ }]
50
+ }] });
51
+ //# sourceMappingURL=index.android.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.android.js","sourceRoot":"","sources":["../../../src/angular/glass/index.android.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;;AAE7D,8EAA8E;AAY9E,MAAM,OAAO,SAAU,SAAQ,aAAa;uGAA/B,SAAS;2FAAT,SAAS,4FANV;;;;IAIR,4DANQ,cAAc;;2FAQb,SAAS;kBAXrB,SAAS;mBAAC;oBACT,QAAQ,EAAE,WAAW;oBACrB,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,cAAc,CAAC;oBACzB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,QAAQ,EAAE;;;;IAIR;iBACH;;AAGD,mFAAmF;AAYnF,MAAM,OAAO,cAAe,SAAQ,kBAAkB;uGAAzC,cAAc;2FAAd,cAAc,iGANf;;;;IAIR,4DANQ,cAAc;;2FAQb,cAAc;kBAX1B,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,cAAc,CAAC;oBACzB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,QAAQ,EAAE;;;;IAIR;iBACH"}
@@ -0,0 +1 @@
1
+ export { GlassContainer, GlassView } from './index.ios';
@@ -0,0 +1,14 @@
1
+ import { GlassContainerBase, GlassViewBase } from './shared';
2
+ import * as i0 from "@angular/core";
3
+ /** Angular twin of `expo-glass-effect`'s `GlassView`, content goes inside the native view */
4
+ export declare class GlassView extends GlassViewBase {
5
+ constructor();
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<GlassView, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<GlassView, "GlassView", never, {}, {}, never, ["*"], true, never>;
8
+ }
9
+ /** Angular twin of `expo-glass-effect`'s `GlassContainer`, merges the glass views it holds */
10
+ export declare class GlassContainer extends GlassContainerBase {
11
+ constructor();
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<GlassContainer, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<GlassContainer, "GlassContainer", never, {}, {}, never, ["*"], true, never>;
14
+ }
@@ -0,0 +1,74 @@
1
+ import { ChangeDetectionStrategy, Component, NO_ERRORS_SCHEMA, } from '@angular/core';
2
+ import { SymbioteHostPropsDirective } from '@symbiote-native/angular';
3
+ import { warnIfViewNameIsDynamic } from '@symbiote-native/engine';
4
+ import { GLASS_EFFECT_MODULE_NAME } from '../../core';
5
+ import { GlassContainerBase, GlassViewBase } from './shared';
6
+ import * as i0 from "@angular/core";
7
+ const VIEW_TAG = 'ViewManagerAdapter_ExpoGlassEffect_GlassView';
8
+ const CONTAINER_TAG = 'ViewManagerAdapter_ExpoGlassEffect_GlassContainer';
9
+ /** Angular twin of `expo-glass-effect`'s `GlassView`, content goes inside the native view */
10
+ export class GlassView extends GlassViewBase {
11
+ constructor() {
12
+ super();
13
+ warnIfViewNameIsDynamic(VIEW_TAG, GLASS_EFFECT_MODULE_NAME, 'GlassView');
14
+ }
15
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GlassView, deps: [], target: i0.ɵɵFactoryTarget.Component });
16
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: GlassView, isStandalone: true, selector: "GlassView", usesInheritance: true, ngImport: i0, template: `@if (descriptor; as node) {
17
+ <ViewManagerAdapter_ExpoGlassEffect_GlassView
18
+ [symbioteHostProps]="node.props"
19
+ >
20
+ <ng-content />
21
+ </ViewManagerAdapter_ExpoGlassEffect_GlassView>
22
+ }`, isInline: true, dependencies: [{ kind: "directive", type: SymbioteHostPropsDirective, selector: "[symbioteHostProps]", inputs: ["symbioteHostProps"], exportAs: ["symbioteHost"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GlassView, decorators: [{
25
+ type: Component,
26
+ args: [{
27
+ selector: 'GlassView',
28
+ standalone: true,
29
+ imports: [SymbioteHostPropsDirective],
30
+ schemas: [NO_ERRORS_SCHEMA],
31
+ changeDetection: ChangeDetectionStrategy.OnPush,
32
+ // Имя тега это нативное имя view, его нельзя собрать динамически
33
+ template: `@if (descriptor; as node) {
34
+ <ViewManagerAdapter_ExpoGlassEffect_GlassView
35
+ [symbioteHostProps]="node.props"
36
+ >
37
+ <ng-content />
38
+ </ViewManagerAdapter_ExpoGlassEffect_GlassView>
39
+ }`,
40
+ }]
41
+ }], ctorParameters: () => [] });
42
+ /** Angular twin of `expo-glass-effect`'s `GlassContainer`, merges the glass views it holds */
43
+ export class GlassContainer extends GlassContainerBase {
44
+ constructor() {
45
+ super();
46
+ warnIfViewNameIsDynamic(CONTAINER_TAG, GLASS_EFFECT_MODULE_NAME, 'GlassContainer');
47
+ }
48
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GlassContainer, deps: [], target: i0.ɵɵFactoryTarget.Component });
49
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: GlassContainer, isStandalone: true, selector: "GlassContainer", usesInheritance: true, ngImport: i0, template: `@if (descriptor; as node) {
50
+ <ViewManagerAdapter_ExpoGlassEffect_GlassContainer
51
+ [symbioteHostProps]="node.props"
52
+ >
53
+ <ng-content />
54
+ </ViewManagerAdapter_ExpoGlassEffect_GlassContainer>
55
+ }`, isInline: true, dependencies: [{ kind: "directive", type: SymbioteHostPropsDirective, selector: "[symbioteHostProps]", inputs: ["symbioteHostProps"], exportAs: ["symbioteHost"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
56
+ }
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GlassContainer, decorators: [{
58
+ type: Component,
59
+ args: [{
60
+ selector: 'GlassContainer',
61
+ standalone: true,
62
+ imports: [SymbioteHostPropsDirective],
63
+ schemas: [NO_ERRORS_SCHEMA],
64
+ changeDetection: ChangeDetectionStrategy.OnPush,
65
+ template: `@if (descriptor; as node) {
66
+ <ViewManagerAdapter_ExpoGlassEffect_GlassContainer
67
+ [symbioteHostProps]="node.props"
68
+ >
69
+ <ng-content />
70
+ </ViewManagerAdapter_ExpoGlassEffect_GlassContainer>
71
+ }`,
72
+ }]
73
+ }], ctorParameters: () => [] });
74
+ //# sourceMappingURL=index.ios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.ios.js","sourceRoot":"","sources":["../../../src/angular/glass/index.ios.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;;AAE7D,MAAM,QAAQ,GAAG,8CAA8C,CAAC;AAChE,MAAM,aAAa,GAAG,mDAAmD,CAAC;AAE1E,6FAA6F;AAgB7F,MAAM,OAAO,SAAU,SAAQ,aAAa;IAC1C;QACE,KAAK,EAAE,CAAC;QACR,uBAAuB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC;uGAJU,SAAS;2FAAT,SAAS,4FARV;;;;;;IAMR,4DAVQ,0BAA0B;;2FAYzB,SAAS;kBAfrB,SAAS;mBAAC;oBACT,QAAQ,EAAE,WAAW;oBACrB,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,0BAA0B,CAAC;oBACrC,OAAO,EAAE,CAAC,gBAAgB,CAAC;oBAC3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,iEAAiE;oBACjE,QAAQ,EAAE;;;;;;IAMR;iBACH;;AAQD,8FAA8F;AAe9F,MAAM,OAAO,cAAe,SAAQ,kBAAkB;IACpD;QACE,KAAK,EAAE,CAAC;QACR,uBAAuB,CACrB,aAAa,EACb,wBAAwB,EACxB,gBAAgB,CACjB,CAAC;IACJ,CAAC;uGARU,cAAc;2FAAd,cAAc,iGARf;;;;;;IAMR,4DATQ,0BAA0B;;2FAWzB,cAAc;kBAd1B,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,0BAA0B,CAAC;oBACrC,OAAO,EAAE,CAAC,gBAAgB,CAAC;oBAC3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,QAAQ,EAAE;;;;;;IAMR;iBACH"}
@@ -0,0 +1,3 @@
1
+ // Базовая точка для headless и tsc, Metro берёт `index.ios` или `index.android`
2
+ export { GlassContainer, GlassView } from './index.ios';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/angular/glass/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { NativeViewBase } from '@symbiote-native/angular';
2
+ import type { IDescriptor } from '@symbiote-native/components';
3
+ import type { IGlassContainerProps, IGlassViewProps } from '../../core';
4
+ import * as i0 from "@angular/core";
5
+ export declare abstract class GlassViewBase extends NativeViewBase {
6
+ glassEffectStyle?: IGlassViewProps['glassEffectStyle'];
7
+ tintColor?: IGlassViewProps['tintColor'];
8
+ isInteractive?: IGlassViewProps['isInteractive'];
9
+ colorScheme?: IGlassViewProps['colorScheme'];
10
+ protected readonly propNames: readonly ["glassEffectStyle", "tintColor", "isInteractive", "colorScheme"];
11
+ protected renderView(props: object): IDescriptor;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<GlassViewBase, never>;
13
+ static ɵdir: i0.ɵɵDirectiveDeclaration<GlassViewBase, never, never, { "glassEffectStyle": { "alias": "glassEffectStyle"; "required": false; }; "tintColor": { "alias": "tintColor"; "required": false; }; "isInteractive": { "alias": "isInteractive"; "required": false; }; "colorScheme": { "alias": "colorScheme"; "required": false; }; }, {}, never, never, true, never>;
14
+ }
15
+ export declare abstract class GlassContainerBase extends NativeViewBase {
16
+ spacing?: IGlassContainerProps['spacing'];
17
+ protected readonly propNames: readonly ["spacing"];
18
+ protected renderView(props: object): IDescriptor;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<GlassContainerBase, never>;
20
+ static ɵdir: i0.ɵɵDirectiveDeclaration<GlassContainerBase, never, never, { "spacing": { "alias": "spacing"; "required": false; }; }, {}, never, never, true, never>;
21
+ }
@@ -0,0 +1,50 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { NativeViewBase } from '@symbiote-native/angular';
3
+ import { renderGlassContainer, renderGlassView } from '../../core';
4
+ import * as i0 from "@angular/core";
5
+ // Inputs и сборка дескриптора общие, платформы различаются только шаблоном
6
+ export class GlassViewBase extends NativeViewBase {
7
+ glassEffectStyle;
8
+ tintColor;
9
+ isInteractive;
10
+ colorScheme;
11
+ propNames = [
12
+ 'glassEffectStyle',
13
+ 'tintColor',
14
+ 'isInteractive',
15
+ 'colorScheme',
16
+ ];
17
+ renderView(props) {
18
+ return renderGlassView(props);
19
+ }
20
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GlassViewBase, deps: null, target: i0.ɵɵFactoryTarget.Directive });
21
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: GlassViewBase, isStandalone: true, inputs: { glassEffectStyle: "glassEffectStyle", tintColor: "tintColor", isInteractive: "isInteractive", colorScheme: "colorScheme" }, usesInheritance: true, ngImport: i0 });
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GlassViewBase, decorators: [{
24
+ type: Directive
25
+ }], propDecorators: { glassEffectStyle: [{
26
+ type: Input
27
+ }], tintColor: [{
28
+ type: Input
29
+ }], isInteractive: [{
30
+ type: Input
31
+ }], colorScheme: [{
32
+ type: Input
33
+ }] } });
34
+ export class GlassContainerBase extends NativeViewBase {
35
+ spacing;
36
+ propNames = [
37
+ 'spacing',
38
+ ];
39
+ renderView(props) {
40
+ return renderGlassContainer(props);
41
+ }
42
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GlassContainerBase, deps: null, target: i0.ɵɵFactoryTarget.Directive });
43
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: GlassContainerBase, isStandalone: true, inputs: { spacing: "spacing" }, usesInheritance: true, ngImport: i0 });
44
+ }
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: GlassContainerBase, decorators: [{
46
+ type: Directive
47
+ }], propDecorators: { spacing: [{
48
+ type: Input
49
+ }] } });
50
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/angular/glass/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;;AAGnE,2EAA2E;AAE3E,MAAM,OAAgB,aAAc,SAAQ,cAAc;IAC/C,gBAAgB,CAAuC;IACvD,SAAS,CAAgC;IACzC,aAAa,CAAoC;IACjD,WAAW,CAAkC;IAE1B,SAAS,GAAG;QACtC,kBAAkB;QAClB,WAAW;QACX,eAAe;QACf,aAAa;KACsC,CAAC;IAEnC,UAAU,CAAC,KAAa;QACzC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;uGAfmB,aAAa;2FAAb,aAAa;;2FAAb,aAAa;kBADlC,SAAS;;sBAEP,KAAK;;sBACL,KAAK;;sBACL,KAAK;;sBACL,KAAK;;AAeR,MAAM,OAAgB,kBAAmB,SAAQ,cAAc;IACpD,OAAO,CAAmC;IAEvB,SAAS,GAAG;QACtC,SAAS;KAC+C,CAAC;IAExC,UAAU,CAAC,KAAa;QACzC,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;uGATmB,kBAAkB;2FAAlB,kBAAkB;;2FAAlB,kBAAkB;kBADvC,SAAS;;sBAEP,KAAK"}
@@ -0,0 +1,2 @@
1
+ export { GlassContainer, GlassView } from './glass';
2
+ export { GLASS_EFFECT_MODULE_NAME, glassContainerName, glassViewName, isGlassEffectAPIAvailable, isLiquidGlassAvailable, type IGlassColorScheme, type IGlassContainerProps, type IGlassEffectStyleConfig, type IGlassStyle, type IGlassViewProps, } from '../core';
@@ -0,0 +1,4 @@
1
+ // @symbiote-native/glass-effect/angular: компоненты `GlassView` и `GlassContainer` поверх общего ядра
2
+ export { GlassContainer, GlassView } from './glass';
3
+ export { GLASS_EFFECT_MODULE_NAME, glassContainerName, glassViewName, isGlassEffectAPIAvailable, isLiquidGlassAvailable, } from '../core';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/angular/index.ts"],"names":[],"mappings":"AAAA,sGAAsG;AAEtG,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,aAAa,EACb,yBAAyB,EACzB,sBAAsB,GAMvB,MAAM,SAAS,CAAC"}