@alegendstale/holly-components 1.4.0 → 2.0.2
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/README.md +9 -5
- package/dist/components/absolute-container/absolute-container.d.ts +17 -3
- package/dist/components/absolute-container/absolute-container.d.ts.map +1 -1
- package/dist/components/absolute-container/absolute-container.js +22 -25
- package/dist/components/absolute-container/absolute-container.stories.d.ts +3 -1
- package/dist/components/absolute-container/absolute-container.stories.d.ts.map +1 -1
- package/dist/components/absolute-container/absolute-container.stories.js +35 -7
- package/dist/components/absolute-container/absolute-container.styles.d.ts +3 -0
- package/dist/components/absolute-container/absolute-container.styles.d.ts.map +1 -0
- package/dist/components/absolute-container/absolute-container.styles.js +18 -0
- package/dist/components/bottom-sheet/bottom-sheet.d.ts +25 -0
- package/dist/components/bottom-sheet/bottom-sheet.d.ts.map +1 -1
- package/dist/components/bottom-sheet/bottom-sheet.js +29 -127
- package/dist/components/bottom-sheet/bottom-sheet.stories.d.ts +5 -2
- package/dist/components/bottom-sheet/bottom-sheet.stories.d.ts.map +1 -1
- package/dist/components/bottom-sheet/bottom-sheet.stories.js +31 -7
- package/dist/components/bottom-sheet/bottom-sheet.styles.d.ts +3 -0
- package/dist/components/bottom-sheet/bottom-sheet.styles.d.ts.map +1 -0
- package/dist/components/bottom-sheet/bottom-sheet.styles.js +115 -0
- package/dist/components/canvas/canvas-base.d.ts +8 -1
- package/dist/components/canvas/canvas-base.d.ts.map +1 -1
- package/dist/components/canvas/canvas-base.js +14 -11
- package/dist/components/canvas/canvas-base.stories.d.ts +7 -0
- package/dist/components/canvas/canvas-base.stories.d.ts.map +1 -0
- package/dist/components/canvas/canvas-base.stories.js +24 -0
- package/dist/components/canvas/canvas-gradient.d.ts +10 -3
- package/dist/components/canvas/canvas-gradient.d.ts.map +1 -1
- package/dist/components/canvas/canvas-gradient.js +13 -9
- package/dist/components/canvas/canvas-gradient.stories.d.ts +14 -0
- package/dist/components/canvas/canvas-gradient.stories.d.ts.map +1 -0
- package/dist/components/canvas/canvas-gradient.stories.js +46 -0
- package/dist/components/canvas/canvas-image.d.ts +25 -16
- package/dist/components/canvas/canvas-image.d.ts.map +1 -1
- package/dist/components/canvas/canvas-image.js +84 -72
- package/dist/components/canvas/canvas-image.stories.d.ts +13 -0
- package/dist/components/canvas/canvas-image.stories.d.ts.map +1 -0
- package/dist/components/canvas/canvas-image.stories.js +49 -0
- package/dist/components/canvas/canvas-image.styles.d.ts +3 -0
- package/dist/components/canvas/canvas-image.styles.d.ts.map +1 -0
- package/dist/components/canvas/canvas-image.styles.js +21 -0
- package/dist/components/carousel-scroller/carousel-scroller.d.ts +23 -6
- package/dist/components/carousel-scroller/carousel-scroller.d.ts.map +1 -1
- package/dist/components/carousel-scroller/carousel-scroller.js +32 -80
- package/dist/components/carousel-scroller/carousel-scroller.stories.d.ts +4 -2
- package/dist/components/carousel-scroller/carousel-scroller.stories.d.ts.map +1 -1
- package/dist/components/carousel-scroller/carousel-scroller.stories.js +22 -6
- package/dist/components/carousel-scroller/carousel-scroller.styles.d.ts +3 -0
- package/dist/components/carousel-scroller/carousel-scroller.styles.d.ts.map +1 -0
- package/dist/components/carousel-scroller/carousel-scroller.styles.js +66 -0
- package/dist/components/color-palette/color-palette-utils.d.ts.map +1 -1
- package/dist/components/color-palette/color-palette.d.ts +53 -16
- package/dist/components/color-palette/color-palette.d.ts.map +1 -1
- package/dist/components/color-palette/color-palette.js +72 -126
- package/dist/components/color-palette/color-palette.styles.d.ts +3 -0
- package/dist/components/color-palette/color-palette.styles.d.ts.map +1 -0
- package/dist/components/color-palette/color-palette.styles.js +90 -0
- package/dist/components/color-palette/component/color-palette-component.d.ts +16 -2
- package/dist/components/color-palette/component/color-palette-component.d.ts.map +1 -1
- package/dist/components/color-palette/component/color-palette-component.js +18 -19
- package/dist/components/color-palette/component/color-palette-component.stories.d.ts +4 -2
- package/dist/components/color-palette/component/color-palette-component.stories.d.ts.map +1 -1
- package/dist/components/color-palette/component/color-palette-component.stories.js +34 -36
- package/dist/components/color-palette/component/color-palette-component.styles.d.ts +3 -0
- package/dist/components/color-palette/component/color-palette-component.styles.d.ts.map +1 -0
- package/dist/components/color-palette/component/color-palette-component.styles.js +10 -0
- package/dist/components/color-palette/editor/color-palette-editor.d.ts +28 -14
- package/dist/components/color-palette/editor/color-palette-editor.d.ts.map +1 -1
- package/dist/components/color-palette/editor/color-palette-editor.js +30 -216
- package/dist/components/color-palette/editor/color-palette-editor.stories.d.ts +9 -2
- package/dist/components/color-palette/editor/color-palette-editor.stories.d.ts.map +1 -1
- package/dist/components/color-palette/editor/color-palette-editor.stories.js +32 -4
- package/dist/components/color-palette/editor/color-palette-editor.styles.d.ts +3 -0
- package/dist/components/color-palette/editor/color-palette-editor.styles.d.ts.map +1 -0
- package/dist/components/color-palette/editor/color-palette-editor.styles.js +147 -0
- package/dist/components/color-palette/editor/settings-item.d.ts +20 -0
- package/dist/components/color-palette/editor/settings-item.d.ts.map +1 -0
- package/dist/components/color-palette/editor/settings-item.js +43 -0
- package/dist/components/color-palette/editor/settings-item.styles.d.ts +3 -0
- package/dist/components/color-palette/editor/settings-item.styles.d.ts.map +1 -0
- package/dist/components/color-palette/editor/settings-item.styles.js +34 -0
- package/dist/components/color-palette/item/color-palette-item-edit.d.ts +9 -2
- package/dist/components/color-palette/item/color-palette-item-edit.d.ts.map +1 -1
- package/dist/components/color-palette/item/color-palette-item-edit.js +12 -57
- package/dist/components/color-palette/item/color-palette-item-edit.styles.d.ts +3 -0
- package/dist/components/color-palette/item/color-palette-item-edit.styles.d.ts.map +1 -0
- package/dist/components/color-palette/item/color-palette-item-edit.styles.js +51 -0
- package/dist/components/color-palette/item/color-palette-item.d.ts +21 -2
- package/dist/components/color-palette/item/color-palette-item.d.ts.map +1 -1
- package/dist/components/color-palette/item/color-palette-item.js +23 -89
- package/dist/components/color-palette/item/color-palette-item.styles.d.ts +3 -0
- package/dist/components/color-palette/item/color-palette-item.styles.d.ts.map +1 -0
- package/dist/components/color-palette/item/color-palette-item.styles.js +83 -0
- package/dist/components/color-palette/menu/color-palette-menu.d.ts +15 -3
- package/dist/components/color-palette/menu/color-palette-menu.d.ts.map +1 -1
- package/dist/components/color-palette/menu/color-palette-menu.js +15 -54
- package/dist/components/color-palette/menu/color-palette-menu.styles.d.ts +3 -0
- package/dist/components/color-palette/menu/color-palette-menu.styles.d.ts.map +1 -0
- package/dist/components/color-palette/menu/color-palette-menu.styles.js +49 -0
- package/dist/components/color-palette/menu/color-palette-reorder.d.ts +8 -1
- package/dist/components/color-palette/menu/color-palette-reorder.d.ts.map +1 -1
- package/dist/components/color-palette/menu/color-palette-reorder.js +11 -36
- package/dist/components/color-palette/menu/color-palette-reorder.styles.d.ts +3 -0
- package/dist/components/color-palette/menu/color-palette-reorder.styles.d.ts.map +1 -0
- package/dist/components/color-palette/menu/color-palette-reorder.styles.js +31 -0
- package/dist/components/color-palette/storybook/color-palette-invalid.stories.d.ts +26 -8
- package/dist/components/color-palette/storybook/color-palette-invalid.stories.d.ts.map +1 -1
- package/dist/components/color-palette/storybook/color-palette-invalid.stories.js +10 -39
- package/dist/components/color-palette/storybook/color-palette-valid.stories.d.ts +26 -8
- package/dist/components/color-palette/storybook/color-palette-valid.stories.d.ts.map +1 -1
- package/dist/components/color-palette/storybook/color-palette-valid.stories.js +30 -58
- package/dist/components/color-palette/storybook/color-palette.stories.d.ts +18 -4
- package/dist/components/color-palette/storybook/color-palette.stories.d.ts.map +1 -1
- package/dist/components/color-palette/storybook/color-palette.stories.js +65 -14
- package/dist/components/draw-svg/draw-svg.d.ts +11 -0
- package/dist/components/draw-svg/draw-svg.d.ts.map +1 -1
- package/dist/components/draw-svg/draw-svg.js +15 -45
- package/dist/components/draw-svg/draw-svg.stories.d.ts +2 -14
- package/dist/components/draw-svg/draw-svg.stories.d.ts.map +1 -1
- package/dist/components/draw-svg/draw-svg.stories.js +21 -97
- package/dist/components/draw-svg/draw-svg.styles.d.ts +3 -0
- package/dist/components/draw-svg/draw-svg.styles.d.ts.map +1 -0
- package/dist/components/draw-svg/draw-svg.styles.js +39 -0
- package/dist/components/responsive-svg/responsive-svg.d.ts +35 -15
- package/dist/components/responsive-svg/responsive-svg.d.ts.map +1 -1
- package/dist/components/responsive-svg/responsive-svg.js +59 -97
- package/dist/components/responsive-svg/responsive-svg.stories.d.ts +5 -4
- package/dist/components/responsive-svg/responsive-svg.stories.d.ts.map +1 -1
- package/dist/components/responsive-svg/responsive-svg.stories.js +93 -109
- package/dist/components/responsive-svg/responsive-svg.styles.d.ts +3 -0
- package/dist/components/responsive-svg/responsive-svg.styles.d.ts.map +1 -0
- package/dist/components/responsive-svg/responsive-svg.styles.js +46 -0
- package/dist/components/tool-tip/tool-tip.d.ts +24 -9
- package/dist/components/tool-tip/tool-tip.d.ts.map +1 -1
- package/dist/components/tool-tip/tool-tip.js +49 -90
- package/dist/components/tool-tip/tool-tip.stories.d.ts +4 -1
- package/dist/components/tool-tip/tool-tip.stories.d.ts.map +1 -1
- package/dist/components/tool-tip/tool-tip.stories.js +35 -5
- package/dist/components/tool-tip/tool-tip.styles.d.ts +3 -0
- package/dist/components/tool-tip/tool-tip.styles.d.ts.map +1 -0
- package/dist/components/tool-tip/tool-tip.styles.js +58 -0
- package/package.json +23 -19
- package/dist/components/bottom-sheet/bottom-sheet.test.d.ts +0 -2
- package/dist/components/bottom-sheet/bottom-sheet.test.d.ts.map +0 -1
- package/dist/components/bottom-sheet/bottom-sheet.test.js +0 -15
- package/dist/components/tool-tip/Tooltip2.d.ts +0 -17
- package/dist/components/tool-tip/Tooltip2.d.ts.map +0 -1
- package/dist/components/tool-tip/Tooltip2.js +0 -104
|
@@ -1,19 +1,7 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/web-components';
|
|
2
|
-
import {
|
|
3
|
-
import { PreserveAspectRatio } from '../responsive-svg/responsive-svg.js';
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/web-components-vite';
|
|
2
|
+
import { Props } from '../responsive-svg/responsive-svg.stories.js';
|
|
4
3
|
declare const meta: Meta;
|
|
5
4
|
export default meta;
|
|
6
|
-
type Props = {
|
|
7
|
-
fontSize: number;
|
|
8
|
-
stroke: string;
|
|
9
|
-
fill: string;
|
|
10
|
-
autofit: boolean;
|
|
11
|
-
svgColors: boolean;
|
|
12
|
-
height: number;
|
|
13
|
-
width: number;
|
|
14
|
-
svg: SVGElement | TemplateResult<2> | string;
|
|
15
|
-
preserveAspectRatio: PreserveAspectRatio;
|
|
16
|
-
};
|
|
17
5
|
type Story = StoryObj<Props>;
|
|
18
6
|
export declare const DrawSVG: Story;
|
|
19
7
|
//# sourceMappingURL=draw-svg.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draw-svg.stories.d.ts","sourceRoot":"","sources":["../../../src/components/draw-svg/draw-svg.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"draw-svg.stories.d.ts","sourceRoot":"","sources":["../../../src/components/draw-svg/draw-svg.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAK/E,OAA2B,EAAE,KAAK,EAAE,MAAM,6CAA6C,CAAC;AAQxF,QAAA,MAAM,IAAI,EAAE,IAKX,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAgC7B,eAAO,MAAM,OAAO,EAAE,KAgBrB,CAAC"}
|
|
@@ -1,109 +1,33 @@
|
|
|
1
1
|
import { html } from 'lit';
|
|
2
2
|
import { styleMap } from 'lit/directives/style-map.js';
|
|
3
3
|
import DrawSVGRaw from '../../assets/DrawSVG.svg?raw';
|
|
4
|
-
import {
|
|
4
|
+
import { expect } from 'storybook/test';
|
|
5
|
+
import ResponsiveSVGStory from '../responsive-svg/responsive-svg.stories.js';
|
|
6
|
+
const argTypes = {
|
|
7
|
+
...ResponsiveSVGStory.argTypes,
|
|
8
|
+
isIntersecting: { control: false },
|
|
9
|
+
emitter: { control: false }
|
|
10
|
+
};
|
|
5
11
|
const meta = {
|
|
6
|
-
title: 'Draw SVG',
|
|
12
|
+
title: 'SVG/Draw SVG',
|
|
7
13
|
tags: ['autodocs'],
|
|
8
14
|
component: 'draw-svg',
|
|
9
|
-
argTypes
|
|
10
|
-
fontSize: {
|
|
11
|
-
control: {
|
|
12
|
-
type: 'number',
|
|
13
|
-
step: 8
|
|
14
|
-
},
|
|
15
|
-
description: 'Set the font size in pixels the SVG will scale to (provided autofit is not being used)',
|
|
16
|
-
table: {
|
|
17
|
-
defaultValue: { summary: '128' }
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
stroke: {
|
|
21
|
-
control: {
|
|
22
|
-
type: 'color',
|
|
23
|
-
presetColors: [
|
|
24
|
-
'rebeccapurple', 'black'
|
|
25
|
-
]
|
|
26
|
-
},
|
|
27
|
-
description: 'Set the Path stroke color',
|
|
28
|
-
table: {
|
|
29
|
-
defaultValue: { summary: 'rebeccapurple' }
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
fill: {
|
|
33
|
-
control: {
|
|
34
|
-
type: 'color',
|
|
35
|
-
presetColors: [
|
|
36
|
-
'rebeccapurple', 'black'
|
|
37
|
-
]
|
|
38
|
-
},
|
|
39
|
-
description: 'Set the SVG and Path fill color',
|
|
40
|
-
table: {
|
|
41
|
-
defaultValue: { summary: 'black' }
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
autofit: {
|
|
45
|
-
control: {
|
|
46
|
-
type: 'boolean'
|
|
47
|
-
},
|
|
48
|
-
description: 'Set whether the SVG will fill the container or available space',
|
|
49
|
-
table: {
|
|
50
|
-
defaultValue: { summary: 'false' }
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
svgColors: {
|
|
54
|
-
control: {
|
|
55
|
-
type: 'boolean',
|
|
56
|
-
},
|
|
57
|
-
description: 'Uses the colors from the SVG input',
|
|
58
|
-
table: {
|
|
59
|
-
defaultValue: { summary: 'false' }
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
|
-
height: {
|
|
63
|
-
control: {
|
|
64
|
-
type: 'number',
|
|
65
|
-
},
|
|
66
|
-
description: 'Set the SVG height',
|
|
67
|
-
table: {
|
|
68
|
-
defaultValue: { summary: '0' }
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
|
-
width: {
|
|
72
|
-
control: {
|
|
73
|
-
type: 'number',
|
|
74
|
-
},
|
|
75
|
-
description: 'Set the SVG width',
|
|
76
|
-
table: {
|
|
77
|
-
defaultValue: { summary: '0' }
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
svg: {
|
|
81
|
-
control: {
|
|
82
|
-
type: 'text',
|
|
83
|
-
},
|
|
84
|
-
description: 'Input a string representing an SVG'
|
|
85
|
-
},
|
|
86
|
-
preserveAspectRatio: {
|
|
87
|
-
control: 'select',
|
|
88
|
-
options: preserveAspectRatioOptions,
|
|
89
|
-
description: 'Set whether SVG preserves its aspect ratio alignment or spacing',
|
|
90
|
-
table: {
|
|
91
|
-
defaultValue: { summary: 'xMidYMid meet' }
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
}
|
|
15
|
+
argTypes
|
|
95
16
|
};
|
|
96
17
|
export default meta;
|
|
97
|
-
const
|
|
98
|
-
render: ({ fontSize, stroke, fill, autofit, svgColors,
|
|
18
|
+
const template = {
|
|
19
|
+
render: ({ fontSize, stroke, fill, autofit, svgColors, svg, preserveAspectRatio, "--svg-height": height, "--svg-width": width, "--scale": scale }) => {
|
|
99
20
|
const styles = {
|
|
21
|
+
'font-size': `${fontSize}px`,
|
|
100
22
|
stroke,
|
|
101
23
|
fill,
|
|
102
|
-
'
|
|
24
|
+
'--svg-height': height !== '0em' ? height : null,
|
|
25
|
+
'--svg-width': width !== '0em' ? width : null,
|
|
26
|
+
'--scale': scale
|
|
103
27
|
};
|
|
104
28
|
return html `
|
|
105
29
|
<style>
|
|
106
|
-
draw-svg::part(
|
|
30
|
+
draw-svg::part(__path) {
|
|
107
31
|
animation-iteration-count: infinite;
|
|
108
32
|
}
|
|
109
33
|
</style>
|
|
@@ -111,8 +35,6 @@ const Template = {
|
|
|
111
35
|
<draw-svg
|
|
112
36
|
?autofit=${autofit}
|
|
113
37
|
?svgColors=${svgColors}
|
|
114
|
-
height=${height}
|
|
115
|
-
width=${width}
|
|
116
38
|
.preserveAspectRatio=${preserveAspectRatio}
|
|
117
39
|
.svg=${svg}
|
|
118
40
|
style=${styleMap(styles)}
|
|
@@ -122,16 +44,18 @@ const Template = {
|
|
|
122
44
|
},
|
|
123
45
|
};
|
|
124
46
|
export const DrawSVG = {
|
|
125
|
-
...
|
|
47
|
+
...template,
|
|
126
48
|
args: {
|
|
127
49
|
fontSize: 128,
|
|
128
50
|
stroke: 'red',
|
|
129
51
|
fill: 'black',
|
|
130
52
|
autofit: false,
|
|
131
53
|
svgColors: false,
|
|
132
|
-
height: 0,
|
|
133
|
-
width: 0,
|
|
134
54
|
svg: DrawSVGRaw,
|
|
135
55
|
preserveAspectRatio: 'xMidYMid meet'
|
|
136
56
|
},
|
|
57
|
+
play: async ({ canvasElement }) => {
|
|
58
|
+
const component = canvasElement.querySelector('draw-svg');
|
|
59
|
+
expect(component);
|
|
60
|
+
}
|
|
137
61
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draw-svg.styles.d.ts","sourceRoot":"","sources":["../../../src/components/draw-svg/draw-svg.styles.ts"],"names":[],"mappings":";AAEA,wBAqCE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { css } from 'lit';
|
|
2
|
+
export default css `
|
|
3
|
+
:host {
|
|
4
|
+
stroke: white;
|
|
5
|
+
fill: white;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/* Override responsive-svg path fill */
|
|
9
|
+
:host(:not([svgColors])) path {
|
|
10
|
+
fill: transparent;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
path {
|
|
14
|
+
stroke-width: 2;
|
|
15
|
+
stroke-dasharray: 1000;
|
|
16
|
+
stroke-dashoffset: 1000;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.animation {
|
|
20
|
+
path {
|
|
21
|
+
animation: textAnimation 2s ease-in-out 1 forwards;
|
|
22
|
+
will-change: fill, stroke-width, stroke-dashoffset;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@keyframes textAnimation {
|
|
27
|
+
0% {
|
|
28
|
+
stroke-dashoffset: 1000;
|
|
29
|
+
}
|
|
30
|
+
60% {
|
|
31
|
+
fill: transparent;
|
|
32
|
+
}
|
|
33
|
+
100% {
|
|
34
|
+
fill: inherit;
|
|
35
|
+
stroke-dashoffset: 0;
|
|
36
|
+
stroke-width: 1;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LitElement, TemplateResult } from 'lit';
|
|
2
|
-
type
|
|
2
|
+
type ViewBox = {
|
|
3
3
|
x: number;
|
|
4
4
|
y: number;
|
|
5
5
|
width: number;
|
|
@@ -12,35 +12,55 @@ export type PreserveAspectRatioAlign = typeof preserveAspectRatioAlignOptions[nu
|
|
|
12
12
|
export type PreserveAspectRatioSpacing = typeof preserveAspectRatioSpacingOptions[number];
|
|
13
13
|
export type PreserveAspectRatio = typeof preserveAspectRatioOptions[number];
|
|
14
14
|
export type CombinedAlignSpacing = `${PreserveAspectRatioAlign} ${PreserveAspectRatioSpacing}`;
|
|
15
|
+
/**
|
|
16
|
+
* Responsively sizes SVGs to font-size or automatically fits them to the container.
|
|
17
|
+
*
|
|
18
|
+
* @cssprop {<length> (em)} --svg-width - Controls the width of the SVG. (Expects em value)
|
|
19
|
+
* @cssprop {<length> (em)} --svg-height - Controls the height of the SVG. (Expects em value)
|
|
20
|
+
* @cssprop {<length> (em)} --svg-width-fallback - Set by the component as a fallback in case --svg-width is not defined.
|
|
21
|
+
* @cssprop {<length> (em)} --svg-height-fallback - Set by the component as a fallback in case --svg-height is not defined.
|
|
22
|
+
* @cssprop {number} --scale - Controls the scale of the SVG when sized relative to font-size.
|
|
23
|
+
*
|
|
24
|
+
* @csspart __svg - Styles the SVG element.
|
|
25
|
+
* @csspart __path - Styles all child path elements of the SVG.
|
|
26
|
+
*/
|
|
15
27
|
export declare class ResponsiveSvg extends LitElement {
|
|
16
28
|
static styles: import("lit").CSSResult[];
|
|
29
|
+
/** The SVG will attempt to fill its container. */
|
|
17
30
|
autofit: boolean;
|
|
18
|
-
/**
|
|
31
|
+
/** Use the colors from the SVG input. */
|
|
19
32
|
svgColors: boolean;
|
|
20
|
-
|
|
21
|
-
width: number;
|
|
33
|
+
/** @internal */
|
|
22
34
|
private _svg?;
|
|
23
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* The SVG to responsively size.
|
|
37
|
+
* Must use a property expression (.) to set
|
|
38
|
+
* @type {SVGElement | TemplateResult<2> | string}
|
|
39
|
+
*/
|
|
24
40
|
set svg(val: SVGElement | TemplateResult<2> | string);
|
|
25
41
|
get svg(): SVGElement | TemplateResult<2> | string;
|
|
42
|
+
/** @internal */
|
|
26
43
|
private _preserveAspectRatio;
|
|
27
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Set whether SVG preserves its aspect ratio alignment or spacing.
|
|
46
|
+
* @type {PreserveAspectRatio}
|
|
47
|
+
* @default xMidYMid meet
|
|
48
|
+
*/
|
|
28
49
|
set preserveAspectRatio(val: PreserveAspectRatio | undefined);
|
|
29
50
|
get preserveAspectRatio(): PreserveAspectRatio | undefined;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
get viewBox(): ViewBoxType;
|
|
51
|
+
/** The viewBox dimensions the SVG will use. */
|
|
52
|
+
protected viewBox: ViewBox;
|
|
33
53
|
protected svgClasses(): {};
|
|
54
|
+
connectedCallback(): void;
|
|
34
55
|
render(): TemplateResult<1> | undefined;
|
|
35
|
-
/**
|
|
36
|
-
* Applies a part name to all paths in the given element
|
|
37
|
-
*/
|
|
56
|
+
/** Applies a part name to all paths in the given element. */
|
|
38
57
|
private applyPartToPaths;
|
|
39
58
|
/**
|
|
40
|
-
*
|
|
41
|
-
* @
|
|
59
|
+
* Gets the viewBox dimensions from an SVG element.
|
|
60
|
+
* @param svg The SVG to get the attribute from.
|
|
61
|
+
* @returns The SVG viewBox x, y, width, and height
|
|
42
62
|
*/
|
|
43
|
-
getViewBoxSize(svg: SVGElement):
|
|
63
|
+
getViewBoxSize(svg: SVGElement): ViewBox | null;
|
|
44
64
|
}
|
|
45
65
|
declare global {
|
|
46
66
|
interface HTMLElementTagNameMap {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responsive-svg.d.ts","sourceRoot":"","sources":["../../../src/components/responsive-svg/responsive-svg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"responsive-svg.d.ts","sourceRoot":"","sources":["../../../src/components/responsive-svg/responsive-svg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,cAAc,EAAkB,MAAM,KAAK,CAAC;AAQvE,KAAK,OAAO,GAAG;IACd,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAA;CACd,CAAA;AAED,eAAO,MAAM,+BAA+B,+HAKlC,CAAC;AAEX,eAAO,MAAM,iCAAiC,4BAA6B,CAAC;AAE5E,eAAO,MAAM,0BAA0B,+eAG7B,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAAG,OAAO,+BAA+B,CAAC,MAAM,CAAC,CAAC;AACtF,MAAM,MAAM,0BAA0B,GAAG,OAAO,iCAAiC,CAAC,MAAM,CAAC,CAAC;AAC1F,MAAM,MAAM,mBAAmB,GAAG,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAC5E,MAAM,MAAM,oBAAoB,GAAG,GAAG,wBAAwB,IAAI,0BAA0B,EAAE,CAAC;AAQ/F;;;;;;;;;;;GAWG;AACH,qBACa,aAAc,SAAQ,UAAU;IAC5C,MAAM,CAAC,MAAM,4BAAY;IAEzB,kDAAkD;IAElD,OAAO,EAAE,OAAO,CAAS;IAEzB,yCAAyC;IAEzC,SAAS,EAAE,OAAO,CAAS;IAE3B,gBAAgB;IAChB,OAAO,CAAC,IAAI,CAAC,CAAiC;IAC9C;;;;OAIG;IACH,IACI,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,EASnD;IACD,IAAI,GAAG,IAVM,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAYnD;IAED,gBAAgB;IAChB,OAAO,CAAC,oBAAoB,CAAkC;IAC9D;;;;OAIG;IACH,IACI,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,SAAS,EAE3D;IACD,IAAI,mBAAmB,IAHM,mBAAmB,GAAG,SAAS,CAW3D;IAED,+CAA+C;IAC/C,SAAS,CAAC,OAAO,EAAE,OAAO,CAAuC;IAGjE,SAAS,CAAC,UAAU;IAIpB,iBAAiB,IAAI,IAAI;IAkBzB,MAAM;IAwCN,6DAA6D;IAC7D,OAAO,CAAC,gBAAgB;IAaxB;;;;OAIG;IACI,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,GAAG,IAAI;CAMtD;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,gBAAgB,EAAE,aAAa,CAAC;KAChC;CACD"}
|
|
@@ -4,13 +4,13 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { LitElement, html
|
|
8
|
-
import {
|
|
7
|
+
import { LitElement, html } from 'lit';
|
|
8
|
+
import { customElement, property } from 'lit/decorators.js';
|
|
9
9
|
import { styleMap } from 'lit/directives/style-map.js';
|
|
10
|
-
import { condCustomElement } from '../../decorators/condCustomElement.js';
|
|
11
10
|
import { parseSVG } from '../../utils/basicUtils.js';
|
|
12
11
|
import { classMap } from 'lit/directives/class-map.js';
|
|
13
12
|
import { isTemplateResult } from 'lit/directive-helpers.js';
|
|
13
|
+
import styles from './responsive-svg.styles.js';
|
|
14
14
|
export const preserveAspectRatioAlignOptions = [
|
|
15
15
|
"none",
|
|
16
16
|
"xMinYMin", "xMidYMin", "xMaxYMin",
|
|
@@ -26,17 +26,34 @@ const preserveAspectRatioSet = new Set(preserveAspectRatioOptions);
|
|
|
26
26
|
function isPreserveAspectRatio(value) {
|
|
27
27
|
return preserveAspectRatioSet.has(value);
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Responsively sizes SVGs to font-size or automatically fits them to the container.
|
|
31
|
+
*
|
|
32
|
+
* @cssprop {<length> (em)} --svg-width - Controls the width of the SVG. (Expects em value)
|
|
33
|
+
* @cssprop {<length> (em)} --svg-height - Controls the height of the SVG. (Expects em value)
|
|
34
|
+
* @cssprop {<length> (em)} --svg-width-fallback - Set by the component as a fallback in case --svg-width is not defined.
|
|
35
|
+
* @cssprop {<length> (em)} --svg-height-fallback - Set by the component as a fallback in case --svg-height is not defined.
|
|
36
|
+
* @cssprop {number} --scale - Controls the scale of the SVG when sized relative to font-size.
|
|
37
|
+
*
|
|
38
|
+
* @csspart __svg - Styles the SVG element.
|
|
39
|
+
* @csspart __path - Styles all child path elements of the SVG.
|
|
40
|
+
*/
|
|
29
41
|
let ResponsiveSvg = class ResponsiveSvg extends LitElement {
|
|
30
42
|
constructor() {
|
|
31
43
|
super(...arguments);
|
|
44
|
+
/** The SVG will attempt to fill its container. */
|
|
32
45
|
this.autofit = false;
|
|
33
|
-
/**
|
|
46
|
+
/** Use the colors from the SVG input. */
|
|
34
47
|
this.svgColors = false;
|
|
35
|
-
|
|
36
|
-
this.
|
|
37
|
-
this._viewBox = { x: 0, y: 0, width: 0, height: 0 };
|
|
48
|
+
/** The viewBox dimensions the SVG will use. */
|
|
49
|
+
this.viewBox = { x: 0, y: 0, width: 0, height: 0 };
|
|
38
50
|
}
|
|
39
|
-
|
|
51
|
+
static { this.styles = [styles]; }
|
|
52
|
+
/**
|
|
53
|
+
* The SVG to responsively size.
|
|
54
|
+
* Must use a property expression (.) to set
|
|
55
|
+
* @type {SVGElement | TemplateResult<2> | string}
|
|
56
|
+
*/
|
|
40
57
|
set svg(val) {
|
|
41
58
|
const _svg = val instanceof SVGElement
|
|
42
59
|
? val : isTemplateResult(val)
|
|
@@ -49,7 +66,11 @@ let ResponsiveSvg = class ResponsiveSvg extends LitElement {
|
|
|
49
66
|
get svg() {
|
|
50
67
|
return this._svg ?? '';
|
|
51
68
|
}
|
|
52
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Set whether SVG preserves its aspect ratio alignment or spacing.
|
|
71
|
+
* @type {PreserveAspectRatio}
|
|
72
|
+
* @default xMidYMid meet
|
|
73
|
+
*/
|
|
53
74
|
set preserveAspectRatio(val) {
|
|
54
75
|
this._preserveAspectRatio = val;
|
|
55
76
|
}
|
|
@@ -63,32 +84,28 @@ let ResponsiveSvg = class ResponsiveSvg extends LitElement {
|
|
|
63
84
|
// Otherwise return the preserveAspectRatio the user set OR default value
|
|
64
85
|
return this._preserveAspectRatio || 'xMidYMid meet';
|
|
65
86
|
}
|
|
66
|
-
|
|
67
|
-
|
|
87
|
+
// For classes inheriting from responsive-svg (e.g. draw-svg)
|
|
88
|
+
svgClasses() {
|
|
89
|
+
return {};
|
|
68
90
|
}
|
|
69
|
-
|
|
91
|
+
connectedCallback() {
|
|
92
|
+
super.connectedCallback();
|
|
70
93
|
if (this.svg instanceof SVGElement) {
|
|
71
94
|
const _viewBox = this.getViewBoxSize(this.svg);
|
|
72
|
-
const _width =
|
|
73
|
-
const _height =
|
|
74
|
-
|
|
75
|
-
|
|
95
|
+
const _width = this.svg.getAttribute('width');
|
|
96
|
+
const _height = this.svg.getAttribute('height');
|
|
97
|
+
this.viewBox = _viewBox ?? { x: 0, y: 0, width: Number(_width) || 0, height: Number(_height) || 0 };
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const _width = this.style.getPropertyValue('--svg-width');
|
|
101
|
+
const _height = this.style.getPropertyValue('--svg-height');
|
|
102
|
+
this.viewBox = { x: 0, y: 0, width: parseFloat(_width) || 0, height: parseFloat(_height) || 0 };
|
|
76
103
|
}
|
|
77
|
-
return this._viewBox;
|
|
78
|
-
}
|
|
79
|
-
// For classes inheriting from responsive-svg (e.g. draw-svg)
|
|
80
|
-
svgClasses() {
|
|
81
|
-
return {};
|
|
82
104
|
}
|
|
83
105
|
render() {
|
|
84
|
-
const
|
|
85
|
-
const height = this.height !== 0 ? this.height : this.viewBox.height;
|
|
106
|
+
const viewBox = this.viewBox;
|
|
86
107
|
const preserveAspectRatio = this.preserveAspectRatio;
|
|
87
108
|
const svgClasses = this.svgClasses();
|
|
88
|
-
const styles = {
|
|
89
|
-
'--svg-width': `${width}em`,
|
|
90
|
-
'--svg-height': `${height}em`,
|
|
91
|
-
};
|
|
92
109
|
// Check if svg exists, otherwise early return
|
|
93
110
|
if (typeof this.svg === 'string')
|
|
94
111
|
return html `<p style="font-size: initial;">⚠️ SVG Error</p>`;
|
|
@@ -96,21 +113,24 @@ let ResponsiveSvg = class ResponsiveSvg extends LitElement {
|
|
|
96
113
|
// SVGElement provided as input
|
|
97
114
|
if (this.svg instanceof SVGElement) {
|
|
98
115
|
const clonedSVG = this.svg.cloneNode(true);
|
|
99
|
-
this.applyPartToPaths(clonedSVG, '
|
|
100
|
-
return buildSVG(Array.from(clonedSVG.children),
|
|
116
|
+
this.applyPartToPaths(clonedSVG, '__path');
|
|
117
|
+
return buildSVG(Array.from(clonedSVG.children), viewBox);
|
|
101
118
|
}
|
|
102
119
|
// TemplateResult<2> provided as input
|
|
103
120
|
else
|
|
104
|
-
return buildSVG(this.svg,
|
|
121
|
+
return buildSVG(this.svg, viewBox);
|
|
105
122
|
}
|
|
106
|
-
function buildSVG(svg,
|
|
123
|
+
function buildSVG(svg, viewBox) {
|
|
107
124
|
if (svg) {
|
|
108
125
|
return html `
|
|
109
126
|
<svg
|
|
110
|
-
part="
|
|
127
|
+
part="__svg"
|
|
111
128
|
class=${classMap(svgClasses)}
|
|
112
|
-
style=${styleMap(
|
|
113
|
-
|
|
129
|
+
style=${styleMap({
|
|
130
|
+
'--svg-width-fallback': `${viewBox.width}em`,
|
|
131
|
+
'--svg-height-fallback': `${viewBox.height}em`,
|
|
132
|
+
})}
|
|
133
|
+
viewBox="${viewBox.x} ${viewBox.y} ${viewBox.width} ${viewBox.height}"
|
|
114
134
|
preserveAspectRatio=${preserveAspectRatio}
|
|
115
135
|
xmlns="http://www.w3.org/2000/svg"
|
|
116
136
|
>
|
|
@@ -120,9 +140,7 @@ let ResponsiveSvg = class ResponsiveSvg extends LitElement {
|
|
|
120
140
|
}
|
|
121
141
|
}
|
|
122
142
|
}
|
|
123
|
-
/**
|
|
124
|
-
* Applies a part name to all paths in the given element
|
|
125
|
-
*/
|
|
143
|
+
/** Applies a part name to all paths in the given element. */
|
|
126
144
|
applyPartToPaths(element, partValue) {
|
|
127
145
|
if (element instanceof Element) {
|
|
128
146
|
if (element.tagName.toLowerCase() === 'path') {
|
|
@@ -135,8 +153,9 @@ let ResponsiveSvg = class ResponsiveSvg extends LitElement {
|
|
|
135
153
|
}
|
|
136
154
|
}
|
|
137
155
|
/**
|
|
138
|
-
*
|
|
139
|
-
* @
|
|
156
|
+
* Gets the viewBox dimensions from an SVG element.
|
|
157
|
+
* @param svg The SVG to get the attribute from.
|
|
158
|
+
* @returns The SVG viewBox x, y, width, and height
|
|
140
159
|
*/
|
|
141
160
|
getViewBoxSize(svg) {
|
|
142
161
|
const viewBox = svg.getAttribute('viewBox')?.split(' ');
|
|
@@ -145,76 +164,19 @@ let ResponsiveSvg = class ResponsiveSvg extends LitElement {
|
|
|
145
164
|
return { x: +viewBox[0], y: +viewBox[1], width: +viewBox[2], height: +viewBox[3] };
|
|
146
165
|
}
|
|
147
166
|
};
|
|
148
|
-
ResponsiveSvg.styles = [
|
|
149
|
-
css `
|
|
150
|
-
:host {
|
|
151
|
-
display: block;
|
|
152
|
-
--svg-width: 0;
|
|
153
|
-
--svg-height: 0;
|
|
154
|
-
--scale: 1;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
:host([autofit]), :host([autofit]) svg {
|
|
158
|
-
width: 100%;
|
|
159
|
-
height: 100%;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/* Size scaling based on font-size */
|
|
163
|
-
:host(:not([autofit])) {
|
|
164
|
-
/* Removes extra space from under SVG */
|
|
165
|
-
display: flex;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
:host(:not([autofit])) svg {
|
|
169
|
-
/* Allow SVG to be manipulated by font size */
|
|
170
|
-
display: inline-block;
|
|
171
|
-
/* Change SVG size using font-size */
|
|
172
|
-
font-size: inherit;
|
|
173
|
-
/* Remove extra vertical space in inline element reserved for character descenders */
|
|
174
|
-
vertical-align: top;
|
|
175
|
-
|
|
176
|
-
width: calc(var(--svg-width) / 100 * var(--scale));
|
|
177
|
-
height: calc(var(--svg-height) / 100 * var(--scale));
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
:host(:not([svgColors])) svg {
|
|
181
|
-
/* Inherit fill to bypass default */
|
|
182
|
-
fill: inherit;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
:host(:not([svgColors])) path {
|
|
186
|
-
fill: inherit;
|
|
187
|
-
stroke: inherit;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
svg {
|
|
191
|
-
max-width: 100%;
|
|
192
|
-
max-height: 100%;
|
|
193
|
-
}
|
|
194
|
-
`,
|
|
195
|
-
];
|
|
196
167
|
__decorate([
|
|
197
168
|
property({ type: Boolean, reflect: true })
|
|
198
169
|
], ResponsiveSvg.prototype, "autofit", void 0);
|
|
199
170
|
__decorate([
|
|
200
171
|
property({ type: Boolean, reflect: true })
|
|
201
172
|
], ResponsiveSvg.prototype, "svgColors", void 0);
|
|
202
|
-
__decorate([
|
|
203
|
-
property({ type: Number, reflect: true })
|
|
204
|
-
], ResponsiveSvg.prototype, "height", void 0);
|
|
205
|
-
__decorate([
|
|
206
|
-
property({ type: Number, reflect: true })
|
|
207
|
-
], ResponsiveSvg.prototype, "width", void 0);
|
|
208
173
|
__decorate([
|
|
209
174
|
property({ type: Object })
|
|
210
175
|
], ResponsiveSvg.prototype, "svg", null);
|
|
211
176
|
__decorate([
|
|
212
177
|
property({ type: String, reflect: true })
|
|
213
178
|
], ResponsiveSvg.prototype, "preserveAspectRatio", null);
|
|
214
|
-
__decorate([
|
|
215
|
-
state()
|
|
216
|
-
], ResponsiveSvg.prototype, "viewBox", null);
|
|
217
179
|
ResponsiveSvg = __decorate([
|
|
218
|
-
|
|
180
|
+
customElement('responsive-svg')
|
|
219
181
|
], ResponsiveSvg);
|
|
220
182
|
export { ResponsiveSvg };
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/web-components';
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/web-components-vite';
|
|
2
2
|
import { TemplateResult } from 'lit';
|
|
3
3
|
import { PreserveAspectRatio } from './responsive-svg.js';
|
|
4
4
|
declare const meta: Meta;
|
|
5
5
|
export default meta;
|
|
6
|
-
type Props = {
|
|
6
|
+
export type Props = {
|
|
7
7
|
fontSize: number;
|
|
8
8
|
stroke: string;
|
|
9
9
|
fill: string;
|
|
10
10
|
autofit: boolean;
|
|
11
11
|
svgColors: boolean;
|
|
12
|
-
height: number;
|
|
13
|
-
width: number;
|
|
14
12
|
svg: SVGElement | TemplateResult<2> | string;
|
|
15
13
|
preserveAspectRatio: PreserveAspectRatio;
|
|
14
|
+
'--svg-height': string;
|
|
15
|
+
'--svg-width': string;
|
|
16
|
+
'--scale': number;
|
|
16
17
|
};
|
|
17
18
|
type Story = StoryObj<Props>;
|
|
18
19
|
export declare const SVG: Story;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responsive-svg.stories.d.ts","sourceRoot":"","sources":["../../../src/components/responsive-svg/responsive-svg.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"responsive-svg.stories.d.ts","sourceRoot":"","sources":["../../../src/components/responsive-svg/responsive-svg.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAa,cAAc,EAAE,MAAM,KAAK,CAAC;AAMhD,OAAO,EAAE,mBAAmB,EAA8B,MAAM,qBAAqB,CAAC;AAkEtF,QAAA,MAAM,IAAI,EAAE,IAKX,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,MAAM,MAAM,KAAK,GAAG;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAC7C,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAA;CACjB,CAAC;AAEF,KAAK,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AA0B7B,eAAO,MAAM,GAAG,EAAE,KAWjB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAY7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAU5B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAoBzB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAoBrB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAU/B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KASnC,CAAC"}
|