@agnos-ui/core 0.9.3 → 0.10.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.
Files changed (113) hide show
  1. package/{accordion-cR5JqWJ8.cjs → accordion-B5LiN1uy.cjs} +15 -20
  2. package/{accordion-CoM4efp-.js → accordion-_zen-g8l.js} +15 -20
  3. package/{alert-DtDozJal.cjs → alert-B-jQDQcB.cjs} +1 -1
  4. package/{alert-YIlqdEPO.js → alert-gGz2CDS9.js} +1 -1
  5. package/{collapse-DwXz2kNw.js → collapse-BV4kD3j9.js} +2 -2
  6. package/{collapse-DRp53EuG.cjs → collapse-gLiT080Y.cjs} +2 -2
  7. package/{common-BToNPUDq.cjs → common-D3QcdJ6S.cjs} +1 -1
  8. package/{common-BqUjUBPy.js → common-DK0ADNTX.js} +1 -1
  9. package/components/accordion/accordion.d.ts +6 -6
  10. package/components/accordion/index.cjs +1 -1
  11. package/components/accordion/index.js +1 -1
  12. package/components/alert/index.cjs +1 -1
  13. package/components/alert/index.js +1 -1
  14. package/components/carousel/carousel.d.ts +15 -0
  15. package/components/carousel/index.cjs +10 -23
  16. package/components/carousel/index.js +10 -23
  17. package/components/collapse/collapse.d.ts +5 -2
  18. package/components/collapse/index.cjs +1 -1
  19. package/components/collapse/index.js +1 -1
  20. package/components/drawer/drawer.d.ts +242 -0
  21. package/components/drawer/index.cjs +5 -0
  22. package/components/drawer/index.d.ts +1 -0
  23. package/components/drawer/index.js +5 -0
  24. package/components/modal/index.cjs +2 -1
  25. package/components/modal/index.js +2 -1
  26. package/components/modal/modal.d.ts +5 -0
  27. package/components/pagination/index.cjs +1 -1
  28. package/components/pagination/index.js +1 -1
  29. package/components/progressbar/index.cjs +1 -1
  30. package/components/progressbar/index.js +1 -1
  31. package/components/rating/index.cjs +1 -1
  32. package/components/rating/index.js +1 -1
  33. package/components/select/index.cjs +1 -1
  34. package/components/select/index.js +1 -1
  35. package/components/slider/index.cjs +1 -1
  36. package/components/slider/index.js +1 -1
  37. package/components/slider/slider.d.ts +4 -4
  38. package/components/toast/index.cjs +1 -1
  39. package/components/toast/index.js +1 -1
  40. package/components/tree/index.cjs +1 -1
  41. package/components/tree/index.js +1 -1
  42. package/components/tree/tree.d.ts +0 -6
  43. package/config.cjs +2 -2
  44. package/config.d.ts +5 -0
  45. package/config.js +2 -2
  46. package/{dom-gfxqXJpK.js → dom-Bcg9ORcA.js} +64 -54
  47. package/{dom-CuBx1JPZ.cjs → dom-C2gi9OCP.cjs} +47 -37
  48. package/drawer-D5SO73ew.js +251 -0
  49. package/drawer-DP7UPojk.cjs +250 -0
  50. package/index.cjs +19 -13
  51. package/index.d.ts +1 -0
  52. package/index.js +36 -30
  53. package/isFocusable-Ckwus82R.js +32 -0
  54. package/isFocusable-DfzDLeAN.cjs +31 -0
  55. package/{modal-D3wGIDlj.js → modal-CAvQW-vo.js} +26 -32
  56. package/{modal-BEnQ6c5M.cjs → modal-DiXZXYjR.cjs} +27 -33
  57. package/package.json +1 -1
  58. package/{pagination-B97wBLok.js → pagination-BKbMROV6.js} +4 -4
  59. package/{pagination-C1TT-oea.cjs → pagination-DvZ2rLsz.cjs} +4 -4
  60. package/{progressbar-BWBlRk_Y.js → progressbar-D8zIcm9n.js} +2 -2
  61. package/{progressbar-CRvhNB5R.cjs → progressbar-i9xfAxb7.cjs} +2 -2
  62. package/{promise-XSP94FjG.js → promise-Y53vc4Ia.js} +5 -5
  63. package/{rating-BXvy9kXq.js → rating-DEXTGWCU.js} +2 -2
  64. package/{rating-DAb6nR67.cjs → rating-DmG4oUkr.cjs} +2 -2
  65. package/scrollbars-CT87iv_6.cjs +30 -0
  66. package/scrollbars-CcxSrnCx.js +31 -0
  67. package/{select-BdjpnE7_.js → select-Bw68Xdu5.js} +4 -5
  68. package/{select-C0rJJQfl.cjs → select-MFjAnIt7.cjs} +4 -5
  69. package/services/extendWidget.cjs +2 -2
  70. package/services/extendWidget.js +2 -2
  71. package/services/floatingUI.cjs +8 -29
  72. package/services/floatingUI.js +9 -30
  73. package/services/focusElement.cjs +46 -0
  74. package/services/focusElement.d.ts +9 -0
  75. package/services/focusElement.js +46 -0
  76. package/services/focustrack.cjs +1 -1
  77. package/services/focustrack.js +1 -1
  78. package/services/matchMedia.cjs +1 -1
  79. package/services/matchMedia.js +1 -1
  80. package/services/navManager.cjs +7 -37
  81. package/services/navManager.js +6 -36
  82. package/services/portal.cjs +7 -10
  83. package/services/portal.js +7 -10
  84. package/services/resizeObserver.cjs +2 -2
  85. package/services/resizeObserver.js +2 -2
  86. package/services/siblingsInert.cjs +9 -8
  87. package/services/siblingsInert.d.ts +13 -3
  88. package/services/siblingsInert.js +9 -8
  89. package/services/transitions/baseTransitions.cjs +9 -10
  90. package/services/transitions/baseTransitions.js +10 -11
  91. package/services/transitions/collapse.cjs +1 -1
  92. package/services/transitions/collapse.js +1 -1
  93. package/services/transitions/cssTransitions.cjs +1 -1
  94. package/services/transitions/cssTransitions.js +2 -2
  95. package/services/transitions/simpleClassTransition.cjs +1 -1
  96. package/services/transitions/simpleClassTransition.js +1 -1
  97. package/{slider-BmxQ3A_u.js → slider-Cx50Eghd.js} +14 -24
  98. package/{slider-DSx5CAce.cjs → slider-Dl4Trh32.cjs} +14 -24
  99. package/toaster-UDglac7x.cjs +187 -0
  100. package/toaster-_p1GTtHI.js +188 -0
  101. package/{tree-BFrXdJox.js → tree-DV0tfPlZ.js} +7 -11
  102. package/{tree-Pvr2rZ-D.cjs → tree-rGHtmCnS.cjs} +7 -11
  103. package/utils/directive.cjs +3 -1
  104. package/utils/directive.d.ts +47 -0
  105. package/utils/directive.js +14 -12
  106. package/utils/stores.cjs +8 -9
  107. package/utils/stores.js +8 -9
  108. package/utils/writables.cjs +1 -1
  109. package/utils/writables.js +1 -1
  110. package/{writables-Bn3uhKEG.cjs → writables-DcGT98a7.cjs} +1 -1
  111. package/{writables-CgpOQ4hA.js → writables-e0tyaQpe.js} +1 -1
  112. package/toaster-Cayg6Lbq.cjs +0 -209
  113. package/toaster-XfzHDqz_.js +0 -210
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ const tansu = require("@amadeus-it-group/tansu");
3
+ const services_portal = require("./services/portal.cjs");
4
+ const services_siblingsInert = require("./services/siblingsInert.cjs");
5
+ const services_transitions_baseTransitions = require("./services/transitions/baseTransitions.cjs");
6
+ const utils_directive = require("./dom-C2gi9OCP.cjs");
7
+ const utils_func = require("./utils/func.cjs");
8
+ const scrollbars = require("./scrollbars-CT87iv_6.cjs");
9
+ const utils_stores = require("./utils/stores.cjs");
10
+ const utils_widget = require("./utils/widget.cjs");
11
+ const utils_writables = require("./writables-DcGT98a7.cjs");
12
+ const services_focusElement = require("./services/focusElement.cjs");
13
+ function getDrawerDefaultConfig() {
14
+ return {
15
+ ...defaultDrawerConfig
16
+ };
17
+ }
18
+ const defaultDrawerConfig = {
19
+ animated: true,
20
+ ariaDescribedBy: "",
21
+ ariaLabelledBy: "",
22
+ backdropClass: "",
23
+ backdropTransition: utils_func.noop,
24
+ className: "w-full",
25
+ visible: false,
26
+ container: typeof window !== "undefined" ? document.body : null,
27
+ transition: utils_func.noop,
28
+ verticalTransition: utils_func.noop,
29
+ onHidden: utils_func.noop,
30
+ onShown: utils_func.noop,
31
+ width: 200,
32
+ height: 200,
33
+ onWidthChange: utils_func.noop,
34
+ onHeightChange: utils_func.noop,
35
+ onVisibleChange: utils_func.noop,
36
+ resizable: false,
37
+ backdrop: true,
38
+ bodyScroll: false
39
+ };
40
+ const configValidator = {
41
+ animated: utils_writables.typeBoolean,
42
+ ariaDescribedBy: utils_writables.typeString,
43
+ ariaLabelledBy: utils_writables.typeString,
44
+ backdropClass: utils_writables.typeString,
45
+ backdropTransition: utils_writables.typeFunction,
46
+ className: utils_writables.typeString,
47
+ visible: utils_writables.typeBoolean,
48
+ transition: utils_writables.typeFunction,
49
+ verticalTransition: utils_writables.typeFunction,
50
+ container: utils_writables.typeHTMLElementOrNull,
51
+ onHidden: utils_writables.typeFunction,
52
+ onShown: utils_writables.typeFunction,
53
+ width: utils_writables.typeNumberInRangeFactory(0, Infinity),
54
+ height: utils_writables.typeNumberInRangeFactory(0, Infinity),
55
+ onWidthChange: utils_writables.typeFunction,
56
+ onHeightChange: utils_writables.typeFunction,
57
+ onVisibleChange: utils_writables.typeFunction,
58
+ resizable: utils_writables.typeBoolean,
59
+ backdrop: utils_writables.typeBoolean,
60
+ bodyScroll: utils_writables.typeBoolean
61
+ };
62
+ const createDrawer = utils_widget.createWidgetFactory("drawer", (config) => {
63
+ const [
64
+ {
65
+ backdrop$,
66
+ backdropTransition$,
67
+ backdropClass$,
68
+ bodyScroll$,
69
+ transition$,
70
+ verticalTransition$,
71
+ visible$: requestedVisible$,
72
+ container$,
73
+ className$,
74
+ animated$,
75
+ ariaDescribedBy$,
76
+ ariaLabelledBy$,
77
+ onHidden$,
78
+ onShown$,
79
+ width$: _dirtyWidth$,
80
+ height$: _dirtyHeight$,
81
+ onWidthChange$,
82
+ onHeightChange$,
83
+ onVisibleChange$,
84
+ ...stateProps
85
+ },
86
+ patch
87
+ ] = utils_stores.writablesForProps(defaultDrawerConfig, config, configValidator);
88
+ const isVertical = tansu.computed(() => {
89
+ const isVertical2 = ["block-start", "block-end"].some((placement) => className$().includes(placement));
90
+ return isVertical2;
91
+ });
92
+ const transition = services_transitions_baseTransitions.createTransition({
93
+ props: {
94
+ animated: animated$,
95
+ animatedOnInit: animated$,
96
+ transition: tansu.asWritable(tansu.computed(() => isVertical() ? verticalTransition$() : transition$())),
97
+ visible: requestedVisible$,
98
+ onVisibleChange: onVisibleChange$,
99
+ onHidden: onHidden$,
100
+ onShown: onShown$
101
+ }
102
+ });
103
+ const width$ = utils_stores.bindableProp(_dirtyWidth$, onWidthChange$);
104
+ const height$ = utils_stores.bindableProp(_dirtyHeight$, onHeightChange$);
105
+ const drawerPortalDirective = utils_directive.bindDirective(
106
+ services_portal.portal,
107
+ tansu.computed(() => ({ container: container$() }))
108
+ );
109
+ const drawerAttributeDirective = utils_directive.createAttributesDirective(() => ({
110
+ attributes: {
111
+ class: className$,
112
+ role: tansu.readable("dialog"),
113
+ "aria-describedby": ariaDescribedBy$,
114
+ "aria-labelledby": ariaLabelledBy$,
115
+ "aria-modal": tansu.readable("true"),
116
+ tabIndex: tansu.readable("-1")
117
+ },
118
+ styles: {
119
+ width: tansu.computed(() => isVertical() ? "100%" : `${width$()}px`),
120
+ height: tansu.computed(() => isVertical() ? `${height$()}px` : "100%"),
121
+ position: tansu.computed(() => container$() !== document.body && container$() !== null ? "relative" : "fixed"),
122
+ outline: tansu.readable("none")
123
+ },
124
+ events: {
125
+ keydown: async (e) => {
126
+ const { key } = e;
127
+ if (key === "Escape") {
128
+ await transition.api.hide();
129
+ }
130
+ }
131
+ }
132
+ }));
133
+ const containerDirective = utils_directive.createAttributesDirective(() => ({
134
+ styles: {
135
+ width: tansu.computed(() => isVertical() ? "100%" : `${width$()}px`),
136
+ height: tansu.computed(() => isVertical() ? `${height$()}px` : "100%")
137
+ }
138
+ }));
139
+ const backdropTransition = services_transitions_baseTransitions.createTransition({
140
+ props: {
141
+ animated: animated$,
142
+ transition: backdropTransition$
143
+ }
144
+ });
145
+ const backdropPortalDirective = utils_directive.bindDirective(
146
+ services_portal.portal,
147
+ tansu.computed(() => {
148
+ const container = container$();
149
+ const element = container ? transition.stores.element$() : void 0;
150
+ return {
151
+ container,
152
+ insertBefore: element?.parentElement === container ? element : void 0
153
+ };
154
+ })
155
+ );
156
+ const backdropHidden$ = tansu.computed(() => {
157
+ if (!bodyScroll$()) {
158
+ if (hidden$()) {
159
+ scrollbars.revertScrollbars();
160
+ } else {
161
+ scrollbars.removeScrollbars();
162
+ }
163
+ }
164
+ return !backdrop$() || hidden$();
165
+ });
166
+ const backdropAttributeDirective = utils_directive.createAttributesDirective(() => ({
167
+ attributes: {
168
+ class: backdropClass$,
169
+ "data-agnos-ignore-inert": utils_stores.true$
170
+ },
171
+ events: {
172
+ click: async () => {
173
+ await transition.api.hide();
174
+ }
175
+ }
176
+ }));
177
+ const direction = tansu.computed(() => ["inline-start", "block-start"].some((placement) => className$().includes(placement)) ? 1 : -1);
178
+ const startDimension = tansu.writable(0);
179
+ const startPos = tansu.writable(0);
180
+ const dimension = tansu.writable(0);
181
+ const splitterDirective = utils_directive.createAttributesDirective(() => ({
182
+ attributes: {
183
+ draggable: tansu.readable("true")
184
+ },
185
+ events: {
186
+ dragstart: (e) => {
187
+ startPos.set(isVertical() ? e.clientY : e.clientX);
188
+ startDimension.set(isVertical() ? height$() : width$());
189
+ e.dataTransfer?.setDragImage(new Image(), 0, 0);
190
+ },
191
+ dragend: (e) => {
192
+ document.body.style.cursor = "";
193
+ updateDimension(e);
194
+ },
195
+ dragover: (event) => {
196
+ event.preventDefault();
197
+ },
198
+ drag: (e) => {
199
+ updateDimension(e);
200
+ }
201
+ }
202
+ }));
203
+ const updateDimension = (e) => {
204
+ if (!isVertical() && e.clientX > 0) {
205
+ dimension.set(startDimension() + direction() * (e.clientX - startPos()));
206
+ width$.set(dimension());
207
+ } else if (isVertical() && e.clientY > 0) {
208
+ dimension.set(startDimension() + direction() * (e.clientY - startPos()));
209
+ height$.set(dimension());
210
+ }
211
+ };
212
+ const visible$ = transition.stores.visible$;
213
+ const transitioning$ = tansu.computed(() => transition.stores.transitioning$() || backdropTransition.stores.transitioning$());
214
+ const hidden$ = tansu.computed(() => !transitioning$() && !visible$());
215
+ const widget = {
216
+ ...utils_stores.stateStores({
217
+ ...stateProps,
218
+ backdropClass$,
219
+ className$,
220
+ container$,
221
+ visible$,
222
+ backdropHidden$,
223
+ hidden$
224
+ }),
225
+ patch,
226
+ api: {
227
+ open: transition.api.show,
228
+ close: transition.api.hide
229
+ },
230
+ directives: {
231
+ containerDirective,
232
+ drawerPortalDirective,
233
+ drawerDirective: utils_directive.mergeDirectives(
234
+ transition.directives.directive,
235
+ utils_directive.bindDirective(
236
+ services_siblingsInert.siblingsInert,
237
+ tansu.computed(() => !bodyScroll$())
238
+ ),
239
+ drawerAttributeDirective,
240
+ services_focusElement.focusElement
241
+ ),
242
+ backdropPortalDirective,
243
+ backdropDirective: utils_directive.mergeDirectives(backdropTransition.directives.directive, backdropAttributeDirective),
244
+ splitterDirective
245
+ }
246
+ };
247
+ return widget;
248
+ });
249
+ exports.createDrawer = createDrawer;
250
+ exports.getDrawerDefaultConfig = getDrawerDefaultConfig;
package/index.cjs CHANGED
@@ -1,17 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const types = require("./types.cjs");
4
- const accordion = require("./accordion-cR5JqWJ8.cjs");
5
- const alert = require("./alert-DtDozJal.cjs");
6
- const collapse = require("./collapse-DRp53EuG.cjs");
7
- const modal = require("./modal-BEnQ6c5M.cjs");
8
- const pagination = require("./pagination-C1TT-oea.cjs");
9
- const progressbar = require("./progressbar-CRvhNB5R.cjs");
10
- const rating = require("./rating-DAb6nR67.cjs");
11
- const select = require("./select-C0rJJQfl.cjs");
12
- const slider = require("./slider-DSx5CAce.cjs");
13
- const toaster = require("./toaster-Cayg6Lbq.cjs");
14
- const tree = require("./tree-Pvr2rZ-D.cjs");
4
+ const accordion = require("./accordion-B5LiN1uy.cjs");
5
+ const alert = require("./alert-B-jQDQcB.cjs");
6
+ const collapse = require("./collapse-gLiT080Y.cjs");
7
+ const modal = require("./modal-DiXZXYjR.cjs");
8
+ const pagination = require("./pagination-DvZ2rLsz.cjs");
9
+ const progressbar = require("./progressbar-i9xfAxb7.cjs");
10
+ const rating = require("./rating-DmG4oUkr.cjs");
11
+ const select = require("./select-MFjAnIt7.cjs");
12
+ const slider = require("./slider-Dl4Trh32.cjs");
13
+ const toaster = require("./toaster-UDglac7x.cjs");
14
+ const tree = require("./tree-rGHtmCnS.cjs");
15
+ const drawer = require("./drawer-DP7UPojk.cjs");
15
16
  const config = require("./config.cjs");
16
17
  const services_extendWidget = require("./services/extendWidget.cjs");
17
18
  const services_floatingUI = require("./services/floatingUI.cjs");
@@ -26,9 +27,9 @@ const services_hash = require("./services/hash.cjs");
26
27
  const services_transitions_baseTransitions = require("./services/transitions/baseTransitions.cjs");
27
28
  const services_transitions_cssTransitions = require("./services/transitions/cssTransitions.cjs");
28
29
  const services_transitions_simpleClassTransition = require("./services/transitions/simpleClassTransition.cjs");
29
- const utils_directive = require("./dom-CuBx1JPZ.cjs");
30
+ const utils_directive = require("./dom-C2gi9OCP.cjs");
30
31
  const utils_stores = require("./utils/stores.cjs");
31
- const utils_writables = require("./writables-Bn3uhKEG.cjs");
32
+ const utils_writables = require("./writables-DcGT98a7.cjs");
32
33
  exports.FACTORY_WIDGET_NAME = types.FACTORY_WIDGET_NAME;
33
34
  exports.INVALID_VALUE = types.INVALID_VALUE;
34
35
  exports.createAccordion = accordion.createAccordion;
@@ -42,6 +43,7 @@ exports.getCollapseDefaultConfig = collapse.getCollapseDefaultConfig;
42
43
  exports.createModal = modal.createModal;
43
44
  exports.getModalDefaultConfig = modal.getModalDefaultConfig;
44
45
  exports.modalCloseButtonClick = modal.modalCloseButtonClick;
46
+ exports.modalCloseEscape = modal.modalCloseEscape;
45
47
  exports.modalOutsideClick = modal.modalOutsideClick;
46
48
  exports.createPagination = pagination.createPagination;
47
49
  exports.getPaginationDefaultConfig = pagination.getPaginationDefaultConfig;
@@ -59,6 +61,8 @@ exports.defaultToasterProps = toaster.defaultToasterProps;
59
61
  exports.getToastDefaultConfig = toaster.getToastDefaultConfig;
60
62
  exports.createTree = tree.createTree;
61
63
  exports.getTreeDefaultConfig = tree.getTreeDefaultConfig;
64
+ exports.createDrawer = drawer.createDrawer;
65
+ exports.getDrawerDefaultConfig = drawer.getDrawerDefaultConfig;
62
66
  exports.createWidgetsConfig = config.createWidgetsConfig;
63
67
  exports.mergeInto = config.mergeInto;
64
68
  exports.extendWidgetProps = services_extendWidget.extendWidgetProps;
@@ -88,6 +92,8 @@ exports.classDirective = utils_directive.classDirective;
88
92
  exports.createAttributesDirective = utils_directive.createAttributesDirective;
89
93
  exports.createBrowserStoreArrayDirective = utils_directive.createBrowserStoreArrayDirective;
90
94
  exports.createBrowserStoreDirective = utils_directive.createBrowserStoreDirective;
95
+ exports.createConditionalBrowserStoreArrayDirective = utils_directive.createConditionalBrowserStoreArrayDirective;
96
+ exports.createConditionalStoreArrayDirective = utils_directive.createConditionalStoreArrayDirective;
91
97
  exports.createStoreArrayDirective = utils_directive.createStoreArrayDirective;
92
98
  exports.createStoreDirective = utils_directive.createStoreDirective;
93
99
  exports.directiveAttributes = utils_directive.directiveAttributes;
package/index.d.ts CHANGED
@@ -10,6 +10,7 @@ export * from './components/select';
10
10
  export * from './components/slider';
11
11
  export * from './components/toast';
12
12
  export * from './components/tree';
13
+ export * from './components/drawer';
13
14
  export * from './config';
14
15
  export * from './services/extendWidget';
15
16
  export * from './services/floatingUI';
package/index.js CHANGED
@@ -1,15 +1,16 @@
1
1
  import { FACTORY_WIDGET_NAME, INVALID_VALUE } from "./types.js";
2
- import { a, c, f, g } from "./accordion-CoM4efp-.js";
3
- import { c as c2, g as g2 } from "./alert-YIlqdEPO.js";
4
- import { c as c3, g as g3 } from "./collapse-DwXz2kNw.js";
5
- import { c as c4, g as g4, a as a2, m } from "./modal-D3wGIDlj.js";
6
- import { c as c5, g as g5 } from "./pagination-B97wBLok.js";
7
- import { c as c6, g as g6 } from "./progressbar-BWBlRk_Y.js";
8
- import { c as c7, g as g7 } from "./rating-BXvy9kXq.js";
9
- import { c as c8, g as g8 } from "./select-BdjpnE7_.js";
10
- import { c as c9, g as g9 } from "./slider-BmxQ3A_u.js";
11
- import { T, c as c10, d, g as g10 } from "./toaster-XfzHDqz_.js";
12
- import { c as c11, g as g11 } from "./tree-BFrXdJox.js";
2
+ import { a, c, f, g } from "./accordion-_zen-g8l.js";
3
+ import { c as c2, g as g2 } from "./alert-gGz2CDS9.js";
4
+ import { c as c3, g as g3 } from "./collapse-BV4kD3j9.js";
5
+ import { c as c4, g as g4, a as a2, b, m } from "./modal-CAvQW-vo.js";
6
+ import { c as c5, g as g5 } from "./pagination-BKbMROV6.js";
7
+ import { c as c6, g as g6 } from "./progressbar-D8zIcm9n.js";
8
+ import { c as c7, g as g7 } from "./rating-DEXTGWCU.js";
9
+ import { c as c8, g as g8 } from "./select-Bw68Xdu5.js";
10
+ import { c as c9, g as g9 } from "./slider-Cx50Eghd.js";
11
+ import { T, c as c10, d, g as g10 } from "./toaster-_p1GTtHI.js";
12
+ import { c as c11, g as g11 } from "./tree-DV0tfPlZ.js";
13
+ import { c as c12, g as g12 } from "./drawer-D5SO73ew.js";
13
14
  import { createWidgetsConfig, mergeInto } from "./config.js";
14
15
  import { extendWidgetProps } from "./services/extendWidget.js";
15
16
  import { createFloatingUI } from "./services/floatingUI.js";
@@ -24,29 +25,32 @@ import { hash$ } from "./services/hash.js";
24
25
  import { createTransition, noAnimation } from "./services/transitions/baseTransitions.js";
25
26
  import { createCSSTransition, getTransitionDurationMs, hasTransition } from "./services/transitions/cssTransitions.js";
26
27
  import { createSimpleClassTransition } from "./services/transitions/simpleClassTransition.js";
27
- import { o, a as a3, c as c12, b, p, n, g as g12, j, f as f2, h, q, d as d2, e, i, m as m2, k, l, r, s } from "./dom-gfxqXJpK.js";
28
+ import { q, a as a3, c as c13, b as b2, s, p, h, l, j, f as f2, g as g13, k, t, d as d2, e, i, m as m2, n, o, r, u } from "./dom-Bcg9ORcA.js";
28
29
  import { bindableDerived, bindableProp, createPatch, false$, findChangedProperties, idWithDefault, isStore, mergeConfigStores, normalizeConfigStores, stateStores, toReadableStore, toWritableStore, true$, writableWithDefault, writablesForProps, writablesWithDefault } from "./utils/stores.js";
29
- import { j as j2, t, i as i2, c as c13, d as d3, g as g13, h as h2, a as a4, b as b2, e as e2, f as f3 } from "./writables-CgpOQ4hA.js";
30
+ import { j as j2, t as t2, i as i2, c as c14, d as d3, g as g14, h as h2, a as a4, b as b3, e as e2, f as f3 } from "./writables-e0tyaQpe.js";
30
31
  export {
31
32
  FACTORY_WIDGET_NAME,
32
33
  INVALID_VALUE,
33
34
  T as Toaster,
34
35
  activeElement$,
35
- o as attributesData,
36
+ q as attributesData,
36
37
  a3 as bindDirective,
37
- c12 as bindDirectiveNoArg,
38
+ c13 as bindDirectiveNoArg,
38
39
  bindableDerived,
39
40
  bindableProp,
40
- b as browserDirective,
41
- p as classDirective,
41
+ b2 as browserDirective,
42
+ s as classDirective,
42
43
  a as createAccordion,
43
44
  c as createAccordionItem,
44
45
  c2 as createAlert,
45
- n as createAttributesDirective,
46
- g12 as createBrowserStoreArrayDirective,
47
- j as createBrowserStoreDirective,
46
+ p as createAttributesDirective,
47
+ h as createBrowserStoreArrayDirective,
48
+ l as createBrowserStoreDirective,
48
49
  createCSSTransition,
49
50
  c3 as createCollapse,
51
+ j as createConditionalBrowserStoreArrayDirective,
52
+ f2 as createConditionalStoreArrayDirective,
53
+ c12 as createDrawer,
50
54
  createFloatingUI,
51
55
  createHasFocus,
52
56
  createIntersection,
@@ -61,15 +65,15 @@ export {
61
65
  c8 as createSelect,
62
66
  createSimpleClassTransition,
63
67
  c9 as createSlider,
64
- f2 as createStoreArrayDirective,
65
- h as createStoreDirective,
68
+ g13 as createStoreArrayDirective,
69
+ k as createStoreDirective,
66
70
  c10 as createToast,
67
71
  createTransition,
68
72
  c11 as createTree,
69
73
  j2 as createTypeEnum,
70
74
  createWidgetsConfig,
71
75
  d as defaultToasterProps,
72
- q as directiveAttributes,
76
+ t as directiveAttributes,
73
77
  d2 as directiveSubscribe,
74
78
  e as directiveUpdate,
75
79
  extendWidgetProps,
@@ -79,6 +83,7 @@ export {
79
83
  g as getAccordionDefaultConfig,
80
84
  g2 as getAlertDefaultConfig,
81
85
  g3 as getCollapseDefaultConfig,
86
+ g12 as getDrawerDefaultConfig,
82
87
  getKeyName,
83
88
  g4 as getModalDefaultConfig,
84
89
  g5 as getPaginationDefaultConfig,
@@ -97,29 +102,30 @@ export {
97
102
  isStore,
98
103
  m2 as mapDirectiveArg,
99
104
  mergeConfigStores,
100
- k as mergeDirectives,
105
+ n as mergeDirectives,
101
106
  mergeInto,
102
107
  a2 as modalCloseButtonClick,
108
+ b as modalCloseEscape,
103
109
  m as modalOutsideClick,
104
- l as multiDirective,
110
+ o as multiDirective,
105
111
  noAnimation,
106
112
  normalizeConfigStores,
107
113
  portal,
108
114
  r as registrationArray,
109
115
  siblingsInert,
110
- s as ssrAttributes,
116
+ u as ssrAttributes,
111
117
  stateStores,
112
- t as testToNormalizeValue,
118
+ t2 as testToNormalizeValue,
113
119
  toReadableStore,
114
120
  toWritableStore,
115
121
  true$,
116
122
  i2 as typeArray,
117
- c13 as typeBoolean,
123
+ c14 as typeBoolean,
118
124
  d3 as typeBooleanOrNull,
119
- g13 as typeFunction,
125
+ g14 as typeFunction,
120
126
  h2 as typeHTMLElementOrNull,
121
127
  a4 as typeNumber,
122
- b2 as typeNumberInRangeFactory,
128
+ b3 as typeNumberInRangeFactory,
123
129
  e2 as typeString,
124
130
  f3 as typeStringOrNull,
125
131
  writableWithDefault,
@@ -0,0 +1,32 @@
1
+ const isInertOrInvisible = (element) => {
2
+ let curElement = element;
3
+ while (curElement) {
4
+ const style = getComputedStyle(curElement);
5
+ if (curElement.inert || curElement.hidden || style.display === "none" || style.visibility === "hidden") {
6
+ return true;
7
+ }
8
+ curElement = curElement.parentElement;
9
+ }
10
+ return false;
11
+ };
12
+ const checkNotDisabled = (element) => {
13
+ if (element.disabled) {
14
+ return false;
15
+ }
16
+ const parentFieldset = element.parentElement?.closest("fieldset");
17
+ return parentFieldset ? checkNotDisabled(parentFieldset) : true;
18
+ };
19
+ const isFocusableOtherTags = (element) => element.isContentEditable || !!element.hasAttribute("tabindex");
20
+ const isFocusableByTagName = {
21
+ INPUT: (element) => element.type !== "hidden" && checkNotDisabled(element),
22
+ SELECT: checkNotDisabled,
23
+ TEXTAREA: checkNotDisabled,
24
+ BUTTON: checkNotDisabled,
25
+ A: (element) => !!element.href || isFocusableOtherTags(element)
26
+ };
27
+ const isFocusable = (element) => {
28
+ return document.contains(element) && !isInertOrInvisible(element) && (isFocusableByTagName[element.tagName] ?? isFocusableOtherTags)(element);
29
+ };
30
+ export {
31
+ isFocusable as i
32
+ };
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ const isInertOrInvisible = (element) => {
3
+ let curElement = element;
4
+ while (curElement) {
5
+ const style = getComputedStyle(curElement);
6
+ if (curElement.inert || curElement.hidden || style.display === "none" || style.visibility === "hidden") {
7
+ return true;
8
+ }
9
+ curElement = curElement.parentElement;
10
+ }
11
+ return false;
12
+ };
13
+ const checkNotDisabled = (element) => {
14
+ if (element.disabled) {
15
+ return false;
16
+ }
17
+ const parentFieldset = element.parentElement?.closest("fieldset");
18
+ return parentFieldset ? checkNotDisabled(parentFieldset) : true;
19
+ };
20
+ const isFocusableOtherTags = (element) => element.isContentEditable || !!element.hasAttribute("tabindex");
21
+ const isFocusableByTagName = {
22
+ INPUT: (element) => element.type !== "hidden" && checkNotDisabled(element),
23
+ SELECT: checkNotDisabled,
24
+ TEXTAREA: checkNotDisabled,
25
+ BUTTON: checkNotDisabled,
26
+ A: (element) => !!element.href || isFocusableOtherTags(element)
27
+ };
28
+ const isFocusable = (element) => {
29
+ return document.contains(element) && !isInertOrInvisible(element) && (isFocusableByTagName[element.tagName] ?? isFocusableOtherTags)(element);
30
+ };
31
+ exports.isFocusable = isFocusable;
@@ -1,41 +1,18 @@
1
1
  import { computed, readable } from "@amadeus-it-group/tansu";
2
- import { c as typeBoolean, g as typeFunction, e as typeString, h as typeHTMLElementOrNull } from "./writables-CgpOQ4hA.js";
2
+ import { c as typeBoolean, g as typeFunction, e as typeString, h as typeHTMLElementOrNull } from "./writables-e0tyaQpe.js";
3
3
  import { writablesForProps, stateStores } from "./utils/stores.js";
4
4
  import { createTransition } from "./services/transitions/baseTransitions.js";
5
- import { d as promiseFromStore } from "./promise-XSP94FjG.js";
5
+ import { p as promiseFromStore } from "./promise-Y53vc4Ia.js";
6
6
  import { noop } from "./utils/func.js";
7
- import { a as bindDirective, r as registrationArray, n as createAttributesDirective, k as mergeDirectives, d as directiveSubscribe, b as browserDirective } from "./dom-gfxqXJpK.js";
7
+ import { r as removeScrollbars, a as revertScrollbars } from "./scrollbars-CcxSrnCx.js";
8
+ import { a as bindDirective, r as registrationArray, p as createAttributesDirective, n as mergeDirectives, d as directiveSubscribe, c as bindDirectiveNoArg, b as browserDirective } from "./dom-Bcg9ORcA.js";
8
9
  import { portal } from "./services/portal.js";
9
10
  import { siblingsInert } from "./services/siblingsInert.js";
10
11
  import { createWidgetFactory } from "./utils/widget.js";
11
- const internalRemoveScrollbars = () => {
12
- const scrollbarWidth = Math.abs(window.innerWidth - document.documentElement.clientWidth);
13
- const body = document.body;
14
- const bodyStyle = body.style;
15
- const { overflow, paddingRight } = bodyStyle;
16
- if (scrollbarWidth > 0) {
17
- const actualPadding = parseFloat(window.getComputedStyle(body).paddingRight);
18
- bodyStyle.paddingRight = `${actualPadding + scrollbarWidth}px`;
19
- }
20
- bodyStyle.overflow = "hidden";
21
- return () => {
22
- if (scrollbarWidth > 0) {
23
- bodyStyle.paddingRight = paddingRight;
24
- }
25
- bodyStyle.overflow = overflow;
26
- };
27
- };
28
- let internalRevert = noop;
29
- const removeScrollbars = () => {
30
- internalRevert();
31
- internalRevert = internalRemoveScrollbars();
32
- };
33
- const revertScrollbars = () => {
34
- internalRevert();
35
- internalRevert = noop;
36
- };
12
+ import { focusElement } from "./services/focusElement.js";
37
13
  const modalOutsideClick = Symbol();
38
14
  const modalCloseButtonClick = Symbol();
15
+ const modalCloseEscape = Symbol();
39
16
  const defaultConfig = {
40
17
  animated: true,
41
18
  ariaCloseButtonLabel: "Close",
@@ -160,7 +137,7 @@ const createModal = createWidgetFactory("modal", (config$) => {
160
137
  const element = container ? modalTransition.stores.element$() : void 0;
161
138
  return {
162
139
  container,
163
- insertBefore: (element == null ? void 0 : element.parentElement) === container ? element : void 0
140
+ insertBefore: element?.parentElement === container ? element : void 0
164
141
  };
165
142
  })
166
143
  );
@@ -187,13 +164,23 @@ const createModal = createWidgetFactory("modal", (config$) => {
187
164
  }));
188
165
  const modalAttributeDirective = createAttributesDirective(() => ({
189
166
  attributes: {
190
- class: className$
167
+ class: className$,
168
+ tabIndex: readable("-1")
191
169
  },
192
170
  events: {
193
171
  click: (event) => {
194
172
  if (event.currentTarget === event.target && closeOnOutsideClick$()) {
195
173
  close(modalOutsideClick);
196
174
  }
175
+ },
176
+ keydown: (event) => {
177
+ const { key } = event;
178
+ switch (key) {
179
+ case "Escape":
180
+ close(modalCloseEscape);
181
+ event.stopPropagation();
182
+ break;
183
+ }
197
184
  }
198
185
  }
199
186
  }));
@@ -214,7 +201,13 @@ const createModal = createWidgetFactory("modal", (config$) => {
214
201
  modalPortalDirective,
215
202
  backdropPortalDirective,
216
203
  backdropDirective: mergeDirectives(backdropTransition.directives.directive, backdropAttributeDirective),
217
- modalDirective: mergeDirectives(modalTransition.directives.directive, siblingsInert, directiveSubscribe(action$), modalAttributeDirective),
204
+ modalDirective: mergeDirectives(
205
+ modalTransition.directives.directive,
206
+ bindDirectiveNoArg(siblingsInert),
207
+ directiveSubscribe(action$),
208
+ modalAttributeDirective,
209
+ focusElement
210
+ ),
218
211
  closeButtonDirective,
219
212
  dialogDirective: bindDirective(
220
213
  browserDirective((dialog, visible) => {
@@ -248,6 +241,7 @@ const createModal = createWidgetFactory("modal", (config$) => {
248
241
  });
249
242
  export {
250
243
  modalCloseButtonClick as a,
244
+ modalCloseEscape as b,
251
245
  createModal as c,
252
246
  getModalDefaultConfig as g,
253
247
  modalOutsideClick as m