@mantine-vue/notifications 1.1.2

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/esm/index.mjs ADDED
@@ -0,0 +1,626 @@
1
+ import { createStore } from "@mantine-vue/store";
2
+ import { TransitionGroup, computed, defineComponent, h, onBeforeUnmount, onMounted, ref, watch } from "vue";
3
+ import { Box, Notification, OptionalPortal, createVarsResolver, getDefaultZIndex, rem, useMantineTheme, useProps, useStyles } from "@mantine-vue/core";
4
+ import { useReducedMotion } from "@mantine-vue/hooks";
5
+ //#region src/notifications.store.ts
6
+ function randomId() {
7
+ return `mantine-${Math.random().toString(36).slice(2, 11)}`;
8
+ }
9
+ function getDistributedNotifications(data, defaultPosition, limit) {
10
+ const queue = [];
11
+ const notifications = [];
12
+ const count = {};
13
+ for (const item of data) {
14
+ const position = item.position || defaultPosition;
15
+ count[position] = count[position] || 0;
16
+ count[position] += 1;
17
+ if (count[position] <= limit) notifications.push(item);
18
+ else queue.push(item);
19
+ }
20
+ return {
21
+ notifications,
22
+ queue
23
+ };
24
+ }
25
+ var createNotificationsStore = () => createStore({
26
+ notifications: [],
27
+ queue: [],
28
+ defaultPosition: "bottom-right",
29
+ limit: 5
30
+ });
31
+ var notificationsStore = createNotificationsStore();
32
+ var useNotifications = (store = notificationsStore) => store.value;
33
+ function updateNotificationsState(store, update) {
34
+ const state = store.getState();
35
+ const updated = getDistributedNotifications(update([...state.notifications, ...state.queue]), state.defaultPosition, state.limit);
36
+ store.setState({
37
+ notifications: updated.notifications,
38
+ queue: updated.queue,
39
+ limit: state.limit,
40
+ defaultPosition: state.defaultPosition
41
+ });
42
+ }
43
+ function showNotification(notification, store = notificationsStore) {
44
+ const id = notification.id || randomId();
45
+ updateNotificationsState(store, (notifications) => {
46
+ if (notification.id && notifications.some((n) => n.id === notification.id)) return notifications;
47
+ return [...notifications, {
48
+ ...notification,
49
+ id
50
+ }];
51
+ });
52
+ return id;
53
+ }
54
+ function hideNotification(id, store = notificationsStore) {
55
+ updateNotificationsState(store, (notifications) => notifications.filter((notification) => {
56
+ if (notification.id === id) {
57
+ notification.onClose?.(notification);
58
+ return false;
59
+ }
60
+ return true;
61
+ }));
62
+ return id;
63
+ }
64
+ function updateNotification(notification, store = notificationsStore) {
65
+ updateNotificationsState(store, (notifications) => notifications.map((item) => item.id === notification.id ? {
66
+ ...item,
67
+ ...notification
68
+ } : item));
69
+ return notification.id;
70
+ }
71
+ function cleanNotifications(store = notificationsStore) {
72
+ updateNotificationsState(store, () => []);
73
+ }
74
+ function cleanNotificationsQueue(store = notificationsStore) {
75
+ updateNotificationsState(store, (notifications) => notifications.slice(0, store.getState().limit));
76
+ }
77
+ var notifications = {
78
+ show: showNotification,
79
+ hide: hideNotification,
80
+ update: updateNotification,
81
+ clean: cleanNotifications,
82
+ cleanQueue: cleanNotificationsQueue,
83
+ updateState: updateNotificationsState
84
+ };
85
+ //#endregion
86
+ //#region src/get-grouped-notifications/get-grouped-notifications.ts
87
+ var positions = [
88
+ "bottom-center",
89
+ "bottom-left",
90
+ "bottom-right",
91
+ "top-center",
92
+ "top-left",
93
+ "top-right"
94
+ ];
95
+ function getGroupedNotifications(notifications, defaultPosition) {
96
+ return notifications.reduce((acc, notification) => {
97
+ acc[notification.position || defaultPosition].push(notification);
98
+ return acc;
99
+ }, positions.reduce((acc, item) => {
100
+ acc[item] = [];
101
+ return acc;
102
+ }, {}));
103
+ }
104
+ //#endregion
105
+ //#region src/get-notification-state-styles.ts
106
+ var transforms = {
107
+ left: "translateX(-100%)",
108
+ right: "translateX(100%)",
109
+ "top-center": "translateY(-100%)",
110
+ "bottom-center": "translateY(100%)"
111
+ };
112
+ var noTransform = {
113
+ left: "translateX(0)",
114
+ right: "translateX(0)",
115
+ "top-center": "translateY(0)",
116
+ "bottom-center": "translateY(0)"
117
+ };
118
+ function toCssLength(value) {
119
+ return typeof value === "number" ? `${value}px` : value;
120
+ }
121
+ function getNotificationStateStyles({ state, maxHeight, position, transitionDuration }) {
122
+ const [vertical, horizontal] = position.split("-");
123
+ const property = horizontal === "center" ? `${vertical}-center` : horizontal;
124
+ const commonStyles = {
125
+ opacity: 0,
126
+ maxHeight: toCssLength(maxHeight),
127
+ transform: transforms[property],
128
+ transitionDuration: `${transitionDuration}ms, ${transitionDuration}ms, ${transitionDuration}ms`,
129
+ transitionTimingFunction: "cubic-bezier(.51,.3,0,1.21), cubic-bezier(.51,.3,0,1.21), linear",
130
+ transitionProperty: "opacity, transform, max-height"
131
+ };
132
+ const inState = {
133
+ opacity: 1,
134
+ transform: noTransform[property]
135
+ };
136
+ const outState = {
137
+ opacity: 0,
138
+ maxHeight: toCssLength(0),
139
+ transform: transforms[property]
140
+ };
141
+ const transitionStyles = {
142
+ entering: inState,
143
+ entered: inState,
144
+ exiting: outState,
145
+ exited: outState
146
+ };
147
+ return {
148
+ ...commonStyles,
149
+ ...transitionStyles[state]
150
+ };
151
+ }
152
+ //#endregion
153
+ //#region src/get-auto-close/get-auto-close.ts
154
+ function getAutoClose(autoClose, notificationAutoClose) {
155
+ if (typeof notificationAutoClose === "number") return notificationAutoClose;
156
+ if (notificationAutoClose === false || autoClose === false) return false;
157
+ return autoClose;
158
+ }
159
+ //#endregion
160
+ //#region src/NotificationContainer.ts
161
+ var SCROLL_DISMISS_RESET_TIMEOUT = 120;
162
+ function normalizeStyle(style) {
163
+ if (!style) return {};
164
+ if (Array.isArray(style)) return style.reduce((acc, item) => Object.assign(acc, normalizeStyle(item)), {});
165
+ return typeof style === "object" ? style : {};
166
+ }
167
+ function renderContent(value) {
168
+ return typeof value === "function" ? value() : value;
169
+ }
170
+ function getNotificationProps(data) {
171
+ const omittedKeys = new Set([
172
+ "autoClose",
173
+ "message",
174
+ "allowClose",
175
+ "position",
176
+ "style",
177
+ "withCloseButton",
178
+ "onOpen",
179
+ "onClose",
180
+ "id"
181
+ ]);
182
+ return Object.entries(data).reduce((acc, [key, value]) => {
183
+ if (!omittedKeys.has(key)) acc[key] = value;
184
+ return acc;
185
+ }, {});
186
+ }
187
+ var NotificationContainer = defineComponent({
188
+ name: "NotificationContainer",
189
+ inheritAttrs: false,
190
+ props: {
191
+ data: {
192
+ type: Object,
193
+ required: true
194
+ },
195
+ autoClose: {
196
+ type: [Boolean, Number],
197
+ required: true
198
+ },
199
+ transitionDuration: {
200
+ type: Number,
201
+ required: true
202
+ },
203
+ allowDragDismiss: {
204
+ type: Boolean,
205
+ required: true
206
+ },
207
+ allowScrollDismiss: {
208
+ type: Boolean,
209
+ required: true
210
+ },
211
+ paused: {
212
+ type: Boolean,
213
+ required: true
214
+ },
215
+ onHide: {
216
+ type: Function,
217
+ required: true
218
+ },
219
+ onHoverStart: {
220
+ type: Function,
221
+ default: void 0
222
+ },
223
+ onHoverEnd: {
224
+ type: Function,
225
+ default: void 0
226
+ }
227
+ },
228
+ setup(props, { attrs }) {
229
+ const notificationRef = ref(null);
230
+ const offset = ref(0);
231
+ const dismissed = ref(false);
232
+ const dismissDirection = ref(1);
233
+ const active = ref(false);
234
+ const scrollDismissActive = ref(false);
235
+ const hovered = ref(false);
236
+ const startX = ref(0);
237
+ const startTime = ref(0);
238
+ let autoCloseTimeout = -1;
239
+ let hideTimeout = -1;
240
+ let scrollDismissTimeout = -1;
241
+ const autoCloseDuration = computed(() => getAutoClose(props.autoClose, props.data.autoClose));
242
+ const isCloseDisabled = computed(() => props.data.allowClose === false);
243
+ const cancelAutoClose = () => window.clearTimeout(autoCloseTimeout);
244
+ const cancelHide = () => window.clearTimeout(hideTimeout);
245
+ const cancelScrollDismissReset = () => window.clearTimeout(scrollDismissTimeout);
246
+ const setSwipeOffset = (value) => {
247
+ offset.value = value;
248
+ };
249
+ const handleHide = () => {
250
+ props.onHide(props.data.id);
251
+ cancelAutoClose();
252
+ cancelHide();
253
+ cancelScrollDismissReset();
254
+ };
255
+ const handleAutoClose = () => {
256
+ if (typeof window === "undefined" || dismissed.value || active.value || props.paused || hovered.value || typeof autoCloseDuration.value !== "number") return;
257
+ cancelAutoClose();
258
+ autoCloseTimeout = window.setTimeout(handleHide, autoCloseDuration.value);
259
+ };
260
+ const getExitOffset = (direction) => {
261
+ return direction * ((notificationRef.value?.offsetWidth ?? 440) + 40);
262
+ };
263
+ const shouldDismiss = (movement, velocity) => {
264
+ const width = notificationRef.value?.offsetWidth ?? 440;
265
+ return Math.abs(movement) > width * .35 || velocity > .5;
266
+ };
267
+ const resetSwipe = () => {
268
+ cancelScrollDismissReset();
269
+ scrollDismissActive.value = false;
270
+ setSwipeOffset(0);
271
+ };
272
+ const dismissNotification = (direction) => {
273
+ dismissDirection.value = direction;
274
+ dismissed.value = true;
275
+ scrollDismissActive.value = false;
276
+ setSwipeOffset(getExitOffset(direction));
277
+ cancelAutoClose();
278
+ cancelHide();
279
+ cancelScrollDismissReset();
280
+ hideTimeout = window.setTimeout(handleHide, props.transitionDuration);
281
+ };
282
+ const scheduleScrollDismissReset = () => {
283
+ cancelScrollDismissReset();
284
+ scrollDismissTimeout = window.setTimeout(() => {
285
+ scrollDismissActive.value = false;
286
+ setSwipeOffset(0);
287
+ handleAutoClose();
288
+ }, SCROLL_DISMISS_RESET_TIMEOUT);
289
+ };
290
+ const handlePointerMove = (event) => {
291
+ if (!active.value || dismissed.value) return;
292
+ setSwipeOffset(event.clientX - startX.value);
293
+ };
294
+ const finishPointerDrag = (event) => {
295
+ if (!active.value) return;
296
+ active.value = false;
297
+ window.removeEventListener("pointermove", handlePointerMove);
298
+ window.removeEventListener("pointerup", finishPointerDrag);
299
+ window.removeEventListener("pointercancel", cancelPointerDragEvent);
300
+ const movement = event.clientX - startX.value;
301
+ const elapsed = Math.max(Date.now() - startTime.value, 1);
302
+ const velocity = Math.abs(movement) / elapsed;
303
+ const direction = movement === 0 ? 1 : movement > 0 ? 1 : -1;
304
+ if (shouldDismiss(movement, velocity)) dismissNotification(direction);
305
+ else {
306
+ setSwipeOffset(0);
307
+ handleAutoClose();
308
+ }
309
+ };
310
+ function cancelPointerDrag(shouldRestartAutoClose = true) {
311
+ active.value = false;
312
+ window.removeEventListener("pointermove", handlePointerMove);
313
+ window.removeEventListener("pointerup", finishPointerDrag);
314
+ window.removeEventListener("pointercancel", cancelPointerDragEvent);
315
+ setSwipeOffset(0);
316
+ if (shouldRestartAutoClose) handleAutoClose();
317
+ }
318
+ const cancelPointerDragEvent = () => cancelPointerDrag();
319
+ const handlePointerDown = (event) => {
320
+ if (!props.allowDragDismiss || isCloseDisabled.value || dismissed.value || event.button !== 0) return;
321
+ cancelAutoClose();
322
+ active.value = true;
323
+ startX.value = event.clientX;
324
+ startTime.value = Date.now();
325
+ window.addEventListener("pointermove", handlePointerMove);
326
+ window.addEventListener("pointerup", finishPointerDrag);
327
+ window.addEventListener("pointercancel", cancelPointerDragEvent);
328
+ };
329
+ const handleWheel = (event) => {
330
+ if (dismissed.value || active.value) return;
331
+ const isDocumentEvent = event.currentTarget === document;
332
+ if (!isDocumentEvent && !hovered.value) return;
333
+ const { deltaX, deltaY } = event;
334
+ if (Math.abs(deltaX) <= Math.abs(deltaY) || deltaX === 0) return;
335
+ if (!props.allowScrollDismiss || isCloseDisabled.value) return;
336
+ if (!isDocumentEvent) {
337
+ event.preventDefault();
338
+ event.stopPropagation();
339
+ }
340
+ cancelAutoClose();
341
+ scrollDismissActive.value = true;
342
+ const nextOffset = offset.value - deltaX;
343
+ const direction = nextOffset > 0 ? 1 : -1;
344
+ if (shouldDismiss(nextOffset, 0)) {
345
+ dismissNotification(direction);
346
+ return;
347
+ }
348
+ setSwipeOffset(nextOffset);
349
+ scheduleScrollDismissReset();
350
+ };
351
+ const handleMouseEnter = () => {
352
+ hovered.value = true;
353
+ cancelAutoClose();
354
+ props.onHoverStart?.();
355
+ };
356
+ const handleMouseLeave = () => {
357
+ hovered.value = false;
358
+ if (!scrollDismissActive.value) {
359
+ resetSwipe();
360
+ handleAutoClose();
361
+ }
362
+ props.onHoverEnd?.();
363
+ };
364
+ const handleResize = () => {
365
+ if (dismissed.value) setSwipeOffset(getExitOffset(dismissDirection.value));
366
+ };
367
+ watch(() => scrollDismissActive.value, (value, _, onCleanup) => {
368
+ if (!value) return;
369
+ document.addEventListener("wheel", handleWheel, { passive: false });
370
+ onCleanup(() => document.removeEventListener("wheel", handleWheel));
371
+ });
372
+ watch([
373
+ autoCloseDuration,
374
+ active,
375
+ dismissed,
376
+ () => props.paused
377
+ ], () => {
378
+ if (props.paused) cancelAutoClose();
379
+ else handleAutoClose();
380
+ }, { immediate: true });
381
+ onMounted(() => {
382
+ props.data.onOpen?.(props.data);
383
+ notificationRef.value?.addEventListener("wheel", handleWheel, { passive: false });
384
+ window.addEventListener("resize", handleResize);
385
+ });
386
+ onBeforeUnmount(() => {
387
+ cancelAutoClose();
388
+ cancelHide();
389
+ cancelScrollDismissReset();
390
+ cancelPointerDrag(false);
391
+ notificationRef.value?.removeEventListener("wheel", handleWheel);
392
+ window.removeEventListener("resize", handleResize);
393
+ });
394
+ return () => {
395
+ const resolvedAttrsStyle = normalizeStyle(attrs.style);
396
+ const resolvedDataStyle = normalizeStyle(props.data.style);
397
+ const baseStyle = {
398
+ ...resolvedAttrsStyle,
399
+ ...resolvedDataStyle
400
+ };
401
+ const baseOpacity = typeof baseStyle.opacity === "number" ? baseStyle.opacity : 1;
402
+ const swipeOpacity = dismissed.value ? 0 : 1 - Math.min(Math.abs(offset.value) / 200, 1) * .6;
403
+ const resolvedTransitionDuration = baseStyle.transitionDuration ?? `${props.transitionDuration}ms, ${props.transitionDuration}ms, ${props.transitionDuration}ms`;
404
+ const notificationStyle = {
405
+ ...baseStyle,
406
+ "--notifications-state-transform": typeof baseStyle.transform === "string" ? baseStyle.transform : "translateX(0)",
407
+ "--notifications-state-opacity": String(baseOpacity),
408
+ "--notifications-swipe-offset": `${offset.value}px`,
409
+ "--notifications-swipe-opacity": String(swipeOpacity),
410
+ transform: "var(--notifications-state-transform) translate3d(var(--notifications-swipe-offset), 0, 0)",
411
+ opacity: "calc(var(--notifications-state-opacity) * var(--notifications-swipe-opacity))",
412
+ transitionDuration: active.value || scrollDismissActive.value ? "0ms, 0ms, 0ms" : resolvedTransitionDuration,
413
+ cursor: "default",
414
+ touchAction: "pan-y"
415
+ };
416
+ return h(Notification, {
417
+ ...attrs,
418
+ ...getNotificationProps(props.data),
419
+ ref: (node) => {
420
+ notificationRef.value = node?.$el ?? node;
421
+ },
422
+ style: notificationStyle,
423
+ withCloseButton: isCloseDisabled.value ? false : props.data.withCloseButton,
424
+ onClose: handleHide,
425
+ onMouseenter: handleMouseEnter,
426
+ onMouseleave: handleMouseLeave,
427
+ onPointerdown: handlePointerDown
428
+ }, () => renderContent(props.data.message));
429
+ };
430
+ }
431
+ });
432
+ var Notifications_module_default = {
433
+ root: "_root_1izcx_1",
434
+ notification: "_notification_1izcx_40"
435
+ };
436
+ //#endregion
437
+ //#region src/Notifications.ts
438
+ var defaultProps = {
439
+ position: "bottom-right",
440
+ autoClose: 4e3,
441
+ transitionDuration: 250,
442
+ allowDragDismiss: true,
443
+ allowScrollDismiss: true,
444
+ containerWidth: 440,
445
+ notificationMaxHeight: 200,
446
+ limit: 5,
447
+ zIndex: getDefaultZIndex("overlay"),
448
+ store: notificationsStore,
449
+ withinPortal: true,
450
+ pauseResetOnHover: "all"
451
+ };
452
+ var varsResolver = createVarsResolver((_, { zIndex, containerWidth }) => ({ root: {
453
+ "--notifications-z-index": zIndex?.toString(),
454
+ "--notifications-container-width": rem(containerWidth)
455
+ } }));
456
+ function applyTransitionStyles(element, state, position, transitionDuration, maxHeight) {
457
+ Object.assign(element.style, getNotificationStateStyles({
458
+ state,
459
+ position,
460
+ transitionDuration,
461
+ maxHeight
462
+ }));
463
+ }
464
+ var NotificationsBase = defineComponent({
465
+ name: "Notifications",
466
+ inheritAttrs: false,
467
+ props: {
468
+ position: {
469
+ type: String,
470
+ default: void 0
471
+ },
472
+ autoClose: {
473
+ type: [Number, Boolean],
474
+ default: void 0
475
+ },
476
+ transitionDuration: {
477
+ type: Number,
478
+ default: void 0
479
+ },
480
+ allowDragDismiss: {
481
+ type: Boolean,
482
+ default: void 0
483
+ },
484
+ allowScrollDismiss: {
485
+ type: Boolean,
486
+ default: void 0
487
+ },
488
+ containerWidth: {
489
+ type: [Number, String],
490
+ default: void 0
491
+ },
492
+ notificationMaxHeight: {
493
+ type: [Number, String],
494
+ default: void 0
495
+ },
496
+ limit: {
497
+ type: Number,
498
+ default: void 0
499
+ },
500
+ zIndex: {
501
+ type: [Number, String],
502
+ default: void 0
503
+ },
504
+ portalProps: {
505
+ type: Object,
506
+ default: void 0
507
+ },
508
+ store: {
509
+ type: Object,
510
+ default: void 0
511
+ },
512
+ withinPortal: {
513
+ type: Boolean,
514
+ default: void 0
515
+ },
516
+ pauseResetOnHover: {
517
+ type: String,
518
+ default: void 0
519
+ },
520
+ classNames: {
521
+ type: [Object, Function],
522
+ default: void 0
523
+ },
524
+ styles: {
525
+ type: [Object, Function],
526
+ default: void 0
527
+ },
528
+ vars: {
529
+ type: [Object, Function],
530
+ default: void 0
531
+ },
532
+ unstyled: {
533
+ type: Boolean,
534
+ default: false
535
+ }
536
+ },
537
+ setup(rawProps, { attrs }) {
538
+ const props = useProps("Notifications", defaultProps, rawProps);
539
+ const theme = useMantineTheme();
540
+ const shouldReduceMotion = useReducedMotion();
541
+ const hoveredCount = ref(0);
542
+ const data = useNotifications(props.store);
543
+ const reduceMotion = computed(() => theme.value.respectReducedMotion ? shouldReduceMotion.value : false);
544
+ const duration = computed(() => reduceMotion.value ? 1 : props.transitionDuration);
545
+ const getStyles = useStyles({
546
+ name: "Notifications",
547
+ classes: Notifications_module_default,
548
+ props,
549
+ className: attrs.class,
550
+ style: attrs.style,
551
+ classNames: props.classNames,
552
+ styles: props.styles,
553
+ unstyled: props.unstyled,
554
+ vars: props.vars,
555
+ varsResolver
556
+ });
557
+ watch(() => [
558
+ props.limit,
559
+ props.position,
560
+ props.store
561
+ ], () => {
562
+ props.store?.setState((current) => ({
563
+ ...current,
564
+ limit: props.limit || 5,
565
+ defaultPosition: props.position
566
+ }));
567
+ }, { immediate: true });
568
+ const handleHoverStart = () => {
569
+ hoveredCount.value += 1;
570
+ };
571
+ const handleHoverEnd = () => {
572
+ hoveredCount.value = Math.max(0, hoveredCount.value - 1);
573
+ };
574
+ return () => {
575
+ const grouped = getGroupedNotifications(data.value.notifications, props.position);
576
+ const rootProps = (position) => ({
577
+ ...attrs,
578
+ ...getStyles("root"),
579
+ "data-position": position
580
+ });
581
+ const renderGroup = (position) => h(Box, rootProps(position), () => h(TransitionGroup, {
582
+ css: false,
583
+ onBeforeEnter: (el) => applyTransitionStyles(el, "exited", position, duration.value, props.notificationMaxHeight),
584
+ onEnter: (el, done) => {
585
+ el.offsetHeight;
586
+ applyTransitionStyles(el, "entered", position, duration.value, props.notificationMaxHeight);
587
+ window.setTimeout(done, duration.value);
588
+ },
589
+ onLeave: (el, done) => {
590
+ applyTransitionStyles(el, "exiting", position, duration.value, props.notificationMaxHeight);
591
+ window.setTimeout(done, duration.value);
592
+ }
593
+ }, () => grouped[position].map(({ style: notificationStyle, ...notification }) => h(NotificationContainer, {
594
+ key: notification.id,
595
+ data: notification,
596
+ onHide: (id) => hideNotification(id, props.store),
597
+ autoClose: props.autoClose,
598
+ transitionDuration: duration.value,
599
+ allowDragDismiss: props.allowDragDismiss,
600
+ allowScrollDismiss: props.allowScrollDismiss,
601
+ paused: props.pauseResetOnHover === "all" ? hoveredCount.value > 0 : false,
602
+ onHoverStart: handleHoverStart,
603
+ onHoverEnd: handleHoverEnd,
604
+ ...getStyles("notification", { style: notificationStyle })
605
+ }))));
606
+ return h(OptionalPortal, {
607
+ withinPortal: props.withinPortal,
608
+ ...props.portalProps
609
+ }, () => positions.map((position) => renderGroup(position)));
610
+ };
611
+ }
612
+ });
613
+ var Notifications = Object.assign(NotificationsBase, {
614
+ classes: Notifications_module_default,
615
+ varsResolver,
616
+ show: notifications.show,
617
+ hide: notifications.hide,
618
+ update: notifications.update,
619
+ clean: notifications.clean,
620
+ cleanQueue: notifications.cleanQueue,
621
+ updateState: notifications.updateState
622
+ });
623
+ //#endregion
624
+ export { Notifications, cleanNotifications, cleanNotificationsQueue, createNotificationsStore, hideNotification, notifications, notificationsStore, showNotification, updateNotification, updateNotificationsState, useNotifications };
625
+
626
+ //# sourceMappingURL=index.mjs.map