@zag-js/toast 0.19.1 → 0.21.0
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 +35 -33
- package/dist/index.d.ts +35 -33
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -7
- package/src/toast-group.connect.ts +1 -1
- package/src/toast.types.ts +73 -66
package/dist/index.d.mts
CHANGED
|
@@ -1,25 +1,12 @@
|
|
|
1
1
|
import * as _zag_js_core from '@zag-js/core';
|
|
2
2
|
import { Machine, StateMachine } from '@zag-js/core';
|
|
3
|
+
import * as _zag_js_types from '@zag-js/types';
|
|
3
4
|
import { RootProperties, CommonProperties, Direction, PropTypes, DirectionProperty, Context, RequiredBy, NormalizeProps } from '@zag-js/types';
|
|
4
5
|
import * as _zag_js_anatomy from '@zag-js/anatomy';
|
|
5
6
|
|
|
6
7
|
type Type = "success" | "error" | "loading" | "info" | "custom";
|
|
7
8
|
type Placement = "top-start" | "top" | "top-end" | "bottom-start" | "bottom" | "bottom-end";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Whether to pause toast when the user leaves the browser tab
|
|
11
|
-
*/
|
|
12
|
-
pauseOnPageIdle?: boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Whether to pause the toast when interacted with
|
|
15
|
-
*/
|
|
16
|
-
pauseOnInteraction?: boolean;
|
|
17
|
-
/**
|
|
18
|
-
* The default options for the toast
|
|
19
|
-
*/
|
|
20
|
-
defaultOptions?: Partial<Pick<ToastOptions, "duration" | "removeDelay" | "placement">>;
|
|
21
|
-
};
|
|
22
|
-
type ToastOptions = {
|
|
9
|
+
interface ToastOptions {
|
|
23
10
|
/**
|
|
24
11
|
* The unique id of the toast
|
|
25
12
|
*/
|
|
@@ -69,12 +56,26 @@ type ToastOptions = {
|
|
|
69
56
|
* Function called when the toast is updated
|
|
70
57
|
*/
|
|
71
58
|
onUpdate?: VoidFunction;
|
|
72
|
-
}
|
|
59
|
+
}
|
|
73
60
|
type Options = Partial<ToastOptions>;
|
|
74
61
|
type RenderOptions = Omit<ToastOptions, "render"> & {
|
|
75
62
|
dismiss(): void;
|
|
76
63
|
};
|
|
77
|
-
|
|
64
|
+
interface SharedContext {
|
|
65
|
+
/**
|
|
66
|
+
* Whether to pause toast when the user leaves the browser tab
|
|
67
|
+
*/
|
|
68
|
+
pauseOnPageIdle?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Whether to pause the toast when interacted with
|
|
71
|
+
*/
|
|
72
|
+
pauseOnInteraction?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* The default options for the toast
|
|
75
|
+
*/
|
|
76
|
+
defaultOptions?: Partial<Pick<ToastOptions, "duration" | "removeDelay" | "placement">>;
|
|
77
|
+
}
|
|
78
|
+
interface MachineContext extends SharedContext, RootProperties, CommonProperties, Omit<ToastOptions, "removeDelay"> {
|
|
78
79
|
/**
|
|
79
80
|
* The duration for the toast to kept alive before it is removed.
|
|
80
81
|
* Useful for exit transitions.
|
|
@@ -92,15 +93,15 @@ type MachineContext = SharedContext & RootProperties & CommonProperties & Omit<T
|
|
|
92
93
|
* The time left before the toast is removed
|
|
93
94
|
*/
|
|
94
95
|
remaining: number;
|
|
95
|
-
}
|
|
96
|
-
|
|
96
|
+
}
|
|
97
|
+
interface MachineState {
|
|
97
98
|
value: "active" | "active:temp" | "dismissing" | "inactive" | "persist";
|
|
98
99
|
tags: "visible" | "paused" | "updating";
|
|
99
|
-
}
|
|
100
|
+
}
|
|
100
101
|
type State = StateMachine.State<MachineContext, MachineState>;
|
|
101
102
|
type Send = StateMachine.Send;
|
|
102
103
|
type Service = Machine<MachineContext, MachineState>;
|
|
103
|
-
|
|
104
|
+
interface GroupPublicContext extends SharedContext, DirectionProperty, CommonProperties {
|
|
104
105
|
/**
|
|
105
106
|
* The gutter or spacing between toasts
|
|
106
107
|
*/
|
|
@@ -117,7 +118,7 @@ type GroupPublicContext = SharedContext & DirectionProperty & CommonProperties &
|
|
|
117
118
|
* The offset from the safe environment edge of the viewport
|
|
118
119
|
*/
|
|
119
120
|
offsets: string | Record<"left" | "right" | "bottom" | "top", string>;
|
|
120
|
-
}
|
|
121
|
+
}
|
|
121
122
|
type UserDefinedGroupContext = RequiredBy<GroupPublicContext, "id">;
|
|
122
123
|
type GroupComputedContext = Readonly<{
|
|
123
124
|
/**
|
|
@@ -127,20 +128,21 @@ type GroupComputedContext = Readonly<{
|
|
|
127
128
|
count: number;
|
|
128
129
|
}>;
|
|
129
130
|
type GroupPrivateContext = Context<{}>;
|
|
130
|
-
|
|
131
|
+
interface GroupMachineContext extends GroupPublicContext, GroupComputedContext, GroupPrivateContext {
|
|
132
|
+
}
|
|
131
133
|
type GroupState = StateMachine.State<GroupMachineContext>;
|
|
132
|
-
type GroupSend =
|
|
134
|
+
type GroupSend = StateMachine.Send;
|
|
133
135
|
type MaybeFunction<Value, Args> = Value | ((arg: Args) => Value);
|
|
134
|
-
|
|
136
|
+
interface PromiseOptions<Value> {
|
|
135
137
|
loading: ToastOptions;
|
|
136
138
|
success: MaybeFunction<ToastOptions, Value>;
|
|
137
139
|
error: MaybeFunction<ToastOptions, Error>;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
+
}
|
|
141
|
+
interface GroupProps {
|
|
140
142
|
placement: Placement;
|
|
141
143
|
label?: string;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
+
}
|
|
145
|
+
interface GroupMachineApi<T extends PropTypes = PropTypes> {
|
|
144
146
|
/**
|
|
145
147
|
* The total number of toasts
|
|
146
148
|
*/
|
|
@@ -214,8 +216,8 @@ type GroupMachineApi<T extends PropTypes = PropTypes> = {
|
|
|
214
216
|
*/
|
|
215
217
|
subscribe(callback: (toasts: Service[]) => void): VoidFunction;
|
|
216
218
|
getGroupProps(options: GroupProps): T["element"];
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
+
}
|
|
220
|
+
interface MachineApi<T extends PropTypes = PropTypes> {
|
|
219
221
|
/**
|
|
220
222
|
* The type of the toast.
|
|
221
223
|
*/
|
|
@@ -264,7 +266,7 @@ type MachineApi<T extends PropTypes = PropTypes> = {
|
|
|
264
266
|
titleProps: T["element"];
|
|
265
267
|
descriptionProps: T["element"];
|
|
266
268
|
closeTriggerProps: T["button"];
|
|
267
|
-
}
|
|
269
|
+
}
|
|
268
270
|
|
|
269
271
|
declare function groupConnect<T extends PropTypes>(state: GroupState, send: GroupSend, normalize: NormalizeProps<T>): GroupMachineApi<T>;
|
|
270
272
|
|
|
@@ -280,6 +282,6 @@ declare const group: {
|
|
|
280
282
|
connect: typeof groupConnect;
|
|
281
283
|
machine: typeof groupMachine;
|
|
282
284
|
};
|
|
283
|
-
declare function api(): GroupMachineApi | undefined;
|
|
285
|
+
declare function api(): GroupMachineApi<_zag_js_types.PropTypes> | undefined;
|
|
284
286
|
|
|
285
287
|
export { MachineApi as Api, GroupMachineApi as GroupApi, GroupMachineContext, MachineContext, MachineState, Placement, Service, ToastOptions, Type, anatomy, api, connect, createToastMachine as createMachine, group };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,25 +1,12 @@
|
|
|
1
1
|
import * as _zag_js_core from '@zag-js/core';
|
|
2
2
|
import { Machine, StateMachine } from '@zag-js/core';
|
|
3
|
+
import * as _zag_js_types from '@zag-js/types';
|
|
3
4
|
import { RootProperties, CommonProperties, Direction, PropTypes, DirectionProperty, Context, RequiredBy, NormalizeProps } from '@zag-js/types';
|
|
4
5
|
import * as _zag_js_anatomy from '@zag-js/anatomy';
|
|
5
6
|
|
|
6
7
|
type Type = "success" | "error" | "loading" | "info" | "custom";
|
|
7
8
|
type Placement = "top-start" | "top" | "top-end" | "bottom-start" | "bottom" | "bottom-end";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Whether to pause toast when the user leaves the browser tab
|
|
11
|
-
*/
|
|
12
|
-
pauseOnPageIdle?: boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Whether to pause the toast when interacted with
|
|
15
|
-
*/
|
|
16
|
-
pauseOnInteraction?: boolean;
|
|
17
|
-
/**
|
|
18
|
-
* The default options for the toast
|
|
19
|
-
*/
|
|
20
|
-
defaultOptions?: Partial<Pick<ToastOptions, "duration" | "removeDelay" | "placement">>;
|
|
21
|
-
};
|
|
22
|
-
type ToastOptions = {
|
|
9
|
+
interface ToastOptions {
|
|
23
10
|
/**
|
|
24
11
|
* The unique id of the toast
|
|
25
12
|
*/
|
|
@@ -69,12 +56,26 @@ type ToastOptions = {
|
|
|
69
56
|
* Function called when the toast is updated
|
|
70
57
|
*/
|
|
71
58
|
onUpdate?: VoidFunction;
|
|
72
|
-
}
|
|
59
|
+
}
|
|
73
60
|
type Options = Partial<ToastOptions>;
|
|
74
61
|
type RenderOptions = Omit<ToastOptions, "render"> & {
|
|
75
62
|
dismiss(): void;
|
|
76
63
|
};
|
|
77
|
-
|
|
64
|
+
interface SharedContext {
|
|
65
|
+
/**
|
|
66
|
+
* Whether to pause toast when the user leaves the browser tab
|
|
67
|
+
*/
|
|
68
|
+
pauseOnPageIdle?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Whether to pause the toast when interacted with
|
|
71
|
+
*/
|
|
72
|
+
pauseOnInteraction?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* The default options for the toast
|
|
75
|
+
*/
|
|
76
|
+
defaultOptions?: Partial<Pick<ToastOptions, "duration" | "removeDelay" | "placement">>;
|
|
77
|
+
}
|
|
78
|
+
interface MachineContext extends SharedContext, RootProperties, CommonProperties, Omit<ToastOptions, "removeDelay"> {
|
|
78
79
|
/**
|
|
79
80
|
* The duration for the toast to kept alive before it is removed.
|
|
80
81
|
* Useful for exit transitions.
|
|
@@ -92,15 +93,15 @@ type MachineContext = SharedContext & RootProperties & CommonProperties & Omit<T
|
|
|
92
93
|
* The time left before the toast is removed
|
|
93
94
|
*/
|
|
94
95
|
remaining: number;
|
|
95
|
-
}
|
|
96
|
-
|
|
96
|
+
}
|
|
97
|
+
interface MachineState {
|
|
97
98
|
value: "active" | "active:temp" | "dismissing" | "inactive" | "persist";
|
|
98
99
|
tags: "visible" | "paused" | "updating";
|
|
99
|
-
}
|
|
100
|
+
}
|
|
100
101
|
type State = StateMachine.State<MachineContext, MachineState>;
|
|
101
102
|
type Send = StateMachine.Send;
|
|
102
103
|
type Service = Machine<MachineContext, MachineState>;
|
|
103
|
-
|
|
104
|
+
interface GroupPublicContext extends SharedContext, DirectionProperty, CommonProperties {
|
|
104
105
|
/**
|
|
105
106
|
* The gutter or spacing between toasts
|
|
106
107
|
*/
|
|
@@ -117,7 +118,7 @@ type GroupPublicContext = SharedContext & DirectionProperty & CommonProperties &
|
|
|
117
118
|
* The offset from the safe environment edge of the viewport
|
|
118
119
|
*/
|
|
119
120
|
offsets: string | Record<"left" | "right" | "bottom" | "top", string>;
|
|
120
|
-
}
|
|
121
|
+
}
|
|
121
122
|
type UserDefinedGroupContext = RequiredBy<GroupPublicContext, "id">;
|
|
122
123
|
type GroupComputedContext = Readonly<{
|
|
123
124
|
/**
|
|
@@ -127,20 +128,21 @@ type GroupComputedContext = Readonly<{
|
|
|
127
128
|
count: number;
|
|
128
129
|
}>;
|
|
129
130
|
type GroupPrivateContext = Context<{}>;
|
|
130
|
-
|
|
131
|
+
interface GroupMachineContext extends GroupPublicContext, GroupComputedContext, GroupPrivateContext {
|
|
132
|
+
}
|
|
131
133
|
type GroupState = StateMachine.State<GroupMachineContext>;
|
|
132
|
-
type GroupSend =
|
|
134
|
+
type GroupSend = StateMachine.Send;
|
|
133
135
|
type MaybeFunction<Value, Args> = Value | ((arg: Args) => Value);
|
|
134
|
-
|
|
136
|
+
interface PromiseOptions<Value> {
|
|
135
137
|
loading: ToastOptions;
|
|
136
138
|
success: MaybeFunction<ToastOptions, Value>;
|
|
137
139
|
error: MaybeFunction<ToastOptions, Error>;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
+
}
|
|
141
|
+
interface GroupProps {
|
|
140
142
|
placement: Placement;
|
|
141
143
|
label?: string;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
+
}
|
|
145
|
+
interface GroupMachineApi<T extends PropTypes = PropTypes> {
|
|
144
146
|
/**
|
|
145
147
|
* The total number of toasts
|
|
146
148
|
*/
|
|
@@ -214,8 +216,8 @@ type GroupMachineApi<T extends PropTypes = PropTypes> = {
|
|
|
214
216
|
*/
|
|
215
217
|
subscribe(callback: (toasts: Service[]) => void): VoidFunction;
|
|
216
218
|
getGroupProps(options: GroupProps): T["element"];
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
+
}
|
|
220
|
+
interface MachineApi<T extends PropTypes = PropTypes> {
|
|
219
221
|
/**
|
|
220
222
|
* The type of the toast.
|
|
221
223
|
*/
|
|
@@ -264,7 +266,7 @@ type MachineApi<T extends PropTypes = PropTypes> = {
|
|
|
264
266
|
titleProps: T["element"];
|
|
265
267
|
descriptionProps: T["element"];
|
|
266
268
|
closeTriggerProps: T["button"];
|
|
267
|
-
}
|
|
269
|
+
}
|
|
268
270
|
|
|
269
271
|
declare function groupConnect<T extends PropTypes>(state: GroupState, send: GroupSend, normalize: NormalizeProps<T>): GroupMachineApi<T>;
|
|
270
272
|
|
|
@@ -280,6 +282,6 @@ declare const group: {
|
|
|
280
282
|
connect: typeof groupConnect;
|
|
281
283
|
machine: typeof groupMachine;
|
|
282
284
|
};
|
|
283
|
-
declare function api(): GroupMachineApi | undefined;
|
|
285
|
+
declare function api(): GroupMachineApi<_zag_js_types.PropTypes> | undefined;
|
|
284
286
|
|
|
285
287
|
export { MachineApi as Api, GroupMachineApi as GroupApi, GroupMachineContext, MachineContext, MachineState, Placement, Service, ToastOptions, Type, anatomy, api, connect, createToastMachine as createMachine, group };
|
package/dist/index.js
CHANGED
|
@@ -207,7 +207,7 @@ function groupConnect(state, send, normalize) {
|
|
|
207
207
|
return normalize.element({
|
|
208
208
|
...parts.group.attrs,
|
|
209
209
|
tabIndex: -1,
|
|
210
|
-
"aria-label": label
|
|
210
|
+
"aria-label": `${placement} ${label}`,
|
|
211
211
|
id: dom.getGroupId(placement),
|
|
212
212
|
"data-placement": placement,
|
|
213
213
|
"aria-live": "polite",
|
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 MachineApi as Api,\n GroupMachineApi as GroupApi,\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 GroupMachineApi,\n GroupMachineContext,\n GroupProps,\n GroupSend,\n GroupState,\n Options,\n Placement,\n PromiseOptions,\n} from \"./toast.types\"\nimport { getGroupPlacementStyle, getToastsByPlacement } from \"./toast.utils\"\n\nexport let toaster = {} as GroupMachineApi\n\nexport function groupConnect<T extends PropTypes>(\n state: GroupState,\n send: GroupSend,\n normalize: NormalizeProps<T>,\n): GroupMachineApi<T> {\n //\n const group = {\n count: state.context.count,\n toasts: state.context.toasts,\n toastsByPlacement: getToastsByPlacement(state.context.toasts),\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 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 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 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 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 dismissByPlacement(placement: Placement) {\n const toasts = group.toastsByPlacement[placement]\n if (toasts) {\n toasts.forEach((toast) => group.dismiss(toast.id))\n }\n },\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 loading(options: Options) {\n options.type = \"loading\"\n return group.upsert(options)\n },\n\n success(options: Options) {\n options.type = \"success\"\n return group.upsert(options)\n },\n\n error(options: Options) {\n options.type = \"error\"\n return group.upsert(options)\n },\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 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 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 ...ctx.defaultOptions,\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 type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./toast.anatomy\"\nimport { dom } from \"./toast.dom\"\nimport type { MachineApi, Send, State } from \"./toast.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<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-state\": isVisible ? \"open\" : \"closed\",\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"]}
|
|
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 MachineApi as Api,\n GroupMachineApi as GroupApi,\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 GroupMachineApi,\n GroupMachineContext,\n GroupProps,\n GroupSend,\n GroupState,\n Options,\n Placement,\n PromiseOptions,\n} from \"./toast.types\"\nimport { getGroupPlacementStyle, getToastsByPlacement } from \"./toast.utils\"\n\nexport let toaster = {} as GroupMachineApi\n\nexport function groupConnect<T extends PropTypes>(\n state: GroupState,\n send: GroupSend,\n normalize: NormalizeProps<T>,\n): GroupMachineApi<T> {\n //\n const group = {\n count: state.context.count,\n toasts: state.context.toasts,\n toastsByPlacement: getToastsByPlacement(state.context.toasts),\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 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 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 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 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 dismissByPlacement(placement: Placement) {\n const toasts = group.toastsByPlacement[placement]\n if (toasts) {\n toasts.forEach((toast) => group.dismiss(toast.id))\n }\n },\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 loading(options: Options) {\n options.type = \"loading\"\n return group.upsert(options)\n },\n\n success(options: Options) {\n options.type = \"success\"\n return group.upsert(options)\n },\n\n error(options: Options) {\n options.type = \"error\"\n return group.upsert(options)\n },\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 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 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\": `${placement} ${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 ...ctx.defaultOptions,\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 type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./toast.anatomy\"\nimport { dom } from \"./toast.dom\"\nimport type { MachineApi, Send, State } from \"./toast.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<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-state\": isVisible ? \"open\" : \"closed\",\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"]}
|
package/dist/index.mjs
CHANGED
|
@@ -179,7 +179,7 @@ function groupConnect(state, send, normalize) {
|
|
|
179
179
|
return normalize.element({
|
|
180
180
|
...parts.group.attrs,
|
|
181
181
|
tabIndex: -1,
|
|
182
|
-
"aria-label": label
|
|
182
|
+
"aria-label": `${placement} ${label}`,
|
|
183
183
|
id: dom.getGroupId(placement),
|
|
184
184
|
"data-placement": placement,
|
|
185
185
|
"aria-live": "polite",
|
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 MachineApi as Api,\n GroupMachineApi as GroupApi,\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 GroupMachineApi,\n GroupMachineContext,\n GroupProps,\n GroupSend,\n GroupState,\n Options,\n Placement,\n PromiseOptions,\n} from \"./toast.types\"\nimport { getGroupPlacementStyle, getToastsByPlacement } from \"./toast.utils\"\n\nexport let toaster = {} as GroupMachineApi\n\nexport function groupConnect<T extends PropTypes>(\n state: GroupState,\n send: GroupSend,\n normalize: NormalizeProps<T>,\n): GroupMachineApi<T> {\n //\n const group = {\n count: state.context.count,\n toasts: state.context.toasts,\n toastsByPlacement: getToastsByPlacement(state.context.toasts),\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 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 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 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 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 dismissByPlacement(placement: Placement) {\n const toasts = group.toastsByPlacement[placement]\n if (toasts) {\n toasts.forEach((toast) => group.dismiss(toast.id))\n }\n },\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 loading(options: Options) {\n options.type = \"loading\"\n return group.upsert(options)\n },\n\n success(options: Options) {\n options.type = \"success\"\n return group.upsert(options)\n },\n\n error(options: Options) {\n options.type = \"error\"\n return group.upsert(options)\n },\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 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 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 ...ctx.defaultOptions,\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 type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./toast.anatomy\"\nimport { dom } from \"./toast.dom\"\nimport type { MachineApi, Send, State } from \"./toast.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<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-state\": isVisible ? \"open\" : \"closed\",\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 MachineApi as Api,\n GroupMachineApi as GroupApi,\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 GroupMachineApi,\n GroupMachineContext,\n GroupProps,\n GroupSend,\n GroupState,\n Options,\n Placement,\n PromiseOptions,\n} from \"./toast.types\"\nimport { getGroupPlacementStyle, getToastsByPlacement } from \"./toast.utils\"\n\nexport let toaster = {} as GroupMachineApi\n\nexport function groupConnect<T extends PropTypes>(\n state: GroupState,\n send: GroupSend,\n normalize: NormalizeProps<T>,\n): GroupMachineApi<T> {\n //\n const group = {\n count: state.context.count,\n toasts: state.context.toasts,\n toastsByPlacement: getToastsByPlacement(state.context.toasts),\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 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 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 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 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 dismissByPlacement(placement: Placement) {\n const toasts = group.toastsByPlacement[placement]\n if (toasts) {\n toasts.forEach((toast) => group.dismiss(toast.id))\n }\n },\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 loading(options: Options) {\n options.type = \"loading\"\n return group.upsert(options)\n },\n\n success(options: Options) {\n options.type = \"success\"\n return group.upsert(options)\n },\n\n error(options: Options) {\n options.type = \"error\"\n return group.upsert(options)\n },\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 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 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\": `${placement} ${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 ...ctx.defaultOptions,\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 type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./toast.anatomy\"\nimport { dom } from \"./toast.dom\"\nimport type { MachineApi, Send, State } from \"./toast.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): MachineApi<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-state\": isVisible ? \"open\" : \"closed\",\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.
|
|
3
|
+
"version": "0.21.0",
|
|
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.
|
|
31
|
-
"@zag-js/core": "0.
|
|
32
|
-
"@zag-js/dom-query": "0.
|
|
33
|
-
"@zag-js/dom-event": "0.
|
|
34
|
-
"@zag-js/utils": "0.
|
|
35
|
-
"@zag-js/types": "0.
|
|
30
|
+
"@zag-js/anatomy": "0.21.0",
|
|
31
|
+
"@zag-js/core": "0.21.0",
|
|
32
|
+
"@zag-js/dom-query": "0.21.0",
|
|
33
|
+
"@zag-js/dom-event": "0.21.0",
|
|
34
|
+
"@zag-js/utils": "0.21.0",
|
|
35
|
+
"@zag-js/types": "0.21.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"clean-package": "2.2.0"
|
|
@@ -133,7 +133,7 @@ export function groupConnect<T extends PropTypes>(
|
|
|
133
133
|
return normalize.element({
|
|
134
134
|
...parts.group.attrs,
|
|
135
135
|
tabIndex: -1,
|
|
136
|
-
"aria-label": label
|
|
136
|
+
"aria-label": `${placement} ${label}`,
|
|
137
137
|
id: dom.getGroupId(placement),
|
|
138
138
|
"data-placement": placement,
|
|
139
139
|
"aria-live": "polite",
|
package/src/toast.types.ts
CHANGED
|
@@ -13,23 +13,7 @@ export type Type = "success" | "error" | "loading" | "info" | "custom"
|
|
|
13
13
|
|
|
14
14
|
export type Placement = "top-start" | "top" | "top-end" | "bottom-start" | "bottom" | "bottom-end"
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Whether to pause toast when the user leaves the browser tab
|
|
19
|
-
*/
|
|
20
|
-
pauseOnPageIdle?: boolean
|
|
21
|
-
/**
|
|
22
|
-
* Whether to pause the toast when interacted with
|
|
23
|
-
*/
|
|
24
|
-
pauseOnInteraction?: boolean
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* The default options for the toast
|
|
28
|
-
*/
|
|
29
|
-
defaultOptions?: Partial<Pick<ToastOptions, "duration" | "removeDelay" | "placement">>
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export type ToastOptions = {
|
|
16
|
+
export interface ToastOptions {
|
|
33
17
|
/**
|
|
34
18
|
* The unique id of the toast
|
|
35
19
|
*/
|
|
@@ -87,30 +71,51 @@ export type RenderOptions = Omit<ToastOptions, "render"> & {
|
|
|
87
71
|
dismiss(): void
|
|
88
72
|
}
|
|
89
73
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
74
|
+
/* -----------------------------------------------------------------------------
|
|
75
|
+
* Machine context
|
|
76
|
+
* -----------------------------------------------------------------------------*/
|
|
77
|
+
|
|
78
|
+
interface SharedContext {
|
|
79
|
+
/**
|
|
80
|
+
* Whether to pause toast when the user leaves the browser tab
|
|
81
|
+
*/
|
|
82
|
+
pauseOnPageIdle?: boolean
|
|
83
|
+
/**
|
|
84
|
+
* Whether to pause the toast when interacted with
|
|
85
|
+
*/
|
|
86
|
+
pauseOnInteraction?: boolean
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* The default options for the toast
|
|
90
|
+
*/
|
|
91
|
+
defaultOptions?: Partial<Pick<ToastOptions, "duration" | "removeDelay" | "placement">>
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export interface MachineContext
|
|
95
|
+
extends SharedContext,
|
|
96
|
+
RootProperties,
|
|
97
|
+
CommonProperties,
|
|
98
|
+
Omit<ToastOptions, "removeDelay"> {
|
|
99
|
+
/**
|
|
100
|
+
* The duration for the toast to kept alive before it is removed.
|
|
101
|
+
* Useful for exit transitions.
|
|
102
|
+
*/
|
|
103
|
+
removeDelay: number
|
|
104
|
+
/**
|
|
105
|
+
* The document's text/writing direction.
|
|
106
|
+
*/
|
|
107
|
+
dir?: Direction
|
|
108
|
+
/**
|
|
109
|
+
* The time the toast was created
|
|
110
|
+
*/
|
|
111
|
+
createdAt: number
|
|
112
|
+
/**
|
|
113
|
+
* The time left before the toast is removed
|
|
114
|
+
*/
|
|
115
|
+
remaining: number
|
|
116
|
+
}
|
|
112
117
|
|
|
113
|
-
export
|
|
118
|
+
export interface MachineState {
|
|
114
119
|
value: "active" | "active:temp" | "dismissing" | "inactive" | "persist"
|
|
115
120
|
tags: "visible" | "paused" | "updating"
|
|
116
121
|
}
|
|
@@ -121,26 +126,24 @@ export type Send = S.Send
|
|
|
121
126
|
|
|
122
127
|
export type Service = Machine<MachineContext, MachineState>
|
|
123
128
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
offsets: string | Record<"left" | "right" | "bottom" | "top", string>
|
|
143
|
-
}
|
|
129
|
+
interface GroupPublicContext extends SharedContext, DirectionProperty, CommonProperties {
|
|
130
|
+
/**
|
|
131
|
+
* The gutter or spacing between toasts
|
|
132
|
+
*/
|
|
133
|
+
gutter: string
|
|
134
|
+
/**
|
|
135
|
+
* The z-index applied to each toast group
|
|
136
|
+
*/
|
|
137
|
+
zIndex: number
|
|
138
|
+
/**
|
|
139
|
+
* The maximum number of toasts that can be shown at once
|
|
140
|
+
*/
|
|
141
|
+
max: number
|
|
142
|
+
/**
|
|
143
|
+
* The offset from the safe environment edge of the viewport
|
|
144
|
+
*/
|
|
145
|
+
offsets: string | Record<"left" | "right" | "bottom" | "top", string>
|
|
146
|
+
}
|
|
144
147
|
|
|
145
148
|
export type UserDefinedGroupContext = RequiredBy<GroupPublicContext, "id">
|
|
146
149
|
|
|
@@ -160,26 +163,30 @@ type GroupPrivateContext = Context<{
|
|
|
160
163
|
toasts: Service[]
|
|
161
164
|
}>
|
|
162
165
|
|
|
163
|
-
export
|
|
166
|
+
export interface GroupMachineContext extends GroupPublicContext, GroupComputedContext, GroupPrivateContext {}
|
|
164
167
|
|
|
165
168
|
export type GroupState = S.State<GroupMachineContext>
|
|
166
169
|
|
|
167
|
-
export type GroupSend =
|
|
170
|
+
export type GroupSend = S.Send
|
|
171
|
+
|
|
172
|
+
/* -----------------------------------------------------------------------------
|
|
173
|
+
* Component API
|
|
174
|
+
* -----------------------------------------------------------------------------*/
|
|
168
175
|
|
|
169
176
|
type MaybeFunction<Value, Args> = Value | ((arg: Args) => Value)
|
|
170
177
|
|
|
171
|
-
export
|
|
178
|
+
export interface PromiseOptions<Value> {
|
|
172
179
|
loading: ToastOptions
|
|
173
180
|
success: MaybeFunction<ToastOptions, Value>
|
|
174
181
|
error: MaybeFunction<ToastOptions, Error>
|
|
175
182
|
}
|
|
176
183
|
|
|
177
|
-
export
|
|
184
|
+
export interface GroupProps {
|
|
178
185
|
placement: Placement
|
|
179
186
|
label?: string
|
|
180
187
|
}
|
|
181
188
|
|
|
182
|
-
export
|
|
189
|
+
export interface GroupMachineApi<T extends PropTypes = PropTypes> {
|
|
183
190
|
/**
|
|
184
191
|
* The total number of toasts
|
|
185
192
|
*/
|
|
@@ -255,7 +262,7 @@ export type GroupMachineApi<T extends PropTypes = PropTypes> = {
|
|
|
255
262
|
getGroupProps(options: GroupProps): T["element"]
|
|
256
263
|
}
|
|
257
264
|
|
|
258
|
-
export
|
|
265
|
+
export interface MachineApi<T extends PropTypes = PropTypes> {
|
|
259
266
|
/**
|
|
260
267
|
* The type of the toast.
|
|
261
268
|
*/
|