@zag-js/toast 0.11.1 → 0.11.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/dist/index.d.mts +53 -52
- package/dist/index.d.ts +53 -52
- package/dist/index.js +0 -33
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +0 -33
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -7
- package/src/index.ts +1 -0
- package/src/toast.connect.ts +6 -35
- package/src/toast.types.ts +60 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as _zag_js_core from '@zag-js/core';
|
|
2
2
|
import { Machine, StateMachine } from '@zag-js/core';
|
|
3
|
-
import { RootProperties, CommonProperties, Direction, DirectionProperty, Context, RequiredBy,
|
|
3
|
+
import { RootProperties, CommonProperties, Direction, PropTypes, DirectionProperty, Context, RequiredBy, NormalizeProps } from '@zag-js/types';
|
|
4
4
|
import * as _zag_js_anatomy from '@zag-js/anatomy';
|
|
5
5
|
|
|
6
6
|
type Type = "success" | "error" | "loading" | "info" | "custom";
|
|
@@ -114,6 +114,56 @@ type GroupPublicContext = SharedContext & DirectionProperty & CommonProperties &
|
|
|
114
114
|
*/
|
|
115
115
|
offsets: string | Record<"left" | "right" | "bottom" | "top", string>;
|
|
116
116
|
};
|
|
117
|
+
type PublicApi<T extends PropTypes = PropTypes> = {
|
|
118
|
+
/**
|
|
119
|
+
* The type of the toast.
|
|
120
|
+
*/
|
|
121
|
+
type: Type;
|
|
122
|
+
/**
|
|
123
|
+
* The title of the toast.
|
|
124
|
+
*/
|
|
125
|
+
title: string | undefined;
|
|
126
|
+
/**
|
|
127
|
+
* The description of the toast.
|
|
128
|
+
*/
|
|
129
|
+
description: string | undefined;
|
|
130
|
+
/**
|
|
131
|
+
* The current placement of the toast.
|
|
132
|
+
*/
|
|
133
|
+
placement: Placement;
|
|
134
|
+
/**
|
|
135
|
+
* Whether the toast is visible.
|
|
136
|
+
*/
|
|
137
|
+
isVisible: boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Whether the toast is paused.
|
|
140
|
+
*/
|
|
141
|
+
isPaused: boolean;
|
|
142
|
+
/**
|
|
143
|
+
* Whether the toast is in RTL mode.
|
|
144
|
+
*/
|
|
145
|
+
isRtl: boolean;
|
|
146
|
+
/**
|
|
147
|
+
* Function to pause the toast (keeping it visible).
|
|
148
|
+
*/
|
|
149
|
+
pause(): void;
|
|
150
|
+
/**
|
|
151
|
+
* Function to resume the toast dismissing.
|
|
152
|
+
*/
|
|
153
|
+
resume(): void;
|
|
154
|
+
/**
|
|
155
|
+
* Function to instantly dismiss the toast.
|
|
156
|
+
*/
|
|
157
|
+
dismiss(): void;
|
|
158
|
+
/**
|
|
159
|
+
* Function render the toast in the DOM (based on the defined `render` property)
|
|
160
|
+
*/
|
|
161
|
+
render(): any;
|
|
162
|
+
rootProps: T["element"];
|
|
163
|
+
titleProps: T["element"];
|
|
164
|
+
descriptionProps: T["element"];
|
|
165
|
+
closeTriggerProps: T["button"];
|
|
166
|
+
};
|
|
117
167
|
type UserDefinedGroupContext = RequiredBy<GroupPublicContext, "id">;
|
|
118
168
|
type GroupComputedContext = Readonly<{
|
|
119
169
|
/**
|
|
@@ -228,56 +278,7 @@ declare function createToastMachine(options?: Options): _zag_js_core.Machine<Mac
|
|
|
228
278
|
|
|
229
279
|
declare const anatomy: _zag_js_anatomy.AnatomyInstance<"title" | "group" | "root" | "description" | "closeTrigger">;
|
|
230
280
|
|
|
231
|
-
declare function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>):
|
|
232
|
-
/**
|
|
233
|
-
* The type of the toast.
|
|
234
|
-
*/
|
|
235
|
-
type: Type;
|
|
236
|
-
/**
|
|
237
|
-
* The title of the toast.
|
|
238
|
-
*/
|
|
239
|
-
title: string | undefined;
|
|
240
|
-
/**
|
|
241
|
-
* The description of the toast.
|
|
242
|
-
*/
|
|
243
|
-
description: string | undefined;
|
|
244
|
-
/**
|
|
245
|
-
* The current placement of the toast.
|
|
246
|
-
*/
|
|
247
|
-
placement: Placement;
|
|
248
|
-
/**
|
|
249
|
-
* Whether the toast is visible.
|
|
250
|
-
*/
|
|
251
|
-
isVisible: boolean;
|
|
252
|
-
/**
|
|
253
|
-
* Whether the toast is paused.
|
|
254
|
-
*/
|
|
255
|
-
isPaused: boolean;
|
|
256
|
-
/**
|
|
257
|
-
* Whether the toast is in RTL mode.
|
|
258
|
-
*/
|
|
259
|
-
isRtl: boolean;
|
|
260
|
-
/**
|
|
261
|
-
* Function to pause the toast (keeping it visible).
|
|
262
|
-
*/
|
|
263
|
-
pause(): void;
|
|
264
|
-
/**
|
|
265
|
-
* Function to resume the toast dismissing.
|
|
266
|
-
*/
|
|
267
|
-
resume(): void;
|
|
268
|
-
/**
|
|
269
|
-
* Function to instantly dismiss the toast.
|
|
270
|
-
*/
|
|
271
|
-
dismiss(): void;
|
|
272
|
-
/**
|
|
273
|
-
* Function render the toast in the DOM (based on the defined `render` property)
|
|
274
|
-
*/
|
|
275
|
-
render(): any;
|
|
276
|
-
rootProps: T["element"];
|
|
277
|
-
titleProps: T["element"];
|
|
278
|
-
descriptionProps: T["element"];
|
|
279
|
-
closeTriggerProps: T["button"];
|
|
280
|
-
};
|
|
281
|
+
declare function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): PublicApi<T>;
|
|
281
282
|
|
|
282
283
|
declare const group: {
|
|
283
284
|
connect: typeof groupConnect;
|
|
@@ -285,4 +286,4 @@ declare const group: {
|
|
|
285
286
|
};
|
|
286
287
|
declare function api(): Toaster | undefined;
|
|
287
288
|
|
|
288
|
-
export { GroupMachineContext, MachineContext, MachineState, Placement, Service, ToastOptions, Type, anatomy, api, connect, createToastMachine as createMachine, group };
|
|
289
|
+
export { GroupMachineContext, MachineContext, MachineState, Placement, PublicApi, Service, ToastOptions, Type, anatomy, api, connect, createToastMachine as createMachine, group };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as _zag_js_core from '@zag-js/core';
|
|
2
2
|
import { Machine, StateMachine } from '@zag-js/core';
|
|
3
|
-
import { RootProperties, CommonProperties, Direction, DirectionProperty, Context, RequiredBy,
|
|
3
|
+
import { RootProperties, CommonProperties, Direction, PropTypes, DirectionProperty, Context, RequiredBy, NormalizeProps } from '@zag-js/types';
|
|
4
4
|
import * as _zag_js_anatomy from '@zag-js/anatomy';
|
|
5
5
|
|
|
6
6
|
type Type = "success" | "error" | "loading" | "info" | "custom";
|
|
@@ -114,6 +114,56 @@ type GroupPublicContext = SharedContext & DirectionProperty & CommonProperties &
|
|
|
114
114
|
*/
|
|
115
115
|
offsets: string | Record<"left" | "right" | "bottom" | "top", string>;
|
|
116
116
|
};
|
|
117
|
+
type PublicApi<T extends PropTypes = PropTypes> = {
|
|
118
|
+
/**
|
|
119
|
+
* The type of the toast.
|
|
120
|
+
*/
|
|
121
|
+
type: Type;
|
|
122
|
+
/**
|
|
123
|
+
* The title of the toast.
|
|
124
|
+
*/
|
|
125
|
+
title: string | undefined;
|
|
126
|
+
/**
|
|
127
|
+
* The description of the toast.
|
|
128
|
+
*/
|
|
129
|
+
description: string | undefined;
|
|
130
|
+
/**
|
|
131
|
+
* The current placement of the toast.
|
|
132
|
+
*/
|
|
133
|
+
placement: Placement;
|
|
134
|
+
/**
|
|
135
|
+
* Whether the toast is visible.
|
|
136
|
+
*/
|
|
137
|
+
isVisible: boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Whether the toast is paused.
|
|
140
|
+
*/
|
|
141
|
+
isPaused: boolean;
|
|
142
|
+
/**
|
|
143
|
+
* Whether the toast is in RTL mode.
|
|
144
|
+
*/
|
|
145
|
+
isRtl: boolean;
|
|
146
|
+
/**
|
|
147
|
+
* Function to pause the toast (keeping it visible).
|
|
148
|
+
*/
|
|
149
|
+
pause(): void;
|
|
150
|
+
/**
|
|
151
|
+
* Function to resume the toast dismissing.
|
|
152
|
+
*/
|
|
153
|
+
resume(): void;
|
|
154
|
+
/**
|
|
155
|
+
* Function to instantly dismiss the toast.
|
|
156
|
+
*/
|
|
157
|
+
dismiss(): void;
|
|
158
|
+
/**
|
|
159
|
+
* Function render the toast in the DOM (based on the defined `render` property)
|
|
160
|
+
*/
|
|
161
|
+
render(): any;
|
|
162
|
+
rootProps: T["element"];
|
|
163
|
+
titleProps: T["element"];
|
|
164
|
+
descriptionProps: T["element"];
|
|
165
|
+
closeTriggerProps: T["button"];
|
|
166
|
+
};
|
|
117
167
|
type UserDefinedGroupContext = RequiredBy<GroupPublicContext, "id">;
|
|
118
168
|
type GroupComputedContext = Readonly<{
|
|
119
169
|
/**
|
|
@@ -228,56 +278,7 @@ declare function createToastMachine(options?: Options): _zag_js_core.Machine<Mac
|
|
|
228
278
|
|
|
229
279
|
declare const anatomy: _zag_js_anatomy.AnatomyInstance<"title" | "group" | "root" | "description" | "closeTrigger">;
|
|
230
280
|
|
|
231
|
-
declare function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>):
|
|
232
|
-
/**
|
|
233
|
-
* The type of the toast.
|
|
234
|
-
*/
|
|
235
|
-
type: Type;
|
|
236
|
-
/**
|
|
237
|
-
* The title of the toast.
|
|
238
|
-
*/
|
|
239
|
-
title: string | undefined;
|
|
240
|
-
/**
|
|
241
|
-
* The description of the toast.
|
|
242
|
-
*/
|
|
243
|
-
description: string | undefined;
|
|
244
|
-
/**
|
|
245
|
-
* The current placement of the toast.
|
|
246
|
-
*/
|
|
247
|
-
placement: Placement;
|
|
248
|
-
/**
|
|
249
|
-
* Whether the toast is visible.
|
|
250
|
-
*/
|
|
251
|
-
isVisible: boolean;
|
|
252
|
-
/**
|
|
253
|
-
* Whether the toast is paused.
|
|
254
|
-
*/
|
|
255
|
-
isPaused: boolean;
|
|
256
|
-
/**
|
|
257
|
-
* Whether the toast is in RTL mode.
|
|
258
|
-
*/
|
|
259
|
-
isRtl: boolean;
|
|
260
|
-
/**
|
|
261
|
-
* Function to pause the toast (keeping it visible).
|
|
262
|
-
*/
|
|
263
|
-
pause(): void;
|
|
264
|
-
/**
|
|
265
|
-
* Function to resume the toast dismissing.
|
|
266
|
-
*/
|
|
267
|
-
resume(): void;
|
|
268
|
-
/**
|
|
269
|
-
* Function to instantly dismiss the toast.
|
|
270
|
-
*/
|
|
271
|
-
dismiss(): void;
|
|
272
|
-
/**
|
|
273
|
-
* Function render the toast in the DOM (based on the defined `render` property)
|
|
274
|
-
*/
|
|
275
|
-
render(): any;
|
|
276
|
-
rootProps: T["element"];
|
|
277
|
-
titleProps: T["element"];
|
|
278
|
-
descriptionProps: T["element"];
|
|
279
|
-
closeTriggerProps: T["button"];
|
|
280
|
-
};
|
|
281
|
+
declare function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): PublicApi<T>;
|
|
281
282
|
|
|
282
283
|
declare const group: {
|
|
283
284
|
connect: typeof groupConnect;
|
|
@@ -285,4 +286,4 @@ declare const group: {
|
|
|
285
286
|
};
|
|
286
287
|
declare function api(): Toaster | undefined;
|
|
287
288
|
|
|
288
|
-
export { GroupMachineContext, MachineContext, MachineState, Placement, Service, ToastOptions, Type, anatomy, api, connect, createToastMachine as createMachine, group };
|
|
289
|
+
export { GroupMachineContext, MachineContext, MachineState, Placement, PublicApi, Service, ToastOptions, Type, anatomy, api, connect, createToastMachine as createMachine, group };
|
package/dist/index.js
CHANGED
|
@@ -520,55 +520,22 @@ function connect(state, send, normalize) {
|
|
|
520
520
|
const pauseOnInteraction = state.context.pauseOnInteraction;
|
|
521
521
|
const placement = state.context.placement;
|
|
522
522
|
return {
|
|
523
|
-
/**
|
|
524
|
-
* The type of the toast.
|
|
525
|
-
*/
|
|
526
523
|
type: state.context.type,
|
|
527
|
-
/**
|
|
528
|
-
* The title of the toast.
|
|
529
|
-
*/
|
|
530
524
|
title: state.context.title,
|
|
531
|
-
/**
|
|
532
|
-
* The description of the toast.
|
|
533
|
-
*/
|
|
534
525
|
description: state.context.description,
|
|
535
|
-
/**
|
|
536
|
-
* The current placement of the toast.
|
|
537
|
-
*/
|
|
538
526
|
placement,
|
|
539
|
-
/**
|
|
540
|
-
* Whether the toast is visible.
|
|
541
|
-
*/
|
|
542
527
|
isVisible,
|
|
543
|
-
/**
|
|
544
|
-
* Whether the toast is paused.
|
|
545
|
-
*/
|
|
546
528
|
isPaused,
|
|
547
|
-
/**
|
|
548
|
-
* Whether the toast is in RTL mode.
|
|
549
|
-
*/
|
|
550
529
|
isRtl: state.context.dir === "rtl",
|
|
551
|
-
/**
|
|
552
|
-
* Function to pause the toast (keeping it visible).
|
|
553
|
-
*/
|
|
554
530
|
pause() {
|
|
555
531
|
send("PAUSE");
|
|
556
532
|
},
|
|
557
|
-
/**
|
|
558
|
-
* Function to resume the toast dismissing.
|
|
559
|
-
*/
|
|
560
533
|
resume() {
|
|
561
534
|
send("RESUME");
|
|
562
535
|
},
|
|
563
|
-
/**
|
|
564
|
-
* Function to instantly dismiss the toast.
|
|
565
|
-
*/
|
|
566
536
|
dismiss() {
|
|
567
537
|
send("DISMISS");
|
|
568
538
|
},
|
|
569
|
-
/**
|
|
570
|
-
* Function render the toast in the DOM (based on the defined `render` property)
|
|
571
|
-
*/
|
|
572
539
|
render() {
|
|
573
540
|
return state.context.render?.({
|
|
574
541
|
id: state.context.id,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/toast-group.connect.ts","../src/toast.anatomy.ts","../src/toast.dom.ts","../src/toast.utils.ts","../src/toast-group.machine.ts","../src/toast.machine.ts","../src/toast.connect.ts"],"sourcesContent":["import { isDom } from \"@zag-js/dom-query\"\nimport { warn } from \"@zag-js/utils\"\nimport { groupConnect, toaster } from \"./toast-group.connect\"\nimport { groupMachine } from \"./toast-group.machine\"\nimport { createToastMachine as createMachine } from \"./toast.machine\"\n\nexport { anatomy } from \"./toast.anatomy\"\nexport { connect } from \"./toast.connect\"\nexport type {\n GroupMachineContext,\n MachineContext,\n MachineState,\n Placement,\n Service,\n ToastOptions,\n Type,\n} from \"./toast.types\"\nexport { createMachine }\n\nexport const group = {\n connect: groupConnect,\n machine: groupMachine,\n}\n\nexport function api() {\n if (!isDom()) {\n warn(\"toast.api() is only available in the browser\")\n } else {\n return toaster\n }\n}\n","import { subscribe } from \"@zag-js/core\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { runIfFn, uuid } from \"@zag-js/utils\"\nimport { parts } from \"./toast.anatomy\"\nimport { dom } from \"./toast.dom\"\nimport type {\n GroupMachineContext,\n GroupProps,\n GroupSend,\n GroupState,\n Placement,\n PromiseOptions,\n Toaster,\n Options,\n} from \"./toast.types\"\nimport { getGroupPlacementStyle, getToastsByPlacement } from \"./toast.utils\"\n\nexport let toaster = {} as Toaster\n\nexport function groupConnect<T extends PropTypes>(state: GroupState, send: GroupSend, normalize: NormalizeProps<T>) {\n const group = {\n /**\n * The total number of toasts\n */\n count: state.context.count,\n /**\n * The active toasts\n */\n toasts: state.context.toasts,\n /**\n * The active toasts by placement\n */\n toastsByPlacement: getToastsByPlacement(state.context.toasts),\n /**\n * Returns whether the toast id is visible\n */\n isVisible(id: string) {\n if (!state.context.toasts.length) return false\n return !!state.context.toasts.find((toast) => toast.id == id)\n },\n /**\n * Function to create a toast.\n */\n create(options: Options) {\n const uid = `toast:${uuid()}`\n const id = options.id ? options.id : uid\n\n if (group.isVisible(id)) return\n send({ type: \"ADD_TOAST\", toast: { ...options, id } })\n\n return id\n },\n /**\n * Function to create or update a toast.\n */\n upsert(options: Options) {\n const { id } = options\n const isVisible = id ? group.isVisible(id) : false\n if (isVisible && id != null) {\n return group.update(id, options)\n } else {\n return group.create(options)\n }\n },\n /**\n * Function to dismiss a toast by id.\n * If no id is provided, all toasts will be dismissed.\n */\n dismiss(id?: string) {\n if (id == null) {\n send(\"DISMISS_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"DISMISS_TOAST\", id })\n }\n },\n /**\n * Function to remove a toast by id.\n * If no id is provided, all toasts will be removed.\n */\n remove(id?: string) {\n if (id == null) {\n send(\"REMOVE_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"REMOVE_TOAST\", id })\n }\n },\n /**\n * Function to dismiss all toasts by placement.\n */\n dismissByPlacement(placement: Placement) {\n const toasts = group.toastsByPlacement[placement]\n if (toasts) {\n toasts.forEach((toast) => group.dismiss(toast.id))\n }\n },\n /**\n * Function to update a toast's options by id.\n */\n update(id: string, options: Options) {\n if (!group.isVisible(id)) return\n send({ type: \"UPDATE_TOAST\", id, toast: options })\n return id\n },\n /**\n * Function to create a loading toast.\n */\n loading(options: Options) {\n options.type = \"loading\"\n return group.upsert(options)\n },\n /**\n * Function to create a success toast.\n */\n success(options: Options) {\n options.type = \"success\"\n return group.upsert(options)\n },\n /**\n * Function to create an error toast.\n */\n error(options: Options) {\n options.type = \"error\"\n return group.upsert(options)\n },\n /**\n * Function to create a toast from a promise.\n * - When the promise resolves, the toast will be updated with the success options.\n * - When the promise rejects, the toast will be updated with the error options.\n */\n promise<T>(promise: Promise<T>, options: PromiseOptions<T>, shared: Options = {}) {\n const id = group.loading({ ...shared, ...options.loading })\n\n promise\n .then((response) => {\n const successOptions = runIfFn(options.success, response)\n group.success({ ...shared, ...successOptions, id })\n })\n .catch((error) => {\n const errorOptions = runIfFn(options.error, error)\n group.error({ ...shared, ...errorOptions, id })\n })\n\n return promise\n },\n /**\n * Function to pause a toast by id.\n */\n pause(id?: string) {\n if (id == null) {\n send(\"PAUSE_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"PAUSE_TOAST\", id })\n }\n },\n /**\n * Function to resume a toast by id.\n */\n resume(id?: string) {\n if (id == null) {\n send(\"RESUME_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"RESUME_TOAST\", id })\n }\n },\n\n getGroupProps(options: GroupProps) {\n const { placement, label = \"Notifications\" } = options\n return normalize.element({\n ...parts.group.attrs,\n tabIndex: -1,\n \"aria-label\": label,\n id: dom.getGroupId(placement),\n \"data-placement\": placement,\n \"aria-live\": \"polite\",\n role: \"region\",\n style: getGroupPlacementStyle(state.context, placement),\n })\n },\n\n subscribe(fn: (toasts: GroupMachineContext[\"toasts\"]) => void) {\n return subscribe(state.context.toasts, () => fn(state.context.toasts))\n },\n }\n\n Object.assign(toaster, group)\n\n return group\n}\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"toast\").parts(\"group\", \"root\", \"title\", \"description\", \"closeTrigger\")\nexport const parts = anatomy.build()\n","import { createScope } from \"@zag-js/dom-query\"\nimport type { GroupMachineContext as GroupCtx, MachineContext as Ctx, Placement } from \"./toast.types\"\n\nexport const dom = createScope({\n getGroupId: (placement: Placement) => `toast-group:${placement}`,\n getRootId: (ctx: Ctx) => `toast:${ctx.id}`,\n getTitleId: (ctx: Ctx) => `toast:${ctx.id}:title`,\n getDescriptionId: (ctx: Ctx) => `toast:${ctx.id}:description`,\n getCloseTriggerId: (ctx: Ctx) => `toast${ctx.id}:close`,\n getPortalId: (ctx: GroupCtx) => `toast-portal:${ctx.id}`,\n})\n","import type { Style } from \"@zag-js/types\"\nimport type { GroupMachineContext, MachineContext, Placement, Service, Type } from \"./toast.types\"\n\nexport function getToastsByPlacement(toasts: Service[]) {\n const result: Partial<Record<Placement, Service[]>> = {}\n\n for (const toast of toasts) {\n const placement = toast.state.context.placement!\n result[placement] ||= []\n result[placement]!.push(toast)\n }\n\n return result\n}\n\nexport const defaultTimeouts: Record<Type, number> = {\n info: 5000,\n error: 5000,\n success: 2000,\n loading: Infinity,\n custom: 5000,\n}\n\nexport function getToastDuration(duration: number | undefined, type: MachineContext[\"type\"]) {\n return duration ?? defaultTimeouts[type]\n}\n\nexport function getGroupPlacementStyle(ctx: GroupMachineContext, placement: Placement): Style {\n const offset = ctx.offsets\n const computedOffset =\n typeof offset === \"string\" ? { left: offset, right: offset, bottom: offset, top: offset } : offset\n\n const rtl = ctx.dir === \"rtl\"\n const computedPlacement = placement\n .replace(\"-start\", rtl ? \"-right\" : \"-left\")\n .replace(\"-end\", rtl ? \"-left\" : \"-right\")\n\n const isRighty = computedPlacement.includes(\"right\")\n const isLefty = computedPlacement.includes(\"left\")\n\n const styles: Style = {\n position: \"fixed\",\n pointerEvents: ctx.count > 0 ? undefined : \"none\",\n display: \"flex\",\n flexDirection: \"column\",\n \"--toast-gutter\": ctx.gutter,\n zIndex: ctx.zIndex,\n }\n\n let alignItems: Style[\"alignItems\"] = \"center\"\n if (isRighty) alignItems = \"flex-end\"\n if (isLefty) alignItems = \"flex-start\"\n\n styles.alignItems = alignItems\n\n if (computedPlacement.includes(\"top\")) {\n const offset = computedOffset.top\n styles.top = `calc(env(safe-area-inset-top, 0px) + ${offset})`\n }\n\n if (computedPlacement.includes(\"bottom\")) {\n const offset = computedOffset.bottom\n styles.bottom = `calc(env(safe-area-inset-bottom, 0px) + ${offset})`\n }\n\n if (!computedPlacement.includes(\"left\")) {\n const offset = computedOffset.right\n styles.right = `calc(env(safe-area-inset-right, 0px) + ${offset})`\n }\n\n if (!computedPlacement.includes(\"right\")) {\n const offset = computedOffset.left\n styles.left = `calc(env(safe-area-inset-left, 0px) + ${offset})`\n }\n\n return styles\n}\n","import { createMachine } from \"@zag-js/core\"\nimport { MAX_Z_INDEX } from \"@zag-js/dom-query\"\nimport { compact } from \"@zag-js/utils\"\nimport { createToastMachine } from \"./toast.machine\"\nimport type { GroupMachineContext, UserDefinedGroupContext } from \"./toast.types\"\n\nexport function groupMachine(userContext: UserDefinedGroupContext) {\n const ctx = compact(userContext)\n return createMachine<GroupMachineContext>({\n id: \"toaster\",\n initial: \"active\",\n context: {\n dir: \"ltr\",\n max: Number.MAX_SAFE_INTEGER,\n toasts: [],\n gutter: \"1rem\",\n zIndex: MAX_Z_INDEX,\n pauseOnPageIdle: false,\n pauseOnInteraction: true,\n offsets: { left: \"0px\", right: \"0px\", top: \"0px\", bottom: \"0px\" },\n ...ctx,\n },\n\n computed: {\n count: (ctx) => ctx.toasts.length,\n },\n\n on: {\n SETUP: {},\n\n PAUSE_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild(\"PAUSE\", evt.id)\n },\n },\n\n PAUSE_ALL: {\n actions: (ctx) => {\n ctx.toasts.forEach((toast) => toast.send(\"PAUSE\"))\n },\n },\n\n RESUME_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild(\"RESUME\", evt.id)\n },\n },\n\n RESUME_ALL: {\n actions: (ctx) => {\n ctx.toasts.forEach((toast) => toast.send(\"RESUME\"))\n },\n },\n\n ADD_TOAST: {\n guard: (ctx) => ctx.toasts.length < ctx.max,\n actions: (ctx, evt, { self }) => {\n const options = {\n ...evt.toast,\n pauseOnPageIdle: ctx.pauseOnPageIdle,\n pauseOnInteraction: ctx.pauseOnInteraction,\n dir: ctx.dir,\n getRootNode: ctx.getRootNode,\n }\n const toast = createToastMachine(options)\n const actor = self.spawn(toast)\n ctx.toasts.push(actor)\n },\n },\n\n UPDATE_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild({ type: \"UPDATE\", toast: evt.toast }, evt.id)\n },\n },\n\n DISMISS_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild(\"DISMISS\", evt.id)\n },\n },\n\n DISMISS_ALL: {\n actions: (ctx) => {\n ctx.toasts.forEach((toast) => toast.send(\"DISMISS\"))\n },\n },\n\n REMOVE_TOAST: {\n actions: (ctx, evt, { self }) => {\n self.stopChild(evt.id)\n const index = ctx.toasts.findIndex((toast) => toast.id === evt.id)\n ctx.toasts.splice(index, 1)\n },\n },\n\n REMOVE_ALL: {\n actions: (ctx, _evt, { self }) => {\n ctx.toasts.forEach((toast) => self.stopChild(toast.id))\n while (ctx.toasts.length) ctx.toasts.pop()\n },\n },\n },\n })\n}\n","import { createMachine, guards } from \"@zag-js/core\"\nimport { addDomEvent } from \"@zag-js/dom-event\"\nimport { compact } from \"@zag-js/utils\"\nimport { dom } from \"./toast.dom\"\nimport type { MachineContext, MachineState, Options } from \"./toast.types\"\nimport { getToastDuration } from \"./toast.utils\"\n\nconst { not, and, or } = guards\n\nexport function createToastMachine(options: Options = {}) {\n const { type = \"info\", duration, id = \"toast\", placement = \"bottom\", removeDelay = 0, ...restProps } = options\n const ctx = compact(restProps)\n\n const computedDuration = getToastDuration(duration, type)\n\n return createMachine<MachineContext, MachineState>(\n {\n id,\n entry: \"invokeOnOpen\",\n initial: type === \"loading\" ? \"persist\" : \"active\",\n context: {\n id,\n type,\n remaining: computedDuration,\n duration: computedDuration,\n removeDelay,\n createdAt: Date.now(),\n placement,\n ...ctx,\n },\n\n on: {\n UPDATE: [\n {\n guard: and(\"hasTypeChanged\", \"isChangingToLoading\"),\n target: \"persist\",\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n {\n guard: or(\"hasDurationChanged\", \"hasTypeChanged\"),\n target: \"active:temp\",\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n {\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n ],\n },\n\n states: {\n \"active:temp\": {\n tags: [\"visible\", \"updating\"],\n after: {\n 0: \"active\",\n },\n },\n\n persist: {\n tags: [\"visible\", \"paused\"],\n activities: \"trackDocumentVisibility\",\n on: {\n RESUME: {\n guard: not(\"isLoadingType\"),\n target: \"active\",\n actions: [\"setCreatedAt\"],\n },\n DISMISS: \"dismissing\",\n },\n },\n\n active: {\n tags: [\"visible\"],\n activities: \"trackDocumentVisibility\",\n after: {\n VISIBLE_DURATION: \"dismissing\",\n },\n on: {\n DISMISS: \"dismissing\",\n PAUSE: {\n target: \"persist\",\n actions: \"setRemainingDuration\",\n },\n },\n },\n\n dismissing: {\n entry: \"invokeOnClosing\",\n after: {\n REMOVE_DELAY: {\n target: \"inactive\",\n actions: \"notifyParentToRemove\",\n },\n },\n },\n\n inactive: {\n entry: \"invokeOnClose\",\n type: \"final\",\n },\n },\n },\n {\n activities: {\n trackDocumentVisibility(ctx, _evt, { send }) {\n if (!ctx.pauseOnPageIdle) return\n const doc = dom.getDoc(ctx)\n return addDomEvent(doc, \"visibilitychange\", () => {\n send(doc.visibilityState === \"hidden\" ? \"PAUSE\" : \"RESUME\")\n })\n },\n },\n\n guards: {\n isChangingToLoading: (_, evt) => evt.toast?.type === \"loading\",\n isLoadingType: (ctx) => ctx.type === \"loading\",\n hasTypeChanged: (ctx, evt) => evt.toast?.type !== ctx.type,\n hasDurationChanged: (ctx, evt) => evt.toast?.duration !== ctx.duration,\n },\n\n delays: {\n VISIBLE_DURATION: (ctx) => ctx.remaining,\n REMOVE_DELAY: (ctx) => ctx.removeDelay,\n },\n\n actions: {\n setRemainingDuration(ctx) {\n ctx.remaining -= Date.now() - ctx.createdAt\n },\n setCreatedAt(ctx) {\n ctx.createdAt = Date.now()\n },\n notifyParentToRemove(_ctx, _evt, { self }) {\n self.sendParent({ type: \"REMOVE_TOAST\", id: self.id })\n },\n invokeOnClosing(ctx) {\n ctx.onClosing?.()\n },\n invokeOnClose(ctx) {\n ctx.onClose?.()\n },\n invokeOnOpen(ctx) {\n ctx.onOpen?.()\n },\n invokeOnUpdate(ctx) {\n ctx.onUpdate?.()\n },\n setContext(ctx, evt) {\n const { duration, type } = evt.toast\n const time = getToastDuration(duration, type)\n Object.assign(ctx, { ...evt.toast, duration: time, remaining: time })\n },\n },\n },\n )\n}\n","import { dataAttr } from \"@zag-js/dom-query\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./toast.anatomy\"\nimport { dom } from \"./toast.dom\"\nimport type { Send, State } from \"./toast.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>) {\n const isVisible = state.hasTag(\"visible\")\n const isPaused = state.hasTag(\"paused\")\n\n const pauseOnInteraction = state.context.pauseOnInteraction\n const placement = state.context.placement\n\n return {\n /**\n * The type of the toast.\n */\n type: state.context.type,\n /**\n * The title of the toast.\n */\n title: state.context.title,\n /**\n * The description of the toast.\n */\n description: state.context.description,\n /**\n * The current placement of the toast.\n */\n placement,\n /**\n * Whether the toast is visible.\n */\n isVisible,\n /**\n * Whether the toast is paused.\n */\n isPaused,\n /**\n * Whether the toast is in RTL mode.\n */\n isRtl: state.context.dir === \"rtl\",\n /**\n * Function to pause the toast (keeping it visible).\n */\n pause() {\n send(\"PAUSE\")\n },\n /**\n * Function to resume the toast dismissing.\n */\n resume() {\n send(\"RESUME\")\n },\n /**\n * Function to instantly dismiss the toast.\n */\n dismiss() {\n send(\"DISMISS\")\n },\n /**\n * Function render the toast in the DOM (based on the defined `render` property)\n */\n render() {\n return state.context.render?.({\n id: state.context.id,\n type: state.context.type,\n duration: state.context.duration,\n title: state.context.title,\n placement: state.context.placement,\n description: state.context.description,\n dismiss() {\n send(\"DISMISS\")\n },\n })\n },\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n dir: state.context.dir,\n id: dom.getRootId(state.context),\n \"data-open\": dataAttr(isVisible),\n \"data-type\": state.context.type,\n \"data-placement\": placement,\n role: \"status\",\n \"aria-atomic\": \"true\",\n tabIndex: 0,\n style: {\n position: \"relative\",\n pointerEvents: \"auto\",\n margin: \"calc(var(--toast-gutter) / 2)\",\n \"--remove-delay\": `${state.context.removeDelay}ms`,\n \"--duration\": `${state.context.duration}ms`,\n },\n onKeyDown(event) {\n if (event.key == \"Escape\") {\n send(\"DISMISS\")\n event.preventDefault()\n }\n },\n onFocus() {\n if (pauseOnInteraction) {\n send(\"PAUSE\")\n }\n },\n onBlur() {\n if (pauseOnInteraction) {\n send(\"RESUME\")\n }\n },\n onPointerEnter() {\n if (pauseOnInteraction) {\n send(\"PAUSE\")\n }\n },\n onPointerLeave() {\n if (pauseOnInteraction) {\n send(\"RESUME\")\n }\n },\n }),\n\n titleProps: normalize.element({\n ...parts.title.attrs,\n id: dom.getTitleId(state.context),\n }),\n\n descriptionProps: normalize.element({\n ...parts.description.attrs,\n id: dom.getDescriptionId(state.context),\n }),\n\n closeTriggerProps: normalize.button({\n id: dom.getCloseTriggerId(state.context),\n ...parts.closeTrigger.attrs,\n type: \"button\",\n \"aria-label\": \"Dismiss notification\",\n onClick() {\n send(\"DISMISS\")\n },\n }),\n }\n}\n"],"mappings":"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","names":["import_dom_query","import_utils","offset","group","import_core","import_dom_query","import_utils","import_core","import_utils","ctx","duration","type","ctx","import_dom_query"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/toast-group.connect.ts","../src/toast.anatomy.ts","../src/toast.dom.ts","../src/toast.utils.ts","../src/toast-group.machine.ts","../src/toast.machine.ts","../src/toast.connect.ts"],"sourcesContent":["import { isDom } from \"@zag-js/dom-query\"\nimport { warn } from \"@zag-js/utils\"\nimport { groupConnect, toaster } from \"./toast-group.connect\"\nimport { groupMachine } from \"./toast-group.machine\"\nimport { createToastMachine as createMachine } from \"./toast.machine\"\n\nexport { anatomy } from \"./toast.anatomy\"\nexport { connect } from \"./toast.connect\"\nexport type {\n GroupMachineContext,\n MachineContext,\n MachineState,\n Placement,\n PublicApi,\n Service,\n ToastOptions,\n Type,\n} from \"./toast.types\"\nexport { createMachine }\n\nexport const group = {\n connect: groupConnect,\n machine: groupMachine,\n}\n\nexport function api() {\n if (!isDom()) {\n warn(\"toast.api() is only available in the browser\")\n } else {\n return toaster\n }\n}\n","import { subscribe } from \"@zag-js/core\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { runIfFn, uuid } from \"@zag-js/utils\"\nimport { parts } from \"./toast.anatomy\"\nimport { dom } from \"./toast.dom\"\nimport type {\n GroupMachineContext,\n GroupProps,\n GroupSend,\n GroupState,\n Placement,\n PromiseOptions,\n Toaster,\n Options,\n} from \"./toast.types\"\nimport { getGroupPlacementStyle, getToastsByPlacement } from \"./toast.utils\"\n\nexport let toaster = {} as Toaster\n\nexport function groupConnect<T extends PropTypes>(state: GroupState, send: GroupSend, normalize: NormalizeProps<T>) {\n const group = {\n /**\n * The total number of toasts\n */\n count: state.context.count,\n /**\n * The active toasts\n */\n toasts: state.context.toasts,\n /**\n * The active toasts by placement\n */\n toastsByPlacement: getToastsByPlacement(state.context.toasts),\n /**\n * Returns whether the toast id is visible\n */\n isVisible(id: string) {\n if (!state.context.toasts.length) return false\n return !!state.context.toasts.find((toast) => toast.id == id)\n },\n /**\n * Function to create a toast.\n */\n create(options: Options) {\n const uid = `toast:${uuid()}`\n const id = options.id ? options.id : uid\n\n if (group.isVisible(id)) return\n send({ type: \"ADD_TOAST\", toast: { ...options, id } })\n\n return id\n },\n /**\n * Function to create or update a toast.\n */\n upsert(options: Options) {\n const { id } = options\n const isVisible = id ? group.isVisible(id) : false\n if (isVisible && id != null) {\n return group.update(id, options)\n } else {\n return group.create(options)\n }\n },\n /**\n * Function to dismiss a toast by id.\n * If no id is provided, all toasts will be dismissed.\n */\n dismiss(id?: string) {\n if (id == null) {\n send(\"DISMISS_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"DISMISS_TOAST\", id })\n }\n },\n /**\n * Function to remove a toast by id.\n * If no id is provided, all toasts will be removed.\n */\n remove(id?: string) {\n if (id == null) {\n send(\"REMOVE_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"REMOVE_TOAST\", id })\n }\n },\n /**\n * Function to dismiss all toasts by placement.\n */\n dismissByPlacement(placement: Placement) {\n const toasts = group.toastsByPlacement[placement]\n if (toasts) {\n toasts.forEach((toast) => group.dismiss(toast.id))\n }\n },\n /**\n * Function to update a toast's options by id.\n */\n update(id: string, options: Options) {\n if (!group.isVisible(id)) return\n send({ type: \"UPDATE_TOAST\", id, toast: options })\n return id\n },\n /**\n * Function to create a loading toast.\n */\n loading(options: Options) {\n options.type = \"loading\"\n return group.upsert(options)\n },\n /**\n * Function to create a success toast.\n */\n success(options: Options) {\n options.type = \"success\"\n return group.upsert(options)\n },\n /**\n * Function to create an error toast.\n */\n error(options: Options) {\n options.type = \"error\"\n return group.upsert(options)\n },\n /**\n * Function to create a toast from a promise.\n * - When the promise resolves, the toast will be updated with the success options.\n * - When the promise rejects, the toast will be updated with the error options.\n */\n promise<T>(promise: Promise<T>, options: PromiseOptions<T>, shared: Options = {}) {\n const id = group.loading({ ...shared, ...options.loading })\n\n promise\n .then((response) => {\n const successOptions = runIfFn(options.success, response)\n group.success({ ...shared, ...successOptions, id })\n })\n .catch((error) => {\n const errorOptions = runIfFn(options.error, error)\n group.error({ ...shared, ...errorOptions, id })\n })\n\n return promise\n },\n /**\n * Function to pause a toast by id.\n */\n pause(id?: string) {\n if (id == null) {\n send(\"PAUSE_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"PAUSE_TOAST\", id })\n }\n },\n /**\n * Function to resume a toast by id.\n */\n resume(id?: string) {\n if (id == null) {\n send(\"RESUME_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"RESUME_TOAST\", id })\n }\n },\n\n getGroupProps(options: GroupProps) {\n const { placement, label = \"Notifications\" } = options\n return normalize.element({\n ...parts.group.attrs,\n tabIndex: -1,\n \"aria-label\": label,\n id: dom.getGroupId(placement),\n \"data-placement\": placement,\n \"aria-live\": \"polite\",\n role: \"region\",\n style: getGroupPlacementStyle(state.context, placement),\n })\n },\n\n subscribe(fn: (toasts: GroupMachineContext[\"toasts\"]) => void) {\n return subscribe(state.context.toasts, () => fn(state.context.toasts))\n },\n }\n\n Object.assign(toaster, group)\n\n return group\n}\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"toast\").parts(\"group\", \"root\", \"title\", \"description\", \"closeTrigger\")\nexport const parts = anatomy.build()\n","import { createScope } from \"@zag-js/dom-query\"\nimport type { GroupMachineContext as GroupCtx, MachineContext as Ctx, Placement } from \"./toast.types\"\n\nexport const dom = createScope({\n getGroupId: (placement: Placement) => `toast-group:${placement}`,\n getRootId: (ctx: Ctx) => `toast:${ctx.id}`,\n getTitleId: (ctx: Ctx) => `toast:${ctx.id}:title`,\n getDescriptionId: (ctx: Ctx) => `toast:${ctx.id}:description`,\n getCloseTriggerId: (ctx: Ctx) => `toast${ctx.id}:close`,\n getPortalId: (ctx: GroupCtx) => `toast-portal:${ctx.id}`,\n})\n","import type { Style } from \"@zag-js/types\"\nimport type { GroupMachineContext, MachineContext, Placement, Service, Type } from \"./toast.types\"\n\nexport function getToastsByPlacement(toasts: Service[]) {\n const result: Partial<Record<Placement, Service[]>> = {}\n\n for (const toast of toasts) {\n const placement = toast.state.context.placement!\n result[placement] ||= []\n result[placement]!.push(toast)\n }\n\n return result\n}\n\nexport const defaultTimeouts: Record<Type, number> = {\n info: 5000,\n error: 5000,\n success: 2000,\n loading: Infinity,\n custom: 5000,\n}\n\nexport function getToastDuration(duration: number | undefined, type: MachineContext[\"type\"]) {\n return duration ?? defaultTimeouts[type]\n}\n\nexport function getGroupPlacementStyle(ctx: GroupMachineContext, placement: Placement): Style {\n const offset = ctx.offsets\n const computedOffset =\n typeof offset === \"string\" ? { left: offset, right: offset, bottom: offset, top: offset } : offset\n\n const rtl = ctx.dir === \"rtl\"\n const computedPlacement = placement\n .replace(\"-start\", rtl ? \"-right\" : \"-left\")\n .replace(\"-end\", rtl ? \"-left\" : \"-right\")\n\n const isRighty = computedPlacement.includes(\"right\")\n const isLefty = computedPlacement.includes(\"left\")\n\n const styles: Style = {\n position: \"fixed\",\n pointerEvents: ctx.count > 0 ? undefined : \"none\",\n display: \"flex\",\n flexDirection: \"column\",\n \"--toast-gutter\": ctx.gutter,\n zIndex: ctx.zIndex,\n }\n\n let alignItems: Style[\"alignItems\"] = \"center\"\n if (isRighty) alignItems = \"flex-end\"\n if (isLefty) alignItems = \"flex-start\"\n\n styles.alignItems = alignItems\n\n if (computedPlacement.includes(\"top\")) {\n const offset = computedOffset.top\n styles.top = `calc(env(safe-area-inset-top, 0px) + ${offset})`\n }\n\n if (computedPlacement.includes(\"bottom\")) {\n const offset = computedOffset.bottom\n styles.bottom = `calc(env(safe-area-inset-bottom, 0px) + ${offset})`\n }\n\n if (!computedPlacement.includes(\"left\")) {\n const offset = computedOffset.right\n styles.right = `calc(env(safe-area-inset-right, 0px) + ${offset})`\n }\n\n if (!computedPlacement.includes(\"right\")) {\n const offset = computedOffset.left\n styles.left = `calc(env(safe-area-inset-left, 0px) + ${offset})`\n }\n\n return styles\n}\n","import { createMachine } from \"@zag-js/core\"\nimport { MAX_Z_INDEX } from \"@zag-js/dom-query\"\nimport { compact } from \"@zag-js/utils\"\nimport { createToastMachine } from \"./toast.machine\"\nimport type { GroupMachineContext, UserDefinedGroupContext } from \"./toast.types\"\n\nexport function groupMachine(userContext: UserDefinedGroupContext) {\n const ctx = compact(userContext)\n return createMachine<GroupMachineContext>({\n id: \"toaster\",\n initial: \"active\",\n context: {\n dir: \"ltr\",\n max: Number.MAX_SAFE_INTEGER,\n toasts: [],\n gutter: \"1rem\",\n zIndex: MAX_Z_INDEX,\n pauseOnPageIdle: false,\n pauseOnInteraction: true,\n offsets: { left: \"0px\", right: \"0px\", top: \"0px\", bottom: \"0px\" },\n ...ctx,\n },\n\n computed: {\n count: (ctx) => ctx.toasts.length,\n },\n\n on: {\n SETUP: {},\n\n PAUSE_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild(\"PAUSE\", evt.id)\n },\n },\n\n PAUSE_ALL: {\n actions: (ctx) => {\n ctx.toasts.forEach((toast) => toast.send(\"PAUSE\"))\n },\n },\n\n RESUME_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild(\"RESUME\", evt.id)\n },\n },\n\n RESUME_ALL: {\n actions: (ctx) => {\n ctx.toasts.forEach((toast) => toast.send(\"RESUME\"))\n },\n },\n\n ADD_TOAST: {\n guard: (ctx) => ctx.toasts.length < ctx.max,\n actions: (ctx, evt, { self }) => {\n const options = {\n ...evt.toast,\n pauseOnPageIdle: ctx.pauseOnPageIdle,\n pauseOnInteraction: ctx.pauseOnInteraction,\n dir: ctx.dir,\n getRootNode: ctx.getRootNode,\n }\n const toast = createToastMachine(options)\n const actor = self.spawn(toast)\n ctx.toasts.push(actor)\n },\n },\n\n UPDATE_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild({ type: \"UPDATE\", toast: evt.toast }, evt.id)\n },\n },\n\n DISMISS_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild(\"DISMISS\", evt.id)\n },\n },\n\n DISMISS_ALL: {\n actions: (ctx) => {\n ctx.toasts.forEach((toast) => toast.send(\"DISMISS\"))\n },\n },\n\n REMOVE_TOAST: {\n actions: (ctx, evt, { self }) => {\n self.stopChild(evt.id)\n const index = ctx.toasts.findIndex((toast) => toast.id === evt.id)\n ctx.toasts.splice(index, 1)\n },\n },\n\n REMOVE_ALL: {\n actions: (ctx, _evt, { self }) => {\n ctx.toasts.forEach((toast) => self.stopChild(toast.id))\n while (ctx.toasts.length) ctx.toasts.pop()\n },\n },\n },\n })\n}\n","import { createMachine, guards } from \"@zag-js/core\"\nimport { addDomEvent } from \"@zag-js/dom-event\"\nimport { compact } from \"@zag-js/utils\"\nimport { dom } from \"./toast.dom\"\nimport type { MachineContext, MachineState, Options } from \"./toast.types\"\nimport { getToastDuration } from \"./toast.utils\"\n\nconst { not, and, or } = guards\n\nexport function createToastMachine(options: Options = {}) {\n const { type = \"info\", duration, id = \"toast\", placement = \"bottom\", removeDelay = 0, ...restProps } = options\n const ctx = compact(restProps)\n\n const computedDuration = getToastDuration(duration, type)\n\n return createMachine<MachineContext, MachineState>(\n {\n id,\n entry: \"invokeOnOpen\",\n initial: type === \"loading\" ? \"persist\" : \"active\",\n context: {\n id,\n type,\n remaining: computedDuration,\n duration: computedDuration,\n removeDelay,\n createdAt: Date.now(),\n placement,\n ...ctx,\n },\n\n on: {\n UPDATE: [\n {\n guard: and(\"hasTypeChanged\", \"isChangingToLoading\"),\n target: \"persist\",\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n {\n guard: or(\"hasDurationChanged\", \"hasTypeChanged\"),\n target: \"active:temp\",\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n {\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n ],\n },\n\n states: {\n \"active:temp\": {\n tags: [\"visible\", \"updating\"],\n after: {\n 0: \"active\",\n },\n },\n\n persist: {\n tags: [\"visible\", \"paused\"],\n activities: \"trackDocumentVisibility\",\n on: {\n RESUME: {\n guard: not(\"isLoadingType\"),\n target: \"active\",\n actions: [\"setCreatedAt\"],\n },\n DISMISS: \"dismissing\",\n },\n },\n\n active: {\n tags: [\"visible\"],\n activities: \"trackDocumentVisibility\",\n after: {\n VISIBLE_DURATION: \"dismissing\",\n },\n on: {\n DISMISS: \"dismissing\",\n PAUSE: {\n target: \"persist\",\n actions: \"setRemainingDuration\",\n },\n },\n },\n\n dismissing: {\n entry: \"invokeOnClosing\",\n after: {\n REMOVE_DELAY: {\n target: \"inactive\",\n actions: \"notifyParentToRemove\",\n },\n },\n },\n\n inactive: {\n entry: \"invokeOnClose\",\n type: \"final\",\n },\n },\n },\n {\n activities: {\n trackDocumentVisibility(ctx, _evt, { send }) {\n if (!ctx.pauseOnPageIdle) return\n const doc = dom.getDoc(ctx)\n return addDomEvent(doc, \"visibilitychange\", () => {\n send(doc.visibilityState === \"hidden\" ? \"PAUSE\" : \"RESUME\")\n })\n },\n },\n\n guards: {\n isChangingToLoading: (_, evt) => evt.toast?.type === \"loading\",\n isLoadingType: (ctx) => ctx.type === \"loading\",\n hasTypeChanged: (ctx, evt) => evt.toast?.type !== ctx.type,\n hasDurationChanged: (ctx, evt) => evt.toast?.duration !== ctx.duration,\n },\n\n delays: {\n VISIBLE_DURATION: (ctx) => ctx.remaining,\n REMOVE_DELAY: (ctx) => ctx.removeDelay,\n },\n\n actions: {\n setRemainingDuration(ctx) {\n ctx.remaining -= Date.now() - ctx.createdAt\n },\n setCreatedAt(ctx) {\n ctx.createdAt = Date.now()\n },\n notifyParentToRemove(_ctx, _evt, { self }) {\n self.sendParent({ type: \"REMOVE_TOAST\", id: self.id })\n },\n invokeOnClosing(ctx) {\n ctx.onClosing?.()\n },\n invokeOnClose(ctx) {\n ctx.onClose?.()\n },\n invokeOnOpen(ctx) {\n ctx.onOpen?.()\n },\n invokeOnUpdate(ctx) {\n ctx.onUpdate?.()\n },\n setContext(ctx, evt) {\n const { duration, type } = evt.toast\n const time = getToastDuration(duration, type)\n Object.assign(ctx, { ...evt.toast, duration: time, remaining: time })\n },\n },\n },\n )\n}\n","import { dataAttr } from \"@zag-js/dom-query\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./toast.anatomy\"\nimport { dom } from \"./toast.dom\"\nimport type { PublicApi, Send, State } from \"./toast.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): PublicApi<T> {\n const isVisible = state.hasTag(\"visible\")\n const isPaused = state.hasTag(\"paused\")\n\n const pauseOnInteraction = state.context.pauseOnInteraction\n const placement = state.context.placement\n\n return {\n type: state.context.type,\n title: state.context.title,\n description: state.context.description,\n placement,\n isVisible,\n isPaused,\n isRtl: state.context.dir === \"rtl\",\n\n pause() {\n send(\"PAUSE\")\n },\n\n resume() {\n send(\"RESUME\")\n },\n\n dismiss() {\n send(\"DISMISS\")\n },\n\n render() {\n return state.context.render?.({\n id: state.context.id,\n type: state.context.type,\n duration: state.context.duration,\n title: state.context.title,\n placement: state.context.placement,\n description: state.context.description,\n dismiss() {\n send(\"DISMISS\")\n },\n })\n },\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n dir: state.context.dir,\n id: dom.getRootId(state.context),\n \"data-open\": dataAttr(isVisible),\n \"data-type\": state.context.type,\n \"data-placement\": placement,\n role: \"status\",\n \"aria-atomic\": \"true\",\n tabIndex: 0,\n style: {\n position: \"relative\",\n pointerEvents: \"auto\",\n margin: \"calc(var(--toast-gutter) / 2)\",\n \"--remove-delay\": `${state.context.removeDelay}ms`,\n \"--duration\": `${state.context.duration}ms`,\n },\n onKeyDown(event) {\n if (event.key == \"Escape\") {\n send(\"DISMISS\")\n event.preventDefault()\n }\n },\n onFocus() {\n if (pauseOnInteraction) {\n send(\"PAUSE\")\n }\n },\n onBlur() {\n if (pauseOnInteraction) {\n send(\"RESUME\")\n }\n },\n onPointerEnter() {\n if (pauseOnInteraction) {\n send(\"PAUSE\")\n }\n },\n onPointerLeave() {\n if (pauseOnInteraction) {\n send(\"RESUME\")\n }\n },\n }),\n\n titleProps: normalize.element({\n ...parts.title.attrs,\n id: dom.getTitleId(state.context),\n }),\n\n descriptionProps: normalize.element({\n ...parts.description.attrs,\n id: dom.getDescriptionId(state.context),\n }),\n\n closeTriggerProps: normalize.button({\n id: dom.getCloseTriggerId(state.context),\n ...parts.closeTrigger.attrs,\n type: \"button\",\n \"aria-label\": \"Dismiss notification\",\n onClick() {\n send(\"DISMISS\")\n },\n }),\n }\n}\n"],"mappings":"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","names":["import_dom_query","import_utils","offset","group","import_core","import_dom_query","import_utils","import_core","import_utils","ctx","duration","type","ctx","import_dom_query"]}
|
package/dist/index.mjs
CHANGED
|
@@ -492,55 +492,22 @@ function connect(state, send, normalize) {
|
|
|
492
492
|
const pauseOnInteraction = state.context.pauseOnInteraction;
|
|
493
493
|
const placement = state.context.placement;
|
|
494
494
|
return {
|
|
495
|
-
/**
|
|
496
|
-
* The type of the toast.
|
|
497
|
-
*/
|
|
498
495
|
type: state.context.type,
|
|
499
|
-
/**
|
|
500
|
-
* The title of the toast.
|
|
501
|
-
*/
|
|
502
496
|
title: state.context.title,
|
|
503
|
-
/**
|
|
504
|
-
* The description of the toast.
|
|
505
|
-
*/
|
|
506
497
|
description: state.context.description,
|
|
507
|
-
/**
|
|
508
|
-
* The current placement of the toast.
|
|
509
|
-
*/
|
|
510
498
|
placement,
|
|
511
|
-
/**
|
|
512
|
-
* Whether the toast is visible.
|
|
513
|
-
*/
|
|
514
499
|
isVisible,
|
|
515
|
-
/**
|
|
516
|
-
* Whether the toast is paused.
|
|
517
|
-
*/
|
|
518
500
|
isPaused,
|
|
519
|
-
/**
|
|
520
|
-
* Whether the toast is in RTL mode.
|
|
521
|
-
*/
|
|
522
501
|
isRtl: state.context.dir === "rtl",
|
|
523
|
-
/**
|
|
524
|
-
* Function to pause the toast (keeping it visible).
|
|
525
|
-
*/
|
|
526
502
|
pause() {
|
|
527
503
|
send("PAUSE");
|
|
528
504
|
},
|
|
529
|
-
/**
|
|
530
|
-
* Function to resume the toast dismissing.
|
|
531
|
-
*/
|
|
532
505
|
resume() {
|
|
533
506
|
send("RESUME");
|
|
534
507
|
},
|
|
535
|
-
/**
|
|
536
|
-
* Function to instantly dismiss the toast.
|
|
537
|
-
*/
|
|
538
508
|
dismiss() {
|
|
539
509
|
send("DISMISS");
|
|
540
510
|
},
|
|
541
|
-
/**
|
|
542
|
-
* Function render the toast in the DOM (based on the defined `render` property)
|
|
543
|
-
*/
|
|
544
511
|
render() {
|
|
545
512
|
return state.context.render?.({
|
|
546
513
|
id: state.context.id,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/toast-group.connect.ts","../src/toast.anatomy.ts","../src/toast.dom.ts","../src/toast.utils.ts","../src/toast-group.machine.ts","../src/toast.machine.ts","../src/toast.connect.ts"],"sourcesContent":["import { isDom } from \"@zag-js/dom-query\"\nimport { warn } from \"@zag-js/utils\"\nimport { groupConnect, toaster } from \"./toast-group.connect\"\nimport { groupMachine } from \"./toast-group.machine\"\nimport { createToastMachine as createMachine } from \"./toast.machine\"\n\nexport { anatomy } from \"./toast.anatomy\"\nexport { connect } from \"./toast.connect\"\nexport type {\n GroupMachineContext,\n MachineContext,\n MachineState,\n Placement,\n Service,\n ToastOptions,\n Type,\n} from \"./toast.types\"\nexport { createMachine }\n\nexport const group = {\n connect: groupConnect,\n machine: groupMachine,\n}\n\nexport function api() {\n if (!isDom()) {\n warn(\"toast.api() is only available in the browser\")\n } else {\n return toaster\n }\n}\n","import { subscribe } from \"@zag-js/core\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { runIfFn, uuid } from \"@zag-js/utils\"\nimport { parts } from \"./toast.anatomy\"\nimport { dom } from \"./toast.dom\"\nimport type {\n GroupMachineContext,\n GroupProps,\n GroupSend,\n GroupState,\n Placement,\n PromiseOptions,\n Toaster,\n Options,\n} from \"./toast.types\"\nimport { getGroupPlacementStyle, getToastsByPlacement } from \"./toast.utils\"\n\nexport let toaster = {} as Toaster\n\nexport function groupConnect<T extends PropTypes>(state: GroupState, send: GroupSend, normalize: NormalizeProps<T>) {\n const group = {\n /**\n * The total number of toasts\n */\n count: state.context.count,\n /**\n * The active toasts\n */\n toasts: state.context.toasts,\n /**\n * The active toasts by placement\n */\n toastsByPlacement: getToastsByPlacement(state.context.toasts),\n /**\n * Returns whether the toast id is visible\n */\n isVisible(id: string) {\n if (!state.context.toasts.length) return false\n return !!state.context.toasts.find((toast) => toast.id == id)\n },\n /**\n * Function to create a toast.\n */\n create(options: Options) {\n const uid = `toast:${uuid()}`\n const id = options.id ? options.id : uid\n\n if (group.isVisible(id)) return\n send({ type: \"ADD_TOAST\", toast: { ...options, id } })\n\n return id\n },\n /**\n * Function to create or update a toast.\n */\n upsert(options: Options) {\n const { id } = options\n const isVisible = id ? group.isVisible(id) : false\n if (isVisible && id != null) {\n return group.update(id, options)\n } else {\n return group.create(options)\n }\n },\n /**\n * Function to dismiss a toast by id.\n * If no id is provided, all toasts will be dismissed.\n */\n dismiss(id?: string) {\n if (id == null) {\n send(\"DISMISS_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"DISMISS_TOAST\", id })\n }\n },\n /**\n * Function to remove a toast by id.\n * If no id is provided, all toasts will be removed.\n */\n remove(id?: string) {\n if (id == null) {\n send(\"REMOVE_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"REMOVE_TOAST\", id })\n }\n },\n /**\n * Function to dismiss all toasts by placement.\n */\n dismissByPlacement(placement: Placement) {\n const toasts = group.toastsByPlacement[placement]\n if (toasts) {\n toasts.forEach((toast) => group.dismiss(toast.id))\n }\n },\n /**\n * Function to update a toast's options by id.\n */\n update(id: string, options: Options) {\n if (!group.isVisible(id)) return\n send({ type: \"UPDATE_TOAST\", id, toast: options })\n return id\n },\n /**\n * Function to create a loading toast.\n */\n loading(options: Options) {\n options.type = \"loading\"\n return group.upsert(options)\n },\n /**\n * Function to create a success toast.\n */\n success(options: Options) {\n options.type = \"success\"\n return group.upsert(options)\n },\n /**\n * Function to create an error toast.\n */\n error(options: Options) {\n options.type = \"error\"\n return group.upsert(options)\n },\n /**\n * Function to create a toast from a promise.\n * - When the promise resolves, the toast will be updated with the success options.\n * - When the promise rejects, the toast will be updated with the error options.\n */\n promise<T>(promise: Promise<T>, options: PromiseOptions<T>, shared: Options = {}) {\n const id = group.loading({ ...shared, ...options.loading })\n\n promise\n .then((response) => {\n const successOptions = runIfFn(options.success, response)\n group.success({ ...shared, ...successOptions, id })\n })\n .catch((error) => {\n const errorOptions = runIfFn(options.error, error)\n group.error({ ...shared, ...errorOptions, id })\n })\n\n return promise\n },\n /**\n * Function to pause a toast by id.\n */\n pause(id?: string) {\n if (id == null) {\n send(\"PAUSE_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"PAUSE_TOAST\", id })\n }\n },\n /**\n * Function to resume a toast by id.\n */\n resume(id?: string) {\n if (id == null) {\n send(\"RESUME_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"RESUME_TOAST\", id })\n }\n },\n\n getGroupProps(options: GroupProps) {\n const { placement, label = \"Notifications\" } = options\n return normalize.element({\n ...parts.group.attrs,\n tabIndex: -1,\n \"aria-label\": label,\n id: dom.getGroupId(placement),\n \"data-placement\": placement,\n \"aria-live\": \"polite\",\n role: \"region\",\n style: getGroupPlacementStyle(state.context, placement),\n })\n },\n\n subscribe(fn: (toasts: GroupMachineContext[\"toasts\"]) => void) {\n return subscribe(state.context.toasts, () => fn(state.context.toasts))\n },\n }\n\n Object.assign(toaster, group)\n\n return group\n}\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"toast\").parts(\"group\", \"root\", \"title\", \"description\", \"closeTrigger\")\nexport const parts = anatomy.build()\n","import { createScope } from \"@zag-js/dom-query\"\nimport type { GroupMachineContext as GroupCtx, MachineContext as Ctx, Placement } from \"./toast.types\"\n\nexport const dom = createScope({\n getGroupId: (placement: Placement) => `toast-group:${placement}`,\n getRootId: (ctx: Ctx) => `toast:${ctx.id}`,\n getTitleId: (ctx: Ctx) => `toast:${ctx.id}:title`,\n getDescriptionId: (ctx: Ctx) => `toast:${ctx.id}:description`,\n getCloseTriggerId: (ctx: Ctx) => `toast${ctx.id}:close`,\n getPortalId: (ctx: GroupCtx) => `toast-portal:${ctx.id}`,\n})\n","import type { Style } from \"@zag-js/types\"\nimport type { GroupMachineContext, MachineContext, Placement, Service, Type } from \"./toast.types\"\n\nexport function getToastsByPlacement(toasts: Service[]) {\n const result: Partial<Record<Placement, Service[]>> = {}\n\n for (const toast of toasts) {\n const placement = toast.state.context.placement!\n result[placement] ||= []\n result[placement]!.push(toast)\n }\n\n return result\n}\n\nexport const defaultTimeouts: Record<Type, number> = {\n info: 5000,\n error: 5000,\n success: 2000,\n loading: Infinity,\n custom: 5000,\n}\n\nexport function getToastDuration(duration: number | undefined, type: MachineContext[\"type\"]) {\n return duration ?? defaultTimeouts[type]\n}\n\nexport function getGroupPlacementStyle(ctx: GroupMachineContext, placement: Placement): Style {\n const offset = ctx.offsets\n const computedOffset =\n typeof offset === \"string\" ? { left: offset, right: offset, bottom: offset, top: offset } : offset\n\n const rtl = ctx.dir === \"rtl\"\n const computedPlacement = placement\n .replace(\"-start\", rtl ? \"-right\" : \"-left\")\n .replace(\"-end\", rtl ? \"-left\" : \"-right\")\n\n const isRighty = computedPlacement.includes(\"right\")\n const isLefty = computedPlacement.includes(\"left\")\n\n const styles: Style = {\n position: \"fixed\",\n pointerEvents: ctx.count > 0 ? undefined : \"none\",\n display: \"flex\",\n flexDirection: \"column\",\n \"--toast-gutter\": ctx.gutter,\n zIndex: ctx.zIndex,\n }\n\n let alignItems: Style[\"alignItems\"] = \"center\"\n if (isRighty) alignItems = \"flex-end\"\n if (isLefty) alignItems = \"flex-start\"\n\n styles.alignItems = alignItems\n\n if (computedPlacement.includes(\"top\")) {\n const offset = computedOffset.top\n styles.top = `calc(env(safe-area-inset-top, 0px) + ${offset})`\n }\n\n if (computedPlacement.includes(\"bottom\")) {\n const offset = computedOffset.bottom\n styles.bottom = `calc(env(safe-area-inset-bottom, 0px) + ${offset})`\n }\n\n if (!computedPlacement.includes(\"left\")) {\n const offset = computedOffset.right\n styles.right = `calc(env(safe-area-inset-right, 0px) + ${offset})`\n }\n\n if (!computedPlacement.includes(\"right\")) {\n const offset = computedOffset.left\n styles.left = `calc(env(safe-area-inset-left, 0px) + ${offset})`\n }\n\n return styles\n}\n","import { createMachine } from \"@zag-js/core\"\nimport { MAX_Z_INDEX } from \"@zag-js/dom-query\"\nimport { compact } from \"@zag-js/utils\"\nimport { createToastMachine } from \"./toast.machine\"\nimport type { GroupMachineContext, UserDefinedGroupContext } from \"./toast.types\"\n\nexport function groupMachine(userContext: UserDefinedGroupContext) {\n const ctx = compact(userContext)\n return createMachine<GroupMachineContext>({\n id: \"toaster\",\n initial: \"active\",\n context: {\n dir: \"ltr\",\n max: Number.MAX_SAFE_INTEGER,\n toasts: [],\n gutter: \"1rem\",\n zIndex: MAX_Z_INDEX,\n pauseOnPageIdle: false,\n pauseOnInteraction: true,\n offsets: { left: \"0px\", right: \"0px\", top: \"0px\", bottom: \"0px\" },\n ...ctx,\n },\n\n computed: {\n count: (ctx) => ctx.toasts.length,\n },\n\n on: {\n SETUP: {},\n\n PAUSE_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild(\"PAUSE\", evt.id)\n },\n },\n\n PAUSE_ALL: {\n actions: (ctx) => {\n ctx.toasts.forEach((toast) => toast.send(\"PAUSE\"))\n },\n },\n\n RESUME_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild(\"RESUME\", evt.id)\n },\n },\n\n RESUME_ALL: {\n actions: (ctx) => {\n ctx.toasts.forEach((toast) => toast.send(\"RESUME\"))\n },\n },\n\n ADD_TOAST: {\n guard: (ctx) => ctx.toasts.length < ctx.max,\n actions: (ctx, evt, { self }) => {\n const options = {\n ...evt.toast,\n pauseOnPageIdle: ctx.pauseOnPageIdle,\n pauseOnInteraction: ctx.pauseOnInteraction,\n dir: ctx.dir,\n getRootNode: ctx.getRootNode,\n }\n const toast = createToastMachine(options)\n const actor = self.spawn(toast)\n ctx.toasts.push(actor)\n },\n },\n\n UPDATE_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild({ type: \"UPDATE\", toast: evt.toast }, evt.id)\n },\n },\n\n DISMISS_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild(\"DISMISS\", evt.id)\n },\n },\n\n DISMISS_ALL: {\n actions: (ctx) => {\n ctx.toasts.forEach((toast) => toast.send(\"DISMISS\"))\n },\n },\n\n REMOVE_TOAST: {\n actions: (ctx, evt, { self }) => {\n self.stopChild(evt.id)\n const index = ctx.toasts.findIndex((toast) => toast.id === evt.id)\n ctx.toasts.splice(index, 1)\n },\n },\n\n REMOVE_ALL: {\n actions: (ctx, _evt, { self }) => {\n ctx.toasts.forEach((toast) => self.stopChild(toast.id))\n while (ctx.toasts.length) ctx.toasts.pop()\n },\n },\n },\n })\n}\n","import { createMachine, guards } from \"@zag-js/core\"\nimport { addDomEvent } from \"@zag-js/dom-event\"\nimport { compact } from \"@zag-js/utils\"\nimport { dom } from \"./toast.dom\"\nimport type { MachineContext, MachineState, Options } from \"./toast.types\"\nimport { getToastDuration } from \"./toast.utils\"\n\nconst { not, and, or } = guards\n\nexport function createToastMachine(options: Options = {}) {\n const { type = \"info\", duration, id = \"toast\", placement = \"bottom\", removeDelay = 0, ...restProps } = options\n const ctx = compact(restProps)\n\n const computedDuration = getToastDuration(duration, type)\n\n return createMachine<MachineContext, MachineState>(\n {\n id,\n entry: \"invokeOnOpen\",\n initial: type === \"loading\" ? \"persist\" : \"active\",\n context: {\n id,\n type,\n remaining: computedDuration,\n duration: computedDuration,\n removeDelay,\n createdAt: Date.now(),\n placement,\n ...ctx,\n },\n\n on: {\n UPDATE: [\n {\n guard: and(\"hasTypeChanged\", \"isChangingToLoading\"),\n target: \"persist\",\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n {\n guard: or(\"hasDurationChanged\", \"hasTypeChanged\"),\n target: \"active:temp\",\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n {\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n ],\n },\n\n states: {\n \"active:temp\": {\n tags: [\"visible\", \"updating\"],\n after: {\n 0: \"active\",\n },\n },\n\n persist: {\n tags: [\"visible\", \"paused\"],\n activities: \"trackDocumentVisibility\",\n on: {\n RESUME: {\n guard: not(\"isLoadingType\"),\n target: \"active\",\n actions: [\"setCreatedAt\"],\n },\n DISMISS: \"dismissing\",\n },\n },\n\n active: {\n tags: [\"visible\"],\n activities: \"trackDocumentVisibility\",\n after: {\n VISIBLE_DURATION: \"dismissing\",\n },\n on: {\n DISMISS: \"dismissing\",\n PAUSE: {\n target: \"persist\",\n actions: \"setRemainingDuration\",\n },\n },\n },\n\n dismissing: {\n entry: \"invokeOnClosing\",\n after: {\n REMOVE_DELAY: {\n target: \"inactive\",\n actions: \"notifyParentToRemove\",\n },\n },\n },\n\n inactive: {\n entry: \"invokeOnClose\",\n type: \"final\",\n },\n },\n },\n {\n activities: {\n trackDocumentVisibility(ctx, _evt, { send }) {\n if (!ctx.pauseOnPageIdle) return\n const doc = dom.getDoc(ctx)\n return addDomEvent(doc, \"visibilitychange\", () => {\n send(doc.visibilityState === \"hidden\" ? \"PAUSE\" : \"RESUME\")\n })\n },\n },\n\n guards: {\n isChangingToLoading: (_, evt) => evt.toast?.type === \"loading\",\n isLoadingType: (ctx) => ctx.type === \"loading\",\n hasTypeChanged: (ctx, evt) => evt.toast?.type !== ctx.type,\n hasDurationChanged: (ctx, evt) => evt.toast?.duration !== ctx.duration,\n },\n\n delays: {\n VISIBLE_DURATION: (ctx) => ctx.remaining,\n REMOVE_DELAY: (ctx) => ctx.removeDelay,\n },\n\n actions: {\n setRemainingDuration(ctx) {\n ctx.remaining -= Date.now() - ctx.createdAt\n },\n setCreatedAt(ctx) {\n ctx.createdAt = Date.now()\n },\n notifyParentToRemove(_ctx, _evt, { self }) {\n self.sendParent({ type: \"REMOVE_TOAST\", id: self.id })\n },\n invokeOnClosing(ctx) {\n ctx.onClosing?.()\n },\n invokeOnClose(ctx) {\n ctx.onClose?.()\n },\n invokeOnOpen(ctx) {\n ctx.onOpen?.()\n },\n invokeOnUpdate(ctx) {\n ctx.onUpdate?.()\n },\n setContext(ctx, evt) {\n const { duration, type } = evt.toast\n const time = getToastDuration(duration, type)\n Object.assign(ctx, { ...evt.toast, duration: time, remaining: time })\n },\n },\n },\n )\n}\n","import { dataAttr } from \"@zag-js/dom-query\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./toast.anatomy\"\nimport { dom } from \"./toast.dom\"\nimport type { Send, State } from \"./toast.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>) {\n const isVisible = state.hasTag(\"visible\")\n const isPaused = state.hasTag(\"paused\")\n\n const pauseOnInteraction = state.context.pauseOnInteraction\n const placement = state.context.placement\n\n return {\n /**\n * The type of the toast.\n */\n type: state.context.type,\n /**\n * The title of the toast.\n */\n title: state.context.title,\n /**\n * The description of the toast.\n */\n description: state.context.description,\n /**\n * The current placement of the toast.\n */\n placement,\n /**\n * Whether the toast is visible.\n */\n isVisible,\n /**\n * Whether the toast is paused.\n */\n isPaused,\n /**\n * Whether the toast is in RTL mode.\n */\n isRtl: state.context.dir === \"rtl\",\n /**\n * Function to pause the toast (keeping it visible).\n */\n pause() {\n send(\"PAUSE\")\n },\n /**\n * Function to resume the toast dismissing.\n */\n resume() {\n send(\"RESUME\")\n },\n /**\n * Function to instantly dismiss the toast.\n */\n dismiss() {\n send(\"DISMISS\")\n },\n /**\n * Function render the toast in the DOM (based on the defined `render` property)\n */\n render() {\n return state.context.render?.({\n id: state.context.id,\n type: state.context.type,\n duration: state.context.duration,\n title: state.context.title,\n placement: state.context.placement,\n description: state.context.description,\n dismiss() {\n send(\"DISMISS\")\n },\n })\n },\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n dir: state.context.dir,\n id: dom.getRootId(state.context),\n \"data-open\": dataAttr(isVisible),\n \"data-type\": state.context.type,\n \"data-placement\": placement,\n role: \"status\",\n \"aria-atomic\": \"true\",\n tabIndex: 0,\n style: {\n position: \"relative\",\n pointerEvents: \"auto\",\n margin: \"calc(var(--toast-gutter) / 2)\",\n \"--remove-delay\": `${state.context.removeDelay}ms`,\n \"--duration\": `${state.context.duration}ms`,\n },\n onKeyDown(event) {\n if (event.key == \"Escape\") {\n send(\"DISMISS\")\n event.preventDefault()\n }\n },\n onFocus() {\n if (pauseOnInteraction) {\n send(\"PAUSE\")\n }\n },\n onBlur() {\n if (pauseOnInteraction) {\n send(\"RESUME\")\n }\n },\n onPointerEnter() {\n if (pauseOnInteraction) {\n send(\"PAUSE\")\n }\n },\n onPointerLeave() {\n if (pauseOnInteraction) {\n send(\"RESUME\")\n }\n },\n }),\n\n titleProps: normalize.element({\n ...parts.title.attrs,\n id: dom.getTitleId(state.context),\n }),\n\n descriptionProps: normalize.element({\n ...parts.description.attrs,\n id: dom.getDescriptionId(state.context),\n }),\n\n closeTriggerProps: normalize.button({\n id: dom.getCloseTriggerId(state.context),\n ...parts.closeTrigger.attrs,\n type: \"button\",\n \"aria-label\": \"Dismiss notification\",\n onClick() {\n send(\"DISMISS\")\n },\n }),\n }\n}\n"],"mappings":"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","names":["offset","group","createMachine","compact","ctx","duration","type","compact","createMachine","ctx"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/toast-group.connect.ts","../src/toast.anatomy.ts","../src/toast.dom.ts","../src/toast.utils.ts","../src/toast-group.machine.ts","../src/toast.machine.ts","../src/toast.connect.ts"],"sourcesContent":["import { isDom } from \"@zag-js/dom-query\"\nimport { warn } from \"@zag-js/utils\"\nimport { groupConnect, toaster } from \"./toast-group.connect\"\nimport { groupMachine } from \"./toast-group.machine\"\nimport { createToastMachine as createMachine } from \"./toast.machine\"\n\nexport { anatomy } from \"./toast.anatomy\"\nexport { connect } from \"./toast.connect\"\nexport type {\n GroupMachineContext,\n MachineContext,\n MachineState,\n Placement,\n PublicApi,\n Service,\n ToastOptions,\n Type,\n} from \"./toast.types\"\nexport { createMachine }\n\nexport const group = {\n connect: groupConnect,\n machine: groupMachine,\n}\n\nexport function api() {\n if (!isDom()) {\n warn(\"toast.api() is only available in the browser\")\n } else {\n return toaster\n }\n}\n","import { subscribe } from \"@zag-js/core\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { runIfFn, uuid } from \"@zag-js/utils\"\nimport { parts } from \"./toast.anatomy\"\nimport { dom } from \"./toast.dom\"\nimport type {\n GroupMachineContext,\n GroupProps,\n GroupSend,\n GroupState,\n Placement,\n PromiseOptions,\n Toaster,\n Options,\n} from \"./toast.types\"\nimport { getGroupPlacementStyle, getToastsByPlacement } from \"./toast.utils\"\n\nexport let toaster = {} as Toaster\n\nexport function groupConnect<T extends PropTypes>(state: GroupState, send: GroupSend, normalize: NormalizeProps<T>) {\n const group = {\n /**\n * The total number of toasts\n */\n count: state.context.count,\n /**\n * The active toasts\n */\n toasts: state.context.toasts,\n /**\n * The active toasts by placement\n */\n toastsByPlacement: getToastsByPlacement(state.context.toasts),\n /**\n * Returns whether the toast id is visible\n */\n isVisible(id: string) {\n if (!state.context.toasts.length) return false\n return !!state.context.toasts.find((toast) => toast.id == id)\n },\n /**\n * Function to create a toast.\n */\n create(options: Options) {\n const uid = `toast:${uuid()}`\n const id = options.id ? options.id : uid\n\n if (group.isVisible(id)) return\n send({ type: \"ADD_TOAST\", toast: { ...options, id } })\n\n return id\n },\n /**\n * Function to create or update a toast.\n */\n upsert(options: Options) {\n const { id } = options\n const isVisible = id ? group.isVisible(id) : false\n if (isVisible && id != null) {\n return group.update(id, options)\n } else {\n return group.create(options)\n }\n },\n /**\n * Function to dismiss a toast by id.\n * If no id is provided, all toasts will be dismissed.\n */\n dismiss(id?: string) {\n if (id == null) {\n send(\"DISMISS_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"DISMISS_TOAST\", id })\n }\n },\n /**\n * Function to remove a toast by id.\n * If no id is provided, all toasts will be removed.\n */\n remove(id?: string) {\n if (id == null) {\n send(\"REMOVE_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"REMOVE_TOAST\", id })\n }\n },\n /**\n * Function to dismiss all toasts by placement.\n */\n dismissByPlacement(placement: Placement) {\n const toasts = group.toastsByPlacement[placement]\n if (toasts) {\n toasts.forEach((toast) => group.dismiss(toast.id))\n }\n },\n /**\n * Function to update a toast's options by id.\n */\n update(id: string, options: Options) {\n if (!group.isVisible(id)) return\n send({ type: \"UPDATE_TOAST\", id, toast: options })\n return id\n },\n /**\n * Function to create a loading toast.\n */\n loading(options: Options) {\n options.type = \"loading\"\n return group.upsert(options)\n },\n /**\n * Function to create a success toast.\n */\n success(options: Options) {\n options.type = \"success\"\n return group.upsert(options)\n },\n /**\n * Function to create an error toast.\n */\n error(options: Options) {\n options.type = \"error\"\n return group.upsert(options)\n },\n /**\n * Function to create a toast from a promise.\n * - When the promise resolves, the toast will be updated with the success options.\n * - When the promise rejects, the toast will be updated with the error options.\n */\n promise<T>(promise: Promise<T>, options: PromiseOptions<T>, shared: Options = {}) {\n const id = group.loading({ ...shared, ...options.loading })\n\n promise\n .then((response) => {\n const successOptions = runIfFn(options.success, response)\n group.success({ ...shared, ...successOptions, id })\n })\n .catch((error) => {\n const errorOptions = runIfFn(options.error, error)\n group.error({ ...shared, ...errorOptions, id })\n })\n\n return promise\n },\n /**\n * Function to pause a toast by id.\n */\n pause(id?: string) {\n if (id == null) {\n send(\"PAUSE_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"PAUSE_TOAST\", id })\n }\n },\n /**\n * Function to resume a toast by id.\n */\n resume(id?: string) {\n if (id == null) {\n send(\"RESUME_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"RESUME_TOAST\", id })\n }\n },\n\n getGroupProps(options: GroupProps) {\n const { placement, label = \"Notifications\" } = options\n return normalize.element({\n ...parts.group.attrs,\n tabIndex: -1,\n \"aria-label\": label,\n id: dom.getGroupId(placement),\n \"data-placement\": placement,\n \"aria-live\": \"polite\",\n role: \"region\",\n style: getGroupPlacementStyle(state.context, placement),\n })\n },\n\n subscribe(fn: (toasts: GroupMachineContext[\"toasts\"]) => void) {\n return subscribe(state.context.toasts, () => fn(state.context.toasts))\n },\n }\n\n Object.assign(toaster, group)\n\n return group\n}\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"toast\").parts(\"group\", \"root\", \"title\", \"description\", \"closeTrigger\")\nexport const parts = anatomy.build()\n","import { createScope } from \"@zag-js/dom-query\"\nimport type { GroupMachineContext as GroupCtx, MachineContext as Ctx, Placement } from \"./toast.types\"\n\nexport const dom = createScope({\n getGroupId: (placement: Placement) => `toast-group:${placement}`,\n getRootId: (ctx: Ctx) => `toast:${ctx.id}`,\n getTitleId: (ctx: Ctx) => `toast:${ctx.id}:title`,\n getDescriptionId: (ctx: Ctx) => `toast:${ctx.id}:description`,\n getCloseTriggerId: (ctx: Ctx) => `toast${ctx.id}:close`,\n getPortalId: (ctx: GroupCtx) => `toast-portal:${ctx.id}`,\n})\n","import type { Style } from \"@zag-js/types\"\nimport type { GroupMachineContext, MachineContext, Placement, Service, Type } from \"./toast.types\"\n\nexport function getToastsByPlacement(toasts: Service[]) {\n const result: Partial<Record<Placement, Service[]>> = {}\n\n for (const toast of toasts) {\n const placement = toast.state.context.placement!\n result[placement] ||= []\n result[placement]!.push(toast)\n }\n\n return result\n}\n\nexport const defaultTimeouts: Record<Type, number> = {\n info: 5000,\n error: 5000,\n success: 2000,\n loading: Infinity,\n custom: 5000,\n}\n\nexport function getToastDuration(duration: number | undefined, type: MachineContext[\"type\"]) {\n return duration ?? defaultTimeouts[type]\n}\n\nexport function getGroupPlacementStyle(ctx: GroupMachineContext, placement: Placement): Style {\n const offset = ctx.offsets\n const computedOffset =\n typeof offset === \"string\" ? { left: offset, right: offset, bottom: offset, top: offset } : offset\n\n const rtl = ctx.dir === \"rtl\"\n const computedPlacement = placement\n .replace(\"-start\", rtl ? \"-right\" : \"-left\")\n .replace(\"-end\", rtl ? \"-left\" : \"-right\")\n\n const isRighty = computedPlacement.includes(\"right\")\n const isLefty = computedPlacement.includes(\"left\")\n\n const styles: Style = {\n position: \"fixed\",\n pointerEvents: ctx.count > 0 ? undefined : \"none\",\n display: \"flex\",\n flexDirection: \"column\",\n \"--toast-gutter\": ctx.gutter,\n zIndex: ctx.zIndex,\n }\n\n let alignItems: Style[\"alignItems\"] = \"center\"\n if (isRighty) alignItems = \"flex-end\"\n if (isLefty) alignItems = \"flex-start\"\n\n styles.alignItems = alignItems\n\n if (computedPlacement.includes(\"top\")) {\n const offset = computedOffset.top\n styles.top = `calc(env(safe-area-inset-top, 0px) + ${offset})`\n }\n\n if (computedPlacement.includes(\"bottom\")) {\n const offset = computedOffset.bottom\n styles.bottom = `calc(env(safe-area-inset-bottom, 0px) + ${offset})`\n }\n\n if (!computedPlacement.includes(\"left\")) {\n const offset = computedOffset.right\n styles.right = `calc(env(safe-area-inset-right, 0px) + ${offset})`\n }\n\n if (!computedPlacement.includes(\"right\")) {\n const offset = computedOffset.left\n styles.left = `calc(env(safe-area-inset-left, 0px) + ${offset})`\n }\n\n return styles\n}\n","import { createMachine } from \"@zag-js/core\"\nimport { MAX_Z_INDEX } from \"@zag-js/dom-query\"\nimport { compact } from \"@zag-js/utils\"\nimport { createToastMachine } from \"./toast.machine\"\nimport type { GroupMachineContext, UserDefinedGroupContext } from \"./toast.types\"\n\nexport function groupMachine(userContext: UserDefinedGroupContext) {\n const ctx = compact(userContext)\n return createMachine<GroupMachineContext>({\n id: \"toaster\",\n initial: \"active\",\n context: {\n dir: \"ltr\",\n max: Number.MAX_SAFE_INTEGER,\n toasts: [],\n gutter: \"1rem\",\n zIndex: MAX_Z_INDEX,\n pauseOnPageIdle: false,\n pauseOnInteraction: true,\n offsets: { left: \"0px\", right: \"0px\", top: \"0px\", bottom: \"0px\" },\n ...ctx,\n },\n\n computed: {\n count: (ctx) => ctx.toasts.length,\n },\n\n on: {\n SETUP: {},\n\n PAUSE_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild(\"PAUSE\", evt.id)\n },\n },\n\n PAUSE_ALL: {\n actions: (ctx) => {\n ctx.toasts.forEach((toast) => toast.send(\"PAUSE\"))\n },\n },\n\n RESUME_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild(\"RESUME\", evt.id)\n },\n },\n\n RESUME_ALL: {\n actions: (ctx) => {\n ctx.toasts.forEach((toast) => toast.send(\"RESUME\"))\n },\n },\n\n ADD_TOAST: {\n guard: (ctx) => ctx.toasts.length < ctx.max,\n actions: (ctx, evt, { self }) => {\n const options = {\n ...evt.toast,\n pauseOnPageIdle: ctx.pauseOnPageIdle,\n pauseOnInteraction: ctx.pauseOnInteraction,\n dir: ctx.dir,\n getRootNode: ctx.getRootNode,\n }\n const toast = createToastMachine(options)\n const actor = self.spawn(toast)\n ctx.toasts.push(actor)\n },\n },\n\n UPDATE_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild({ type: \"UPDATE\", toast: evt.toast }, evt.id)\n },\n },\n\n DISMISS_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild(\"DISMISS\", evt.id)\n },\n },\n\n DISMISS_ALL: {\n actions: (ctx) => {\n ctx.toasts.forEach((toast) => toast.send(\"DISMISS\"))\n },\n },\n\n REMOVE_TOAST: {\n actions: (ctx, evt, { self }) => {\n self.stopChild(evt.id)\n const index = ctx.toasts.findIndex((toast) => toast.id === evt.id)\n ctx.toasts.splice(index, 1)\n },\n },\n\n REMOVE_ALL: {\n actions: (ctx, _evt, { self }) => {\n ctx.toasts.forEach((toast) => self.stopChild(toast.id))\n while (ctx.toasts.length) ctx.toasts.pop()\n },\n },\n },\n })\n}\n","import { createMachine, guards } from \"@zag-js/core\"\nimport { addDomEvent } from \"@zag-js/dom-event\"\nimport { compact } from \"@zag-js/utils\"\nimport { dom } from \"./toast.dom\"\nimport type { MachineContext, MachineState, Options } from \"./toast.types\"\nimport { getToastDuration } from \"./toast.utils\"\n\nconst { not, and, or } = guards\n\nexport function createToastMachine(options: Options = {}) {\n const { type = \"info\", duration, id = \"toast\", placement = \"bottom\", removeDelay = 0, ...restProps } = options\n const ctx = compact(restProps)\n\n const computedDuration = getToastDuration(duration, type)\n\n return createMachine<MachineContext, MachineState>(\n {\n id,\n entry: \"invokeOnOpen\",\n initial: type === \"loading\" ? \"persist\" : \"active\",\n context: {\n id,\n type,\n remaining: computedDuration,\n duration: computedDuration,\n removeDelay,\n createdAt: Date.now(),\n placement,\n ...ctx,\n },\n\n on: {\n UPDATE: [\n {\n guard: and(\"hasTypeChanged\", \"isChangingToLoading\"),\n target: \"persist\",\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n {\n guard: or(\"hasDurationChanged\", \"hasTypeChanged\"),\n target: \"active:temp\",\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n {\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n ],\n },\n\n states: {\n \"active:temp\": {\n tags: [\"visible\", \"updating\"],\n after: {\n 0: \"active\",\n },\n },\n\n persist: {\n tags: [\"visible\", \"paused\"],\n activities: \"trackDocumentVisibility\",\n on: {\n RESUME: {\n guard: not(\"isLoadingType\"),\n target: \"active\",\n actions: [\"setCreatedAt\"],\n },\n DISMISS: \"dismissing\",\n },\n },\n\n active: {\n tags: [\"visible\"],\n activities: \"trackDocumentVisibility\",\n after: {\n VISIBLE_DURATION: \"dismissing\",\n },\n on: {\n DISMISS: \"dismissing\",\n PAUSE: {\n target: \"persist\",\n actions: \"setRemainingDuration\",\n },\n },\n },\n\n dismissing: {\n entry: \"invokeOnClosing\",\n after: {\n REMOVE_DELAY: {\n target: \"inactive\",\n actions: \"notifyParentToRemove\",\n },\n },\n },\n\n inactive: {\n entry: \"invokeOnClose\",\n type: \"final\",\n },\n },\n },\n {\n activities: {\n trackDocumentVisibility(ctx, _evt, { send }) {\n if (!ctx.pauseOnPageIdle) return\n const doc = dom.getDoc(ctx)\n return addDomEvent(doc, \"visibilitychange\", () => {\n send(doc.visibilityState === \"hidden\" ? \"PAUSE\" : \"RESUME\")\n })\n },\n },\n\n guards: {\n isChangingToLoading: (_, evt) => evt.toast?.type === \"loading\",\n isLoadingType: (ctx) => ctx.type === \"loading\",\n hasTypeChanged: (ctx, evt) => evt.toast?.type !== ctx.type,\n hasDurationChanged: (ctx, evt) => evt.toast?.duration !== ctx.duration,\n },\n\n delays: {\n VISIBLE_DURATION: (ctx) => ctx.remaining,\n REMOVE_DELAY: (ctx) => ctx.removeDelay,\n },\n\n actions: {\n setRemainingDuration(ctx) {\n ctx.remaining -= Date.now() - ctx.createdAt\n },\n setCreatedAt(ctx) {\n ctx.createdAt = Date.now()\n },\n notifyParentToRemove(_ctx, _evt, { self }) {\n self.sendParent({ type: \"REMOVE_TOAST\", id: self.id })\n },\n invokeOnClosing(ctx) {\n ctx.onClosing?.()\n },\n invokeOnClose(ctx) {\n ctx.onClose?.()\n },\n invokeOnOpen(ctx) {\n ctx.onOpen?.()\n },\n invokeOnUpdate(ctx) {\n ctx.onUpdate?.()\n },\n setContext(ctx, evt) {\n const { duration, type } = evt.toast\n const time = getToastDuration(duration, type)\n Object.assign(ctx, { ...evt.toast, duration: time, remaining: time })\n },\n },\n },\n )\n}\n","import { dataAttr } from \"@zag-js/dom-query\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./toast.anatomy\"\nimport { dom } from \"./toast.dom\"\nimport type { PublicApi, Send, State } from \"./toast.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): PublicApi<T> {\n const isVisible = state.hasTag(\"visible\")\n const isPaused = state.hasTag(\"paused\")\n\n const pauseOnInteraction = state.context.pauseOnInteraction\n const placement = state.context.placement\n\n return {\n type: state.context.type,\n title: state.context.title,\n description: state.context.description,\n placement,\n isVisible,\n isPaused,\n isRtl: state.context.dir === \"rtl\",\n\n pause() {\n send(\"PAUSE\")\n },\n\n resume() {\n send(\"RESUME\")\n },\n\n dismiss() {\n send(\"DISMISS\")\n },\n\n render() {\n return state.context.render?.({\n id: state.context.id,\n type: state.context.type,\n duration: state.context.duration,\n title: state.context.title,\n placement: state.context.placement,\n description: state.context.description,\n dismiss() {\n send(\"DISMISS\")\n },\n })\n },\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n dir: state.context.dir,\n id: dom.getRootId(state.context),\n \"data-open\": dataAttr(isVisible),\n \"data-type\": state.context.type,\n \"data-placement\": placement,\n role: \"status\",\n \"aria-atomic\": \"true\",\n tabIndex: 0,\n style: {\n position: \"relative\",\n pointerEvents: \"auto\",\n margin: \"calc(var(--toast-gutter) / 2)\",\n \"--remove-delay\": `${state.context.removeDelay}ms`,\n \"--duration\": `${state.context.duration}ms`,\n },\n onKeyDown(event) {\n if (event.key == \"Escape\") {\n send(\"DISMISS\")\n event.preventDefault()\n }\n },\n onFocus() {\n if (pauseOnInteraction) {\n send(\"PAUSE\")\n }\n },\n onBlur() {\n if (pauseOnInteraction) {\n send(\"RESUME\")\n }\n },\n onPointerEnter() {\n if (pauseOnInteraction) {\n send(\"PAUSE\")\n }\n },\n onPointerLeave() {\n if (pauseOnInteraction) {\n send(\"RESUME\")\n }\n },\n }),\n\n titleProps: normalize.element({\n ...parts.title.attrs,\n id: dom.getTitleId(state.context),\n }),\n\n descriptionProps: normalize.element({\n ...parts.description.attrs,\n id: dom.getDescriptionId(state.context),\n }),\n\n closeTriggerProps: normalize.button({\n id: dom.getCloseTriggerId(state.context),\n ...parts.closeTrigger.attrs,\n type: \"button\",\n \"aria-label\": \"Dismiss notification\",\n onClick() {\n send(\"DISMISS\")\n },\n }),\n }\n}\n"],"mappings":"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","names":["offset","group","createMachine","compact","ctx","duration","type","compact","createMachine","ctx"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zag-js/toast",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.2",
|
|
4
4
|
"description": "Core logic for the toast widget implemented as a state machine",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"js",
|
|
@@ -27,12 +27,12 @@
|
|
|
27
27
|
"url": "https://github.com/chakra-ui/zag/issues"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@zag-js/anatomy": "0.11.
|
|
31
|
-
"@zag-js/core": "0.11.
|
|
32
|
-
"@zag-js/dom-query": "0.11.
|
|
33
|
-
"@zag-js/dom-event": "0.11.
|
|
34
|
-
"@zag-js/utils": "0.11.
|
|
35
|
-
"@zag-js/types": "0.11.
|
|
30
|
+
"@zag-js/anatomy": "0.11.2",
|
|
31
|
+
"@zag-js/core": "0.11.2",
|
|
32
|
+
"@zag-js/dom-query": "0.11.2",
|
|
33
|
+
"@zag-js/dom-event": "0.11.2",
|
|
34
|
+
"@zag-js/utils": "0.11.2",
|
|
35
|
+
"@zag-js/types": "0.11.2"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"clean-package": "2.2.0"
|
package/src/index.ts
CHANGED
package/src/toast.connect.ts
CHANGED
|
@@ -2,9 +2,9 @@ import { dataAttr } from "@zag-js/dom-query"
|
|
|
2
2
|
import type { NormalizeProps, PropTypes } from "@zag-js/types"
|
|
3
3
|
import { parts } from "./toast.anatomy"
|
|
4
4
|
import { dom } from "./toast.dom"
|
|
5
|
-
import type { Send, State } from "./toast.types"
|
|
5
|
+
import type { PublicApi, Send, State } from "./toast.types"
|
|
6
6
|
|
|
7
|
-
export function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>) {
|
|
7
|
+
export function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): PublicApi<T> {
|
|
8
8
|
const isVisible = state.hasTag("visible")
|
|
9
9
|
const isPaused = state.hasTag("paused")
|
|
10
10
|
|
|
@@ -12,55 +12,26 @@ export function connect<T extends PropTypes>(state: State, send: Send, normalize
|
|
|
12
12
|
const placement = state.context.placement
|
|
13
13
|
|
|
14
14
|
return {
|
|
15
|
-
/**
|
|
16
|
-
* The type of the toast.
|
|
17
|
-
*/
|
|
18
15
|
type: state.context.type,
|
|
19
|
-
/**
|
|
20
|
-
* The title of the toast.
|
|
21
|
-
*/
|
|
22
16
|
title: state.context.title,
|
|
23
|
-
/**
|
|
24
|
-
* The description of the toast.
|
|
25
|
-
*/
|
|
26
17
|
description: state.context.description,
|
|
27
|
-
/**
|
|
28
|
-
* The current placement of the toast.
|
|
29
|
-
*/
|
|
30
18
|
placement,
|
|
31
|
-
/**
|
|
32
|
-
* Whether the toast is visible.
|
|
33
|
-
*/
|
|
34
19
|
isVisible,
|
|
35
|
-
/**
|
|
36
|
-
* Whether the toast is paused.
|
|
37
|
-
*/
|
|
38
20
|
isPaused,
|
|
39
|
-
/**
|
|
40
|
-
* Whether the toast is in RTL mode.
|
|
41
|
-
*/
|
|
42
21
|
isRtl: state.context.dir === "rtl",
|
|
43
|
-
|
|
44
|
-
* Function to pause the toast (keeping it visible).
|
|
45
|
-
*/
|
|
22
|
+
|
|
46
23
|
pause() {
|
|
47
24
|
send("PAUSE")
|
|
48
25
|
},
|
|
49
|
-
|
|
50
|
-
* Function to resume the toast dismissing.
|
|
51
|
-
*/
|
|
26
|
+
|
|
52
27
|
resume() {
|
|
53
28
|
send("RESUME")
|
|
54
29
|
},
|
|
55
|
-
|
|
56
|
-
* Function to instantly dismiss the toast.
|
|
57
|
-
*/
|
|
30
|
+
|
|
58
31
|
dismiss() {
|
|
59
32
|
send("DISMISS")
|
|
60
33
|
},
|
|
61
|
-
|
|
62
|
-
* Function render the toast in the DOM (based on the defined `render` property)
|
|
63
|
-
*/
|
|
34
|
+
|
|
64
35
|
render() {
|
|
65
36
|
return state.context.render?.({
|
|
66
37
|
id: state.context.id,
|
package/src/toast.types.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import type { Machine, StateMachine as S } from "@zag-js/core"
|
|
2
|
-
import type {
|
|
2
|
+
import type {
|
|
3
|
+
CommonProperties,
|
|
4
|
+
Context,
|
|
5
|
+
Direction,
|
|
6
|
+
DirectionProperty,
|
|
7
|
+
PropTypes,
|
|
8
|
+
RequiredBy,
|
|
9
|
+
RootProperties,
|
|
10
|
+
} from "@zag-js/types"
|
|
3
11
|
|
|
4
12
|
export type Type = "success" | "error" | "loading" | "info" | "custom"
|
|
5
13
|
|
|
@@ -129,6 +137,57 @@ type GroupPublicContext = SharedContext &
|
|
|
129
137
|
offsets: string | Record<"left" | "right" | "bottom" | "top", string>
|
|
130
138
|
}
|
|
131
139
|
|
|
140
|
+
export type PublicApi<T extends PropTypes = PropTypes> = {
|
|
141
|
+
/**
|
|
142
|
+
* The type of the toast.
|
|
143
|
+
*/
|
|
144
|
+
type: Type
|
|
145
|
+
/**
|
|
146
|
+
* The title of the toast.
|
|
147
|
+
*/
|
|
148
|
+
title: string | undefined
|
|
149
|
+
/**
|
|
150
|
+
* The description of the toast.
|
|
151
|
+
*/
|
|
152
|
+
description: string | undefined
|
|
153
|
+
/**
|
|
154
|
+
* The current placement of the toast.
|
|
155
|
+
*/
|
|
156
|
+
placement: Placement
|
|
157
|
+
/**
|
|
158
|
+
* Whether the toast is visible.
|
|
159
|
+
*/
|
|
160
|
+
isVisible: boolean
|
|
161
|
+
/**
|
|
162
|
+
* Whether the toast is paused.
|
|
163
|
+
*/
|
|
164
|
+
isPaused: boolean
|
|
165
|
+
/**
|
|
166
|
+
* Whether the toast is in RTL mode.
|
|
167
|
+
*/
|
|
168
|
+
isRtl: boolean
|
|
169
|
+
/**
|
|
170
|
+
* Function to pause the toast (keeping it visible).
|
|
171
|
+
*/
|
|
172
|
+
pause(): void
|
|
173
|
+
/**
|
|
174
|
+
* Function to resume the toast dismissing.
|
|
175
|
+
*/
|
|
176
|
+
resume(): void
|
|
177
|
+
/**
|
|
178
|
+
* Function to instantly dismiss the toast.
|
|
179
|
+
*/
|
|
180
|
+
dismiss(): void
|
|
181
|
+
/**
|
|
182
|
+
* Function render the toast in the DOM (based on the defined `render` property)
|
|
183
|
+
*/
|
|
184
|
+
render(): any
|
|
185
|
+
rootProps: T["element"]
|
|
186
|
+
titleProps: T["element"]
|
|
187
|
+
descriptionProps: T["element"]
|
|
188
|
+
closeTriggerProps: T["button"]
|
|
189
|
+
}
|
|
190
|
+
|
|
132
191
|
export type UserDefinedGroupContext = RequiredBy<GroupPublicContext, "id">
|
|
133
192
|
|
|
134
193
|
type GroupComputedContext = Readonly<{
|