@brytdesigns/web-component-keen-slider-auto-switch 1.0.8 → 1.0.10
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/dist/esm/index.js +131 -0
- package/dist/esm/index.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { customShadowlessElement, correctElementType } from '@brytdesigns/web-component-utils';
|
|
2
|
+
import { createMemo, createSignal, createEffect, on, onCleanup, batch } from 'solid-js';
|
|
3
|
+
import { addPlugin } from '@brytdesigns/web-component-keen-slider';
|
|
4
|
+
|
|
5
|
+
// src/index.ts
|
|
6
|
+
var KeenSliderAutoSwitch = (props, { element }) => {
|
|
7
|
+
if (!props.target)
|
|
8
|
+
return console.warn(
|
|
9
|
+
"keen-slider-auto-switch: Needs a proper target in order to properly extend a keen slider."
|
|
10
|
+
);
|
|
11
|
+
const target = createMemo(() => {
|
|
12
|
+
let targetEl = element;
|
|
13
|
+
if (props.target) targetEl = document.querySelector(props.target);
|
|
14
|
+
if (!targetEl)
|
|
15
|
+
return console.warn(
|
|
16
|
+
"keen-slider-auto-switch: Could not find the target element. Make sure it exists and is a keen-slider element."
|
|
17
|
+
);
|
|
18
|
+
if (targetEl.tagName !== "KEEN-SLIDER")
|
|
19
|
+
targetEl = targetEl.querySelector("keen-slider");
|
|
20
|
+
if (!targetEl)
|
|
21
|
+
return console.warn(
|
|
22
|
+
"keen-slider-auto-switch: Could not find the target element. Make sure it exists and is a keen-slider element."
|
|
23
|
+
);
|
|
24
|
+
return targetEl;
|
|
25
|
+
});
|
|
26
|
+
const plugin = createMemo(() => {
|
|
27
|
+
const duration = props.duration || 2e3;
|
|
28
|
+
const [_, setTimeoutVal] = createSignal(null);
|
|
29
|
+
const [sliderRef, setSliderRef] = createSignal(
|
|
30
|
+
null
|
|
31
|
+
);
|
|
32
|
+
const [isPaused, setIsPaused] = createSignal(false);
|
|
33
|
+
function clearCurrentTimeout() {
|
|
34
|
+
batch(() => {
|
|
35
|
+
setIsPaused(true);
|
|
36
|
+
setTimeoutVal((val) => {
|
|
37
|
+
if (val) clearTimeout(val);
|
|
38
|
+
return null;
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function startNextTimeout(cb) {
|
|
43
|
+
batch(() => {
|
|
44
|
+
setIsPaused(false);
|
|
45
|
+
setTimeoutVal((val) => {
|
|
46
|
+
if (val) clearTimeout(val);
|
|
47
|
+
return setTimeout(cb, duration);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
createEffect(
|
|
52
|
+
on(
|
|
53
|
+
() => ({ isPaused: isPaused(), slider: sliderRef() }),
|
|
54
|
+
({ isPaused: isPaused2, slider }) => {
|
|
55
|
+
if (!slider) return;
|
|
56
|
+
slider.container.dispatchEvent(
|
|
57
|
+
new CustomEvent("autoswitch:update", {
|
|
58
|
+
bubbles: true,
|
|
59
|
+
detail: { isPaused: isPaused2 }
|
|
60
|
+
})
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
);
|
|
65
|
+
createEffect(
|
|
66
|
+
on(sliderRef, (slider) => {
|
|
67
|
+
if (!slider) return;
|
|
68
|
+
function nextTimeout() {
|
|
69
|
+
if (!slider) return;
|
|
70
|
+
if (slider.options?.disabled) return;
|
|
71
|
+
return startNextTimeout(() => {
|
|
72
|
+
if (slider.slides.length <= 1) return;
|
|
73
|
+
slider.next();
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
function handleMouseEnter() {
|
|
77
|
+
clearCurrentTimeout();
|
|
78
|
+
}
|
|
79
|
+
function handleMouseLeave() {
|
|
80
|
+
nextTimeout();
|
|
81
|
+
}
|
|
82
|
+
slider.pauseAutoplay = clearCurrentTimeout;
|
|
83
|
+
slider.startAutoplay = nextTimeout;
|
|
84
|
+
slider.container.addEventListener("mouseenter", clearCurrentTimeout);
|
|
85
|
+
slider.container.addEventListener("mouseleave", nextTimeout);
|
|
86
|
+
slider.on("dragStarted", clearCurrentTimeout);
|
|
87
|
+
slider.on("slideChanged", clearCurrentTimeout);
|
|
88
|
+
slider.on("animationEnded", nextTimeout);
|
|
89
|
+
slider.on("updated", nextTimeout);
|
|
90
|
+
nextTimeout();
|
|
91
|
+
return onCleanup(() => {
|
|
92
|
+
slider.container.removeEventListener("mouseenter", handleMouseEnter);
|
|
93
|
+
slider.container.removeEventListener("mouseleave", handleMouseLeave);
|
|
94
|
+
slider.on("dragStarted", clearCurrentTimeout, true);
|
|
95
|
+
slider.on("slideChanged", clearCurrentTimeout, true);
|
|
96
|
+
slider.on("animationEnded", nextTimeout, true);
|
|
97
|
+
slider.on("updated", nextTimeout, true);
|
|
98
|
+
});
|
|
99
|
+
})
|
|
100
|
+
);
|
|
101
|
+
return function(slider) {
|
|
102
|
+
setSliderRef(slider);
|
|
103
|
+
};
|
|
104
|
+
});
|
|
105
|
+
createEffect(() => {
|
|
106
|
+
const t = target();
|
|
107
|
+
if (!t) return;
|
|
108
|
+
const p = plugin();
|
|
109
|
+
const controller = new AbortController();
|
|
110
|
+
addPlugin({
|
|
111
|
+
target: t,
|
|
112
|
+
plugin: p,
|
|
113
|
+
controller
|
|
114
|
+
});
|
|
115
|
+
return onCleanup(() => {
|
|
116
|
+
controller.abort();
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
// src/index.ts
|
|
122
|
+
customShadowlessElement(
|
|
123
|
+
"keen-slider-navigation-dots",
|
|
124
|
+
{
|
|
125
|
+
target: "",
|
|
126
|
+
duration: 2e3
|
|
127
|
+
},
|
|
128
|
+
correctElementType(KeenSliderAutoSwitch)
|
|
129
|
+
);
|
|
130
|
+
//# sourceMappingURL=index.js.map
|
|
131
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/keen-slider-auto-switch.ts","../../src/index.ts"],"names":["isPaused"],"mappings":"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","file":"index.js","sourcesContent":["import type { CorrectComponentType } from \"@brytdesigns/web-component-utils\";\n\nimport {\n createEffect,\n createSignal,\n createMemo,\n on,\n onCleanup,\n batch,\n} from \"solid-js\";\nimport {\n addPlugin,\n type KeenSliderInstance,\n} from \"@brytdesigns/web-component-keen-slider\";\n\ntype KeenSliderAutoSwitchProps = {\n target: string;\n duration: number;\n};\n\nexport const KeenSliderAutoSwitch: CorrectComponentType<\n KeenSliderAutoSwitchProps\n> = (props, { element }) => {\n if (!props.target)\n return console.warn(\n \"keen-slider-auto-switch: Needs a proper target in order to properly extend a keen slider.\",\n );\n\n const target = createMemo(() => {\n let targetEl: HTMLElement | null = element;\n if (props.target) targetEl = document.querySelector(props.target);\n if (!targetEl)\n return console.warn(\n \"keen-slider-auto-switch: Could not find the target element. Make sure it exists and is a keen-slider element.\",\n );\n if (targetEl.tagName !== \"KEEN-SLIDER\")\n targetEl = targetEl.querySelector(\"keen-slider\");\n if (!targetEl)\n return console.warn(\n \"keen-slider-auto-switch: Could not find the target element. Make sure it exists and is a keen-slider element.\",\n );\n return targetEl;\n });\n\n const plugin = createMemo(() => {\n const duration = props.duration || 2000;\n\n const [_, setTimeoutVal] = createSignal<number | null>(null);\n const [sliderRef, setSliderRef] = createSignal<KeenSliderInstance | null>(\n null,\n );\n const [isPaused, setIsPaused] = createSignal(false);\n\n function clearCurrentTimeout() {\n batch(() => {\n setIsPaused(true);\n setTimeoutVal((val) => {\n if (val) clearTimeout(val);\n return null;\n });\n });\n }\n\n function startNextTimeout(cb: any) {\n batch(() => {\n setIsPaused(false);\n setTimeoutVal((val) => {\n if (val) clearTimeout(val);\n return setTimeout(cb, duration) as any as number;\n });\n });\n }\n\n createEffect(\n on(\n () => ({ isPaused: isPaused(), slider: sliderRef() }),\n ({ isPaused, slider }) => {\n if (!slider) return;\n slider.container.dispatchEvent(\n new CustomEvent(\"autoswitch:update\", {\n bubbles: true,\n detail: { isPaused },\n }),\n );\n },\n ),\n );\n\n createEffect(\n on(sliderRef, (slider) => {\n if (!slider) return;\n\n function nextTimeout() {\n if (!slider) return;\n if (slider.options?.disabled) return;\n return startNextTimeout(() => {\n if (slider.slides.length <= 1) return;\n slider.next();\n });\n }\n\n function handleMouseEnter() {\n clearCurrentTimeout();\n }\n\n function handleMouseLeave() {\n nextTimeout();\n }\n\n (slider as any).pauseAutoplay = clearCurrentTimeout;\n (slider as any).startAutoplay = nextTimeout;\n\n slider.container.addEventListener(\"mouseenter\", clearCurrentTimeout);\n slider.container.addEventListener(\"mouseleave\", nextTimeout);\n\n slider.on(\"dragStarted\", clearCurrentTimeout);\n slider.on(\"slideChanged\", clearCurrentTimeout);\n slider.on(\"animationEnded\", nextTimeout);\n slider.on(\"updated\", nextTimeout);\n\n nextTimeout();\n\n return onCleanup(() => {\n slider.container.removeEventListener(\"mouseenter\", handleMouseEnter);\n slider.container.removeEventListener(\"mouseleave\", handleMouseLeave);\n\n slider.on(\"dragStarted\", clearCurrentTimeout, true);\n slider.on(\"slideChanged\", clearCurrentTimeout, true);\n slider.on(\"animationEnded\", nextTimeout, true);\n slider.on(\"updated\", nextTimeout, true);\n });\n }),\n );\n\n return function(slider: KeenSliderInstance | null) {\n setSliderRef(slider);\n };\n });\n\n createEffect(() => {\n const t = target();\n\n if (!t) return;\n\n const p = plugin();\n const controller = new AbortController();\n\n addPlugin({\n target: t,\n plugin: p,\n controller,\n });\n\n return onCleanup(() => {\n controller.abort();\n });\n });\n};\n","import {\n customShadowlessElement,\n correctElementType,\n} from \"@brytdesigns/web-component-utils\";\nimport { KeenSliderAutoSwitch } from \"./components/index.js\";\n\ncustomShadowlessElement(\n \"keen-slider-navigation-dots\",\n {\n target: \"\",\n duration: 2000,\n },\n correctElementType(KeenSliderAutoSwitch)\n);\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brytdesigns/web-component-keen-slider-auto-switch",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10",
|
|
4
4
|
"description": "Keen slider auto switch plugin web component",
|
|
5
5
|
"main": "./dist/main/index.js",
|
|
6
6
|
"module": "./dist/main/index.js",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"component-register": "^0.8.7",
|
|
23
23
|
"solid-element": "^1.9.1",
|
|
24
24
|
"solid-js": "^1.9.7",
|
|
25
|
-
"@brytdesigns/web-component-keen-slider": "1.0.
|
|
26
|
-
"@brytdesigns/web-component-utils": "0.1.
|
|
25
|
+
"@brytdesigns/web-component-keen-slider": "1.0.13",
|
|
26
|
+
"@brytdesigns/web-component-utils": "0.1.14"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"dts-bundle-generator": "^9.5.1",
|