@solid2-aria/sonner 0.0.0-stage → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE.txt +27 -0
- package/README.md +75 -2
- package/SOLID-SONNER-LICENSE.md +21 -0
- package/SONNER-LICENSE.md +21 -0
- package/dist/browser/index.d.ts +219 -0
- package/dist/browser/index.js +1375 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/server/index.js +1682 -0
- package/dist/server/index.js.map +1 -0
- package/dist/styles.css +784 -0
- package/package.json +69 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["<For each={bars} keyed={false}>\n {(_, i) => <div class=\"sonner-loading-bar\" data-index={i} />}\n </For>","each={bars}","keyed={false}","data-visible={String(props.visible)}","<div\n class={[\"sonner-loading-wrapper\", props.class ?? props.className]}\n data-visible={String(props.visible)}\n >\n <div class=\"sonner-spinner\">\n <For each={bars} keyed={false}>\n {(_, i) => <div class=\"sonner-loading-bar\" data-index={i} />}\n </For>\n </div>\n </div>","<svg\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n height=\"20\"\n width=\"20\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>","<svg\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n height=\"20\"\n width=\"20\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>","<svg\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n height=\"20\"\n width=\"20\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clip-rule=\"evenodd\"\n />\n </svg>","<svg\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n height=\"20\"\n width=\"20\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\"\n clip-rule=\"evenodd\"\n />\n </svg>","<SuccessIcon />","<InfoIcon />","<WarningIcon />","<ErrorIcon />","<svg\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>","_tmpl$","_tmpl$2","_tmpl$3","_tmpl$4","_tmpl$5","_tmpl$6","_tmpl$7","_$getNextElement","_$createComponent","_$readShallow","_$setAttribute","unexpected","<Show\n when={isAction(props.content) ? props.content : false}\n fallback={props.content}\n >\n {(action) => (\n <button\n data-button\n data-action={props.kind === \"action\" ? \"\" : undefined}\n data-cancel={props.kind === \"cancel\" ? \"\" : undefined}\n style={props.style}\n onClick={(event) => {\n props.onClick(event);\n }}\n class={props.class}\n >\n {action().label}\n </button>\n )}\n </Show>","isAction(props.content) ? props.content : false","{action().label}","data-cancel={props.kind === \"cancel\" ? \"\" : undefined}","style={props.style}","class={props.class}","<Show\n when={\n props.closeButton && !hasCustomContent() && toastType() !== \"loading\"\n }\n >\n <button\n aria-label={props.closeButtonAriaLabel ?? \"Close toast\"}\n data-disabled={String(props.disabled)}\n data-close-button\n onPointerDown={(event) => {\n event.stopPropagation();\n }}\n onPointerUp={(event) => {\n event.stopPropagation();\n }}\n onClick={() => {\n if (props.disabled || !props.dismissible) {\n return;\n }\n\n props.onDelete();\n props.onDismiss();\n }}\n class={cn(classNames()?.closeButton, toastClassNames()?.closeButton)}\n >\n {props.icons?.close ?? <CloseIcon />}\n </button>\n </Show>","props.closeButton && !hasCustomContent() && toastType() !== \"loading\"","{props.icons?.close ?? <CloseIcon />}","<CloseIcon />","data-disabled={String(props.disabled)}","class={cn(classNames()?.closeButton, toastClassNames()?.closeButton)}","<button\n aria-label={props.closeButtonAriaLabel ?? \"Close toast\"}\n data-disabled={String(props.disabled)}\n data-close-button\n onPointerDown={(event) => {\n event.stopPropagation();\n }}\n onPointerUp={(event) => {\n event.stopPropagation();\n }}\n onClick={() => {\n if (props.disabled || !props.dismissible) {\n return;\n }\n\n props.onDelete();\n props.onDismiss();\n }}\n class={cn(classNames()?.closeButton, toastClassNames()?.closeButton)}\n >\n {props.icons?.close ?? <CloseIcon />}\n </button>","<Show when={hasIcon()}>\n <div\n data-icon=\"\"\n class={cn(classNames()?.icon, toastClassNames()?.icon)}\n >\n {loadingIconContent()}\n {toastType() === \"loading\" ? null : props.getIcon()}\n </div>\n </Show>","{loadingIconContent()}","<div\n data-icon=\"\"\n class={cn(classNames()?.icon, toastClassNames()?.icon)}\n >\n {loadingIconContent()}\n {toastType() === \"loading\" ? null : props.getIcon()}\n </div>","{toastType() === \"loading\" ? null : props.getIcon()}","{props.toast.jsx ?? resolveContent(props.toast.title)}","<Show when={props.toast.description}>\n <div\n data-description=\"\"\n class={cn(\n props.descriptionClassName,\n props.toastDescriptionClassName,\n classNames()?.description,\n toastClassNames()?.description\n )}\n >\n {resolveContent(props.toast.description)}\n </div>\n </Show>","{resolveContent(props.toast.description)}","<div\n data-description=\"\"\n class={cn(\n props.descriptionClassName,\n props.toastDescriptionClassName,\n classNames()?.description,\n toastClassNames()?.description\n )}\n >\n {resolveContent(props.toast.description)}\n </div>","<div\n data-content=\"\"\n class={cn(classNames()?.content, toastClassNames()?.content)}\n >\n <div\n data-title=\"\"\n class={cn(classNames()?.title, toastClassNames()?.title)}\n >\n {props.toast.jsx ?? resolveContent(props.toast.title)}\n </div>\n <Show when={props.toast.description}>\n <div\n data-description=\"\"\n class={cn(\n props.descriptionClassName,\n props.toastDescriptionClassName,\n classNames()?.description,\n toastClassNames()?.description\n )}\n >\n {resolveContent(props.toast.description)}\n </div>\n </Show>\n </div>","class={cn(classNames()?.title, toastClassNames()?.title)}","<Show when={props.toast.cancel}>\n {(cancel) => (\n <Show\n when={!isAction(cancel())}\n fallback={\n <ToastActionButton\n content={cancel()}\n kind=\"cancel\"\n style={props.toast.cancelButtonStyle ?? props.cancelButtonStyle}\n class={cn(\n classNames()?.cancelButton,\n toastClassNames()?.cancelButton\n )}\n onClick={(event) => {\n if (!props.dismissible) {\n return;\n }\n\n const currentCancel = cancel();\n\n if (!isAction(currentCancel)) {\n return;\n }\n\n currentCancel.onClick?.(event);\n props.onDelete();\n }}\n />\n }\n >\n {getNonActionContent(cancel())}\n </Show>\n )}\n </Show>","<Show\n when={!isAction(cancel())}\n fallback={\n <ToastActionButton\n content={cancel()}\n kind=\"cancel\"\n style={props.toast.cancelButtonStyle ?? props.cancelButtonStyle}\n class={cn(\n classNames()?.cancelButton,\n toastClassNames()?.cancelButton\n )}\n onClick={(event) => {\n if (!props.dismissible) {\n return;\n }\n\n const currentCancel = cancel();\n\n if (!isAction(currentCancel)) {\n return;\n }\n\n currentCancel.onClick?.(event);\n props.onDelete();\n }}\n />\n }\n >\n {getNonActionContent(cancel())}\n </Show>","<ToastActionButton\n content={cancel()}\n kind=\"cancel\"\n style={props.toast.cancelButtonStyle ?? props.cancelButtonStyle}\n class={cn(\n classNames()?.cancelButton,\n toastClassNames()?.cancelButton\n )}\n onClick={(event) => {\n if (!props.dismissible) {\n return;\n }\n\n const currentCancel = cancel();\n\n if (!isAction(currentCancel)) {\n return;\n }\n\n currentCancel.onClick?.(event);\n props.onDelete();\n }}\n />","kind=\"cancel\"","onClick={(event) => {\n if (!props.dismissible) {\n return;\n }\n\n const currentCancel = cancel();\n\n if (!isAction(currentCancel)) {\n return;\n }\n\n currentCancel.onClick?.(event);\n props.onDelete();\n }}","<Show when={props.toast.action}>\n {(action) => (\n <Show\n when={!isAction(action())}\n fallback={\n <ToastActionButton\n content={action()}\n kind=\"action\"\n style={props.toast.actionButtonStyle ?? props.actionButtonStyle}\n class={cn(\n classNames()?.actionButton,\n toastClassNames()?.actionButton\n )}\n onClick={(event) => {\n const currentAction = action();\n\n if (!isAction(currentAction)) {\n return;\n }\n\n currentAction.onClick?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n props.onDelete();\n }}\n />\n }\n >\n {getNonActionContent(action())}\n </Show>\n )}\n </Show>","<Show\n when={!isAction(action())}\n fallback={\n <ToastActionButton\n content={action()}\n kind=\"action\"\n style={props.toast.actionButtonStyle ?? props.actionButtonStyle}\n class={cn(\n classNames()?.actionButton,\n toastClassNames()?.actionButton\n )}\n onClick={(event) => {\n const currentAction = action();\n\n if (!isAction(currentAction)) {\n return;\n }\n\n currentAction.onClick?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n props.onDelete();\n }}\n />\n }\n >\n {getNonActionContent(action())}\n </Show>","<ToastActionButton\n content={action()}\n kind=\"action\"\n style={props.toast.actionButtonStyle ?? props.actionButtonStyle}\n class={cn(\n classNames()?.actionButton,\n toastClassNames()?.actionButton\n )}\n onClick={(event) => {\n const currentAction = action();\n\n if (!isAction(currentAction)) {\n return;\n }\n\n currentAction.onClick?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n props.onDelete();\n }}\n />","kind=\"action\"","onClick={(event) => {\n const currentAction = action();\n\n if (!isAction(currentAction)) {\n return;\n }\n\n currentAction.onClick?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n props.onDelete();\n }}","{props.icons.loading}","data-visible={String(toastType() === \"loading\")}","<div\n class={cn(\n classNames()?.loader,\n toastClassNames()?.loader,\n \"sonner-loader\"\n )}\n data-visible={String(toastType() === \"loading\")}\n >\n {props.icons.loading}\n </div>","<Loader\n class={cn(classNames()?.loader, toastClassNames()?.loader)}\n visible={toastType() === \"loading\"}\n />","ref={(element) => {\n toastRef = element;\n }}","<ToastBody\n actionButtonStyle={props.actionButtonStyle}\n cancelButtonStyle={props.cancelButtonStyle}\n classNames={classNames()}\n closeButton={closeButton()}\n closeButtonAriaLabel={props.closeButtonAriaLabel}\n descriptionClassName={descriptionClassName()}\n disabled={disabled()}\n dismissible={dismissible()}\n getIcon={icon}\n getLoadingIcon={getLoadingIcon}\n icons={props.icons}\n onDelete={deleteToast}\n onDismiss={() => props.toast.onDismiss?.(props.toast)}\n toast={props.toast}\n toastClassNames={toastClassNames()}\n toastDescriptionClassName={toastDescriptionClassName()}\n />","getIcon={icon}","onDelete={deleteToast}","onDismiss={() => props.toast.onDismiss?.(props.toast)}","data-rich-colors={String(\n Boolean(props.toast.richColors ?? props.defaultRichColors)\n )}","data-styled={String(\n (props.toast.jsx === undefined ||\n props.toast.jsx === null ||\n props.toast.jsx === false ||\n props.toast.jsx === 0 ||\n props.toast.jsx === \"\") &&\n props.toast.unstyled !== true &&\n props.unstyled !== true\n )}","data-mounted={String(mounted())}","data-promise={String(Boolean(props.toast.promise))}","data-swiped={String(isSwiped())}","data-removed={String(removed())}","data-visible={String(isVisible())}","data-y-position={y()}","data-x-position={x()}","data-index={props.index}","data-front={String(isFront())}","data-swiping={String(swiping())}","data-dismissible={String(dismissible())}","data-type={toastType()}","data-invert={String(invert())}","data-swipe-out={String(swipeOut())}","data-swipe-direction={swipeOutDirection()}","data-expanded={String(\n props.expanded || (props.expandByDefault && mounted())\n )}","data-testid={props.toast.testId}","style={{\n \"--index\": props.index,\n \"--initial-height\": props.expandByDefault\n ? \"auto\"\n : `${initialHeight()}px`,\n \"--offset\": `${removed() ? offsetBeforeRemove() : offset()}px`,\n \"--toasts-before\": props.index,\n \"--z-index\": props.toasts.length - props.index,\n ...props.style,\n ...props.toast.style,\n }}","<li\n tabindex={0}\n ref={(element) => {\n toastRef = element;\n }}\n class={cn(\n className(),\n toastClassName(),\n classNames()?.toast,\n toastClassNames()?.toast,\n classNames()?.[toastTypeKey()],\n toastClassNames()?.[toastTypeKey()]\n )}\n data-sonner-toast=\"\"\n data-rich-colors={String(\n Boolean(props.toast.richColors ?? props.defaultRichColors)\n )}\n data-styled={String(\n (props.toast.jsx === undefined ||\n props.toast.jsx === null ||\n props.toast.jsx === false ||\n props.toast.jsx === 0 ||\n props.toast.jsx === \"\") &&\n props.toast.unstyled !== true &&\n props.unstyled !== true\n )}\n data-mounted={String(mounted())}\n data-promise={String(Boolean(props.toast.promise))}\n data-swiped={String(isSwiped())}\n data-removed={String(removed())}\n data-visible={String(isVisible())}\n data-y-position={y()}\n data-x-position={x()}\n data-index={props.index}\n data-front={String(isFront())}\n data-swiping={String(swiping())}\n data-dismissible={String(dismissible())}\n data-type={toastType()}\n data-invert={String(invert())}\n data-swipe-out={String(swipeOut())}\n data-swipe-direction={swipeOutDirection()}\n data-expanded={String(\n props.expanded || (props.expandByDefault && mounted())\n )}\n data-testid={props.toast.testId}\n style={{\n \"--index\": props.index,\n \"--initial-height\": props.expandByDefault\n ? \"auto\"\n : `${initialHeight()}px`,\n \"--offset\": `${removed() ? offsetBeforeRemove() : offset()}px`,\n \"--toasts-before\": props.index,\n \"--z-index\": props.toasts.length - props.index,\n ...props.style,\n ...props.toast.style,\n }}\n onDragEnd={handleDragEnd}\n onPointerDown={handlePointerDown}\n onPointerUp={handlePointerUp}\n onPointerMove={handlePointerMove}\n >\n <ToastBody\n actionButtonStyle={props.actionButtonStyle}\n cancelButtonStyle={props.cancelButtonStyle}\n classNames={classNames()}\n closeButton={closeButton()}\n closeButtonAriaLabel={props.closeButtonAriaLabel}\n descriptionClassName={descriptionClassName()}\n disabled={disabled()}\n dismissible={dismissible()}\n getIcon={icon}\n getLoadingIcon={getLoadingIcon}\n icons={props.icons}\n onDelete={deleteToast}\n onDismiss={() => props.toast.onDismiss?.(props.toast)}\n toast={props.toast}\n toastClassNames={toastClassNames()}\n toastDescriptionClassName={toastDescriptionClassName()}\n />\n </li>","<For each={possiblePositions()}>\n {(position, index) => {\n const [y, x] = position.split(\"-\");\n\n const toastsByPosition = createMemo(() =>\n filteredToasts().filter(\n (toast) =>\n (!toast.position && index() === 0) ||\n toast.position === position\n )\n );\n\n const heightsByPosition = createMemo(() =>\n heights().filter(\n (height) =>\n (index() === 0 && !height.position) ||\n height.position === position\n )\n );\n\n return (\n <Show when={filteredToasts().length > 0}>\n <ol\n tabindex={-1}\n ref={(element) => {\n listRef = element;\n }}\n dir={\n propsWithDefaults.dir === \"auto\"\n ? getDocumentDirection()\n : propsWithDefaults.dir\n }\n class={className()}\n data-sonner-toaster\n data-sonner-theme={actualTheme()}\n data-y-position={y}\n data-x-position={x}\n style={{\n \"--front-toast-height\": `${heightsByPosition()[0]?.height ?? 0}px`,\n \"--gap\": `${propsWithDefaults.gap}px`,\n \"--width\": `${TOAST_WIDTH}px`,\n ...propsWithDefaults.style,\n ...assignOffset(\n propsWithDefaults.offset,\n propsWithDefaults.mobileOffset\n ),\n }}\n onBlur={(event) => {\n if (\n isFocusWithinRef() &&\n (!(event.relatedTarget instanceof Node) ||\n !event.currentTarget.contains(event.relatedTarget))\n ) {\n setIsFocusWithinRef(false);\n\n if (lastFocusedElementRef()) {\n lastFocusedElementRef()?.focus({ preventScroll: true });\n setLastFocusedElementRef(null);\n }\n }\n }}\n onFocus={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement &&\n event.target.dataset.dismissible === \"false\";\n\n if (isNotDismissible) {\n return;\n }\n\n if (!isFocusWithinRef()) {\n setIsFocusWithinRef(true);\n setLastFocusedElementRef(\n event.relatedTarget instanceof HTMLElement\n ? event.relatedTarget\n : null\n );\n }\n }}\n onMouseEnter={() => {\n setExpanded(true);\n }}\n onMouseMove={() => {\n setExpanded(true);\n }}\n onMouseLeave={() => {\n if (!interacting()) {\n setExpanded(false);\n }\n }}\n onDragEnd={() => {\n setExpanded(false);\n }}\n onPointerDown={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement &&\n event.target.dataset.dismissible === \"false\";\n\n if (isNotDismissible) {\n return;\n }\n\n setInteracting(true);\n }}\n onPointerUp={() => {\n setInteracting(false);\n }}\n >\n <For each={toastsByPosition()}>\n {(toastItem, toastIndex) => (\n <Toast\n icons={propsWithDefaults.icons}\n index={toastIndex()}\n toast={toastItem}\n defaultRichColors={propsWithDefaults.richColors}\n duration={\n toastOptions()?.duration ?? propsWithDefaults.duration\n }\n class={toastClassName()}\n descriptionClassName={toastDescriptionClassName()}\n invert={Boolean(propsWithDefaults.invert)}\n visibleToasts={propsWithDefaults.visibleToasts}\n closeButton={\n toastOptions()?.closeButton ??\n propsWithDefaults.closeButton ??\n false\n }\n interacting={interacting()}\n position={position}\n style={toastOptions()?.style}\n unstyled={toastOptions()?.unstyled}\n classNames={toastClassNames()}\n cancelButtonStyle={toastOptions()?.cancelButtonStyle}\n actionButtonStyle={toastOptions()?.actionButtonStyle}\n closeButtonAriaLabel={\n toastOptions()?.closeButtonAriaLabel\n }\n removeToast={removeToast}\n toasts={toastsByPosition()}\n heights={heightsByPosition()}\n setHeights={setHeights}\n expandByDefault={Boolean(propsWithDefaults.expand)}\n gap={propsWithDefaults.gap}\n expanded={expanded()}\n swipeDirections={propsWithDefaults.swipeDirections}\n pauseWhenPageIsHidden={\n propsWithDefaults.pauseWhenPageIsHidden\n }\n />\n )}\n </For>\n </ol>\n </Show>\n );\n }}\n </For>","<Show when={filteredToasts().length > 0}>\n <ol\n tabindex={-1}\n ref={(element) => {\n listRef = element;\n }}\n dir={\n propsWithDefaults.dir === \"auto\"\n ? getDocumentDirection()\n : propsWithDefaults.dir\n }\n class={className()}\n data-sonner-toaster\n data-sonner-theme={actualTheme()}\n data-y-position={y}\n data-x-position={x}\n style={{\n \"--front-toast-height\": `${heightsByPosition()[0]?.height ?? 0}px`,\n \"--gap\": `${propsWithDefaults.gap}px`,\n \"--width\": `${TOAST_WIDTH}px`,\n ...propsWithDefaults.style,\n ...assignOffset(\n propsWithDefaults.offset,\n propsWithDefaults.mobileOffset\n ),\n }}\n onBlur={(event) => {\n if (\n isFocusWithinRef() &&\n (!(event.relatedTarget instanceof Node) ||\n !event.currentTarget.contains(event.relatedTarget))\n ) {\n setIsFocusWithinRef(false);\n\n if (lastFocusedElementRef()) {\n lastFocusedElementRef()?.focus({ preventScroll: true });\n setLastFocusedElementRef(null);\n }\n }\n }}\n onFocus={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement &&\n event.target.dataset.dismissible === \"false\";\n\n if (isNotDismissible) {\n return;\n }\n\n if (!isFocusWithinRef()) {\n setIsFocusWithinRef(true);\n setLastFocusedElementRef(\n event.relatedTarget instanceof HTMLElement\n ? event.relatedTarget\n : null\n );\n }\n }}\n onMouseEnter={() => {\n setExpanded(true);\n }}\n onMouseMove={() => {\n setExpanded(true);\n }}\n onMouseLeave={() => {\n if (!interacting()) {\n setExpanded(false);\n }\n }}\n onDragEnd={() => {\n setExpanded(false);\n }}\n onPointerDown={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement &&\n event.target.dataset.dismissible === \"false\";\n\n if (isNotDismissible) {\n return;\n }\n\n setInteracting(true);\n }}\n onPointerUp={() => {\n setInteracting(false);\n }}\n >\n <For each={toastsByPosition()}>\n {(toastItem, toastIndex) => (\n <Toast\n icons={propsWithDefaults.icons}\n index={toastIndex()}\n toast={toastItem}\n defaultRichColors={propsWithDefaults.richColors}\n duration={\n toastOptions()?.duration ?? propsWithDefaults.duration\n }\n class={toastClassName()}\n descriptionClassName={toastDescriptionClassName()}\n invert={Boolean(propsWithDefaults.invert)}\n visibleToasts={propsWithDefaults.visibleToasts}\n closeButton={\n toastOptions()?.closeButton ??\n propsWithDefaults.closeButton ??\n false\n }\n interacting={interacting()}\n position={position}\n style={toastOptions()?.style}\n unstyled={toastOptions()?.unstyled}\n classNames={toastClassNames()}\n cancelButtonStyle={toastOptions()?.cancelButtonStyle}\n actionButtonStyle={toastOptions()?.actionButtonStyle}\n closeButtonAriaLabel={\n toastOptions()?.closeButtonAriaLabel\n }\n removeToast={removeToast}\n toasts={toastsByPosition()}\n heights={heightsByPosition()}\n setHeights={setHeights}\n expandByDefault={Boolean(propsWithDefaults.expand)}\n gap={propsWithDefaults.gap}\n expanded={expanded()}\n swipeDirections={propsWithDefaults.swipeDirections}\n pauseWhenPageIsHidden={\n propsWithDefaults.pauseWhenPageIsHidden\n }\n />\n )}\n </For>\n </ol>\n </Show>","ref={(element) => {\n listRef = element;\n }}","<For each={toastsByPosition()}>\n {(toastItem, toastIndex) => (\n <Toast\n icons={propsWithDefaults.icons}\n index={toastIndex()}\n toast={toastItem}\n defaultRichColors={propsWithDefaults.richColors}\n duration={\n toastOptions()?.duration ?? propsWithDefaults.duration\n }\n class={toastClassName()}\n descriptionClassName={toastDescriptionClassName()}\n invert={Boolean(propsWithDefaults.invert)}\n visibleToasts={propsWithDefaults.visibleToasts}\n closeButton={\n toastOptions()?.closeButton ??\n propsWithDefaults.closeButton ??\n false\n }\n interacting={interacting()}\n position={position}\n style={toastOptions()?.style}\n unstyled={toastOptions()?.unstyled}\n classNames={toastClassNames()}\n cancelButtonStyle={toastOptions()?.cancelButtonStyle}\n actionButtonStyle={toastOptions()?.actionButtonStyle}\n closeButtonAriaLabel={\n toastOptions()?.closeButtonAriaLabel\n }\n removeToast={removeToast}\n toasts={toastsByPosition()}\n heights={heightsByPosition()}\n setHeights={setHeights}\n expandByDefault={Boolean(propsWithDefaults.expand)}\n gap={propsWithDefaults.gap}\n expanded={expanded()}\n swipeDirections={propsWithDefaults.swipeDirections}\n pauseWhenPageIsHidden={\n propsWithDefaults.pauseWhenPageIsHidden\n }\n />\n )}\n </For>","<Toast\n icons={propsWithDefaults.icons}\n index={toastIndex()}\n toast={toastItem}\n defaultRichColors={propsWithDefaults.richColors}\n duration={\n toastOptions()?.duration ?? propsWithDefaults.duration\n }\n class={toastClassName()}\n descriptionClassName={toastDescriptionClassName()}\n invert={Boolean(propsWithDefaults.invert)}\n visibleToasts={propsWithDefaults.visibleToasts}\n closeButton={\n toastOptions()?.closeButton ??\n propsWithDefaults.closeButton ??\n false\n }\n interacting={interacting()}\n position={position}\n style={toastOptions()?.style}\n unstyled={toastOptions()?.unstyled}\n classNames={toastClassNames()}\n cancelButtonStyle={toastOptions()?.cancelButtonStyle}\n actionButtonStyle={toastOptions()?.actionButtonStyle}\n closeButtonAriaLabel={\n toastOptions()?.closeButtonAriaLabel\n }\n removeToast={removeToast}\n toasts={toastsByPosition()}\n heights={heightsByPosition()}\n setHeights={setHeights}\n expandByDefault={Boolean(propsWithDefaults.expand)}\n gap={propsWithDefaults.gap}\n expanded={expanded()}\n swipeDirections={propsWithDefaults.swipeDirections}\n pauseWhenPageIsHidden={\n propsWithDefaults.pauseWhenPageIsHidden\n }\n />","toast={toastItem}","class={className()}","data-sonner-theme={actualTheme()}","style={{\n \"--front-toast-height\": `${heightsByPosition()[0]?.height ?? 0}px`,\n \"--gap\": `${propsWithDefaults.gap}px`,\n \"--width\": `${TOAST_WIDTH}px`,\n ...propsWithDefaults.style,\n ...assignOffset(\n propsWithDefaults.offset,\n propsWithDefaults.mobileOffset\n ),\n }}","<ol\n tabindex={-1}\n ref={(element) => {\n listRef = element;\n }}\n dir={\n propsWithDefaults.dir === \"auto\"\n ? getDocumentDirection()\n : propsWithDefaults.dir\n }\n class={className()}\n data-sonner-toaster\n data-sonner-theme={actualTheme()}\n data-y-position={y}\n data-x-position={x}\n style={{\n \"--front-toast-height\": `${heightsByPosition()[0]?.height ?? 0}px`,\n \"--gap\": `${propsWithDefaults.gap}px`,\n \"--width\": `${TOAST_WIDTH}px`,\n ...propsWithDefaults.style,\n ...assignOffset(\n propsWithDefaults.offset,\n propsWithDefaults.mobileOffset\n ),\n }}\n onBlur={(event) => {\n if (\n isFocusWithinRef() &&\n (!(event.relatedTarget instanceof Node) ||\n !event.currentTarget.contains(event.relatedTarget))\n ) {\n setIsFocusWithinRef(false);\n\n if (lastFocusedElementRef()) {\n lastFocusedElementRef()?.focus({ preventScroll: true });\n setLastFocusedElementRef(null);\n }\n }\n }}\n onFocus={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement &&\n event.target.dataset.dismissible === \"false\";\n\n if (isNotDismissible) {\n return;\n }\n\n if (!isFocusWithinRef()) {\n setIsFocusWithinRef(true);\n setLastFocusedElementRef(\n event.relatedTarget instanceof HTMLElement\n ? event.relatedTarget\n : null\n );\n }\n }}\n onMouseEnter={() => {\n setExpanded(true);\n }}\n onMouseMove={() => {\n setExpanded(true);\n }}\n onMouseLeave={() => {\n if (!interacting()) {\n setExpanded(false);\n }\n }}\n onDragEnd={() => {\n setExpanded(false);\n }}\n onPointerDown={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement &&\n event.target.dataset.dismissible === \"false\";\n\n if (isNotDismissible) {\n return;\n }\n\n setInteracting(true);\n }}\n onPointerUp={() => {\n setInteracting(false);\n }}\n >\n <For each={toastsByPosition()}>\n {(toastItem, toastIndex) => (\n <Toast\n icons={propsWithDefaults.icons}\n index={toastIndex()}\n toast={toastItem}\n defaultRichColors={propsWithDefaults.richColors}\n duration={\n toastOptions()?.duration ?? propsWithDefaults.duration\n }\n class={toastClassName()}\n descriptionClassName={toastDescriptionClassName()}\n invert={Boolean(propsWithDefaults.invert)}\n visibleToasts={propsWithDefaults.visibleToasts}\n closeButton={\n toastOptions()?.closeButton ??\n propsWithDefaults.closeButton ??\n false\n }\n interacting={interacting()}\n position={position}\n style={toastOptions()?.style}\n unstyled={toastOptions()?.unstyled}\n classNames={toastClassNames()}\n cancelButtonStyle={toastOptions()?.cancelButtonStyle}\n actionButtonStyle={toastOptions()?.actionButtonStyle}\n closeButtonAriaLabel={\n toastOptions()?.closeButtonAriaLabel\n }\n removeToast={removeToast}\n toasts={toastsByPosition()}\n heights={heightsByPosition()}\n setHeights={setHeights}\n expandByDefault={Boolean(propsWithDefaults.expand)}\n gap={propsWithDefaults.gap}\n expanded={expanded()}\n swipeDirections={propsWithDefaults.swipeDirections}\n pauseWhenPageIsHidden={\n propsWithDefaults.pauseWhenPageIsHidden\n }\n />\n )}\n </For>\n </ol>","<section\n aria-label={\n propsWithDefaults.customAriaLabel ??\n `${propsWithDefaults.containerAriaLabel} ${hotkeyLabel()}`\n }\n tabindex={-1}\n aria-live=\"polite\"\n aria-relevant=\"additions text\"\n aria-atomic=\"false\"\n data-react-aria-top-layer\n >\n <For each={possiblePositions()}>\n {(position, index) => {\n const [y, x] = position.split(\"-\");\n\n const toastsByPosition = createMemo(() =>\n filteredToasts().filter(\n (toast) =>\n (!toast.position && index() === 0) ||\n toast.position === position\n )\n );\n\n const heightsByPosition = createMemo(() =>\n heights().filter(\n (height) =>\n (index() === 0 && !height.position) ||\n height.position === position\n )\n );\n\n return (\n <Show when={filteredToasts().length > 0}>\n <ol\n tabindex={-1}\n ref={(element) => {\n listRef = element;\n }}\n dir={\n propsWithDefaults.dir === \"auto\"\n ? getDocumentDirection()\n : propsWithDefaults.dir\n }\n class={className()}\n data-sonner-toaster\n data-sonner-theme={actualTheme()}\n data-y-position={y}\n data-x-position={x}\n style={{\n \"--front-toast-height\": `${heightsByPosition()[0]?.height ?? 0}px`,\n \"--gap\": `${propsWithDefaults.gap}px`,\n \"--width\": `${TOAST_WIDTH}px`,\n ...propsWithDefaults.style,\n ...assignOffset(\n propsWithDefaults.offset,\n propsWithDefaults.mobileOffset\n ),\n }}\n onBlur={(event) => {\n if (\n isFocusWithinRef() &&\n (!(event.relatedTarget instanceof Node) ||\n !event.currentTarget.contains(event.relatedTarget))\n ) {\n setIsFocusWithinRef(false);\n\n if (lastFocusedElementRef()) {\n lastFocusedElementRef()?.focus({ preventScroll: true });\n setLastFocusedElementRef(null);\n }\n }\n }}\n onFocus={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement &&\n event.target.dataset.dismissible === \"false\";\n\n if (isNotDismissible) {\n return;\n }\n\n if (!isFocusWithinRef()) {\n setIsFocusWithinRef(true);\n setLastFocusedElementRef(\n event.relatedTarget instanceof HTMLElement\n ? event.relatedTarget\n : null\n );\n }\n }}\n onMouseEnter={() => {\n setExpanded(true);\n }}\n onMouseMove={() => {\n setExpanded(true);\n }}\n onMouseLeave={() => {\n if (!interacting()) {\n setExpanded(false);\n }\n }}\n onDragEnd={() => {\n setExpanded(false);\n }}\n onPointerDown={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement &&\n event.target.dataset.dismissible === \"false\";\n\n if (isNotDismissible) {\n return;\n }\n\n setInteracting(true);\n }}\n onPointerUp={() => {\n setInteracting(false);\n }}\n >\n <For each={toastsByPosition()}>\n {(toastItem, toastIndex) => (\n <Toast\n icons={propsWithDefaults.icons}\n index={toastIndex()}\n toast={toastItem}\n defaultRichColors={propsWithDefaults.richColors}\n duration={\n toastOptions()?.duration ?? propsWithDefaults.duration\n }\n class={toastClassName()}\n descriptionClassName={toastDescriptionClassName()}\n invert={Boolean(propsWithDefaults.invert)}\n visibleToasts={propsWithDefaults.visibleToasts}\n closeButton={\n toastOptions()?.closeButton ??\n propsWithDefaults.closeButton ??\n false\n }\n interacting={interacting()}\n position={position}\n style={toastOptions()?.style}\n unstyled={toastOptions()?.unstyled}\n classNames={toastClassNames()}\n cancelButtonStyle={toastOptions()?.cancelButtonStyle}\n actionButtonStyle={toastOptions()?.actionButtonStyle}\n closeButtonAriaLabel={\n toastOptions()?.closeButtonAriaLabel\n }\n removeToast={removeToast}\n toasts={toastsByPosition()}\n heights={heightsByPosition()}\n setHeights={setHeights}\n expandByDefault={Boolean(propsWithDefaults.expand)}\n gap={propsWithDefaults.gap}\n expanded={expanded()}\n swipeDirections={propsWithDefaults.swipeDirections}\n pauseWhenPageIsHidden={\n propsWithDefaults.pauseWhenPageIsHidden\n }\n />\n )}\n </For>\n </ol>\n </Show>\n );\n }}\n </For>\n </section>","_$createComponent","_$memo","_$getNextElement","_$scope","_$readShallow","_$setAttribute","_$getNextMarker","className","_$delegateEvents"],"sources":["../../src/assets.tsx","../../src/primitives.ts","../../src/state.ts","../../src/types.ts","../../src/index.tsx"],"sourcesContent":["/*!\n * Derived from solid-sonner (https://github.com/wobsoriano/solid-sonner), src/assets.tsx.\n * Copyright (c) 2022 Robert Soriano <https://github.com/wobsoriano>\n * Derived from Sonner (https://github.com/emilkowalski/sonner), src/assets.tsx.\n * Copyright (c) 2023 Emil Kowalski\n * Modified for Solid Aria: Solid 2 types, reactivity, lifecycle, and package integration.\n * MIT licensed. See LICENSE, SOLID-SONNER-LICENSE.md, SONNER-LICENSE.md, and NOTICE.txt in the package root.\n */\n\nimport type { JSX } from \"@solidjs/web\";\nimport { For } from \"solid-js\";\n\nimport type { ToastTypes } from \"./types\";\n\nconst bars = Array.from({ length: 12 }, () => 0);\n\nexport function Loader(props: {\n visible: boolean;\n class?: JSX.ClassValue;\n className?: string;\n}) {\n return (\n <div\n class={[\"sonner-loading-wrapper\", props.class ?? props.className]}\n data-visible={String(props.visible)}\n >\n <div class=\"sonner-spinner\">\n <For each={bars} keyed={false}>\n {(_, i) => <div class=\"sonner-loading-bar\" data-index={i} />}\n </For>\n </div>\n </div>\n );\n}\n\nfunction SuccessIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n height=\"20\"\n width=\"20\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n );\n}\n\nfunction WarningIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n height=\"20\"\n width=\"20\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n );\n}\n\nfunction InfoIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n height=\"20\"\n width=\"20\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n );\n}\n\nfunction ErrorIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n height=\"20\"\n width=\"20\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n );\n}\n\nexport function getAsset(type?: ToastTypes): JSX.Element | null {\n switch (type) {\n case \"success\": {\n return <SuccessIcon />;\n }\n\n case \"info\": {\n return <InfoIcon />;\n }\n\n case \"warning\": {\n return <WarningIcon />;\n }\n\n case \"error\": {\n return <ErrorIcon />;\n }\n\n case undefined:\n case \"action\":\n case \"default\":\n case \"loading\":\n case \"normal\": {\n return null;\n }\n\n default: {\n const unexpected: never = type;\n\n return unexpected;\n }\n }\n}\n\nexport function CloseIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n","/*!\n * Derived from solid-sonner (https://github.com/wobsoriano/solid-sonner), src/primitives.ts.\n * Copyright (c) 2022 Robert Soriano <https://github.com/wobsoriano>\n * Modified for Solid Aria: Solid 2 types, reactivity, lifecycle, and package integration.\n * MIT licensed. See LICENSE, SOLID-SONNER-LICENSE.md, SONNER-LICENSE.md, and NOTICE.txt in the package root.\n */\n\nimport { createSignal, onSettled } from \"solid-js\";\n\nexport function createIsDocumentHidden() {\n const [isDocumentHidden, setIsDocumentHidden] = createSignal(\n globalThis.document?.hidden ?? false\n );\n\n const callback = () => {\n setIsDocumentHidden(document.hidden);\n };\n\n onSettled(() => {\n document.addEventListener(\"visibilitychange\", callback);\n\n return () => {\n document.removeEventListener(\"visibilitychange\", callback);\n };\n });\n\n return isDocumentHidden;\n}\n","/*!\n * Derived from solid-sonner (https://github.com/wobsoriano/solid-sonner), src/state.ts.\n * Copyright (c) 2022 Robert Soriano <https://github.com/wobsoriano>\n * Derived from Sonner (https://github.com/emilkowalski/sonner), src/state.ts.\n * Copyright (c) 2023 Emil Kowalski\n * Modified for Solid Aria: Solid 2 types, reactivity, lifecycle, and package integration.\n * MIT licensed. See LICENSE, SOLID-SONNER-LICENSE.md, SONNER-LICENSE.md, and NOTICE.txt in the package root.\n */\n\nimport type { JSX } from \"@solidjs/web\";\n\nimport type {\n ExternalToast,\n PromiseData,\n PromiseIExtendedResult,\n PromiseT,\n ToastContent,\n ToastT,\n ToastToDismiss,\n ToastTypes,\n} from \"./types\";\n\nlet toastsCounter = 1;\n\n// Amount of toasts kept in `toast.getHistory()`. Dismissed toasts above this\n// limit are dropped so long-running apps don't hold on to them forever.\nconst MAX_HISTORY_SIZE = 100;\n\n// `custom` needs the same id `create` would pick, as it hands it to the JSX callback.\nfunction getToastId(data?: { id?: number | string }): number | string {\n if (data?.id !== undefined && data.id !== \"\") {\n return data.id;\n }\n\n const id = toastsCounter;\n toastsCounter += 1;\n\n return id;\n}\n\n// This guard parses duck-typed HTTP results at the promise boundary, including response-like mocks.\n/* eslint-disable anti-slop/no-runtime-typeof */\nfunction isHttpResponse(\n data: unknown\n): data is Pick<Response, \"ok\" | \"status\"> {\n return (\n typeof data === \"object\" &&\n data !== null &&\n \"ok\" in data &&\n typeof data.ok === \"boolean\" &&\n \"status\" in data &&\n typeof data.status === \"number\"\n );\n}\n/* eslint-enable anti-slop/no-runtime-typeof */\n\nfunction getPromiseSettings(\n value: JSX.Element | PromiseIExtendedResult\n): PromiseIExtendedResult {\n // eslint-disable-next-line anti-slop/no-runtime-typeof -- Typed callback result: distinguish settings objects from renderable values.\n return typeof value === \"object\" && value !== null && \"message\" in value\n ? value\n : { message: value };\n}\n\nfunction isValidElement(value: unknown): value is Node {\n return globalThis.Node !== undefined && value instanceof Node;\n}\n\nclass Observer {\n subscribers: ((toast: ToastT | ToastToDismiss) => void)[];\n toasts: ToastT[];\n dismissedToasts: Set<string | number>;\n private readonly pendingDismissals: Map<string | number, number>;\n\n constructor() {\n this.subscribers = [];\n this.toasts = [];\n this.dismissedToasts = new Set();\n this.pendingDismissals = new Map();\n }\n\n subscribe = (subscriber: (toast: ToastT | ToastToDismiss) => void) => {\n this.subscribers.push(subscriber);\n\n // A toast can be created before the `Toaster` had a chance to subscribe,\n // e.g. when it's called above the `Toaster` in the tree. Replay whatever\n // is still active so it doesn't get lost.\n for (const activeToast of this.getActiveToasts()) {\n subscriber(activeToast);\n }\n\n return () => {\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n\n publish = (data: ToastT) => {\n for (const subscriber of this.subscribers) {\n subscriber(data);\n }\n };\n\n addToast = (data: ToastT) => {\n this.publish(data);\n this.toasts = [...this.toasts, data];\n this.trimHistory();\n };\n\n // Keeps the history bounded without ever dropping a toast that's still on screen.\n private readonly trimHistory = () => {\n let toRemove = this.toasts.length - MAX_HISTORY_SIZE;\n\n if (toRemove <= 0) {\n return;\n }\n\n this.toasts = this.toasts.filter((toast) => {\n if (toRemove > 0 && this.dismissedToasts.has(toast.id)) {\n this.dismissedToasts.delete(toast.id);\n toRemove -= 1;\n\n return false;\n }\n\n return true;\n });\n };\n\n create = (\n data: ExternalToast & {\n message?: ToastContent;\n type?: ToastTypes;\n promise?: PromiseT;\n jsx?: JSX.Element;\n }\n ) => {\n const { message, ...rest } = data;\n const id = getToastId(data);\n\n // Cancel a dismissal that hasn't reached the subscribers yet: the toast is\n // still on screen, so this updates it. Otherwise creating a toast right\n // after dismissing the same id lets that dismissal remove the new one.\n const pendingDismissal = this.pendingDismissals.get(id);\n\n if (pendingDismissal !== undefined) {\n cancelAnimationFrame(pendingDismissal);\n this.pendingDismissals.delete(id);\n this.dismissedToasts.delete(id);\n }\n\n const wasDismissed = this.dismissedToasts.has(id);\n\n const dismissible = data.dismissible ?? true;\n\n if (wasDismissed) {\n this.dismissedToasts.delete(id);\n // The previous toast with this id is gone, so this is a brand new toast.\n // Drop the old one instead of merging into it, otherwise its props (e.g.\n // `action`) leak into the new one.\n this.toasts = this.toasts.filter((toast) => toast.id !== id);\n }\n\n const alreadyExists = wasDismissed\n ? undefined\n : this.toasts.find((toast) => toast.id === id);\n\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast) => {\n if (toast.id === id) {\n this.publish({ ...toast, ...data, dismissible, id, title: message });\n\n return {\n ...toast,\n ...data,\n dismissible,\n id,\n title: message,\n };\n }\n\n return toast;\n });\n } else {\n this.addToast({ title: message, ...rest, dismissible, id });\n }\n\n return id;\n };\n\n dismiss = (id?: number | string) => {\n if (id === undefined || id === null) {\n for (const activeToast of this.getActiveToasts()) {\n this.dismissedToasts.add(activeToast.id);\n\n for (const subscriber of this.subscribers) {\n subscriber({ dismiss: true, id: activeToast.id });\n }\n }\n\n return id;\n }\n\n this.dismissedToasts.add(id);\n\n const alreadyPending = this.pendingDismissals.get(id);\n\n if (alreadyPending !== undefined) {\n cancelAnimationFrame(alreadyPending);\n }\n\n this.pendingDismissals.set(\n id,\n requestAnimationFrame(() => {\n this.pendingDismissals.delete(id);\n\n for (const subscriber of this.subscribers) {\n subscriber({ dismiss: true, id });\n }\n })\n );\n\n return id;\n };\n\n message = (message: ToastContent, data?: ExternalToast) =>\n // `type: undefined` resets the type when this updates a toast that had one,\n // e.g. turning a loading toast into a plain one.\n this.create({ ...data, message, type: undefined });\n\n error = (message: ToastContent, data?: ExternalToast) =>\n this.create({ ...data, message, type: \"error\" });\n\n success = (message: ToastContent, data?: ExternalToast) =>\n this.create({ ...data, message, type: \"success\" });\n\n info = (message: ToastContent, data?: ExternalToast) =>\n this.create({ ...data, message, type: \"info\" });\n\n warning = (message: ToastContent, data?: ExternalToast) =>\n this.create({ ...data, message, type: \"warning\" });\n\n loading = (message: ToastContent, data?: ExternalToast) =>\n this.create({ ...data, message, type: \"loading\" });\n\n // Public promise callbacks accept renderable values or functions, so dispatch by representation.\n /* eslint-disable anti-slop/no-runtime-typeof */\n promise = <ToastData>(\n promise: PromiseT<ToastData>,\n data?: PromiseData<ToastData>\n ) => {\n if (!data) {\n // oxlint-disable-next-line unicorn/no-useless-undefined -- The optional settings branch returns no promise handle.\n return undefined;\n }\n\n let id: string | number | undefined;\n\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n description:\n typeof data.description === \"function\" ? undefined : data.description,\n message: data.loading,\n promise,\n type: \"loading\",\n });\n }\n\n const { finally: onFinally } = data;\n\n const pending = Promise.resolve(\n typeof promise === \"function\" ? promise() : promise\n );\n\n let shouldDismiss = id !== undefined;\n\n const originalPromise = (async () => {\n let result: [\"resolve\", ToastData] | [\"reject\", unknown];\n\n try {\n const response = await pending;\n result = [\"resolve\", response];\n\n if (isValidElement(response)) {\n shouldDismiss = false;\n this.create({ id, message: response, type: \"default\" });\n } else if (isHttpResponse(response) && !response.ok) {\n shouldDismiss = false;\n const error = `HTTP error! status: ${response.status}`;\n\n const message =\n typeof data.error === \"function\"\n ? await data.error(error)\n : data.error;\n\n const description =\n typeof data.description === \"function\"\n ? await data.description(error)\n : data.description;\n\n this.create({\n description,\n id,\n type: \"error\",\n ...getPromiseSettings(message),\n });\n } else if (response instanceof Error) {\n shouldDismiss = false;\n\n const message =\n typeof data.error === \"function\"\n ? await data.error(response)\n : data.error;\n\n const description =\n typeof data.description === \"function\"\n ? await data.description(response)\n : data.description;\n\n this.create({\n description,\n id,\n type: \"error\",\n ...getPromiseSettings(message),\n });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n\n const message =\n typeof data.success === \"function\"\n ? await data.success(response)\n : data.success;\n\n const description =\n typeof data.description === \"function\"\n ? await data.description(response)\n : data.description;\n\n this.create({\n description,\n id,\n type: \"success\",\n ...getPromiseSettings(message),\n });\n }\n } catch (error) {\n result = [\"reject\", error];\n\n if (data.error !== undefined) {\n shouldDismiss = false;\n\n const message =\n typeof data.error === \"function\"\n ? await data.error(error)\n : data.error;\n\n const description =\n typeof data.description === \"function\"\n ? await data.description(error)\n : data.description;\n\n this.create({\n description,\n id,\n type: \"error\",\n ...getPromiseSettings(message),\n });\n }\n } finally {\n if (shouldDismiss) {\n this.dismiss(id);\n id = undefined;\n }\n\n void onFinally?.();\n }\n\n return result;\n })();\n\n const unwrap = async () => {\n const result = await originalPromise;\n\n if (result[0] === \"reject\") {\n throw result[1];\n }\n\n return result[1];\n };\n\n if (id === undefined) {\n return { unwrap };\n }\n\n return Object.assign(id, { unwrap });\n };\n /* eslint-enable anti-slop/no-runtime-typeof */\n\n custom = (\n jsx: (id: number | string) => JSX.Element,\n data?: ExternalToast\n ) => {\n const id = getToastId(data);\n // A custom toast has no type, so it resets the one of the toast it replaces\n this.create({ ...data, id, jsx: jsx(id), type: undefined });\n\n return id;\n };\n\n getActiveToasts = () =>\n this.toasts.filter((toast) => !this.dismissedToasts.has(toast.id));\n}\n\nexport const ToastState = new Observer();\n\nfunction toastFunction(message: ToastContent, data?: ExternalToast) {\n return ToastState.message(message, data);\n}\n\nconst basicToast = toastFunction;\n\nconst getHistory = () => ToastState.toasts;\nconst getToasts = () => ToastState.getActiveToasts();\n\nexport const toast = Object.assign(\n basicToast,\n {\n custom: ToastState.custom,\n dismiss: ToastState.dismiss,\n error: ToastState.error,\n info: ToastState.info,\n loading: ToastState.loading,\n message: ToastState.message,\n promise: ToastState.promise,\n success: ToastState.success,\n warning: ToastState.warning,\n },\n {\n getHistory,\n getToasts,\n }\n);\n","/*!\n * Derived from solid-sonner (https://github.com/wobsoriano/solid-sonner), src/types.ts.\n * Copyright (c) 2022 Robert Soriano <https://github.com/wobsoriano>\n * Derived from Sonner (https://github.com/emilkowalski/sonner), src/types.ts.\n * Copyright (c) 2023 Emil Kowalski\n * Modified for Solid Aria: Solid 2 types, reactivity, lifecycle, and package integration.\n * MIT licensed. See LICENSE, SOLID-SONNER-LICENSE.md, SONNER-LICENSE.md, and NOTICE.txt in the package root.\n */\n\nimport type { JSX } from \"@solidjs/web\";\nimport type { Setter } from \"solid-js\";\n\nexport type ToastTypes =\n | \"normal\"\n | \"action\"\n | \"success\"\n | \"info\"\n | \"warning\"\n | \"error\"\n | \"loading\"\n | \"default\";\n\nexport type PromiseT<Data = unknown> = Promise<Data> | (() => Promise<Data>);\n\nexport type ToastContent = (() => JSX.Element) | JSX.Element;\n\nexport interface PromiseIExtendedResult extends ExternalToast {\n message: JSX.Element | string;\n}\n\nexport type PromiseTExtendedResult<Data = unknown> =\n | PromiseIExtendedResult\n | ((data: Data) => PromiseIExtendedResult | Promise<PromiseIExtendedResult>);\n\nexport type PromiseTResult<Data = unknown> =\n | string\n | JSX.Element\n | ((data: Data) => JSX.Element | string | Promise<JSX.Element | string>);\n\nexport type PromiseExternalToast = Omit<ExternalToast, \"description\">;\n\nexport type PromiseData<ToastData = unknown> = PromiseExternalToast & {\n loading?: string | JSX.Element;\n success?: PromiseTResult<ToastData> | PromiseTExtendedResult<ToastData>;\n error?: PromiseTResult | PromiseTExtendedResult;\n description?: PromiseTResult;\n finally?: () => void | Promise<void>;\n};\n\nexport interface ToastClassnames {\n toast?: string;\n title?: string;\n description?: string;\n loader?: string;\n closeButton?: string;\n cancelButton?: string;\n actionButton?: string;\n success?: string;\n error?: string;\n info?: string;\n warning?: string;\n loading?: string;\n default?: string;\n content?: string;\n icon?: string;\n}\n\nexport interface ToastIcons {\n success?: JSX.Element | null;\n info?: JSX.Element | null;\n warning?: JSX.Element | null;\n error?: JSX.Element | null;\n loading?: JSX.Element | null;\n close?: JSX.Element | null;\n}\n\nexport interface Action {\n label: JSX.Element;\n onClick: (event: MouseEvent) => void;\n actionButtonStyle?: JSX.CSSProperties;\n}\n\nexport interface ToastT {\n id: number | string;\n toasterId?: string;\n title?: ToastContent;\n type?: ToastTypes;\n icon?: JSX.Element | null;\n jsx?: JSX.Element;\n richColors?: boolean;\n invert?: boolean;\n closeButton?: boolean;\n dismissible?: boolean;\n description?: ToastContent;\n duration?: number;\n delete?: boolean;\n action?: Action | JSX.Element;\n cancel?: Action | JSX.Element;\n onDismiss?: (toast: ToastT) => void;\n onAutoClose?: (toast: ToastT) => void;\n promise?: PromiseT;\n cancelButtonStyle?: JSX.CSSProperties;\n actionButtonStyle?: JSX.CSSProperties;\n style?: JSX.CSSProperties;\n unstyled?: boolean;\n className?: string;\n classNames?: ToastClassnames;\n descriptionClassName?: string;\n position?: Position;\n testId?: string;\n class?: string;\n classes?: ToastClassnames;\n descriptionClass?: string;\n}\n\nexport function isAction(action: Action | JSX.Element): action is Action {\n return typeof action === \"object\" && action !== null && \"label\" in action;\n}\n\nexport type Position =\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"top-center\"\n | \"bottom-center\";\n\nexport interface HeightT {\n height: number;\n toastId: number | string;\n toasterId?: string;\n position?: Position;\n}\n\nexport interface ToastOptions {\n className?: string;\n closeButton?: boolean;\n descriptionClassName?: string;\n style?: JSX.CSSProperties;\n cancelButtonStyle?: JSX.CSSProperties;\n actionButtonStyle?: JSX.CSSProperties;\n duration?: number;\n unstyled?: boolean;\n classNames?: ToastClassnames;\n closeButtonAriaLabel?: string;\n toasterId?: string;\n class?: string;\n classes?: ToastClassnames;\n descriptionClass?: string;\n}\n\nexport type Offset =\n | {\n top?: string | number;\n right?: string | number;\n bottom?: string | number;\n left?: string | number;\n }\n | string\n | number;\n\nexport type SwipeDirection = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface ToasterProps {\n id?: string;\n invert?: boolean;\n theme?: \"light\" | \"dark\" | \"system\";\n position?: Position;\n hotkey?: string[];\n richColors?: boolean;\n expand?: boolean;\n duration?: number;\n gap?: number;\n visibleToasts?: number;\n closeButton?: boolean;\n toastOptions?: ToastOptions;\n className?: string;\n style?: JSX.CSSProperties;\n offset?: Offset;\n mobileOffset?: Offset;\n dir?: \"rtl\" | \"ltr\" | \"auto\";\n swipeDirections?: SwipeDirection[];\n icons?: ToastIcons;\n customAriaLabel?: string;\n containerAriaLabel?: string;\n pauseWhenPageIsHidden?: boolean;\n class?: string;\n}\n\nexport interface ToastProps {\n toast: ToastT;\n toasts: ToastT[];\n index: number;\n swipeDirections?: SwipeDirection[];\n expanded: boolean;\n invert: boolean;\n heights: HeightT[];\n setHeights: Setter<HeightT[]>;\n removeToast: (toast: ToastT) => void;\n gap?: number;\n position: Position;\n visibleToasts: number;\n expandByDefault: boolean;\n closeButton: boolean;\n interacting: boolean;\n style?: JSX.CSSProperties;\n cancelButtonStyle?: JSX.CSSProperties;\n actionButtonStyle?: JSX.CSSProperties;\n duration?: number;\n className?: string;\n unstyled?: boolean;\n descriptionClassName?: string;\n classNames?: ToastClassnames;\n icons?: ToastIcons;\n closeButtonAriaLabel?: string;\n defaultRichColors?: boolean;\n pauseWhenPageIsHidden?: boolean;\n class?: string;\n classes?: ToastClassnames;\n descriptionClass?: string;\n}\n\nexport enum SwipeStateTypes {\n SwipedOut = \"SwipedOut\",\n SwipedBack = \"SwipedBack\",\n NotSwiped = \"NotSwiped\",\n}\n\nexport type Theme = \"light\" | \"dark\";\n\nexport interface ToastToDismiss {\n id: number | string;\n dismiss: boolean;\n}\n\nexport type ExternalToast = Omit<\n ToastT,\n \"id\" | \"type\" | \"title\" | \"jsx\" | \"delete\" | \"promise\"\n> & {\n id?: number | string;\n toasterId?: string;\n};\n","/*!\n * Derived from solid-sonner (https://github.com/wobsoriano/solid-sonner), src/index.tsx.\n * Copyright (c) 2022 Robert Soriano <https://github.com/wobsoriano>\n * Derived from Sonner (https://github.com/emilkowalski/sonner), src/index.tsx.\n * Copyright (c) 2023 Emil Kowalski\n * Modified for Solid Aria: Solid 2 types, reactivity, lifecycle, and package integration.\n * MIT licensed. See LICENSE, SOLID-SONNER-LICENSE.md, SONNER-LICENSE.md, and NOTICE.txt in the package root.\n */\n/*!\n * Original code by Emil Kowalski\n * MIT Licensed, Copyright 2023 Emil Kowalski, see https://github.com/emilkowalski/sonner/blob/main/LICENSE.md for details\n *\n * Credits:\n * https://github.com/emilkowalski/sonner/blob/main/src/index.tsx\n */\n\nimport type { JSX } from \"@solidjs/web\";\nimport {\n For,\n Show,\n createEffect,\n createMemo,\n createRenderEffect,\n createSignal,\n createStore,\n merge,\n onCleanup,\n onSettled,\n untrack,\n} from \"solid-js\";\nimport type { Setter } from \"solid-js\";\n\nimport { CloseIcon, Loader, getAsset } from \"./assets\";\nimport { createIsDocumentHidden } from \"./primitives\";\nimport { ToastState } from \"./state\";\nimport { isAction } from \"./types\";\nimport type {\n Action,\n HeightT,\n Offset,\n Position,\n SwipeDirection,\n ToastClassnames,\n ToastContent,\n ToastIcons,\n ToastProps,\n ToastT,\n ToastTypes,\n ToasterProps,\n} from \"./types\";\n\nexport { toast } from \"./state\";\n\nconst VISIBLE_TOASTS_AMOUNT = 3;\nconst VIEWPORT_OFFSET = \"24px\";\nconst MOBILE_VIEWPORT_OFFSET = \"16px\";\nconst TOAST_LIFETIME = 4000;\nconst TOAST_WIDTH = 356;\nconst GAP = 14;\nconst SWIPE_THRESHOLD = 45;\nconst TIME_BEFORE_UNMOUNT = 200;\n\nfunction cn(...classes: (string | undefined)[]) {\n return classes;\n}\n\nfunction resolveContent(content?: ToastContent) {\n // ToastContent intentionally accepts both rendered JSX and zero-argument render functions.\n // oxlint-disable-next-line anti-slop/no-runtime-typeof -- Distinguish the public render-function form from JSX.\n return typeof content === \"function\" ? content() : content;\n}\n\nfunction isSwipeDirection(direction: string): direction is SwipeDirection {\n return (\n direction === \"top\" ||\n direction === \"right\" ||\n direction === \"bottom\" ||\n direction === \"left\"\n );\n}\n\nfunction getDefaultSwipeDirections(position: string): SwipeDirection[] {\n return position.split(\"-\").filter(isSwipeDirection);\n}\n\nfunction getDampening(delta: number) {\n const factor = Math.abs(delta) / 20;\n\n return 1 / (1.5 + factor);\n}\n\nfunction dampenMovement(delta: number, directionAllowed: boolean) {\n return directionAllowed ? delta : delta * getDampening(delta);\n}\n\nfunction getSwipeAmount(\n direction: \"x\" | \"y\" | null,\n xDelta: number,\n yDelta: number,\n allowedDirections: SwipeDirection[]\n) {\n if (\n direction === \"y\" &&\n (allowedDirections.includes(\"top\") || allowedDirections.includes(\"bottom\"))\n ) {\n const allowed =\n (allowedDirections.includes(\"top\") && yDelta < 0) ||\n (allowedDirections.includes(\"bottom\") && yDelta > 0);\n\n return { x: 0, y: dampenMovement(yDelta, allowed) };\n }\n\n if (\n direction === \"x\" &&\n (allowedDirections.includes(\"left\") || allowedDirections.includes(\"right\"))\n ) {\n const allowed =\n (allowedDirections.includes(\"left\") && xDelta < 0) ||\n (allowedDirections.includes(\"right\") && xDelta > 0);\n\n return { x: dampenMovement(xDelta, allowed), y: 0 };\n }\n\n return { x: 0, y: 0 };\n}\n\nfunction getSwipeDismissDirection(\n direction: \"x\" | \"y\" | null,\n amountX: number,\n amountY: number,\n timeTaken: number,\n allowedDirections: SwipeDirection[]\n): \"left\" | \"right\" | \"up\" | \"down\" | undefined {\n if (!direction) {\n return undefined;\n }\n\n const amount = direction === \"x\" ? amountX : amountY;\n let allowedDirection: SwipeDirection;\n\n if (direction === \"x\") {\n allowedDirection = amountX > 0 ? \"right\" : \"left\";\n } else {\n allowedDirection = amountY > 0 ? \"bottom\" : \"top\";\n }\n\n if (!allowedDirections.includes(allowedDirection)) {\n return undefined;\n }\n\n if (\n Math.abs(amount) < SWIPE_THRESHOLD &&\n Math.abs(amount) / timeTaken <= 0.11\n ) {\n return undefined;\n }\n\n if (allowedDirection === \"left\" || allowedDirection === \"right\") {\n return allowedDirection;\n }\n\n return allowedDirection === \"bottom\" ? \"down\" : \"up\";\n}\n\nfunction isToastIconType(\n type?: ToastTypes\n): type is Extract<keyof ToastIcons, ToastTypes> {\n return (\n type === \"success\" ||\n type === \"info\" ||\n type === \"warning\" ||\n type === \"error\" ||\n type === \"loading\"\n );\n}\n\nfunction isToastClassNameType(\n type?: ToastTypes\n): type is Extract<keyof ToastClassnames, ToastTypes> {\n return (\n type === \"success\" ||\n type === \"info\" ||\n type === \"warning\" ||\n type === \"error\" ||\n type === \"loading\" ||\n type === \"default\"\n );\n}\n\nfunction isDirection(value: string): value is NonNullable<ToasterProps[\"dir\"]> {\n return value === \"ltr\" || value === \"rtl\" || value === \"auto\";\n}\n\nfunction getNonActionContent(content: Action | JSX.Element): JSX.Element {\n return isAction(content) ? null : content;\n}\n\nfunction ToastActionButton(props: {\n content: Action | JSX.Element;\n kind: \"action\" | \"cancel\";\n class: JSX.ClassValue;\n style?: JSX.CSSProperties;\n onClick: (event: MouseEvent) => void;\n}) {\n return (\n <Show\n when={isAction(props.content) ? props.content : false}\n fallback={props.content}\n >\n {(action) => (\n <button\n data-button\n data-action={props.kind === \"action\" ? \"\" : undefined}\n data-cancel={props.kind === \"cancel\" ? \"\" : undefined}\n style={props.style}\n onClick={(event) => {\n props.onClick(event);\n }}\n class={props.class}\n >\n {action().label}\n </button>\n )}\n </Show>\n );\n}\n\nfunction getDocumentDirection(): ToasterProps[\"dir\"] {\n // typeof guards keep this module safe to evaluate during server rendering.\n // oxlint-disable-next-line anti-slop/no-runtime-typeof -- `window` is absent during SSR.\n if (typeof window === \"undefined\") {\n return \"ltr\";\n }\n\n // oxlint-disable-next-line anti-slop/no-runtime-typeof -- `document` is absent during SSR.\n if (typeof document === \"undefined\") {\n return \"ltr\";\n }\n\n const dirAttribute = document.documentElement.getAttribute(\"dir\");\n\n if (dirAttribute !== null && isDirection(dirAttribute)) {\n return dirAttribute;\n }\n\n const { direction } = window.getComputedStyle(document.documentElement);\n\n return isDirection(direction) ? direction : \"ltr\";\n}\n\nfunction formatOffset(value: string | number) {\n // Offset maps publicly accept numeric pixel values and strings.\n // oxlint-disable-next-line anti-slop/no-runtime-typeof -- Numeric offsets require px units.\n return typeof value === \"number\" ? `${value}px` : value;\n}\n\nfunction assignOffset(\n defaultOffset?: Offset,\n mobileOffset?: Offset\n): JSX.CSSProperties {\n const styles: Record<string, string> = {};\n\n for (const [index, offset] of [defaultOffset, mobileOffset].entries()) {\n const isMobile = index === 1;\n const prefix = isMobile ? \"--mobile-offset\" : \"--offset\";\n const defaultValue = isMobile ? MOBILE_VIEWPORT_OFFSET : VIEWPORT_OFFSET;\n\n const assignAll = (value: string | number) => {\n for (const key of [\"top\", \"right\", \"bottom\", \"left\"]) {\n // Offset API accepts numeric pixel values.\n // oxlint-disable-next-line anti-slop/no-runtime-typeof -- Convert numbers to CSS pixels.\n styles[`${prefix}-${key}`] =\n typeof value === \"number\" ? `${value}px` : value;\n }\n };\n\n // Offset is a public number/string/edge-map union.\n // oxlint-disable-next-line anti-slop/no-runtime-typeof -- Runtime branch handles scalar offset values.\n if (typeof offset === \"number\" || typeof offset === \"string\") {\n assignAll(offset);\n continue;\n }\n\n // oxlint-disable-next-line anti-slop/no-runtime-typeof -- Runtime branch handles edge-map offsets.\n if (typeof offset === \"object\" && offset !== null) {\n for (const key of [\"top\", \"right\", \"bottom\", \"left\"] as const) {\n const value = offset[key];\n styles[`${prefix}-${key}`] =\n value === undefined ? defaultValue : formatOffset(value);\n }\n\n continue;\n }\n\n assignAll(defaultValue);\n }\n\n // SAFETY: keys above are generated `--offset-*` custom properties accepted by Solid CSSProperties.\n return styles;\n}\n\nfunction mergeClassNames(\n classNames?: ToastClassnames,\n legacy?: ToastClassnames\n) {\n return classNames ?? legacy;\n}\n\nfunction mergeDescriptionClassName(\n descriptionClassName?: string,\n legacy?: string\n) {\n return descriptionClassName ?? legacy ?? \"\";\n}\n\nfunction mergeClassName(className?: string, legacy?: string) {\n return className ?? legacy ?? \"\";\n}\n\nfunction useSonner() {\n // Starts empty: subscribing replays whatever is already active.\n const [activeToasts, setActiveToasts] = createSignal<ToastT[]>([]);\n\n onSettled(() => {\n const unsubscribe = ToastState.subscribe((toastItem) => {\n if (\"dismiss\" in toastItem) {\n setActiveToasts((toasts) =>\n toasts.filter((t) => t.id !== toastItem.id)\n );\n\n return;\n }\n\n setActiveToasts((toasts) => {\n const indexOfExistingToast = toasts.findIndex(\n (t) => t.id === toastItem.id\n );\n\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n { ...toasts[indexOfExistingToast], ...toastItem },\n ...toasts.slice(indexOfExistingToast + 1),\n ];\n }\n\n return [toastItem, ...toasts];\n });\n });\n\n return unsubscribe;\n });\n\n return {\n toasts: activeToasts,\n };\n}\n\nfunction createToastTheme(theme: ToasterProps[\"theme\"]) {\n if (theme !== \"system\") {\n return theme;\n }\n\n // oxlint-disable-next-line anti-slop/no-runtime-typeof -- `window` is absent during SSR.\n return typeof window !== \"undefined\" &&\n window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n}\n\n/* eslint-disable solid/reactivity */\nfunction ToastBody(props: {\n toast: ToastT;\n closeButton: boolean;\n closeButtonAriaLabel?: string;\n disabled: boolean;\n dismissible: boolean;\n icons?: ToastIcons;\n classNames?: ToastClassnames;\n toastClassNames?: ToastClassnames;\n descriptionClassName: string;\n toastDescriptionClassName: string;\n cancelButtonStyle?: JSX.CSSProperties;\n actionButtonStyle?: JSX.CSSProperties;\n getLoadingIcon: () => JSX.Element;\n getIcon: () => JSX.Element;\n onDelete: () => void;\n onDismiss: () => void;\n}) {\n const classNames = () => props.classNames;\n const toastClassNames = () => props.toastClassNames;\n const toastType = () => props.toast.type;\n const hasCustomContent = () => Boolean(props.toast.jsx);\n\n const hasIcon = () => {\n const type = toastType();\n const typeIcon = isToastIconType(type) ? props.icons?.[type] : undefined;\n\n return (\n (type !== undefined ||\n Boolean(props.toast.icon) ||\n props.toast.promise !== undefined) &&\n props.toast.icon !== null &&\n (typeIcon !== null || Boolean(props.toast.icon))\n );\n };\n\n const loadingIconContent = () => {\n if (toastType() === \"loading\") {\n return props.toast.icon ?? props.getLoadingIcon();\n }\n\n if (props.toast.promise) {\n return props.getLoadingIcon();\n }\n\n return null;\n };\n\n return (\n <>\n <Show\n when={\n props.closeButton && !hasCustomContent() && toastType() !== \"loading\"\n }\n >\n <button\n aria-label={props.closeButtonAriaLabel ?? \"Close toast\"}\n data-disabled={String(props.disabled)}\n data-close-button\n onPointerDown={(event) => {\n event.stopPropagation();\n }}\n onPointerUp={(event) => {\n event.stopPropagation();\n }}\n onClick={() => {\n if (props.disabled || !props.dismissible) {\n return;\n }\n\n props.onDelete();\n props.onDismiss();\n }}\n class={cn(classNames()?.closeButton, toastClassNames()?.closeButton)}\n >\n {props.icons?.close ?? <CloseIcon />}\n </button>\n </Show>\n\n <Show when={hasIcon()}>\n <div\n data-icon=\"\"\n class={cn(classNames()?.icon, toastClassNames()?.icon)}\n >\n {loadingIconContent()}\n {toastType() === \"loading\" ? null : props.getIcon()}\n </div>\n </Show>\n\n <div\n data-content=\"\"\n class={cn(classNames()?.content, toastClassNames()?.content)}\n >\n <div\n data-title=\"\"\n class={cn(classNames()?.title, toastClassNames()?.title)}\n >\n {props.toast.jsx ?? resolveContent(props.toast.title)}\n </div>\n <Show when={props.toast.description}>\n <div\n data-description=\"\"\n class={cn(\n props.descriptionClassName,\n props.toastDescriptionClassName,\n classNames()?.description,\n toastClassNames()?.description\n )}\n >\n {resolveContent(props.toast.description)}\n </div>\n </Show>\n </div>\n\n <Show when={props.toast.cancel}>\n {(cancel) => (\n <Show\n when={!isAction(cancel())}\n fallback={\n <ToastActionButton\n content={cancel()}\n kind=\"cancel\"\n style={props.toast.cancelButtonStyle ?? props.cancelButtonStyle}\n class={cn(\n classNames()?.cancelButton,\n toastClassNames()?.cancelButton\n )}\n onClick={(event) => {\n if (!props.dismissible) {\n return;\n }\n\n const currentCancel = cancel();\n\n if (!isAction(currentCancel)) {\n return;\n }\n\n currentCancel.onClick?.(event);\n props.onDelete();\n }}\n />\n }\n >\n {getNonActionContent(cancel())}\n </Show>\n )}\n </Show>\n\n <Show when={props.toast.action}>\n {(action) => (\n <Show\n when={!isAction(action())}\n fallback={\n <ToastActionButton\n content={action()}\n kind=\"action\"\n style={props.toast.actionButtonStyle ?? props.actionButtonStyle}\n class={cn(\n classNames()?.actionButton,\n toastClassNames()?.actionButton\n )}\n onClick={(event) => {\n const currentAction = action();\n\n if (!isAction(currentAction)) {\n return;\n }\n\n currentAction.onClick?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n props.onDelete();\n }}\n />\n }\n >\n {getNonActionContent(action())}\n </Show>\n )}\n </Show>\n </>\n );\n}\n\nfunction setupToastEffects({\n props,\n mounted,\n getToastElement,\n isRemoving,\n isDocumentHidden,\n duration,\n removed,\n deleteToast,\n setInitialHeight,\n}: {\n props: ToastProps;\n mounted: () => boolean;\n getToastElement: () => HTMLLIElement | undefined;\n isRemoving: () => boolean;\n isDocumentHidden: () => boolean;\n duration: () => number;\n removed: () => boolean;\n deleteToast: () => void;\n setInitialHeight: Setter<number>;\n}) {\n let remainingTime = TOAST_LIFETIME;\n\n createRenderEffect(\n () => ({\n mounted: mounted(),\n position: props.toast.position,\n toastId: props.toast.id,\n toasterId: props.toast.toasterId,\n }),\n (metadata): (() => void) | undefined => {\n const toastElement = getToastElement();\n\n if (!metadata.mounted || !toastElement) {\n return undefined;\n }\n\n const measure = () => {\n const currentElement = getToastElement();\n\n if (!currentElement || isRemoving()) {\n return;\n }\n\n const originalHeight = currentElement.style.height;\n currentElement.style.height = \"auto\";\n const { height } = currentElement.getBoundingClientRect();\n currentElement.style.height = originalHeight;\n setInitialHeight(height);\n props.setHeights((heights) => {\n const entry = {\n height,\n position: metadata.position,\n toastId: metadata.toastId,\n toasterId: metadata.toasterId,\n };\n\n return heights.some((item) => item.toastId === entry.toastId)\n ? heights.map((item) =>\n item.toastId === entry.toastId ? entry : item\n )\n : [entry, ...heights];\n });\n };\n\n measure();\n const observer = new ResizeObserver(measure);\n observer.observe(toastElement);\n\n return () => {\n observer.disconnect();\n };\n }\n );\n\n createEffect(\n () =>\n [\n props.expanded,\n props.interacting,\n props.toast.type,\n isDocumentHidden(),\n duration(),\n props.pauseWhenPageIsHidden ?? true,\n props.toast.title,\n removed(),\n ] as const,\n (\n [\n expanded,\n interacting,\n type,\n hidden,\n lifetime,\n pauseWhenHidden,\n title,\n isRemoved,\n ],\n previous\n ): (() => void) | undefined => {\n if (\n isRemoved ||\n type === \"loading\" ||\n lifetime === Number.POSITIVE_INFINITY\n ) {\n return undefined;\n }\n\n if (\n !previous ||\n previous[2] !== type ||\n previous[4] !== lifetime ||\n previous[6] !== title\n ) {\n remainingTime = lifetime;\n }\n\n if (expanded || interacting || (pauseWhenHidden && hidden)) {\n return undefined;\n }\n\n const startedAt = Date.now();\n\n const timer = setTimeout(\n () => {\n props.toast.onAutoClose?.(props.toast);\n deleteToast();\n },\n Math.max(0, remainingTime)\n );\n\n return () => {\n clearTimeout(timer);\n remainingTime -= Date.now() - startedAt;\n };\n }\n );\n\n createEffect(\n () => props.toast.delete,\n (shouldDelete) => {\n if (shouldDelete !== true) {\n return;\n }\n\n untrack(() => {\n deleteToast();\n props.toast.onDismiss?.(props.toast);\n });\n }\n );\n}\n\nfunction Toast(props: ToastProps) {\n const [mounted, setMounted] = createSignal(false);\n const [removed, setRemoved] = createSignal(false);\n const [swiping, setSwiping] = createSignal(false);\n const [swipeOut, setSwipeOut] = createSignal(false);\n const [isSwiped, setIsSwiped] = createSignal(false);\n let swipeDirection: \"x\" | \"y\" | null = null;\n\n const [swipeOutDirection, setSwipeOutDirection] = createSignal<\n \"left\" | \"right\" | \"up\" | \"down\" | null\n >(null);\n\n const [offsetBeforeRemove, setOffsetBeforeRemove] = createSignal(0);\n const [initialHeight, setInitialHeight] = createSignal(0);\n let toastRef: HTMLLIElement | undefined;\n let dragStartTime = 0;\n let pointerStart: { x: number; y: number } | null = null;\n let removalTimer: ReturnType<typeof setTimeout> | undefined;\n\n onCleanup(() => {\n clearTimeout(removalTimer);\n });\n\n const isFront = () => props.index === 0;\n const isVisible = () => props.index + 1 <= props.visibleToasts;\n const toastType = () => props.toast.type;\n const dismissible = () => props.toast.dismissible !== false;\n const classNames = () => mergeClassNames(props.classNames, props.classes);\n const className = () => mergeClassName(props.className, props.class);\n\n const descriptionClassName = () =>\n mergeDescriptionClassName(\n props.descriptionClassName,\n props.descriptionClass\n );\n\n const toastClassName = () =>\n mergeClassName(props.toast.className, props.toast.class);\n\n const toastDescriptionClassName = () =>\n mergeDescriptionClassName(\n props.toast.descriptionClassName,\n props.toast.descriptionClass\n );\n\n const toastClassNames = () =>\n mergeClassNames(props.toast.classNames, props.toast.classes);\n\n const closeButton = () => props.toast.closeButton ?? props.closeButton;\n\n const duration = () =>\n props.toast.duration ?? props.duration ?? TOAST_LIFETIME;\n\n const invert = () => props.toast.invert ?? props.invert;\n const disabled = () => toastType() === \"loading\";\n\n // Toasts created with `toast()` have no type, `classNames.default` is the key for those.\n const toastTypeKey = () => {\n const type = toastType();\n\n return isToastClassNameType(type) ? type : \"default\";\n };\n\n const swipeDirections = () =>\n props.swipeDirections ?? getDefaultSwipeDirections(props.position);\n\n const y = createMemo(() => props.position.split(\"-\")[0]);\n const x = createMemo(() => props.position.split(\"-\")[1]);\n\n const heightIndex = createMemo(() =>\n Math.max(\n 0,\n props.heights.findIndex((height) => height.toastId === props.toast.id)\n )\n );\n\n const toastsHeightBefore = createMemo(() => {\n let total = 0;\n\n for (const [index, height] of props.heights.entries()) {\n if (index >= heightIndex()) {\n break;\n }\n\n total += height.height;\n }\n\n return total;\n });\n\n const offset = createMemo(\n () => heightIndex() * (props.gap ?? GAP) + toastsHeightBefore()\n );\n\n const isDocumentHidden = createIsDocumentHidden();\n\n function deleteToast() {\n if (removalTimer !== undefined) {\n return;\n }\n\n setRemoved(true);\n setOffsetBeforeRemove(offset());\n props.setHeights((heights) =>\n heights.filter((height) => height.toastId !== props.toast.id)\n );\n\n removalTimer = setTimeout(() => {\n props.removeToast(props.toast);\n }, TIME_BEFORE_UNMOUNT);\n }\n\n function getLoadingIcon() {\n if (\n props.icons?.loading !== undefined &&\n props.icons.loading !== null &&\n props.icons.loading !== false\n ) {\n return (\n <div\n class={cn(\n classNames()?.loader,\n toastClassNames()?.loader,\n \"sonner-loader\"\n )}\n data-visible={String(toastType() === \"loading\")}\n >\n {props.icons.loading}\n </div>\n );\n }\n\n return (\n <Loader\n class={cn(classNames()?.loader, toastClassNames()?.loader)}\n visible={toastType() === \"loading\"}\n />\n );\n }\n\n const icon = () => {\n const type = toastType();\n\n return (\n props.toast.icon ??\n (isToastIconType(type) ? props.icons?.[type] : undefined) ??\n getAsset(type)\n );\n };\n\n onSettled(() => {\n setMounted(true);\n });\n\n setupToastEffects({\n deleteToast,\n duration,\n getToastElement: () => toastRef,\n isDocumentHidden,\n isRemoving: () => removalTimer !== undefined,\n mounted,\n props,\n removed,\n setInitialHeight,\n });\n\n function handleDragEnd() {\n setSwiping(false);\n swipeDirection = null;\n pointerStart = null;\n }\n\n function handlePointerDown(\n event: PointerEvent & { currentTarget: HTMLLIElement }\n ) {\n if (event.button === 2 || disabled() || !dismissible()) {\n return;\n }\n\n if (event.target instanceof Element && event.target.closest(\"button\")) {\n return;\n }\n\n dragStartTime = Date.now();\n setOffsetBeforeRemove(offset());\n event.currentTarget.setPointerCapture(event.pointerId);\n setSwiping(true);\n pointerStart = { x: event.clientX, y: event.clientY };\n }\n\n function handlePointerUp() {\n if (swipeOut() || !dismissible()) {\n return;\n }\n\n pointerStart = null;\n\n const amountX = Number(\n toastRef?.style.getPropertyValue(\"--swipe-amount-x\").replace(\"px\", \"\") ??\n 0\n );\n\n const amountY = Number(\n toastRef?.style.getPropertyValue(\"--swipe-amount-y\").replace(\"px\", \"\") ??\n 0\n );\n\n const timeTaken = Math.max(1, Date.now() - dragStartTime);\n\n const direction = getSwipeDismissDirection(\n swipeDirection,\n amountX,\n amountY,\n timeTaken,\n swipeDirections()\n );\n\n if (direction) {\n setOffsetBeforeRemove(offset());\n props.toast.onDismiss?.(props.toast);\n setSwipeOutDirection(direction);\n deleteToast();\n setSwipeOut(true);\n\n return;\n }\n\n toastRef?.style.setProperty(\"--swipe-amount-x\", \"0px\");\n toastRef?.style.setProperty(\"--swipe-amount-y\", \"0px\");\n setIsSwiped(false);\n setSwiping(false);\n swipeDirection = null;\n }\n\n function handlePointerMove(event: PointerEvent) {\n const start = pointerStart;\n\n if (\n !start ||\n !dismissible() ||\n Boolean(window.getSelection()?.toString())\n ) {\n return;\n }\n\n const xDelta = event.clientX - start.x;\n const yDelta = event.clientY - start.y;\n\n if (!swipeDirection && (Math.abs(xDelta) > 1 || Math.abs(yDelta) > 1)) {\n swipeDirection = Math.abs(xDelta) > Math.abs(yDelta) ? \"x\" : \"y\";\n }\n\n const amount = getSwipeAmount(\n swipeDirection,\n xDelta,\n yDelta,\n swipeDirections()\n );\n\n if (amount.x !== 0 || amount.y !== 0) {\n setIsSwiped(true);\n }\n\n toastRef?.style.setProperty(\"--swipe-amount-x\", `${amount.x}px`);\n toastRef?.style.setProperty(\"--swipe-amount-y\", `${amount.y}px`);\n }\n\n return (\n <li\n tabindex={0}\n ref={(element) => {\n toastRef = element;\n }}\n class={cn(\n className(),\n toastClassName(),\n classNames()?.toast,\n toastClassNames()?.toast,\n classNames()?.[toastTypeKey()],\n toastClassNames()?.[toastTypeKey()]\n )}\n data-sonner-toast=\"\"\n data-rich-colors={String(\n Boolean(props.toast.richColors ?? props.defaultRichColors)\n )}\n data-styled={String(\n (props.toast.jsx === undefined ||\n props.toast.jsx === null ||\n props.toast.jsx === false ||\n props.toast.jsx === 0 ||\n props.toast.jsx === \"\") &&\n props.toast.unstyled !== true &&\n props.unstyled !== true\n )}\n data-mounted={String(mounted())}\n data-promise={String(Boolean(props.toast.promise))}\n data-swiped={String(isSwiped())}\n data-removed={String(removed())}\n data-visible={String(isVisible())}\n data-y-position={y()}\n data-x-position={x()}\n data-index={props.index}\n data-front={String(isFront())}\n data-swiping={String(swiping())}\n data-dismissible={String(dismissible())}\n data-type={toastType()}\n data-invert={String(invert())}\n data-swipe-out={String(swipeOut())}\n data-swipe-direction={swipeOutDirection()}\n data-expanded={String(\n props.expanded || (props.expandByDefault && mounted())\n )}\n data-testid={props.toast.testId}\n style={{\n \"--index\": props.index,\n \"--initial-height\": props.expandByDefault\n ? \"auto\"\n : `${initialHeight()}px`,\n \"--offset\": `${removed() ? offsetBeforeRemove() : offset()}px`,\n \"--toasts-before\": props.index,\n \"--z-index\": props.toasts.length - props.index,\n ...props.style,\n ...props.toast.style,\n }}\n onDragEnd={handleDragEnd}\n onPointerDown={handlePointerDown}\n onPointerUp={handlePointerUp}\n onPointerMove={handlePointerMove}\n >\n <ToastBody\n actionButtonStyle={props.actionButtonStyle}\n cancelButtonStyle={props.cancelButtonStyle}\n classNames={classNames()}\n closeButton={closeButton()}\n closeButtonAriaLabel={props.closeButtonAriaLabel}\n descriptionClassName={descriptionClassName()}\n disabled={disabled()}\n dismissible={dismissible()}\n getIcon={icon}\n getLoadingIcon={getLoadingIcon}\n icons={props.icons}\n onDelete={deleteToast}\n onDismiss={() => props.toast.onDismiss?.(props.toast)}\n toast={props.toast}\n toastClassNames={toastClassNames()}\n toastDescriptionClassName={toastDescriptionClassName()}\n />\n </li>\n );\n}\n\n/* eslint-enable solid/reactivity */\n\nfunction Toaster(props: ToasterProps) {\n /* eslint-disable solid/reactivity */\n const propsWithDefaults = merge(\n {\n containerAriaLabel: \"Notifications\",\n dir: getDocumentDirection(),\n gap: GAP,\n hotkey: [\"altKey\", \"KeyT\"],\n position: \"bottom-right\" as const,\n theme: \"light\" as const,\n visibleToasts: VISIBLE_TOASTS_AMOUNT,\n },\n props\n );\n\n const initialTheme = untrack(() => createToastTheme(propsWithDefaults.theme));\n\n const [toastsStore, setToastsStore] = createStore<{ toasts: ToastT[] }>({\n toasts: [],\n });\n\n const filteredToasts = createMemo(() => {\n const { toasts } = toastsStore;\n\n if (propsWithDefaults.id !== undefined && propsWithDefaults.id !== \"\") {\n return toasts.filter((toast) => toast.toasterId === propsWithDefaults.id);\n }\n\n return toasts.filter(\n (toast) => toast.toasterId === undefined || toast.toasterId === \"\"\n );\n });\n\n const possiblePositions = createMemo<Position[]>(() => [\n ...new Set([\n propsWithDefaults.position,\n ...filteredToasts()\n .filter(\n (toast): toast is ToastT & { position: Position } =>\n toast.position !== undefined\n )\n .map((toast) => toast.position),\n ]),\n ]);\n\n const [heights, setHeights] = createSignal<HeightT[]>([]);\n const [expanded, setExpanded] = createSignal(false);\n const [interacting, setInteracting] = createSignal(false);\n const [actualTheme, setActualTheme] = createSignal(initialTheme);\n\n const [lastFocusedElementRef, setLastFocusedElementRef] =\n createSignal<HTMLElement | null>(null);\n\n const [isFocusWithinRef, setIsFocusWithinRef] = createSignal(false);\n let listRef: HTMLOListElement | undefined;\n\n const hotkeyLabel = () =>\n propsWithDefaults.hotkey\n .join(\"+\")\n .replaceAll(\"Key\", \"\")\n .replaceAll(\"Digit\", \"\");\n\n const className = () =>\n mergeClassName(propsWithDefaults.className, propsWithDefaults.class);\n\n const toastOptions = () => propsWithDefaults.toastOptions;\n\n const toastClassNames = () =>\n mergeClassNames(toastOptions()?.classNames, toastOptions()?.classes);\n\n const toastDescriptionClassName = () =>\n mergeDescriptionClassName(\n toastOptions()?.descriptionClassName,\n toastOptions()?.descriptionClass\n );\n\n const toastClassName = () =>\n mergeClassName(toastOptions()?.className, toastOptions()?.class);\n\n const removeToast = (toastToRemove: ToastT) => {\n if (\n !untrack(\n () =>\n toastsStore.toasts.find((toast) => toast.id === toastToRemove.id)\n ?.delete === true\n )\n ) {\n ToastState.dismiss(toastToRemove.id);\n }\n\n setToastsStore((draft) => {\n draft.toasts = draft.toasts.filter(({ id }) => id !== toastToRemove.id);\n });\n };\n\n onSettled(() =>\n ToastState.subscribe((toastItem) => {\n setToastsStore((draft) => {\n if (\"dismiss\" in toastItem) {\n const existing = draft.toasts.find(\n (toast) => toast.id === toastItem.id\n );\n\n if (existing) {\n existing.delete = true;\n }\n\n return;\n }\n\n const index = draft.toasts.findIndex(\n (toast) => toast.id === toastItem.id\n );\n\n const existing = draft.toasts[index];\n\n if (existing === undefined) {\n draft.toasts.unshift(toastItem);\n } else if (existing.delete === true) {\n draft.toasts[index] = toastItem;\n } else {\n Object.assign(existing, toastItem);\n }\n });\n })\n );\n\n createEffect(\n () => propsWithDefaults.theme,\n (theme): (() => void) | undefined => {\n if (theme !== \"system\") {\n setActualTheme(theme);\n\n return undefined;\n }\n\n // oxlint-disable-next-line anti-slop/no-runtime-typeof -- `window` is absent during SSR.\n if (typeof window === \"undefined\") {\n return undefined;\n }\n\n const query = window.matchMedia(\"(prefers-color-scheme: dark)\");\n\n const updateTheme = () => {\n setActualTheme(query.matches ? \"dark\" : \"light\");\n };\n\n updateTheme();\n query.addEventListener(\"change\", updateTheme);\n\n return () => {\n query.removeEventListener(\"change\", updateTheme);\n };\n }\n );\n\n createEffect(\n () => filteredToasts().length,\n (length) => {\n if (length <= 1) {\n setExpanded(false);\n }\n }\n );\n\n function handleKeyDown(event: KeyboardEvent) {\n const modifierKeys = new Map([\n [\"altKey\", event.altKey],\n [\"ctrlKey\", event.ctrlKey],\n [\"metaKey\", event.metaKey],\n [\"shiftKey\", event.shiftKey],\n ]);\n\n const isHotkeyPressed =\n propsWithDefaults.hotkey.length > 0 &&\n propsWithDefaults.hotkey.every(\n (key) => modifierKeys.get(key) === true || event.code === key\n );\n\n if (isHotkeyPressed) {\n setExpanded(true);\n listRef?.focus();\n }\n\n if (\n event.code === \"Escape\" &&\n (document.activeElement === listRef ||\n listRef?.contains(document.activeElement) === true)\n ) {\n setExpanded(false);\n }\n }\n\n onSettled(() => {\n document.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n });\n\n onCleanup(() => {\n if (lastFocusedElementRef()) {\n lastFocusedElementRef()?.focus({ preventScroll: true });\n }\n });\n\n return (\n <section\n aria-label={\n propsWithDefaults.customAriaLabel ??\n `${propsWithDefaults.containerAriaLabel} ${hotkeyLabel()}`\n }\n tabindex={-1}\n aria-live=\"polite\"\n aria-relevant=\"additions text\"\n aria-atomic=\"false\"\n data-react-aria-top-layer\n >\n <For each={possiblePositions()}>\n {(position, index) => {\n const [y, x] = position.split(\"-\");\n\n const toastsByPosition = createMemo(() =>\n filteredToasts().filter(\n (toast) =>\n (!toast.position && index() === 0) ||\n toast.position === position\n )\n );\n\n const heightsByPosition = createMemo(() =>\n heights().filter(\n (height) =>\n (index() === 0 && !height.position) ||\n height.position === position\n )\n );\n\n return (\n <Show when={filteredToasts().length > 0}>\n <ol\n tabindex={-1}\n ref={(element) => {\n listRef = element;\n }}\n dir={\n propsWithDefaults.dir === \"auto\"\n ? getDocumentDirection()\n : propsWithDefaults.dir\n }\n class={className()}\n data-sonner-toaster\n data-sonner-theme={actualTheme()}\n data-y-position={y}\n data-x-position={x}\n style={{\n \"--front-toast-height\": `${heightsByPosition()[0]?.height ?? 0}px`,\n \"--gap\": `${propsWithDefaults.gap}px`,\n \"--width\": `${TOAST_WIDTH}px`,\n ...propsWithDefaults.style,\n ...assignOffset(\n propsWithDefaults.offset,\n propsWithDefaults.mobileOffset\n ),\n }}\n onBlur={(event) => {\n if (\n isFocusWithinRef() &&\n (!(event.relatedTarget instanceof Node) ||\n !event.currentTarget.contains(event.relatedTarget))\n ) {\n setIsFocusWithinRef(false);\n\n if (lastFocusedElementRef()) {\n lastFocusedElementRef()?.focus({ preventScroll: true });\n setLastFocusedElementRef(null);\n }\n }\n }}\n onFocus={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement &&\n event.target.dataset.dismissible === \"false\";\n\n if (isNotDismissible) {\n return;\n }\n\n if (!isFocusWithinRef()) {\n setIsFocusWithinRef(true);\n setLastFocusedElementRef(\n event.relatedTarget instanceof HTMLElement\n ? event.relatedTarget\n : null\n );\n }\n }}\n onMouseEnter={() => {\n setExpanded(true);\n }}\n onMouseMove={() => {\n setExpanded(true);\n }}\n onMouseLeave={() => {\n if (!interacting()) {\n setExpanded(false);\n }\n }}\n onDragEnd={() => {\n setExpanded(false);\n }}\n onPointerDown={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement &&\n event.target.dataset.dismissible === \"false\";\n\n if (isNotDismissible) {\n return;\n }\n\n setInteracting(true);\n }}\n onPointerUp={() => {\n setInteracting(false);\n }}\n >\n <For each={toastsByPosition()}>\n {(toastItem, toastIndex) => (\n <Toast\n icons={propsWithDefaults.icons}\n index={toastIndex()}\n toast={toastItem}\n defaultRichColors={propsWithDefaults.richColors}\n duration={\n toastOptions()?.duration ?? propsWithDefaults.duration\n }\n class={toastClassName()}\n descriptionClassName={toastDescriptionClassName()}\n invert={Boolean(propsWithDefaults.invert)}\n visibleToasts={propsWithDefaults.visibleToasts}\n closeButton={\n toastOptions()?.closeButton ??\n propsWithDefaults.closeButton ??\n false\n }\n interacting={interacting()}\n position={position}\n style={toastOptions()?.style}\n unstyled={toastOptions()?.unstyled}\n classNames={toastClassNames()}\n cancelButtonStyle={toastOptions()?.cancelButtonStyle}\n actionButtonStyle={toastOptions()?.actionButtonStyle}\n closeButtonAriaLabel={\n toastOptions()?.closeButtonAriaLabel\n }\n removeToast={removeToast}\n toasts={toastsByPosition()}\n heights={heightsByPosition()}\n setHeights={setHeights}\n expandByDefault={Boolean(propsWithDefaults.expand)}\n gap={propsWithDefaults.gap}\n expanded={expanded()}\n swipeDirections={propsWithDefaults.swipeDirections}\n pauseWhenPageIsHidden={\n propsWithDefaults.pauseWhenPageIsHidden\n }\n />\n )}\n </For>\n </ol>\n </Show>\n );\n }}\n </For>\n </section>\n );\n}\n\nexport { Toaster, useSonner };\n\nexport type * from \"./types\";\n"],"mappings":"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"}
|