@studiometa/ui 1.0.0-beta.1 → 1.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AnchorScrollTo/AnchorScrollTo.d.ts +2 -2
- package/AnchorScrollTo/AnchorScrollTo.js +0 -1
- package/AnchorScrollTo/AnchorScrollTo.js.map +2 -2
- package/Button/Button.twig +12 -9
- package/Button/StyledButton.twig +40 -5
- package/Button/StyledButtonRounded.twig +12 -42
- package/CircularMarquee/CircularMarquee.twig +30 -18
- package/Data/DataBind.js +1 -1
- package/Data/DataBind.js.map +2 -2
- package/Draggable/Draggable.js +7 -2
- package/Draggable/Draggable.js.map +2 -2
- package/Figure/Figure.d.ts +1 -0
- package/Figure/Figure.js.map +2 -2
- package/Frame/AbstractFrameTrigger.d.ts +43 -0
- package/Frame/AbstractFrameTrigger.js +72 -0
- package/Frame/AbstractFrameTrigger.js.map +7 -0
- package/Frame/Frame.d.ts +55 -27
- package/Frame/Frame.js +132 -138
- package/Frame/Frame.js.map +3 -3
- package/Frame/FrameAnchor.d.ts +7 -4
- package/Frame/FrameAnchor.js +8 -5
- package/Frame/FrameAnchor.js.map +2 -2
- package/Frame/FrameForm.d.ts +22 -4
- package/Frame/FrameForm.js +43 -6
- package/Frame/FrameForm.js.map +2 -2
- package/Frame/FrameLoader.d.ts +22 -0
- package/Frame/FrameLoader.js +22 -0
- package/Frame/FrameLoader.js.map +7 -0
- package/Frame/FrameTarget.d.ts +6 -17
- package/Frame/FrameTarget.js +25 -60
- package/Frame/FrameTarget.js.map +2 -2
- package/Frame/FrameTriggerLoader.d.ts +13 -0
- package/Frame/FrameTriggerLoader.js +13 -0
- package/Frame/FrameTriggerLoader.js.map +7 -0
- package/Frame/index.d.ts +4 -0
- package/Frame/index.js +4 -0
- package/Frame/index.js.map +2 -2
- package/Frame/types.d.ts +12 -0
- package/Frame/types.js +1 -0
- package/Frame/types.js.map +7 -0
- package/Frame/utils.d.ts +9 -0
- package/Frame/utils.js +13 -0
- package/Frame/utils.js.map +7 -0
- package/LICENSE.md +110 -0
- package/Reinsurance/Reinsurance.twig +6 -6
- package/Slider/AbstractSliderChild.d.ts +5 -9
- package/Slider/AbstractSliderChild.js +0 -11
- package/Slider/AbstractSliderChild.js.map +2 -2
- package/Slider/Slider.d.ts +23 -30
- package/Slider/Slider.js +40 -100
- package/Slider/Slider.js.map +2 -2
- package/Slider/SliderBtn.d.ts +0 -3
- package/Slider/SliderBtn.js +3 -7
- package/Slider/SliderBtn.js.map +2 -2
- package/Slider/SliderCount.d.ts +0 -2
- package/Slider/SliderCount.js +4 -3
- package/Slider/SliderCount.js.map +2 -2
- package/Slider/SliderDots.d.ts +0 -3
- package/Slider/SliderDots.js +6 -7
- package/Slider/SliderDots.js.map +2 -2
- package/Slider/SliderDrag.d.ts +0 -2
- package/Slider/SliderDrag.js +0 -2
- package/Slider/SliderDrag.js.map +2 -2
- package/Slider/SliderItem.d.ts +10 -26
- package/Slider/SliderItem.js +9 -41
- package/Slider/SliderItem.js.map +2 -2
- package/Tabs/Tabs.twig +73 -9
- package/decorators/withTransition.d.ts +4 -0
- package/decorators/withTransition.js +40 -45
- package/decorators/withTransition.js.map +2 -2
- package/index.d.ts +0 -1
- package/index.js +0 -1
- package/index.js.map +2 -2
- package/package.json +4 -3
- package/LICENSE +0 -21
- package/TableOfContent/TableOfContent.d.ts +0 -39
- package/TableOfContent/TableOfContent.js +0 -50
- package/TableOfContent/TableOfContent.js.map +0 -7
- package/TableOfContent/TableOfContentAnchor.d.ts +0 -36
- package/TableOfContent/TableOfContentAnchor.js +0 -54
- package/TableOfContent/TableOfContentAnchor.js.map +0 -7
- package/TableOfContent/index.d.ts +0 -2
- package/TableOfContent/index.js +0 -3
- package/TableOfContent/index.js.map +0 -7
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Base } from "@studiometa/js-toolkit";
|
|
2
2
|
import { nextFrame, domScheduler, isFunction } from "@studiometa/js-toolkit/utils";
|
|
3
|
-
import { Slider } from "./Slider.js";
|
|
4
3
|
class AbstractSliderChild extends Base {
|
|
5
4
|
/**
|
|
6
5
|
* Config.
|
|
@@ -12,11 +11,6 @@ class AbstractSliderChild extends Base {
|
|
|
12
11
|
* Listen to the `goto` event of the parent on mount.
|
|
13
12
|
*/
|
|
14
13
|
mounted() {
|
|
15
|
-
if (!(this.$parent instanceof Slider)) {
|
|
16
|
-
throw new Error(
|
|
17
|
-
`The \`${this.$options.name}\` component must be a direct child of a \`Slider\` component.`
|
|
18
|
-
);
|
|
19
|
-
}
|
|
20
14
|
this.$parent.$on("index", this);
|
|
21
15
|
}
|
|
22
16
|
/**
|
|
@@ -35,8 +29,6 @@ class AbstractSliderChild extends Base {
|
|
|
35
29
|
}
|
|
36
30
|
/**
|
|
37
31
|
* Dispatch event.
|
|
38
|
-
* @param {CustomEvent} event
|
|
39
|
-
* @returns {void}
|
|
40
32
|
*/
|
|
41
33
|
handleEvent(event) {
|
|
42
34
|
if (event.type === "index") {
|
|
@@ -50,11 +42,8 @@ class AbstractSliderChild extends Base {
|
|
|
50
42
|
});
|
|
51
43
|
}
|
|
52
44
|
}
|
|
53
|
-
// eslint-disable-next-line jsdoc/require-returns-check
|
|
54
45
|
/**
|
|
55
46
|
* Update the child component with the given index.
|
|
56
|
-
* @param {number} index The new active index.
|
|
57
|
-
* @returns {void|(()=>void)}
|
|
58
47
|
*/
|
|
59
48
|
update(index) {
|
|
60
49
|
throw new Error(`The \`AbstractSliderChild.update(${index})\` method must be implemented.`);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/ui/Slider/AbstractSliderChild.ts"],
|
|
4
|
-
"sourcesContent": ["import { Base } from '@studiometa/js-toolkit';\nimport type { BaseProps, BaseConfig
|
|
5
|
-
"mappings": "AAAA,SAAS,YAAY;AAErB,SAAS,WAAW,cAAc,kBAAkB;
|
|
4
|
+
"sourcesContent": ["import { Base } from '@studiometa/js-toolkit';\nimport type { BaseProps, BaseConfig } from '@studiometa/js-toolkit';\nimport { nextFrame, domScheduler, isFunction } from '@studiometa/js-toolkit/utils';\nimport type { Slider } from './Slider.js';\n\nexport interface AbstractSliderChildProps extends BaseProps {\n $parent: Slider;\n}\n\n/**\n * AbstractSliderChild class.\n */\nexport class AbstractSliderChild<T extends BaseProps = BaseProps> extends Base<\n T & AbstractSliderChildProps\n> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n name: 'AbstractSliderChild',\n };\n\n /**\n * Listen to the `goto` event of the parent on mount.\n */\n mounted() {\n this.$parent.$on('index', this);\n }\n\n /**\n * Trigger update on resize.\n */\n resized() {\n nextFrame(() => {\n this.update(this.$parent.currentIndex);\n });\n }\n\n /**\n * Remove the event listener.\n */\n destroyed() {\n this.$parent.$off('index', this);\n }\n\n /**\n * Dispatch event.\n */\n handleEvent(event: CustomEvent) {\n if (event.type === 'index') {\n domScheduler.read(() => {\n const callback = this.update(event.detail[0]);\n if (isFunction(callback)) {\n domScheduler.write(() => {\n // @ts-ignore\n callback();\n });\n }\n });\n }\n }\n\n /**\n * Update the child component with the given index.\n */\n update(index: number): void | (() => void) {\n throw new Error(`The \\`AbstractSliderChild.update(${index})\\` method must be implemented.`);\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,YAAY;AAErB,SAAS,WAAW,cAAc,kBAAkB;AAU7C,MAAM,4BAA6D,KAExE;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,SAAqB;AAAA,IAC1B,MAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU;AACR,SAAK,QAAQ,IAAI,SAAS,IAAI;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU;AACR,cAAU,MAAM;AACd,WAAK,OAAO,KAAK,QAAQ,YAAY;AAAA,IACvC,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY;AACV,SAAK,QAAQ,KAAK,SAAS,IAAI;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,OAAoB;AAC9B,QAAI,MAAM,SAAS,SAAS;AAC1B,mBAAa,KAAK,MAAM;AACtB,cAAM,WAAW,KAAK,OAAO,MAAM,OAAO,CAAC,CAAC;AAC5C,YAAI,WAAW,QAAQ,GAAG;AACxB,uBAAa,MAAM,MAAM;AAEvB,qBAAS;AAAA,UACX,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAoC;AACzC,UAAM,IAAI,MAAM,oCAAoC,KAAK,iCAAiC;AAAA,EAC5F;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/Slider/Slider.d.ts
CHANGED
|
@@ -23,7 +23,8 @@ export interface SliderProps extends BaseProps {
|
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* Slider class.
|
|
27
|
+
* @see https://ui.studiometa.dev/-/components/Slider/
|
|
27
28
|
* @todo a11y
|
|
28
29
|
*/
|
|
29
30
|
export declare class Slider<T extends BaseProps = BaseProps> extends Base<T & SliderProps> {
|
|
@@ -31,21 +32,26 @@ export declare class Slider<T extends BaseProps = BaseProps> extends Base<T & Sl
|
|
|
31
32
|
* Config.
|
|
32
33
|
*/
|
|
33
34
|
static config: BaseConfig;
|
|
35
|
+
/**
|
|
36
|
+
* Distance on the x axis.
|
|
37
|
+
* @private
|
|
38
|
+
*/
|
|
34
39
|
__distanceX: number;
|
|
40
|
+
/**
|
|
41
|
+
* Initial x position.
|
|
42
|
+
* @private
|
|
43
|
+
*/
|
|
35
44
|
__initialX: number;
|
|
36
45
|
/**
|
|
37
46
|
* Index of the current active slide.
|
|
47
|
+
* @private
|
|
38
48
|
*/
|
|
39
49
|
__currentIndex: number;
|
|
40
|
-
__isDragging: boolean;
|
|
41
50
|
/**
|
|
42
|
-
*
|
|
51
|
+
* Drag state.
|
|
52
|
+
* @private
|
|
43
53
|
*/
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Set the current index and emit the `index` event.
|
|
47
|
-
*/
|
|
48
|
-
set currentIndex(value: number);
|
|
54
|
+
__isDragging: boolean;
|
|
49
55
|
/**
|
|
50
56
|
* Store all the states.
|
|
51
57
|
*/
|
|
@@ -56,9 +62,16 @@ export declare class Slider<T extends BaseProps = BaseProps> extends Base<T & Sl
|
|
|
56
62
|
origins: Record<SliderModes, number>;
|
|
57
63
|
/**
|
|
58
64
|
* Wether or not the wrapper is focused.
|
|
59
|
-
* @type {boolean}
|
|
60
65
|
*/
|
|
61
66
|
hasFocus: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Get the current index.
|
|
69
|
+
*/
|
|
70
|
+
get currentIndex(): number;
|
|
71
|
+
/**
|
|
72
|
+
* Set the current index and emit the `index` event.
|
|
73
|
+
*/
|
|
74
|
+
set currentIndex(value: number);
|
|
62
75
|
/**
|
|
63
76
|
* Get the current state.
|
|
64
77
|
*/
|
|
@@ -122,9 +135,7 @@ export declare class Slider<T extends BaseProps = BaseProps> extends Base<T & Sl
|
|
|
122
135
|
/**
|
|
123
136
|
* Go to the given index.
|
|
124
137
|
*/
|
|
125
|
-
goTo(index: number
|
|
126
|
-
withInstantMove?: boolean;
|
|
127
|
-
}): void;
|
|
138
|
+
goTo(index: number): void;
|
|
128
139
|
/**
|
|
129
140
|
* Listen to the Draggable `start` event.
|
|
130
141
|
*/
|
|
@@ -153,23 +164,5 @@ export declare class Slider<T extends BaseProps = BaseProps> extends Base<T & Sl
|
|
|
153
164
|
* Go prev or next when focus is on the wrapper and pressing arrow keys.
|
|
154
165
|
*/
|
|
155
166
|
keyed({ LEFT, RIGHT, isDown }: KeyServiceProps): void;
|
|
156
|
-
/**
|
|
157
|
-
* Prepare invisible items.
|
|
158
|
-
*/
|
|
159
|
-
prepareInvisibleItems(): void;
|
|
160
|
-
/**
|
|
161
|
-
* Get the state where the given item will be visible.
|
|
162
|
-
*/
|
|
163
|
-
getStateWhereItemWillBeInvisible(item: SliderItem, { reversed }?: {
|
|
164
|
-
reversed?: boolean;
|
|
165
|
-
}): SliderState;
|
|
166
|
-
/**
|
|
167
|
-
* Get the visible slides for the given position.
|
|
168
|
-
*/
|
|
169
|
-
getVisibleItems(target: number): SliderItem<BaseProps>[];
|
|
170
|
-
/**
|
|
171
|
-
* Get the invisible slides for the given position.
|
|
172
|
-
*/
|
|
173
|
-
getInvisibleItems(target: number): SliderItem<BaseProps>[];
|
|
174
167
|
}
|
|
175
168
|
export {};
|
package/Slider/Slider.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Base } from "@studiometa/js-toolkit";
|
|
2
|
-
import { clamp, inertiaFinalValue, nextFrame
|
|
2
|
+
import { clamp, inertiaFinalValue, nextFrame } from "@studiometa/js-toolkit/utils";
|
|
3
3
|
import { SliderDrag } from "./SliderDrag.js";
|
|
4
4
|
import { SliderItem } from "./SliderItem.js";
|
|
5
5
|
class Slider extends Base {
|
|
@@ -8,7 +8,7 @@ class Slider extends Base {
|
|
|
8
8
|
*/
|
|
9
9
|
static config = {
|
|
10
10
|
name: "Slider",
|
|
11
|
-
refs: ["wrapper"
|
|
11
|
+
refs: ["wrapper"],
|
|
12
12
|
emits: ["goto", "index"],
|
|
13
13
|
components: {
|
|
14
14
|
SliderItem,
|
|
@@ -22,28 +22,26 @@ class Slider extends Base {
|
|
|
22
22
|
dropSensitivity: { type: Number, default: 2 }
|
|
23
23
|
}
|
|
24
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* Distance on the x axis.
|
|
27
|
+
* @private
|
|
28
|
+
*/
|
|
25
29
|
__distanceX = 0;
|
|
30
|
+
/**
|
|
31
|
+
* Initial x position.
|
|
32
|
+
* @private
|
|
33
|
+
*/
|
|
26
34
|
__initialX = 0;
|
|
27
35
|
/**
|
|
28
36
|
* Index of the current active slide.
|
|
37
|
+
* @private
|
|
29
38
|
*/
|
|
30
39
|
__currentIndex = 0;
|
|
31
|
-
__isDragging = false;
|
|
32
|
-
/**
|
|
33
|
-
* Get the current index.
|
|
34
|
-
*/
|
|
35
|
-
get currentIndex() {
|
|
36
|
-
return this.__currentIndex;
|
|
37
|
-
}
|
|
38
40
|
/**
|
|
39
|
-
*
|
|
41
|
+
* Drag state.
|
|
42
|
+
* @private
|
|
40
43
|
*/
|
|
41
|
-
|
|
42
|
-
this.currentSliderItem.disactivate();
|
|
43
|
-
this.$emit("index", value);
|
|
44
|
-
this.__currentIndex = value;
|
|
45
|
-
this.currentSliderItem.activate();
|
|
46
|
-
}
|
|
44
|
+
__isDragging = false;
|
|
47
45
|
/**
|
|
48
46
|
* Store all the states.
|
|
49
47
|
*/
|
|
@@ -58,9 +56,23 @@ class Slider extends Base {
|
|
|
58
56
|
};
|
|
59
57
|
/**
|
|
60
58
|
* Wether or not the wrapper is focused.
|
|
61
|
-
* @type {boolean}
|
|
62
59
|
*/
|
|
63
60
|
hasFocus = false;
|
|
61
|
+
/**
|
|
62
|
+
* Get the current index.
|
|
63
|
+
*/
|
|
64
|
+
get currentIndex() {
|
|
65
|
+
return this.__currentIndex;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Set the current index and emit the `index` event.
|
|
69
|
+
*/
|
|
70
|
+
set currentIndex(value) {
|
|
71
|
+
this.currentSliderItem.disactivate();
|
|
72
|
+
this.$emit("index", value);
|
|
73
|
+
this.__currentIndex = value;
|
|
74
|
+
this.currentSliderItem.activate();
|
|
75
|
+
}
|
|
64
76
|
/**
|
|
65
77
|
* Get the current state.
|
|
66
78
|
*/
|
|
@@ -149,11 +161,8 @@ class Slider extends Base {
|
|
|
149
161
|
return state;
|
|
150
162
|
});
|
|
151
163
|
}
|
|
152
|
-
if (mode === "center"
|
|
153
|
-
|
|
154
|
-
`[${this.$id}]`,
|
|
155
|
-
"The `center` mode is not yet compatible with the `contain` mode."
|
|
156
|
-
);
|
|
164
|
+
if (mode === "center") {
|
|
165
|
+
this.$warn("The `center` mode is not yet compatible with the `contain` mode.");
|
|
157
166
|
}
|
|
158
167
|
}
|
|
159
168
|
return states;
|
|
@@ -176,7 +185,6 @@ class Slider extends Base {
|
|
|
176
185
|
mounted() {
|
|
177
186
|
this.states = this.getStates();
|
|
178
187
|
this.setAccessibilityAttributes();
|
|
179
|
-
this.prepareInvisibleItems();
|
|
180
188
|
this.goTo(this.currentIndex);
|
|
181
189
|
}
|
|
182
190
|
/**
|
|
@@ -186,7 +194,6 @@ class Slider extends Base {
|
|
|
186
194
|
nextFrame(() => {
|
|
187
195
|
this.states = this.getStates();
|
|
188
196
|
nextFrame(() => {
|
|
189
|
-
this.prepareInvisibleItems();
|
|
190
197
|
this.goTo(this.currentIndex);
|
|
191
198
|
});
|
|
192
199
|
});
|
|
@@ -219,23 +226,14 @@ class Slider extends Base {
|
|
|
219
226
|
/**
|
|
220
227
|
* Go to the given index.
|
|
221
228
|
*/
|
|
222
|
-
goTo(index
|
|
229
|
+
goTo(index) {
|
|
223
230
|
if (index < 0 || index > this.indexMax) {
|
|
224
231
|
throw new Error("Index out of bound.");
|
|
225
232
|
}
|
|
226
|
-
const currentState = this.getStateValueByMode(this.currentState.x);
|
|
227
233
|
const state = this.getStateValueByMode(this.states[index].x);
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
if (currentState !== state && withInstantMove) {
|
|
232
|
-
item.moveInstantly(currentState);
|
|
233
|
-
}
|
|
234
|
-
nextFrame(() => item.move(state));
|
|
235
|
-
});
|
|
236
|
-
invisibleItemsToMoveInstantly.forEach((item) => {
|
|
237
|
-
item.moveInstantly(state);
|
|
238
|
-
});
|
|
234
|
+
for (const item of this.$children.SliderItem) {
|
|
235
|
+
item.move(state);
|
|
236
|
+
}
|
|
239
237
|
this.currentIndex = index;
|
|
240
238
|
this.$emit("goto", index);
|
|
241
239
|
}
|
|
@@ -255,9 +253,9 @@ class Slider extends Base {
|
|
|
255
253
|
return;
|
|
256
254
|
}
|
|
257
255
|
this.__distanceX = this.__initialX + props.distance.x * this.$options.sensitivity;
|
|
258
|
-
|
|
256
|
+
for (const item of this.$children.SliderItem) {
|
|
259
257
|
item.moveInstantly(this.__distanceX);
|
|
260
|
-
}
|
|
258
|
+
}
|
|
261
259
|
}
|
|
262
260
|
/**
|
|
263
261
|
* Listen to the Draggable `drop` event and find the new active slide.
|
|
@@ -281,15 +279,15 @@ class Slider extends Base {
|
|
|
281
279
|
const minimumDifference = Math.min(...absoluteDifferencesBetweenDistanceAndState);
|
|
282
280
|
const closestIndex = absoluteDifferencesBetweenDistanceAndState.indexOf(minimumDifference);
|
|
283
281
|
if (this.$options.fitBounds) {
|
|
284
|
-
this.goTo(closestIndex
|
|
282
|
+
this.goTo(closestIndex);
|
|
285
283
|
} else {
|
|
286
284
|
if (this.$options.contain) {
|
|
287
285
|
finalX = Math.min(this.containMinState, finalX);
|
|
288
286
|
finalX = Math.max(this.containMaxState, finalX);
|
|
289
287
|
}
|
|
290
|
-
this.$children.SliderItem
|
|
288
|
+
for (const item of this.$children.SliderItem) {
|
|
291
289
|
item.move(finalX);
|
|
292
|
-
}
|
|
290
|
+
}
|
|
293
291
|
this.currentIndex = closestIndex;
|
|
294
292
|
}
|
|
295
293
|
}
|
|
@@ -317,64 +315,6 @@ class Slider extends Base {
|
|
|
317
315
|
}
|
|
318
316
|
}
|
|
319
317
|
}
|
|
320
|
-
/**
|
|
321
|
-
* Prepare invisible items.
|
|
322
|
-
*/
|
|
323
|
-
prepareInvisibleItems() {
|
|
324
|
-
const state = this.states[this.currentIndex];
|
|
325
|
-
const nextItemsToPrepare = [];
|
|
326
|
-
const previousItemsToPrepare = [];
|
|
327
|
-
this.getInvisibleItems(this.getStateValueByMode(state.x)).forEach((item, i) => {
|
|
328
|
-
if (i > this.currentIndex) {
|
|
329
|
-
nextItemsToPrepare.push(item);
|
|
330
|
-
return;
|
|
331
|
-
}
|
|
332
|
-
if (i < this.currentIndex) {
|
|
333
|
-
previousItemsToPrepare.push(item);
|
|
334
|
-
}
|
|
335
|
-
});
|
|
336
|
-
nextItemsToPrepare.forEach((item) => {
|
|
337
|
-
const invisibleState = this.getStateWhereItemWillBeInvisible(item);
|
|
338
|
-
if (invisibleState) {
|
|
339
|
-
item.moveInstantly(this.getStateValueByMode(invisibleState.x));
|
|
340
|
-
}
|
|
341
|
-
});
|
|
342
|
-
previousItemsToPrepare.forEach((item) => {
|
|
343
|
-
const invisibleState = this.getStateWhereItemWillBeInvisible(item, { reversed: true });
|
|
344
|
-
if (invisibleState) {
|
|
345
|
-
item.moveInstantly(this.getStateValueByMode(invisibleState.x));
|
|
346
|
-
}
|
|
347
|
-
});
|
|
348
|
-
}
|
|
349
|
-
/**
|
|
350
|
-
* Get the state where the given item will be visible.
|
|
351
|
-
*/
|
|
352
|
-
getStateWhereItemWillBeInvisible(item, { reversed = false } = {}) {
|
|
353
|
-
const visibleStates = this.states.filter(
|
|
354
|
-
(state) => item.willBeVisible(this.getStateValueByMode(state.x))
|
|
355
|
-
);
|
|
356
|
-
const firstVisibleState = visibleStates[0];
|
|
357
|
-
const lastVisibleState = visibleStates.at(-1);
|
|
358
|
-
const firstVisibleStateIndex = this.states.findIndex(
|
|
359
|
-
(state) => this.getStateValueByMode(state.x) === this.getStateValueByMode(firstVisibleState.x)
|
|
360
|
-
);
|
|
361
|
-
const lastVisibleStateIndex = this.states.findIndex((state) => state.x === lastVisibleState.x);
|
|
362
|
-
return reversed ? this.states[lastVisibleStateIndex + 1] : this.states[firstVisibleStateIndex - 1];
|
|
363
|
-
}
|
|
364
|
-
/**
|
|
365
|
-
* Get the visible slides for the given position.
|
|
366
|
-
*/
|
|
367
|
-
getVisibleItems(target) {
|
|
368
|
-
return this.$children.SliderItem.filter((item) => item.isVisible || item.willBeVisible(target));
|
|
369
|
-
}
|
|
370
|
-
/**
|
|
371
|
-
* Get the invisible slides for the given position.
|
|
372
|
-
*/
|
|
373
|
-
getInvisibleItems(target) {
|
|
374
|
-
return this.$children.SliderItem.filter(
|
|
375
|
-
(item) => !item.isVisible && !item.willBeVisible(target)
|
|
376
|
-
);
|
|
377
|
-
}
|
|
378
318
|
}
|
|
379
319
|
export {
|
|
380
320
|
Slider
|
package/Slider/Slider.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/ui/Slider/Slider.ts"],
|
|
4
|
-
"sourcesContent": ["import { Base } from '@studiometa/js-toolkit';\nimport type {\n BaseProps,\n BaseConfig,\n DragServiceProps,\n KeyServiceProps,\n} from '@studiometa/js-toolkit';\nimport { clamp, inertiaFinalValue, nextFrame, isDev } from '@studiometa/js-toolkit/utils';\nimport { SliderDrag } from './SliderDrag.js';\nimport { SliderItem } from './SliderItem.js';\n\nexport type SliderModes = 'left' | 'center' | 'right';\n\ntype SliderState = { x: Record<SliderModes, number> };\n\nexport interface SliderProps extends BaseProps {\n $refs: {\n wrapper: HTMLElement;\n };\n $children: {\n SliderItem: SliderItem[];\n SliderDrag: SliderDrag[];\n };\n $options: {\n mode: SliderModes;\n fitBounds: boolean;\n contain: boolean;\n sensitivity: number;\n dropSensitivity: number;\n };\n}\n\n/**\n * Orchestrate the slider items state transition.\n * @todo a11y\n */\nexport class Slider<T extends BaseProps = BaseProps> extends Base<T & SliderProps> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n name: 'Slider',\n refs: ['wrapper', 'debug'],\n emits: ['goto', 'index'],\n components: {\n SliderItem,\n SliderDrag,\n },\n options: {\n mode: { type: String, default: 'left' },\n fitBounds: Boolean,\n contain: Boolean,\n sensitivity: { type: Number, default: 1 },\n dropSensitivity: { type: Number, default: 2 },\n },\n };\n\n __distanceX = 0;\n\n __initialX = 0;\n\n /**\n * Index of the current active slide.\n */\n __currentIndex = 0;\n\n __isDragging = false;\n\n /**\n * Get the current index.\n */\n get currentIndex() {\n return this.__currentIndex;\n }\n\n /**\n * Set the current index and emit the `index` event.\n */\n set currentIndex(value: number) {\n this.currentSliderItem.disactivate();\n this.$emit('index', value);\n this.__currentIndex = value;\n this.currentSliderItem.activate();\n }\n\n /**\n * Store all the states.\n */\n states: SliderState[] = [];\n\n /**\n * Origins for the different modes.\n */\n origins: Record<SliderModes, number> = {\n left: 0,\n center: 0,\n right: 0,\n };\n\n /**\n * Wether or not the wrapper is focused.\n * @type {boolean}\n */\n hasFocus = false;\n\n /**\n * Get the current state.\n */\n get currentState() {\n return this.states[this.currentIndex];\n }\n\n /**\n * Get the first state.\n */\n get firstState() {\n return this.states[0];\n }\n\n /**\n * Get the last state.\n */\n get lastState() {\n return this.states.at(-1);\n }\n\n /**\n * Get the minimal contain state value.\n */\n get containMinState(): number {\n return this.getStateValueByMode(this.firstState.x, 'left');\n }\n\n /**\n * Get the maximal contain state value.\n */\n get containMaxState(): number {\n return this.getStateValueByMode(this.lastState.x, 'right');\n }\n\n /**\n * Get the last index.\n */\n get indexMax(): number {\n return this.$children.SliderItem.length - 1;\n }\n\n /**\n * Get the current SliderItem\n */\n get currentSliderItem() {\n return this.$children.SliderItem[this.currentIndex];\n }\n\n /**\n * Get the states for each SliderItem.\n */\n getStates(): SliderState[] {\n const { wrapper } = this.$refs;\n const originRect = wrapper.getBoundingClientRect();\n\n this.origins = {\n left: originRect.left,\n center: originRect.x + originRect.width / 2,\n right: originRect.x + originRect.width,\n };\n\n const states: SliderState[] = this.$children.SliderItem.map((item) => ({\n x: {\n left: (item.rect.x - this.origins.left) * -1,\n center: (item.rect.x + item.rect.width / 2 - this.origins.center) * -1,\n right: (item.rect.x + item.rect.width - this.origins.right) * -1,\n },\n }));\n\n if (this.$options.contain) {\n const { mode } = this.$options;\n // Find state where last child has passed the wrapper bound completely\n if (mode === 'left') {\n const lastChild = this.$children.SliderItem.at(-1);\n\n const maxState = states.find((state) => {\n const lastChildPosition =\n lastChild.rect.x - this.origins.left + lastChild.rect.width + state.x.left;\n const diffWithWrapperBound = originRect.width - lastChildPosition;\n if (diffWithWrapperBound > 0) {\n state.x.left = Math.min(state.x.left + diffWithWrapperBound, 0);\n return true;\n }\n\n return false;\n });\n\n if (maxState) {\n return states.map((state) => {\n state.x.left = Math.max(state.x.left, maxState.x.left);\n return state;\n });\n }\n }\n\n if (mode === 'right') {\n const maxStateIndex = states.findIndex((state) => state.x.right <= 0);\n const maxState = maxStateIndex < 0 ? states.at(-1) : states[maxStateIndex - 1];\n\n return states.map((state) => {\n state.x.right = maxStateIndex < 0 ? maxState.x.right : Math.min(state.x.right, 0);\n return state;\n });\n }\n\n if (mode === 'center' && isDev) {\n console.warn(\n `[${this.$id}]`,\n 'The `center` mode is not yet compatible with the `contain` mode.',\n );\n }\n }\n\n return states;\n }\n\n /**\n * Get an origin by mode.\n */\n getOriginByMode(mode?: SliderModes) {\n return this.origins[mode ?? this.$options.mode];\n }\n\n /**\n * Get a state value according to the given mode.\n */\n getStateValueByMode(state: SliderState['x'], mode?: SliderModes) {\n return state[mode ?? this.$options.mode];\n }\n\n /**\n * Mounted hook.\n */\n mounted() {\n this.states = this.getStates();\n this.setAccessibilityAttributes();\n this.prepareInvisibleItems();\n this.goTo(this.currentIndex);\n }\n\n /**\n * Resized hook.\n */\n resized() {\n nextFrame(() => {\n this.states = this.getStates();\n nextFrame(() => {\n this.prepareInvisibleItems();\n this.goTo(this.currentIndex);\n });\n });\n }\n\n /**\n * Set accessibility attributes for the component\n */\n setAccessibilityAttributes() {\n this.$el.setAttribute('role', 'group');\n this.$el.setAttribute('aria-roledescription', 'carousel');\n }\n\n /**\n * Go to the next slide.\n */\n goNext() {\n if (this.currentIndex + 1 > this.indexMax) {\n return;\n }\n\n this.goTo(this.currentIndex + 1);\n }\n\n /**\n * Go to the previous slide.\n */\n goPrev() {\n if (this.currentIndex - 1 < 0) {\n return;\n }\n\n this.goTo(this.currentIndex - 1);\n }\n\n /**\n * Go to the given index.\n */\n goTo(index: number, { withInstantMove = true } = {}) {\n if (index < 0 || index > this.indexMax) {\n throw new Error('Index out of bound.');\n }\n\n const currentState = this.getStateValueByMode(this.currentState.x);\n const state = this.getStateValueByMode(this.states[index].x);\n const itemsToMove = this.getVisibleItems(state);\n const invisibleItemsToMoveInstantly = this.getInvisibleItems(state);\n\n itemsToMove.forEach((item) => {\n // Better perfs when going fast through the slides\n if (currentState !== state && withInstantMove) {\n item.moveInstantly(currentState);\n }\n nextFrame(() => item.move(state));\n });\n invisibleItemsToMoveInstantly.forEach((item) => {\n item.moveInstantly(state);\n });\n\n this.currentIndex = index;\n this.$emit('goto', index);\n }\n\n /**\n * Listen to the Draggable `start` event.\n */\n onSliderDragStart() {\n this.__initialX = this.currentSliderItem ? this.currentSliderItem.x : 0;\n this.__distanceX = this.__initialX;\n\n this.__isDragging = true;\n }\n\n /**\n * Listen to the Draggable `drag` event.\n */\n onSliderDragDrag({ args: [props] }: { args: [DragServiceProps] }) {\n if (Math.abs(props.delta.y) > Math.abs(props.delta.x)) {\n return;\n }\n\n this.__distanceX = this.__initialX + props.distance.x * this.$options.sensitivity;\n\n this.getVisibleItems(this.__distanceX).forEach((item) => {\n item.moveInstantly(this.__distanceX);\n });\n }\n\n /**\n * Listen to the Draggable `drop` event and find the new active slide.\n */\n onSliderDragDrop({ args: [props] }: { args: [DragServiceProps] }) {\n if (!this.__isDragging) {\n return;\n }\n this.__isDragging = false;\n\n if (Math.abs(props.delta.y) > Math.abs(props.delta.x)) {\n return;\n }\n\n let finalX = clamp(\n inertiaFinalValue(this.__distanceX, props.delta.x * this.$options.dropSensitivity),\n this.getStateValueByMode(this.firstState.x),\n this.getStateValueByMode(this.lastState.x),\n );\n\n const absoluteDifferencesBetweenDistanceAndState = this.states.map((state) =>\n Math.abs(finalX - this.getStateValueByMode(state.x)),\n );\n const minimumDifference = Math.min(...absoluteDifferencesBetweenDistanceAndState);\n const closestIndex = absoluteDifferencesBetweenDistanceAndState.indexOf(minimumDifference);\n\n if (this.$options.fitBounds) {\n this.goTo(closestIndex, { withInstantMove: false });\n } else {\n if (this.$options.contain) {\n finalX = Math.min(this.containMinState, finalX);\n finalX = Math.max(this.containMaxState, finalX);\n }\n this.$children.SliderItem.forEach((item) => {\n item.move(finalX);\n });\n this.currentIndex = closestIndex;\n }\n }\n\n /**\n * Enable focus.\n */\n onWrapperFocus() {\n this.hasFocus = true;\n }\n\n /**\n * Disable focus.\n */\n onWrapperBlur() {\n this.hasFocus = false;\n }\n\n /**\n * Go prev or next when focus is on the wrapper and pressing arrow keys.\n */\n keyed({ LEFT, RIGHT, isDown }: KeyServiceProps) {\n if (this.hasFocus && isDown) {\n if (LEFT) {\n this.goPrev();\n } else if (RIGHT) {\n this.goNext();\n }\n }\n }\n\n /**\n * Prepare invisible items.\n */\n prepareInvisibleItems() {\n const state = this.states[this.currentIndex];\n const nextItemsToPrepare = [];\n const previousItemsToPrepare = [];\n\n this.getInvisibleItems(this.getStateValueByMode(state.x)).forEach((item, i) => {\n if (i > this.currentIndex) {\n nextItemsToPrepare.push(item);\n return;\n }\n\n if (i < this.currentIndex) {\n previousItemsToPrepare.push(item);\n }\n });\n\n nextItemsToPrepare.forEach((item) => {\n const invisibleState = this.getStateWhereItemWillBeInvisible(item);\n if (invisibleState) {\n item.moveInstantly(this.getStateValueByMode(invisibleState.x));\n }\n });\n\n previousItemsToPrepare.forEach((item) => {\n const invisibleState = this.getStateWhereItemWillBeInvisible(item, { reversed: true });\n if (invisibleState) {\n item.moveInstantly(this.getStateValueByMode(invisibleState.x));\n }\n });\n }\n\n /**\n * Get the state where the given item will be visible.\n */\n getStateWhereItemWillBeInvisible(item: SliderItem, { reversed = false } = {}): SliderState {\n const visibleStates = this.states.filter((state) =>\n item.willBeVisible(this.getStateValueByMode(state.x)),\n );\n const firstVisibleState = visibleStates[0];\n const lastVisibleState = visibleStates.at(-1);\n const firstVisibleStateIndex = this.states.findIndex(\n (state) =>\n this.getStateValueByMode(state.x) === this.getStateValueByMode(firstVisibleState.x),\n );\n const lastVisibleStateIndex = this.states.findIndex((state) => state.x === lastVisibleState.x);\n\n return reversed\n ? this.states[lastVisibleStateIndex + 1]\n : this.states[firstVisibleStateIndex - 1];\n }\n\n /**\n * Get the visible slides for the given position.\n */\n getVisibleItems(target: number) {\n return this.$children.SliderItem.filter((item) => item.isVisible || item.willBeVisible(target));\n }\n\n /**\n * Get the invisible slides for the given position.\n */\n getInvisibleItems(target: number) {\n return this.$children.SliderItem.filter(\n (item) => !item.isVisible && !item.willBeVisible(target),\n );\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,YAAY;AAOrB,SAAS,OAAO,mBAAmB,
|
|
4
|
+
"sourcesContent": ["import { Base } from '@studiometa/js-toolkit';\nimport type {\n BaseProps,\n BaseConfig,\n DragServiceProps,\n KeyServiceProps,\n} from '@studiometa/js-toolkit';\nimport { clamp, inertiaFinalValue, nextFrame } from '@studiometa/js-toolkit/utils';\nimport { SliderDrag } from './SliderDrag.js';\nimport { SliderItem } from './SliderItem.js';\n\nexport type SliderModes = 'left' | 'center' | 'right';\n\ntype SliderState = { x: Record<SliderModes, number> };\n\nexport interface SliderProps extends BaseProps {\n $refs: {\n wrapper: HTMLElement;\n };\n $children: {\n SliderItem: SliderItem[];\n SliderDrag: SliderDrag[];\n };\n $options: {\n mode: SliderModes;\n fitBounds: boolean;\n contain: boolean;\n sensitivity: number;\n dropSensitivity: number;\n };\n}\n\n/**\n * Slider class.\n * @see https://ui.studiometa.dev/-/components/Slider/\n * @todo a11y\n */\nexport class Slider<T extends BaseProps = BaseProps> extends Base<T & SliderProps> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n name: 'Slider',\n refs: ['wrapper'],\n emits: ['goto', 'index'],\n components: {\n SliderItem,\n SliderDrag,\n },\n options: {\n mode: { type: String, default: 'left' },\n fitBounds: Boolean,\n contain: Boolean,\n sensitivity: { type: Number, default: 1 },\n dropSensitivity: { type: Number, default: 2 },\n },\n };\n\n /**\n * Distance on the x axis.\n * @private\n */\n __distanceX = 0;\n\n /**\n * Initial x position.\n * @private\n */\n __initialX = 0;\n\n /**\n * Index of the current active slide.\n * @private\n */\n __currentIndex = 0;\n\n /**\n * Drag state.\n * @private\n */\n __isDragging = false;\n\n /**\n * Store all the states.\n */\n states: SliderState[] = [];\n\n /**\n * Origins for the different modes.\n */\n origins: Record<SliderModes, number> = {\n left: 0,\n center: 0,\n right: 0,\n };\n\n /**\n * Wether or not the wrapper is focused.\n */\n hasFocus = false;\n\n /**\n * Get the current index.\n */\n get currentIndex() {\n return this.__currentIndex;\n }\n\n /**\n * Set the current index and emit the `index` event.\n */\n set currentIndex(value: number) {\n this.currentSliderItem.disactivate();\n this.$emit('index', value);\n this.__currentIndex = value;\n this.currentSliderItem.activate();\n }\n\n /**\n * Get the current state.\n */\n get currentState() {\n return this.states[this.currentIndex];\n }\n\n /**\n * Get the first state.\n */\n get firstState() {\n return this.states[0];\n }\n\n /**\n * Get the last state.\n */\n get lastState() {\n return this.states.at(-1);\n }\n\n /**\n * Get the minimal contain state value.\n */\n get containMinState(): number {\n return this.getStateValueByMode(this.firstState.x, 'left');\n }\n\n /**\n * Get the maximal contain state value.\n */\n get containMaxState(): number {\n return this.getStateValueByMode(this.lastState.x, 'right');\n }\n\n /**\n * Get the last index.\n */\n get indexMax(): number {\n return this.$children.SliderItem.length - 1;\n }\n\n /**\n * Get the current SliderItem\n */\n get currentSliderItem() {\n return this.$children.SliderItem[this.currentIndex];\n }\n\n /**\n * Get the states for each SliderItem.\n */\n getStates(): SliderState[] {\n const { wrapper } = this.$refs;\n const originRect = wrapper.getBoundingClientRect();\n\n this.origins = {\n left: originRect.left,\n center: originRect.x + originRect.width / 2,\n right: originRect.x + originRect.width,\n };\n\n const states: SliderState[] = this.$children.SliderItem.map((item) => ({\n x: {\n left: (item.rect.x - this.origins.left) * -1,\n center: (item.rect.x + item.rect.width / 2 - this.origins.center) * -1,\n right: (item.rect.x + item.rect.width - this.origins.right) * -1,\n },\n }));\n\n if (this.$options.contain) {\n const { mode } = this.$options;\n // Find state where last child has passed the wrapper bound completely\n if (mode === 'left') {\n const lastChild = this.$children.SliderItem.at(-1);\n\n const maxState = states.find((state) => {\n const lastChildPosition =\n lastChild.rect.x - this.origins.left + lastChild.rect.width + state.x.left;\n const diffWithWrapperBound = originRect.width - lastChildPosition;\n if (diffWithWrapperBound > 0) {\n state.x.left = Math.min(state.x.left + diffWithWrapperBound, 0);\n return true;\n }\n\n return false;\n });\n\n if (maxState) {\n return states.map((state) => {\n state.x.left = Math.max(state.x.left, maxState.x.left);\n return state;\n });\n }\n }\n\n if (mode === 'right') {\n const maxStateIndex = states.findIndex((state) => state.x.right <= 0);\n const maxState = maxStateIndex < 0 ? states.at(-1) : states[maxStateIndex - 1];\n\n return states.map((state) => {\n state.x.right = maxStateIndex < 0 ? maxState.x.right : Math.min(state.x.right, 0);\n return state;\n });\n }\n\n if (mode === 'center') {\n this.$warn('The `center` mode is not yet compatible with the `contain` mode.');\n }\n }\n\n return states;\n }\n\n /**\n * Get an origin by mode.\n */\n getOriginByMode(mode?: SliderModes) {\n return this.origins[mode ?? this.$options.mode];\n }\n\n /**\n * Get a state value according to the given mode.\n */\n getStateValueByMode(state: SliderState['x'], mode?: SliderModes) {\n return state[mode ?? this.$options.mode];\n }\n\n /**\n * Mounted hook.\n */\n mounted() {\n this.states = this.getStates();\n this.setAccessibilityAttributes();\n this.goTo(this.currentIndex);\n }\n\n /**\n * Resized hook.\n */\n resized() {\n nextFrame(() => {\n this.states = this.getStates();\n nextFrame(() => {\n this.goTo(this.currentIndex);\n });\n });\n }\n\n /**\n * Set accessibility attributes for the component\n */\n setAccessibilityAttributes() {\n this.$el.setAttribute('role', 'group');\n this.$el.setAttribute('aria-roledescription', 'carousel');\n }\n\n /**\n * Go to the next slide.\n */\n goNext() {\n if (this.currentIndex + 1 > this.indexMax) {\n return;\n }\n\n this.goTo(this.currentIndex + 1);\n }\n\n /**\n * Go to the previous slide.\n */\n goPrev() {\n if (this.currentIndex - 1 < 0) {\n return;\n }\n\n this.goTo(this.currentIndex - 1);\n }\n\n /**\n * Go to the given index.\n */\n goTo(index: number) {\n if (index < 0 || index > this.indexMax) {\n throw new Error('Index out of bound.');\n }\n\n const state = this.getStateValueByMode(this.states[index].x);\n\n for (const item of this.$children.SliderItem) {\n item.move(state);\n }\n\n this.currentIndex = index;\n this.$emit('goto', index);\n }\n\n /**\n * Listen to the Draggable `start` event.\n */\n onSliderDragStart() {\n this.__initialX = this.currentSliderItem ? this.currentSliderItem.x : 0;\n this.__distanceX = this.__initialX;\n\n this.__isDragging = true;\n }\n\n /**\n * Listen to the Draggable `drag` event.\n */\n onSliderDragDrag({ args: [props] }: { args: [DragServiceProps] }) {\n if (Math.abs(props.delta.y) > Math.abs(props.delta.x)) {\n return;\n }\n\n this.__distanceX = this.__initialX + props.distance.x * this.$options.sensitivity;\n\n for (const item of this.$children.SliderItem) {\n item.moveInstantly(this.__distanceX);\n }\n }\n\n /**\n * Listen to the Draggable `drop` event and find the new active slide.\n */\n onSliderDragDrop({ args: [props] }: { args: [DragServiceProps] }) {\n if (!this.__isDragging) {\n return;\n }\n this.__isDragging = false;\n\n if (Math.abs(props.delta.y) > Math.abs(props.delta.x)) {\n return;\n }\n\n let finalX = clamp(\n inertiaFinalValue(this.__distanceX, props.delta.x * this.$options.dropSensitivity),\n this.getStateValueByMode(this.firstState.x),\n this.getStateValueByMode(this.lastState.x),\n );\n\n const absoluteDifferencesBetweenDistanceAndState = this.states.map((state) =>\n Math.abs(finalX - this.getStateValueByMode(state.x)),\n );\n const minimumDifference = Math.min(...absoluteDifferencesBetweenDistanceAndState);\n const closestIndex = absoluteDifferencesBetweenDistanceAndState.indexOf(minimumDifference);\n\n if (this.$options.fitBounds) {\n this.goTo(closestIndex);\n } else {\n if (this.$options.contain) {\n finalX = Math.min(this.containMinState, finalX);\n finalX = Math.max(this.containMaxState, finalX);\n }\n for (const item of this.$children.SliderItem) {\n item.move(finalX);\n }\n this.currentIndex = closestIndex;\n }\n }\n\n /**\n * Enable focus.\n */\n onWrapperFocus() {\n this.hasFocus = true;\n }\n\n /**\n * Disable focus.\n */\n onWrapperBlur() {\n this.hasFocus = false;\n }\n\n /**\n * Go prev or next when focus is on the wrapper and pressing arrow keys.\n */\n keyed({ LEFT, RIGHT, isDown }: KeyServiceProps) {\n if (this.hasFocus && isDown) {\n if (LEFT) {\n this.goPrev();\n } else if (RIGHT) {\n this.goNext();\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/Slider/SliderBtn.d.ts
CHANGED
|
@@ -17,13 +17,10 @@ export declare class SliderBtn<T extends BaseProps = BaseProps> extends Abstract
|
|
|
17
17
|
static config: BaseConfig;
|
|
18
18
|
/**
|
|
19
19
|
* Update attributes.
|
|
20
|
-
* @param {number} index
|
|
21
|
-
* @returns {void}
|
|
22
20
|
*/
|
|
23
21
|
update(index: number): void;
|
|
24
22
|
/**
|
|
25
23
|
* Go prev or next on click.
|
|
26
|
-
* @returns {void}
|
|
27
24
|
*/
|
|
28
25
|
onClick(): void;
|
|
29
26
|
}
|
package/Slider/SliderBtn.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { isDev } from "@studiometa/js-toolkit/utils";
|
|
2
1
|
import { AbstractSliderChild } from "./AbstractSliderChild.js";
|
|
3
2
|
class SliderBtn extends AbstractSliderChild {
|
|
4
3
|
/**
|
|
@@ -14,13 +13,11 @@ class SliderBtn extends AbstractSliderChild {
|
|
|
14
13
|
};
|
|
15
14
|
/**
|
|
16
15
|
* Update attributes.
|
|
17
|
-
* @param {number} index
|
|
18
|
-
* @returns {void}
|
|
19
16
|
*/
|
|
20
17
|
update(index) {
|
|
21
|
-
if (
|
|
22
|
-
|
|
23
|
-
`
|
|
18
|
+
if (this.$options.contain && !this.$parent.$options.contain) {
|
|
19
|
+
this.$warn(
|
|
20
|
+
`The contain option will only works if the parent Slider also has the contain option.`
|
|
24
21
|
);
|
|
25
22
|
}
|
|
26
23
|
const isContainMaxState = this.$options.contain && this.$parent.$options.contain && this.$parent.containMaxState === this.$parent.getStates()[index].x[this.$parent.$options.mode];
|
|
@@ -32,7 +29,6 @@ class SliderBtn extends AbstractSliderChild {
|
|
|
32
29
|
}
|
|
33
30
|
/**
|
|
34
31
|
* Go prev or next on click.
|
|
35
|
-
* @returns {void}
|
|
36
32
|
*/
|
|
37
33
|
onClick() {
|
|
38
34
|
const { prev, next } = this.$options;
|
package/Slider/SliderBtn.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/ui/Slider/SliderBtn.ts"],
|
|
4
|
-
"sourcesContent": ["import
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import type { BaseProps, BaseConfig } from '@studiometa/js-toolkit';\nimport { AbstractSliderChild } from './AbstractSliderChild.js';\n\nexport interface SliderBtnProps extends BaseProps {\n $options: {\n prev: boolean;\n next: boolean;\n contain: boolean;\n };\n}\n\n/**\n * SliderBtn class.\n */\nexport class SliderBtn<T extends BaseProps = BaseProps> extends AbstractSliderChild<\n T & SliderBtnProps\n> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n name: 'SliderBtn',\n options: {\n prev: Boolean,\n next: Boolean,\n contain: Boolean,\n },\n };\n\n /**\n * Update attributes.\n */\n update(index: number) {\n if (this.$options.contain && !this.$parent.$options.contain) {\n this.$warn(\n `The contain option will only works if the parent Slider also has the contain option.`,\n );\n }\n\n const isContainMaxState =\n this.$options.contain &&\n this.$parent.$options.contain &&\n this.$parent.containMaxState ===\n this.$parent.getStates()[index].x[this.$parent.$options.mode];\n\n if (\n (index === 0 && this.$options.prev) ||\n ((index === this.$parent.indexMax || isContainMaxState) && this.$options.next)\n ) {\n this.$el.setAttribute('disabled', '');\n } else {\n this.$el.removeAttribute('disabled');\n }\n }\n\n /**\n * Go prev or next on click.\n */\n onClick() {\n const { prev, next } = this.$options;\n\n if (prev) {\n this.$parent.goPrev();\n } else if (next) {\n this.$parent.goNext();\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,2BAA2B;AAa7B,MAAM,kBAAmD,oBAE9D;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,SAAqB;AAAA,IAC1B,MAAM;AAAA,IACN,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAe;AACpB,QAAI,KAAK,SAAS,WAAW,CAAC,KAAK,QAAQ,SAAS,SAAS;AAC3D,WAAK;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,UAAM,oBACJ,KAAK,SAAS,WACd,KAAK,QAAQ,SAAS,WACtB,KAAK,QAAQ,oBACX,KAAK,QAAQ,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,QAAQ,SAAS,IAAI;AAEhE,QACG,UAAU,KAAK,KAAK,SAAS,SAC5B,UAAU,KAAK,QAAQ,YAAY,sBAAsB,KAAK,SAAS,MACzE;AACA,WAAK,IAAI,aAAa,YAAY,EAAE;AAAA,IACtC,OAAO;AACL,WAAK,IAAI,gBAAgB,UAAU;AAAA,IACrC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU;AACR,UAAM,EAAE,MAAM,KAAK,IAAI,KAAK;AAE5B,QAAI,MAAM;AACR,WAAK,QAAQ,OAAO;AAAA,IACtB,WAAW,MAAM;AACf,WAAK,QAAQ,OAAO;AAAA,IACtB;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/Slider/SliderCount.d.ts
CHANGED
|
@@ -15,8 +15,6 @@ export declare class SliderCount<T extends BaseProps = BaseProps> extends Abstra
|
|
|
15
15
|
static config: BaseConfig;
|
|
16
16
|
/**
|
|
17
17
|
* Update the current counter indicator.
|
|
18
|
-
* @param {number} index The new active index.
|
|
19
|
-
* @returns {void}
|
|
20
18
|
*/
|
|
21
19
|
update(index: number): void;
|
|
22
20
|
}
|
package/Slider/SliderCount.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { domScheduler } from "@studiometa/js-toolkit/utils";
|
|
1
2
|
import { AbstractSliderChild } from "./AbstractSliderChild.js";
|
|
2
3
|
class SliderCount extends AbstractSliderChild {
|
|
3
4
|
/**
|
|
@@ -9,11 +10,11 @@ class SliderCount extends AbstractSliderChild {
|
|
|
9
10
|
};
|
|
10
11
|
/**
|
|
11
12
|
* Update the current counter indicator.
|
|
12
|
-
* @param {number} index The new active index.
|
|
13
|
-
* @returns {void}
|
|
14
13
|
*/
|
|
15
14
|
update(index) {
|
|
16
|
-
|
|
15
|
+
domScheduler.write(() => {
|
|
16
|
+
this.$refs.current.textContent = `${index + 1}`;
|
|
17
|
+
});
|
|
17
18
|
}
|
|
18
19
|
}
|
|
19
20
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/ui/Slider/SliderCount.ts"],
|
|
4
|
-
"sourcesContent": ["import type { BaseProps, BaseConfig } from '@studiometa/js-toolkit';\nimport { AbstractSliderChild } from './AbstractSliderChild.js';\n\nexport interface SliderCountProps extends BaseProps {\n $refs: {\n current: HTMLElement;\n };\n}\n\n/**\n * SliderCount class.\n */\nexport class SliderCount<T extends BaseProps = BaseProps> extends AbstractSliderChild<\n T & SliderCountProps\n> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n name: 'SliderCount',\n refs: ['current'],\n };\n\n /**\n * Update the current counter indicator.\n
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { domScheduler } from '@studiometa/js-toolkit/utils';\nimport type { BaseProps, BaseConfig } from '@studiometa/js-toolkit';\nimport { AbstractSliderChild } from './AbstractSliderChild.js';\n\nexport interface SliderCountProps extends BaseProps {\n $refs: {\n current: HTMLElement;\n };\n}\n\n/**\n * SliderCount class.\n */\nexport class SliderCount<T extends BaseProps = BaseProps> extends AbstractSliderChild<\n T & SliderCountProps\n> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n name: 'SliderCount',\n refs: ['current'],\n };\n\n /**\n * Update the current counter indicator.\n */\n update(index: number) {\n domScheduler.write(() => {\n this.$refs.current.textContent = `${index + 1}`;\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,oBAAoB;AAE7B,SAAS,2BAA2B;AAW7B,MAAM,oBAAqD,oBAEhE;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,SAAqB;AAAA,IAC1B,MAAM;AAAA,IACN,MAAM,CAAC,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAe;AACpB,iBAAa,MAAM,MAAM;AACvB,WAAK,MAAM,QAAQ,cAAc,GAAG,QAAQ,CAAC;AAAA,IAC/C,CAAC;AAAA,EACH;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/Slider/SliderDots.d.ts
CHANGED
|
@@ -16,7 +16,6 @@ export declare class SliderDots<T extends BaseProps = BaseProps> extends SliderD
|
|
|
16
16
|
static config: BaseConfig;
|
|
17
17
|
/**
|
|
18
18
|
* Get target.
|
|
19
|
-
* @returns {HTMLButtonElement[]}
|
|
20
19
|
*/
|
|
21
20
|
get target(): HTMLButtonElement[];
|
|
22
21
|
/**
|
|
@@ -25,8 +24,6 @@ export declare class SliderDots<T extends BaseProps = BaseProps> extends SliderD
|
|
|
25
24
|
currentIndex: number;
|
|
26
25
|
/**
|
|
27
26
|
* Update dots classes according to the new index.
|
|
28
|
-
* @param {number} index
|
|
29
|
-
* @returns {void}
|
|
30
27
|
*/
|
|
31
28
|
update(index: number): void;
|
|
32
29
|
/**
|
package/Slider/SliderDots.js
CHANGED
|
@@ -10,7 +10,6 @@ class SliderDots extends withTransition(AbstractSliderChild) {
|
|
|
10
10
|
};
|
|
11
11
|
/**
|
|
12
12
|
* Get target.
|
|
13
|
-
* @returns {HTMLButtonElement[]}
|
|
14
13
|
*/
|
|
15
14
|
get target() {
|
|
16
15
|
return this.$refs.dots;
|
|
@@ -18,16 +17,16 @@ class SliderDots extends withTransition(AbstractSliderChild) {
|
|
|
18
17
|
/**
|
|
19
18
|
* The current active index.
|
|
20
19
|
*/
|
|
21
|
-
currentIndex =
|
|
20
|
+
currentIndex = -1;
|
|
22
21
|
/**
|
|
23
22
|
* Update dots classes according to the new index.
|
|
24
|
-
* @param {number} index
|
|
25
|
-
* @returns {void}
|
|
26
23
|
*/
|
|
27
24
|
update(index) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
if (index !== this.currentIndex) {
|
|
26
|
+
this.leave(this.$refs.dots[this.currentIndex]);
|
|
27
|
+
this.enter(this.$refs.dots[index]);
|
|
28
|
+
this.currentIndex = index;
|
|
29
|
+
}
|
|
31
30
|
}
|
|
32
31
|
/**
|
|
33
32
|
* Go to the given index on dot click.
|