@agnos-ui/core 0.0.1-alpha.4 → 0.0.1-alpha.5
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/{accordion.d.ts → components/accordion/accordion.d.ts} +3 -4
- package/{accordion.js → components/accordion/accordion.js} +10 -9
- package/components/alert/alert.d.ts +32 -0
- package/components/alert/alert.js +23 -0
- package/{alert.d.ts → components/alert/common.d.ts} +17 -21
- package/{alert.js → components/alert/common.js} +12 -12
- package/{modal → components/modal}/modal.d.ts +28 -21
- package/{modal → components/modal}/modal.js +39 -13
- package/{pagination.d.ts → components/pagination/pagination.d.ts} +3 -3
- package/{pagination.js → components/pagination/pagination.js} +6 -4
- package/{progressbar.d.ts → components/progressbar/progressbar.d.ts} +2 -3
- package/{progressbar.js → components/progressbar/progressbar.js} +6 -6
- package/{rating.d.ts → components/rating/rating.d.ts} +2 -3
- package/{rating.js → components/rating/rating.js} +6 -9
- package/components/select/select.d.ts +337 -0
- package/components/select/select.js +266 -0
- package/{slider.d.ts → components/slider/slider.d.ts} +60 -14
- package/components/slider/slider.js +389 -0
- package/config.d.ts +9 -9
- package/config.js +3 -3
- package/index.d.ts +23 -13
- package/index.js +29 -13
- package/package.json +30 -3
- package/services/extendWidget.d.ts +23 -0
- package/{extendWidget.js → services/extendWidget.js} +8 -1
- package/services/floatingUI.d.ts +48 -0
- package/services/floatingUI.js +97 -0
- package/services/focustrack.js +1 -1
- package/services/intersection.d.ts +1 -1
- package/services/intersection.js +2 -2
- package/services/navManager.d.ts +83 -1
- package/services/navManager.js +153 -37
- package/services/portal.js +8 -4
- package/services/siblingsInert.d.ts +2 -1
- package/services/siblingsInert.js +2 -2
- package/{transitions → services/transitions}/baseTransitions.d.ts +1 -2
- package/{transitions → services/transitions}/baseTransitions.js +7 -10
- package/services/transitions/bootstrap/collapse.d.ts +2 -0
- package/services/transitions/bootstrap/fade.d.ts +1 -0
- package/services/transitions/bootstrap.d.ts +2 -0
- package/services/transitions/bootstrap.js +2 -0
- package/{transitions → services/transitions}/collapse.js +1 -1
- package/{transitions → services/transitions}/cssTransitions.js +2 -4
- package/{transitions → services/transitions}/simpleClassTransition.js +1 -1
- package/types.d.ts +37 -4
- package/types.js +1 -0
- package/{services/directiveUtils.js → utils/directive.js} +1 -1
- package/{services → utils/internal}/checks.d.ts +12 -0
- package/{services → utils/internal}/checks.js +12 -0
- package/utils/internal/dom.d.ts +13 -0
- package/utils/internal/dom.js +49 -0
- package/utils/internal/math.d.ts +5 -0
- package/utils/internal/math.js +13 -0
- package/utils/internal/promise.d.ts +31 -0
- package/utils/internal/promise.js +113 -0
- package/{modal → utils/internal}/scrollbars.js +1 -1
- package/utils/internal/textDirection.d.ts +1 -0
- package/utils/internal/textDirection.js +1 -0
- package/utils/internal/traversal.d.ts +54 -0
- package/utils/internal/traversal.js +105 -0
- package/{services → utils}/stores.d.ts +11 -35
- package/{services → utils}/stores.js +21 -19
- package/utils/writables.d.ts +26 -0
- package/utils/writables.js +66 -0
- package/extendWidget.d.ts +0 -3
- package/select.d.ts +0 -196
- package/select.js +0 -240
- package/services/index.d.ts +0 -9
- package/services/index.js +0 -9
- package/services/writables.d.ts +0 -8
- package/services/writables.js +0 -30
- package/slider.js +0 -289
- package/transitions/bootstrap/collapse.d.ts +0 -2
- package/transitions/bootstrap/fade.d.ts +0 -1
- package/transitions/bootstrap/index.d.ts +0 -2
- package/transitions/bootstrap/index.js +0 -2
- package/transitions/index.d.ts +0 -5
- package/transitions/index.js +0 -5
- package/transitions/utils.d.ts +0 -20
- package/transitions/utils.js +0 -83
- /package/{commonProps.d.ts → components/commonProps.d.ts} +0 -0
- /package/{commonProps.js → components/commonProps.js} +0 -0
- /package/{pagination.utils.d.ts → components/pagination/bootstrap.d.ts} +0 -0
- /package/{pagination.utils.js → components/pagination/bootstrap.js} +0 -0
- /package/{transitions → services/transitions}/bootstrap/collapse.js +0 -0
- /package/{transitions → services/transitions}/bootstrap/fade.js +0 -0
- /package/{transitions → services/transitions}/collapse.d.ts +0 -0
- /package/{transitions → services/transitions}/cssTransitions.d.ts +0 -0
- /package/{transitions → services/transitions}/simpleClassTransition.d.ts +0 -0
- /package/{services/directiveUtils.d.ts → utils/directive.d.ts} +0 -0
- /package/{utils.d.ts → utils/internal/func.d.ts} +0 -0
- /package/{utils.js → utils/internal/func.js} +0 -0
- /package/{services → utils/internal}/isFocusable.d.ts +0 -0
- /package/{services → utils/internal}/isFocusable.js +0 -0
- /package/{modal → utils/internal}/scrollbars.d.ts +0 -0
- /package/{services/sortUtils.d.ts → utils/internal/sort.d.ts} +0 -0
- /package/{services/sortUtils.js → utils/internal/sort.js} +0 -0
package/slider.js
DELETED
|
@@ -1,289 +0,0 @@
|
|
|
1
|
-
import { computed, derived, writable } from '@amadeus-it-group/tansu';
|
|
2
|
-
import { bindableDerived, createStoreDirective, writablesForProps } from './services';
|
|
3
|
-
import { stateStores } from './services/stores';
|
|
4
|
-
import { typeArray, typeBoolean, typeFunction, typeNumber } from './services/writables';
|
|
5
|
-
import { noop } from './utils';
|
|
6
|
-
const defaultSliderConfig = {
|
|
7
|
-
min: 0,
|
|
8
|
-
max: 100,
|
|
9
|
-
stepSize: 1,
|
|
10
|
-
readonly: false,
|
|
11
|
-
disabled: false,
|
|
12
|
-
vertical: false,
|
|
13
|
-
className: '',
|
|
14
|
-
onValuesChange: noop,
|
|
15
|
-
values: [0],
|
|
16
|
-
};
|
|
17
|
-
/**
|
|
18
|
-
* Returns a shallow copy of the default slider config.
|
|
19
|
-
* @returns a copy of the default config
|
|
20
|
-
*/
|
|
21
|
-
export function getSliderDefaultConfig() {
|
|
22
|
-
return { ...defaultSliderConfig };
|
|
23
|
-
}
|
|
24
|
-
const configValidator = {
|
|
25
|
-
min: typeNumber,
|
|
26
|
-
max: typeNumber,
|
|
27
|
-
stepSize: typeNumber,
|
|
28
|
-
readonly: typeBoolean,
|
|
29
|
-
disabled: typeBoolean,
|
|
30
|
-
vertical: typeBoolean,
|
|
31
|
-
onValuesChange: typeFunction,
|
|
32
|
-
values: typeArray,
|
|
33
|
-
};
|
|
34
|
-
/**
|
|
35
|
-
* Create a slider widget with given config props
|
|
36
|
-
* @param config - an optional slider config
|
|
37
|
-
* @returns a SliderWidget
|
|
38
|
-
*/
|
|
39
|
-
export function createSlider(config) {
|
|
40
|
-
const [{
|
|
41
|
-
// dirty inputs that need adjustment:
|
|
42
|
-
min$: _dirtyMinimum$, max$: _dirtyMaximum$, stepSize$: _dirtyStepSize$, values$: _dirtyValues$, onValuesChange$, ...stateProps }, patch,] = writablesForProps(defaultSliderConfig, config, configValidator);
|
|
43
|
-
const { vertical$, disabled$, readonly$ } = stateProps;
|
|
44
|
-
let _prevCoordinate = -1;
|
|
45
|
-
// clean inputs adjustment
|
|
46
|
-
const min$ = computed(() => {
|
|
47
|
-
if (_dirtyMinimum$() === _dirtyMaximum$())
|
|
48
|
-
return defaultSliderConfig.min;
|
|
49
|
-
return Math.min(_dirtyMinimum$(), _dirtyMaximum$());
|
|
50
|
-
});
|
|
51
|
-
const max$ = computed(() => {
|
|
52
|
-
if (_dirtyMinimum$() === _dirtyMaximum$())
|
|
53
|
-
return defaultSliderConfig.max;
|
|
54
|
-
return Math.max(_dirtyMinimum$(), _dirtyMaximum$());
|
|
55
|
-
});
|
|
56
|
-
const stepSize$ = computed(() => _dirtyStepSize$() || defaultSliderConfig.stepSize);
|
|
57
|
-
const values$ = bindableDerived(onValuesChange$, [_dirtyValues$], ([dirtyValues]) => dirtyValues.map((dv) => computeCleanValue(dv)), (a, b) => a.every((val, index) => val === b[index]));
|
|
58
|
-
// computed
|
|
59
|
-
const { directive: sliderDirective, element$: sliderDom$ } = createStoreDirective();
|
|
60
|
-
const { directive: minLabelDirective, element$: minLabelDom$ } = createStoreDirective();
|
|
61
|
-
const { directive: maxLabelDirective, element$: maxLabelDom$ } = createStoreDirective();
|
|
62
|
-
const sliderResized$ = derived(sliderDom$, (sliderDom, set) => {
|
|
63
|
-
if (!sliderDom) {
|
|
64
|
-
set({});
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
const resizeObserver = new ResizeObserver(() => {
|
|
68
|
-
set({});
|
|
69
|
-
});
|
|
70
|
-
resizeObserver.observe(sliderDom);
|
|
71
|
-
return () => resizeObserver.disconnect();
|
|
72
|
-
}, {});
|
|
73
|
-
const updateSliderSize$ = writable({});
|
|
74
|
-
const sliderDomRect$ = computed(() => {
|
|
75
|
-
sliderResized$();
|
|
76
|
-
updateSliderSize$();
|
|
77
|
-
return sliderDom$()?.getBoundingClientRect() ?? {};
|
|
78
|
-
}, {
|
|
79
|
-
equal: Object.is,
|
|
80
|
-
});
|
|
81
|
-
const minLabelDomRect$ = computed(() => {
|
|
82
|
-
sliderResized$();
|
|
83
|
-
updateSliderSize$();
|
|
84
|
-
return minLabelDom$()?.getBoundingClientRect() ?? {};
|
|
85
|
-
}, {
|
|
86
|
-
equal: (a, b) => Object.is(a, b),
|
|
87
|
-
});
|
|
88
|
-
const maxLabelDomRect$ = computed(() => {
|
|
89
|
-
sliderResized$();
|
|
90
|
-
updateSliderSize$();
|
|
91
|
-
return maxLabelDom$()?.getBoundingClientRect() ?? {};
|
|
92
|
-
}, {
|
|
93
|
-
equal: (a, b) => Object.is(a, b),
|
|
94
|
-
});
|
|
95
|
-
const sliderDomRectOffset$ = computed(() => (vertical$() ? sliderDomRect$().top : sliderDomRect$().left));
|
|
96
|
-
const sliderDomRectSize$ = computed(() => (vertical$() ? sliderDomRect$().height : sliderDomRect$().width));
|
|
97
|
-
const sortedValues$ = computed(() => [...values$()].sort((a, b) => a - b));
|
|
98
|
-
const sortedHandles$ = computed(() => values$()
|
|
99
|
-
.map((val, index) => {
|
|
100
|
-
return { id: index, value: val };
|
|
101
|
-
})
|
|
102
|
-
.sort((a, b) => a.value - b.value));
|
|
103
|
-
const valuesPercent$ = computed(() => values$().map((val) => percentCompute(val)));
|
|
104
|
-
const sortedValuesPercent$ = computed(() => [...valuesPercent$()].sort((a, b) => a - b));
|
|
105
|
-
const minLabelWidth$ = computed(() => (minLabelDomRect$().width / sliderDomRectSize$()) * 100);
|
|
106
|
-
const maxLabelWidth$ = computed(() => (maxLabelDomRect$().width / sliderDomRectSize$()) * 100);
|
|
107
|
-
const minValueLabelDisplay$ = computed(() => (valuesPercent$().some((percent) => percent < minLabelWidth$() + 1) ? 'hidden' : 'visible'));
|
|
108
|
-
const maxValueLabelDisplay$ = computed(() => (valuesPercent$().some((percent) => percent > 100 - maxLabelWidth$() - 1) ? 'hidden' : 'visible'));
|
|
109
|
-
// TODO define the intersection value
|
|
110
|
-
const combinedLabelDisplay$ = computed(() => (values$().length == 2 && Math.abs(values$()[0] - values$()[1]) < 10 ? 'visible' : 'hidden'));
|
|
111
|
-
const isInteractable$ = computed(() => !disabled$() && !readonly$());
|
|
112
|
-
const combinedLabelPositionLeft$ = computed(() => vertical$() || sortedValuesPercent$().length != 2 ? 0 : (sortedValuesPercent$()[0] + sortedValuesPercent$()[1]) / 2);
|
|
113
|
-
const combinedLabelPositionTop$ = computed(() => vertical$() && sortedValuesPercent$().length == 2 ? 100 - (sortedValuesPercent$()[0] + sortedValuesPercent$()[1]) / 2 : 0);
|
|
114
|
-
// const handleTooltipLeft$ = computed(() => (vertical$() ? Array(valuesPercent$().length).fill(0) : valuesPercent$()));
|
|
115
|
-
// const handleTooltipTop$ = computed(() => (vertical$() ? valuesPercent$().map((vp) => 100 - vp) : Array(valuesPercent$().length).fill(0)));
|
|
116
|
-
const handleDisplayOptions$ = computed(() => valuesPercent$().map((vp) => {
|
|
117
|
-
return {
|
|
118
|
-
left: vertical$() ? 0 : vp,
|
|
119
|
-
top: vertical$() ? 100 - vp : 0,
|
|
120
|
-
};
|
|
121
|
-
}));
|
|
122
|
-
const progressDisplayOptions$ = computed(() => {
|
|
123
|
-
if (sortedValuesPercent$().length === 1) {
|
|
124
|
-
return [
|
|
125
|
-
{
|
|
126
|
-
left: 0,
|
|
127
|
-
bottom: 0,
|
|
128
|
-
width: vertical$() ? 100 : sortedValuesPercent$()[0],
|
|
129
|
-
height: vertical$() ? sortedValuesPercent$()[0] : 100,
|
|
130
|
-
},
|
|
131
|
-
];
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
return sortedValuesPercent$()
|
|
135
|
-
.map((svp, index, array) => {
|
|
136
|
-
return {
|
|
137
|
-
left: vertical$() ? 0 : svp,
|
|
138
|
-
bottom: vertical$() ? svp : 0,
|
|
139
|
-
width: vertical$() ? 100 : index === array.length - 1 ? svp : array[index + 1] - svp,
|
|
140
|
-
height: vertical$() ? (index === array.length - 1 ? svp : array[index + 1] - svp) : 100,
|
|
141
|
-
};
|
|
142
|
-
})
|
|
143
|
-
.slice(0, sortedValuesPercent$().length - 1);
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
|
-
// functions
|
|
147
|
-
const computeCleanValue = (value) => {
|
|
148
|
-
if (value >= max$()) {
|
|
149
|
-
return max$();
|
|
150
|
-
}
|
|
151
|
-
else if (value <= min$()) {
|
|
152
|
-
return min$();
|
|
153
|
-
}
|
|
154
|
-
const indexMin = Math.floor(value / stepSize$());
|
|
155
|
-
return value % stepSize$() < stepSize$() / 2 ? indexMin * stepSize$() : (indexMin + 1) * stepSize$();
|
|
156
|
-
};
|
|
157
|
-
const percentCompute = (value) => {
|
|
158
|
-
return ((value - min$()) * 100) / (max$() - min$());
|
|
159
|
-
};
|
|
160
|
-
const getClosestSliderHandle = (clickedPercent) => {
|
|
161
|
-
if (values$().length === 1) {
|
|
162
|
-
return 0;
|
|
163
|
-
}
|
|
164
|
-
const closestBigger = sortedValues$().find((sv) => sv > clickedPercent * 100);
|
|
165
|
-
const closestBiggerIndex = closestBigger ? sortedValues$().indexOf(closestBigger) : sortedValues$().length - 1;
|
|
166
|
-
const midPoint = sortedValues$()[closestBiggerIndex - 1] + (sortedValues$()[closestBiggerIndex] - sortedValues$()[closestBiggerIndex - 1]) / 2;
|
|
167
|
-
let closestValue;
|
|
168
|
-
if (clickedPercent * 100 <= midPoint) {
|
|
169
|
-
closestValue = sortedValues$()[closestBiggerIndex - 1];
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
closestValue = sortedValues$()[closestBiggerIndex];
|
|
173
|
-
}
|
|
174
|
-
return values$().indexOf(closestValue);
|
|
175
|
-
};
|
|
176
|
-
const adjustCoordinate = (clickedCoordinate, handleNumber) => {
|
|
177
|
-
if (isInteractable$()) {
|
|
178
|
-
const clickedPercent = vertical$()
|
|
179
|
-
? (sliderDomRectSize$() - clickedCoordinate + sliderDomRectOffset$()) / sliderDomRectSize$()
|
|
180
|
-
: (clickedCoordinate - sliderDomRectOffset$()) / sliderDomRectSize$();
|
|
181
|
-
const derivedHandleIndex = handleNumber ?? getClosestSliderHandle(clickedPercent);
|
|
182
|
-
const newValue = clickedPercent * (max$() - min$()) + min$();
|
|
183
|
-
_dirtyValues$.update((dh) => {
|
|
184
|
-
dh = [...dh];
|
|
185
|
-
dh[derivedHandleIndex] = newValue;
|
|
186
|
-
return dh;
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
};
|
|
190
|
-
return {
|
|
191
|
-
...stateStores({
|
|
192
|
-
min$,
|
|
193
|
-
max$,
|
|
194
|
-
stepSize$,
|
|
195
|
-
values$,
|
|
196
|
-
sortedValues$,
|
|
197
|
-
sortedHandles$,
|
|
198
|
-
minValueLabelDisplay$,
|
|
199
|
-
maxValueLabelDisplay$,
|
|
200
|
-
combinedLabelDisplay$,
|
|
201
|
-
isInteractable$,
|
|
202
|
-
combinedLabelPositionLeft$,
|
|
203
|
-
combinedLabelPositionTop$,
|
|
204
|
-
progressDisplayOptions$,
|
|
205
|
-
handleDisplayOptions$,
|
|
206
|
-
...stateProps,
|
|
207
|
-
}),
|
|
208
|
-
patch,
|
|
209
|
-
api: {},
|
|
210
|
-
directives: {
|
|
211
|
-
sliderDirective,
|
|
212
|
-
minLabelDirective,
|
|
213
|
-
maxLabelDirective,
|
|
214
|
-
},
|
|
215
|
-
actions: {
|
|
216
|
-
click(event) {
|
|
217
|
-
updateSliderSize$.set({});
|
|
218
|
-
adjustCoordinate(vertical$() ? event.clientY : event.clientX);
|
|
219
|
-
},
|
|
220
|
-
keydown(event, handleIndex) {
|
|
221
|
-
const { key } = event;
|
|
222
|
-
if (isInteractable$()) {
|
|
223
|
-
switch (key) {
|
|
224
|
-
case 'ArrowDown':
|
|
225
|
-
case 'ArrowLeft':
|
|
226
|
-
_dirtyValues$.update((value) => {
|
|
227
|
-
value = [...value];
|
|
228
|
-
value[handleIndex] = values$()[handleIndex] - stepSize$();
|
|
229
|
-
return value;
|
|
230
|
-
});
|
|
231
|
-
break;
|
|
232
|
-
case 'ArrowUp':
|
|
233
|
-
case 'ArrowRight':
|
|
234
|
-
_dirtyValues$.update((value) => {
|
|
235
|
-
value = [...value];
|
|
236
|
-
value[handleIndex] = values$()[handleIndex] + stepSize$();
|
|
237
|
-
return value;
|
|
238
|
-
});
|
|
239
|
-
break;
|
|
240
|
-
case 'Home':
|
|
241
|
-
_dirtyValues$.update((value) => {
|
|
242
|
-
value = [...value];
|
|
243
|
-
value[handleIndex] = min$();
|
|
244
|
-
return value;
|
|
245
|
-
});
|
|
246
|
-
break;
|
|
247
|
-
case 'End':
|
|
248
|
-
_dirtyValues$.update((value) => {
|
|
249
|
-
value = [...value];
|
|
250
|
-
value[handleIndex] = max$();
|
|
251
|
-
return value;
|
|
252
|
-
});
|
|
253
|
-
break;
|
|
254
|
-
case 'PageUp':
|
|
255
|
-
// TODO it is optional in accessibility guidelines, so define the skip value for steps and write unit test
|
|
256
|
-
break;
|
|
257
|
-
case 'PageDown':
|
|
258
|
-
// TODO it is optional in accessibility guidelines, so define the skip value for steps and write unit test
|
|
259
|
-
break;
|
|
260
|
-
default:
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
event.preventDefault();
|
|
264
|
-
event.stopPropagation();
|
|
265
|
-
}
|
|
266
|
-
},
|
|
267
|
-
mouseDown(event, handleId) {
|
|
268
|
-
event.preventDefault();
|
|
269
|
-
const handleDrag = (e) => {
|
|
270
|
-
e.preventDefault();
|
|
271
|
-
const newCoord = vertical$() ? e.clientY : e.clientX;
|
|
272
|
-
event.target.focus();
|
|
273
|
-
if (_prevCoordinate !== newCoord) {
|
|
274
|
-
_prevCoordinate = newCoord;
|
|
275
|
-
adjustCoordinate(newCoord, handleId);
|
|
276
|
-
}
|
|
277
|
-
};
|
|
278
|
-
if (isInteractable$()) {
|
|
279
|
-
event.target.focus();
|
|
280
|
-
document.addEventListener('mousemove', handleDrag);
|
|
281
|
-
// TODO mouse up doesn't work outside the handle area
|
|
282
|
-
document.addEventListener('mouseup', () => {
|
|
283
|
-
document.removeEventListener('mousemove', handleDrag);
|
|
284
|
-
}, { once: true });
|
|
285
|
-
}
|
|
286
|
-
},
|
|
287
|
-
},
|
|
288
|
-
};
|
|
289
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const fadeTransition: import("..").TransitionFn;
|
package/transitions/index.d.ts
DELETED
package/transitions/index.js
DELETED
package/transitions/utils.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { ReadableSignal } from '@amadeus-it-group/tansu';
|
|
2
|
-
export declare const promiseFromStore: <T>(store: ReadableSignal<T>, condition?: (value: T) => boolean) => {
|
|
3
|
-
promise: Promise<T>;
|
|
4
|
-
unsubscribe(): void;
|
|
5
|
-
};
|
|
6
|
-
export declare const promiseFromEvent: (element: EventTarget, event: string) => {
|
|
7
|
-
promise: Promise<Event>;
|
|
8
|
-
unsubscribe(): void;
|
|
9
|
-
};
|
|
10
|
-
export declare const promiseFromTimeout: (delay: number) => {
|
|
11
|
-
promise: Promise<void>;
|
|
12
|
-
unsubscribe(): void;
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* Launch a reflow using a call to the provided html element getBoudingClientRect
|
|
16
|
-
* @param element the html element
|
|
17
|
-
*/
|
|
18
|
-
export declare function reflow(element?: HTMLElement): void;
|
|
19
|
-
export declare const addClasses: (element: HTMLElement, classes?: string[]) => void;
|
|
20
|
-
export declare const removeClasses: (element: HTMLElement, classes?: string[]) => void;
|
package/transitions/utils.js
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
const noop = () => {
|
|
2
|
-
/* nothing to do*/
|
|
3
|
-
};
|
|
4
|
-
const truthyValue = (value) => !!value;
|
|
5
|
-
export const promiseFromStore = (store, condition = truthyValue) => {
|
|
6
|
-
let resolve;
|
|
7
|
-
const promise = new Promise((r) => (resolve = r));
|
|
8
|
-
let unsubscribe = () => {
|
|
9
|
-
storeUnsubscribe();
|
|
10
|
-
unsubscribe = noop;
|
|
11
|
-
};
|
|
12
|
-
let storeUnsubscribe = noop;
|
|
13
|
-
storeUnsubscribe = store.subscribe((value) => {
|
|
14
|
-
if (condition(value)) {
|
|
15
|
-
resolve(value);
|
|
16
|
-
unsubscribe();
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
if (unsubscribe === noop) {
|
|
20
|
-
storeUnsubscribe();
|
|
21
|
-
}
|
|
22
|
-
return {
|
|
23
|
-
promise,
|
|
24
|
-
unsubscribe() {
|
|
25
|
-
unsubscribe();
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
export const promiseFromEvent = (element, event) => {
|
|
30
|
-
let resolve;
|
|
31
|
-
const promise = new Promise((r) => (resolve = r));
|
|
32
|
-
let unsubscribe = () => {
|
|
33
|
-
element.removeEventListener(event, eventListener);
|
|
34
|
-
unsubscribe = noop;
|
|
35
|
-
};
|
|
36
|
-
const eventListener = (event) => {
|
|
37
|
-
if (event.target === element) {
|
|
38
|
-
resolve(event);
|
|
39
|
-
unsubscribe();
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
element.addEventListener(event, eventListener);
|
|
43
|
-
return {
|
|
44
|
-
promise,
|
|
45
|
-
unsubscribe() {
|
|
46
|
-
unsubscribe();
|
|
47
|
-
},
|
|
48
|
-
};
|
|
49
|
-
};
|
|
50
|
-
export const promiseFromTimeout = (delay) => {
|
|
51
|
-
let timeout;
|
|
52
|
-
return {
|
|
53
|
-
promise: new Promise((r) => {
|
|
54
|
-
timeout = setTimeout(() => {
|
|
55
|
-
timeout = undefined;
|
|
56
|
-
r();
|
|
57
|
-
}, delay);
|
|
58
|
-
}),
|
|
59
|
-
unsubscribe() {
|
|
60
|
-
if (timeout) {
|
|
61
|
-
clearTimeout(timeout);
|
|
62
|
-
timeout = undefined;
|
|
63
|
-
}
|
|
64
|
-
},
|
|
65
|
-
};
|
|
66
|
-
};
|
|
67
|
-
/**
|
|
68
|
-
* Launch a reflow using a call to the provided html element getBoudingClientRect
|
|
69
|
-
* @param element the html element
|
|
70
|
-
*/
|
|
71
|
-
export function reflow(element = document.body) {
|
|
72
|
-
element.getBoundingClientRect();
|
|
73
|
-
}
|
|
74
|
-
export const addClasses = (element, classes) => {
|
|
75
|
-
if (classes && classes.length > 0) {
|
|
76
|
-
element.classList.add(...classes);
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
export const removeClasses = (element, classes) => {
|
|
80
|
-
if (classes && classes.length > 0) {
|
|
81
|
-
element.classList.remove(...classes);
|
|
82
|
-
}
|
|
83
|
-
};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|