@zag-js/toast 0.53.0 → 0.54.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 { 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, Placement } 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(placement: Placement) {\n return getToastsByPlacement(getState().context.toasts, placement)\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 getPlacements() {\n const toasts = getState().context.toasts\n const placements = toasts.map((toast) => toast.state.context.placement!)\n return Array.from(new Set(placements))\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 toasts = getToastsByPlacementImpl(placement)\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 \"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>[], placement: Placement) {\n return toasts.filter((toast) => toast.state.context.placement === placement)\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: NonNullable<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 gap: 16,\n pauseOnPageIdle: false,\n hotkey: [\"altKey\", \"KeyT\"],\n offsets: \"1rem\",\n placement: \"bottom\",\n removeDelay: 200,\n ...ctx,\n toasts: [],\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 currentToasts = getToastsByPlacement(ctx.toasts, ctx.placement)\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 currentToasts = getToastsByPlacement(ctx.toasts, 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-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.getBoundingClientRect().height\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 != null && evt.toast.type !== ctx.type,\n hasDurationChanged: (ctx, evt) => evt.toast?.duration != null && 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.getBoundingClientRect().height\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 = evt.toast?.duration\n const type = evt.toast?.type ?? ctx.type\n\n const computedDuration = getToastDuration(duration, type)\n\n Object.assign(ctx, {\n ...evt.toast,\n duration: computedDuration,\n remaining: computedDuration,\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 visible = state.hasTag(\"visible\")\n const paused = 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 visible: visible,\n paused: paused,\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\": visible ? \"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(paused),\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, visible),\n onKeyDown(event) {\n if (event.defaultPrevented) return\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 \"data-ghost\": \"before\",\n style: getGhostBeforeStyle(state.context, visible),\n }),\n\n /* Needed to avoid setting hover to false when in between toasts */\n ghostAfterProps: normalize.element({\n \"data-ghost\": \"after\",\n style: getGhostAfterStyle(state.context, visible),\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(event) {\n if (event.defaultPrevented) return\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(event) {\n if (event.defaultPrevented) return\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","computedDuration","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, Placement } 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(placement: Placement) {\n return getToastsByPlacement(getState().context.toasts, placement)\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 getPlacements() {\n const toasts = getState().context.toasts\n const placements = toasts.map((toast) => toast.state.context.placement!)\n return Array.from(new Set(placements))\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 toasts = getToastsByPlacementImpl(placement)\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 \"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>[], placement: Placement) {\n return toasts.filter((toast) => toast.state.context.placement === placement)\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: NonNullable<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 gap: 16,\n pauseOnPageIdle: false,\n hotkey: [\"altKey\", \"KeyT\"],\n offsets: \"1rem\",\n placement: \"bottom\",\n removeDelay: 200,\n ...ctx,\n toasts: [],\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 currentToasts = getToastsByPlacement(ctx.toasts, ctx.placement)\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 currentToasts = getToastsByPlacement(ctx.toasts, 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-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.getBoundingClientRect().height\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 != null && evt.toast.type !== ctx.type,\n hasDurationChanged: (ctx, evt) => evt.toast?.duration != null && 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.getBoundingClientRect().height\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 = evt.toast?.duration\n const type = evt.toast?.type ?? ctx.type\n\n const computedDuration = getToastDuration(duration, type)\n\n Object.assign(ctx, {\n ...evt.toast,\n duration: computedDuration,\n remaining: computedDuration,\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 visible = state.hasTag(\"visible\")\n const paused = 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 visible: visible,\n paused: paused,\n\n pause() {\n send(\"PAUSE\")\n },\n\n resume() {\n send(\"RESUME\")\n },\n\n dismiss() {\n send(\"DISMISS\")\n },\n\n getRootProps() {\n return normalize.element({\n ...parts.root.attrs,\n dir: state.context.dir,\n id: dom.getRootId(state.context),\n \"data-state\": visible ? \"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(paused),\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, visible),\n onKeyDown(event) {\n if (event.defaultPrevented) return\n if (event.key == \"Escape\") {\n send(\"DISMISS\")\n event.preventDefault()\n }\n },\n })\n },\n\n /* Leave a ghost div to avoid setting hover to false when transitioning out */\n getGhostBeforeProps() {\n return normalize.element({\n \"data-ghost\": \"before\",\n style: getGhostBeforeStyle(state.context, visible),\n })\n },\n\n /* Needed to avoid setting hover to false when in between toasts */\n getGhostAfterProps() {\n return normalize.element({\n \"data-ghost\": \"after\",\n style: getGhostAfterStyle(state.context, visible),\n })\n },\n\n getTitleProps() {\n return normalize.element({\n ...parts.title.attrs,\n id: dom.getTitleId(state.context),\n })\n },\n\n getDescriptionProps() {\n return normalize.element({\n ...parts.description.attrs,\n id: dom.getDescriptionId(state.context),\n })\n },\n\n getActionTriggerProps() {\n return normalize.button({\n ...parts.actionTrigger.attrs,\n type: \"button\",\n onClick(event) {\n if (event.defaultPrevented) return\n send(\"DISMISS\")\n },\n })\n },\n\n getCloseTriggerProps() {\n return normalize.button({\n id: dom.getCloseTriggerId(state.context),\n ...parts.closeTrigger.attrs,\n type: \"button\",\n \"aria-label\": \"Dismiss notification\",\n onClick(event) {\n if (event.defaultPrevented) return\n send(\"DISMISS\")\n },\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","computedDuration","compact","createMachine","ctx"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zag-js/toast",
3
- "version": "0.53.0",
3
+ "version": "0.54.0",
4
4
  "description": "Core logic for the toast widget implemented as a state machine",
5
5
  "keywords": [
6
6
  "js",
@@ -27,13 +27,13 @@
27
27
  "url": "https://github.com/chakra-ui/zag/issues"
28
28
  },
29
29
  "dependencies": {
30
- "@zag-js/anatomy": "0.53.0",
31
- "@zag-js/core": "0.53.0",
32
- "@zag-js/dom-query": "0.53.0",
33
- "@zag-js/dismissable": "0.53.0",
34
- "@zag-js/dom-event": "0.53.0",
35
- "@zag-js/utils": "0.53.0",
36
- "@zag-js/types": "0.53.0"
30
+ "@zag-js/anatomy": "0.54.0",
31
+ "@zag-js/core": "0.54.0",
32
+ "@zag-js/dom-query": "0.54.0",
33
+ "@zag-js/dismissable": "0.54.0",
34
+ "@zag-js/dom-event": "0.54.0",
35
+ "@zag-js/utils": "0.54.0",
36
+ "@zag-js/types": "0.54.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "clean-package": "2.2.0"
@@ -38,76 +38,90 @@ export function connect<T extends PropTypes, O>(
38
38
  send("DISMISS")
39
39
  },
40
40
 
41
- rootProps: normalize.element({
42
- ...parts.root.attrs,
43
- dir: state.context.dir,
44
- id: dom.getRootId(state.context),
45
- "data-state": visible ? "open" : "closed",
46
- "data-type": type,
47
- "data-placement": placement,
48
- "data-align": align,
49
- "data-side": side,
50
- "data-mounted": dataAttr(state.context.mounted),
51
- "data-paused": dataAttr(paused),
52
-
53
- "data-first": dataAttr(state.context.frontmost),
54
- "data-sibling": dataAttr(!state.context.frontmost),
55
- "data-stack": dataAttr(state.context.stacked),
56
- "data-overlap": dataAttr(!state.context.stacked),
57
-
58
- role: "status",
59
- "aria-atomic": "true",
60
- tabIndex: 0,
61
- style: getPlacementStyle(state.context, visible),
62
- onKeyDown(event) {
63
- if (event.defaultPrevented) return
64
- if (event.key == "Escape") {
65
- send("DISMISS")
66
- event.preventDefault()
67
- }
68
- },
69
- }),
41
+ getRootProps() {
42
+ return normalize.element({
43
+ ...parts.root.attrs,
44
+ dir: state.context.dir,
45
+ id: dom.getRootId(state.context),
46
+ "data-state": visible ? "open" : "closed",
47
+ "data-type": type,
48
+ "data-placement": placement,
49
+ "data-align": align,
50
+ "data-side": side,
51
+ "data-mounted": dataAttr(state.context.mounted),
52
+ "data-paused": dataAttr(paused),
53
+
54
+ "data-first": dataAttr(state.context.frontmost),
55
+ "data-sibling": dataAttr(!state.context.frontmost),
56
+ "data-stack": dataAttr(state.context.stacked),
57
+ "data-overlap": dataAttr(!state.context.stacked),
58
+
59
+ role: "status",
60
+ "aria-atomic": "true",
61
+ tabIndex: 0,
62
+ style: getPlacementStyle(state.context, visible),
63
+ onKeyDown(event) {
64
+ if (event.defaultPrevented) return
65
+ if (event.key == "Escape") {
66
+ send("DISMISS")
67
+ event.preventDefault()
68
+ }
69
+ },
70
+ })
71
+ },
70
72
 
71
73
  /* Leave a ghost div to avoid setting hover to false when transitioning out */
72
- ghostBeforeProps: normalize.element({
73
- "data-ghost": "before",
74
- style: getGhostBeforeStyle(state.context, visible),
75
- }),
74
+ getGhostBeforeProps() {
75
+ return normalize.element({
76
+ "data-ghost": "before",
77
+ style: getGhostBeforeStyle(state.context, visible),
78
+ })
79
+ },
76
80
 
77
81
  /* Needed to avoid setting hover to false when in between toasts */
78
- ghostAfterProps: normalize.element({
79
- "data-ghost": "after",
80
- style: getGhostAfterStyle(state.context, visible),
81
- }),
82
-
83
- titleProps: normalize.element({
84
- ...parts.title.attrs,
85
- id: dom.getTitleId(state.context),
86
- }),
87
-
88
- descriptionProps: normalize.element({
89
- ...parts.description.attrs,
90
- id: dom.getDescriptionId(state.context),
91
- }),
92
-
93
- actionTriggerProps: normalize.button({
94
- ...parts.actionTrigger.attrs,
95
- type: "button",
96
- onClick(event) {
97
- if (event.defaultPrevented) return
98
- send("DISMISS")
99
- },
100
- }),
101
-
102
- closeTriggerProps: normalize.button({
103
- id: dom.getCloseTriggerId(state.context),
104
- ...parts.closeTrigger.attrs,
105
- type: "button",
106
- "aria-label": "Dismiss notification",
107
- onClick(event) {
108
- if (event.defaultPrevented) return
109
- send("DISMISS")
110
- },
111
- }),
82
+ getGhostAfterProps() {
83
+ return normalize.element({
84
+ "data-ghost": "after",
85
+ style: getGhostAfterStyle(state.context, visible),
86
+ })
87
+ },
88
+
89
+ getTitleProps() {
90
+ return normalize.element({
91
+ ...parts.title.attrs,
92
+ id: dom.getTitleId(state.context),
93
+ })
94
+ },
95
+
96
+ getDescriptionProps() {
97
+ return normalize.element({
98
+ ...parts.description.attrs,
99
+ id: dom.getDescriptionId(state.context),
100
+ })
101
+ },
102
+
103
+ getActionTriggerProps() {
104
+ return normalize.button({
105
+ ...parts.actionTrigger.attrs,
106
+ type: "button",
107
+ onClick(event) {
108
+ if (event.defaultPrevented) return
109
+ send("DISMISS")
110
+ },
111
+ })
112
+ },
113
+
114
+ getCloseTriggerProps() {
115
+ return normalize.button({
116
+ id: dom.getCloseTriggerId(state.context),
117
+ ...parts.closeTrigger.attrs,
118
+ type: "button",
119
+ "aria-label": "Dismiss notification",
120
+ onClick(event) {
121
+ if (event.defaultPrevented) return
122
+ send("DISMISS")
123
+ },
124
+ })
125
+ },
112
126
  }
113
127
  }
@@ -378,11 +378,11 @@ export interface MachineApi<T extends PropTypes = PropTypes, O = any> extends Ge
378
378
  */
379
379
  dismiss(): void
380
380
 
381
- rootProps: T["element"]
382
- titleProps: T["element"]
383
- ghostBeforeProps: T["element"]
384
- ghostAfterProps: T["element"]
385
- descriptionProps: T["element"]
386
- closeTriggerProps: T["button"]
387
- actionTriggerProps: T["button"]
381
+ getRootProps(): T["element"]
382
+ getTitleProps(): T["element"]
383
+ getGhostBeforeProps(): T["element"]
384
+ getGhostAfterProps(): T["element"]
385
+ getDescriptionProps(): T["element"]
386
+ getCloseTriggerProps(): T["button"]
387
+ getActionTriggerProps(): T["button"]
388
388
  }