@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":["<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>","data-visible={String(props.visible)}","String(props.visible)","<For each={bars} keyed={false}>\n {(_, i) => <div class=\"sonner-loading-bar\" data-index={i} />}\n </For>","each={bars}","keyed={false}","<div class=\"sonner-loading-bar\" data-index={i} />","data-index={i}","i","<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>","<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","_$ssrHydrationKey","_$ssrGroup","_$ssrAttribute","_$ssrClassName","_$escape","_$ssr","unexpected","isAction(props.content) ? props.content : false","props.closeButton && !hasCustomContent() && toastType() !== \"loading\"","aria-label={props.closeButtonAriaLabel ?? \"Close toast\"}","props.closeButtonAriaLabel ?? \"Close toast\"","data-disabled={String(props.disabled)}","String(props.disabled)","{props.icons?.close ?? <CloseIcon />}","props.icons?.close ?? <CloseIcon />","<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>","{loadingIconContent()}","loadingIconContent()","{toastType() === \"loading\" ? null : props.getIcon()}","null","props.getIcon()","<div\n data-icon=\"\"\n class={cn(classNames()?.icon, toastClassNames()?.icon)}\n >\n {loadingIconContent()}\n {toastType() === \"loading\" ? null : props.getIcon()}\n </div>","class={cn(classNames()?.icon, toastClassNames()?.icon)}","{resolveContent(props.toast.description)}","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>","class={cn(\n props.descriptionClassName,\n props.toastDescriptionClassName,\n classNames()?.description,\n toastClassNames()?.description\n )}","data-action={props.kind === \"action\" ? \"\" : undefined}","undefined","data-cancel={props.kind === \"cancel\" ? \"\" : undefined}","{action().label}","action().label","<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>","{props.toast.jsx ?? resolveContent(props.toast.title)}","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>","<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>","<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>","data-visible={String(toastType() === \"loading\")}","String(toastType() === \"loading\")","{props.icons.loading}","props.icons.loading","<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>","data-rich-colors={String(\n Boolean(props.toast.richColors ?? props.defaultRichColors)\n )}","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 )}","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())}","String(mounted())","data-promise={String(Boolean(props.toast.promise))}","String(Boolean(props.toast.promise))","data-swiped={String(isSwiped())}","String(isSwiped())","data-removed={String(removed())}","String(removed())","data-visible={String(isVisible())}","String(isVisible())","data-y-position={y()}","y()","data-x-position={x()}","x()","data-index={props.index}","props.index","data-front={String(isFront())}","String(isFront())","data-swiping={String(swiping())}","String(swiping())","data-dismissible={String(dismissible())}","String(dismissible())","data-type={toastType()}","toastType()","data-invert={String(invert())}","String(invert())","data-swipe-out={String(swipeOut())}","String(swipeOut())","data-swipe-direction={swipeOutDirection()}","swipeOutDirection()","data-expanded={String(\n props.expanded || (props.expandByDefault && mounted())\n )}","String(\n props.expanded || (props.expandByDefault && mounted())\n )","data-testid={props.toast.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 }}","<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 />","<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>","propsWithDefaults.customAriaLabel ??\n `${propsWithDefaults.containerAriaLabel} ${hotkeyLabel()}`","<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>","dir={\n propsWithDefaults.dir === \"auto\"\n ? getDocumentDirection()\n : propsWithDefaults.dir\n }","getDocumentDirection()","propsWithDefaults.dir","data-sonner-theme={actualTheme()}","actualTheme()","<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>","<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>","data-y-position={y}","y","data-x-position={x}","x","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 }}","aria-label={\n propsWithDefaults.customAriaLabel ??\n `${propsWithDefaults.containerAriaLabel} ${hotkeyLabel()}`\n }","_$memo","_$ssrHydrationKey","_$ssrGroup","_$ssrAttribute","_$escape","_$ssrClassName","_$scope","_$ssr","_$ssrStyle"],"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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"}
|