@alegendstale/holly-components 1.3.1 → 2.0.1

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 (153) hide show
  1. package/README.md +9 -5
  2. package/dist/components/absolute-container/absolute-container.d.ts +17 -3
  3. package/dist/components/absolute-container/absolute-container.d.ts.map +1 -1
  4. package/dist/components/absolute-container/absolute-container.js +21 -24
  5. package/dist/components/absolute-container/absolute-container.stories.d.ts +3 -1
  6. package/dist/components/absolute-container/absolute-container.stories.d.ts.map +1 -1
  7. package/dist/components/absolute-container/absolute-container.stories.js +35 -7
  8. package/dist/components/absolute-container/absolute-container.styles.d.ts +3 -0
  9. package/dist/components/absolute-container/absolute-container.styles.d.ts.map +1 -0
  10. package/dist/components/absolute-container/absolute-container.styles.js +18 -0
  11. package/dist/components/bottom-sheet/bottom-sheet.d.ts +25 -0
  12. package/dist/components/bottom-sheet/bottom-sheet.d.ts.map +1 -1
  13. package/dist/components/bottom-sheet/bottom-sheet.js +27 -125
  14. package/dist/components/bottom-sheet/bottom-sheet.stories.d.ts +5 -2
  15. package/dist/components/bottom-sheet/bottom-sheet.stories.d.ts.map +1 -1
  16. package/dist/components/bottom-sheet/bottom-sheet.stories.js +31 -7
  17. package/dist/components/bottom-sheet/bottom-sheet.styles.d.ts +3 -0
  18. package/dist/components/bottom-sheet/bottom-sheet.styles.d.ts.map +1 -0
  19. package/dist/components/bottom-sheet/bottom-sheet.styles.js +115 -0
  20. package/dist/components/canvas/canvas-base.d.ts +8 -1
  21. package/dist/components/canvas/canvas-base.d.ts.map +1 -1
  22. package/dist/components/canvas/canvas-base.js +14 -11
  23. package/dist/components/canvas/canvas-base.stories.d.ts +7 -0
  24. package/dist/components/canvas/canvas-base.stories.d.ts.map +1 -0
  25. package/dist/components/canvas/canvas-base.stories.js +24 -0
  26. package/dist/components/canvas/canvas-gradient.d.ts +10 -3
  27. package/dist/components/canvas/canvas-gradient.d.ts.map +1 -1
  28. package/dist/components/canvas/canvas-gradient.js +13 -9
  29. package/dist/components/canvas/canvas-gradient.stories.d.ts +14 -0
  30. package/dist/components/canvas/canvas-gradient.stories.d.ts.map +1 -0
  31. package/dist/components/canvas/canvas-gradient.stories.js +46 -0
  32. package/dist/components/canvas/canvas-image.d.ts +25 -16
  33. package/dist/components/canvas/canvas-image.d.ts.map +1 -1
  34. package/dist/components/canvas/canvas-image.js +84 -72
  35. package/dist/components/canvas/canvas-image.stories.d.ts +13 -0
  36. package/dist/components/canvas/canvas-image.stories.d.ts.map +1 -0
  37. package/dist/components/canvas/canvas-image.stories.js +49 -0
  38. package/dist/components/canvas/canvas-image.styles.d.ts +3 -0
  39. package/dist/components/canvas/canvas-image.styles.d.ts.map +1 -0
  40. package/dist/components/canvas/canvas-image.styles.js +21 -0
  41. package/dist/components/carousel-scroller/carousel-scroller.d.ts +23 -6
  42. package/dist/components/carousel-scroller/carousel-scroller.d.ts.map +1 -1
  43. package/dist/components/carousel-scroller/carousel-scroller.js +32 -80
  44. package/dist/components/carousel-scroller/carousel-scroller.stories.d.ts +4 -2
  45. package/dist/components/carousel-scroller/carousel-scroller.stories.d.ts.map +1 -1
  46. package/dist/components/carousel-scroller/carousel-scroller.stories.js +22 -6
  47. package/dist/components/carousel-scroller/carousel-scroller.styles.d.ts +3 -0
  48. package/dist/components/carousel-scroller/carousel-scroller.styles.d.ts.map +1 -0
  49. package/dist/components/carousel-scroller/carousel-scroller.styles.js +66 -0
  50. package/dist/components/color-palette/color-palette-utils.d.ts.map +1 -1
  51. package/dist/components/color-palette/color-palette.d.ts +53 -16
  52. package/dist/components/color-palette/color-palette.d.ts.map +1 -1
  53. package/dist/components/color-palette/color-palette.js +72 -126
  54. package/dist/components/color-palette/color-palette.styles.d.ts +3 -0
  55. package/dist/components/color-palette/color-palette.styles.d.ts.map +1 -0
  56. package/dist/components/color-palette/color-palette.styles.js +90 -0
  57. package/dist/components/color-palette/component/color-palette-component.d.ts +16 -2
  58. package/dist/components/color-palette/component/color-palette-component.d.ts.map +1 -1
  59. package/dist/components/color-palette/component/color-palette-component.js +18 -19
  60. package/dist/components/color-palette/component/color-palette-component.stories.d.ts +4 -2
  61. package/dist/components/color-palette/component/color-palette-component.stories.d.ts.map +1 -1
  62. package/dist/components/color-palette/component/color-palette-component.stories.js +34 -36
  63. package/dist/components/color-palette/component/color-palette-component.styles.d.ts +3 -0
  64. package/dist/components/color-palette/component/color-palette-component.styles.d.ts.map +1 -0
  65. package/dist/components/color-palette/component/color-palette-component.styles.js +10 -0
  66. package/dist/components/color-palette/editor/color-palette-editor.d.ts +28 -14
  67. package/dist/components/color-palette/editor/color-palette-editor.d.ts.map +1 -1
  68. package/dist/components/color-palette/editor/color-palette-editor.js +30 -216
  69. package/dist/components/color-palette/editor/color-palette-editor.stories.d.ts +9 -2
  70. package/dist/components/color-palette/editor/color-palette-editor.stories.d.ts.map +1 -1
  71. package/dist/components/color-palette/editor/color-palette-editor.stories.js +32 -4
  72. package/dist/components/color-palette/editor/color-palette-editor.styles.d.ts +3 -0
  73. package/dist/components/color-palette/editor/color-palette-editor.styles.d.ts.map +1 -0
  74. package/dist/components/color-palette/editor/color-palette-editor.styles.js +147 -0
  75. package/dist/components/color-palette/editor/settings-item.d.ts +20 -0
  76. package/dist/components/color-palette/editor/settings-item.d.ts.map +1 -0
  77. package/dist/components/color-palette/editor/settings-item.js +43 -0
  78. package/dist/components/color-palette/editor/settings-item.styles.d.ts +3 -0
  79. package/dist/components/color-palette/editor/settings-item.styles.d.ts.map +1 -0
  80. package/dist/components/color-palette/editor/settings-item.styles.js +34 -0
  81. package/dist/components/color-palette/item/color-palette-item-edit.d.ts +9 -2
  82. package/dist/components/color-palette/item/color-palette-item-edit.d.ts.map +1 -1
  83. package/dist/components/color-palette/item/color-palette-item-edit.js +12 -57
  84. package/dist/components/color-palette/item/color-palette-item-edit.styles.d.ts +3 -0
  85. package/dist/components/color-palette/item/color-palette-item-edit.styles.d.ts.map +1 -0
  86. package/dist/components/color-palette/item/color-palette-item-edit.styles.js +51 -0
  87. package/dist/components/color-palette/item/color-palette-item.d.ts +21 -2
  88. package/dist/components/color-palette/item/color-palette-item.d.ts.map +1 -1
  89. package/dist/components/color-palette/item/color-palette-item.js +23 -89
  90. package/dist/components/color-palette/item/color-palette-item.styles.d.ts +3 -0
  91. package/dist/components/color-palette/item/color-palette-item.styles.d.ts.map +1 -0
  92. package/dist/components/color-palette/item/color-palette-item.styles.js +83 -0
  93. package/dist/components/color-palette/menu/color-palette-menu.d.ts +15 -3
  94. package/dist/components/color-palette/menu/color-palette-menu.d.ts.map +1 -1
  95. package/dist/components/color-palette/menu/color-palette-menu.js +15 -54
  96. package/dist/components/color-palette/menu/color-palette-menu.styles.d.ts +3 -0
  97. package/dist/components/color-palette/menu/color-palette-menu.styles.d.ts.map +1 -0
  98. package/dist/components/color-palette/menu/color-palette-menu.styles.js +49 -0
  99. package/dist/components/color-palette/menu/color-palette-reorder.d.ts +8 -1
  100. package/dist/components/color-palette/menu/color-palette-reorder.d.ts.map +1 -1
  101. package/dist/components/color-palette/menu/color-palette-reorder.js +11 -36
  102. package/dist/components/color-palette/menu/color-palette-reorder.styles.d.ts +3 -0
  103. package/dist/components/color-palette/menu/color-palette-reorder.styles.d.ts.map +1 -0
  104. package/dist/components/color-palette/menu/color-palette-reorder.styles.js +31 -0
  105. package/dist/components/color-palette/storybook/color-palette-invalid.stories.d.ts +26 -8
  106. package/dist/components/color-palette/storybook/color-palette-invalid.stories.d.ts.map +1 -1
  107. package/dist/components/color-palette/storybook/color-palette-invalid.stories.js +10 -39
  108. package/dist/components/color-palette/storybook/color-palette-valid.stories.d.ts +26 -8
  109. package/dist/components/color-palette/storybook/color-palette-valid.stories.d.ts.map +1 -1
  110. package/dist/components/color-palette/storybook/color-palette-valid.stories.js +30 -58
  111. package/dist/components/color-palette/storybook/color-palette.stories.d.ts +18 -4
  112. package/dist/components/color-palette/storybook/color-palette.stories.d.ts.map +1 -1
  113. package/dist/components/color-palette/storybook/color-palette.stories.js +65 -14
  114. package/dist/components/draw-svg/draw-svg.d.ts +11 -0
  115. package/dist/components/draw-svg/draw-svg.d.ts.map +1 -1
  116. package/dist/components/draw-svg/draw-svg.js +15 -45
  117. package/dist/components/draw-svg/draw-svg.stories.d.ts +2 -14
  118. package/dist/components/draw-svg/draw-svg.stories.d.ts.map +1 -1
  119. package/dist/components/draw-svg/draw-svg.stories.js +21 -97
  120. package/dist/components/draw-svg/draw-svg.styles.d.ts +3 -0
  121. package/dist/components/draw-svg/draw-svg.styles.d.ts.map +1 -0
  122. package/dist/components/draw-svg/draw-svg.styles.js +39 -0
  123. package/dist/components/responsive-svg/responsive-svg.d.ts +35 -15
  124. package/dist/components/responsive-svg/responsive-svg.d.ts.map +1 -1
  125. package/dist/components/responsive-svg/responsive-svg.js +50 -92
  126. package/dist/components/responsive-svg/responsive-svg.stories.d.ts +5 -4
  127. package/dist/components/responsive-svg/responsive-svg.stories.d.ts.map +1 -1
  128. package/dist/components/responsive-svg/responsive-svg.stories.js +90 -108
  129. package/dist/components/responsive-svg/responsive-svg.styles.d.ts +3 -0
  130. package/dist/components/responsive-svg/responsive-svg.styles.d.ts.map +1 -0
  131. package/dist/components/responsive-svg/responsive-svg.styles.js +46 -0
  132. package/dist/components/tool-tip/tool-tip.d.ts +24 -9
  133. package/dist/components/tool-tip/tool-tip.d.ts.map +1 -1
  134. package/dist/components/tool-tip/tool-tip.js +49 -90
  135. package/dist/components/tool-tip/tool-tip.stories.d.ts +4 -1
  136. package/dist/components/tool-tip/tool-tip.stories.d.ts.map +1 -1
  137. package/dist/components/tool-tip/tool-tip.stories.js +35 -5
  138. package/dist/components/tool-tip/tool-tip.styles.d.ts +3 -0
  139. package/dist/components/tool-tip/tool-tip.styles.d.ts.map +1 -0
  140. package/dist/components/tool-tip/tool-tip.styles.js +58 -0
  141. package/dist/utils/ResponsiveController.d.ts +11 -0
  142. package/dist/utils/ResponsiveController.d.ts.map +1 -0
  143. package/dist/utils/ResponsiveController.js +19 -0
  144. package/dist/utils/index.d.ts +1 -0
  145. package/dist/utils/index.d.ts.map +1 -1
  146. package/dist/utils/index.js +1 -0
  147. package/package.json +23 -19
  148. package/dist/components/bottom-sheet/bottom-sheet.test.d.ts +0 -2
  149. package/dist/components/bottom-sheet/bottom-sheet.test.d.ts.map +0 -1
  150. package/dist/components/bottom-sheet/bottom-sheet.test.js +0 -15
  151. package/dist/components/tool-tip/Tooltip2.d.ts +0 -17
  152. package/dist/components/tool-tip/Tooltip2.d.ts.map +0 -1
  153. package/dist/components/tool-tip/Tooltip2.js +0 -104
@@ -1,19 +1,7 @@
1
- import type { Meta, StoryObj } from '@storybook/web-components';
2
- import { TemplateResult } from 'lit';
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,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAQ,cAAc,EAAE,MAAM,KAAK,CAAC;AAG3C,OAAO,EAAE,mBAAmB,EAA8B,MAAM,qCAAqC,CAAC;AAEtG,QAAA,MAAM,IAAI,EAAE,IA0FX,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAAC,mBAAmB,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAE7N,KAAK,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AA+B7B,eAAO,MAAM,OAAO,EAAE,KAarB,CAAC"}
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 { preserveAspectRatioOptions } from '../responsive-svg/responsive-svg.js';
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 Template = {
98
- render: ({ fontSize, stroke, fill, autofit, svgColors, height, width, svg, preserveAspectRatio }) => {
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
- 'font-size': `${fontSize}px`
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(path) {
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
- ...Template,
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,3 @@
1
+ declare const _default: import("lit").CSSResult;
2
+ export default _default;
3
+ //# sourceMappingURL=draw-svg.styles.d.ts.map
@@ -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 ViewBoxType = {
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-auto-width - Set by the component as a fallback in case --svg-width is not defined.
21
+ * @cssprop {<length> (em)} --svg-auto-height - 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
- /** Uses the colors from the SVG input */
31
+ /** Use the colors from the SVG input. */
19
32
  svgColors: boolean;
20
- height: number;
21
- width: number;
33
+ /** @internal */
22
34
  private _svg?;
23
- /** Must use a property expression (.) to set */
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
- /** Defaults to xMidYMid meet */
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
- private _viewBox;
31
- set viewBox(val: ViewBoxType);
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
- * @param svg
41
- * @returns The SVG viewbox x, y, width, and height
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): ViewBoxType | null;
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,EAA6B,cAAc,EAAE,MAAM,KAAK,CAAC;AAQ5E,KAAK,WAAW,GAAG;IAClB,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,qBACa,aAAc,SAAQ,UAAU;IAC5C,MAAM,CAAC,MAAM,4BA+CX;IAGF,OAAO,EAAE,OAAO,CAAS;IAEzB,yCAAyC;IAEzC,SAAS,EAAE,OAAO,CAAS;IAG3B,MAAM,EAAE,MAAM,CAAK;IAGnB,KAAK,EAAE,MAAM,CAAK;IAElB,OAAO,CAAC,IAAI,CAAC,CAAiC;IAC9C,gDAAgD;IAChD,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,OAAO,CAAC,oBAAoB,CAAkC;IAC9D,gCAAgC;IAChC,IACI,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,SAAS,EAE3D;IACD,IAAI,mBAAmB,IAHM,mBAAmB,GAAG,SAAS,CAW3D;IAED,OAAO,CAAC,QAAQ,CAAoD;IACpE,IACI,OAAO,CAAC,GAAG,EAAE,WAAW,EAE3B;IACD,IAAI,OAAO,IAHM,WAAW,CAc3B;IAGD,SAAS,CAAC,UAAU;IAIpB,MAAM;IA2CN;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;;OAGG;IACI,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI;CAM1D;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,gBAAgB,EAAE,aAAa,CAAC;KAChC;CACD"}
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,EAAE,MAAM,KAAK,CAAC;AAQvD,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;IAYzB,MAAM;IA0CN,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, css } from 'lit';
8
- import { property, state } from 'lit/decorators.js';
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-auto-width - Set by the component as a fallback in case --svg-width is not defined.
35
+ * @cssprop {<length> (em)} --svg-auto-height - 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
- /** Uses the colors from the SVG input */
46
+ /** Use the colors from the SVG input. */
34
47
  this.svgColors = false;
35
- this.height = 0;
36
- this.width = 0;
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
- /** Must use a property expression (.) to set */
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
- /** Defaults to xMidYMid meet */
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,31 +84,26 @@ 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
- set viewBox(val) {
67
- this._viewBox = val;
87
+ // For classes inheriting from responsive-svg (e.g. draw-svg)
88
+ svgClasses() {
89
+ return {};
68
90
  }
69
- get viewBox() {
91
+ connectedCallback() {
92
+ super.connectedCallback();
70
93
  if (this.svg instanceof SVGElement) {
71
94
  const _viewBox = this.getViewBoxSize(this.svg);
72
95
  const _width = Number(this.svg.getAttribute('width'));
73
96
  const _height = Number(this.svg.getAttribute('height'));
74
- // Use viewbox values first, otherwise use height and width attributes.
75
- return _viewBox ?? { x: 0, y: 0, width: _width || 0, height: _height || 0 };
97
+ this.viewBox = _viewBox ?? { x: 0, y: 0, width: _width || 0, height: _height || 0 };
76
98
  }
77
- return this._viewBox;
78
- }
79
- // For classes inheriting from responsive-svg (e.g. draw-svg)
80
- svgClasses() {
81
- return {};
82
99
  }
83
100
  render() {
84
- const width = this.width !== 0 ? this.width : this.viewBox.width;
85
- const height = this.height !== 0 ? this.height : this.viewBox.height;
101
+ const viewBox = this.viewBox;
86
102
  const preserveAspectRatio = this.preserveAspectRatio;
87
103
  const svgClasses = this.svgClasses();
88
104
  const styles = {
89
- '--svg-width': `${width}em`,
90
- '--svg-height': `${height}em`,
105
+ '--svg-auto-width': `${viewBox.width}em`,
106
+ '--svg-auto-height': `${viewBox.height}em`,
91
107
  };
92
108
  // Check if svg exists, otherwise early return
93
109
  if (typeof this.svg === 'string')
@@ -96,21 +112,21 @@ let ResponsiveSvg = class ResponsiveSvg extends LitElement {
96
112
  // SVGElement provided as input
97
113
  if (this.svg instanceof SVGElement) {
98
114
  const clonedSVG = this.svg.cloneNode(true);
99
- this.applyPartToPaths(clonedSVG, 'path');
100
- return buildSVG(Array.from(clonedSVG.children), width, height);
115
+ this.applyPartToPaths(clonedSVG, '__path');
116
+ return buildSVG(Array.from(clonedSVG.children), viewBox);
101
117
  }
102
118
  // TemplateResult<2> provided as input
103
119
  else
104
- return buildSVG(this.svg, width, height);
120
+ return buildSVG(this.svg, viewBox);
105
121
  }
106
- function buildSVG(svg, width, height) {
122
+ function buildSVG(svg, viewBox) {
107
123
  if (svg) {
108
124
  return html `
109
125
  <svg
110
- part="svg"
126
+ part="__svg"
111
127
  class=${classMap(svgClasses)}
112
128
  style=${styleMap(styles)}
113
- viewBox="0 0 ${width} ${height}"
129
+ viewBox="${viewBox.x} ${viewBox.y} ${viewBox.width} ${viewBox.height}"
114
130
  preserveAspectRatio=${preserveAspectRatio}
115
131
  xmlns="http://www.w3.org/2000/svg"
116
132
  >
@@ -120,9 +136,7 @@ let ResponsiveSvg = class ResponsiveSvg extends LitElement {
120
136
  }
121
137
  }
122
138
  }
123
- /**
124
- * Applies a part name to all paths in the given element
125
- */
139
+ /** Applies a part name to all paths in the given element. */
126
140
  applyPartToPaths(element, partValue) {
127
141
  if (element instanceof Element) {
128
142
  if (element.tagName.toLowerCase() === 'path') {
@@ -135,8 +149,9 @@ let ResponsiveSvg = class ResponsiveSvg extends LitElement {
135
149
  }
136
150
  }
137
151
  /**
138
- * @param svg
139
- * @returns The SVG viewbox x, y, width, and height
152
+ * Gets the viewBox dimensions from an SVG element.
153
+ * @param svg The SVG to get the attribute from.
154
+ * @returns The SVG viewBox x, y, width, and height
140
155
  */
141
156
  getViewBoxSize(svg) {
142
157
  const viewBox = svg.getAttribute('viewBox')?.split(' ');
@@ -145,76 +160,19 @@ let ResponsiveSvg = class ResponsiveSvg extends LitElement {
145
160
  return { x: +viewBox[0], y: +viewBox[1], width: +viewBox[2], height: +viewBox[3] };
146
161
  }
147
162
  };
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
163
  __decorate([
197
164
  property({ type: Boolean, reflect: true })
198
165
  ], ResponsiveSvg.prototype, "autofit", void 0);
199
166
  __decorate([
200
167
  property({ type: Boolean, reflect: true })
201
168
  ], 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
169
  __decorate([
209
170
  property({ type: Object })
210
171
  ], ResponsiveSvg.prototype, "svg", null);
211
172
  __decorate([
212
173
  property({ type: String, reflect: true })
213
174
  ], ResponsiveSvg.prototype, "preserveAspectRatio", null);
214
- __decorate([
215
- state()
216
- ], ResponsiveSvg.prototype, "viewBox", null);
217
175
  ResponsiveSvg = __decorate([
218
- condCustomElement('responsive-svg')
176
+ customElement('responsive-svg')
219
177
  ], ResponsiveSvg);
220
178
  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,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAa,cAAc,EAAE,MAAM,KAAK,CAAC;AAMhD,OAAO,EAAE,mBAAmB,EAA8B,MAAM,qBAAqB,CAAC;AAEtF,QAAA,MAAM,IAAI,EAAE,IA0FX,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAAC,mBAAmB,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAE7N,KAAK,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAyB7B,eAAO,MAAM,GAAG,EAAE,KAYjB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAY7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAY5B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAYzB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAYrB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAY/B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KAWnC,CAAC"}
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,KAU7B,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"}