astro-swiper 1.0.2 → 1.1.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "astro-swiper",
3
- "version": "1.0.2",
3
+ "version": "1.1.1",
4
4
  "description": "Astro component for swiper, dedicated to slider / carousel / photo swiper / slide, including thumbnails",
5
5
  "main": "index.js",
6
6
  "repository": {
@@ -21,7 +21,7 @@ const {
21
21
 
22
22
  <!-- Slider main container -->
23
23
  <astro-swiper
24
- class={`swiper ${uniqueClass} ${className}`}
24
+ class:list={['swiper', uniqueClass, className]}
25
25
  {...props}
26
26
  data-options={JSON.stringify(options)}
27
27
  data-linktothumbuniqueclass={linkToThumbUniqueClass}
@@ -33,11 +33,28 @@ const {
33
33
 
34
34
  <script>
35
35
  import Swiper from 'swiper/bundle'
36
- import { useSwiper, useOptions, useDelaySwiper } from '../index'
36
+ import type { SwiperOptions } from 'swiper/types';
37
+
38
+ /** contains the swiper json object once created, for each uniqueClass */
39
+ const _useSwiper: { [uniqueClass: string] : Swiper; } = {};
40
+
41
+ /** contains the option used when creating the swiper object for each uniqueClass */
42
+ const _useOptions: { [uniqueClass: string] : SwiperOptions; } = {};
43
+
44
+ /** contains all the uniqueClass that have their swiper object delayed because the
45
+ * related thumbnail swiper is not created yet
46
+ * For each uniqueClass, is equal to the thumbnail slider uniqueClass
47
+ */
48
+ const _useDelaySwiper: { [uniqueClass: string] : string; } = {};
37
49
 
38
50
  class AstroSwiper extends HTMLElement {
51
+ /** pointer to the swiper structure that was created using "new",
52
+ * even when not initialized */
53
+ astroSwiper: Swiper | undefined
54
+
39
55
  constructor() {
40
56
  super();
57
+ this.astroSwiper = undefined
41
58
 
42
59
  // Read the message from the data attribute.
43
60
  const options = JSON.parse(this.dataset.options || '{}')
@@ -47,34 +64,37 @@ const {
47
64
  if (linkToThumbUniqueClass === '') {
48
65
  // no thumbnail link - the swiper can be created immediatly
49
66
  const swiper = new Swiper(`.${uniqueClass}`, options)
50
- useSwiper[uniqueClass] = swiper
67
+ _useSwiper[uniqueClass] = swiper
68
+ this.astroSwiper = swiper
51
69
  } else {
52
70
  // a thumbnail link is provided
53
71
  // if the thumbnail swiper is already created, the main slider can be created also
54
72
  // otherwise, it will be added in the delayed swiper list
55
- if (useSwiper[linkToThumbUniqueClass] !== undefined) {
56
- options.thumbs = { swiper: useSwiper[linkToThumbUniqueClass], ...options.thumbs }
73
+ if (_useSwiper[linkToThumbUniqueClass] !== undefined) {
74
+ options.thumbs = { swiper: _useSwiper[linkToThumbUniqueClass], ...options.thumbs }
57
75
  const swiper = new Swiper(`.${uniqueClass}`, options)
58
- useSwiper[uniqueClass] = swiper
76
+ _useSwiper[uniqueClass] = swiper
77
+ this.astroSwiper = swiper
59
78
  } else {
60
79
  // cannot create the swiper as the thumbnail swiper not created yet
61
80
  // will be done later
62
- useDelaySwiper[uniqueClass] = linkToThumbUniqueClass
81
+ _useDelaySwiper[uniqueClass] = linkToThumbUniqueClass
63
82
  }
64
83
  }
65
84
 
66
- useOptions[uniqueClass] = options
85
+ _useOptions[uniqueClass] = options
67
86
 
68
87
  // look if any delayed swiper can be created, that is its related thumbnail swiper is now created
69
- Object.keys(useDelaySwiper).forEach(delayedClass => {
70
- const delayedThumbClass = useDelaySwiper[delayedClass]
71
- if (useSwiper[delayedThumbClass] !== undefined) {
72
- const delayedOptions = useOptions[delayedClass]
73
- delayedOptions.thumbs = { swiper: useSwiper[delayedThumbClass], ...delayedOptions.thumbs }
88
+ Object.keys(_useDelaySwiper).forEach(delayedClass => {
89
+ const delayedThumbClass = _useDelaySwiper[delayedClass]
90
+ if (_useSwiper[delayedThumbClass] !== undefined) {
91
+ const delayedOptions = _useOptions[delayedClass]
92
+ delayedOptions.thumbs = { swiper: _useSwiper[delayedThumbClass], ...delayedOptions.thumbs }
74
93
  const swiper = new Swiper(`.${delayedClass}`, delayedOptions)
75
- useSwiper[delayedClass] = swiper
76
- useOptions[delayedClass] = delayedOptions
77
- delete useDelaySwiper[delayedClass]
94
+ _useSwiper[delayedClass] = swiper;
95
+ (document.querySelector(`.${delayedClass}`) as AstroSwiper).astroSwiper = swiper
96
+ _useOptions[delayedClass] = delayedOptions
97
+ delete _useDelaySwiper[delayedClass]
78
98
  }
79
99
  })
80
100
  }
@@ -17,7 +17,7 @@ const {
17
17
  ---
18
18
 
19
19
  <div
20
- class={`swiper-button-next ${className}`}
20
+ class:list={['swiper-button-next', className]}
21
21
  {...props}>
22
22
  <slot/>
23
23
  </div>
@@ -17,7 +17,7 @@ const {
17
17
  ---
18
18
 
19
19
  <div
20
- class={`swiper-button-prev ${className}`}
20
+ class:list={['swiper-button-prev', className]}
21
21
  {...props}>
22
22
  <slot/>
23
23
  </div>
@@ -17,7 +17,7 @@ const {
17
17
  ---
18
18
 
19
19
  <div
20
- class={`swiper-pagination ${className}`}
20
+ class:list={['swiper-pagination', className]}
21
21
  {...props}>
22
22
  <slot/>
23
23
  </div>
@@ -17,7 +17,7 @@ const {
17
17
  ---
18
18
 
19
19
  <div
20
- class={`swiper-scrollbar ${className}`}
20
+ class:list={['swiper-scrollbar', className]}
21
21
  {...props}>
22
22
  <slot/>
23
23
  </div>
@@ -17,7 +17,7 @@ const {
17
17
  ---
18
18
 
19
19
  <div
20
- class={`swiper-slide ${className}`}
20
+ class:list={['swiper-slide', className]}
21
21
  {...props}>
22
22
  <slot/>
23
23
  </div>
@@ -17,7 +17,7 @@ const {
17
17
  ---
18
18
 
19
19
  <div
20
- class={`swiper-wrapper ${className}`}
20
+ class:list={['swiper-wrapper', className]}
21
21
  {...props}>
22
22
  <slot/>
23
23
  </div>
package/src/index.ts CHANGED
@@ -36,14 +36,12 @@ export { default as SwiperScrollbar } from './components/SwiperScrollbar.astro'
36
36
  export { default as SwiperSlide } from './components/SwiperSlide.astro'
37
37
  export { default as SwiperWrapper } from './components/SwiperWrapper.astro'
38
38
 
39
- /** contains the swiper json object once created, for each uniqueClass */
40
- export const useSwiper: { [uniqueClass: string] : Swiper; } = {};
41
-
42
- /** contains the option used when creating the swiper object for each uniqueClass */
43
- export const useOptions: { [uniqueClass: string] : SwiperOptions; } = {};
39
+ declare class AstroSwiper extends HTMLElement {
40
+ /** pointer to the swiper structure that was created using "new",
41
+ * even when not initialized */
42
+ astroSwiper: Swiper | undefined
43
+ }
44
44
 
45
- /** contains all the uniqueClass that have their swiper object delayed because the
46
- * related thumbnail swiper is not created yet
47
- * For each uniqueClass, is equal to the thumbnail slider uniqueClass
48
- */
49
- export const useDelaySwiper: { [uniqueClass: string] : string; } = {};
45
+ export function getSwiperFromUniqueClass(uniqueClass: string): Swiper | undefined {
46
+ return (document.querySelector(`.${uniqueClass}`) as AstroSwiper)?.astroSwiper
47
+ }