@design-factory/core 21.1.0-next.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/README.md +3 -0
- package/accordion-B0vs8JWM.cjs +314 -0
- package/accordion-D9ba0XYq.js +315 -0
- package/alert-AhaliJ17.cjs +9 -0
- package/alert-Cb9FhbFQ.js +10 -0
- package/collapse-Bn8iHKrd.js +95 -0
- package/collapse-BnWw4Hnc.cjs +94 -0
- package/common-B5jS-Ih_.cjs +73 -0
- package/common-DFyZvkII.js +74 -0
- package/components/accordion/accordion.d.ts +333 -0
- package/components/accordion/index.cjs +7 -0
- package/components/accordion/index.d.ts +1 -0
- package/components/accordion/index.js +7 -0
- package/components/alert/alert.d.ts +37 -0
- package/components/alert/common.d.ts +138 -0
- package/components/alert/index.cjs +5 -0
- package/components/alert/index.d.ts +1 -0
- package/components/alert/index.js +5 -0
- package/components/carousel/carousel.d.ts +247 -0
- package/components/carousel/index.cjs +292 -0
- package/components/carousel/index.d.ts +1 -0
- package/components/carousel/index.js +292 -0
- package/components/collapse/collapse.d.ts +135 -0
- package/components/collapse/index.cjs +5 -0
- package/components/collapse/index.d.ts +1 -0
- package/components/collapse/index.js +5 -0
- package/components/commonProps.d.ts +11 -0
- package/components/drawer/drawer.d.ts +279 -0
- package/components/drawer/index.cjs +5 -0
- package/components/drawer/index.d.ts +1 -0
- package/components/drawer/index.js +5 -0
- package/components/modal/index.cjs +8 -0
- package/components/modal/index.d.ts +1 -0
- package/components/modal/index.js +8 -0
- package/components/modal/modal.d.ts +245 -0
- package/components/pagination/index.cjs +5 -0
- package/components/pagination/index.d.ts +1 -0
- package/components/pagination/index.js +5 -0
- package/components/pagination/pagination.d.ts +313 -0
- package/components/progressbar/index.cjs +5 -0
- package/components/progressbar/index.d.ts +1 -0
- package/components/progressbar/index.js +5 -0
- package/components/progressbar/progressbar.d.ts +91 -0
- package/components/rating/index.cjs +5 -0
- package/components/rating/index.d.ts +1 -0
- package/components/rating/index.js +5 -0
- package/components/rating/rating.d.ts +191 -0
- package/components/slider/index.cjs +5 -0
- package/components/slider/index.d.ts +1 -0
- package/components/slider/index.js +5 -0
- package/components/slider/slider-utils.d.ts +25 -0
- package/components/slider/slider.d.ts +383 -0
- package/components/toast/index.cjs +7 -0
- package/components/toast/index.d.ts +2 -0
- package/components/toast/index.js +7 -0
- package/components/toast/toast.d.ts +66 -0
- package/components/toast/toaster.d.ts +128 -0
- package/components/tree/index.cjs +5 -0
- package/components/tree/index.d.ts +1 -0
- package/components/tree/index.js +5 -0
- package/components/tree/tree.d.ts +143 -0
- package/config.cjs +36 -0
- package/config.d.ts +117 -0
- package/config.js +36 -0
- package/directive-CNNSo5Yn.js +524 -0
- package/directive-DyTodNPd.cjs +523 -0
- package/drawer-BIIfJa0F.js +329 -0
- package/drawer-C8ojtwIn.cjs +328 -0
- package/index.cjs +134 -0
- package/index.d.ts +29 -0
- package/index.js +134 -0
- package/isFocusable-Ckwus82R.js +32 -0
- package/isFocusable-DfzDLeAN.cjs +31 -0
- package/modal-C13G13jV.js +253 -0
- package/modal-DWv0VqiG.cjs +252 -0
- package/package.json +56 -0
- package/pagination-BLVa1UsZ.cjs +254 -0
- package/pagination-BQWusWXN.js +255 -0
- package/progressbar-RopgvVeA.cjs +86 -0
- package/progressbar-S1pNn5rM.js +87 -0
- package/promise-CxCD3NYv.cjs +118 -0
- package/promise-D-RZVPuv.js +119 -0
- package/rating-DWgGgwk3.js +184 -0
- package/rating-DZ3OQgtt.cjs +183 -0
- package/scrollbars-CT87iv_6.cjs +30 -0
- package/scrollbars-CcxSrnCx.js +31 -0
- package/services/extendWidget.cjs +41 -0
- package/services/extendWidget.d.ts +31 -0
- package/services/extendWidget.js +41 -0
- package/services/floatingUI.cjs +111 -0
- package/services/floatingUI.d.ts +76 -0
- package/services/floatingUI.js +111 -0
- package/services/focusElement.cjs +46 -0
- package/services/focusElement.d.ts +9 -0
- package/services/focusElement.js +46 -0
- package/services/focustrack.cjs +47 -0
- package/services/focustrack.d.ts +40 -0
- package/services/focustrack.js +47 -0
- package/services/hash.cjs +15 -0
- package/services/hash.d.ts +3 -0
- package/services/hash.js +15 -0
- package/services/intersection.cjs +53 -0
- package/services/intersection.d.ts +30 -0
- package/services/intersection.js +53 -0
- package/services/matchMedia.cjs +14 -0
- package/services/matchMedia.d.ts +8 -0
- package/services/matchMedia.js +14 -0
- package/services/navManager.cjs +166 -0
- package/services/navManager.d.ts +144 -0
- package/services/navManager.js +166 -0
- package/services/pointerdownPosition.cjs +60 -0
- package/services/pointerdownPosition.d.ts +42 -0
- package/services/pointerdownPosition.js +60 -0
- package/services/portal.cjs +42 -0
- package/services/portal.d.ts +16 -0
- package/services/portal.js +42 -0
- package/services/resizeObserver.cjs +54 -0
- package/services/resizeObserver.d.ts +18 -0
- package/services/resizeObserver.js +54 -0
- package/services/siblingsInert.cjs +44 -0
- package/services/siblingsInert.d.ts +16 -0
- package/services/siblingsInert.js +44 -0
- package/services/transitions/baseTransitions.cjs +186 -0
- package/services/transitions/baseTransitions.d.ts +166 -0
- package/services/transitions/baseTransitions.js +186 -0
- package/services/transitions/collapse.cjs +40 -0
- package/services/transitions/collapse.d.ts +49 -0
- package/services/transitions/collapse.js +40 -0
- package/services/transitions/cssTransitions.cjs +32 -0
- package/services/transitions/cssTransitions.d.ts +25 -0
- package/services/transitions/cssTransitions.js +32 -0
- package/services/transitions/simpleClassTransition.cjs +37 -0
- package/services/transitions/simpleClassTransition.d.ts +47 -0
- package/services/transitions/simpleClassTransition.js +37 -0
- package/slider-Br_Qiopx.js +808 -0
- package/slider-pgDq1V5r.cjs +807 -0
- package/textDirection-cNgt24LJ.js +4 -0
- package/textDirection-zqcZ5-eK.cjs +3 -0
- package/toaster-BUBzFeJM.js +162 -0
- package/toaster-Dlube4Ya.cjs +161 -0
- package/tree-Chcy4ulJ.cjs +228 -0
- package/tree-vD7ZkV8Z.js +229 -0
- package/types.cjs +6 -0
- package/types.d.ts +246 -0
- package/types.js +6 -0
- package/utils/directive.cjs +28 -0
- package/utils/directive.d.ts +352 -0
- package/utils/directive.js +28 -0
- package/utils/func.cjs +7 -0
- package/utils/func.d.ts +11 -0
- package/utils/func.js +7 -0
- package/utils/id.cjs +5 -0
- package/utils/id.d.ts +6 -0
- package/utils/id.js +5 -0
- package/utils/internal/assign.d.ts +10 -0
- package/utils/internal/checks.d.ts +57 -0
- package/utils/internal/dom.d.ts +75 -0
- package/utils/internal/isFocusable.d.ts +9 -0
- package/utils/internal/math.d.ts +5 -0
- package/utils/internal/promise.d.ts +98 -0
- package/utils/internal/scrollbars.d.ts +8 -0
- package/utils/internal/sort.d.ts +16 -0
- package/utils/internal/ssrHTMLElement.d.ts +17 -0
- package/utils/internal/textDirection.d.ts +7 -0
- package/utils/internal/traversal.d.ts +54 -0
- package/utils/stores.cjs +172 -0
- package/utils/stores.d.ts +224 -0
- package/utils/stores.js +172 -0
- package/utils/widget.cjs +8 -0
- package/utils/widget.d.ts +11 -0
- package/utils/widget.js +8 -0
- package/utils/writables.cjs +16 -0
- package/utils/writables.d.ts +95 -0
- package/utils/writables.js +16 -0
- package/writables-DYGjj5T3.js +103 -0
- package/writables-Dt68gADJ.cjs +102 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { computed } from "@amadeus-it-group/tansu";
|
|
2
|
+
import { writablesForProps, bindableProp, stateStores, true$ } from "./utils/stores.js";
|
|
3
|
+
import { j as typeString, e as typeFunction, b as typeBoolean, g as typeNumber, l as clamp, m as isNumber } from "./writables-DYGjj5T3.js";
|
|
4
|
+
import { noop } from "./utils/func.js";
|
|
5
|
+
import { g as createAttributesDirective } from "./directive-CNNSo5Yn.js";
|
|
6
|
+
import { createWidgetFactory } from "./utils/widget.js";
|
|
7
|
+
const PAGE_LINK_DEFAULT = "#";
|
|
8
|
+
const defaultConfig = {
|
|
9
|
+
page: 1,
|
|
10
|
+
collectionSize: 0,
|
|
11
|
+
pageSize: 10,
|
|
12
|
+
disabled: false,
|
|
13
|
+
directionLinks: true,
|
|
14
|
+
boundaryLinks: false,
|
|
15
|
+
onPageChange: noop,
|
|
16
|
+
pagesFactory: (_page, pageCount) => {
|
|
17
|
+
const pages = [];
|
|
18
|
+
for (let i = 1; i <= pageCount; i++) {
|
|
19
|
+
pages.push(i);
|
|
20
|
+
}
|
|
21
|
+
return pages;
|
|
22
|
+
},
|
|
23
|
+
ariaLabel: "Page navigation",
|
|
24
|
+
activeLabel: "(current)",
|
|
25
|
+
ariaPageLabel: (processPage, pageCount) => `Page ${processPage} of ${pageCount}`,
|
|
26
|
+
ariaFirstLabel: "Action link for first page",
|
|
27
|
+
ariaPreviousLabel: "Action link for previous page",
|
|
28
|
+
ariaNextLabel: "Action link for next page",
|
|
29
|
+
ariaLastLabel: "Action link for last page",
|
|
30
|
+
ariaEllipsisLabel: "Ellipsis page element",
|
|
31
|
+
ariaLiveLabel: (currentPage) => `Current page is ${currentPage}`,
|
|
32
|
+
className: "",
|
|
33
|
+
pageLink: (_page) => PAGE_LINK_DEFAULT
|
|
34
|
+
};
|
|
35
|
+
function getPaginationDefaultConfig() {
|
|
36
|
+
return { ...defaultConfig };
|
|
37
|
+
}
|
|
38
|
+
const configValidator = {
|
|
39
|
+
page: typeNumber,
|
|
40
|
+
collectionSize: typeNumber,
|
|
41
|
+
pageSize: typeNumber,
|
|
42
|
+
disabled: typeBoolean,
|
|
43
|
+
directionLinks: typeBoolean,
|
|
44
|
+
boundaryLinks: typeBoolean,
|
|
45
|
+
onPageChange: typeFunction,
|
|
46
|
+
pagesFactory: typeFunction,
|
|
47
|
+
ariaLabel: typeString,
|
|
48
|
+
activeLabel: typeString,
|
|
49
|
+
ariaPageLabel: typeFunction,
|
|
50
|
+
ariaFirstLabel: typeString,
|
|
51
|
+
ariaPreviousLabel: typeString,
|
|
52
|
+
ariaNextLabel: typeString,
|
|
53
|
+
ariaLastLabel: typeString,
|
|
54
|
+
ariaLiveLabel: typeFunction,
|
|
55
|
+
className: typeString,
|
|
56
|
+
pageLink: typeFunction,
|
|
57
|
+
ariaEllipsisLabel: typeString
|
|
58
|
+
};
|
|
59
|
+
const createPagination = createWidgetFactory(
|
|
60
|
+
"pagination",
|
|
61
|
+
(config) => {
|
|
62
|
+
const [
|
|
63
|
+
{
|
|
64
|
+
// dirty inputs that need adjustment:
|
|
65
|
+
page$: _dirtyPage$,
|
|
66
|
+
// clean inputs with value validation:
|
|
67
|
+
collectionSize$,
|
|
68
|
+
pageSize$,
|
|
69
|
+
onPageChange$,
|
|
70
|
+
pagesFactory$,
|
|
71
|
+
ariaPageLabel$,
|
|
72
|
+
ariaLiveLabel$,
|
|
73
|
+
pageLink$,
|
|
74
|
+
disabled$,
|
|
75
|
+
ariaFirstLabel$,
|
|
76
|
+
ariaLastLabel$,
|
|
77
|
+
ariaNextLabel$,
|
|
78
|
+
ariaPreviousLabel$,
|
|
79
|
+
...stateProps
|
|
80
|
+
},
|
|
81
|
+
patch
|
|
82
|
+
] = writablesForProps(defaultConfig, config, configValidator);
|
|
83
|
+
const pageCount$ = computed(() => {
|
|
84
|
+
let pageCount = Math.ceil(collectionSize$() / pageSize$());
|
|
85
|
+
if (!isNumber(pageCount) || pageCount < 1) {
|
|
86
|
+
pageCount = 1;
|
|
87
|
+
}
|
|
88
|
+
return pageCount;
|
|
89
|
+
});
|
|
90
|
+
const page$ = bindableProp(_dirtyPage$, onPageChange$, (dirtyPage) => clamp(dirtyPage, pageCount$(), 1));
|
|
91
|
+
const pages$ = computed(() => pagesFactory$()(page$(), pageCount$()));
|
|
92
|
+
const nextDisabled$ = computed(() => page$() === pageCount$() || disabled$());
|
|
93
|
+
const previousDisabled$ = computed(() => page$() === 1 || disabled$());
|
|
94
|
+
const pagesLabel$ = computed(() => {
|
|
95
|
+
const ariaPageLabel = ariaPageLabel$();
|
|
96
|
+
const pageCount = pageCount$();
|
|
97
|
+
return pages$().map((page) => ariaPageLabel(page, pageCount));
|
|
98
|
+
});
|
|
99
|
+
const pagesHrefs$ = computed(() => {
|
|
100
|
+
const pageLinkFactory = pageLink$();
|
|
101
|
+
const pageCount = pageCount$();
|
|
102
|
+
return Array.from({ length: pageCount }, (_, index) => pageLinkFactory(index + 1));
|
|
103
|
+
});
|
|
104
|
+
const directionsHrefs$ = computed(() => {
|
|
105
|
+
const pagesHrefs = pagesHrefs$();
|
|
106
|
+
const pageIndex = page$() - 1;
|
|
107
|
+
return {
|
|
108
|
+
previous: pagesHrefs.at(pageIndex > 0 ? pageIndex - 1 : 0),
|
|
109
|
+
next: pagesHrefs.at(pageIndex + 1) ?? pagesHrefs.at(-1)
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
const ariaLiveLabelText$ = computed(() => ariaLiveLabel$()(page$(), pageCount$()));
|
|
113
|
+
function handleNavigation(pageNumber, event) {
|
|
114
|
+
if (pagesHrefs$()[pageNumber - 1] === PAGE_LINK_DEFAULT) {
|
|
115
|
+
event?.preventDefault();
|
|
116
|
+
}
|
|
117
|
+
if (!event || !(event.ctrlKey || event.metaKey)) {
|
|
118
|
+
event?.preventDefault();
|
|
119
|
+
page$.set(pageNumber);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const widget = {
|
|
123
|
+
...stateStores({
|
|
124
|
+
pageCount$,
|
|
125
|
+
page$,
|
|
126
|
+
pages$,
|
|
127
|
+
nextDisabled$,
|
|
128
|
+
previousDisabled$,
|
|
129
|
+
pagesLabel$,
|
|
130
|
+
pagesHrefs$,
|
|
131
|
+
directionsHrefs$,
|
|
132
|
+
disabled$,
|
|
133
|
+
ariaFirstLabel$,
|
|
134
|
+
ariaLastLabel$,
|
|
135
|
+
ariaNextLabel$,
|
|
136
|
+
ariaPreviousLabel$,
|
|
137
|
+
ariaLiveLabelText$,
|
|
138
|
+
...stateProps
|
|
139
|
+
}),
|
|
140
|
+
patch,
|
|
141
|
+
api: {
|
|
142
|
+
/**
|
|
143
|
+
* Set the current page pageNumber (starting from 1)
|
|
144
|
+
* @param pageNumber - Current page number to set.
|
|
145
|
+
* Value is normalized between 1 and the number of page
|
|
146
|
+
*/
|
|
147
|
+
select(pageNumber) {
|
|
148
|
+
page$.set(pageNumber);
|
|
149
|
+
},
|
|
150
|
+
/**
|
|
151
|
+
* Select the first page
|
|
152
|
+
*/
|
|
153
|
+
first() {
|
|
154
|
+
page$.set(1);
|
|
155
|
+
},
|
|
156
|
+
/**
|
|
157
|
+
* Select the previous page
|
|
158
|
+
*/
|
|
159
|
+
previous() {
|
|
160
|
+
page$.update((p) => p - 1);
|
|
161
|
+
},
|
|
162
|
+
/**
|
|
163
|
+
* Select the next page
|
|
164
|
+
*/
|
|
165
|
+
next() {
|
|
166
|
+
page$.update((p) => p + 1);
|
|
167
|
+
},
|
|
168
|
+
/**
|
|
169
|
+
* Select the last page
|
|
170
|
+
*/
|
|
171
|
+
last() {
|
|
172
|
+
page$.set(pageCount$());
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
directives: {
|
|
176
|
+
pageLink: createAttributesDirective((pageLinkContext$) => ({
|
|
177
|
+
events: {
|
|
178
|
+
click: (e) => handleNavigation(pageLinkContext$().page, e)
|
|
179
|
+
},
|
|
180
|
+
attributes: {
|
|
181
|
+
"aria-current": computed(() => page$() === pageLinkContext$().page ? "page" : void 0),
|
|
182
|
+
"aria-label": computed(() => pagesLabel$()[pageLinkContext$().page - 1]),
|
|
183
|
+
href: computed(() => pagesHrefs$()[pageLinkContext$().page - 1]),
|
|
184
|
+
tabindex: computed(() => disabled$() ? "-1" : void 0),
|
|
185
|
+
"aria-disabled": computed(() => disabled$() ? "true" : void 0)
|
|
186
|
+
},
|
|
187
|
+
classNames: {
|
|
188
|
+
"au-page": true$
|
|
189
|
+
}
|
|
190
|
+
})),
|
|
191
|
+
pageFirst: createAttributesDirective(() => ({
|
|
192
|
+
events: {
|
|
193
|
+
click: (e) => handleNavigation(1, e)
|
|
194
|
+
},
|
|
195
|
+
attributes: {
|
|
196
|
+
"aria-label": ariaFirstLabel$,
|
|
197
|
+
href: computed(() => pagesHrefs$()[0]),
|
|
198
|
+
tabindex: computed(() => previousDisabled$() ? "-1" : void 0),
|
|
199
|
+
"aria-disabled": computed(() => previousDisabled$() ? "true" : void 0)
|
|
200
|
+
},
|
|
201
|
+
classNames: {
|
|
202
|
+
"au-first": true$
|
|
203
|
+
}
|
|
204
|
+
})),
|
|
205
|
+
pagePrev: createAttributesDirective(() => ({
|
|
206
|
+
events: {
|
|
207
|
+
click: (e) => handleNavigation(page$() - 1, e)
|
|
208
|
+
},
|
|
209
|
+
attributes: {
|
|
210
|
+
"aria-label": ariaPreviousLabel$,
|
|
211
|
+
href: computed(() => directionsHrefs$().previous),
|
|
212
|
+
tabindex: computed(() => previousDisabled$() ? "-1" : void 0),
|
|
213
|
+
"aria-disabled": computed(() => previousDisabled$() ? "true" : void 0)
|
|
214
|
+
},
|
|
215
|
+
classNames: {
|
|
216
|
+
"au-previous": true$
|
|
217
|
+
}
|
|
218
|
+
})),
|
|
219
|
+
pageNext: createAttributesDirective(() => ({
|
|
220
|
+
events: {
|
|
221
|
+
click: (e) => handleNavigation(page$() + 1, e)
|
|
222
|
+
},
|
|
223
|
+
attributes: {
|
|
224
|
+
"aria-label": ariaNextLabel$,
|
|
225
|
+
href: computed(() => directionsHrefs$().next),
|
|
226
|
+
tabindex: computed(() => nextDisabled$() ? "-1" : void 0),
|
|
227
|
+
"aria-disabled": computed(() => nextDisabled$() ? "true" : void 0)
|
|
228
|
+
},
|
|
229
|
+
classNames: {
|
|
230
|
+
"au-next": true$
|
|
231
|
+
}
|
|
232
|
+
})),
|
|
233
|
+
pageLast: createAttributesDirective(() => ({
|
|
234
|
+
events: {
|
|
235
|
+
click: (e) => handleNavigation(pageCount$(), e)
|
|
236
|
+
},
|
|
237
|
+
attributes: {
|
|
238
|
+
"aria-label": ariaLastLabel$,
|
|
239
|
+
href: computed(() => pagesHrefs$().at(-1)),
|
|
240
|
+
tabindex: computed(() => nextDisabled$() ? "-1" : void 0),
|
|
241
|
+
"aria-disabled": computed(() => nextDisabled$() ? "true" : void 0)
|
|
242
|
+
},
|
|
243
|
+
classNames: {
|
|
244
|
+
"au-last": true$
|
|
245
|
+
}
|
|
246
|
+
}))
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
return widget;
|
|
250
|
+
}
|
|
251
|
+
);
|
|
252
|
+
export {
|
|
253
|
+
createPagination as c,
|
|
254
|
+
getPaginationDefaultConfig as g
|
|
255
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const utils_writables = require("./writables-Dt68gADJ.cjs");
|
|
3
|
+
const utils_stores = require("./utils/stores.cjs");
|
|
4
|
+
const tansu = require("@amadeus-it-group/tansu");
|
|
5
|
+
const utils_directive = require("./directive-DyTodNPd.cjs");
|
|
6
|
+
const utils_widget = require("./utils/widget.cjs");
|
|
7
|
+
const defaultConfig = {
|
|
8
|
+
min: 0,
|
|
9
|
+
max: 100,
|
|
10
|
+
value: 0,
|
|
11
|
+
ariaLabel: "Progressbar",
|
|
12
|
+
className: "",
|
|
13
|
+
ariaValueTextFn: () => void 0
|
|
14
|
+
};
|
|
15
|
+
function getProgressbarDefaultConfig() {
|
|
16
|
+
return { ...defaultConfig };
|
|
17
|
+
}
|
|
18
|
+
const configValidator = {
|
|
19
|
+
min: utils_writables.typeNumber,
|
|
20
|
+
max: utils_writables.typeNumber,
|
|
21
|
+
value: utils_writables.typeNumber,
|
|
22
|
+
ariaLabel: utils_writables.typeString,
|
|
23
|
+
className: utils_writables.typeString,
|
|
24
|
+
ariaValueTextFn: utils_writables.typeFunction
|
|
25
|
+
};
|
|
26
|
+
const createProgressbar = utils_widget.createWidgetFactory(
|
|
27
|
+
"progressbar",
|
|
28
|
+
(config) => {
|
|
29
|
+
const [
|
|
30
|
+
{
|
|
31
|
+
// dirty inputs that need adjustment:
|
|
32
|
+
max$: _dirtyMaximum$,
|
|
33
|
+
value$: _dirtyValue$,
|
|
34
|
+
// clean inputs
|
|
35
|
+
min$,
|
|
36
|
+
ariaValueTextFn$,
|
|
37
|
+
ariaLabel$,
|
|
38
|
+
...stateProps
|
|
39
|
+
},
|
|
40
|
+
patch
|
|
41
|
+
] = utils_stores.writablesForProps(defaultConfig, config, configValidator);
|
|
42
|
+
const max$ = tansu.computed(() => Math.max(min$(), _dirtyMaximum$()));
|
|
43
|
+
const value$ = tansu.computed(() => utils_writables.clamp(_dirtyValue$(), max$(), min$()));
|
|
44
|
+
const percentage$ = tansu.computed(() => {
|
|
45
|
+
const max = max$();
|
|
46
|
+
const min = min$();
|
|
47
|
+
if (max > min) {
|
|
48
|
+
return utils_writables.clamp((value$() - min) * 100 / (max - min), 100, 0);
|
|
49
|
+
} else {
|
|
50
|
+
return 0;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
const started$ = tansu.computed(() => value$() > min$());
|
|
54
|
+
const finished$ = tansu.computed(() => value$() === max$());
|
|
55
|
+
const ariaValueText$ = tansu.computed(() => ariaValueTextFn$()(value$(), min$(), max$()));
|
|
56
|
+
return {
|
|
57
|
+
...utils_stores.stateStores({
|
|
58
|
+
min$,
|
|
59
|
+
max$,
|
|
60
|
+
value$,
|
|
61
|
+
percentage$,
|
|
62
|
+
started$,
|
|
63
|
+
finished$,
|
|
64
|
+
ariaValueText$,
|
|
65
|
+
ariaLabel$,
|
|
66
|
+
...stateProps
|
|
67
|
+
}),
|
|
68
|
+
patch,
|
|
69
|
+
api: {},
|
|
70
|
+
directives: {
|
|
71
|
+
ariaDirective: utils_directive.createAttributesDirective(() => ({
|
|
72
|
+
attributes: {
|
|
73
|
+
role: tansu.readable("progressbar"),
|
|
74
|
+
"aria-label": ariaLabel$,
|
|
75
|
+
"aria-valuenow": value$,
|
|
76
|
+
"aria-valuemin": min$,
|
|
77
|
+
"aria-valuemax": max$,
|
|
78
|
+
"aria-valuetext": ariaValueText$
|
|
79
|
+
}
|
|
80
|
+
}))
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
exports.createProgressbar = createProgressbar;
|
|
86
|
+
exports.getProgressbarDefaultConfig = getProgressbarDefaultConfig;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { e as typeFunction, j as typeString, g as typeNumber, l as clamp } from "./writables-DYGjj5T3.js";
|
|
2
|
+
import { writablesForProps, stateStores } from "./utils/stores.js";
|
|
3
|
+
import { computed, readable } from "@amadeus-it-group/tansu";
|
|
4
|
+
import { g as createAttributesDirective } from "./directive-CNNSo5Yn.js";
|
|
5
|
+
import { createWidgetFactory } from "./utils/widget.js";
|
|
6
|
+
const defaultConfig = {
|
|
7
|
+
min: 0,
|
|
8
|
+
max: 100,
|
|
9
|
+
value: 0,
|
|
10
|
+
ariaLabel: "Progressbar",
|
|
11
|
+
className: "",
|
|
12
|
+
ariaValueTextFn: () => void 0
|
|
13
|
+
};
|
|
14
|
+
function getProgressbarDefaultConfig() {
|
|
15
|
+
return { ...defaultConfig };
|
|
16
|
+
}
|
|
17
|
+
const configValidator = {
|
|
18
|
+
min: typeNumber,
|
|
19
|
+
max: typeNumber,
|
|
20
|
+
value: typeNumber,
|
|
21
|
+
ariaLabel: typeString,
|
|
22
|
+
className: typeString,
|
|
23
|
+
ariaValueTextFn: typeFunction
|
|
24
|
+
};
|
|
25
|
+
const createProgressbar = createWidgetFactory(
|
|
26
|
+
"progressbar",
|
|
27
|
+
(config) => {
|
|
28
|
+
const [
|
|
29
|
+
{
|
|
30
|
+
// dirty inputs that need adjustment:
|
|
31
|
+
max$: _dirtyMaximum$,
|
|
32
|
+
value$: _dirtyValue$,
|
|
33
|
+
// clean inputs
|
|
34
|
+
min$,
|
|
35
|
+
ariaValueTextFn$,
|
|
36
|
+
ariaLabel$,
|
|
37
|
+
...stateProps
|
|
38
|
+
},
|
|
39
|
+
patch
|
|
40
|
+
] = writablesForProps(defaultConfig, config, configValidator);
|
|
41
|
+
const max$ = computed(() => Math.max(min$(), _dirtyMaximum$()));
|
|
42
|
+
const value$ = computed(() => clamp(_dirtyValue$(), max$(), min$()));
|
|
43
|
+
const percentage$ = computed(() => {
|
|
44
|
+
const max = max$();
|
|
45
|
+
const min = min$();
|
|
46
|
+
if (max > min) {
|
|
47
|
+
return clamp((value$() - min) * 100 / (max - min), 100, 0);
|
|
48
|
+
} else {
|
|
49
|
+
return 0;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
const started$ = computed(() => value$() > min$());
|
|
53
|
+
const finished$ = computed(() => value$() === max$());
|
|
54
|
+
const ariaValueText$ = computed(() => ariaValueTextFn$()(value$(), min$(), max$()));
|
|
55
|
+
return {
|
|
56
|
+
...stateStores({
|
|
57
|
+
min$,
|
|
58
|
+
max$,
|
|
59
|
+
value$,
|
|
60
|
+
percentage$,
|
|
61
|
+
started$,
|
|
62
|
+
finished$,
|
|
63
|
+
ariaValueText$,
|
|
64
|
+
ariaLabel$,
|
|
65
|
+
...stateProps
|
|
66
|
+
}),
|
|
67
|
+
patch,
|
|
68
|
+
api: {},
|
|
69
|
+
directives: {
|
|
70
|
+
ariaDirective: createAttributesDirective(() => ({
|
|
71
|
+
attributes: {
|
|
72
|
+
role: readable("progressbar"),
|
|
73
|
+
"aria-label": ariaLabel$,
|
|
74
|
+
"aria-valuenow": value$,
|
|
75
|
+
"aria-valuemin": min$,
|
|
76
|
+
"aria-valuemax": max$,
|
|
77
|
+
"aria-valuetext": ariaValueText$
|
|
78
|
+
}
|
|
79
|
+
}))
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
);
|
|
84
|
+
export {
|
|
85
|
+
createProgressbar as c,
|
|
86
|
+
getProgressbarDefaultConfig as g
|
|
87
|
+
};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const tansu = require("@amadeus-it-group/tansu");
|
|
3
|
+
const utils_func = require("./utils/func.cjs");
|
|
4
|
+
const promisePending = { status: "pending" };
|
|
5
|
+
const isThenable = (value) => {
|
|
6
|
+
const type = typeof value;
|
|
7
|
+
return type === "object" && value !== null || type === "function" ? typeof value.then === "function" : false;
|
|
8
|
+
};
|
|
9
|
+
const createPromiseStateStore = (promise) => {
|
|
10
|
+
const store = tansu.writable(promisePending);
|
|
11
|
+
Promise.resolve(promise).then(
|
|
12
|
+
(value) => store.set({ status: "fulfilled", value }),
|
|
13
|
+
(reason) => store.set({ status: "rejected", reason })
|
|
14
|
+
);
|
|
15
|
+
return tansu.asReadable(store);
|
|
16
|
+
};
|
|
17
|
+
const promiseWeakMap = /* @__PURE__ */ new WeakMap();
|
|
18
|
+
const promiseStateStore = (value) => {
|
|
19
|
+
if (!isThenable(value)) {
|
|
20
|
+
return tansu.readable({ status: "fulfilled", value });
|
|
21
|
+
}
|
|
22
|
+
let response = promiseWeakMap.get(value);
|
|
23
|
+
if (!response) {
|
|
24
|
+
response = createPromiseStateStore(value);
|
|
25
|
+
promiseWeakMap.set(value, response);
|
|
26
|
+
}
|
|
27
|
+
return response;
|
|
28
|
+
};
|
|
29
|
+
const promiseStateStoreEqual = (a, b) => Object.is(a, b) || a.status === b.status && (a.status !== "fulfilled" || tansu.equal(a.value, b.value)) && (a.status !== "rejected" || tansu.equal(a.reason, b.reason));
|
|
30
|
+
const promiseStoreToPromiseStateStore = (promiseStore$) => tansu.computed(() => promiseStateStore(promiseStore$())(), { equal: promiseStateStoreEqual });
|
|
31
|
+
const promiseStateStoreToValueStore = (store$, initialValue, equal2) => tansu.derived(
|
|
32
|
+
store$,
|
|
33
|
+
{
|
|
34
|
+
derive: (state, set) => {
|
|
35
|
+
if (state.status === "fulfilled") {
|
|
36
|
+
set(state.value);
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
equal: equal2
|
|
40
|
+
},
|
|
41
|
+
initialValue
|
|
42
|
+
);
|
|
43
|
+
const promiseStoreToValueStore = (promiseStore$, initialValue, equal2) => promiseStateStoreToValueStore(promiseStoreToPromiseStateStore(promiseStore$), initialValue, equal2);
|
|
44
|
+
const truthyValue = (value) => !!value;
|
|
45
|
+
const promiseFromStore = (store, condition = truthyValue) => {
|
|
46
|
+
let resolve;
|
|
47
|
+
const promise = new Promise((r) => resolve = r);
|
|
48
|
+
let unsubscribe = () => {
|
|
49
|
+
storeUnsubscribe();
|
|
50
|
+
unsubscribe = utils_func.noop;
|
|
51
|
+
};
|
|
52
|
+
let storeUnsubscribe = utils_func.noop;
|
|
53
|
+
storeUnsubscribe = store.subscribe((value) => {
|
|
54
|
+
if (condition(value)) {
|
|
55
|
+
resolve(value);
|
|
56
|
+
unsubscribe();
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
if (unsubscribe === utils_func.noop) {
|
|
60
|
+
storeUnsubscribe();
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
promise,
|
|
64
|
+
unsubscribe() {
|
|
65
|
+
unsubscribe();
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
const promiseFromEvent = (element, event) => {
|
|
70
|
+
let resolve;
|
|
71
|
+
const promise = new Promise((r) => resolve = r);
|
|
72
|
+
let unsubscribe = () => {
|
|
73
|
+
element.removeEventListener(event, eventListener);
|
|
74
|
+
unsubscribe = utils_func.noop;
|
|
75
|
+
};
|
|
76
|
+
const eventListener = (event2) => {
|
|
77
|
+
if (event2.target === element) {
|
|
78
|
+
resolve(event2);
|
|
79
|
+
unsubscribe();
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
element.addEventListener(event, eventListener);
|
|
83
|
+
return {
|
|
84
|
+
promise,
|
|
85
|
+
unsubscribe() {
|
|
86
|
+
unsubscribe();
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
const promiseFromTimeout = (delay) => {
|
|
91
|
+
let timeout;
|
|
92
|
+
return {
|
|
93
|
+
promise: new Promise((r) => {
|
|
94
|
+
timeout = setTimeout(() => {
|
|
95
|
+
timeout = void 0;
|
|
96
|
+
r();
|
|
97
|
+
}, delay);
|
|
98
|
+
}),
|
|
99
|
+
unsubscribe() {
|
|
100
|
+
if (timeout) {
|
|
101
|
+
clearTimeout(timeout);
|
|
102
|
+
timeout = void 0;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
const promiseWithResolve = () => {
|
|
108
|
+
let resolve;
|
|
109
|
+
const promise = new Promise((r) => {
|
|
110
|
+
resolve = r;
|
|
111
|
+
});
|
|
112
|
+
return { promise, resolve };
|
|
113
|
+
};
|
|
114
|
+
exports.promiseFromEvent = promiseFromEvent;
|
|
115
|
+
exports.promiseFromStore = promiseFromStore;
|
|
116
|
+
exports.promiseFromTimeout = promiseFromTimeout;
|
|
117
|
+
exports.promiseStoreToValueStore = promiseStoreToValueStore;
|
|
118
|
+
exports.promiseWithResolve = promiseWithResolve;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { derived, computed, readable, equal, writable, asReadable } from "@amadeus-it-group/tansu";
|
|
2
|
+
import { noop } from "./utils/func.js";
|
|
3
|
+
const promisePending = { status: "pending" };
|
|
4
|
+
const isThenable = (value) => {
|
|
5
|
+
const type = typeof value;
|
|
6
|
+
return type === "object" && value !== null || type === "function" ? typeof value.then === "function" : false;
|
|
7
|
+
};
|
|
8
|
+
const createPromiseStateStore = (promise) => {
|
|
9
|
+
const store = writable(promisePending);
|
|
10
|
+
Promise.resolve(promise).then(
|
|
11
|
+
(value) => store.set({ status: "fulfilled", value }),
|
|
12
|
+
(reason) => store.set({ status: "rejected", reason })
|
|
13
|
+
);
|
|
14
|
+
return asReadable(store);
|
|
15
|
+
};
|
|
16
|
+
const promiseWeakMap = /* @__PURE__ */ new WeakMap();
|
|
17
|
+
const promiseStateStore = (value) => {
|
|
18
|
+
if (!isThenable(value)) {
|
|
19
|
+
return readable({ status: "fulfilled", value });
|
|
20
|
+
}
|
|
21
|
+
let response = promiseWeakMap.get(value);
|
|
22
|
+
if (!response) {
|
|
23
|
+
response = createPromiseStateStore(value);
|
|
24
|
+
promiseWeakMap.set(value, response);
|
|
25
|
+
}
|
|
26
|
+
return response;
|
|
27
|
+
};
|
|
28
|
+
const promiseStateStoreEqual = (a, b) => Object.is(a, b) || a.status === b.status && (a.status !== "fulfilled" || equal(a.value, b.value)) && (a.status !== "rejected" || equal(a.reason, b.reason));
|
|
29
|
+
const promiseStoreToPromiseStateStore = (promiseStore$) => computed(() => promiseStateStore(promiseStore$())(), { equal: promiseStateStoreEqual });
|
|
30
|
+
const promiseStateStoreToValueStore = (store$, initialValue, equal2) => derived(
|
|
31
|
+
store$,
|
|
32
|
+
{
|
|
33
|
+
derive: (state, set) => {
|
|
34
|
+
if (state.status === "fulfilled") {
|
|
35
|
+
set(state.value);
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
equal: equal2
|
|
39
|
+
},
|
|
40
|
+
initialValue
|
|
41
|
+
);
|
|
42
|
+
const promiseStoreToValueStore = (promiseStore$, initialValue, equal2) => promiseStateStoreToValueStore(promiseStoreToPromiseStateStore(promiseStore$), initialValue, equal2);
|
|
43
|
+
const truthyValue = (value) => !!value;
|
|
44
|
+
const promiseFromStore = (store, condition = truthyValue) => {
|
|
45
|
+
let resolve;
|
|
46
|
+
const promise = new Promise((r) => resolve = r);
|
|
47
|
+
let unsubscribe = () => {
|
|
48
|
+
storeUnsubscribe();
|
|
49
|
+
unsubscribe = noop;
|
|
50
|
+
};
|
|
51
|
+
let storeUnsubscribe = noop;
|
|
52
|
+
storeUnsubscribe = store.subscribe((value) => {
|
|
53
|
+
if (condition(value)) {
|
|
54
|
+
resolve(value);
|
|
55
|
+
unsubscribe();
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
if (unsubscribe === noop) {
|
|
59
|
+
storeUnsubscribe();
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
promise,
|
|
63
|
+
unsubscribe() {
|
|
64
|
+
unsubscribe();
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
const promiseFromEvent = (element, event) => {
|
|
69
|
+
let resolve;
|
|
70
|
+
const promise = new Promise((r) => resolve = r);
|
|
71
|
+
let unsubscribe = () => {
|
|
72
|
+
element.removeEventListener(event, eventListener);
|
|
73
|
+
unsubscribe = noop;
|
|
74
|
+
};
|
|
75
|
+
const eventListener = (event2) => {
|
|
76
|
+
if (event2.target === element) {
|
|
77
|
+
resolve(event2);
|
|
78
|
+
unsubscribe();
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
element.addEventListener(event, eventListener);
|
|
82
|
+
return {
|
|
83
|
+
promise,
|
|
84
|
+
unsubscribe() {
|
|
85
|
+
unsubscribe();
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
const promiseFromTimeout = (delay) => {
|
|
90
|
+
let timeout;
|
|
91
|
+
return {
|
|
92
|
+
promise: new Promise((r) => {
|
|
93
|
+
timeout = setTimeout(() => {
|
|
94
|
+
timeout = void 0;
|
|
95
|
+
r();
|
|
96
|
+
}, delay);
|
|
97
|
+
}),
|
|
98
|
+
unsubscribe() {
|
|
99
|
+
if (timeout) {
|
|
100
|
+
clearTimeout(timeout);
|
|
101
|
+
timeout = void 0;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
const promiseWithResolve = () => {
|
|
107
|
+
let resolve;
|
|
108
|
+
const promise = new Promise((r) => {
|
|
109
|
+
resolve = r;
|
|
110
|
+
});
|
|
111
|
+
return { promise, resolve };
|
|
112
|
+
};
|
|
113
|
+
export {
|
|
114
|
+
promiseStoreToValueStore as a,
|
|
115
|
+
promiseFromEvent as b,
|
|
116
|
+
promiseFromTimeout as c,
|
|
117
|
+
promiseWithResolve as d,
|
|
118
|
+
promiseFromStore as p
|
|
119
|
+
};
|