diff --git a/.babelrc b/.babelrc
deleted file mode 100644
index ce6e9f08..00000000
--- a/.babelrc
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "presets": [
- [
- "@babel/env",
- {
- "modules": false,
- "loose": true
- }
- ]
- ],
- "env": {
- "test": {
- "presets": [
- [
- "@babel/env"
- ]
- ]
- }
- }
-}
\ No newline at end of file
diff --git a/.eslintrc b/.eslintrc
index 7ff9be99..6f724d80 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -15,9 +15,6 @@
"browser": true,
"node": true
},
- "ignorePatterns": [
- "*.esm.js"
- ],
"rules": {
"semi": [
"error",
@@ -28,11 +25,11 @@
],
"space-in-parens": [
"error",
- "always"
+ "never"
],
"array-bracket-spacing": [
"error",
- "always"
+ "never"
],
"object-curly-spacing": [
"error",
@@ -40,7 +37,7 @@
],
"computed-property-spacing": [
"error",
- "always"
+ "never"
],
"camelcase": "error",
"comma-dangle": [
@@ -50,7 +47,7 @@
"objects": "always-multiline",
"imports": "always-multiline",
"exports": "always-multiline",
- "functions": "never"
+ "functions": "always-multiline"
}
],
"comma-spacing": [
@@ -69,14 +66,7 @@
"VariableDeclarator": "first"
}
],
- "no-console": [
- "error",
- {
- "allow": [
- "error"
- ]
- }
- ],
+ "no-console": "error",
"no-empty-function": [
"error",
{
diff --git a/.stylelintrc b/.stylelintrc
index f8894ca2..cffabab9 100644
--- a/.stylelintrc
+++ b/.stylelintrc
@@ -5,6 +5,7 @@
"stylelint-order"
],
"rules": {
+ "selector-class-pattern": "[a-z_\\-]+",
"number-leading-zero": "never",
"max-nesting-depth": 7,
"selector-max-compound-selectors": null,
diff --git a/README.md b/README.md
index 77aa1ad2..9e091231 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-
+
Splide
@@ -33,19 +33,19 @@ No dependencies, no Lighthouse errors.
-
+
-
+
-
+
-
+
-
+
@@ -104,7 +104,7 @@ Please support the project if you like it!
Here is the mobile version result of the [Splide front page](https://splidejs.com):
-
+
The Splide slider does not degrade Accessibility, Best Practices and SEO 🎉
diff --git a/app/assets/css/basic.scss b/app/assets/css/basic.scss
new file mode 100644
index 00000000..bb21a6c9
--- /dev/null
+++ b/app/assets/css/basic.scss
@@ -0,0 +1,39 @@
+@import url('https://fonts.googleapis.com/css2?family=Inter:wght@200..700&display=swap');
+
+body {
+ color: #3d4b56;
+ font-family: Inter, sans-serif;
+ margin: 2rem;
+}
+
+h2 {
+ margin-top: 6rem;
+ text-align: center;
+}
+
+.splide {
+ $root: &;
+ margin: 2rem auto;
+
+ &__slide {
+ align-items: center;
+ background: #ecf3fa;
+ display: flex;
+ font-size: 2rem;
+ justify-content: center;
+
+ &.is-active {
+ background: #e1e9f3;
+ }
+
+ img {
+ height: 100%;
+ object-fit: cover;
+ width: 100%;
+ }
+ }
+}
+
+.controls {
+ text-align: center;
+}
diff --git a/src/js/test/assets/images/pics/slide01.jpg b/app/assets/images/pics/slide01.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide01.jpg
rename to app/assets/images/pics/slide01.jpg
diff --git a/src/js/test/assets/images/pics/slide02.jpg b/app/assets/images/pics/slide02.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide02.jpg
rename to app/assets/images/pics/slide02.jpg
diff --git a/src/js/test/assets/images/pics/slide03.jpg b/app/assets/images/pics/slide03.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide03.jpg
rename to app/assets/images/pics/slide03.jpg
diff --git a/src/js/test/assets/images/pics/slide04.jpg b/app/assets/images/pics/slide04.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide04.jpg
rename to app/assets/images/pics/slide04.jpg
diff --git a/src/js/test/assets/images/pics/slide05.jpg b/app/assets/images/pics/slide05.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide05.jpg
rename to app/assets/images/pics/slide05.jpg
diff --git a/src/js/test/assets/images/pics/slide06.jpg b/app/assets/images/pics/slide06.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide06.jpg
rename to app/assets/images/pics/slide06.jpg
diff --git a/src/js/test/assets/images/pics/slide07.jpg b/app/assets/images/pics/slide07.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide07.jpg
rename to app/assets/images/pics/slide07.jpg
diff --git a/src/js/test/assets/images/pics/slide08.jpg b/app/assets/images/pics/slide08.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide08.jpg
rename to app/assets/images/pics/slide08.jpg
diff --git a/src/js/test/assets/images/pics/slide09.jpg b/app/assets/images/pics/slide09.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide09.jpg
rename to app/assets/images/pics/slide09.jpg
diff --git a/src/js/test/assets/images/pics/slide10.jpg b/app/assets/images/pics/slide10.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide10.jpg
rename to app/assets/images/pics/slide10.jpg
diff --git a/src/js/test/assets/images/pics/slide11.jpg b/app/assets/images/pics/slide11.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide11.jpg
rename to app/assets/images/pics/slide11.jpg
diff --git a/src/js/test/assets/images/pics/slide12.jpg b/app/assets/images/pics/slide12.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide12.jpg
rename to app/assets/images/pics/slide12.jpg
diff --git a/src/js/test/assets/images/pics/slide13.jpg b/app/assets/images/pics/slide13.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide13.jpg
rename to app/assets/images/pics/slide13.jpg
diff --git a/src/js/test/assets/images/pics/slide14.jpg b/app/assets/images/pics/slide14.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide14.jpg
rename to app/assets/images/pics/slide14.jpg
diff --git a/src/js/test/assets/images/pics/slide15.jpg b/app/assets/images/pics/slide15.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide15.jpg
rename to app/assets/images/pics/slide15.jpg
diff --git a/src/js/test/assets/images/pics/slide16.jpg b/app/assets/images/pics/slide16.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide16.jpg
rename to app/assets/images/pics/slide16.jpg
diff --git a/src/js/test/assets/images/pics/slide17.jpg b/app/assets/images/pics/slide17.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide17.jpg
rename to app/assets/images/pics/slide17.jpg
diff --git a/src/js/test/assets/images/pics/slide18.jpg b/app/assets/images/pics/slide18.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide18.jpg
rename to app/assets/images/pics/slide18.jpg
diff --git a/src/js/test/assets/images/pics/slide19.jpg b/app/assets/images/pics/slide19.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide19.jpg
rename to app/assets/images/pics/slide19.jpg
diff --git a/src/js/test/assets/images/pics/slide20.jpg b/app/assets/images/pics/slide20.jpg
similarity index 100%
rename from src/js/test/assets/images/pics/slide20.jpg
rename to app/assets/images/pics/slide20.jpg
diff --git a/src/js/test/assets/images/planets/mars.jpg b/app/assets/images/planets/mars.jpg
similarity index 100%
rename from src/js/test/assets/images/planets/mars.jpg
rename to app/assets/images/planets/mars.jpg
diff --git a/src/js/test/assets/images/planets/neptune.jpg b/app/assets/images/planets/neptune.jpg
similarity index 100%
rename from src/js/test/assets/images/planets/neptune.jpg
rename to app/assets/images/planets/neptune.jpg
diff --git a/src/js/test/assets/images/planets/saturn.jpg b/app/assets/images/planets/saturn.jpg
similarity index 100%
rename from src/js/test/assets/images/planets/saturn.jpg
rename to app/assets/images/planets/saturn.jpg
diff --git a/app/index.html b/app/index.html
new file mode 100644
index 00000000..805deb8e
--- /dev/null
+++ b/app/index.html
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+ Basic
+ Images
+ Add/Remove
+ AutoHeight
+ AutoWidth
+ Autoplay
+ Breakpoints
+ Container
+ Drag Free
+ Extension
+ Fade
+ Fixed Size
+ JSON
+ Lazy Load
+ Live Regions
+ Loop
+ Nest
+ Overflow
+ RTL
+ Sync
+ TTB
+
+
+
\ No newline at end of file
diff --git a/app/js/common.ts b/app/js/common.ts
new file mode 100644
index 00000000..c7f5c260
--- /dev/null
+++ b/app/js/common.ts
@@ -0,0 +1,2 @@
+import '../../src/css/themes/default/index.scss';
+import '../assets/css/basic.scss';
\ No newline at end of file
diff --git a/app/js/html.ts b/app/js/html.ts
new file mode 100644
index 00000000..46d7d23f
--- /dev/null
+++ b/app/js/html.ts
@@ -0,0 +1,13 @@
+import { buildHtml as _buildHtml, BuildHtmlConfig, insertHtml as _insertHtml, InsertHtmlConfig } from '@test';
+import { SLIDES } from './pics';
+
+
+export function buildHtml(config: BuildHtmlConfig = {}): string {
+ const src = config.useImage ? SLIDES : undefined;
+ return _buildHtml({ ...config, src });
+}
+
+export function insertHtml(config: InsertHtmlConfig = {}): void {
+ const src = config.useImage ? SLIDES : undefined;
+ _insertHtml({ ...config, src });
+}
\ No newline at end of file
diff --git a/app/js/pics/index.ts b/app/js/pics/index.ts
new file mode 100644
index 00000000..da12f7d9
--- /dev/null
+++ b/app/js/pics/index.ts
@@ -0,0 +1,36 @@
+///
+
+import slide01 from '../../assets/images/pics/slide01.jpg';
+import slide02 from '../../assets/images/pics/slide02.jpg';
+import slide03 from '../../assets/images/pics/slide03.jpg';
+import slide04 from '../../assets/images/pics/slide04.jpg';
+import slide05 from '../../assets/images/pics/slide05.jpg';
+import slide06 from '../../assets/images/pics/slide06.jpg';
+import slide07 from '../../assets/images/pics/slide07.jpg';
+import slide08 from '../../assets/images/pics/slide08.jpg';
+import slide09 from '../../assets/images/pics/slide09.jpg';
+import slide10 from '../../assets/images/pics/slide10.jpg';
+import slide11 from '../../assets/images/pics/slide09.jpg';
+import slide12 from '../../assets/images/pics/slide10.jpg';
+import slide13 from '../../assets/images/pics/slide13.jpg';
+import slide14 from '../../assets/images/pics/slide14.jpg';
+import slide15 from '../../assets/images/pics/slide15.jpg';
+
+export const SLIDES = [
+ slide01,
+ slide02,
+ slide03,
+ slide04,
+ slide05,
+ slide06,
+ slide07,
+ slide08,
+ slide09,
+ slide10,
+ slide11,
+ slide12,
+ slide13,
+ slide14,
+ slide15,
+];
+
diff --git a/app/pages/add/index.html b/app/pages/add/index.html
new file mode 100644
index 00000000..731514ae
--- /dev/null
+++ b/app/pages/add/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+ Add
+ Remove
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/add/script.ts b/app/pages/add/script.ts
new file mode 100644
index 00000000..4d01d010
--- /dev/null
+++ b/app/pages/add/script.ts
@@ -0,0 +1,33 @@
+import { Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import { SLIDES } from '../../js/pics';
+import '../../js/common';
+
+
+insertHtml({ useImage: true });
+
+const splide = new Splide('#splide01', {
+ type: 'loop',
+ width: 1000,
+ height: 400,
+ perPage: 3,
+ gap: '1rem',
+}).mount();
+
+const addButton = document.getElementById('add');
+const removeButton = document.getElementById('remove');
+
+if (addButton) {
+ addButton.addEventListener('click', function () {
+ splide.add([
+ `
`,
+ `
`,
+ ]);
+ });
+}
+
+if (removeButton) {
+ removeButton.addEventListener('click', function () {
+ splide.remove(splide.length - 1);
+ });
+}
\ No newline at end of file
diff --git a/app/pages/auto-height/index.html b/app/pages/auto-height/index.html
new file mode 100644
index 00000000..f80392da
--- /dev/null
+++ b/app/pages/auto-height/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/auto-height/script.ts b/app/pages/auto-height/script.ts
new file mode 100644
index 00000000..6e9d4fb0
--- /dev/null
+++ b/app/pages/auto-height/script.ts
@@ -0,0 +1,29 @@
+import { Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import '../../js/common';
+
+
+insertHtml({ id: 'splide01', autoHeight: true });
+
+new Splide('#splide01', {
+ direction: 'ttb',
+ width: 600,
+ height: '90vh',
+ gap: '1rem',
+ focus: 0,
+ drag: 'free',
+ omitEnd: true,
+ autoHeight: true,
+}).mount();
+
+insertHtml({ id: 'splide02', useImage: true, autoHeight: true });
+
+new Splide('#splide02', {
+ type: 'loop',
+ width: 600,
+ direction: 'ttb',
+ height: '90vh',
+ gap: '1rem',
+ autoHeight: true,
+ focus: 'center',
+}).mount();
diff --git a/app/pages/auto-width/index.html b/app/pages/auto-width/index.html
new file mode 100644
index 00000000..f80392da
--- /dev/null
+++ b/app/pages/auto-width/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/auto-width/script.ts b/app/pages/auto-width/script.ts
new file mode 100644
index 00000000..9d29f0f3
--- /dev/null
+++ b/app/pages/auto-width/script.ts
@@ -0,0 +1,26 @@
+import { Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import '../../js/common';
+
+
+insertHtml({ id: 'splide01', useImage: true, autoWidth: true });
+
+new Splide('#splide01', {
+ height: 400,
+ gap: '1rem',
+ focus: 0,
+ drag: 'free',
+ omitEnd: true,
+ autoWidth: true,
+}).mount();
+
+insertHtml({ id: 'splide02', useImage: true, autoWidth: true });
+
+new Splide('#splide02', {
+ type: 'loop',
+ width: 1000,
+ height: 400,
+ gap: '1rem',
+ autoWidth: true,
+ focus: 'center',
+}).mount();
diff --git a/app/pages/autoplay/index.html b/app/pages/autoplay/index.html
new file mode 100644
index 00000000..f80392da
--- /dev/null
+++ b/app/pages/autoplay/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/autoplay/script.ts b/app/pages/autoplay/script.ts
new file mode 100644
index 00000000..cefb72d5
--- /dev/null
+++ b/app/pages/autoplay/script.ts
@@ -0,0 +1,36 @@
+import { Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import '../../js/common';
+
+
+insertHtml({
+ hasProgress: true,
+ hasToggle: true,
+ onRenderSlide(index) {
+ if (index === 0) {
+ return { attrs: { 'data-splide-interval': 1000 } };
+ }
+
+ if (index === 2) {
+ return { attrs: { 'data-splide-interval': 10000 } };
+ }
+
+ return {};
+ },
+});
+
+const splide01 = new Splide('#splide01', {
+ width: 1000,
+ height: 400,
+ gap: '1rem',
+ autoplay: true,
+ // pauseOnFocus: false,
+ // pauseOnHover: false,
+}).mount();
+
+const rateElm = document.createElement('pre');
+splide01.root.append(rateElm);
+
+splide01.on('autoplay:playing', rate => {
+ rateElm.textContent = rate.toFixed(3);
+});
\ No newline at end of file
diff --git a/app/pages/basic/index.html b/app/pages/basic/index.html
new file mode 100644
index 00000000..83eb783e
--- /dev/null
+++ b/app/pages/basic/index.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
01
+
02
+
03
+
04
+
05
+
06
+
07
+
08
+
09
+
10
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/basic/script.ts b/app/pages/basic/script.ts
new file mode 100644
index 00000000..4ff37f43
--- /dev/null
+++ b/app/pages/basic/script.ts
@@ -0,0 +1,11 @@
+import { Splide } from '../../../src/js';
+import '../../js/common';
+
+
+const splide = new Splide('#splide01', {
+ width: 1000,
+ height: 400,
+}).mount();
+
+splide.on('move', () => console.log('move'));
+splide.on('moved', () => console.log('moved'));
\ No newline at end of file
diff --git a/app/pages/breakpoints/index.html b/app/pages/breakpoints/index.html
new file mode 100644
index 00000000..f80392da
--- /dev/null
+++ b/app/pages/breakpoints/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/breakpoints/script.ts b/app/pages/breakpoints/script.ts
new file mode 100644
index 00000000..dcd858f4
--- /dev/null
+++ b/app/pages/breakpoints/script.ts
@@ -0,0 +1,38 @@
+import { Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import '../../js/common';
+
+
+insertHtml({ id: 'splide01', useImage: true });
+
+const options = {
+ perPage: 3,
+ arrows: false,
+ // mediaQuery: 'min',
+ breakpoints: {
+ 1200: {
+ perPage: 1,
+ gap: '1rem',
+ arrows: true,
+ padding: 50,
+ height: 500,
+ destroy: false,
+ },
+ 1000: {
+ perPage: 2,
+ gap: 0,
+ arrows: false,
+ padding: 0,
+ pagination: false,
+ },
+ 800: {
+ destroy: true,
+ },
+ },
+};
+
+new Splide('#splide01', options).mount();
+
+insertHtml({ id: 'splide02', hasArrows: true, hasPagination: true });
+new Splide('#splide02', options).mount();
+
diff --git a/app/pages/container/index.html b/app/pages/container/index.html
new file mode 100644
index 00000000..b9c4f914
--- /dev/null
+++ b/app/pages/container/index.html
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, ius cu novum splendide contentiones, vim dolorem delicata explicari no. Posidonium sadipscing delicatissimi ad vix, vim at utamur ponderum. Eu doming verear complectitur vim.
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, in usu facilis philosophia, exerci adolescens honestatis ei eum. Et vis nulla simul, pri cu euismod accusam vulputate.
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, ius cu novum splendide contentiones, vim dolorem delicata explicari no. Posidonium sadipscing delicatissimi ad vix, vim at utamur ponderum. Eu doming verear complectitur vim.
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, in usu facilis philosophia, exerci adolescens honestatis ei eum. Et vis nulla simul, pri cu euismod accusam vulputate.
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/container/script.ts b/app/pages/container/script.ts
new file mode 100644
index 00000000..9299b4d2
--- /dev/null
+++ b/app/pages/container/script.ts
@@ -0,0 +1,10 @@
+import { Splide } from '../../../src/js';
+import '../../../src/css/themes/default/index.scss';
+
+
+new Splide('#splide01', {
+ width: 1000,
+ perPage: 2,
+ gap: '1rem',
+ heightRatio: 0.3,
+}).mount();
diff --git a/app/pages/drag-free/index.html b/app/pages/drag-free/index.html
new file mode 100644
index 00000000..4abbe403
--- /dev/null
+++ b/app/pages/drag-free/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/drag-free/script.ts b/app/pages/drag-free/script.ts
new file mode 100644
index 00000000..6ead0bdf
--- /dev/null
+++ b/app/pages/drag-free/script.ts
@@ -0,0 +1,41 @@
+import { Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import '../../js/common';
+import './style.scss';
+
+
+insertHtml({ id: 'splide01', heading: 'Drag Free - Slide' });
+
+const splide01 = new Splide('#splide01', {
+ width: 1000,
+ height: 400,
+ // type: 'loop',
+ parPage: 3,
+ drag: 'free',
+ snap: true,
+ gap: '2rem',
+}).mount();
+
+const bar = document.querySelector
('.bar');
+
+if (bar) {
+ const { getRate } = splide01.Components.Move;
+
+ splide01.on('dragging scrolling', () => {
+ bar.style.width = `${ getRate() * 100 }%`;
+ });
+} else {
+ throw new Error('Could not find a bar element');
+}
+
+insertHtml({ id: 'splide02', heading: 'Drag Free - Loop' });
+
+new Splide('#splide02', {
+ width: 1000,
+ height: 400,
+ type: 'loop',
+ parPage: 3,
+ drag: 'free',
+ snap: false,
+ gap: '2rem',
+}).mount();
diff --git a/app/pages/drag-free/style.scss b/app/pages/drag-free/style.scss
new file mode 100644
index 00000000..8b500d8a
--- /dev/null
+++ b/app/pages/drag-free/style.scss
@@ -0,0 +1,4 @@
+.bar {
+ background: #b1f3f3;
+ height: 3px;
+}
diff --git a/app/pages/extension/index.html b/app/pages/extension/index.html
new file mode 100644
index 00000000..f80392da
--- /dev/null
+++ b/app/pages/extension/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/extension/script.ts b/app/pages/extension/script.ts
new file mode 100644
index 00000000..49146b57
--- /dev/null
+++ b/app/pages/extension/script.ts
@@ -0,0 +1,28 @@
+import { BaseComponent, ComponentConstructor, Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import '../../js/common';
+
+
+insertHtml();
+
+const CustomExtension: ComponentConstructor = (Splide, Components, options, event) => {
+ const { root } = Splide;
+ const { bind } = event;
+
+ function mount(): void {
+ const button = document.createElement('button');
+ button.textContent = 'Jump';
+ bind(button, 'click', () => Splide.go('>>'));
+ root.append(button);
+ }
+
+ return {
+ mount,
+ };
+};
+
+new Splide('#splide01', {
+ width: 1000,
+ height: 400,
+}).mount({ CustomExtension });
+
diff --git a/app/pages/fade/index.html b/app/pages/fade/index.html
new file mode 100644
index 00000000..4065b5e8
--- /dev/null
+++ b/app/pages/fade/index.html
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, quod sale at pro, everti iisque tractatos sit ea. Agam alterum sit at. Libris
+ petentium his ne, ne eam detraxit inimicus tractatos. Ius mundi verear ad, at percipit constituto pro, ei
+ possim eirmod quo. Vim laudem aperiam reprehendunt in.
+
+
+
+
+
+ Has cu etiam veniam recusabo, his animal nostrud fabellas ne. Vis suas qualisque eu, eum ei impedit civibus,
+ an solum definiebas pro.
+
+
+
+
+
+ Mollis epicuri laboramus ea qui, his ei meis graecis quaestio. Ius ne suscipit prodesset. Qui at delicata
+ euripidis eloquentiam, eius solum volumus eum eu. Usu eu deserunt abhorreant, errem qualisque nec in. Te has
+ labitur virtute hendrerit, cum quaeque oportere mediocritatem in, eos imperdiet intellegam id.
+
+
+ Has cu etiam veniam recusabo, his animal nostrud fabellas ne. Vis suas qualisque eu, eum ei impedit civibus,
+ an solum definiebas pro.
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/fade/script.ts b/app/pages/fade/script.ts
new file mode 100644
index 00000000..80bed53a
--- /dev/null
+++ b/app/pages/fade/script.ts
@@ -0,0 +1,11 @@
+import { Splide } from '../../../src/js';
+import '../../../src/css/themes/default/index.scss';
+import './style.scss';
+
+
+new Splide('#splide01', {
+ type: 'fade',
+ width: 1000,
+ rewind: true,
+ rewindByDrag: true,
+}).mount();
diff --git a/app/pages/fade/style.scss b/app/pages/fade/style.scss
new file mode 100644
index 00000000..93f5c518
--- /dev/null
+++ b/app/pages/fade/style.scss
@@ -0,0 +1,16 @@
+body {
+ margin: 2rem;
+}
+
+.splide {
+ margin: 0 auto;
+
+ &__slide {
+ background: #ecf3fa;
+ padding: 1rem;
+
+ img {
+ width: 100%;
+ }
+ }
+}
diff --git a/app/pages/fixed-size/index.html b/app/pages/fixed-size/index.html
new file mode 100644
index 00000000..f80392da
--- /dev/null
+++ b/app/pages/fixed-size/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/fixed-size/script.ts b/app/pages/fixed-size/script.ts
new file mode 100644
index 00000000..248d71d4
--- /dev/null
+++ b/app/pages/fixed-size/script.ts
@@ -0,0 +1,24 @@
+import { Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import '../../js/common';
+
+
+insertHtml({ id: 'splide01' });
+
+new Splide('#splide01', {
+ type: 'loop',
+ fixedWidth: '6rem',
+ gap: 10,
+ focus: 0,
+ omitEnd: true,
+}).mount();
+
+
+insertHtml({ id: 'splide02' });
+
+new Splide('#splide02', {
+ fixedWidth: 200,
+ gap: '1rem',
+}).mount();
+
+
diff --git a/app/pages/images/index.html b/app/pages/images/index.html
new file mode 100644
index 00000000..f80392da
--- /dev/null
+++ b/app/pages/images/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/images/script.ts b/app/pages/images/script.ts
new file mode 100644
index 00000000..6953b4fb
--- /dev/null
+++ b/app/pages/images/script.ts
@@ -0,0 +1,11 @@
+import { Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import '../../js/common';
+
+
+insertHtml({ id: 'splide01', useImage: true });
+
+new Splide('#splide01', {
+ width: 1000,
+ height: 400,
+}).mount();
diff --git a/app/pages/json/index.html b/app/pages/json/index.html
new file mode 100644
index 00000000..f80392da
--- /dev/null
+++ b/app/pages/json/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/json/script.ts b/app/pages/json/script.ts
new file mode 100644
index 00000000..19d2ad64
--- /dev/null
+++ b/app/pages/json/script.ts
@@ -0,0 +1,23 @@
+import { Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import '../../js/common';
+
+
+insertHtml();
+
+const options = {
+ width: 1000,
+ height: 400,
+ perPage: 2,
+ gap: '1rem',
+};
+
+const root = document.getElementById('splide01');
+
+if (root) {
+ root.dataset.splide = JSON.stringify(options);
+ new Splide(root).mount();
+} else {
+ throw new Error('Could not find a root element.');
+}
+
diff --git a/app/pages/lazy-load/index.html b/app/pages/lazy-load/index.html
new file mode 100644
index 00000000..f80392da
--- /dev/null
+++ b/app/pages/lazy-load/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/lazy-load/script.ts b/app/pages/lazy-load/script.ts
new file mode 100644
index 00000000..8d36d037
--- /dev/null
+++ b/app/pages/lazy-load/script.ts
@@ -0,0 +1,57 @@
+import { Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import '../../js/common';
+
+
+const placeholder = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mPc9/3HfwAI1gOuq1Su+AAAAABJRU5ErkJggg==';
+
+insertHtml({
+ id: 'splide01',
+ heading: 'Src & Placeholder',
+ onRenderSlide(index) {
+ const url = `https://source.unsplash.com/random/960x540?sig=${ index + 1 }`;
+
+ return {
+ content: ` `,
+ };
+ },
+});
+
+const splide01 = new Splide('#splide01', {
+ lazyLoad: 'nearby',
+ heightRatio: (9 / 16) / 2,
+ gap: '1rem',
+ drag: 'free',
+}).mount();
+
+let sig = 20;
+
+splide01.on('moved', index => {
+ if (index === splide01.length - 1) {
+ splide01.add([
+ ` `,
+ ` `,
+ ]);
+ }
+});
+
+insertHtml({
+ id: 'splide02',
+ heading: 'Srcset',
+ onRenderSlide(index) {
+ const small = `https://source.unsplash.com/random/640x360?sig=${ index + 1 }`;
+ const large = `https://source.unsplash.com/random/960x540?sig=${ index + 1 }`;
+
+ return {
+ content: ` `,
+ };
+ },
+});
+
+new Splide('#splide02', {
+ perPage: 2,
+ lazyLoad: 'sequential',
+ heightRatio: (9 / 16) / 2,
+ gap: '1rem',
+}).mount();
+
diff --git a/app/pages/live-regions/index.html b/app/pages/live-regions/index.html
new file mode 100644
index 00000000..708beabd
--- /dev/null
+++ b/app/pages/live-regions/index.html
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Neptune
+
+
+ Neptune is the eighth and farthest-known Solar planet from the Sun.
+
+
Quoted from Wikipedia
+
+
+
+
+
+
+
+
Saturn
+
+
+ Saturn is the sixth planet from the Sun and the second-largest in the Solar System, after Jupiter.
+
+
Quoted from Wikipedia
+
+
+
+
+
+
+
+
Mars
+
+
+ Mars is the fourth planet from the Sun and the second-smallest planet in the Solar System.
+
+
Quoted from Wikipedia
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/live-regions/script.ts b/app/pages/live-regions/script.ts
new file mode 100644
index 00000000..049b8788
--- /dev/null
+++ b/app/pages/live-regions/script.ts
@@ -0,0 +1,14 @@
+import { Splide } from '../../../src/js';
+import '../../../src/css/themes/default/index.scss';
+import './style.scss';
+
+
+new Splide('#splide01', {
+ type: 'loop',
+ width: 480,
+ rewind: true,
+ // live : false,
+ speed: 600,
+ arrowPath: 'm13.5 7.01 13 13m-13 13 13-13',
+ updateOnMove: true,
+}).mount();
diff --git a/app/pages/live-regions/style.scss b/app/pages/live-regions/style.scss
new file mode 100644
index 00000000..ca4e75fe
--- /dev/null
+++ b/app/pages/live-regions/style.scss
@@ -0,0 +1,123 @@
+body {
+ background: linear-gradient( 0deg, #8cde1d, #c0e900 );
+ color: #d7e9f5;
+ font-family: SplideBody, sans-serif;
+ font-weight: normal;
+ height: 200vh;
+ line-height: 1.8;
+ overflow-x: hidden;
+ padding: 2rem;
+}
+
+img {
+ height: auto;
+ width: 100%;
+}
+
+p {
+ margin: 0 0 1em;
+}
+
+cite {
+ font-size: .8em;
+ font-style: normal;
+ opacity: .7;
+}
+
+.wrapper {
+ display: flex;
+ justify-content: center;
+ margin-top: 10rem;
+}
+
+.splide {
+ &__track {
+ height: 100%;
+ }
+
+ &__slide {
+ height: 100%;
+ padding: 2rem 1rem;
+
+ &:focus-visible {
+ outline: #fff dotted 3px !important;
+ }
+
+ &__inner {
+ background: #000;
+ border-radius: 10px;
+ height: 100%;
+ opacity: 0;
+ overflow: hidden;
+ transform: scale( .8 );
+ transition: all .5s cubic-bezier( .17, .67, .44, 1 );
+ }
+
+ &.is-active {
+ .splide__slide__inner {
+ box-shadow: 0 0 15px 4px rgba( 0, 0, 0, .25 );
+ opacity: 1;
+ transform: scale( 1 );
+ }
+ }
+ }
+
+ &__heading {
+ color: #fff;
+ font-family: SplideHeading, sans-serif;
+ font-size: 2rem;
+ line-height: 1;
+ margin: 0;
+ padding: 1rem 1.5rem .5rem;
+ }
+
+ &__desc {
+ margin: 0;
+ padding: .5rem 1.5rem 3rem;
+ }
+
+ &__arrow {
+ background: transparent;
+ border-radius: 0;
+ height: 2rem;
+ opacity: 1;
+ width: 2rem;
+
+ &:focus-visible {
+ outline: #fff dotted 3px !important;
+ }
+
+ svg {
+ fill: none;
+ height: 2rem;
+ stroke: #fff;
+ stroke-linecap: square;
+ stroke-width: 8px;
+ vertical-align: middle;
+ width: 2rem;
+ }
+
+ &--prev {
+ left: -2.7rem;
+ }
+
+ &--next {
+ right: -2.7rem;
+ }
+ }
+
+ &__pagination {
+ bottom: 3rem;
+
+ &__page {
+ background: #d7e9f5;
+ height: 10px;
+ width: 10px;
+
+ &.is-active {
+ background: #8cde1d;
+ opacity: 1;
+ }
+ }
+ }
+}
diff --git a/app/pages/loop/index.html b/app/pages/loop/index.html
new file mode 100644
index 00000000..f80392da
--- /dev/null
+++ b/app/pages/loop/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/loop/script.ts b/app/pages/loop/script.ts
new file mode 100644
index 00000000..e228772f
--- /dev/null
+++ b/app/pages/loop/script.ts
@@ -0,0 +1,18 @@
+import { Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import '../../js/common';
+import './styles.scss';
+
+
+insertHtml();
+
+new Splide('#splide01', {
+ type: 'loop',
+ width: 1000,
+ height: 400,
+ speed: 1000,
+ perPage: 3,
+ gap: 5,
+ updateOnMove: true,
+ // padding: '3rem',
+}).mount();
diff --git a/app/pages/loop/styles.scss b/app/pages/loop/styles.scss
new file mode 100644
index 00000000..c8dd7114
--- /dev/null
+++ b/app/pages/loop/styles.scss
@@ -0,0 +1,7 @@
+.splide {
+ &__slide {
+ &.is-visible {
+ background: #779cc4;
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/pages/nest/index.html b/app/pages/nest/index.html
new file mode 100644
index 00000000..48b48aad
--- /dev/null
+++ b/app/pages/nest/index.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/nest/script.ts b/app/pages/nest/script.ts
new file mode 100644
index 00000000..cf9ae38b
--- /dev/null
+++ b/app/pages/nest/script.ts
@@ -0,0 +1,27 @@
+import { Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import '../../../src/css/themes/default/index.scss';
+import './style.scss';
+
+
+insertHtml({ id: 'nested01', selector: '.nest1' });
+insertHtml({ id: 'nested02', selector: '.nest2' });
+
+new Splide('#splide01', {
+ gap: '1.5rem',
+ height: 600,
+}).mount();
+
+new Splide('#nested01', {
+ perPage: 2,
+ height: 400,
+ rewind: true,
+ gap: '1rem',
+}).mount();
+
+new Splide('#nested02', {
+ perPage: 2,
+ direction: 'ttb',
+ height: 400,
+ gap: '1rem',
+}).mount();
diff --git a/app/pages/nest/style.scss b/app/pages/nest/style.scss
new file mode 100644
index 00000000..a71639c1
--- /dev/null
+++ b/app/pages/nest/style.scss
@@ -0,0 +1,27 @@
+body {
+ margin: 2rem;
+}
+
+.splide {
+ margin: 0 auto;
+
+ &__slide {
+ align-items: center;
+ background: #ecf3fa;
+ display: flex;
+ justify-content: center;
+ padding: 1rem;
+ }
+}
+
+.nest1,
+.nest2 {
+ .splide {
+ width: 90%;
+
+ &__slide {
+ background: #c6d7e5;
+ font-size: 3rem;
+ }
+ }
+}
diff --git a/app/pages/overflow/index.html b/app/pages/overflow/index.html
new file mode 100644
index 00000000..f80392da
--- /dev/null
+++ b/app/pages/overflow/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/overflow/script.ts b/app/pages/overflow/script.ts
new file mode 100644
index 00000000..bb96aac7
--- /dev/null
+++ b/app/pages/overflow/script.ts
@@ -0,0 +1,43 @@
+import { Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import '../../js/common';
+import './style.scss';
+
+
+insertHtml({ id: 'splide01', heading: 'Loop' });
+
+const splide01 = new Splide('#splide01', {
+ type: 'loop',
+ fixedWidth: '6rem',
+ fixedHeight: '4rem',
+ gap: 10,
+ omitEnd: true,
+ focus: 0,
+ breakpoints: {
+ '!overflow': {
+ arrows: false,
+ drag: false,
+ pagination: false,
+ clones: 0,
+ },
+ },
+}).mount();
+
+splide01.on('overflow', overflow => console.log('overflow', overflow));
+
+insertHtml({ id: 'splide02', heading: 'Slide' });
+
+const splide02 = new Splide('#splide02', {
+ fixedWidth: '6rem',
+ fixedHeight: '4rem',
+ gap: 10,
+ breakpoints: {
+ '!overflow': {
+ arrows: false,
+ drag: false,
+ pagination: false,
+ },
+ },
+}).mount();
+
+splide02.on('overflow', overflow => console.log('overflow', overflow));
\ No newline at end of file
diff --git a/app/pages/overflow/style.scss b/app/pages/overflow/style.scss
new file mode 100644
index 00000000..75ef5ebc
--- /dev/null
+++ b/app/pages/overflow/style.scss
@@ -0,0 +1,13 @@
+.splide {
+ &:not(.is-overflow) {
+ .splide__list {
+ justify-content: center;
+ }
+
+ .splide__slide {
+ &:last-child {
+ margin: 0 !important;
+ }
+ }
+ }
+}
diff --git a/app/pages/rtl/index.html b/app/pages/rtl/index.html
new file mode 100644
index 00000000..f80392da
--- /dev/null
+++ b/app/pages/rtl/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/rtl/script.ts b/app/pages/rtl/script.ts
new file mode 100644
index 00000000..a793f349
--- /dev/null
+++ b/app/pages/rtl/script.ts
@@ -0,0 +1,19 @@
+import { Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import '../../js/common';
+
+
+insertHtml();
+
+new Splide('#splide01', {
+ type: 'loop',
+ width: 1000,
+ height: 400,
+ perPage: 3,
+ gap: 5,
+ direction: 'rtl',
+ padding: {
+ left: 40,
+ right: 0,
+ },
+}).mount();
diff --git a/app/pages/sync/index.html b/app/pages/sync/index.html
new file mode 100644
index 00000000..f80392da
--- /dev/null
+++ b/app/pages/sync/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/sync/script.ts b/app/pages/sync/script.ts
new file mode 100644
index 00000000..aabbcce5
--- /dev/null
+++ b/app/pages/sync/script.ts
@@ -0,0 +1,59 @@
+import { Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import '../../js/common';
+
+
+insertHtml({ id: 'splide01', useImage: true });
+
+const splide01 = new Splide('#splide01', {
+ type: 'loop',
+ width: 800,
+ heightRatio: 0.4,
+ perPage: 1,
+ pagination: false,
+ keyboard: true,
+});
+
+insertHtml({ id: 'splide02', useImage: true });
+
+const splide02 = new Splide('#splide02', {
+ width: 600,
+ fixedWidth: 100,
+ fixedHeight: 56,
+ gap: '.7em',
+ isNavigation: true,
+ focus: 'center',
+ pagination: false,
+ rewind: true,
+ keyboard: true,
+ drag: 'free',
+ updateOnDragged: false,
+ dragMinThreshold: {
+ mouse: 10,
+ touch: 10,
+ },
+});
+
+insertHtml({ id: 'splide03', useImage: true });
+
+const splide03 = new Splide('#splide03', {
+ width: 100,
+ type: 'loop',
+ direction: 'ttb',
+ height: 300,
+ fixedWidth: 100,
+ fixedHeight: 56,
+ gap: '.7em',
+ isNavigation: true,
+ pagination: false,
+ keyboard: true,
+});
+
+splide01.sync(splide02);
+
+splide01.mount();
+splide02.mount();
+splide03.mount();
+
+// Attempts to sync after mount.
+splide01.sync(splide03);
\ No newline at end of file
diff --git a/app/pages/ttb/index.html b/app/pages/ttb/index.html
new file mode 100644
index 00000000..f80392da
--- /dev/null
+++ b/app/pages/ttb/index.html
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/ttb/script.ts b/app/pages/ttb/script.ts
new file mode 100644
index 00000000..a44a41e6
--- /dev/null
+++ b/app/pages/ttb/script.ts
@@ -0,0 +1,17 @@
+import { Splide } from '../../../src/js';
+import { insertHtml } from '../../js/html';
+import '../../js/common';
+import './style.scss';
+
+
+insertHtml({ id: 'splide01', heading: 'Loop' });
+
+new Splide('#splide01', {
+ width: 400,
+ type: 'loop',
+ perPage: 2,
+ padding: '3rem',
+ gap: '1rem',
+ direction: 'ttb',
+ height: '90vh',
+}).mount();
\ No newline at end of file
diff --git a/app/pages/ttb/style.scss b/app/pages/ttb/style.scss
new file mode 100644
index 00000000..db14aaf3
--- /dev/null
+++ b/app/pages/ttb/style.scss
@@ -0,0 +1,3 @@
+.splide {
+ margin-bottom: 50vh;
+}
diff --git a/dist/css/splide-core.min.css b/dist/css/splide-core.min.css
index 089c72ee..89166c6c 100644
--- a/dist/css/splide-core.min.css
+++ b/dist/css/splide-core.min.css
@@ -1 +1 @@
-@keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide__track--draggable{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0!important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #999;border-left-color:transparent;border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.splide__toggle.is-active .splide__toggle__play,.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}
\ No newline at end of file
+@keyframes splide-loading{0%{transform:rotateZ(0)}100%{transform:rotateZ(360deg)}}.splide__track--draggable{-webkit-touch-callout:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0 !important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:flex;height:100%;margin:0 !important;padding:0 !important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{align-items:center;display:flex;flex-wrap:wrap;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;flex-shrink:0;list-style-type:none !important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s infinite linear;border:2px solid #999;border-left-color:rgba(0,0,0,0);border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__play{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}
\ No newline at end of file
diff --git a/dist/css/splide.min.css b/dist/css/splide.min.css
index 7e014b47..6fa7c552 100644
--- a/dist/css/splide.min.css
+++ b/dist/css/splide.min.css
@@ -1 +1 @@
-.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #999;border-left-color:transparent;border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.splide__toggle.is-active .splide__toggle__play,.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}@keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide__track--draggable{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0!important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__arrow{-ms-flex-align:center;align-items:center;background:#ccc;border:0;border-radius:50%;cursor:pointer;display:-ms-flexbox;display:flex;height:2em;-ms-flex-pack:center;justify-content:center;opacity:.7;padding:0;position:absolute;top:50%;transform:translateY(-50%);width:2em;z-index:1}.splide__arrow svg{fill:#000;height:1.2em;width:1.2em}.splide__arrow:hover:not(:disabled){opacity:.9}.splide__arrow:disabled{opacity:.3}.splide__arrow:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide__arrow--prev{left:1em}.splide__arrow--prev svg{transform:scaleX(-1)}.splide__arrow--next{right:1em}.splide.is-focus-in .splide__arrow:focus{outline:3px solid #0bf;outline-offset:3px}.splide__pagination{bottom:.5em;left:0;padding:0 1em;position:absolute;right:0;z-index:1}.splide__pagination__page{background:#ccc;border:0;border-radius:50%;display:inline-block;height:8px;margin:3px;opacity:.7;padding:0;position:relative;transition:transform .2s linear;width:8px}.splide__pagination__page.is-active{background:#fff;transform:scale(1.4);z-index:1}.splide__pagination__page:hover{cursor:pointer;opacity:.9}.splide__pagination__page:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide.is-focus-in .splide__pagination__page:focus{outline:3px solid #0bf;outline-offset:3px}.splide__progress__bar{background:#ccc;height:3px}.splide__slide{-webkit-tap-highlight-color:rgba(0,0,0,0)}.splide__slide:focus{outline:0}@supports(outline-offset:-3px){.splide__slide:focus-visible{outline:3px solid #0bf;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide__slide:focus-visible{border:3px solid #0bf}}@supports(outline-offset:-3px){.splide.is-focus-in .splide__slide:focus{outline:3px solid #0bf;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide.is-focus-in .splide__slide:focus{border:3px solid #0bf}.splide.is-focus-in .splide__track>.splide__list>.splide__slide:focus{border-color:#0bf}}.splide__toggle{cursor:pointer}.splide__toggle:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide.is-focus-in .splide__toggle:focus{outline:3px solid #0bf;outline-offset:3px}.splide__track--nav>.splide__list>.splide__slide{border:3px solid transparent;cursor:pointer}.splide__track--nav>.splide__list>.splide__slide.is-active{border:3px solid #000}.splide__arrows--rtl .splide__arrow--prev{left:auto;right:1em}.splide__arrows--rtl .splide__arrow--prev svg{transform:scaleX(1)}.splide__arrows--rtl .splide__arrow--next{left:1em;right:auto}.splide__arrows--rtl .splide__arrow--next svg{transform:scaleX(-1)}.splide__arrows--ttb .splide__arrow{left:50%;transform:translate(-50%)}.splide__arrows--ttb .splide__arrow--prev{top:1em}.splide__arrows--ttb .splide__arrow--prev svg{transform:rotate(-90deg)}.splide__arrows--ttb .splide__arrow--next{bottom:1em;top:auto}.splide__arrows--ttb .splide__arrow--next svg{transform:rotate(90deg)}.splide__pagination--ttb{bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;left:auto;padding:1em 0;right:.5em;top:0}
\ No newline at end of file
+.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:flex;height:100%;margin:0 !important;padding:0 !important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{align-items:center;display:flex;flex-wrap:wrap;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;flex-shrink:0;list-style-type:none !important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s infinite linear;border:2px solid #999;border-left-color:rgba(0,0,0,0);border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__play{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}@keyframes splide-loading{0%{transform:rotateZ(0)}100%{transform:rotateZ(360deg)}}.splide__track--draggable{-webkit-touch-callout:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0 !important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__arrow{background:#ccc;border:0;cursor:pointer;padding:0;position:absolute;top:50%;transform:translateY(-50%);z-index:1;opacity:.7;align-items:center;border-radius:50%;display:flex;height:2em;justify-content:center;width:2em}.splide__arrow svg{fill:#000;height:1.2em;width:1.2em}.splide__arrow:hover:not(:disabled){opacity:.9}.splide__arrow:disabled{opacity:.3}.splide__arrow:focus-visible{outline:#0bf 3px solid;outline-offset:3px}.splide__arrow--prev{left:1em}.splide__arrow--prev svg{transform:scaleX(-1)}.splide__arrow--next{right:1em}.splide.is-focus-in .splide__arrow:focus{outline:#0bf 3px solid;outline-offset:3px}.splide__pagination{bottom:.5em;left:0;padding:0 1em;position:absolute;right:0;z-index:1}.splide__pagination__page{background:#ccc;border:0;border-radius:50%;display:inline-block;height:8px;margin:3px;padding:0;position:relative;transition:transform .2s linear;width:8px;opacity:.7}.splide__pagination__page.is-active{background:#fff;z-index:1;transform:scale(1.4)}.splide__pagination__page:hover{cursor:pointer;opacity:.9}.splide__pagination__page:focus-visible{outline:#0bf 3px solid;outline-offset:3px}.splide.is-focus-in .splide__pagination__page:focus{outline:#0bf 3px solid;outline-offset:3px}.splide__progress__bar{background:#ccc;height:3px}.splide__slide{-webkit-tap-highlight-color:rgba(0,0,0,0)}.splide__slide:focus{outline:0}@supports(outline-offset: -3px){.splide__slide:focus-visible{outline:#0bf 3px solid;outline-offset:-3px}}@media screen and (-ms-high-contrast: none){.splide__slide:focus-visible{border:#0bf 3px solid}}@supports(outline-offset: -3px){.splide.is-focus-in .splide__slide:focus{outline:#0bf 3px solid;outline-offset:-3px}}@media screen and (-ms-high-contrast: none){.splide.is-focus-in .splide__slide:focus{border:#0bf 3px solid}}@media screen and (-ms-high-contrast: none){.splide.is-focus-in .splide__track>.splide__list>.splide__slide:focus{border-color:#0bf}}.splide__toggle{cursor:pointer}.splide__toggle:focus-visible{outline:#0bf 3px solid;outline-offset:3px}.splide.is-focus-in .splide__toggle:focus{outline:#0bf 3px solid;outline-offset:3px}.splide__track--nav>.splide__list>.splide__slide{border:3px solid rgba(0,0,0,0);cursor:pointer}.splide__track--nav>.splide__list>.splide__slide.is-active{border:3px solid #000}.splide__arrows--rtl .splide__arrow--prev{left:auto;right:1em}.splide__arrows--rtl .splide__arrow--prev svg{transform:scaleX(1)}.splide__arrows--rtl .splide__arrow--next{left:1em;right:auto}.splide__arrows--rtl .splide__arrow--next svg{transform:scaleX(-1)}.splide__arrows--ttb .splide__arrow{left:50%;transform:translate(-50%, 0)}.splide__arrows--ttb .splide__arrow--prev{top:1em}.splide__arrows--ttb .splide__arrow--prev svg{transform:rotateZ(-90deg)}.splide__arrows--ttb .splide__arrow--next{bottom:1em;top:auto}.splide__arrows--ttb .splide__arrow--next svg{transform:rotateZ(90deg)}.splide__pagination--ttb{bottom:0;display:flex;flex-direction:column;left:auto;padding:1em 0;right:.5em;top:0}
\ No newline at end of file
diff --git a/dist/css/themes/splide-default.min.css b/dist/css/themes/splide-default.min.css
index 7e014b47..6fa7c552 100644
--- a/dist/css/themes/splide-default.min.css
+++ b/dist/css/themes/splide-default.min.css
@@ -1 +1 @@
-.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #999;border-left-color:transparent;border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.splide__toggle.is-active .splide__toggle__play,.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}@keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide__track--draggable{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0!important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__arrow{-ms-flex-align:center;align-items:center;background:#ccc;border:0;border-radius:50%;cursor:pointer;display:-ms-flexbox;display:flex;height:2em;-ms-flex-pack:center;justify-content:center;opacity:.7;padding:0;position:absolute;top:50%;transform:translateY(-50%);width:2em;z-index:1}.splide__arrow svg{fill:#000;height:1.2em;width:1.2em}.splide__arrow:hover:not(:disabled){opacity:.9}.splide__arrow:disabled{opacity:.3}.splide__arrow:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide__arrow--prev{left:1em}.splide__arrow--prev svg{transform:scaleX(-1)}.splide__arrow--next{right:1em}.splide.is-focus-in .splide__arrow:focus{outline:3px solid #0bf;outline-offset:3px}.splide__pagination{bottom:.5em;left:0;padding:0 1em;position:absolute;right:0;z-index:1}.splide__pagination__page{background:#ccc;border:0;border-radius:50%;display:inline-block;height:8px;margin:3px;opacity:.7;padding:0;position:relative;transition:transform .2s linear;width:8px}.splide__pagination__page.is-active{background:#fff;transform:scale(1.4);z-index:1}.splide__pagination__page:hover{cursor:pointer;opacity:.9}.splide__pagination__page:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide.is-focus-in .splide__pagination__page:focus{outline:3px solid #0bf;outline-offset:3px}.splide__progress__bar{background:#ccc;height:3px}.splide__slide{-webkit-tap-highlight-color:rgba(0,0,0,0)}.splide__slide:focus{outline:0}@supports(outline-offset:-3px){.splide__slide:focus-visible{outline:3px solid #0bf;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide__slide:focus-visible{border:3px solid #0bf}}@supports(outline-offset:-3px){.splide.is-focus-in .splide__slide:focus{outline:3px solid #0bf;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide.is-focus-in .splide__slide:focus{border:3px solid #0bf}.splide.is-focus-in .splide__track>.splide__list>.splide__slide:focus{border-color:#0bf}}.splide__toggle{cursor:pointer}.splide__toggle:focus-visible{outline:3px solid #0bf;outline-offset:3px}.splide.is-focus-in .splide__toggle:focus{outline:3px solid #0bf;outline-offset:3px}.splide__track--nav>.splide__list>.splide__slide{border:3px solid transparent;cursor:pointer}.splide__track--nav>.splide__list>.splide__slide.is-active{border:3px solid #000}.splide__arrows--rtl .splide__arrow--prev{left:auto;right:1em}.splide__arrows--rtl .splide__arrow--prev svg{transform:scaleX(1)}.splide__arrows--rtl .splide__arrow--next{left:1em;right:auto}.splide__arrows--rtl .splide__arrow--next svg{transform:scaleX(-1)}.splide__arrows--ttb .splide__arrow{left:50%;transform:translate(-50%)}.splide__arrows--ttb .splide__arrow--prev{top:1em}.splide__arrows--ttb .splide__arrow--prev svg{transform:rotate(-90deg)}.splide__arrows--ttb .splide__arrow--next{bottom:1em;top:auto}.splide__arrows--ttb .splide__arrow--next svg{transform:rotate(90deg)}.splide__pagination--ttb{bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;left:auto;padding:1em 0;right:.5em;top:0}
\ No newline at end of file
+.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:flex;height:100%;margin:0 !important;padding:0 !important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{align-items:center;display:flex;flex-wrap:wrap;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;flex-shrink:0;list-style-type:none !important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s infinite linear;border:2px solid #999;border-left-color:rgba(0,0,0,0);border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__play{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}@keyframes splide-loading{0%{transform:rotateZ(0)}100%{transform:rotateZ(360deg)}}.splide__track--draggable{-webkit-touch-callout:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0 !important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__arrow{background:#ccc;border:0;cursor:pointer;padding:0;position:absolute;top:50%;transform:translateY(-50%);z-index:1;opacity:.7;align-items:center;border-radius:50%;display:flex;height:2em;justify-content:center;width:2em}.splide__arrow svg{fill:#000;height:1.2em;width:1.2em}.splide__arrow:hover:not(:disabled){opacity:.9}.splide__arrow:disabled{opacity:.3}.splide__arrow:focus-visible{outline:#0bf 3px solid;outline-offset:3px}.splide__arrow--prev{left:1em}.splide__arrow--prev svg{transform:scaleX(-1)}.splide__arrow--next{right:1em}.splide.is-focus-in .splide__arrow:focus{outline:#0bf 3px solid;outline-offset:3px}.splide__pagination{bottom:.5em;left:0;padding:0 1em;position:absolute;right:0;z-index:1}.splide__pagination__page{background:#ccc;border:0;border-radius:50%;display:inline-block;height:8px;margin:3px;padding:0;position:relative;transition:transform .2s linear;width:8px;opacity:.7}.splide__pagination__page.is-active{background:#fff;z-index:1;transform:scale(1.4)}.splide__pagination__page:hover{cursor:pointer;opacity:.9}.splide__pagination__page:focus-visible{outline:#0bf 3px solid;outline-offset:3px}.splide.is-focus-in .splide__pagination__page:focus{outline:#0bf 3px solid;outline-offset:3px}.splide__progress__bar{background:#ccc;height:3px}.splide__slide{-webkit-tap-highlight-color:rgba(0,0,0,0)}.splide__slide:focus{outline:0}@supports(outline-offset: -3px){.splide__slide:focus-visible{outline:#0bf 3px solid;outline-offset:-3px}}@media screen and (-ms-high-contrast: none){.splide__slide:focus-visible{border:#0bf 3px solid}}@supports(outline-offset: -3px){.splide.is-focus-in .splide__slide:focus{outline:#0bf 3px solid;outline-offset:-3px}}@media screen and (-ms-high-contrast: none){.splide.is-focus-in .splide__slide:focus{border:#0bf 3px solid}}@media screen and (-ms-high-contrast: none){.splide.is-focus-in .splide__track>.splide__list>.splide__slide:focus{border-color:#0bf}}.splide__toggle{cursor:pointer}.splide__toggle:focus-visible{outline:#0bf 3px solid;outline-offset:3px}.splide.is-focus-in .splide__toggle:focus{outline:#0bf 3px solid;outline-offset:3px}.splide__track--nav>.splide__list>.splide__slide{border:3px solid rgba(0,0,0,0);cursor:pointer}.splide__track--nav>.splide__list>.splide__slide.is-active{border:3px solid #000}.splide__arrows--rtl .splide__arrow--prev{left:auto;right:1em}.splide__arrows--rtl .splide__arrow--prev svg{transform:scaleX(1)}.splide__arrows--rtl .splide__arrow--next{left:1em;right:auto}.splide__arrows--rtl .splide__arrow--next svg{transform:scaleX(-1)}.splide__arrows--ttb .splide__arrow{left:50%;transform:translate(-50%, 0)}.splide__arrows--ttb .splide__arrow--prev{top:1em}.splide__arrows--ttb .splide__arrow--prev svg{transform:rotateZ(-90deg)}.splide__arrows--ttb .splide__arrow--next{bottom:1em;top:auto}.splide__arrows--ttb .splide__arrow--next svg{transform:rotateZ(90deg)}.splide__pagination--ttb{bottom:0;display:flex;flex-direction:column;left:auto;padding:1em 0;right:.5em;top:0}
\ No newline at end of file
diff --git a/dist/css/themes/splide-sea-green.min.css b/dist/css/themes/splide-sea-green.min.css
index 5d29b64b..a77db429 100644
--- a/dist/css/themes/splide-sea-green.min.css
+++ b/dist/css/themes/splide-sea-green.min.css
@@ -1 +1 @@
-.splide__track--nav>.splide__list>.splide__slide{border:3px solid transparent;border-radius:4px;cursor:pointer;opacity:.7}.splide__track--nav>.splide__list>.splide__slide.is-active{border:3px solid #20b2aa;opacity:1}.splide__arrows--ttb .splide__arrow{left:50%;transform:translate(-50%)}.splide__arrows--ttb .splide__arrow--prev{top:1em}.splide__arrows--ttb .splide__arrow--prev svg{transform:rotate(-90deg)}.splide__arrows--ttb .splide__arrow--next{bottom:1em;top:auto}.splide__arrows--ttb .splide__arrow--next svg{transform:rotate(90deg)}.splide__pagination--ttb{bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;left:auto;padding:1em 0;right:1em;top:0}.splide__pagination--ttb .splide__pagination__page{height:20px;width:5px}.splide__arrow{-ms-flex-align:center;align-items:center;background:transparent;border:0;border-radius:0;cursor:pointer;display:-ms-flexbox;display:flex;height:2.5em;-ms-flex-pack:center;justify-content:center;padding:0;position:absolute;top:50%;transform:translateY(-50%);width:2.5em;z-index:1}.splide__arrow svg{fill:#20b2aa;height:2.5em;transition:fill .2s linear;width:2.5em}.splide__arrow:hover:not(:disabled) svg{fill:#57e1d9}.splide__arrow:disabled{opacity:.3}.splide__arrow:focus-visible{outline:3px solid #20b2aa;outline-offset:3px}.splide__arrow--prev{left:1em}.splide__arrow--prev svg{transform:scaleX(-1)}.splide__arrow--next{right:1em}.splide.is-focus-in .splide__arrow:focus{outline:3px solid #20b2aa;outline-offset:3px}.splide__pagination{bottom:1em;left:0;padding:0 1em;position:absolute;right:0;z-index:1}.splide__pagination__page{background:#ccc;border:0;border-radius:2.5px;display:inline-block;height:5px;margin:3px;padding:0;position:relative;transition:background-color .2s linear;width:20px}.splide__pagination__page.is-active{background:#20b2aa;z-index:1}.splide__pagination__page:hover{background:#57e1d9;cursor:pointer;opacity:.9}.splide__pagination__page:focus-visible{outline:3px solid #20b2aa;outline-offset:3px}.splide.is-focus-in .splide__pagination__page:focus{outline:3px solid #20b2aa;outline-offset:3px}.splide__slide{-webkit-tap-highlight-color:rgba(0,0,0,0);border-radius:4px}.splide__slide:focus{outline:0}@supports(outline-offset:-3px){.splide__slide:focus-visible{outline:3px solid #20b2aa;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide__slide:focus-visible{border:3px solid #20b2aa}}@supports(outline-offset:-3px){.splide.is-focus-in .splide__slide:focus{outline:3px solid #20b2aa;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide.is-focus-in .splide__slide:focus{border:3px solid #20b2aa}.splide.is-focus-in .splide__track>.splide__list>.splide__slide:focus{border-color:#20b2aa}}.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #20b2aa;border-left-color:transparent;border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.splide__toggle.is-active .splide__toggle__play,.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}@keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide__track--draggable{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0!important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__progress__bar{background:#ccc;height:3px}.splide__toggle{cursor:pointer}.splide__toggle:focus-visible{outline:3px solid #20b2aa;outline-offset:3px}.splide.is-focus-in .splide__toggle:focus{outline:3px solid #20b2aa;outline-offset:3px}.splide__arrows--rtl .splide__arrow--prev{left:auto;right:1em}.splide__arrows--rtl .splide__arrow--prev svg{transform:scaleX(1)}.splide__arrows--rtl .splide__arrow--next{left:1em;right:auto}.splide__arrows--rtl .splide__arrow--next svg{transform:scaleX(-1)}.splide__slider>.splide__arrows .splide__arrow--prev{left:-2.5em}.splide__slider>.splide__arrows .splide__arrow--next{right:-2.5em}.splide{padding:3em}
\ No newline at end of file
+.splide__track--nav>.splide__list>.splide__slide{border:3px solid rgba(0,0,0,0);cursor:pointer;opacity:.7;border-radius:4px}.splide__track--nav>.splide__list>.splide__slide.is-active{border:3px solid #20b2aa;opacity:1}.splide__arrows--ttb .splide__arrow{left:50%;transform:translate(-50%, 0)}.splide__arrows--ttb .splide__arrow--prev{top:1em}.splide__arrows--ttb .splide__arrow--prev svg{transform:rotateZ(-90deg)}.splide__arrows--ttb .splide__arrow--next{bottom:1em;top:auto}.splide__arrows--ttb .splide__arrow--next svg{transform:rotateZ(90deg)}.splide__pagination--ttb{bottom:0;display:flex;flex-direction:column;left:auto;padding:1em 0;right:1em;top:0}.splide__pagination--ttb .splide__pagination__page{width:5px;height:20px}.splide__arrow{background:rgba(0,0,0,0);border:0;cursor:pointer;padding:0;position:absolute;top:50%;transform:translateY(-50%);z-index:1;align-items:center;border-radius:0;display:flex;height:2.5em;justify-content:center;width:2.5em}.splide__arrow svg{fill:#20b2aa;height:2.5em;width:2.5em;transition:fill .2s linear}.splide__arrow:hover:not(:disabled) svg{fill:#57e1d9}.splide__arrow:disabled{opacity:.3}.splide__arrow:focus-visible{outline:#20b2aa 3px solid;outline-offset:3px}.splide__arrow--prev{left:1em}.splide__arrow--prev svg{transform:scaleX(-1)}.splide__arrow--next{right:1em}.splide.is-focus-in .splide__arrow:focus{outline:#20b2aa 3px solid;outline-offset:3px}.splide__pagination{bottom:1em;left:0;padding:0 1em;position:absolute;right:0;z-index:1}.splide__pagination__page{background:#ccc;border:0;border-radius:2.5px;display:inline-block;height:5px;margin:3px;padding:0;position:relative;transition:background-color .2s linear;width:20px}.splide__pagination__page.is-active{background:#20b2aa;z-index:1}.splide__pagination__page:hover{cursor:pointer;opacity:.9;background:#57e1d9}.splide__pagination__page:focus-visible{outline:#20b2aa 3px solid;outline-offset:3px}.splide.is-focus-in .splide__pagination__page:focus{outline:#20b2aa 3px solid;outline-offset:3px}.splide__slide{-webkit-tap-highlight-color:rgba(0,0,0,0);border-radius:4px}.splide__slide:focus{outline:0}@supports(outline-offset: -3px){.splide__slide:focus-visible{outline:#20b2aa 3px solid;outline-offset:-3px}}@media screen and (-ms-high-contrast: none){.splide__slide:focus-visible{border:#20b2aa 3px solid}}@supports(outline-offset: -3px){.splide.is-focus-in .splide__slide:focus{outline:#20b2aa 3px solid;outline-offset:-3px}}@media screen and (-ms-high-contrast: none){.splide.is-focus-in .splide__slide:focus{border:#20b2aa 3px solid}}@media screen and (-ms-high-contrast: none){.splide.is-focus-in .splide__track>.splide__list>.splide__slide:focus{border-color:#20b2aa}}.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:flex;height:100%;margin:0 !important;padding:0 !important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{align-items:center;display:flex;flex-wrap:wrap;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;flex-shrink:0;list-style-type:none !important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s infinite linear;border:2px solid #20b2aa;border-left-color:rgba(0,0,0,0);border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__play{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}@keyframes splide-loading{0%{transform:rotateZ(0)}100%{transform:rotateZ(360deg)}}.splide__track--draggable{-webkit-touch-callout:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0 !important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__progress__bar{background:#ccc;height:3px}.splide__toggle{cursor:pointer}.splide__toggle:focus-visible{outline:#20b2aa 3px solid;outline-offset:3px}.splide.is-focus-in .splide__toggle:focus{outline:#20b2aa 3px solid;outline-offset:3px}.splide__arrows--rtl .splide__arrow--prev{left:auto;right:1em}.splide__arrows--rtl .splide__arrow--prev svg{transform:scaleX(1)}.splide__arrows--rtl .splide__arrow--next{left:1em;right:auto}.splide__arrows--rtl .splide__arrow--next svg{transform:scaleX(-1)}.splide__slider>.splide__arrows .splide__arrow--prev{left:-2.5em}.splide__slider>.splide__arrows .splide__arrow--next{right:-2.5em}.splide{padding:3em}
\ No newline at end of file
diff --git a/dist/css/themes/splide-skyblue.min.css b/dist/css/themes/splide-skyblue.min.css
index f3a4e75f..b1b9750e 100644
--- a/dist/css/themes/splide-skyblue.min.css
+++ b/dist/css/themes/splide-skyblue.min.css
@@ -1 +1 @@
-.splide__track--nav>.splide__list>.splide__slide{border:3px solid transparent;cursor:pointer;opacity:.7}.splide__track--nav>.splide__list>.splide__slide.is-active{border:3px solid #00bfff;opacity:1}.splide__arrow{-ms-flex-align:center;align-items:center;background:transparent;border:0;border-radius:0;cursor:pointer;display:-ms-flexbox;display:flex;height:2.5em;-ms-flex-pack:center;justify-content:center;padding:0;position:absolute;top:50%;transform:translateY(-50%);width:2.5em;z-index:1}.splide__arrow svg{fill:#00bfff;height:2.5em;transition:fill .2s linear;width:2.5em}.splide__arrow:hover:not(:disabled) svg{fill:#66d9ff}.splide__arrow:disabled{opacity:.3}.splide__arrow:focus-visible{outline:3px solid #00bfff;outline-offset:3px}.splide__arrow--prev{left:1em}.splide__arrow--prev svg{transform:scaleX(-1)}.splide__arrow--next{right:1em}.splide.is-focus-in .splide__arrow:focus{outline:3px solid #00bfff;outline-offset:3px}.splide__pagination{bottom:.5em;left:0;padding:0 1em;position:absolute;right:0;z-index:1}.splide__pagination__page{background:#ccc;border:0;border-radius:50%;display:inline-block;height:10px;margin:3px;padding:0;position:relative;transition:background-color .2s linear,transform .2s linear;width:10px}.splide__pagination__page.is-active{background:#00bfff;transform:scale(1.4);z-index:1}.splide__pagination__page:hover{background:#66d9ff;cursor:pointer;opacity:.9}.splide__pagination__page:focus-visible{outline:3px solid #00bfff;outline-offset:3px}.splide.is-focus-in .splide__pagination__page:focus{outline:3px solid #00bfff;outline-offset:3px}.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0;list-style-type:none!important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #00bfff;border-left-color:transparent;border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.splide__toggle.is-active .splide__toggle__play,.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}@keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide__track--draggable{-webkit-touch-callout:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0!important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__progress__bar{background:#ccc;height:3px}.splide__slide{-webkit-tap-highlight-color:rgba(0,0,0,0)}.splide__slide:focus{outline:0}@supports(outline-offset:-3px){.splide__slide:focus-visible{outline:3px solid #00bfff;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide__slide:focus-visible{border:3px solid #00bfff}}@supports(outline-offset:-3px){.splide.is-focus-in .splide__slide:focus{outline:3px solid #00bfff;outline-offset:-3px}}@media screen and (-ms-high-contrast:none){.splide.is-focus-in .splide__slide:focus{border:3px solid #00bfff}.splide.is-focus-in .splide__track>.splide__list>.splide__slide:focus{border-color:#00bfff}}.splide__toggle{cursor:pointer}.splide__toggle:focus-visible{outline:3px solid #00bfff;outline-offset:3px}.splide.is-focus-in .splide__toggle:focus{outline:3px solid #00bfff;outline-offset:3px}.splide__arrows--rtl .splide__arrow--prev{left:auto;right:1em}.splide__arrows--rtl .splide__arrow--prev svg{transform:scaleX(1)}.splide__arrows--rtl .splide__arrow--next{left:1em;right:auto}.splide__arrows--rtl .splide__arrow--next svg{transform:scaleX(-1)}.splide__arrows--ttb .splide__arrow{left:50%;transform:translate(-50%)}.splide__arrows--ttb .splide__arrow--prev{top:1em}.splide__arrows--ttb .splide__arrow--prev svg{transform:rotate(-90deg)}.splide__arrows--ttb .splide__arrow--next{bottom:1em;top:auto}.splide__arrows--ttb .splide__arrow--next svg{transform:rotate(90deg)}.splide__pagination--ttb{bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;left:auto;padding:1em 0;right:.5em;top:0}
\ No newline at end of file
+.splide__track--nav>.splide__list>.splide__slide{border:3px solid rgba(0,0,0,0);cursor:pointer;opacity:.7}.splide__track--nav>.splide__list>.splide__slide.is-active{border:3px solid #00bfff;opacity:1}.splide__arrow{background:rgba(0,0,0,0);border:0;cursor:pointer;padding:0;position:absolute;top:50%;transform:translateY(-50%);z-index:1;align-items:center;border-radius:0;display:flex;height:2.5em;justify-content:center;width:2.5em}.splide__arrow svg{fill:#00bfff;height:2.5em;width:2.5em;transition:fill .2s linear}.splide__arrow:hover:not(:disabled) svg{fill:#66d9ff}.splide__arrow:disabled{opacity:.3}.splide__arrow:focus-visible{outline:#00bfff 3px solid;outline-offset:3px}.splide__arrow--prev{left:1em}.splide__arrow--prev svg{transform:scaleX(-1)}.splide__arrow--next{right:1em}.splide.is-focus-in .splide__arrow:focus{outline:#00bfff 3px solid;outline-offset:3px}.splide__pagination{bottom:.5em;left:0;padding:0 1em;position:absolute;right:0;z-index:1}.splide__pagination__page{background:#ccc;border:0;border-radius:50%;display:inline-block;height:10px;margin:3px;padding:0;position:relative;transition:background-color .2s linear,transform .2s linear;width:10px}.splide__pagination__page.is-active{background:#00bfff;z-index:1;transform:scale(1.4)}.splide__pagination__page:hover{cursor:pointer;opacity:.9;background:#66d9ff}.splide__pagination__page:focus-visible{outline:#00bfff 3px solid;outline-offset:3px}.splide.is-focus-in .splide__pagination__page:focus{outline:#00bfff 3px solid;outline-offset:3px}.splide__container{box-sizing:border-box;position:relative}.splide__list{backface-visibility:hidden;display:flex;height:100%;margin:0 !important;padding:0 !important}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{align-items:center;display:flex;flex-wrap:wrap;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide:not(.is-overflow) .splide__pagination{display:none}.splide__progress__bar{width:0}.splide{position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{backface-visibility:hidden;box-sizing:border-box;flex-shrink:0;list-style-type:none !important;margin:0;position:relative}.splide__slide img{vertical-align:bottom}.splide__spinner{animation:splide-loading 1s infinite linear;border:2px solid #00bfff;border-left-color:rgba(0,0,0,0);border-radius:50%;bottom:0;contain:strict;display:inline-block;height:20px;left:0;margin:auto;position:absolute;right:0;top:0;width:20px}.splide__sr{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.splide__toggle__pause{display:none}.splide__toggle.is-active .splide__toggle__play{display:none}.splide__toggle.is-active .splide__toggle__pause{display:inline}.splide__track{overflow:hidden;position:relative;z-index:0}@keyframes splide-loading{0%{transform:rotateZ(0)}100%{transform:rotateZ(360deg)}}.splide__track--draggable{-webkit-touch-callout:none;user-select:none}.splide__track--fade>.splide__list>.splide__slide{margin:0 !important;opacity:0;z-index:0}.splide__track--fade>.splide__list>.splide__slide.is-active{opacity:1;z-index:1}.splide--rtl{direction:rtl}.splide__track--ttb>.splide__list{display:block}.splide__progress__bar{background:#ccc;height:3px}.splide__slide{-webkit-tap-highlight-color:rgba(0,0,0,0)}.splide__slide:focus{outline:0}@supports(outline-offset: -3px){.splide__slide:focus-visible{outline:#00bfff 3px solid;outline-offset:-3px}}@media screen and (-ms-high-contrast: none){.splide__slide:focus-visible{border:#00bfff 3px solid}}@supports(outline-offset: -3px){.splide.is-focus-in .splide__slide:focus{outline:#00bfff 3px solid;outline-offset:-3px}}@media screen and (-ms-high-contrast: none){.splide.is-focus-in .splide__slide:focus{border:#00bfff 3px solid}}@media screen and (-ms-high-contrast: none){.splide.is-focus-in .splide__track>.splide__list>.splide__slide:focus{border-color:#00bfff}}.splide__toggle{cursor:pointer}.splide__toggle:focus-visible{outline:#00bfff 3px solid;outline-offset:3px}.splide.is-focus-in .splide__toggle:focus{outline:#00bfff 3px solid;outline-offset:3px}.splide__arrows--rtl .splide__arrow--prev{left:auto;right:1em}.splide__arrows--rtl .splide__arrow--prev svg{transform:scaleX(1)}.splide__arrows--rtl .splide__arrow--next{left:1em;right:auto}.splide__arrows--rtl .splide__arrow--next svg{transform:scaleX(-1)}.splide__arrows--ttb .splide__arrow{left:50%;transform:translate(-50%, 0)}.splide__arrows--ttb .splide__arrow--prev{top:1em}.splide__arrows--ttb .splide__arrow--prev svg{transform:rotateZ(-90deg)}.splide__arrows--ttb .splide__arrow--next{bottom:1em;top:auto}.splide__arrows--ttb .splide__arrow--next svg{transform:rotateZ(90deg)}.splide__pagination--ttb{bottom:0;display:flex;flex-direction:column;left:auto;padding:1em 0;right:.5em;top:0}
\ No newline at end of file
diff --git a/dist/js/splide-renderer.min.js b/dist/js/splide-renderer.min.js
deleted file mode 100644
index acd581f5..00000000
--- a/dist/js/splide-renderer.min.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*!
- * Splide.js
- * Version : 4.1.3
- * License : MIT
- * Copyright: 2022 Naotoshi Fujita
- */
-var t,n;t=this,n=function(){"use strict";var s="rtl",u="ttb",o={width:["height"],left:["top","right"],right:["bottom","left"],x:["y"],X:["Y"],Y:["X"],ArrowLeft:["ArrowUp","ArrowRight"],ArrowRight:["ArrowDown","ArrowLeft"]};function e(t,n,e){return{resolve:function(t,n,i){var r=(i=i||e.direction)!==s||n?i===u?0:-1:1;return o[t]&&o[t][r]||t.replace(/width|left|right/i,function(t,n){t=o[t.toLowerCase()][r]||t;return 0 img","display",t.cover?"none":"inline",n)})},n.buildTranslate=function(t){var n=this.Direction,i=n.resolve,n=n.orient,r=[];return r.push(this.cssOffsetClones(t)),r.push(this.cssOffsetGaps(t)),this.isCenter(t)&&(r.push(this.buildCssValue(n(-50),"%")),r.push.apply(r,this.cssOffsetCenter(t))),r.filter(Boolean).map(function(t){return"translate"+i("X")+"("+t+")"}).join(" ")},n.cssOffsetClones=function(t){var n,i=this.Direction,r=i.resolve,i=i.orient,e=this.getCloneCount();return this.isFixedWidth(t)?(n=(r=this.parseCssValue(t[r("fixedWidth")])).value,r=r.unit,this.buildCssValue(i(n)*e,r)):i(100*e/t.perPage)+"%"},n.cssOffsetCenter=function(t){var n,i,r=this.Direction,e=r.resolve,r=r.orient;return this.isFixedWidth(t)?(n=(e=this.parseCssValue(t[e("fixedWidth")])).value,e=e.unit,[this.buildCssValue(r(n/2),e)]):(n=t.perPage,e=t.gap,(t=[]).push(r(50/n)+"%"),e&&(i=(e=this.parseCssValue(e)).value,e=e.unit,t.push(this.buildCssValue(r((i/n-i)/2),e))),t)},n.cssOffsetGaps=function(t){var n,i,r,e=this.getCloneCount();return e&&t.gap?(n=this.Direction.orient,i=(r=this.parseCssValue(t.gap)).value,r=r.unit,this.isFixedWidth(t)?this.buildCssValue(n(i*e),r):(t=t.perPage,this.buildCssValue(n(e/t*i),r))):""},n.resolve=function(t){return T(this.Direction.resolve(t))},n.cssPadding=function(t,n){t=t.padding,n=this.Direction.resolve(n?"right":"left",!0);return t&&G(t[n]||(b(t)?0:t))||"0px"},n.cssTrackHeight=function(t){var n="";return this.isVertical()&&(O(n=this.cssHeight(t),'"height" is missing.'),n="calc("+n+" - "+this.cssPadding(t,!1)+" - "+this.cssPadding(t,!0)+")"),n},n.cssHeight=function(t){return G(t.height)},n.cssSlideWidth=function(t){return t.autoWidth?"":G(t.fixedWidth)||(this.isVertical()?"":this.cssSlideSize(t))},n.cssSlideHeight=function(t){return G(t.fixedHeight)||(this.isVertical()?t.autoHeight?"":this.cssSlideSize(t):this.cssHeight(t))},n.cssSlideSize=function(t){var n=G(t.gap);return"calc((100%"+(n&&" + "+n)+")/"+(t.perPage||1)+(n&&" - "+n)+")"},n.cssAspectRatio=function(t){t=t.heightRatio;return t?""+1/t:""},n.buildCssValue=function(t,n){return""+t+n},n.parseCssValue=function(t){return y(t)?{value:parseFloat(t)||0,unit:t.replace(/\d*(\.\d*)?/,"")||"px"}:{value:t,unit:"px"}},n.parseBreakpoints=function(){var i=this,t=this.options.breakpoints;this.breakpoints.push(["default",this.options]),t&&P(t,function(t,n){i.breakpoints.push([n,X(X({},i.options),t)])})},n.isFixedWidth=function(t){return!!t[this.Direction.resolve("fixedWidth")]},n.isLoop=function(){return"loop"===this.options.type},n.isCenter=function(t){if("center"===t.focus){if(this.isLoop())return!0;if("slide"===this.options.type)return!this.options.trimSpace}return!1},n.isVertical=function(){return this.options.direction===u},n.buildClasses=function(){var t=this.options;return[r,r+"--"+t.type,r+"--"+t.direction,t.drag&&r+"--draggable",t.isNavigation&&r+"--nav",d,!this.config.hidden&&"is-rendered"].filter(Boolean).join(" ")},n.buildAttrs=function(t){var i="";return P(t,function(t,n){i+=t?" "+T(n)+'="'+t+'"':""}),i.trim()},n.buildStyles=function(t){var i="";return P(t,function(t,n){i+=" "+T(n)+":"+t+";"}),i.trim()},n.renderSlides=function(){var n=this,i=this.config.slideTag;return this.slides.map(function(t){return"<"+i+" "+n.buildAttrs(t.attrs)+">"+(t.html||"")+""+i+">"}).join("")},n.cover=function(t){var n=t.styles,t=t.html,t=void 0===t?"":t;this.options.cover&&!this.options.lazyLoad&&(t=t.match(//))&&t[2]&&(n.background="center/cover no-repeat url('"+t[2]+"')")},n.generateClones=function(r){for(var e=this.options.classes,s=this.getCloneCount(),t=r.slice();t.length')+this.renderArrow(!0)+this.renderArrow(!1)+" "},n.renderArrow=function(t){var n=this.options,i=n.classes,n=n.i18n,i={class:i.arrow+" "+(t?i.prev:i.next),type:"button",ariaLabel:t?n.prev:n.next};return"