@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.
Files changed (147) 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 +22 -25
  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 +29 -127
  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 +59 -97
  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 +93 -109
  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/package.json +23 -19
  142. package/dist/components/bottom-sheet/bottom-sheet.test.d.ts +0 -2
  143. package/dist/components/bottom-sheet/bottom-sheet.test.d.ts.map +0 -1
  144. package/dist/components/bottom-sheet/bottom-sheet.test.js +0 -15
  145. package/dist/components/tool-tip/Tooltip2.d.ts +0 -17
  146. package/dist/components/tool-tip/Tooltip2.d.ts.map +0 -1
  147. package/dist/components/tool-tip/Tooltip2.js +0 -104
@@ -4,35 +4,55 @@ 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 { html, css } from 'lit';
8
- import { property, query } from 'lit/decorators.js';
7
+ import { html } from 'lit';
8
+ import { customElement, property, query } from 'lit/decorators.js';
9
9
  import quantize from 'quantize';
10
10
  import { CanvasBase } from './canvas-base.js';
11
- import { condCustomElement } from '../../decorators/condCustomElement.js';
11
+ import styles from './canvas-image.styles.js';
12
+ const imageStatus = ['idle', 'loading', 'success', 'error'];
13
+ /**
14
+ * Utility component to make creating and retrieving image colors easier based on canvas coordinates.
15
+ *
16
+ * @dependency canvas-base
17
+ */
12
18
  let CanvasImage = class CanvasImage extends CanvasBase {
13
19
  constructor() {
14
20
  super(...arguments);
21
+ /** The image URL. */
15
22
  this.imageURL = '';
23
+ /** Whether to apply smoothing to the image generated by the canvas. */
16
24
  this.smoothing = false;
17
- this.loading = true;
25
+ /** The canvas width. */
18
26
  this.width = 0;
27
+ /** The canvas height. */
19
28
  this.height = 0;
20
- /**
21
- * Waits for loading variable to equal true
22
- */
23
- this.waitForLoading = () => new Promise((resolve) => {
24
- const checkLoading = setInterval(() => {
25
- if (!this.loading) {
26
- clearInterval(checkLoading);
27
- resolve(true);
28
- }
29
- }, 100);
30
- });
29
+ /** @readonly Used to style the canvas based on its current state. */
30
+ this.status = 'idle';
31
31
  }
32
- firstUpdated(_changedProperties) {
33
- super.firstUpdated(_changedProperties);
34
- this.canvas.classList.add('image');
35
- this.context.imageSmoothingEnabled = this.smoothing;
32
+ static { this.styles = [...CanvasBase.styles, styles]; }
33
+ updated(_changedProperties) {
34
+ super.updated(_changedProperties);
35
+ if (_changedProperties.has('imageURL')) {
36
+ this.status = this.imageURL ? 'loading' : 'idle';
37
+ }
38
+ else if ((_changedProperties.has('width') || _changedProperties.has('height')) && this.status === 'success') {
39
+ this._performDraw();
40
+ }
41
+ }
42
+ get updateComplete() {
43
+ const _waitForImage = async () => {
44
+ await super.updateComplete;
45
+ if (this.status === 'loading') {
46
+ await new Promise((resolve) => {
47
+ this.addEventListener('canvas-ready', resolve, { once: true });
48
+ });
49
+ }
50
+ if (this.status === 'error') {
51
+ throw new Error(`canvas-image failed to load ${this.imageURL}`);
52
+ }
53
+ return true;
54
+ };
55
+ return _waitForImage();
36
56
  }
37
57
  render() {
38
58
  // Allows CORS requests for images from different domains
@@ -41,42 +61,44 @@ let CanvasImage = class CanvasImage extends CanvasBase {
41
61
  <img
42
62
  src=${this.imageURL}
43
63
  crossorigin='anonymous'
44
- @load=${() => this.loading = false}
64
+ @load=${() => this._performDraw()}
65
+ @error=${() => this._handleLoadError()}
45
66
  >
46
67
  `;
47
68
  }
48
69
  /**
49
70
  * Updates & loads the canvas image.
50
71
  * Attempts to preserve aspect ratio based on width.
51
- * @param width The canvas width
52
- * @param height The canvas height
53
72
  */
54
- updateImage(imageURL, width, height) {
55
- if (!this.image)
73
+ _performDraw() {
74
+ const img = this.image;
75
+ if (!img || !this.context)
56
76
  return;
57
- // Set URL
58
- this.image.src = imageURL;
59
- // Wait for image to load before calculating dimensions & drawing image to canvas
60
- this.waitForLoading().then(() => {
61
- if (!this.image)
62
- return;
63
- // Calculate the new height based on the aspect ratio
64
- const aspectRatio = this.image.naturalHeight / this.image.naturalWidth;
65
- let newWidth = width;
66
- let newHeight = newWidth * aspectRatio;
67
- // Ensure the new height fits within the canvas height
68
- if (newHeight > height) {
69
- // Adjust width if height exceeds canvas height
70
- newWidth = height / aspectRatio;
71
- newHeight = height;
72
- }
73
- this.width = this.canvas.width = newWidth;
74
- this.height = this.canvas.height = newHeight;
75
- this.context.drawImage(this.image, 0, 0, newWidth, newHeight);
76
- });
77
+ // Calculate the new height based on the aspect ratio
78
+ const aspectRatio = img.naturalHeight / img.naturalWidth;
79
+ let drawWidth = this.width;
80
+ let drawHeight = drawWidth * aspectRatio;
81
+ // Ensure the new height fits within the canvas height
82
+ if (drawHeight > this.height) {
83
+ // Adjust width if height exceeds canvas height
84
+ drawWidth = this.height / aspectRatio;
85
+ drawHeight = this.height;
86
+ }
87
+ this.canvas.width = drawWidth;
88
+ this.canvas.height = drawHeight;
89
+ this.context.imageSmoothingEnabled = this.smoothing;
90
+ this.context.drawImage(img, 0, 0, drawWidth, drawHeight);
91
+ this.status = 'success';
92
+ this.dispatchEvent(new CustomEvent('canvas-ready'));
93
+ }
94
+ /** @internal Handle errors when the image fails to load. */
95
+ _handleLoadError() {
96
+ // Return to idle state if there is no URL.
97
+ this.status = this.imageURL === '' ? 'idle' : 'error';
98
+ this.dispatchEvent(new CustomEvent('canvas-ready'));
77
99
  }
78
100
  /**
79
- * Gets the most frequent colors in an image
101
+ * Gets the most frequent colors in an image.
80
102
  * @param numColors Number of colors to return
81
103
  * @param quality Artificially reduce number of pixels (higher = less accurate but faster)
82
104
  * @returns Most frequent colors
@@ -88,7 +110,7 @@ let CanvasImage = class CanvasImage extends CanvasBase {
88
110
  */
89
111
  const nColors = numColors <= 7 ? numColors : numColors + 1;
90
112
  // Wait for image to load
91
- await this.waitForLoading();
113
+ await this.updateComplete;
92
114
  // Get an array of pixels
93
115
  const pixels = await this.createPixelArray(quality);
94
116
  if (!pixels)
@@ -99,13 +121,13 @@ let CanvasImage = class CanvasImage extends CanvasBase {
99
121
  return colorMap ? colorMap.palette() : [];
100
122
  }
101
123
  /**
102
- * Creates an array of pixels from the image
124
+ * Creates an array of pixels from the image.
103
125
  * Inspired by colorthief
104
126
  * @param quality Artificially reduce number of pixels (higher = less accurate but faster)
105
- * @returns
127
+ * @returns Array of pixels
106
128
  */
107
129
  async createPixelArray(quality) {
108
- await this.waitForLoading();
130
+ await this.updateComplete;
109
131
  const pixelArray = [];
110
132
  const imageData = (await this.getImageData())?.data;
111
133
  if (!imageData)
@@ -125,36 +147,17 @@ let CanvasImage = class CanvasImage extends CanvasBase {
125
147
  }
126
148
  return pixelArray;
127
149
  }
128
- /**
129
- * Gets the image data from the canvas
130
- */
150
+ /** Gets the image data from the canvas. */
131
151
  async getImageData(x = 0, y = 0) {
132
152
  try {
133
- await this.waitForLoading();
134
- return this.context.getImageData(x, y, this.width, this.height);
153
+ await this.updateComplete;
154
+ return this.context.getImageData(x, y, this.canvas.width, this.canvas.height);
135
155
  }
136
156
  catch (e) {
137
157
  throw new Error('Failed to get image data.');
138
158
  }
139
159
  }
140
160
  };
141
- CanvasImage.styles = [
142
- ...CanvasBase.styles,
143
- css `
144
- :host {
145
- display: block;
146
- }
147
-
148
- /* Hide when width hasn't been set */
149
- canvas:not([width]) {
150
- display: none;
151
- }
152
-
153
- img {
154
- display: none;
155
- }
156
- `,
157
- ];
158
161
  __decorate([
159
162
  query('img')
160
163
  ], CanvasImage.prototype, "image", void 0);
@@ -164,7 +167,16 @@ __decorate([
164
167
  __decorate([
165
168
  property({ type: Boolean })
166
169
  ], CanvasImage.prototype, "smoothing", void 0);
170
+ __decorate([
171
+ property({ type: Number })
172
+ ], CanvasImage.prototype, "width", void 0);
173
+ __decorate([
174
+ property({ type: Number })
175
+ ], CanvasImage.prototype, "height", void 0);
176
+ __decorate([
177
+ property({ type: String, reflect: true, attribute: 'data-status' })
178
+ ], CanvasImage.prototype, "status", void 0);
167
179
  CanvasImage = __decorate([
168
- condCustomElement('canvas-image')
180
+ customElement('canvas-image')
169
181
  ], CanvasImage);
170
182
  export { CanvasImage };
@@ -0,0 +1,13 @@
1
+ import type { Meta, StoryObj } from '@storybook/web-components-vite';
2
+ declare const meta: Meta;
3
+ export default meta;
4
+ export type Props = {
5
+ imageURL: string;
6
+ smoothing: boolean;
7
+ width: number;
8
+ height: number;
9
+ };
10
+ type Story = StoryObj<Props>;
11
+ export declare const Example: Story;
12
+ export declare const Error: Story;
13
+ //# sourceMappingURL=canvas-image.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-image.stories.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/canvas-image.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAc/E,QAAA,MAAM,IAAI,EAAE,IAKX,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,MAAM,MAAM,KAAK,GAAG;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAA;CACd,CAAC;AAEF,KAAK,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAgB7B,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAQnB,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { html } from 'lit';
2
+ import CanvasBaseStory from './canvas-base.stories.js';
3
+ const argTypes = {
4
+ ...CanvasBaseStory.argTypes,
5
+ image: { control: false },
6
+ imageURL: { control: 'text' },
7
+ smoothing: { control: 'boolean' },
8
+ width: { control: 'number' },
9
+ height: { control: 'number' },
10
+ 'data-status': { control: false }
11
+ };
12
+ const meta = {
13
+ title: 'Canvas/Image',
14
+ tags: ['autodocs'],
15
+ component: 'canvas-image',
16
+ argTypes,
17
+ };
18
+ export default meta;
19
+ const template = {
20
+ render: ({ imageURL, smoothing, width, height }) => {
21
+ return html `
22
+ <canvas-image
23
+ imageURL=${imageURL}
24
+ ?smoothing=${smoothing}
25
+ width=${width}
26
+ height=${height}
27
+ >
28
+ </canvas-image>
29
+ `;
30
+ },
31
+ };
32
+ export const Example = {
33
+ ...template,
34
+ args: {
35
+ imageURL: 'https://jollybandit.com/GreekzCaricature-md.webp',
36
+ smoothing: false,
37
+ width: 500,
38
+ height: 500
39
+ },
40
+ };
41
+ export const Error = {
42
+ ...template,
43
+ args: {
44
+ imageURL: 'hello',
45
+ smoothing: false,
46
+ width: 500,
47
+ height: 500
48
+ },
49
+ };
@@ -0,0 +1,3 @@
1
+ declare const _default: import("lit").CSSResult;
2
+ export default _default;
3
+ //# sourceMappingURL=canvas-image.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-image.styles.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/canvas-image.styles.ts"],"names":[],"mappings":";AAEA,wBAmBE"}
@@ -0,0 +1,21 @@
1
+ import { css } from 'lit';
2
+ export default css `
3
+ :host {
4
+ display: block;
5
+ }
6
+
7
+ :host([data-status='error']) {
8
+ width: 100px;
9
+ height: 100px;
10
+ border: 2px solid red;
11
+ }
12
+
13
+ /* Hide when width hasn't been set */
14
+ canvas:not([width]) {
15
+ display: none;
16
+ }
17
+
18
+ img {
19
+ display: none;
20
+ }
21
+ `;
@@ -5,20 +5,37 @@ type EventMap = {
5
5
  };
6
6
  export interface CarouselContainerProps {
7
7
  }
8
+ /**
9
+ * A carousel which can have any number of slides, and rotates circularly.
10
+ *
11
+ * @cssprop {<length>} --padding - The size of the scroller padding.
12
+ * @cssprop {<length>} --margin - The size of the scroller margin.
13
+ */
8
14
  export declare class CarouselScroller extends LitElement {
9
- static styles: import("lit").CSSResult;
10
- slotEl: HTMLSlotElement;
11
- slotChildren: HTMLElement[];
15
+ static styles: import("lit").CSSResult[];
16
+ /** The items that will be used as slides. */
17
+ protected slotEl: HTMLSlotElement;
18
+ /** The slides being used. */
19
+ protected slotChildren: HTMLElement[];
20
+ /** Public way to subscribe to events. */
12
21
  emitter: EventEmitter<EventMap>;
13
- currentSlide: number;
14
- debouncers: WeakMap<object, any>;
22
+ /** @internal */
23
+ private _currentSlide;
24
+ /** @internal */
25
+ private debouncers;
15
26
  constructor();
16
27
  disconnectedCallback(): void;
17
28
  render(): import("lit-html").TemplateResult<1>;
29
+ /** Gets the current slide.
30
+ * @returns HTMLElement
31
+ */
18
32
  getCurrentSlide(): HTMLElement;
33
+ /** Scrolls to the slide before the current slide. */
19
34
  scrollToPrevSlide(): void;
35
+ /** Scrolls to the slide after the current slide. */
20
36
  scrollToNextSlide(): void;
21
- slotChange(): void;
37
+ /** @internal */
38
+ protected slotChange(): void;
22
39
  }
23
40
  declare global {
24
41
  interface HTMLElementTagNameMap {
@@ -1 +1 @@
1
- {"version":3,"file":"carousel-scroller.d.ts","sourceRoot":"","sources":["../../../src/components/carousel-scroller/carousel-scroller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,MAAM,KAAK,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,KAAK,QAAQ,GAAG;IACf,WAAW,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,WAAW,sBAAsB;CAAG;AAE1C,qBACa,gBAAiB,SAAQ,UAAU;IAC/C,MAAM,CAAC,MAAM,0BAgEX;IAGF,MAAM,EAAG,eAAe,CAAC;IAEzB,YAAY,EAAE,WAAW,EAAE,CAAM;IAC1B,OAAO,yBAAgC;IAC9C,YAAY,SAAK;IACjB,UAAU,uBAAiB;;IAU3B,oBAAoB,IAAI,IAAI;IAK5B,MAAM;IAYN,eAAe;IAIf,iBAAiB;IAUjB,iBAAiB;IAUjB,UAAU;CAaV;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,mBAAmB,EAAE,gBAAgB,CAAA;KACrC;CACD"}
1
+ {"version":3,"file":"carousel-scroller.d.ts","sourceRoot":"","sources":["../../../src/components/carousel-scroller/carousel-scroller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,KAAK,QAAQ,GAAG;IACf,WAAW,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,WAAW,sBAAsB;CAAG;AAE1C;;;;;GAKG;AACH,qBACa,gBAAiB,SAAQ,UAAU;IAC/C,MAAM,CAAC,MAAM,4BAAY;IAEzB,6CAA6C;IAE7C,SAAS,CAAC,MAAM,EAAG,eAAe,CAAC;IAEnC,6BAA6B;IAC7B,SAAS,CAAC,YAAY,EAAE,WAAW,EAAE,CAAM;IAE3C,yCAAyC;IAClC,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAgC;IAEtE,gBAAgB;IAChB,OAAO,CAAC,aAAa,CAAa;IAElC,gBAAgB;IAChB,OAAO,CAAC,UAAU,CAAiB;;IAUnC,oBAAoB,IAAI,IAAI;IAK5B,MAAM;IAYN;;OAEG;IACI,eAAe;IAItB,qDAAqD;IAC9C,iBAAiB;IAUxB,oDAAoD;IAC7C,iBAAiB;IAUxB,gBAAgB;IAChB,SAAS,CAAC,UAAU;CAapB;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,mBAAmB,EAAE,gBAAgB,CAAA;KACrC;CACD"}
@@ -4,16 +4,27 @@ 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 { css, html, LitElement } from 'lit';
8
- import { query } from 'lit/decorators.js';
7
+ import { html, LitElement } from 'lit';
8
+ import { customElement, query } from 'lit/decorators.js';
9
9
  import { EventEmitter } from '../../utils/EventEmitter.js';
10
- import { condCustomElement } from '../../decorators/condCustomElement.js';
10
+ import styles from './carousel-scroller.styles.js';
11
+ /**
12
+ * A carousel which can have any number of slides, and rotates circularly.
13
+ *
14
+ * @cssprop {<length>} --padding - The size of the scroller padding.
15
+ * @cssprop {<length>} --margin - The size of the scroller margin.
16
+ */
11
17
  let CarouselScroller = class CarouselScroller extends LitElement {
18
+ static { this.styles = [styles]; }
12
19
  constructor() {
13
20
  super();
21
+ /** The slides being used. */
14
22
  this.slotChildren = [];
23
+ /** Public way to subscribe to events. */
15
24
  this.emitter = new EventEmitter();
16
- this.currentSlide = 0;
25
+ /** @internal */
26
+ this._currentSlide = 0;
27
+ /** @internal */
17
28
  this.debouncers = new WeakMap();
18
29
  this.emitter.on('slotsLoaded', (slotChildren) => {
19
30
  this.slotChildren = slotChildren;
@@ -34,27 +45,33 @@ let CarouselScroller = class CarouselScroller extends LitElement {
34
45
  </div>
35
46
  `;
36
47
  }
48
+ /** Gets the current slide.
49
+ * @returns HTMLElement
50
+ */
37
51
  getCurrentSlide() {
38
- return this.slotChildren[this.currentSlide - 1];
52
+ return this.slotChildren[this._currentSlide - 1];
39
53
  }
54
+ /** Scrolls to the slide before the current slide. */
40
55
  scrollToPrevSlide() {
41
- this.currentSlide =
42
- this.currentSlide === 0
43
- ? (this.currentSlide = this.slotChildren.length - 1)
44
- : this.currentSlide - 1;
56
+ this._currentSlide =
57
+ this._currentSlide === 0
58
+ ? (this._currentSlide = this.slotChildren.length - 1)
59
+ : this._currentSlide - 1;
45
60
  this.slotChildren
46
- .at(this.currentSlide)
61
+ .at(this._currentSlide)
47
62
  ?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
48
63
  }
64
+ /** Scrolls to the slide after the current slide. */
49
65
  scrollToNextSlide() {
50
- this.currentSlide =
51
- this.currentSlide === this.slotChildren.length - 1
66
+ this._currentSlide =
67
+ this._currentSlide === this.slotChildren.length - 1
52
68
  ? 0
53
- : this.currentSlide + 1;
69
+ : this._currentSlide + 1;
54
70
  this.slotChildren
55
- .at(this.currentSlide)
71
+ .at(this._currentSlide)
56
72
  ?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
57
73
  }
74
+ /** @internal */
58
75
  slotChange() {
59
76
  const slotElements = Array.from(this.slotEl
60
77
  .assignedElements()
@@ -64,75 +81,10 @@ let CarouselScroller = class CarouselScroller extends LitElement {
64
81
  this.debouncers.set(this.slotEl, timeoutId);
65
82
  }
66
83
  };
67
- CarouselScroller.styles = css `
68
- :host {
69
- --padding: 40px;
70
- --margin: 80px;
71
- }
72
-
73
- .container {
74
- width: 600px;
75
- height: 400px;
76
- margin: 20px;
77
- border-radius: 20px;
78
- overflow: hidden;
79
- position: relative;
80
-
81
- & > button {
82
- position: absolute;
83
- width: var(--padding);
84
- height: calc(var(--padding) * 2);
85
- z-index: 1;
86
- background-color: #00000080;
87
- border: none;
88
- bottom: calc(50% - var(--padding));
89
- font-size: 32px;
90
-
91
- &:hover {
92
- background-color: #6352b880;
93
- }
94
-
95
- &:nth-child(1) {
96
- left: 0;
97
- border-top-right-radius: 314px;
98
- border-bottom-right-radius: 314px;
99
- }
100
-
101
- &:nth-child(2) {
102
- right: 0;
103
- border-top-left-radius: 314px;
104
- border-bottom-left-radius: 314px;
105
- }
106
- }
107
-
108
- & > div {
109
- display: flex;
110
- overflow-x: scroll;
111
- position: relative;
112
- scroll-behavior: smooth;
113
- scroll-snap-type: x mandatory;
114
- scrollbar-width: none;
115
- padding: 0 var(--padding);
116
- }
117
-
118
- ::slotted(*) {
119
- display: flex;
120
- flex-direction: column;
121
- justify-content: center;
122
- min-height: calc(400px - var(--margin));
123
- min-width: calc(600px - var(--margin));
124
- max-height: calc(400px - var(--margin));
125
- max-width: calc(600px - var(--margin));
126
- background: white;
127
- scroll-snap-align: center;
128
- padding: calc(var(--margin) / 2);
129
- }
130
- }
131
- `;
132
84
  __decorate([
133
85
  query('slot')
134
86
  ], CarouselScroller.prototype, "slotEl", void 0);
135
87
  CarouselScroller = __decorate([
136
- condCustomElement('carousel-scroller')
88
+ customElement('carousel-scroller')
137
89
  ], CarouselScroller);
138
90
  export { CarouselScroller };
@@ -1,8 +1,10 @@
1
- import type { Meta, StoryObj } from '@storybook/web-components';
1
+ import type { Meta, StoryObj } from '@storybook/web-components-vite';
2
2
  declare const meta: Meta;
3
3
  export default meta;
4
4
  type Props = {
5
- items: any[];
5
+ items: string[];
6
+ '--padding': string;
7
+ '--margin': string;
6
8
  };
7
9
  type Story = StoryObj<Props>;
8
10
  export declare const Empty: Story;
@@ -1 +1 @@
1
- {"version":3,"file":"carousel-scroller.stories.d.ts","sourceRoot":"","sources":["../../../src/components/carousel-scroller/carousel-scroller.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAIhE,QAAA,MAAM,IAAI,EAAE,IAIX,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG;IAAE,KAAK,EAAE,GAAG,EAAE,CAAA;CAAE,CAAC;AAE9B,KAAK,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAkB7B,eAAO,MAAM,KAAK,EAAE,KAKnB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAKvB,CAAC"}
1
+ {"version":3,"file":"carousel-scroller.stories.d.ts","sourceRoot":"","sources":["../../../src/components/carousel-scroller/carousel-scroller.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAc/E,QAAA,MAAM,IAAI,EAAE,IAKX,CAAC;AAEF,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,KAAK,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAyB7B,eAAO,MAAM,KAAK,EAAE,KAKnB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAKvB,CAAC"}
@@ -1,15 +1,31 @@
1
1
  import { html } from 'lit';
2
2
  import { repeat } from 'lit/directives/repeat.js';
3
+ import { styleMap } from 'lit/directives/style-map.js';
4
+ const argTypes = {
5
+ items: { control: 'object' },
6
+ slotEl: { control: false },
7
+ slotChildren: { control: false },
8
+ emitter: { control: false },
9
+ '--padding': { control: 'text' },
10
+ '--margin': { control: 'text' }
11
+ };
3
12
  const meta = {
4
13
  title: 'Carousel Scroller',
5
14
  tags: ['autodocs'],
6
15
  component: 'carousel-scroller',
16
+ argTypes
7
17
  };
8
18
  export default meta;
9
- const Template = {
10
- render: ({ items }) => {
19
+ const template = {
20
+ render: ({ items, '--padding': padding, '--margin': margin }) => {
21
+ const styles = {
22
+ '--padding': padding,
23
+ '--margin': margin
24
+ };
11
25
  return html `
12
- <carousel-scroller>
26
+ <carousel-scroller
27
+ style=${styleMap(styles)}
28
+ >
13
29
  ${repeat(items, (item) => html `<div>${item}</div>`)}
14
30
  </carousel-scroller>
15
31
  `;
@@ -21,19 +37,19 @@ const items = [
21
37
  'three'
22
38
  ];
23
39
  export const Empty = {
24
- ...Template,
40
+ ...template,
25
41
  args: {
26
42
  items: [],
27
43
  },
28
44
  };
29
45
  export const OneItem = {
30
- ...Template,
46
+ ...template,
31
47
  args: {
32
48
  items: [items[0]],
33
49
  },
34
50
  };
35
51
  export const ManyItems = {
36
- ...Template,
52
+ ...template,
37
53
  args: {
38
54
  items,
39
55
  },
@@ -0,0 +1,3 @@
1
+ declare const _default: import("lit").CSSResult;
2
+ export default _default;
3
+ //# sourceMappingURL=carousel-scroller.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carousel-scroller.styles.d.ts","sourceRoot":"","sources":["../../../src/components/carousel-scroller/carousel-scroller.styles.ts"],"names":[],"mappings":";AAEA,wBAgEE"}