@zag-js/toast 0.45.0 → 0.46.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../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","../src/index.ts"],"sourcesContent":["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 DefaultGenericOptions,\n GenericOptions,\n GroupMachineApi,\n GroupSend,\n GroupState,\n Options,\n} from \"./toast.types\"\nimport { getGroupPlacementStyle, getToastsByPlacement } from \"./toast.utils\"\n\nexport function groupConnect<T extends PropTypes, O extends GenericOptions = DefaultGenericOptions>(\n state: GroupState<O>,\n send: GroupSend,\n normalize: NormalizeProps<T>,\n): GroupMachineApi<T, O> {\n //\n const toastsByPlacement = getToastsByPlacement(state.context.toasts)\n\n function 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 create(options: Options<O>) {\n const uid = `toast:${uuid()}`\n const id = options.id ? options.id : uid\n\n if (isVisible(id)) return\n send({ type: \"ADD_TOAST\", toast: { ...options, id } })\n\n return id\n }\n\n function update(id: string, options: Options<O>) {\n if (!isVisible(id)) return\n send({ type: \"UPDATE_TOAST\", id, toast: options })\n return id\n }\n\n function upsert(options: Options<O>) {\n const { id } = options\n const visible = id ? isVisible(id) : false\n if (visible && id != null) {\n return update(id, options)\n } else {\n return create(options)\n }\n }\n\n function dismiss(id?: string) {\n if (id == null) {\n send(\"DISMISS_ALL\")\n } else if (isVisible(id)) {\n send({ type: \"DISMISS_TOAST\", id })\n }\n }\n\n return {\n count: state.context.count,\n toasts: state.context.toasts,\n toastsByPlacement,\n isVisible,\n\n create,\n update,\n upsert,\n dismiss,\n\n remove(id) {\n if (id == null) {\n send(\"REMOVE_ALL\")\n } else if (isVisible(id)) {\n send({ type: \"REMOVE_TOAST\", id })\n }\n },\n\n dismissByPlacement(placement) {\n const toasts = toastsByPlacement[placement]\n if (toasts) {\n toasts.forEach((toast) => dismiss(toast.id))\n }\n },\n loading(options) {\n return upsert({ ...options, type: \"loading\" })\n },\n success(options) {\n return upsert({ ...options, type: \"success\" })\n },\n error(options) {\n return upsert({ ...options, type: \"error\" })\n },\n\n promise(promise, options, shared = {}) {\n const id = upsert({ ...shared, ...options.loading, type: \"loading\" })\n\n promise\n .then((response) => {\n const successOptions = runIfFn(options.success, response)\n upsert({ ...shared, ...successOptions, id, type: \"success\" })\n })\n .catch((error) => {\n const errorOptions = runIfFn(options.error, error)\n upsert({ ...shared, ...errorOptions, id, type: \"error\" })\n })\n\n return promise\n },\n\n pause(id) {\n if (id == null) {\n send(\"PAUSE_ALL\")\n } else if (isVisible(id)) {\n send({ type: \"PAUSE_TOAST\", id })\n }\n },\n\n resume(id) {\n if (id == null) {\n send(\"RESUME_ALL\")\n } else if (isVisible(id)) {\n send({ type: \"RESUME_TOAST\", id })\n }\n },\n\n getGroupProps(options) {\n const { placement, label = \"Notifications\" } = options\n return normalize.element({\n ...parts.group.attrs,\n dir: state.context.dir,\n tabIndex: -1,\n \"aria-label\": `${placement} ${label}`,\n id: dom.getGroupId(placement),\n \"data-placement\": placement,\n \"aria-live\": \"polite\",\n role: \"region\",\n style: getGroupPlacementStyle(state.context, placement),\n })\n },\n\n subscribe(fn) {\n return subscribe(state.context.toasts, () => fn(state.context.toasts))\n },\n }\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 { 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})\n","import type { Style } from \"@zag-js/types\"\nimport type { GroupMachineContext, MachineContext, Placement, Service, GenericOptions, Type } from \"./toast.types\"\n\nexport function getToastsByPlacement<T extends GenericOptions>(toasts: Service<T>[]) {\n const result: Partial<Record<Placement, Service<T>[]>> = {}\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<T extends GenericOptions>(\n ctx: GroupMachineContext<T>,\n placement: Placement,\n): 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, MachineContext, GenericOptions, UserDefinedGroupContext } from \"./toast.types\"\n\nexport function groupMachine<T extends GenericOptions>(userContext: UserDefinedGroupContext<T>) {\n const ctx = compact(userContext)\n return createMachine<GroupMachineContext<T>>({\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 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: MachineContext<T> = {\n placement: ctx.placement,\n duration: ctx.duration,\n removeDelay: ctx.removeDelay,\n render: ctx.render,\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 as any)\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 { DefaultGenericOptions, MachineContext, MachineState, Options, GenericOptions } from \"./toast.types\"\nimport { getToastDuration } from \"./toast.utils\"\n\nconst { not, and, or } = guards\n\nexport function createToastMachine<T extends GenericOptions = DefaultGenericOptions>(options: Options<T> = {}) {\n const { type = \"info\", duration, id = \"toast\", placement = \"bottom\", removeDelay = 0, ...restProps } = options\n const ctx = compact(restProps)\n\n const computedDuration = getToastDuration(duration, type)\n\n return createMachine<MachineContext, MachineState>(\n {\n id,\n entry: \"invokeOnOpen\",\n initial: type === \"loading\" ? \"persist\" : \"active\",\n context: {\n id,\n type,\n remaining: computedDuration,\n duration: computedDuration,\n removeDelay,\n createdAt: Date.now(),\n placement,\n ...ctx,\n },\n\n on: {\n UPDATE: [\n {\n guard: and(\"hasTypeChanged\", \"isChangingToLoading\"),\n target: \"persist\",\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n {\n guard: or(\"hasDurationChanged\", \"hasTypeChanged\"),\n target: \"active:temp\",\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n {\n actions: [\"setContext\", \"invokeOnUpdate\"],\n },\n ],\n },\n\n states: {\n \"active:temp\": {\n tags: [\"visible\", \"updating\"],\n after: {\n 0: \"active\",\n },\n },\n\n persist: {\n tags: [\"visible\", \"paused\"],\n activities: \"trackDocumentVisibility\",\n on: {\n RESUME: {\n guard: not(\"isLoadingType\"),\n target: \"active\",\n actions: [\"setCreatedAt\"],\n },\n DISMISS: \"dismissing\",\n },\n },\n\n active: {\n tags: [\"visible\"],\n activities: \"trackDocumentVisibility\",\n after: {\n VISIBLE_DURATION: \"dismissing\",\n },\n on: {\n DISMISS: \"dismissing\",\n PAUSE: {\n target: \"persist\",\n actions: \"setRemainingDuration\",\n },\n },\n },\n\n dismissing: {\n entry: \"invokeOnClosing\",\n after: {\n REMOVE_DELAY: {\n target: \"inactive\",\n actions: \"notifyParentToRemove\",\n },\n },\n },\n\n inactive: {\n entry: \"invokeOnClose\",\n type: \"final\",\n },\n },\n },\n {\n activities: {\n trackDocumentVisibility(ctx, _evt, { send }) {\n if (!ctx.pauseOnPageIdle) return\n const doc = dom.getDoc(ctx)\n return addDomEvent(doc, \"visibilitychange\", () => {\n send(doc.visibilityState === \"hidden\" ? \"PAUSE\" : \"RESUME\")\n })\n },\n },\n\n guards: {\n isChangingToLoading: (_, evt) => evt.toast?.type === \"loading\",\n isLoadingType: (ctx) => ctx.type === \"loading\",\n hasTypeChanged: (ctx, evt) => evt.toast?.type !== ctx.type,\n hasDurationChanged: (ctx, evt) => evt.toast?.duration !== ctx.duration,\n },\n\n delays: {\n VISIBLE_DURATION: (ctx) => ctx.remaining,\n REMOVE_DELAY: (ctx) => ctx.removeDelay,\n },\n\n actions: {\n setRemainingDuration(ctx) {\n ctx.remaining -= Date.now() - ctx.createdAt\n },\n setCreatedAt(ctx) {\n ctx.createdAt = Date.now()\n },\n notifyParentToRemove(_ctx, _evt, { self }) {\n self.sendParent({ type: \"REMOVE_TOAST\", id: self.id })\n },\n invokeOnClosing(ctx) {\n ctx.onClosing?.()\n },\n invokeOnClose(ctx) {\n ctx.onClose?.()\n },\n invokeOnOpen(ctx) {\n ctx.onOpen?.()\n },\n invokeOnUpdate(ctx) {\n ctx.onUpdate?.()\n },\n setContext(ctx, evt) {\n const { duration, type } = evt.toast\n const time = getToastDuration(duration, type)\n Object.assign(ctx, { ...evt.toast, duration: time, remaining: time })\n },\n },\n },\n )\n}\n","import type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./toast.anatomy\"\nimport { dom } from \"./toast.dom\"\nimport type { MachineApi, Send, State, GenericOptions } from \"./toast.types\"\n\nexport function connect<T extends PropTypes, O extends GenericOptions>(\n state: State<O>,\n send: Send,\n normalize: NormalizeProps<T>,\n): MachineApi<T, O> {\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 rootProps: normalize.element({\n ...parts.root.attrs,\n dir: state.context.dir,\n id: dom.getRootId(state.context),\n \"data-state\": isVisible ? \"open\" : \"closed\",\n \"data-type\": state.context.type,\n \"data-placement\": placement,\n role: \"status\",\n \"aria-atomic\": \"true\",\n tabIndex: 0,\n style: {\n position: \"relative\",\n pointerEvents: \"auto\",\n margin: \"calc(var(--toast-gutter) / 2)\",\n \"--remove-delay\": `${state.context.removeDelay}ms`,\n \"--duration\": `${state.context.duration}ms`,\n },\n onKeyDown(event) {\n if (event.key == \"Escape\") {\n send(\"DISMISS\")\n event.preventDefault()\n }\n },\n onFocus() {\n if (pauseOnInteraction) {\n send(\"PAUSE\")\n }\n },\n onBlur() {\n if (pauseOnInteraction) {\n send(\"RESUME\")\n }\n },\n onPointerEnter() {\n if (pauseOnInteraction) {\n send(\"PAUSE\")\n }\n },\n onPointerLeave() {\n if (pauseOnInteraction) {\n send(\"RESUME\")\n }\n },\n }),\n\n titleProps: normalize.element({\n ...parts.title.attrs,\n id: dom.getTitleId(state.context),\n }),\n\n descriptionProps: normalize.element({\n ...parts.description.attrs,\n id: dom.getDescriptionId(state.context),\n }),\n\n closeTriggerProps: normalize.button({\n id: dom.getCloseTriggerId(state.context),\n ...parts.closeTrigger.attrs,\n type: \"button\",\n \"aria-label\": \"Dismiss notification\",\n onClick() {\n send(\"DISMISS\")\n },\n }),\n }\n}\n","import { groupConnect } 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 MachineApi as Api,\n GroupMachineApi as GroupApi,\n GroupMachineContext,\n GroupProps,\n GroupState,\n MachineContext,\n GenericOptions,\n DefaultGenericOptions,\n Placement,\n PromiseOptions,\n Service,\n ToastOptions,\n Type,\n} from \"./toast.types\"\nexport { createMachine }\n\nexport const group = {\n connect: groupConnect,\n machine: groupMachine,\n}\n"],"mappings":"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","names":["offset","createMachine","compact","ctx","duration","type","compact","createMachine","ctx"]}
1
+ {"version":3,"sources":["../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","../src/index.ts"],"sourcesContent":["import { isMachine, subscribe } from \"@zag-js/core\"\nimport { contains } from \"@zag-js/dom-query\"\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 { GroupMachineApi, GroupSend, GroupService, GroupState, Options } from \"./toast.types\"\nimport { getGroupPlacementStyle, getToastsByPlacement } from \"./toast.utils\"\n\nexport function groupConnect<T extends PropTypes, O = any>(\n serviceOrState: GroupState<O> | GroupService<O>,\n send: GroupSend,\n normalize: NormalizeProps<T>,\n): GroupMachineApi<T, O> {\n //\n\n function getState(): GroupState<O> {\n const result = isMachine(serviceOrState) ? serviceOrState.getState() : serviceOrState\n return result as GroupState<O>\n }\n\n function getToastsByPlacementImpl() {\n return getToastsByPlacement(getState().context.toasts)\n }\n\n function isVisible(id: string) {\n const toasts = getState().context.toasts\n if (!toasts.length) return false\n return !!toasts.find((toast) => toast.id == id)\n }\n\n function create(options: Options<O>) {\n const uid = `toast:${uuid()}`\n const id = options.id ? options.id : uid\n\n if (isVisible(id)) return id\n send({ type: \"ADD_TOAST\", toast: { ...options, id } })\n\n return id\n }\n\n function update(id: string, options: Options<O>) {\n if (!isVisible(id)) return id\n send({ type: \"UPDATE_TOAST\", id, toast: options })\n return id\n }\n\n function upsert(options: Options<O>) {\n const { id } = options\n const visible = id ? isVisible(id) : false\n if (visible && id != null) {\n return update(id, options)\n } else {\n return create(options)\n }\n }\n\n function dismiss(id?: string) {\n if (id == null) {\n send(\"DISMISS_ALL\")\n } else if (isVisible(id)) {\n send({ type: \"DISMISS_TOAST\", id })\n }\n }\n\n return {\n getCount() {\n return getState().context.count\n },\n getToasts() {\n return getState().context.toasts\n },\n getToastsByPlacement: getToastsByPlacementImpl,\n isVisible,\n create,\n update,\n upsert,\n dismiss,\n\n remove(id) {\n if (id == null) {\n send(\"REMOVE_ALL\")\n } else if (isVisible(id)) {\n send({ type: \"REMOVE_TOAST\", id })\n }\n },\n\n dismissByPlacement(placement) {\n const toastsByPlacement = getToastsByPlacementImpl()\n const toasts = toastsByPlacement[placement]\n if (!toasts) return\n toasts.forEach((toast) => dismiss(toast.id))\n },\n loading(options) {\n return upsert({ ...options, type: \"loading\" })\n },\n success(options) {\n return upsert({ ...options, type: \"success\" })\n },\n error(options) {\n return upsert({ ...options, type: \"error\" })\n },\n\n promise(promise, options, shared = {}) {\n const id = upsert({ ...shared, ...options.loading, type: \"loading\" })\n\n runIfFn(promise)\n .then((response) => {\n const successOptions = runIfFn(options.success, response)\n upsert({ ...shared, ...successOptions, id, type: \"success\" })\n })\n .catch((error) => {\n const errorOptions = runIfFn(options.error, error)\n upsert({ ...shared, ...errorOptions, id, type: \"error\" })\n })\n .finally(() => {\n options.finally?.()\n })\n\n return id\n },\n\n pause(id) {\n if (id == null) {\n send(\"PAUSE_ALL\")\n } else if (isVisible(id)) {\n send({ type: \"PAUSE_TOAST\", id })\n }\n },\n\n resume(id) {\n if (id == null) {\n send(\"RESUME_ALL\")\n } else if (isVisible(id)) {\n send({ type: \"RESUME_TOAST\", id })\n }\n },\n\n getGroupProps(options) {\n const { placement, label = \"Notifications\" } = options\n const state = getState()\n const hotkeyLabel = state.context.hotkey.join(\"+\").replace(/Key/g, \"\").replace(/Digit/g, \"\")\n const [side, align = \"center\"] = placement.split(\"-\")\n\n return normalize.element({\n ...parts.group.attrs,\n dir: state.context.dir,\n tabIndex: -1,\n \"aria-label\": `${placement} ${label} ${hotkeyLabel}`,\n id: dom.getRegionId(placement),\n \"data-placement\": placement,\n \"data-side\": side,\n \"data-align\": align,\n \"aria-live\": \"polite\",\n role: \"region\",\n style: getGroupPlacementStyle(state.context, placement),\n onMouseMove() {\n send({ type: \"REGION.POINTER_ENTER\", placement })\n },\n onMouseLeave() {\n send({ type: \"REGION.POINTER_LEAVE\", placement })\n },\n onFocus(event) {\n send({ type: \"REGION.FOCUS\", target: event.relatedTarget })\n },\n onBlur(event) {\n if (state.context.isFocusWithin && !contains(event.currentTarget, event.relatedTarget)) {\n send({ type: \"REGION.BLUR\" })\n }\n },\n })\n },\n\n subscribe(fn) {\n const state = getState()\n return subscribe(state.context.toasts, () => {\n const toasts = getToastsByPlacementImpl()[state.context.placement!] ?? []\n const contexts = toasts.map((toast) => toast.getState().context)\n fn(contexts)\n })\n },\n }\n}\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"toast\").parts(\n \"group\",\n \"root\",\n \"ghost\",\n \"title\",\n \"description\",\n \"actionTrigger\",\n \"closeTrigger\",\n)\n\nexport const parts = anatomy.build()\n","import { createScope } from \"@zag-js/dom-query\"\nimport type { MachineContext as Ctx, Placement, GroupMachineContext as GroupCtx } from \"./toast.types\"\n\nexport const dom = createScope({\n getRegionId: (placement: Placement) => `toast-group:${placement}`,\n getRegionEl: (ctx: GroupCtx, placement: Placement) => dom.getById(ctx, `toast-group:${placement}`),\n\n getRootId: (ctx: Ctx) => `toast:${ctx.id}`,\n getRootEl: (ctx: Ctx) => dom.getById(ctx, dom.getRootId(ctx)),\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})\n","import { MAX_Z_INDEX } from \"@zag-js/dom-query\"\nimport type { Style } from \"@zag-js/types\"\nimport type { GroupMachineContext, MachineContext, Placement, Service, Type } from \"./toast.types\"\n\nexport function getToastsByPlacement<T>(toasts: Service<T>[]) {\n const result: Partial<Record<Placement, Service<T>[]>> = {}\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 DEFAULT: 5000,\n}\n\nexport function getToastDuration(duration: number | undefined, type: MachineContext[\"type\"]) {\n return duration ?? defaultTimeouts[type] ?? defaultTimeouts.DEFAULT\n}\n\nexport function getGroupPlacementStyle<T>(ctx: GroupMachineContext<T>, 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 \"--gap\": `${ctx.gap}px`,\n \"--first-height\": `${ctx.heights[0]?.height || 0}px`,\n zIndex: MAX_Z_INDEX,\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 = `max(env(safe-area-inset-top, 0px), ${offset})`\n }\n\n if (computedPlacement.includes(\"bottom\")) {\n const offset = computedOffset.bottom\n styles.bottom = `max(env(safe-area-inset-bottom, 0px), ${offset})`\n }\n\n if (!computedPlacement.includes(\"left\")) {\n const offset = computedOffset.right\n styles.insetInlineEnd = `calc(env(safe-area-inset-right, 0px) + ${offset})`\n }\n\n if (!computedPlacement.includes(\"right\")) {\n const offset = computedOffset.left\n styles.insetInlineStart = `calc(env(safe-area-inset-left, 0px) + ${offset})`\n }\n\n return styles\n}\n\nexport function getPlacementStyle<T>(ctx: MachineContext<T>, visible: boolean): Style {\n const [side] = ctx.placement!.split(\"-\")\n const sibling = !ctx.frontmost\n const overlap = !ctx.stacked\n\n const styles: Style = {\n position: \"absolute\",\n pointerEvents: \"auto\",\n \"--opacity\": \"0\",\n \"--remove-delay\": `${ctx.removeDelay}ms`,\n \"--duration\": `${ctx.type === \"loading\" ? Number.MAX_SAFE_INTEGER : ctx.duration}ms`,\n \"--initial-height\": `${ctx.height}px`,\n \"--offset\": `${ctx.offset}px`,\n \"--index\": ctx.index,\n \"--z-index\": ctx.zIndex,\n \"--lift-amount\": \"calc(var(--lift) * var(--gap))\",\n \"--y\": \"100%\",\n \"--x\": \"0\",\n }\n\n const assign = (overrides: Style) => Object.assign(styles, overrides)\n\n if (side === \"top\") {\n //\n assign({\n top: \"0\",\n \"--sign\": \"-1\",\n \"--y\": \"-100%\",\n \"--lift\": \"1\",\n })\n //\n } else if (side === \"bottom\") {\n //\n assign({\n bottom: \"0\",\n \"--sign\": \"1\",\n \"--y\": \"100%\",\n \"--lift\": \"-1\",\n })\n }\n\n if (ctx.mounted) {\n assign({\n \"--y\": \"0\",\n \"--opacity\": \"1\",\n })\n\n if (ctx.stacked) {\n assign({\n \"--y\": \"calc(var(--lift) * var(--offset))\",\n \"--height\": \"var(--initial-height)\",\n })\n }\n }\n\n if (!visible) {\n assign({\n \"--opacity\": \"0\",\n pointerEvents: \"none\",\n })\n }\n\n if (sibling && overlap) {\n assign({\n \"--base-scale\": \"var(--index) * 0.05 + 1\",\n \"--y\": \"calc(var(--lift-amount) * var(--index))\",\n \"--scale\": \"calc(-1 * var(--base-scale))\",\n \"--height\": \"var(--first-height)\",\n })\n\n if (!visible) {\n assign({\n \"--y\": \"calc(var(--sign) * 40%)\",\n })\n }\n }\n\n if (sibling && ctx.stacked && !visible) {\n assign({\n \"--y\": \"calc(var(--lift) * var(--offset) + var(--lift) * -100%)\",\n })\n }\n\n if (ctx.frontmost && !visible) {\n assign({\n \"--y\": \"calc(var(--lift) * -100%)\",\n })\n }\n\n return styles\n}\n\nexport function getGhostBeforeStyle<T>(ctx: MachineContext<T>, visible: boolean): Style {\n const styles: Style = {\n position: \"absolute\",\n inset: \"0\",\n scale: \"1 2\",\n pointerEvents: visible ? \"none\" : \"auto\",\n }\n\n const assign = (overrides: Style) => Object.assign(styles, overrides)\n\n if (ctx.frontmost && !visible) {\n assign({\n height: \"calc(var(--initial-height) + 80%)\",\n })\n }\n\n return styles\n}\n\nexport function getGhostAfterStyle<T>(_ctx: MachineContext<T>, _visible: boolean): Style {\n return {\n position: \"absolute\",\n left: \"0\",\n height: \"calc(var(--gap) + 2px)\",\n bottom: \"100%\",\n width: \"100%\",\n }\n}\n","import { createMachine, ref } from \"@zag-js/core\"\nimport { trackDismissableBranch } from \"@zag-js/dismissable\"\nimport { addDomEvent } from \"@zag-js/dom-event\"\nimport { compact } from \"@zag-js/utils\"\nimport { dom } from \"./toast.dom\"\nimport { createToastMachine } from \"./toast.machine\"\nimport type {\n GroupMachineContext,\n GroupMachineState,\n MachineContext,\n Service,\n UserDefinedGroupContext,\n} from \"./toast.types\"\nimport { getToastsByPlacement } from \"./toast.utils\"\n\nexport function groupMachine<T = any>(userContext: UserDefinedGroupContext) {\n const ctx = compact(userContext)\n return createMachine<GroupMachineContext<T>, GroupMachineState>(\n {\n id: \"toaster\",\n initial: ctx.overlap ? \"overlap\" : \"stack\",\n context: {\n dir: \"ltr\",\n max: Number.MAX_SAFE_INTEGER,\n toasts: [],\n gap: 16,\n pauseOnPageIdle: false,\n hotkey: [\"altKey\", \"KeyT\"],\n offsets: \"1rem\",\n placement: \"bottom\",\n removeDelay: 200,\n ...ctx,\n lastFocusedEl: null,\n isFocusWithin: false,\n heights: [],\n },\n\n computed: {\n count: (ctx) => ctx.toasts.length,\n },\n\n activities: [\"trackDocumentVisibility\", \"trackHotKeyPress\"],\n\n watch: {\n toasts: [\"collapsedIfEmpty\", \"setDismissableBranch\"],\n },\n\n exit: [\"removeToasts\", \"clearDismissableBranch\", \"clearLastFocusedEl\"],\n\n on: {\n PAUSE_TOAST: {\n actions: [\"pauseToast\"],\n },\n PAUSE_ALL: {\n actions: [\"pauseToasts\"],\n },\n RESUME_TOAST: {\n actions: [\"resumeToast\"],\n },\n RESUME_ALL: {\n actions: [\"resumeToasts\"],\n },\n ADD_TOAST: {\n guard: \"isWithinRange\",\n actions: [\"createToast\", \"syncToastIndex\"],\n },\n UPDATE_TOAST: {\n actions: [\"updateToast\"],\n },\n DISMISS_TOAST: {\n actions: [\"dismissToast\"],\n },\n DISMISS_ALL: {\n actions: [\"dismissToasts\"],\n },\n REMOVE_TOAST: {\n actions: [\"removeToast\", \"syncToastIndex\", \"syncToastOffset\"],\n },\n REMOVE_ALL: {\n actions: [\"removeToasts\"],\n },\n UPDATE_HEIGHT: {\n actions: [\"syncHeights\", \"syncToastOffset\"],\n },\n \"DOC.HOTKEY\": {\n actions: [\"focusRegionEl\"],\n },\n \"REGION.BLUR\": [\n {\n guard: \"isOverlapping\",\n target: \"overlap\",\n actions: [\"resumeToasts\", \"restoreLastFocusedEl\"],\n },\n {\n actions: [\"resumeToasts\", \"restoreLastFocusedEl\"],\n },\n ],\n },\n\n states: {\n stack: {\n entry: [\"expandToasts\"],\n on: {\n \"REGION.POINTER_LEAVE\": [\n {\n guard: \"isOverlapping\",\n target: \"overlap\",\n actions: [\"resumeToasts\"],\n },\n {\n actions: [\"resumeToasts\"],\n },\n ],\n \"REGION.OVERLAP\": {\n target: \"overlap\",\n },\n \"REGION.FOCUS\": {\n actions: [\"setLastFocusedEl\", \"pauseToasts\"],\n },\n \"REGION.POINTER_ENTER\": {\n actions: [\"pauseToasts\"],\n },\n },\n },\n overlap: {\n entry: [\"collapseToasts\"],\n on: {\n \"REGION.STACK\": {\n target: \"stack\",\n },\n \"REGION.POINTER_ENTER\": {\n target: \"stack\",\n actions: [\"pauseToasts\"],\n },\n \"REGION.FOCUS\": {\n target: \"stack\",\n actions: [\"setLastFocusedEl\", \"pauseToasts\"],\n },\n },\n },\n },\n },\n {\n guards: {\n isWithinRange: (ctx) => ctx.toasts.length < ctx.max,\n isOverlapping: (ctx) => !!ctx.overlap,\n },\n activities: {\n trackHotKeyPress(ctx, _evt, { send }) {\n const handleKeyDown = (event: KeyboardEvent) => {\n const isHotkeyPressed = ctx.hotkey.every((key) => (event as any)[key] || event.code === key)\n if (!isHotkeyPressed) return\n send({ type: \"DOC.HOTKEY\" })\n }\n return addDomEvent(document, \"keydown\", handleKeyDown, { capture: true })\n },\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_ALL\" : \"RESUME_ALL\")\n })\n },\n },\n actions: {\n setDismissableBranch(ctx) {\n const toastsByPlacement = getToastsByPlacement(ctx.toasts)\n const currentToasts = toastsByPlacement[ctx.placement] ?? []\n\n const hasToasts = currentToasts.length > 0\n\n if (!hasToasts) {\n ctx._cleanup?.()\n return\n }\n\n if (hasToasts && ctx._cleanup) {\n return\n }\n\n // mark toast as a dismissable branch\n // so that interacting with them will not close dismissable layers\n const groupEl = () => dom.getRegionEl(ctx, ctx.placement)\n ctx._cleanup = trackDismissableBranch(groupEl, { defer: true })\n },\n clearDismissableBranch(ctx) {\n ctx._cleanup?.()\n },\n focusRegionEl(ctx) {\n queueMicrotask(() => {\n dom.getRegionEl(ctx, ctx.placement)?.focus()\n })\n },\n expandToasts(ctx) {\n each(ctx, (toast) => {\n toast.state.context.stacked = true\n })\n },\n collapseToasts(ctx) {\n each(ctx, (toast) => {\n toast.state.context.stacked = false\n })\n },\n collapsedIfEmpty(ctx, _evt, { send }) {\n if (!ctx.overlap || ctx.toasts.length > 1) return\n send(\"REGION.OVERLAP\")\n },\n pauseToast(_ctx, evt, { self }) {\n self.sendChild(\"PAUSE\", evt.id)\n },\n pauseToasts(ctx) {\n ctx.toasts.forEach((toast) => toast.send(\"PAUSE\"))\n },\n resumeToast(_ctx, evt, { self }) {\n self.sendChild(\"RESUME\", evt.id)\n },\n resumeToasts(ctx) {\n ctx.toasts.forEach((toast) => toast.send(\"RESUME\"))\n },\n measureToasts(ctx) {\n ctx.toasts.forEach((toast) => toast.send(\"MEASURE\"))\n },\n createToast(ctx, evt, { self, getState }) {\n const options: MachineContext<T> = {\n placement: ctx.placement,\n duration: ctx.duration,\n removeDelay: ctx.removeDelay,\n ...evt.toast,\n dir: ctx.dir,\n getRootNode: ctx.getRootNode,\n stacked: getState().matches(\"stack\"),\n }\n\n const toast = createToastMachine(options)\n\n const actor = self.spawn(toast)\n ctx.toasts = [actor, ...ctx.toasts]\n },\n updateToast(_ctx, evt, { self }) {\n self.sendChild({ type: \"UPDATE\", toast: evt.toast }, evt.id)\n },\n dismissToast(_ctx, evt, { self }) {\n self.sendChild(\"DISMISS\", evt.id)\n },\n dismissToasts(ctx) {\n ctx.toasts.forEach((toast) => toast.send(\"DISMISS\"))\n },\n removeToast(ctx, evt, { self }) {\n self.stopChild(evt.id)\n ctx.toasts = ctx.toasts.filter((toast) => toast.id !== evt.id)\n ctx.heights = ctx.heights.filter((height) => height.id !== evt.id)\n },\n removeToasts(ctx, _evt, { self }) {\n ctx.toasts.forEach((toast) => self.stopChild(toast.id))\n ctx.toasts = []\n ctx.heights = []\n },\n syncHeights(ctx, evt) {\n const existing = ctx.heights.find((height) => height.id === evt.id)\n if (existing) {\n existing.height = evt.height\n existing.placement = evt.placement\n } else {\n const newHeight = { id: evt.id, height: evt.height, placement: evt.placement }\n ctx.heights = [newHeight, ...ctx.heights]\n }\n },\n syncToastIndex(ctx) {\n each(ctx, (toast, index, toasts) => {\n // Note: This is an intentional side effect\n // consider writing directly to the DOM (root element)\n toast.state.context.index = index\n toast.state.context.frontmost = index === 0\n toast.state.context.zIndex = toasts.length - index\n })\n },\n syncToastOffset(ctx, evt) {\n const placement = evt.placement ?? ctx.placement\n\n // Notify each toast of it's index\n each({ ...ctx, placement }, (toast) => {\n const heightIndex = Math.max(\n ctx.heights.findIndex((height) => height.id === toast.id),\n 0,\n )\n\n // calculate offset until toast\n const toastsHeightBefore = ctx.heights.reduce((prev, curr, reducerIndex) => {\n if (reducerIndex >= heightIndex) return prev\n return prev + curr.height\n }, 0)\n\n // Note: This is an intentional side effect\n // consider writing directly to the DOM (root element)\n toast.state.context.offset = heightIndex * ctx.gap + toastsHeightBefore\n })\n },\n setLastFocusedEl(ctx, evt) {\n if (ctx.isFocusWithin || !evt.target) return\n ctx.isFocusWithin = true\n ctx.lastFocusedEl = ref(evt.target)\n },\n restoreLastFocusedEl(ctx) {\n ctx.isFocusWithin = false\n if (!ctx.lastFocusedEl) return\n ctx.lastFocusedEl.focus({ preventScroll: true })\n ctx.lastFocusedEl = null\n },\n clearLastFocusedEl(ctx) {\n if (!ctx.lastFocusedEl) return\n ctx.lastFocusedEl.focus({ preventScroll: true })\n ctx.lastFocusedEl = null\n ctx.isFocusWithin = false\n },\n },\n },\n )\n}\n\nfunction each(ctx: GroupMachineContext, fn: (toast: Service<any>, index: number, arr: Service<any>[]) => void) {\n const toastsByPlacement = getToastsByPlacement(ctx.toasts)\n const currentToasts = toastsByPlacement[ctx.placement] ?? []\n currentToasts.forEach(fn)\n}\n","import { createMachine, guards } from \"@zag-js/core\"\nimport { queryAll, raf } from \"@zag-js/dom-query\"\nimport { compact, warn } 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<T>(options: Options<T>) {\n const { type = \"info\", duration, id = \"1\", placement = \"bottom\", removeDelay = 200, ...restProps } = options\n const ctx = compact(restProps)\n\n const computedDuration = getToastDuration(duration, type)\n\n return createMachine<MachineContext<T>, MachineState>(\n {\n id,\n context: {\n id,\n type,\n remaining: computedDuration,\n duration: computedDuration,\n removeDelay,\n createdAt: Date.now(),\n placement,\n ...ctx,\n height: 0,\n offset: 0,\n frontmost: false,\n mounted: false,\n index: -1,\n zIndex: 0,\n },\n\n initial: type === \"loading\" ? \"visible:persist\" : \"visible\",\n\n on: {\n UPDATE: [\n {\n guard: and(\"hasTypeChanged\", \"isChangingToLoading\"),\n target: \"visible:persist\",\n actions: [\"setContext\"],\n },\n {\n guard: or(\"hasDurationChanged\", \"hasTypeChanged\"),\n target: \"visible:updating\",\n actions: [\"setContext\"],\n },\n {\n actions: [\"setContext\"],\n },\n ],\n MEASURE: {\n actions: [\"measureHeight\"],\n },\n },\n\n entry: [\"invokeOnVisible\"],\n\n activities: [\"trackHeight\"],\n\n states: {\n \"visible:updating\": {\n tags: [\"visible\", \"updating\"],\n after: {\n 0: \"visible\",\n },\n },\n\n \"visible:persist\": {\n tags: [\"visible\", \"paused\"],\n on: {\n RESUME: {\n guard: not(\"isLoadingType\"),\n target: \"visible\",\n actions: [\"setCreatedAt\"],\n },\n DISMISS: \"dismissing\",\n },\n },\n\n visible: {\n tags: [\"visible\"],\n after: {\n VISIBLE_DURATION: \"dismissing\",\n },\n on: {\n DISMISS: \"dismissing\",\n PAUSE: {\n target: \"visible:persist\",\n actions: \"setRemainingDuration\",\n },\n },\n },\n\n dismissing: {\n entry: \"invokeOnDismiss\",\n after: {\n REMOVE_DELAY: {\n target: \"unmounted\",\n actions: \"notifyParentToRemove\",\n },\n },\n },\n\n unmounted: {\n entry: \"invokeOnUnmount\",\n type: \"final\",\n },\n },\n },\n {\n activities: {\n trackHeight(ctx, _evt, { self }) {\n let cleanup: VoidFunction\n raf(() => {\n const rootEl = dom.getRootEl(ctx)\n if (!rootEl) return\n ctx.mounted = true\n\n const ghosts = queryAll(rootEl, \"[data-part=ghost]\")\n\n warn(\n ghosts.length !== 2,\n \"[toast] No ghost element found in toast. Render the `ghostBefore` and `ghostAfter` elements\",\n )\n\n const syncHeight = () => {\n const originalHeight = rootEl.style.height\n rootEl.style.height = \"auto\"\n const newHeight = rootEl.offsetHeight\n rootEl.style.height = originalHeight\n\n ctx.height = newHeight\n self.sendParent({ type: \"UPDATE_HEIGHT\", id: self.id, height: newHeight, placement: ctx.placement })\n }\n\n syncHeight()\n\n const win = dom.getWin(ctx)\n\n const observer = new win.MutationObserver(syncHeight)\n observer.observe(rootEl, { childList: true, subtree: true, characterData: true })\n\n cleanup = () => observer.disconnect()\n })\n\n return () => cleanup?.()\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 measureHeight(ctx, _evt, { self }) {\n raf(() => {\n const rootEl = dom.getRootEl(ctx)\n if (!rootEl) return\n\n ctx.mounted = true\n\n const originalHeight = rootEl.style.height\n rootEl.style.height = \"auto\"\n\n const newHeight = rootEl.offsetHeight\n rootEl.style.height = originalHeight\n ctx.height = newHeight\n\n self.sendParent({ type: \"UPDATE_HEIGHT\", id: self.id, height: newHeight, placement: ctx.placement })\n })\n },\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 invokeOnDismiss(ctx) {\n ctx.onStatusChange?.({ status: \"dismissing\" })\n },\n invokeOnUnmount(ctx) {\n ctx.onStatusChange?.({ status: \"unmounted\" })\n },\n invokeOnVisible(ctx) {\n ctx.onStatusChange?.({ status: \"visible\" })\n },\n setContext(ctx, evt) {\n const { duration, type } = evt.toast\n if (duration == null && type == null) {\n Object.assign(ctx, evt.toast)\n } else {\n const time = getToastDuration(duration, type)\n Object.assign(ctx, { ...evt.toast, duration: time, remaining: time })\n }\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 { MachineApi, Send, State } from \"./toast.types\"\nimport { getGhostAfterStyle, getGhostBeforeStyle, getPlacementStyle } from \"./toast.utils\"\n\nexport function connect<T extends PropTypes, O>(\n state: State<O>,\n send: Send,\n normalize: NormalizeProps<T>,\n): MachineApi<T, O> {\n const isVisible = state.hasTag(\"visible\")\n const isPaused = state.hasTag(\"paused\")\n\n const placement = state.context.placement!\n const type = state.context.type\n\n const [side, align = \"center\"] = placement.split(\"-\")\n\n return {\n type: 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 rootProps: normalize.element({\n ...parts.root.attrs,\n dir: state.context.dir,\n id: dom.getRootId(state.context),\n \"data-state\": isVisible ? \"open\" : \"closed\",\n \"data-type\": type,\n \"data-placement\": placement,\n \"data-align\": align,\n \"data-side\": side,\n \"data-mounted\": dataAttr(state.context.mounted),\n \"data-paused\": dataAttr(isPaused),\n\n \"data-first\": dataAttr(state.context.frontmost),\n \"data-sibling\": dataAttr(!state.context.frontmost),\n \"data-stack\": dataAttr(state.context.stacked),\n \"data-overlap\": dataAttr(!state.context.stacked),\n\n role: \"status\",\n \"aria-atomic\": \"true\",\n tabIndex: 0,\n style: getPlacementStyle(state.context, isVisible),\n onKeyDown(event) {\n if (event.key == \"Escape\") {\n send(\"DISMISS\")\n event.preventDefault()\n }\n },\n }),\n\n /* Leave a ghost div to avoid setting hover to false when transitioning out */\n ghostBeforeProps: normalize.element({\n ...parts.ghost.attrs,\n \"data-type\": \"before\",\n style: getGhostBeforeStyle(state.context, isVisible),\n }),\n\n /* Needed to avoid setting hover to false when in between toasts */\n ghostAfterProps: normalize.element({\n ...parts.ghost.attrs,\n \"data-type\": \"after\",\n style: getGhostAfterStyle(state.context, isVisible),\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 actionTriggerProps: normalize.button({\n ...parts.actionTrigger.attrs,\n type: \"button\",\n onClick() {\n send(\"DISMISS\")\n },\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","import { groupConnect } 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 MachineApi as Api,\n GenericOptions,\n GroupMachineApi as GroupApi,\n GroupMachineContext,\n GroupProps,\n GroupService,\n GroupState,\n MachineContext,\n Placement,\n PromiseOptions,\n Service,\n StatusChangeDetails,\n Options,\n Status,\n Type,\n} from \"./toast.types\"\nexport { createMachine }\n\nexport const group = {\n connect: groupConnect,\n machine: groupMachine,\n}\n"],"mappings":"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","names":["offset","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.45.0",
3
+ "version": "0.46.0",
4
4
  "description": "Core logic for the toast widget implemented as a state machine",
5
5
  "keywords": [
6
6
  "js",
@@ -27,12 +27,13 @@
27
27
  "url": "https://github.com/chakra-ui/zag/issues"
28
28
  },
29
29
  "dependencies": {
30
- "@zag-js/anatomy": "0.45.0",
31
- "@zag-js/core": "0.45.0",
32
- "@zag-js/dom-query": "0.45.0",
33
- "@zag-js/dom-event": "0.45.0",
34
- "@zag-js/utils": "0.45.0",
35
- "@zag-js/types": "0.45.0"
30
+ "@zag-js/anatomy": "0.46.0",
31
+ "@zag-js/core": "0.46.0",
32
+ "@zag-js/dom-query": "0.46.0",
33
+ "@zag-js/dismissable": "0.46.0",
34
+ "@zag-js/dom-event": "0.46.0",
35
+ "@zag-js/utils": "0.46.0",
36
+ "@zag-js/types": "0.46.0"
36
37
  },
37
38
  "devDependencies": {
38
39
  "clean-package": "2.2.0"
package/src/index.ts CHANGED
@@ -6,17 +6,19 @@ export { anatomy } from "./toast.anatomy"
6
6
  export { connect } from "./toast.connect"
7
7
  export type {
8
8
  MachineApi as Api,
9
+ GenericOptions,
9
10
  GroupMachineApi as GroupApi,
10
11
  GroupMachineContext,
11
12
  GroupProps,
13
+ GroupService,
12
14
  GroupState,
13
15
  MachineContext,
14
- GenericOptions,
15
- DefaultGenericOptions,
16
16
  Placement,
17
17
  PromiseOptions,
18
18
  Service,
19
- ToastOptions,
19
+ StatusChangeDetails,
20
+ Options,
21
+ Status,
20
22
  Type,
21
23
  } from "./toast.types"
22
24
  export { createMachine }
@@ -1,43 +1,46 @@
1
- import { subscribe } from "@zag-js/core"
1
+ import { isMachine, subscribe } from "@zag-js/core"
2
+ import { contains } from "@zag-js/dom-query"
2
3
  import type { NormalizeProps, PropTypes } from "@zag-js/types"
3
4
  import { runIfFn, uuid } from "@zag-js/utils"
4
5
  import { parts } from "./toast.anatomy"
5
6
  import { dom } from "./toast.dom"
6
- import type {
7
- DefaultGenericOptions,
8
- GenericOptions,
9
- GroupMachineApi,
10
- GroupSend,
11
- GroupState,
12
- Options,
13
- } from "./toast.types"
7
+ import type { GroupMachineApi, GroupSend, GroupService, GroupState, Options } from "./toast.types"
14
8
  import { getGroupPlacementStyle, getToastsByPlacement } from "./toast.utils"
15
9
 
16
- export function groupConnect<T extends PropTypes, O extends GenericOptions = DefaultGenericOptions>(
17
- state: GroupState<O>,
10
+ export function groupConnect<T extends PropTypes, O = any>(
11
+ serviceOrState: GroupState<O> | GroupService<O>,
18
12
  send: GroupSend,
19
13
  normalize: NormalizeProps<T>,
20
14
  ): GroupMachineApi<T, O> {
21
15
  //
22
- const toastsByPlacement = getToastsByPlacement(state.context.toasts)
16
+
17
+ function getState(): GroupState<O> {
18
+ const result = isMachine(serviceOrState) ? serviceOrState.getState() : serviceOrState
19
+ return result as GroupState<O>
20
+ }
21
+
22
+ function getToastsByPlacementImpl() {
23
+ return getToastsByPlacement(getState().context.toasts)
24
+ }
23
25
 
24
26
  function isVisible(id: string) {
25
- if (!state.context.toasts.length) return false
26
- return !!state.context.toasts.find((toast) => toast.id == id)
27
+ const toasts = getState().context.toasts
28
+ if (!toasts.length) return false
29
+ return !!toasts.find((toast) => toast.id == id)
27
30
  }
28
31
 
29
32
  function create(options: Options<O>) {
30
33
  const uid = `toast:${uuid()}`
31
34
  const id = options.id ? options.id : uid
32
35
 
33
- if (isVisible(id)) return
36
+ if (isVisible(id)) return id
34
37
  send({ type: "ADD_TOAST", toast: { ...options, id } })
35
38
 
36
39
  return id
37
40
  }
38
41
 
39
42
  function update(id: string, options: Options<O>) {
40
- if (!isVisible(id)) return
43
+ if (!isVisible(id)) return id
41
44
  send({ type: "UPDATE_TOAST", id, toast: options })
42
45
  return id
43
46
  }
@@ -61,11 +64,14 @@ export function groupConnect<T extends PropTypes, O extends GenericOptions = Def
61
64
  }
62
65
 
63
66
  return {
64
- count: state.context.count,
65
- toasts: state.context.toasts,
66
- toastsByPlacement,
67
+ getCount() {
68
+ return getState().context.count
69
+ },
70
+ getToasts() {
71
+ return getState().context.toasts
72
+ },
73
+ getToastsByPlacement: getToastsByPlacementImpl,
67
74
  isVisible,
68
-
69
75
  create,
70
76
  update,
71
77
  upsert,
@@ -80,10 +86,10 @@ export function groupConnect<T extends PropTypes, O extends GenericOptions = Def
80
86
  },
81
87
 
82
88
  dismissByPlacement(placement) {
89
+ const toastsByPlacement = getToastsByPlacementImpl()
83
90
  const toasts = toastsByPlacement[placement]
84
- if (toasts) {
85
- toasts.forEach((toast) => dismiss(toast.id))
86
- }
91
+ if (!toasts) return
92
+ toasts.forEach((toast) => dismiss(toast.id))
87
93
  },
88
94
  loading(options) {
89
95
  return upsert({ ...options, type: "loading" })
@@ -98,7 +104,7 @@ export function groupConnect<T extends PropTypes, O extends GenericOptions = Def
98
104
  promise(promise, options, shared = {}) {
99
105
  const id = upsert({ ...shared, ...options.loading, type: "loading" })
100
106
 
101
- promise
107
+ runIfFn(promise)
102
108
  .then((response) => {
103
109
  const successOptions = runIfFn(options.success, response)
104
110
  upsert({ ...shared, ...successOptions, id, type: "success" })
@@ -107,8 +113,11 @@ export function groupConnect<T extends PropTypes, O extends GenericOptions = Def
107
113
  const errorOptions = runIfFn(options.error, error)
108
114
  upsert({ ...shared, ...errorOptions, id, type: "error" })
109
115
  })
116
+ .finally(() => {
117
+ options.finally?.()
118
+ })
110
119
 
111
- return promise
120
+ return id
112
121
  },
113
122
 
114
123
  pause(id) {
@@ -129,21 +138,46 @@ export function groupConnect<T extends PropTypes, O extends GenericOptions = Def
129
138
 
130
139
  getGroupProps(options) {
131
140
  const { placement, label = "Notifications" } = options
141
+ const state = getState()
142
+ const hotkeyLabel = state.context.hotkey.join("+").replace(/Key/g, "").replace(/Digit/g, "")
143
+ const [side, align = "center"] = placement.split("-")
144
+
132
145
  return normalize.element({
133
146
  ...parts.group.attrs,
134
147
  dir: state.context.dir,
135
148
  tabIndex: -1,
136
- "aria-label": `${placement} ${label}`,
137
- id: dom.getGroupId(placement),
149
+ "aria-label": `${placement} ${label} ${hotkeyLabel}`,
150
+ id: dom.getRegionId(placement),
138
151
  "data-placement": placement,
152
+ "data-side": side,
153
+ "data-align": align,
139
154
  "aria-live": "polite",
140
155
  role: "region",
141
156
  style: getGroupPlacementStyle(state.context, placement),
157
+ onMouseMove() {
158
+ send({ type: "REGION.POINTER_ENTER", placement })
159
+ },
160
+ onMouseLeave() {
161
+ send({ type: "REGION.POINTER_LEAVE", placement })
162
+ },
163
+ onFocus(event) {
164
+ send({ type: "REGION.FOCUS", target: event.relatedTarget })
165
+ },
166
+ onBlur(event) {
167
+ if (state.context.isFocusWithin && !contains(event.currentTarget, event.relatedTarget)) {
168
+ send({ type: "REGION.BLUR" })
169
+ }
170
+ },
142
171
  })
143
172
  },
144
173
 
145
174
  subscribe(fn) {
146
- return subscribe(state.context.toasts, () => fn(state.context.toasts))
175
+ const state = getState()
176
+ return subscribe(state.context.toasts, () => {
177
+ const toasts = getToastsByPlacementImpl()[state.context.placement!] ?? []
178
+ const contexts = toasts.map((toast) => toast.getState().context)
179
+ fn(contexts)
180
+ })
147
181
  },
148
182
  }
149
183
  }