@agnos-ui/core 0.10.0-next.2 → 0.10.0-next.3

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 (101) hide show
  1. package/{accordion-DqnKGmbS.js → accordion-47EpOD36.js} +2 -2
  2. package/{accordion-DRIm0xHf.cjs → accordion-nxveC0GZ.cjs} +2 -2
  3. package/{alert-B-jQDQcB.cjs → alert-AhaliJ17.cjs} +1 -1
  4. package/{alert-gGz2CDS9.js → alert-anMaigvi.js} +1 -1
  5. package/{collapse-BV4kD3j9.js → collapse-CrfvGo_T.js} +2 -2
  6. package/{collapse-gLiT080Y.cjs → collapse-Da_27YUU.cjs} +2 -2
  7. package/{common-D3QcdJ6S.cjs → common-B5jS-Ih_.cjs} +1 -1
  8. package/{common-DK0ADNTX.js → common-CCxNtFNM.js} +1 -1
  9. package/components/accordion/index.cjs +1 -1
  10. package/components/accordion/index.js +1 -1
  11. package/components/alert/index.cjs +1 -1
  12. package/components/alert/index.js +1 -1
  13. package/components/carousel/index.cjs +2 -2
  14. package/components/carousel/index.js +2 -2
  15. package/components/collapse/index.cjs +1 -1
  16. package/components/collapse/index.js +1 -1
  17. package/components/drawer/drawer.d.ts +32 -25
  18. package/components/drawer/index.cjs +1 -1
  19. package/components/drawer/index.js +1 -1
  20. package/components/modal/index.cjs +1 -1
  21. package/components/modal/index.js +1 -1
  22. package/components/pagination/index.cjs +1 -1
  23. package/components/pagination/index.js +1 -1
  24. package/components/progressbar/index.cjs +1 -1
  25. package/components/progressbar/index.js +1 -1
  26. package/components/rating/index.cjs +1 -1
  27. package/components/rating/index.js +1 -1
  28. package/components/select/index.cjs +1 -1
  29. package/components/select/index.js +1 -1
  30. package/components/slider/index.cjs +1 -1
  31. package/components/slider/index.js +1 -1
  32. package/components/toast/index.cjs +1 -1
  33. package/components/toast/index.js +1 -1
  34. package/components/tree/index.cjs +1 -1
  35. package/components/tree/index.js +1 -1
  36. package/{dom-C2gi9OCP.cjs → dom-Cm9_uROp.cjs} +76 -6
  37. package/{dom-Bcg9ORcA.js → dom-DD1hAVZy.js} +76 -6
  38. package/drawer-Caz4Uypu.js +291 -0
  39. package/{drawer-DP7UPojk.cjs → drawer-DOi0TqZC.cjs} +131 -91
  40. package/index.cjs +16 -14
  41. package/index.js +21 -19
  42. package/{modal-DiXZXYjR.cjs → modal-B_3Uxplo.cjs} +5 -5
  43. package/{modal-CAvQW-vo.js → modal-cKd3qUn1.js} +5 -5
  44. package/package.json +1 -1
  45. package/{pagination-DvZ2rLsz.cjs → pagination-2Vor6JPZ.cjs} +2 -2
  46. package/{pagination-BKbMROV6.js → pagination-DlOyP_2C.js} +2 -2
  47. package/{progressbar-D8zIcm9n.js → progressbar-B5g76eMV.js} +2 -2
  48. package/{progressbar-i9xfAxb7.cjs → progressbar-DyBRINco.cjs} +2 -2
  49. package/{rating-DmG4oUkr.cjs → rating-C0y1j4SC.cjs} +2 -2
  50. package/{rating-DEXTGWCU.js → rating-C7C4-p4B.js} +2 -2
  51. package/{select-MFjAnIt7.cjs → select-Dhsb9msC.cjs} +1 -1
  52. package/{select-Bw68Xdu5.js → select-nnl00UWY.js} +1 -1
  53. package/services/floatingUI.cjs +1 -1
  54. package/services/floatingUI.js +1 -1
  55. package/services/focusElement.cjs +1 -1
  56. package/services/focusElement.js +1 -1
  57. package/services/focustrack.cjs +1 -1
  58. package/services/focustrack.js +1 -1
  59. package/services/matchMedia.cjs +1 -1
  60. package/services/matchMedia.js +1 -1
  61. package/services/navManager.cjs +1 -1
  62. package/services/navManager.js +1 -1
  63. package/services/pointerdownPosition.cjs +60 -0
  64. package/services/pointerdownPosition.d.ts +42 -0
  65. package/services/pointerdownPosition.js +60 -0
  66. package/services/portal.cjs +1 -1
  67. package/services/portal.js +1 -1
  68. package/services/resizeObserver.cjs +40 -20
  69. package/services/resizeObserver.d.ts +10 -2
  70. package/services/resizeObserver.js +41 -21
  71. package/services/siblingsInert.cjs +1 -1
  72. package/services/siblingsInert.js +1 -1
  73. package/services/transitions/baseTransitions.cjs +2 -2
  74. package/services/transitions/baseTransitions.js +2 -2
  75. package/services/transitions/collapse.cjs +11 -15
  76. package/services/transitions/collapse.js +11 -15
  77. package/services/transitions/cssTransitions.cjs +1 -1
  78. package/services/transitions/cssTransitions.js +1 -1
  79. package/services/transitions/simpleClassTransition.cjs +1 -1
  80. package/services/transitions/simpleClassTransition.js +1 -1
  81. package/{slider-Cx50Eghd.js → slider-B4WrdTeE.js} +121 -170
  82. package/{slider-Dl4Trh32.cjs → slider-DTO58syz.cjs} +120 -169
  83. package/{toaster-_p1GTtHI.js → toaster-CRPErgI2.js} +3 -3
  84. package/{toaster-UDglac7x.cjs → toaster-CT148JSJ.cjs} +3 -3
  85. package/{tree-rGHtmCnS.cjs → tree-C4l2Wqny.cjs} +2 -2
  86. package/{tree-DV0tfPlZ.js → tree-CHpFqJPx.js} +2 -2
  87. package/types.cjs +2 -2
  88. package/types.d.ts +22 -3
  89. package/types.js +2 -2
  90. package/utils/directive.cjs +1 -1
  91. package/utils/directive.d.ts +2 -2
  92. package/utils/directive.js +1 -1
  93. package/utils/internal/ssrHTMLElement.d.ts +7 -1
  94. package/utils/stores.cjs +1 -1
  95. package/utils/stores.js +1 -1
  96. package/utils/writables.cjs +2 -1
  97. package/utils/writables.d.ts +7 -0
  98. package/utils/writables.js +6 -5
  99. package/{writables-DcGT98a7.cjs → writables-Dt68gADJ.cjs} +4 -0
  100. package/{writables-e0tyaQpe.js → writables-Is1bF1Vt.js} +10 -6
  101. package/drawer-D5SO73ew.js +0 -251
@@ -0,0 +1,291 @@
1
+ import { computed, asWritable, writable, untrack, readable } from "@amadeus-it-group/tansu";
2
+ import { focusElement } from "./services/focusElement.js";
3
+ import { createPointerdownPositionDirective } from "./services/pointerdownPosition.js";
4
+ import { portal } from "./services/portal.js";
5
+ import { siblingsInert } from "./services/siblingsInert.js";
6
+ import { createTransition } from "./services/transitions/baseTransitions.js";
7
+ import { a as bindDirective, l as createBrowserStoreDirective, n as mergeDirectives, p as createAttributesDirective, d as directiveSubscribe, i as isBrowserHTMLElement } from "./dom-DD1hAVZy.js";
8
+ import { noop } from "./utils/func.js";
9
+ import { r as removeScrollbars, a as revertScrollbars } from "./scrollbars-CcxSrnCx.js";
10
+ import { writablesForProps, bindableProp, stateStores, true$ } from "./utils/stores.js";
11
+ import { createWidgetFactory } from "./utils/widget.js";
12
+ import { g as typeNumberOrNull, c as typeBoolean, h as typeFunction, i as typeHTMLElementOrNull, e as typeString } from "./writables-Is1bF1Vt.js";
13
+ function getDrawerDefaultConfig() {
14
+ return {
15
+ ...defaultDrawerConfig
16
+ };
17
+ }
18
+ const defaultDrawerConfig = {
19
+ animated: true,
20
+ ariaDescribedBy: "",
21
+ ariaLabelledBy: "",
22
+ backdropClass: "",
23
+ backdropTransition: noop,
24
+ className: "w-full",
25
+ visible: false,
26
+ container: typeof window !== "undefined" ? document.body : null,
27
+ transition: noop,
28
+ verticalTransition: noop,
29
+ onHidden: noop,
30
+ onShown: noop,
31
+ onSizeChange: noop,
32
+ onVisibleChange: noop,
33
+ onMinimizedChange: noop,
34
+ onMaximizedChange: noop,
35
+ onResizingChange: noop,
36
+ resizable: false,
37
+ backdrop: true,
38
+ bodyScroll: false,
39
+ size: null
40
+ };
41
+ const configValidator = {
42
+ animated: typeBoolean,
43
+ ariaDescribedBy: typeString,
44
+ ariaLabelledBy: typeString,
45
+ backdropClass: typeString,
46
+ backdropTransition: typeFunction,
47
+ className: typeString,
48
+ visible: typeBoolean,
49
+ transition: typeFunction,
50
+ verticalTransition: typeFunction,
51
+ container: typeHTMLElementOrNull,
52
+ onHidden: typeFunction,
53
+ onShown: typeFunction,
54
+ onSizeChange: typeFunction,
55
+ onVisibleChange: typeFunction,
56
+ onMinimizedChange: typeFunction,
57
+ onMaximizedChange: typeFunction,
58
+ onResizingChange: typeFunction,
59
+ resizable: typeBoolean,
60
+ backdrop: typeBoolean,
61
+ bodyScroll: typeBoolean,
62
+ size: typeNumberOrNull
63
+ };
64
+ const createDrawer = createWidgetFactory("drawer", (config) => {
65
+ const [
66
+ {
67
+ backdrop$,
68
+ backdropTransition$,
69
+ backdropClass$,
70
+ bodyScroll$,
71
+ transition$,
72
+ verticalTransition$,
73
+ visible$: requestedVisible$,
74
+ container$,
75
+ className$,
76
+ size$: _dirtySize$,
77
+ animated$,
78
+ ariaDescribedBy$,
79
+ ariaLabelledBy$,
80
+ onHidden$,
81
+ onShown$,
82
+ onSizeChange$,
83
+ onVisibleChange$,
84
+ onMinimizedChange$,
85
+ onMaximizedChange$,
86
+ onResizingChange$,
87
+ ...stateProps
88
+ },
89
+ patch
90
+ ] = writablesForProps(defaultDrawerConfig, config, configValidator);
91
+ const size$ = bindableProp(_dirtySize$, onSizeChange$, (value) => value ? Math.round(value) : value);
92
+ const isVertical$ = computed(() => {
93
+ const isVertical = ["block-start", "block-end"].some((placement) => className$().includes(placement));
94
+ return isVertical;
95
+ });
96
+ const transition = createTransition({
97
+ props: {
98
+ animated: animated$,
99
+ animatedOnInit: animated$,
100
+ transition: asWritable(computed(() => isVertical$() ? verticalTransition$() : transition$())),
101
+ visible: requestedVisible$,
102
+ onVisibleChange: onVisibleChange$,
103
+ onHidden: onHidden$,
104
+ onShown: onShown$
105
+ }
106
+ });
107
+ const drawerPortalDirective = bindDirective(
108
+ portal,
109
+ computed(() => ({ container: container$() }))
110
+ );
111
+ const { directive: drawerElementDirective, element$: drawerElement$ } = createBrowserStoreDirective();
112
+ const drawerAttributeDirective = mergeDirectives(
113
+ drawerElementDirective,
114
+ createAttributesDirective(() => ({
115
+ attributes: {
116
+ class: className$,
117
+ role: readable("dialog"),
118
+ "aria-describedby": ariaDescribedBy$,
119
+ "aria-labelledby": ariaLabelledBy$,
120
+ "aria-modal": readable("true"),
121
+ tabIndex: readable("-1")
122
+ },
123
+ styles: {
124
+ position: computed(() => {
125
+ const container = container$();
126
+ return container && isBrowserHTMLElement(container) && container !== document.body ? "relative" : "fixed";
127
+ }),
128
+ outline: readable("none")
129
+ },
130
+ events: {
131
+ keydown: async (e) => {
132
+ if (e.key === "Escape") {
133
+ await transition.api.hide();
134
+ }
135
+ }
136
+ }
137
+ }))
138
+ );
139
+ const backdropTransition = createTransition({
140
+ props: {
141
+ animated: animated$,
142
+ transition: backdropTransition$
143
+ }
144
+ });
145
+ const backdropPortalDirective = bindDirective(
146
+ portal,
147
+ 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$ = computed(() => {
157
+ if (!bodyScroll$()) {
158
+ if (hidden$()) {
159
+ revertScrollbars();
160
+ } else {
161
+ removeScrollbars();
162
+ }
163
+ }
164
+ return !backdrop$() || hidden$();
165
+ });
166
+ const backdropAttributeDirective = createAttributesDirective(() => ({
167
+ attributes: {
168
+ class: backdropClass$,
169
+ "data-agnos-ignore-inert": true$
170
+ },
171
+ events: {
172
+ click: async () => await transition.api.hide()
173
+ }
174
+ }));
175
+ const direction$ = computed(() => ["inline-start", "block-start"].some((placement) => className$().includes(placement)) ? 1 : -1);
176
+ const isMinimized$ = writable(void 0);
177
+ const isMaximized$ = writable(void 0);
178
+ function setSize(size) {
179
+ const drawerElement = drawerElement$();
180
+ const isVertical = isVertical$();
181
+ size = Math.round(Math.max(0, size));
182
+ drawerElement.style[isVertical ? "height" : "width"] = `${size}px`;
183
+ const elementSize = Math.round(drawerElement[isVertical ? "offsetHeight" : "offsetWidth"]);
184
+ size$.set(elementSize);
185
+ isMinimized$.set(size != null && (size < elementSize || size === 0));
186
+ isMaximized$.set(!!size && size > elementSize);
187
+ return elementSize;
188
+ }
189
+ const splitterDirective = mergeDirectives(
190
+ createPointerdownPositionDirective((event) => {
191
+ const drawerElement = drawerElement$();
192
+ const isVertical = isVertical$();
193
+ const startSize = drawerElement[isVertical ? "offsetHeight" : "offsetWidth"];
194
+ const clientXorY = isVertical ? "clientY" : "clientX";
195
+ const startPos = event[clientXorY];
196
+ const direction = direction$();
197
+ onResizingChange$()(true);
198
+ return {
199
+ onMove(event2) {
200
+ setSize(startSize + direction * (event2[clientXorY] - startPos));
201
+ },
202
+ onEnd() {
203
+ drawerElement.style[isVertical ? "height" : "width"] = "";
204
+ onResizingChange$()(false);
205
+ }
206
+ };
207
+ }),
208
+ createAttributesDirective(() => ({
209
+ events: {
210
+ keydown: (e) => {
211
+ const { key } = e;
212
+ const size = size$() || drawerElement$()?.[isVertical$() ? "offsetHeight" : "offsetWidth"];
213
+ if (size != null) {
214
+ switch (key) {
215
+ case "ArrowLeft":
216
+ case "ArrowDown":
217
+ onResizingChange$()(true);
218
+ setSize(size - 10);
219
+ onResizingChange$()(false);
220
+ break;
221
+ case "ArrowRight":
222
+ case "ArrowUp":
223
+ onResizingChange$()(true);
224
+ setSize(size + 10);
225
+ onResizingChange$()(false);
226
+ break;
227
+ }
228
+ }
229
+ }
230
+ }
231
+ }))
232
+ );
233
+ const visible$ = transition.stores.visible$;
234
+ const transitioning$ = computed(() => transition.stores.transitioning$() || backdropTransition.stores.transitioning$());
235
+ const hidden$ = computed(() => !transitioning$() && !visible$());
236
+ const minSizeAction$ = computed(() => {
237
+ const isMinimized = isMinimized$();
238
+ if (isMinimized != null) {
239
+ untrack(() => onMinimizedChange$()(isMinimized));
240
+ }
241
+ });
242
+ const maxSizeAction$ = computed(() => {
243
+ const isMaximized = isMaximized$();
244
+ if (isMaximized != null) {
245
+ untrack(() => onMaximizedChange$()(isMaximized));
246
+ }
247
+ });
248
+ const action$ = computed(() => {
249
+ minSizeAction$();
250
+ maxSizeAction$();
251
+ });
252
+ const widget = {
253
+ ...stateStores({
254
+ ...stateProps,
255
+ backdropClass$,
256
+ className$,
257
+ container$,
258
+ size$,
259
+ visible$,
260
+ backdropHidden$,
261
+ hidden$
262
+ }),
263
+ patch,
264
+ api: {
265
+ open: transition.api.show,
266
+ close: transition.api.hide
267
+ },
268
+ directives: {
269
+ drawerPortalDirective,
270
+ drawerDirective: mergeDirectives(
271
+ directiveSubscribe(action$),
272
+ drawerAttributeDirective,
273
+ bindDirective(
274
+ siblingsInert,
275
+ computed(() => !bodyScroll$())
276
+ ),
277
+ // This directive must come after the attribute directive, to ensure that all the classes and attributes are applied for the transition
278
+ transition.directives.directive,
279
+ focusElement
280
+ ),
281
+ backdropPortalDirective,
282
+ backdropDirective: mergeDirectives(backdropTransition.directives.directive, backdropAttributeDirective),
283
+ splitterDirective
284
+ }
285
+ };
286
+ return widget;
287
+ });
288
+ export {
289
+ createDrawer as c,
290
+ getDrawerDefaultConfig as g
291
+ };
@@ -1,15 +1,16 @@
1
1
  "use strict";
2
2
  const tansu = require("@amadeus-it-group/tansu");
3
+ const services_focusElement = require("./services/focusElement.cjs");
4
+ const services_pointerdownPosition = require("./services/pointerdownPosition.cjs");
3
5
  const services_portal = require("./services/portal.cjs");
4
6
  const services_siblingsInert = require("./services/siblingsInert.cjs");
5
7
  const services_transitions_baseTransitions = require("./services/transitions/baseTransitions.cjs");
6
- const utils_directive = require("./dom-C2gi9OCP.cjs");
8
+ const utils_directive = require("./dom-Cm9_uROp.cjs");
7
9
  const utils_func = require("./utils/func.cjs");
8
10
  const scrollbars = require("./scrollbars-CT87iv_6.cjs");
9
11
  const utils_stores = require("./utils/stores.cjs");
10
12
  const utils_widget = require("./utils/widget.cjs");
11
- const utils_writables = require("./writables-DcGT98a7.cjs");
12
- const services_focusElement = require("./services/focusElement.cjs");
13
+ const utils_writables = require("./writables-Dt68gADJ.cjs");
13
14
  function getDrawerDefaultConfig() {
14
15
  return {
15
16
  ...defaultDrawerConfig
@@ -28,14 +29,15 @@ const defaultDrawerConfig = {
28
29
  verticalTransition: utils_func.noop,
29
30
  onHidden: utils_func.noop,
30
31
  onShown: utils_func.noop,
31
- width: 200,
32
- height: 200,
33
- onWidthChange: utils_func.noop,
34
- onHeightChange: utils_func.noop,
32
+ onSizeChange: utils_func.noop,
35
33
  onVisibleChange: utils_func.noop,
34
+ onMinimizedChange: utils_func.noop,
35
+ onMaximizedChange: utils_func.noop,
36
+ onResizingChange: utils_func.noop,
36
37
  resizable: false,
37
38
  backdrop: true,
38
- bodyScroll: false
39
+ bodyScroll: false,
40
+ size: null
39
41
  };
40
42
  const configValidator = {
41
43
  animated: utils_writables.typeBoolean,
@@ -50,14 +52,15 @@ const configValidator = {
50
52
  container: utils_writables.typeHTMLElementOrNull,
51
53
  onHidden: utils_writables.typeFunction,
52
54
  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,
55
+ onSizeChange: utils_writables.typeFunction,
57
56
  onVisibleChange: utils_writables.typeFunction,
57
+ onMinimizedChange: utils_writables.typeFunction,
58
+ onMaximizedChange: utils_writables.typeFunction,
59
+ onResizingChange: utils_writables.typeFunction,
58
60
  resizable: utils_writables.typeBoolean,
59
61
  backdrop: utils_writables.typeBoolean,
60
- bodyScroll: utils_writables.typeBoolean
62
+ bodyScroll: utils_writables.typeBoolean,
63
+ size: utils_writables.typeNumberOrNull
61
64
  };
62
65
  const createDrawer = utils_widget.createWidgetFactory("drawer", (config) => {
63
66
  const [
@@ -71,71 +74,69 @@ const createDrawer = utils_widget.createWidgetFactory("drawer", (config) => {
71
74
  visible$: requestedVisible$,
72
75
  container$,
73
76
  className$,
77
+ size$: _dirtySize$,
74
78
  animated$,
75
79
  ariaDescribedBy$,
76
80
  ariaLabelledBy$,
77
81
  onHidden$,
78
82
  onShown$,
79
- width$: _dirtyWidth$,
80
- height$: _dirtyHeight$,
81
- onWidthChange$,
82
- onHeightChange$,
83
+ onSizeChange$,
83
84
  onVisibleChange$,
85
+ onMinimizedChange$,
86
+ onMaximizedChange$,
87
+ onResizingChange$,
84
88
  ...stateProps
85
89
  },
86
90
  patch
87
91
  ] = 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;
92
+ const size$ = utils_stores.bindableProp(_dirtySize$, onSizeChange$, (value) => value ? Math.round(value) : value);
93
+ const isVertical$ = tansu.computed(() => {
94
+ const isVertical = ["block-start", "block-end"].some((placement) => className$().includes(placement));
95
+ return isVertical;
91
96
  });
92
97
  const transition = services_transitions_baseTransitions.createTransition({
93
98
  props: {
94
99
  animated: animated$,
95
100
  animatedOnInit: animated$,
96
- transition: tansu.asWritable(tansu.computed(() => isVertical() ? verticalTransition$() : transition$())),
101
+ transition: tansu.asWritable(tansu.computed(() => isVertical$() ? verticalTransition$() : transition$())),
97
102
  visible: requestedVisible$,
98
103
  onVisibleChange: onVisibleChange$,
99
104
  onHidden: onHidden$,
100
105
  onShown: onShown$
101
106
  }
102
107
  });
103
- const width$ = utils_stores.bindableProp(_dirtyWidth$, onWidthChange$);
104
- const height$ = utils_stores.bindableProp(_dirtyHeight$, onHeightChange$);
105
108
  const drawerPortalDirective = utils_directive.bindDirective(
106
109
  services_portal.portal,
107
110
  tansu.computed(() => ({ container: container$() }))
108
111
  );
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();
112
+ const { directive: drawerElementDirective, element$: drawerElement$ } = utils_directive.createBrowserStoreDirective();
113
+ const drawerAttributeDirective = utils_directive.mergeDirectives(
114
+ drawerElementDirective,
115
+ utils_directive.createAttributesDirective(() => ({
116
+ attributes: {
117
+ class: className$,
118
+ role: tansu.readable("dialog"),
119
+ "aria-describedby": ariaDescribedBy$,
120
+ "aria-labelledby": ariaLabelledBy$,
121
+ "aria-modal": tansu.readable("true"),
122
+ tabIndex: tansu.readable("-1")
123
+ },
124
+ styles: {
125
+ position: tansu.computed(() => {
126
+ const container = container$();
127
+ return container && utils_directive.isBrowserHTMLElement(container) && container !== document.body ? "relative" : "fixed";
128
+ }),
129
+ outline: tansu.readable("none")
130
+ },
131
+ events: {
132
+ keydown: async (e) => {
133
+ if (e.key === "Escape") {
134
+ await transition.api.hide();
135
+ }
129
136
  }
130
137
  }
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
- }));
138
+ }))
139
+ );
139
140
  const backdropTransition = services_transitions_baseTransitions.createTransition({
140
141
  props: {
141
142
  animated: animated$,
@@ -169,55 +170,93 @@ const createDrawer = utils_widget.createWidgetFactory("drawer", (config) => {
169
170
  "data-agnos-ignore-inert": utils_stores.true$
170
171
  },
171
172
  events: {
172
- click: async () => {
173
- await transition.api.hide();
174
- }
173
+ click: async () => await transition.api.hide()
175
174
  }
176
175
  }));
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);
176
+ const direction$ = tansu.computed(() => ["inline-start", "block-start"].some((placement) => className$().includes(placement)) ? 1 : -1);
177
+ const isMinimized$ = tansu.writable(void 0);
178
+ const isMaximized$ = tansu.writable(void 0);
179
+ function setSize(size) {
180
+ const drawerElement = drawerElement$();
181
+ const isVertical = isVertical$();
182
+ size = Math.round(Math.max(0, size));
183
+ drawerElement.style[isVertical ? "height" : "width"] = `${size}px`;
184
+ const elementSize = Math.round(drawerElement[isVertical ? "offsetHeight" : "offsetWidth"]);
185
+ size$.set(elementSize);
186
+ isMinimized$.set(size != null && (size < elementSize || size === 0));
187
+ isMaximized$.set(!!size && size > elementSize);
188
+ return elementSize;
189
+ }
190
+ const splitterDirective = utils_directive.mergeDirectives(
191
+ services_pointerdownPosition.createPointerdownPositionDirective((event) => {
192
+ const drawerElement = drawerElement$();
193
+ const isVertical = isVertical$();
194
+ const startSize = drawerElement[isVertical ? "offsetHeight" : "offsetWidth"];
195
+ const clientXorY = isVertical ? "clientY" : "clientX";
196
+ const startPos = event[clientXorY];
197
+ const direction = direction$();
198
+ onResizingChange$()(true);
199
+ return {
200
+ onMove(event2) {
201
+ setSize(startSize + direction * (event2[clientXorY] - startPos));
202
+ },
203
+ onEnd() {
204
+ drawerElement.style[isVertical ? "height" : "width"] = "";
205
+ onResizingChange$()(false);
206
+ }
207
+ };
208
+ }),
209
+ utils_directive.createAttributesDirective(() => ({
210
+ events: {
211
+ keydown: (e) => {
212
+ const { key } = e;
213
+ const size = size$() || drawerElement$()?.[isVertical$() ? "offsetHeight" : "offsetWidth"];
214
+ if (size != null) {
215
+ switch (key) {
216
+ case "ArrowLeft":
217
+ case "ArrowDown":
218
+ onResizingChange$()(true);
219
+ setSize(size - 10);
220
+ onResizingChange$()(false);
221
+ break;
222
+ case "ArrowRight":
223
+ case "ArrowUp":
224
+ onResizingChange$()(true);
225
+ setSize(size + 10);
226
+ onResizingChange$()(false);
227
+ break;
228
+ }
229
+ }
230
+ }
200
231
  }
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
- };
232
+ }))
233
+ );
212
234
  const visible$ = transition.stores.visible$;
213
235
  const transitioning$ = tansu.computed(() => transition.stores.transitioning$() || backdropTransition.stores.transitioning$());
214
236
  const hidden$ = tansu.computed(() => !transitioning$() && !visible$());
237
+ const minSizeAction$ = tansu.computed(() => {
238
+ const isMinimized = isMinimized$();
239
+ if (isMinimized != null) {
240
+ tansu.untrack(() => onMinimizedChange$()(isMinimized));
241
+ }
242
+ });
243
+ const maxSizeAction$ = tansu.computed(() => {
244
+ const isMaximized = isMaximized$();
245
+ if (isMaximized != null) {
246
+ tansu.untrack(() => onMaximizedChange$()(isMaximized));
247
+ }
248
+ });
249
+ const action$ = tansu.computed(() => {
250
+ minSizeAction$();
251
+ maxSizeAction$();
252
+ });
215
253
  const widget = {
216
254
  ...utils_stores.stateStores({
217
255
  ...stateProps,
218
256
  backdropClass$,
219
257
  className$,
220
258
  container$,
259
+ size$,
221
260
  visible$,
222
261
  backdropHidden$,
223
262
  hidden$
@@ -228,15 +267,16 @@ const createDrawer = utils_widget.createWidgetFactory("drawer", (config) => {
228
267
  close: transition.api.hide
229
268
  },
230
269
  directives: {
231
- containerDirective,
232
270
  drawerPortalDirective,
233
271
  drawerDirective: utils_directive.mergeDirectives(
234
- transition.directives.directive,
272
+ utils_directive.directiveSubscribe(action$),
273
+ drawerAttributeDirective,
235
274
  utils_directive.bindDirective(
236
275
  services_siblingsInert.siblingsInert,
237
276
  tansu.computed(() => !bodyScroll$())
238
277
  ),
239
- drawerAttributeDirective,
278
+ // This directive must come after the attribute directive, to ensure that all the classes and attributes are applied for the transition
279
+ transition.directives.directive,
240
280
  services_focusElement.focusElement
241
281
  ),
242
282
  backdropPortalDirective,
package/index.cjs CHANGED
@@ -1,18 +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-DRIm0xHf.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");
4
+ const accordion = require("./accordion-nxveC0GZ.cjs");
5
+ const alert = require("./alert-AhaliJ17.cjs");
6
+ const collapse = require("./collapse-Da_27YUU.cjs");
7
+ const modal = require("./modal-B_3Uxplo.cjs");
8
+ const pagination = require("./pagination-2Vor6JPZ.cjs");
9
+ const progressbar = require("./progressbar-DyBRINco.cjs");
10
+ const rating = require("./rating-C0y1j4SC.cjs");
11
+ const select = require("./select-Dhsb9msC.cjs");
12
+ const slider = require("./slider-DTO58syz.cjs");
13
+ const toaster = require("./toaster-CT148JSJ.cjs");
14
+ const tree = require("./tree-C4l2Wqny.cjs");
15
+ const drawer = require("./drawer-DOi0TqZC.cjs");
16
16
  const config = require("./config.cjs");
17
17
  const services_extendWidget = require("./services/extendWidget.cjs");
18
18
  const services_floatingUI = require("./services/floatingUI.cjs");
@@ -27,9 +27,9 @@ const services_hash = require("./services/hash.cjs");
27
27
  const services_transitions_baseTransitions = require("./services/transitions/baseTransitions.cjs");
28
28
  const services_transitions_cssTransitions = require("./services/transitions/cssTransitions.cjs");
29
29
  const services_transitions_simpleClassTransition = require("./services/transitions/simpleClassTransition.cjs");
30
- const utils_directive = require("./dom-C2gi9OCP.cjs");
30
+ const utils_directive = require("./dom-Cm9_uROp.cjs");
31
31
  const utils_stores = require("./utils/stores.cjs");
32
- const utils_writables = require("./writables-DcGT98a7.cjs");
32
+ const utils_writables = require("./writables-Dt68gADJ.cjs");
33
33
  exports.FACTORY_WIDGET_NAME = types.FACTORY_WIDGET_NAME;
34
34
  exports.INVALID_VALUE = types.INVALID_VALUE;
35
35
  exports.createAccordion = accordion.createAccordion;
@@ -76,6 +76,7 @@ exports.getKeyName = services_navManager.getKeyName;
76
76
  exports.isInternalInputNavigation = services_navManager.isInternalInputNavigation;
77
77
  exports.portal = services_portal.portal;
78
78
  exports.createResizeObserver = services_resizeObserver.createResizeObserver;
79
+ exports.createResizeObserverMap = services_resizeObserver.createResizeObserverMap;
79
80
  exports.siblingsInert = services_siblingsInert.siblingsInert;
80
81
  exports.hash$ = services_hash.hash$;
81
82
  exports.createTransition = services_transitions_baseTransitions.createTransition;
@@ -130,5 +131,6 @@ exports.typeFunction = utils_writables.typeFunction;
130
131
  exports.typeHTMLElementOrNull = utils_writables.typeHTMLElementOrNull;
131
132
  exports.typeNumber = utils_writables.typeNumber;
132
133
  exports.typeNumberInRangeFactory = utils_writables.typeNumberInRangeFactory;
134
+ exports.typeNumberOrNull = utils_writables.typeNumberOrNull;
133
135
  exports.typeString = utils_writables.typeString;
134
136
  exports.typeStringOrNull = utils_writables.typeStringOrNull;