@zag-js/toast 0.10.4 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/toast-group.connect.ts","../src/toast.anatomy.ts","../src/toast.dom.ts","../src/toast.utils.ts","../src/toast-group.machine.ts","../src/toast.machine.ts","../src/toast.connect.ts"],"sourcesContent":["import { isDom } from \"@zag-js/dom-query\"\nimport { warn } from \"@zag-js/utils\"\nimport { groupConnect, toaster } from \"./toast-group.connect\"\nimport { groupMachine } from \"./toast-group.machine\"\nimport { createToastMachine as createMachine } from \"./toast.machine\"\n\nexport { anatomy } from \"./toast.anatomy\"\nexport { connect } from \"./toast.connect\"\nexport type {\n GroupMachineContext,\n MachineContext,\n MachineState,\n Placement,\n Service,\n ToastOptions,\n Type,\n} from \"./toast.types\"\nexport { createMachine }\n\nexport const group = {\n connect: groupConnect,\n machine: groupMachine,\n}\n\nexport function api() {\n if (!isDom()) {\n warn(\"toast.api() is only available in the browser\")\n } else {\n return toaster\n }\n}\n","import { subscribe } from \"@zag-js/core\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { runIfFn, uuid } from \"@zag-js/utils\"\nimport { parts } from \"./toast.anatomy\"\nimport { dom } from \"./toast.dom\"\nimport type {\n GroupMachineContext,\n GroupProps,\n GroupSend,\n GroupState,\n Placement,\n PromiseOptions,\n Toaster,\n Options,\n} from \"./toast.types\"\nimport { getGroupPlacementStyle, getToastsByPlacement } from \"./toast.utils\"\n\nexport let toaster = {} as Toaster\n\nexport function groupConnect<T extends PropTypes>(state: GroupState, send: GroupSend, normalize: NormalizeProps<T>) {\n const group = {\n /**\n * The total number of toasts\n */\n count: state.context.count,\n /**\n * The active toasts\n */\n toasts: state.context.toasts,\n /**\n * The active toasts by placement\n */\n toastsByPlacement: getToastsByPlacement(state.context.toasts),\n /**\n * Returns whether the toast id is visible\n */\n isVisible(id: string) {\n if (!state.context.toasts.length) return false\n return !!state.context.toasts.find((toast) => toast.id == id)\n },\n /**\n * Function to create a toast.\n */\n create(options: Options) {\n const uid = `toast:${uuid()}`\n const id = options.id ? options.id : uid\n\n if (group.isVisible(id)) return\n send({ type: \"ADD_TOAST\", toast: { ...options, id } })\n\n return id\n },\n /**\n * Function to create or update a toast.\n */\n upsert(options: Options) {\n const { id } = options\n const isVisible = id ? group.isVisible(id) : false\n if (isVisible && id != null) {\n return group.update(id, options)\n } else {\n return group.create(options)\n }\n },\n /**\n * Function to dismiss a toast by id.\n * If no id is provided, all toasts will be dismissed.\n */\n dismiss(id?: string) {\n if (id == null) {\n send(\"DISMISS_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"DISMISS_TOAST\", id })\n }\n },\n /**\n * Function to remove a toast by id.\n * If no id is provided, all toasts will be removed.\n */\n remove(id?: string) {\n if (id == null) {\n send(\"REMOVE_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"REMOVE_TOAST\", id })\n }\n },\n /**\n * Function to dismiss all toasts by placement.\n */\n dismissByPlacement(placement: Placement) {\n const toasts = group.toastsByPlacement[placement]\n if (toasts) {\n toasts.forEach((toast) => group.dismiss(toast.id))\n }\n },\n /**\n * Function to update a toast's options by id.\n */\n update(id: string, options: Options) {\n if (!group.isVisible(id)) return\n send({ type: \"UPDATE_TOAST\", id, toast: options })\n return id\n },\n /**\n * Function to create a loading toast.\n */\n loading(options: Options) {\n options.type = \"loading\"\n return group.upsert(options)\n },\n /**\n * Function to create a success toast.\n */\n success(options: Options) {\n options.type = \"success\"\n return group.upsert(options)\n },\n /**\n * Function to create an error toast.\n */\n error(options: Options) {\n options.type = \"error\"\n return group.upsert(options)\n },\n /**\n * Function to create a toast from a promise.\n * - When the promise resolves, the toast will be updated with the success options.\n * - When the promise rejects, the toast will be updated with the error options.\n */\n promise<T>(promise: Promise<T>, options: PromiseOptions<T>, shared: Options = {}) {\n const id = group.loading({ ...shared, ...options.loading })\n\n promise\n .then((response) => {\n const successOptions = runIfFn(options.success, response)\n group.success({ ...shared, ...successOptions, id })\n })\n .catch((error) => {\n const errorOptions = runIfFn(options.error, error)\n group.error({ ...shared, ...errorOptions, id })\n })\n\n return promise\n },\n /**\n * Function to pause a toast by id.\n */\n pause(id?: string) {\n if (id == null) {\n send(\"PAUSE_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"PAUSE_TOAST\", id })\n }\n },\n /**\n * Function to resume a toast by id.\n */\n resume(id?: string) {\n if (id == null) {\n send(\"RESUME_ALL\")\n } else if (group.isVisible(id)) {\n send({ type: \"RESUME_TOAST\", id })\n }\n },\n\n getGroupProps(options: GroupProps) {\n const { placement, label = \"Notifications\" } = options\n return normalize.element({\n ...parts.group.attrs,\n tabIndex: -1,\n \"aria-label\": label,\n id: dom.getGroupId(placement),\n \"data-placement\": placement,\n \"aria-live\": \"polite\",\n role: \"region\",\n style: getGroupPlacementStyle(state.context, placement),\n })\n },\n\n subscribe(fn: (toasts: GroupMachineContext[\"toasts\"]) => void) {\n return subscribe(state.context.toasts, () => fn(state.context.toasts))\n },\n }\n\n Object.assign(toaster, group)\n\n return group\n}\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"toast\").parts(\"group\", \"root\", \"title\", \"description\", \"closeTrigger\")\nexport const parts = anatomy.build()\n","import { createScope } from \"@zag-js/dom-query\"\nimport type { GroupMachineContext as GroupCtx, MachineContext as Ctx, Placement } from \"./toast.types\"\n\nexport const dom = createScope({\n getGroupId: (placement: Placement) => `toast-group:${placement}`,\n getRootId: (ctx: Ctx) => `toast:${ctx.id}`,\n getTitleId: (ctx: Ctx) => `toast:${ctx.id}:title`,\n getDescriptionId: (ctx: Ctx) => `toast:${ctx.id}:description`,\n getCloseTriggerId: (ctx: Ctx) => `toast${ctx.id}:close`,\n getPortalId: (ctx: GroupCtx) => `toast-portal:${ctx.id}`,\n})\n","import type { Style } from \"@zag-js/types\"\nimport type { GroupMachineContext, MachineContext, Placement, Service, Type } from \"./toast.types\"\n\nexport function getToastsByPlacement(toasts: Service[]) {\n const result: Partial<Record<Placement, Service[]>> = {}\n\n for (const toast of toasts) {\n const placement = toast.state.context.placement!\n result[placement] ||= []\n result[placement]!.push(toast)\n }\n\n return result\n}\n\nexport const defaultTimeouts: Record<Type, number> = {\n info: 5000,\n error: 5000,\n success: 2000,\n loading: Infinity,\n custom: 5000,\n}\n\nexport function getToastDuration(duration: number | undefined, type: MachineContext[\"type\"]) {\n return duration ?? defaultTimeouts[type]\n}\n\nexport function getGroupPlacementStyle(ctx: GroupMachineContext, placement: Placement): Style {\n const offset = ctx.offsets\n const computedOffset =\n typeof offset === \"string\" ? { left: offset, right: offset, bottom: offset, top: offset } : offset\n\n const rtl = ctx.dir === \"rtl\"\n const computedPlacement = placement\n .replace(\"-start\", rtl ? \"-right\" : \"-left\")\n .replace(\"-end\", rtl ? \"-left\" : \"-right\")\n\n const isRighty = computedPlacement.includes(\"right\")\n const isLefty = computedPlacement.includes(\"left\")\n\n const styles: Style = {\n position: \"fixed\",\n pointerEvents: ctx.count > 0 ? undefined : \"none\",\n display: \"flex\",\n flexDirection: \"column\",\n \"--toast-gutter\": ctx.gutter,\n zIndex: ctx.zIndex,\n }\n\n let alignItems: Style[\"alignItems\"] = \"center\"\n if (isRighty) alignItems = \"flex-end\"\n if (isLefty) alignItems = \"flex-start\"\n\n styles.alignItems = alignItems\n\n if (computedPlacement.includes(\"top\")) {\n const offset = computedOffset.top\n styles.top = `calc(env(safe-area-inset-top, 0px) + ${offset})`\n }\n\n if (computedPlacement.includes(\"bottom\")) {\n const offset = computedOffset.bottom\n styles.bottom = `calc(env(safe-area-inset-bottom, 0px) + ${offset})`\n }\n\n if (!computedPlacement.includes(\"left\")) {\n const offset = computedOffset.right\n styles.right = `calc(env(safe-area-inset-right, 0px) + ${offset})`\n }\n\n if (!computedPlacement.includes(\"right\")) {\n const offset = computedOffset.left\n styles.left = `calc(env(safe-area-inset-left, 0px) + ${offset})`\n }\n\n return styles\n}\n","import { createMachine } from \"@zag-js/core\"\nimport { MAX_Z_INDEX } from \"@zag-js/dom-query\"\nimport { compact } from \"@zag-js/utils\"\nimport { createToastMachine } from \"./toast.machine\"\nimport type { GroupMachineContext, UserDefinedGroupContext } from \"./toast.types\"\n\nexport function groupMachine(userContext: UserDefinedGroupContext) {\n const ctx = compact(userContext)\n return createMachine<GroupMachineContext>({\n id: \"toaster\",\n initial: \"active\",\n context: {\n dir: \"ltr\",\n max: Number.MAX_SAFE_INTEGER,\n toasts: [],\n gutter: \"1rem\",\n zIndex: MAX_Z_INDEX,\n pauseOnPageIdle: false,\n pauseOnInteraction: true,\n offsets: { left: \"0px\", right: \"0px\", top: \"0px\", bottom: \"0px\" },\n ...ctx,\n },\n\n computed: {\n count: (ctx) => ctx.toasts.length,\n },\n\n on: {\n SETUP: {},\n\n PAUSE_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild(\"PAUSE\", evt.id)\n },\n },\n\n PAUSE_ALL: {\n actions: (ctx) => {\n ctx.toasts.forEach((toast) => toast.send(\"PAUSE\"))\n },\n },\n\n RESUME_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild(\"RESUME\", evt.id)\n },\n },\n\n RESUME_ALL: {\n actions: (ctx) => {\n ctx.toasts.forEach((toast) => toast.send(\"RESUME\"))\n },\n },\n\n ADD_TOAST: {\n guard: (ctx) => ctx.toasts.length < ctx.max,\n actions: (ctx, evt, { self }) => {\n const options = {\n ...evt.toast,\n pauseOnPageIdle: ctx.pauseOnPageIdle,\n pauseOnInteraction: ctx.pauseOnInteraction,\n dir: ctx.dir,\n getRootNode: ctx.getRootNode,\n }\n const toast = createToastMachine(options)\n const actor = self.spawn(toast)\n ctx.toasts.push(actor)\n },\n },\n\n UPDATE_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild({ type: \"UPDATE\", toast: evt.toast }, evt.id)\n },\n },\n\n DISMISS_TOAST: {\n actions: (_ctx, evt, { self }) => {\n self.sendChild(\"DISMISS\", evt.id)\n },\n },\n\n DISMISS_ALL: {\n actions: (ctx) => {\n ctx.toasts.forEach((toast) => toast.send(\"DISMISS\"))\n },\n },\n\n REMOVE_TOAST: {\n actions: (ctx, evt, { self }) => {\n self.stopChild(evt.id)\n const index = ctx.toasts.findIndex((toast) => toast.id === evt.id)\n ctx.toasts.splice(index, 1)\n },\n },\n\n REMOVE_ALL: {\n actions: (ctx, _evt, { self }) => {\n ctx.toasts.forEach((toast) => self.stopChild(toast.id))\n while (ctx.toasts.length) ctx.toasts.pop()\n },\n },\n },\n })\n}\n","import { createMachine, guards } from \"@zag-js/core\"\nimport { addDomEvent } from \"@zag-js/dom-event\"\nimport { compact } from \"@zag-js/utils\"\nimport { dom } from \"./toast.dom\"\nimport type { MachineContext, MachineState, Options } from \"./toast.types\"\nimport { getToastDuration } from \"./toast.utils\"\n\nconst { not, and, or } = guards\n\nexport function createToastMachine(options: Options = {}) {\n const { type = \"info\", duration, id = \"toast\", placement = \"bottom\", removeDelay = 0, ...restProps } = options\n const ctx = compact(restProps)\n\n const computedDuration = getToastDuration(duration, type)\n\n return createMachine<MachineContext, MachineState>(\n {\n id,\n entry: \"invokeOnOpen\",\n initial: type === \"loading\" ? \"persist\" : \"active\",\n context: {\n id,\n type,\n remaining: computedDuration,\n duration: computedDuration,\n removeDelay,\n createdAt: Date.now(),\n placement,\n ...ctx,\n },\n\n on: {\n UPDATE: [\n {\n guard: and(\"hasTypeChanged\", \"isChangingToLoading\"),\n target: \"persist\",\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n {\n guard: or(\"hasDurationChanged\", \"hasTypeChanged\"),\n target: \"active:temp\",\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n {\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n ],\n },\n\n states: {\n \"active:temp\": {\n tags: [\"visible\", \"updating\"],\n after: {\n 0: \"active\",\n },\n },\n\n persist: {\n tags: [\"visible\", \"paused\"],\n activities: \"trackDocumentVisibility\",\n on: {\n RESUME: {\n guard: not(\"isLoadingType\"),\n target: \"active\",\n actions: [\"setCreatedAt\"],\n },\n DISMISS: \"dismissing\",\n },\n },\n\n active: {\n tags: [\"visible\"],\n activities: \"trackDocumentVisibility\",\n after: {\n VISIBLE_DURATION: \"dismissing\",\n },\n on: {\n DISMISS: \"dismissing\",\n PAUSE: {\n target: \"persist\",\n actions: \"setRemainingDuration\",\n },\n },\n },\n\n dismissing: {\n entry: \"invokeOnClosing\",\n after: {\n REMOVE_DELAY: {\n target: \"inactive\",\n actions: \"notifyParentToRemove\",\n },\n },\n },\n\n inactive: {\n entry: \"invokeOnClose\",\n type: \"final\",\n },\n },\n },\n {\n activities: {\n trackDocumentVisibility(ctx, _evt, { send }) {\n if (!ctx.pauseOnPageIdle) return\n const doc = dom.getDoc(ctx)\n return addDomEvent(doc, \"visibilitychange\", () => {\n send(doc.visibilityState === \"hidden\" ? \"PAUSE\" : \"RESUME\")\n })\n },\n },\n\n guards: {\n isChangingToLoading: (_, evt) => evt.toast?.type === \"loading\",\n isLoadingType: (ctx) => ctx.type === \"loading\",\n hasTypeChanged: (ctx, evt) => evt.toast?.type !== ctx.type,\n hasDurationChanged: (ctx, evt) => evt.toast?.duration !== ctx.duration,\n },\n\n delays: {\n VISIBLE_DURATION: (ctx) => ctx.remaining,\n REMOVE_DELAY: (ctx) => ctx.removeDelay,\n },\n\n actions: {\n setRemainingDuration(ctx) {\n ctx.remaining -= Date.now() - ctx.createdAt\n },\n setCreatedAt(ctx) {\n ctx.createdAt = Date.now()\n },\n notifyParentToRemove(_ctx, _evt, { self }) {\n self.sendParent({ type: \"REMOVE_TOAST\", id: self.id })\n },\n invokeOnClosing(ctx) {\n ctx.onClosing?.()\n },\n invokeOnClose(ctx) {\n ctx.onClose?.()\n },\n invokeOnOpen(ctx) {\n ctx.onOpen?.()\n },\n invokeOnUpdate(ctx) {\n ctx.onUpdate?.()\n },\n setContext(ctx, evt) {\n const { duration, type } = evt.toast\n const time = getToastDuration(duration, type)\n Object.assign(ctx, { ...evt.toast, duration: time, remaining: time })\n },\n },\n },\n )\n}\n","import { dataAttr } from \"@zag-js/dom-query\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./toast.anatomy\"\nimport { dom } from \"./toast.dom\"\nimport type { Send, State } from \"./toast.types\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>) {\n const isVisible = state.hasTag(\"visible\")\n const isPaused = state.hasTag(\"paused\")\n\n const pauseOnInteraction = state.context.pauseOnInteraction\n const placement = state.context.placement\n\n return {\n /**\n * The type of the toast.\n */\n type: state.context.type,\n /**\n * The title of the toast.\n */\n title: state.context.title,\n /**\n * The description of the toast.\n */\n description: state.context.description,\n /**\n * The current placement of the toast.\n */\n placement,\n /**\n * Whether the toast is visible.\n */\n isVisible,\n /**\n * Whether the toast is paused.\n */\n isPaused,\n /**\n * Whether the toast is in RTL mode.\n */\n isRtl: state.context.dir === \"rtl\",\n /**\n * Function to pause the toast (keeping it visible).\n */\n pause() {\n send(\"PAUSE\")\n },\n /**\n * Function to resume the toast dismissing.\n */\n resume() {\n send(\"RESUME\")\n },\n /**\n * Function to instantly dismiss the toast.\n */\n dismiss() {\n send(\"DISMISS\")\n },\n /**\n * Function render the toast in the DOM (based on the defined `render` property)\n */\n render() {\n return state.context.render?.({\n id: state.context.id,\n type: state.context.type,\n duration: state.context.duration,\n title: state.context.title,\n placement: state.context.placement,\n description: state.context.description,\n dismiss() {\n send(\"DISMISS\")\n },\n })\n },\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n dir: state.context.dir,\n id: dom.getRootId(state.context),\n \"data-open\": dataAttr(isVisible),\n \"data-type\": state.context.type,\n \"data-placement\": placement,\n role: \"status\",\n \"aria-atomic\": \"true\",\n tabIndex: 0,\n style: {\n position: \"relative\",\n pointerEvents: \"auto\",\n margin: \"calc(var(--toast-gutter) / 2)\",\n \"--remove-delay\": `${state.context.removeDelay}ms`,\n \"--duration\": `${state.context.duration}ms`,\n },\n onKeyDown(event) {\n if (event.key == \"Escape\") {\n send(\"DISMISS\")\n event.preventDefault()\n }\n },\n onFocus() {\n if (pauseOnInteraction) {\n send(\"PAUSE\")\n }\n },\n onBlur() {\n if (pauseOnInteraction) {\n send(\"RESUME\")\n }\n },\n onPointerEnter() {\n if (pauseOnInteraction) {\n send(\"PAUSE\")\n }\n },\n onPointerLeave() {\n if (pauseOnInteraction) {\n send(\"RESUME\")\n }\n },\n }),\n\n titleProps: normalize.element({\n ...parts.title.attrs,\n id: dom.getTitleId(state.context),\n }),\n\n descriptionProps: normalize.element({\n ...parts.description.attrs,\n id: dom.getDescriptionId(state.context),\n }),\n\n closeTriggerProps: normalize.button({\n id: dom.getCloseTriggerId(state.context),\n ...parts.closeTrigger.attrs,\n type: \"button\",\n \"aria-label\": \"Dismiss notification\",\n onClick() {\n send(\"DISMISS\")\n },\n }),\n }\n}\n"],"mappings":"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","names":["offset","group","createMachine","compact","ctx","duration","type","compact","createMachine","ctx"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zag-js/toast",
3
- "version": "0.10.4",
3
+ "version": "0.11.0",
4
4
  "description": "Core logic for the toast widget implemented as a state machine",
5
5
  "keywords": [
6
6
  "js",
@@ -27,12 +27,12 @@
27
27
  "url": "https://github.com/chakra-ui/zag/issues"
28
28
  },
29
29
  "dependencies": {
30
- "@zag-js/anatomy": "0.10.4",
31
- "@zag-js/core": "0.10.4",
32
- "@zag-js/dom-query": "0.10.4",
33
- "@zag-js/dom-event": "0.10.4",
34
- "@zag-js/utils": "0.10.4",
35
- "@zag-js/types": "0.10.4"
30
+ "@zag-js/anatomy": "0.11.0",
31
+ "@zag-js/core": "0.11.0",
32
+ "@zag-js/dom-query": "0.11.0",
33
+ "@zag-js/dom-event": "0.11.0",
34
+ "@zag-js/utils": "0.11.0",
35
+ "@zag-js/types": "0.11.0"
36
36
  },
37
37
  "devDependencies": {
38
38
  "clean-package": "2.2.0"
@@ -50,7 +50,7 @@
50
50
  "./package.json": "./package.json"
51
51
  },
52
52
  "scripts": {
53
- "build": "vite build -c ../../../vite.config.ts",
53
+ "build": "tsup",
54
54
  "lint": "eslint src --ext .ts,.tsx",
55
55
  "typecheck": "tsc --noEmit"
56
56
  }
@@ -1,75 +0,0 @@
1
- import type { NormalizeProps, PropTypes } from "@zag-js/types";
2
- import { Service, GroupMachineContext, GroupProps, GroupSend, GroupState, Placement, PromiseOptions, Toaster, Options } from './toast.types';
3
- export declare let toaster: Toaster;
4
- export declare function groupConnect<T extends PropTypes>(state: GroupState, send: GroupSend, normalize: NormalizeProps<T>): {
5
- /**
6
- * The total number of toasts
7
- */
8
- count: number;
9
- /**
10
- * The active toasts
11
- */
12
- toasts: Service[];
13
- /**
14
- * The active toasts by placement
15
- */
16
- toastsByPlacement: Partial<Record<Placement, Service[]>>;
17
- /**
18
- * Returns whether the toast id is visible
19
- */
20
- isVisible(id: string): boolean;
21
- /**
22
- * Function to create a toast.
23
- */
24
- create(options: Options): string | undefined;
25
- /**
26
- * Function to create or update a toast.
27
- */
28
- upsert(options: Options): string | undefined;
29
- /**
30
- * Function to dismiss a toast by id.
31
- * If no id is provided, all toasts will be dismissed.
32
- */
33
- dismiss(id?: string): void;
34
- /**
35
- * Function to remove a toast by id.
36
- * If no id is provided, all toasts will be removed.
37
- */
38
- remove(id?: string): void;
39
- /**
40
- * Function to dismiss all toasts by placement.
41
- */
42
- dismissByPlacement(placement: Placement): void;
43
- /**
44
- * Function to update a toast's options by id.
45
- */
46
- update(id: string, options: Options): string | undefined;
47
- /**
48
- * Function to create a loading toast.
49
- */
50
- loading(options: Options): string | undefined;
51
- /**
52
- * Function to create a success toast.
53
- */
54
- success(options: Options): string | undefined;
55
- /**
56
- * Function to create an error toast.
57
- */
58
- error(options: Options): string | undefined;
59
- /**
60
- * Function to create a toast from a promise.
61
- * - When the promise resolves, the toast will be updated with the success options.
62
- * - When the promise rejects, the toast will be updated with the error options.
63
- */
64
- promise<T_1>(promise: Promise<T_1>, options: PromiseOptions<T_1>, shared?: Options): Promise<T_1>;
65
- /**
66
- * Function to pause a toast by id.
67
- */
68
- pause(id?: string): void;
69
- /**
70
- * Function to resume a toast by id.
71
- */
72
- resume(id?: string): void;
73
- getGroupProps(options: GroupProps): T["element"];
74
- subscribe(fn: (toasts: GroupMachineContext["toasts"]) => void): () => void;
75
- };
@@ -1,176 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
-
5
- const core = require('@zag-js/core');
6
- const utils = require('@zag-js/utils');
7
- const toast_anatomy = require('./toast.anatomy.js');
8
- const toast_dom = require('./toast.dom.js');
9
- const toast_utils = require('./toast.utils.js');
10
-
11
- let toaster = {};
12
- function groupConnect(state, send, normalize) {
13
- const group = {
14
- /**
15
- * The total number of toasts
16
- */
17
- count: state.context.count,
18
- /**
19
- * The active toasts
20
- */
21
- toasts: state.context.toasts,
22
- /**
23
- * The active toasts by placement
24
- */
25
- toastsByPlacement: toast_utils.getToastsByPlacement(state.context.toasts),
26
- /**
27
- * Returns whether the toast id is visible
28
- */
29
- isVisible(id) {
30
- if (!state.context.toasts.length)
31
- return false;
32
- return !!state.context.toasts.find((toast) => toast.id == id);
33
- },
34
- /**
35
- * Function to create a toast.
36
- */
37
- create(options) {
38
- const uid = `toast:${utils.uuid()}`;
39
- const id = options.id ? options.id : uid;
40
- if (group.isVisible(id))
41
- return;
42
- send({ type: "ADD_TOAST", toast: { ...options, id } });
43
- return id;
44
- },
45
- /**
46
- * Function to create or update a toast.
47
- */
48
- upsert(options) {
49
- const { id } = options;
50
- const isVisible = id ? group.isVisible(id) : false;
51
- if (isVisible && id != null) {
52
- return group.update(id, options);
53
- } else {
54
- return group.create(options);
55
- }
56
- },
57
- /**
58
- * Function to dismiss a toast by id.
59
- * If no id is provided, all toasts will be dismissed.
60
- */
61
- dismiss(id) {
62
- if (id == null) {
63
- send("DISMISS_ALL");
64
- } else if (group.isVisible(id)) {
65
- send({ type: "DISMISS_TOAST", id });
66
- }
67
- },
68
- /**
69
- * Function to remove a toast by id.
70
- * If no id is provided, all toasts will be removed.
71
- */
72
- remove(id) {
73
- if (id == null) {
74
- send("REMOVE_ALL");
75
- } else if (group.isVisible(id)) {
76
- send({ type: "REMOVE_TOAST", id });
77
- }
78
- },
79
- /**
80
- * Function to dismiss all toasts by placement.
81
- */
82
- dismissByPlacement(placement) {
83
- const toasts = group.toastsByPlacement[placement];
84
- if (toasts) {
85
- toasts.forEach((toast) => group.dismiss(toast.id));
86
- }
87
- },
88
- /**
89
- * Function to update a toast's options by id.
90
- */
91
- update(id, options) {
92
- if (!group.isVisible(id))
93
- return;
94
- send({ type: "UPDATE_TOAST", id, toast: options });
95
- return id;
96
- },
97
- /**
98
- * Function to create a loading toast.
99
- */
100
- loading(options) {
101
- options.type = "loading";
102
- return group.upsert(options);
103
- },
104
- /**
105
- * Function to create a success toast.
106
- */
107
- success(options) {
108
- options.type = "success";
109
- return group.upsert(options);
110
- },
111
- /**
112
- * Function to create an error toast.
113
- */
114
- error(options) {
115
- options.type = "error";
116
- return group.upsert(options);
117
- },
118
- /**
119
- * Function to create a toast from a promise.
120
- * - When the promise resolves, the toast will be updated with the success options.
121
- * - When the promise rejects, the toast will be updated with the error options.
122
- */
123
- promise(promise, options, shared = {}) {
124
- const id = group.loading({ ...shared, ...options.loading });
125
- promise.then((response) => {
126
- const successOptions = utils.runIfFn(options.success, response);
127
- group.success({ ...shared, ...successOptions, id });
128
- }).catch((error) => {
129
- const errorOptions = utils.runIfFn(options.error, error);
130
- group.error({ ...shared, ...errorOptions, id });
131
- });
132
- return promise;
133
- },
134
- /**
135
- * Function to pause a toast by id.
136
- */
137
- pause(id) {
138
- if (id == null) {
139
- send("PAUSE_ALL");
140
- } else if (group.isVisible(id)) {
141
- send({ type: "PAUSE_TOAST", id });
142
- }
143
- },
144
- /**
145
- * Function to resume a toast by id.
146
- */
147
- resume(id) {
148
- if (id == null) {
149
- send("RESUME_ALL");
150
- } else if (group.isVisible(id)) {
151
- send({ type: "RESUME_TOAST", id });
152
- }
153
- },
154
- getGroupProps(options) {
155
- const { placement, label = "Notifications" } = options;
156
- return normalize.element({
157
- ...toast_anatomy.parts.group.attrs,
158
- tabIndex: -1,
159
- "aria-label": label,
160
- id: toast_dom.dom.getGroupId(placement),
161
- "data-placement": placement,
162
- "aria-live": "polite",
163
- role: "region",
164
- style: toast_utils.getGroupPlacementStyle(state.context, placement)
165
- });
166
- },
167
- subscribe(fn) {
168
- return core.subscribe(state.context.toasts, () => fn(state.context.toasts));
169
- }
170
- };
171
- Object.assign(toaster, group);
172
- return group;
173
- }
174
-
175
- exports.groupConnect = groupConnect;
176
- exports.toaster = toaster;
@@ -1,171 +0,0 @@
1
- import { subscribe } from '@zag-js/core';
2
- import { uuid, runIfFn } from '@zag-js/utils';
3
- import { parts } from './toast.anatomy.mjs';
4
- import { dom } from './toast.dom.mjs';
5
- import { getToastsByPlacement, getGroupPlacementStyle } from './toast.utils.mjs';
6
-
7
- let toaster = {};
8
- function groupConnect(state, send, normalize) {
9
- const group = {
10
- /**
11
- * The total number of toasts
12
- */
13
- count: state.context.count,
14
- /**
15
- * The active toasts
16
- */
17
- toasts: state.context.toasts,
18
- /**
19
- * The active toasts by placement
20
- */
21
- toastsByPlacement: getToastsByPlacement(state.context.toasts),
22
- /**
23
- * Returns whether the toast id is visible
24
- */
25
- isVisible(id) {
26
- if (!state.context.toasts.length)
27
- return false;
28
- return !!state.context.toasts.find((toast) => toast.id == id);
29
- },
30
- /**
31
- * Function to create a toast.
32
- */
33
- create(options) {
34
- const uid = `toast:${uuid()}`;
35
- const id = options.id ? options.id : uid;
36
- if (group.isVisible(id))
37
- return;
38
- send({ type: "ADD_TOAST", toast: { ...options, id } });
39
- return id;
40
- },
41
- /**
42
- * Function to create or update a toast.
43
- */
44
- upsert(options) {
45
- const { id } = options;
46
- const isVisible = id ? group.isVisible(id) : false;
47
- if (isVisible && id != null) {
48
- return group.update(id, options);
49
- } else {
50
- return group.create(options);
51
- }
52
- },
53
- /**
54
- * Function to dismiss a toast by id.
55
- * If no id is provided, all toasts will be dismissed.
56
- */
57
- dismiss(id) {
58
- if (id == null) {
59
- send("DISMISS_ALL");
60
- } else if (group.isVisible(id)) {
61
- send({ type: "DISMISS_TOAST", id });
62
- }
63
- },
64
- /**
65
- * Function to remove a toast by id.
66
- * If no id is provided, all toasts will be removed.
67
- */
68
- remove(id) {
69
- if (id == null) {
70
- send("REMOVE_ALL");
71
- } else if (group.isVisible(id)) {
72
- send({ type: "REMOVE_TOAST", id });
73
- }
74
- },
75
- /**
76
- * Function to dismiss all toasts by placement.
77
- */
78
- dismissByPlacement(placement) {
79
- const toasts = group.toastsByPlacement[placement];
80
- if (toasts) {
81
- toasts.forEach((toast) => group.dismiss(toast.id));
82
- }
83
- },
84
- /**
85
- * Function to update a toast's options by id.
86
- */
87
- update(id, options) {
88
- if (!group.isVisible(id))
89
- return;
90
- send({ type: "UPDATE_TOAST", id, toast: options });
91
- return id;
92
- },
93
- /**
94
- * Function to create a loading toast.
95
- */
96
- loading(options) {
97
- options.type = "loading";
98
- return group.upsert(options);
99
- },
100
- /**
101
- * Function to create a success toast.
102
- */
103
- success(options) {
104
- options.type = "success";
105
- return group.upsert(options);
106
- },
107
- /**
108
- * Function to create an error toast.
109
- */
110
- error(options) {
111
- options.type = "error";
112
- return group.upsert(options);
113
- },
114
- /**
115
- * Function to create a toast from a promise.
116
- * - When the promise resolves, the toast will be updated with the success options.
117
- * - When the promise rejects, the toast will be updated with the error options.
118
- */
119
- promise(promise, options, shared = {}) {
120
- const id = group.loading({ ...shared, ...options.loading });
121
- promise.then((response) => {
122
- const successOptions = runIfFn(options.success, response);
123
- group.success({ ...shared, ...successOptions, id });
124
- }).catch((error) => {
125
- const errorOptions = runIfFn(options.error, error);
126
- group.error({ ...shared, ...errorOptions, id });
127
- });
128
- return promise;
129
- },
130
- /**
131
- * Function to pause a toast by id.
132
- */
133
- pause(id) {
134
- if (id == null) {
135
- send("PAUSE_ALL");
136
- } else if (group.isVisible(id)) {
137
- send({ type: "PAUSE_TOAST", id });
138
- }
139
- },
140
- /**
141
- * Function to resume a toast by id.
142
- */
143
- resume(id) {
144
- if (id == null) {
145
- send("RESUME_ALL");
146
- } else if (group.isVisible(id)) {
147
- send({ type: "RESUME_TOAST", id });
148
- }
149
- },
150
- getGroupProps(options) {
151
- const { placement, label = "Notifications" } = options;
152
- return normalize.element({
153
- ...parts.group.attrs,
154
- tabIndex: -1,
155
- "aria-label": label,
156
- id: dom.getGroupId(placement),
157
- "data-placement": placement,
158
- "aria-live": "polite",
159
- role: "region",
160
- style: getGroupPlacementStyle(state.context, placement)
161
- });
162
- },
163
- subscribe(fn) {
164
- return subscribe(state.context.toasts, () => fn(state.context.toasts));
165
- }
166
- };
167
- Object.assign(toaster, group);
168
- return group;
169
- }
170
-
171
- export { groupConnect, toaster };
@@ -1,3 +0,0 @@
1
- import { Machine, StateMachine } from '@zag-js/core';
2
- import type { GroupMachineContext, UserDefinedGroupContext } from "./toast.types";
3
- export declare function groupMachine(userContext: UserDefinedGroupContext): Machine<GroupMachineContext, StateMachine.StateSchema, StateMachine.AnyEventObject>;
@@ -1,99 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
-
5
- const core = require('@zag-js/core');
6
- const domQuery = require('@zag-js/dom-query');
7
- const utils = require('@zag-js/utils');
8
- const toast_machine = require('./toast.machine.js');
9
-
10
- function groupMachine(userContext) {
11
- const ctx = utils.compact(userContext);
12
- return core.createMachine({
13
- id: "toaster",
14
- initial: "active",
15
- context: {
16
- dir: "ltr",
17
- max: Number.MAX_SAFE_INTEGER,
18
- toasts: [],
19
- gutter: "1rem",
20
- zIndex: domQuery.MAX_Z_INDEX,
21
- pauseOnPageIdle: false,
22
- pauseOnInteraction: true,
23
- offsets: { left: "0px", right: "0px", top: "0px", bottom: "0px" },
24
- ...ctx
25
- },
26
- computed: {
27
- count: (ctx2) => ctx2.toasts.length
28
- },
29
- on: {
30
- SETUP: {},
31
- PAUSE_TOAST: {
32
- actions: (_ctx, evt, { self }) => {
33
- self.sendChild("PAUSE", evt.id);
34
- }
35
- },
36
- PAUSE_ALL: {
37
- actions: (ctx2) => {
38
- ctx2.toasts.forEach((toast) => toast.send("PAUSE"));
39
- }
40
- },
41
- RESUME_TOAST: {
42
- actions: (_ctx, evt, { self }) => {
43
- self.sendChild("RESUME", evt.id);
44
- }
45
- },
46
- RESUME_ALL: {
47
- actions: (ctx2) => {
48
- ctx2.toasts.forEach((toast) => toast.send("RESUME"));
49
- }
50
- },
51
- ADD_TOAST: {
52
- guard: (ctx2) => ctx2.toasts.length < ctx2.max,
53
- actions: (ctx2, evt, { self }) => {
54
- const options = {
55
- ...evt.toast,
56
- pauseOnPageIdle: ctx2.pauseOnPageIdle,
57
- pauseOnInteraction: ctx2.pauseOnInteraction,
58
- dir: ctx2.dir,
59
- getRootNode: ctx2.getRootNode
60
- };
61
- const toast = toast_machine.createToastMachine(options);
62
- const actor = self.spawn(toast);
63
- ctx2.toasts.push(actor);
64
- }
65
- },
66
- UPDATE_TOAST: {
67
- actions: (_ctx, evt, { self }) => {
68
- self.sendChild({ type: "UPDATE", toast: evt.toast }, evt.id);
69
- }
70
- },
71
- DISMISS_TOAST: {
72
- actions: (_ctx, evt, { self }) => {
73
- self.sendChild("DISMISS", evt.id);
74
- }
75
- },
76
- DISMISS_ALL: {
77
- actions: (ctx2) => {
78
- ctx2.toasts.forEach((toast) => toast.send("DISMISS"));
79
- }
80
- },
81
- REMOVE_TOAST: {
82
- actions: (ctx2, evt, { self }) => {
83
- self.stopChild(evt.id);
84
- const index = ctx2.toasts.findIndex((toast) => toast.id === evt.id);
85
- ctx2.toasts.splice(index, 1);
86
- }
87
- },
88
- REMOVE_ALL: {
89
- actions: (ctx2, _evt, { self }) => {
90
- ctx2.toasts.forEach((toast) => self.stopChild(toast.id));
91
- while (ctx2.toasts.length)
92
- ctx2.toasts.pop();
93
- }
94
- }
95
- }
96
- });
97
- }
98
-
99
- exports.groupMachine = groupMachine;