@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 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, PropTypes, NormalizeProps } from '@zag-js/types';
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, PropTypes, NormalizeProps } from '@zag-js/types';
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,
@@ -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":";AAAA,SAAS,aAAa;AACtB,SAAS,YAAY;;;ACDrB,SAAS,iBAAiB;AAE1B,SAAS,SAAS,YAAY;;;ACF9B,SAAS,qBAAqB;AAEvB,IAAM,UAAU,cAAc,OAAO,EAAE,MAAM,SAAS,QAAQ,SAAS,eAAe,cAAc;AACpG,IAAM,QAAQ,QAAQ,MAAM;;;ACHnC,SAAS,mBAAmB;AAGrB,IAAM,MAAM,YAAY;AAAA,EAC7B,YAAY,CAAC,cAAyB,eAAe;AAAA,EACrD,WAAW,CAAC,QAAa,SAAS,IAAI;AAAA,EACtC,YAAY,CAAC,QAAa,SAAS,IAAI;AAAA,EACvC,kBAAkB,CAAC,QAAa,SAAS,IAAI;AAAA,EAC7C,mBAAmB,CAAC,QAAa,QAAQ,IAAI;AAAA,EAC7C,aAAa,CAAC,QAAkB,gBAAgB,IAAI;AACtD,CAAC;;;ACPM,SAAS,qBAAqB,QAAmB;AACtD,QAAM,SAAgD,CAAC;AAEvD,aAAW,SAAS,QAAQ;AAC1B,UAAM,YAAY,MAAM,MAAM,QAAQ;AACtC,8CAAsB,CAAC;AACvB,WAAO,SAAS,EAAG,KAAK,KAAK;AAAA,EAC/B;AAEA,SAAO;AACT;AAEO,IAAM,kBAAwC;AAAA,EACnD,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AACV;AAEO,SAAS,iBAAiB,UAA8B,MAA8B;AAC3F,SAAO,YAAY,gBAAgB,IAAI;AACzC;AAEO,SAAS,uBAAuB,KAA0B,WAA6B;AAC5F,QAAM,SAAS,IAAI;AACnB,QAAM,iBACJ,OAAO,WAAW,WAAW,EAAE,MAAM,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,KAAK,OAAO,IAAI;AAE9F,QAAM,MAAM,IAAI,QAAQ;AACxB,QAAM,oBAAoB,UACvB,QAAQ,UAAU,MAAM,WAAW,OAAO,EAC1C,QAAQ,QAAQ,MAAM,UAAU,QAAQ;AAE3C,QAAM,WAAW,kBAAkB,SAAS,OAAO;AACnD,QAAM,UAAU,kBAAkB,SAAS,MAAM;AAEjD,QAAM,SAAgB;AAAA,IACpB,UAAU;AAAA,IACV,eAAe,IAAI,QAAQ,IAAI,SAAY;AAAA,IAC3C,SAAS;AAAA,IACT,eAAe;AAAA,IACf,kBAAkB,IAAI;AAAA,IACtB,QAAQ,IAAI;AAAA,EACd;AAEA,MAAI,aAAkC;AACtC,MAAI;AAAU,iBAAa;AAC3B,MAAI;AAAS,iBAAa;AAE1B,SAAO,aAAa;AAEpB,MAAI,kBAAkB,SAAS,KAAK,GAAG;AACrC,UAAMA,UAAS,eAAe;AAC9B,WAAO,MAAM,wCAAwCA;AAAA,EACvD;AAEA,MAAI,kBAAkB,SAAS,QAAQ,GAAG;AACxC,UAAMA,UAAS,eAAe;AAC9B,WAAO,SAAS,2CAA2CA;AAAA,EAC7D;AAEA,MAAI,CAAC,kBAAkB,SAAS,MAAM,GAAG;AACvC,UAAMA,UAAS,eAAe;AAC9B,WAAO,QAAQ,0CAA0CA;AAAA,EAC3D;AAEA,MAAI,CAAC,kBAAkB,SAAS,OAAO,GAAG;AACxC,UAAMA,UAAS,eAAe;AAC9B,WAAO,OAAO,yCAAyCA;AAAA,EACzD;AAEA,SAAO;AACT;;;AH3DO,IAAI,UAAU,CAAC;AAEf,SAAS,aAAkC,OAAmB,MAAiB,WAA8B;AAClH,QAAMC,SAAQ;AAAA;AAAA;AAAA;AAAA,IAIZ,OAAO,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA,IAIrB,QAAQ,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA,IAItB,mBAAmB,qBAAqB,MAAM,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA,IAI5D,UAAU,IAAY;AACpB,UAAI,CAAC,MAAM,QAAQ,OAAO;AAAQ,eAAO;AACzC,aAAO,CAAC,CAAC,MAAM,QAAQ,OAAO,KAAK,CAAC,UAAU,MAAM,MAAM,EAAE;AAAA,IAC9D;AAAA;AAAA;AAAA;AAAA,IAIA,OAAO,SAAkB;AACvB,YAAM,MAAM,SAAS,KAAK;AAC1B,YAAM,KAAK,QAAQ,KAAK,QAAQ,KAAK;AAErC,UAAIA,OAAM,UAAU,EAAE;AAAG;AACzB,WAAK,EAAE,MAAM,aAAa,OAAO,EAAE,GAAG,SAAS,GAAG,EAAE,CAAC;AAErD,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAIA,OAAO,SAAkB;AACvB,YAAM,EAAE,GAAG,IAAI;AACf,YAAM,YAAY,KAAKA,OAAM,UAAU,EAAE,IAAI;AAC7C,UAAI,aAAa,MAAM,MAAM;AAC3B,eAAOA,OAAM,OAAO,IAAI,OAAO;AAAA,MACjC,OAAO;AACL,eAAOA,OAAM,OAAO,OAAO;AAAA,MAC7B;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,QAAQ,IAAa;AACnB,UAAI,MAAM,MAAM;AACd,aAAK,aAAa;AAAA,MACpB,WAAWA,OAAM,UAAU,EAAE,GAAG;AAC9B,aAAK,EAAE,MAAM,iBAAiB,GAAG,CAAC;AAAA,MACpC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,IAAa;AAClB,UAAI,MAAM,MAAM;AACd,aAAK,YAAY;AAAA,MACnB,WAAWA,OAAM,UAAU,EAAE,GAAG;AAC9B,aAAK,EAAE,MAAM,gBAAgB,GAAG,CAAC;AAAA,MACnC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAIA,mBAAmB,WAAsB;AACvC,YAAM,SAASA,OAAM,kBAAkB,SAAS;AAChD,UAAI,QAAQ;AACV,eAAO,QAAQ,CAAC,UAAUA,OAAM,QAAQ,MAAM,EAAE,CAAC;AAAA,MACnD;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAIA,OAAO,IAAY,SAAkB;AACnC,UAAI,CAACA,OAAM,UAAU,EAAE;AAAG;AAC1B,WAAK,EAAE,MAAM,gBAAgB,IAAI,OAAO,QAAQ,CAAC;AACjD,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAIA,QAAQ,SAAkB;AACxB,cAAQ,OAAO;AACf,aAAOA,OAAM,OAAO,OAAO;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA,IAIA,QAAQ,SAAkB;AACxB,cAAQ,OAAO;AACf,aAAOA,OAAM,OAAO,OAAO;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA,IAIA,MAAM,SAAkB;AACtB,cAAQ,OAAO;AACf,aAAOA,OAAM,OAAO,OAAO;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,QAAW,SAAqB,SAA4B,SAAkB,CAAC,GAAG;AAChF,YAAM,KAAKA,OAAM,QAAQ,EAAE,GAAG,QAAQ,GAAG,QAAQ,QAAQ,CAAC;AAE1D,cACG,KAAK,CAAC,aAAa;AAClB,cAAM,iBAAiB,QAAQ,QAAQ,SAAS,QAAQ;AACxD,QAAAA,OAAM,QAAQ,EAAE,GAAG,QAAQ,GAAG,gBAAgB,GAAG,CAAC;AAAA,MACpD,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,cAAM,eAAe,QAAQ,QAAQ,OAAO,KAAK;AACjD,QAAAA,OAAM,MAAM,EAAE,GAAG,QAAQ,GAAG,cAAc,GAAG,CAAC;AAAA,MAChD,CAAC;AAEH,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAIA,MAAM,IAAa;AACjB,UAAI,MAAM,MAAM;AACd,aAAK,WAAW;AAAA,MAClB,WAAWA,OAAM,UAAU,EAAE,GAAG;AAC9B,aAAK,EAAE,MAAM,eAAe,GAAG,CAAC;AAAA,MAClC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAIA,OAAO,IAAa;AAClB,UAAI,MAAM,MAAM;AACd,aAAK,YAAY;AAAA,MACnB,WAAWA,OAAM,UAAU,EAAE,GAAG;AAC9B,aAAK,EAAE,MAAM,gBAAgB,GAAG,CAAC;AAAA,MACnC;AAAA,IACF;AAAA,IAEA,cAAc,SAAqB;AACjC,YAAM,EAAE,WAAW,QAAQ,gBAAgB,IAAI;AAC/C,aAAO,UAAU,QAAQ;AAAA,QACvB,GAAG,MAAM,MAAM;AAAA,QACf,UAAU;AAAA,QACV,cAAc;AAAA,QACd,IAAI,IAAI,WAAW,SAAS;AAAA,QAC5B,kBAAkB;AAAA,QAClB,aAAa;AAAA,QACb,MAAM;AAAA,QACN,OAAO,uBAAuB,MAAM,SAAS,SAAS;AAAA,MACxD,CAAC;AAAA,IACH;AAAA,IAEA,UAAU,IAAqD;AAC7D,aAAO,UAAU,MAAM,QAAQ,QAAQ,MAAM,GAAG,MAAM,QAAQ,MAAM,CAAC;AAAA,IACvE;AAAA,EACF;AAEA,SAAO,OAAO,SAASA,MAAK;AAE5B,SAAOA;AACT;;;AI3LA,SAAS,iBAAAC,sBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,WAAAC,gBAAe;;;ACFxB,SAAS,eAAe,cAAc;AACtC,SAAS,mBAAmB;AAC5B,SAAS,eAAe;AAKxB,IAAM,EAAE,KAAK,KAAK,GAAG,IAAI;AAElB,SAAS,mBAAmB,UAAmB,CAAC,GAAG;AACxD,QAAM,EAAE,OAAO,QAAQ,UAAU,KAAK,SAAS,YAAY,UAAU,cAAc,GAAG,GAAG,UAAU,IAAI;AACvG,QAAM,MAAM,QAAQ,SAAS;AAE7B,QAAM,mBAAmB,iBAAiB,UAAU,IAAI;AAExD,SAAO;AAAA,IACL;AAAA,MACE;AAAA,MACA,OAAO;AAAA,MACP,SAAS,SAAS,YAAY,YAAY;AAAA,MAC1C,SAAS;AAAA,QACP;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX,UAAU;AAAA,QACV;AAAA,QACA,WAAW,KAAK,IAAI;AAAA,QACpB;AAAA,QACA,GAAG;AAAA,MACL;AAAA,MAEA,IAAI;AAAA,QACF,QAAQ;AAAA,UACN;AAAA,YACE,OAAO,IAAI,kBAAkB,qBAAqB;AAAA,YAClD,QAAQ;AAAA,YACR,SAAS,CAAC,cAAc,gBAAgB;AAAA,UAC1C;AAAA,UACA;AAAA,YACE,OAAO,GAAG,sBAAsB,gBAAgB;AAAA,YAChD,QAAQ;AAAA,YACR,SAAS,CAAC,cAAc,gBAAgB;AAAA,UAC1C;AAAA,UACA;AAAA,YACE,SAAS,CAAC,cAAc,gBAAgB;AAAA,UAC1C;AAAA,QACF;AAAA,MACF;AAAA,MAEA,QAAQ;AAAA,QACN,eAAe;AAAA,UACb,MAAM,CAAC,WAAW,UAAU;AAAA,UAC5B,OAAO;AAAA,YACL,GAAG;AAAA,UACL;AAAA,QACF;AAAA,QAEA,SAAS;AAAA,UACP,MAAM,CAAC,WAAW,QAAQ;AAAA,UAC1B,YAAY;AAAA,UACZ,IAAI;AAAA,YACF,QAAQ;AAAA,cACN,OAAO,IAAI,eAAe;AAAA,cAC1B,QAAQ;AAAA,cACR,SAAS,CAAC,cAAc;AAAA,YAC1B;AAAA,YACA,SAAS;AAAA,UACX;AAAA,QACF;AAAA,QAEA,QAAQ;AAAA,UACN,MAAM,CAAC,SAAS;AAAA,UAChB,YAAY;AAAA,UACZ,OAAO;AAAA,YACL,kBAAkB;AAAA,UACpB;AAAA,UACA,IAAI;AAAA,YACF,SAAS;AAAA,YACT,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,QAEA,YAAY;AAAA,UACV,OAAO;AAAA,UACP,OAAO;AAAA,YACL,cAAc;AAAA,cACZ,QAAQ;AAAA,cACR,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,QAEA,UAAU;AAAA,UACR,OAAO;AAAA,UACP,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,YAAY;AAAA,QACV,wBAAwBC,MAAK,MAAM,EAAE,KAAK,GAAG;AAC3C,cAAI,CAACA,KAAI;AAAiB;AAC1B,gBAAM,MAAM,IAAI,OAAOA,IAAG;AAC1B,iBAAO,YAAY,KAAK,oBAAoB,MAAM;AAChD,iBAAK,IAAI,oBAAoB,WAAW,UAAU,QAAQ;AAAA,UAC5D,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MAEA,QAAQ;AAAA,QACN,qBAAqB,CAAC,GAAG,QAAQ,IAAI,OAAO,SAAS;AAAA,QACrD,eAAe,CAACA,SAAQA,KAAI,SAAS;AAAA,QACrC,gBAAgB,CAACA,MAAK,QAAQ,IAAI,OAAO,SAASA,KAAI;AAAA,QACtD,oBAAoB,CAACA,MAAK,QAAQ,IAAI,OAAO,aAAaA,KAAI;AAAA,MAChE;AAAA,MAEA,QAAQ;AAAA,QACN,kBAAkB,CAACA,SAAQA,KAAI;AAAA,QAC/B,cAAc,CAACA,SAAQA,KAAI;AAAA,MAC7B;AAAA,MAEA,SAAS;AAAA,QACP,qBAAqBA,MAAK;AACxB,UAAAA,KAAI,aAAa,KAAK,IAAI,IAAIA,KAAI;AAAA,QACpC;AAAA,QACA,aAAaA,MAAK;AAChB,UAAAA,KAAI,YAAY,KAAK,IAAI;AAAA,QAC3B;AAAA,QACA,qBAAqB,MAAM,MAAM,EAAE,KAAK,GAAG;AACzC,eAAK,WAAW,EAAE,MAAM,gBAAgB,IAAI,KAAK,GAAG,CAAC;AAAA,QACvD;AAAA,QACA,gBAAgBA,MAAK;AACnB,UAAAA,KAAI,YAAY;AAAA,QAClB;AAAA,QACA,cAAcA,MAAK;AACjB,UAAAA,KAAI,UAAU;AAAA,QAChB;AAAA,QACA,aAAaA,MAAK;AAChB,UAAAA,KAAI,SAAS;AAAA,QACf;AAAA,QACA,eAAeA,MAAK;AAClB,UAAAA,KAAI,WAAW;AAAA,QACjB;AAAA,QACA,WAAWA,MAAK,KAAK;AACnB,gBAAM,EAAE,UAAAC,WAAU,MAAAC,MAAK,IAAI,IAAI;AAC/B,gBAAM,OAAO,iBAAiBD,WAAUC,KAAI;AAC5C,iBAAO,OAAOF,MAAK,EAAE,GAAG,IAAI,OAAO,UAAU,MAAM,WAAW,KAAK,CAAC;AAAA,QACtE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ADpJO,SAAS,aAAa,aAAsC;AACjE,QAAM,MAAMG,SAAQ,WAAW;AAC/B,SAAOC,eAAmC;AAAA,IACxC,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,MACP,KAAK;AAAA,MACL,KAAK,OAAO;AAAA,MACZ,QAAQ,CAAC;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,oBAAoB;AAAA,MACpB,SAAS,EAAE,MAAM,OAAO,OAAO,OAAO,KAAK,OAAO,QAAQ,MAAM;AAAA,MAChE,GAAG;AAAA,IACL;AAAA,IAEA,UAAU;AAAA,MACR,OAAO,CAACC,SAAQA,KAAI,OAAO;AAAA,IAC7B;AAAA,IAEA,IAAI;AAAA,MACF,OAAO,CAAC;AAAA,MAER,aAAa;AAAA,QACX,SAAS,CAAC,MAAM,KAAK,EAAE,KAAK,MAAM;AAChC,eAAK,UAAU,SAAS,IAAI,EAAE;AAAA,QAChC;AAAA,MACF;AAAA,MAEA,WAAW;AAAA,QACT,SAAS,CAACA,SAAQ;AAChB,UAAAA,KAAI,OAAO,QAAQ,CAAC,UAAU,MAAM,KAAK,OAAO,CAAC;AAAA,QACnD;AAAA,MACF;AAAA,MAEA,cAAc;AAAA,QACZ,SAAS,CAAC,MAAM,KAAK,EAAE,KAAK,MAAM;AAChC,eAAK,UAAU,UAAU,IAAI,EAAE;AAAA,QACjC;AAAA,MACF;AAAA,MAEA,YAAY;AAAA,QACV,SAAS,CAACA,SAAQ;AAChB,UAAAA,KAAI,OAAO,QAAQ,CAAC,UAAU,MAAM,KAAK,QAAQ,CAAC;AAAA,QACpD;AAAA,MACF;AAAA,MAEA,WAAW;AAAA,QACT,OAAO,CAACA,SAAQA,KAAI,OAAO,SAASA,KAAI;AAAA,QACxC,SAAS,CAACA,MAAK,KAAK,EAAE,KAAK,MAAM;AAC/B,gBAAM,UAAU;AAAA,YACd,GAAG,IAAI;AAAA,YACP,iBAAiBA,KAAI;AAAA,YACrB,oBAAoBA,KAAI;AAAA,YACxB,KAAKA,KAAI;AAAA,YACT,aAAaA,KAAI;AAAA,UACnB;AACA,gBAAM,QAAQ,mBAAmB,OAAO;AACxC,gBAAM,QAAQ,KAAK,MAAM,KAAK;AAC9B,UAAAA,KAAI,OAAO,KAAK,KAAK;AAAA,QACvB;AAAA,MACF;AAAA,MAEA,cAAc;AAAA,QACZ,SAAS,CAAC,MAAM,KAAK,EAAE,KAAK,MAAM;AAChC,eAAK,UAAU,EAAE,MAAM,UAAU,OAAO,IAAI,MAAM,GAAG,IAAI,EAAE;AAAA,QAC7D;AAAA,MACF;AAAA,MAEA,eAAe;AAAA,QACb,SAAS,CAAC,MAAM,KAAK,EAAE,KAAK,MAAM;AAChC,eAAK,UAAU,WAAW,IAAI,EAAE;AAAA,QAClC;AAAA,MACF;AAAA,MAEA,aAAa;AAAA,QACX,SAAS,CAACA,SAAQ;AAChB,UAAAA,KAAI,OAAO,QAAQ,CAAC,UAAU,MAAM,KAAK,SAAS,CAAC;AAAA,QACrD;AAAA,MACF;AAAA,MAEA,cAAc;AAAA,QACZ,SAAS,CAACA,MAAK,KAAK,EAAE,KAAK,MAAM;AAC/B,eAAK,UAAU,IAAI,EAAE;AACrB,gBAAM,QAAQA,KAAI,OAAO,UAAU,CAAC,UAAU,MAAM,OAAO,IAAI,EAAE;AACjE,UAAAA,KAAI,OAAO,OAAO,OAAO,CAAC;AAAA,QAC5B;AAAA,MACF;AAAA,MAEA,YAAY;AAAA,QACV,SAAS,CAACA,MAAK,MAAM,EAAE,KAAK,MAAM;AAChC,UAAAA,KAAI,OAAO,QAAQ,CAAC,UAAU,KAAK,UAAU,MAAM,EAAE,CAAC;AACtD,iBAAOA,KAAI,OAAO;AAAQ,YAAAA,KAAI,OAAO,IAAI;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AExGA,SAAS,gBAAgB;AAMlB,SAAS,QAA6B,OAAc,MAAY,WAA8B;AACnG,QAAM,YAAY,MAAM,OAAO,SAAS;AACxC,QAAM,WAAW,MAAM,OAAO,QAAQ;AAEtC,QAAM,qBAAqB,MAAM,QAAQ;AACzC,QAAM,YAAY,MAAM,QAAQ;AAEhC,SAAO;AAAA;AAAA;AAAA;AAAA,IAIL,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA,IAIpB,OAAO,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA,IAIrB,aAAa,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA,IAI3B;AAAA;AAAA;AAAA;AAAA,IAIA;AAAA;AAAA;AAAA;AAAA,IAIA;AAAA;AAAA;AAAA;AAAA,IAIA,OAAO,MAAM,QAAQ,QAAQ;AAAA;AAAA;AAAA;AAAA,IAI7B,QAAQ;AACN,WAAK,OAAO;AAAA,IACd;AAAA;AAAA;AAAA;AAAA,IAIA,SAAS;AACP,WAAK,QAAQ;AAAA,IACf;AAAA;AAAA;AAAA;AAAA,IAIA,UAAU;AACR,WAAK,SAAS;AAAA,IAChB;AAAA;AAAA;AAAA;AAAA,IAIA,SAAS;AACP,aAAO,MAAM,QAAQ,SAAS;AAAA,QAC5B,IAAI,MAAM,QAAQ;AAAA,QAClB,MAAM,MAAM,QAAQ;AAAA,QACpB,UAAU,MAAM,QAAQ;AAAA,QACxB,OAAO,MAAM,QAAQ;AAAA,QACrB,WAAW,MAAM,QAAQ;AAAA,QACzB,aAAa,MAAM,QAAQ;AAAA,QAC3B,UAAU;AACR,eAAK,SAAS;AAAA,QAChB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,WAAW,UAAU,QAAQ;AAAA,MAC3B,GAAG,MAAM,KAAK;AAAA,MACd,KAAK,MAAM,QAAQ;AAAA,MACnB,IAAI,IAAI,UAAU,MAAM,OAAO;AAAA,MAC/B,aAAa,SAAS,SAAS;AAAA,MAC/B,aAAa,MAAM,QAAQ;AAAA,MAC3B,kBAAkB;AAAA,MAClB,MAAM;AAAA,MACN,eAAe;AAAA,MACf,UAAU;AAAA,MACV,OAAO;AAAA,QACL,UAAU;AAAA,QACV,eAAe;AAAA,QACf,QAAQ;AAAA,QACR,kBAAkB,GAAG,MAAM,QAAQ;AAAA,QACnC,cAAc,GAAG,MAAM,QAAQ;AAAA,MACjC;AAAA,MACA,UAAU,OAAO;AACf,YAAI,MAAM,OAAO,UAAU;AACzB,eAAK,SAAS;AACd,gBAAM,eAAe;AAAA,QACvB;AAAA,MACF;AAAA,MACA,UAAU;AACR,YAAI,oBAAoB;AACtB,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA,MACA,SAAS;AACP,YAAI,oBAAoB;AACtB,eAAK,QAAQ;AAAA,QACf;AAAA,MACF;AAAA,MACA,iBAAiB;AACf,YAAI,oBAAoB;AACtB,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA,MACA,iBAAiB;AACf,YAAI,oBAAoB;AACtB,eAAK,QAAQ;AAAA,QACf;AAAA,MACF;AAAA,IACF,CAAC;AAAA,IAED,YAAY,UAAU,QAAQ;AAAA,MAC5B,GAAG,MAAM,MAAM;AAAA,MACf,IAAI,IAAI,WAAW,MAAM,OAAO;AAAA,IAClC,CAAC;AAAA,IAED,kBAAkB,UAAU,QAAQ;AAAA,MAClC,GAAG,MAAM,YAAY;AAAA,MACrB,IAAI,IAAI,iBAAiB,MAAM,OAAO;AAAA,IACxC,CAAC;AAAA,IAED,mBAAmB,UAAU,OAAO;AAAA,MAClC,IAAI,IAAI,kBAAkB,MAAM,OAAO;AAAA,MACvC,GAAG,MAAM,aAAa;AAAA,MACtB,MAAM;AAAA,MACN,cAAc;AAAA,MACd,UAAU;AACR,aAAK,SAAS;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AP3HO,IAAM,QAAQ;AAAA,EACnB,SAAS;AAAA,EACT,SAAS;AACX;AAEO,SAAS,MAAM;AACpB,MAAI,CAAC,MAAM,GAAG;AACZ,SAAK,8CAA8C;AAAA,EACrD,OAAO;AACL,WAAO;AAAA,EACT;AACF;","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.1",
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.1",
31
- "@zag-js/core": "0.11.1",
32
- "@zag-js/dom-query": "0.11.1",
33
- "@zag-js/dom-event": "0.11.1",
34
- "@zag-js/utils": "0.11.1",
35
- "@zag-js/types": "0.11.1"
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
@@ -11,6 +11,7 @@ export type {
11
11
  MachineContext,
12
12
  MachineState,
13
13
  Placement,
14
+ PublicApi,
14
15
  Service,
15
16
  ToastOptions,
16
17
  Type,
@@ -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,
@@ -1,5 +1,13 @@
1
1
  import type { Machine, StateMachine as S } from "@zag-js/core"
2
- import type { CommonProperties, Context, Direction, DirectionProperty, RequiredBy, RootProperties } from "@zag-js/types"
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<{