@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.
Files changed (97) hide show
  1. package/{accordion.d.ts → components/accordion/accordion.d.ts} +3 -4
  2. package/{accordion.js → components/accordion/accordion.js} +10 -9
  3. package/components/alert/alert.d.ts +32 -0
  4. package/components/alert/alert.js +23 -0
  5. package/{alert.d.ts → components/alert/common.d.ts} +17 -21
  6. package/{alert.js → components/alert/common.js} +12 -12
  7. package/{modal → components/modal}/modal.d.ts +28 -21
  8. package/{modal → components/modal}/modal.js +39 -13
  9. package/{pagination.d.ts → components/pagination/pagination.d.ts} +3 -3
  10. package/{pagination.js → components/pagination/pagination.js} +6 -4
  11. package/{progressbar.d.ts → components/progressbar/progressbar.d.ts} +2 -3
  12. package/{progressbar.js → components/progressbar/progressbar.js} +6 -6
  13. package/{rating.d.ts → components/rating/rating.d.ts} +2 -3
  14. package/{rating.js → components/rating/rating.js} +6 -9
  15. package/components/select/select.d.ts +337 -0
  16. package/components/select/select.js +266 -0
  17. package/{slider.d.ts → components/slider/slider.d.ts} +60 -14
  18. package/components/slider/slider.js +389 -0
  19. package/config.d.ts +9 -9
  20. package/config.js +3 -3
  21. package/index.d.ts +23 -13
  22. package/index.js +29 -13
  23. package/package.json +30 -3
  24. package/services/extendWidget.d.ts +23 -0
  25. package/{extendWidget.js → services/extendWidget.js} +8 -1
  26. package/services/floatingUI.d.ts +48 -0
  27. package/services/floatingUI.js +97 -0
  28. package/services/focustrack.js +1 -1
  29. package/services/intersection.d.ts +1 -1
  30. package/services/intersection.js +2 -2
  31. package/services/navManager.d.ts +83 -1
  32. package/services/navManager.js +153 -37
  33. package/services/portal.js +8 -4
  34. package/services/siblingsInert.d.ts +2 -1
  35. package/services/siblingsInert.js +2 -2
  36. package/{transitions → services/transitions}/baseTransitions.d.ts +1 -2
  37. package/{transitions → services/transitions}/baseTransitions.js +7 -10
  38. package/services/transitions/bootstrap/collapse.d.ts +2 -0
  39. package/services/transitions/bootstrap/fade.d.ts +1 -0
  40. package/services/transitions/bootstrap.d.ts +2 -0
  41. package/services/transitions/bootstrap.js +2 -0
  42. package/{transitions → services/transitions}/collapse.js +1 -1
  43. package/{transitions → services/transitions}/cssTransitions.js +2 -4
  44. package/{transitions → services/transitions}/simpleClassTransition.js +1 -1
  45. package/types.d.ts +37 -4
  46. package/types.js +1 -0
  47. package/{services/directiveUtils.js → utils/directive.js} +1 -1
  48. package/{services → utils/internal}/checks.d.ts +12 -0
  49. package/{services → utils/internal}/checks.js +12 -0
  50. package/utils/internal/dom.d.ts +13 -0
  51. package/utils/internal/dom.js +49 -0
  52. package/utils/internal/math.d.ts +5 -0
  53. package/utils/internal/math.js +13 -0
  54. package/utils/internal/promise.d.ts +31 -0
  55. package/utils/internal/promise.js +113 -0
  56. package/{modal → utils/internal}/scrollbars.js +1 -1
  57. package/utils/internal/textDirection.d.ts +1 -0
  58. package/utils/internal/textDirection.js +1 -0
  59. package/utils/internal/traversal.d.ts +54 -0
  60. package/utils/internal/traversal.js +105 -0
  61. package/{services → utils}/stores.d.ts +11 -35
  62. package/{services → utils}/stores.js +21 -19
  63. package/utils/writables.d.ts +26 -0
  64. package/utils/writables.js +66 -0
  65. package/extendWidget.d.ts +0 -3
  66. package/select.d.ts +0 -196
  67. package/select.js +0 -240
  68. package/services/index.d.ts +0 -9
  69. package/services/index.js +0 -9
  70. package/services/writables.d.ts +0 -8
  71. package/services/writables.js +0 -30
  72. package/slider.js +0 -289
  73. package/transitions/bootstrap/collapse.d.ts +0 -2
  74. package/transitions/bootstrap/fade.d.ts +0 -1
  75. package/transitions/bootstrap/index.d.ts +0 -2
  76. package/transitions/bootstrap/index.js +0 -2
  77. package/transitions/index.d.ts +0 -5
  78. package/transitions/index.js +0 -5
  79. package/transitions/utils.d.ts +0 -20
  80. package/transitions/utils.js +0 -83
  81. /package/{commonProps.d.ts → components/commonProps.d.ts} +0 -0
  82. /package/{commonProps.js → components/commonProps.js} +0 -0
  83. /package/{pagination.utils.d.ts → components/pagination/bootstrap.d.ts} +0 -0
  84. /package/{pagination.utils.js → components/pagination/bootstrap.js} +0 -0
  85. /package/{transitions → services/transitions}/bootstrap/collapse.js +0 -0
  86. /package/{transitions → services/transitions}/bootstrap/fade.js +0 -0
  87. /package/{transitions → services/transitions}/collapse.d.ts +0 -0
  88. /package/{transitions → services/transitions}/cssTransitions.d.ts +0 -0
  89. /package/{transitions → services/transitions}/simpleClassTransition.d.ts +0 -0
  90. /package/{services/directiveUtils.d.ts → utils/directive.d.ts} +0 -0
  91. /package/{utils.d.ts → utils/internal/func.d.ts} +0 -0
  92. /package/{utils.js → utils/internal/func.js} +0 -0
  93. /package/{services → utils/internal}/isFocusable.d.ts +0 -0
  94. /package/{services → utils/internal}/isFocusable.js +0 -0
  95. /package/{modal → utils/internal}/scrollbars.d.ts +0 -0
  96. /package/{services/sortUtils.d.ts → utils/internal/sort.d.ts} +0 -0
  97. /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,2 +0,0 @@
1
- export declare const collapseVerticalTransition: import("..").TransitionFn;
2
- export declare const collapseHorizontalTransition: import("..").TransitionFn;
@@ -1 +0,0 @@
1
- export declare const fadeTransition: import("..").TransitionFn;
@@ -1,2 +0,0 @@
1
- export * from './collapse';
2
- export * from './fade';
@@ -1,2 +0,0 @@
1
- export * from './collapse';
2
- export * from './fade';
@@ -1,5 +0,0 @@
1
- export * from './baseTransitions';
2
- export * from './cssTransitions';
3
- export * from './simpleClassTransition';
4
- import * as bootstrap from './bootstrap';
5
- export { bootstrap };
@@ -1,5 +0,0 @@
1
- export * from './baseTransitions';
2
- export * from './cssTransitions';
3
- export * from './simpleClassTransition';
4
- import * as bootstrap from './bootstrap';
5
- export { bootstrap };
@@ -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;
@@ -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