@spark-ui/components 14.1.2 → 15.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/FormFieldRequiredIndicator-CHfcoT2y.js +2 -0
  2. package/dist/FormFieldRequiredIndicator-CHfcoT2y.js.map +1 -0
  3. package/dist/FormFieldRequiredIndicator-DTnCGiX2.mjs +13 -0
  4. package/dist/FormFieldRequiredIndicator-DTnCGiX2.mjs.map +1 -0
  5. package/dist/dialog/Dialog.d.ts +1 -0
  6. package/dist/dialog/index.js +1 -1
  7. package/dist/dialog/index.js.map +1 -1
  8. package/dist/dialog/index.mjs +19 -18
  9. package/dist/dialog/index.mjs.map +1 -1
  10. package/dist/form-field/index.js +1 -1
  11. package/dist/form-field/index.js.map +1 -1
  12. package/dist/form-field/index.mjs +76 -81
  13. package/dist/form-field/index.mjs.map +1 -1
  14. package/dist/slider/Slider.d.ts +8 -13
  15. package/dist/slider/SliderContext.d.ts +7 -1
  16. package/dist/slider/SliderControl.d.ts +7 -0
  17. package/dist/slider/SliderIndicator.d.ts +7 -0
  18. package/dist/slider/SliderLabel.d.ts +13 -0
  19. package/dist/slider/SliderMaxValue.d.ts +6 -0
  20. package/dist/slider/SliderMinValue.d.ts +6 -0
  21. package/dist/slider/SliderThumb.d.ts +4 -11
  22. package/dist/slider/SliderThumbContext.d.ts +5 -0
  23. package/dist/slider/SliderTrack.d.ts +4 -11
  24. package/dist/slider/SliderTrack.styles.d.ts +1 -4
  25. package/dist/slider/SliderValue.d.ts +10 -0
  26. package/dist/slider/index.d.mts +13 -1
  27. package/dist/slider/index.d.ts +13 -1
  28. package/dist/slider/index.js +1 -1
  29. package/dist/slider/index.js.map +1 -1
  30. package/dist/slider/index.mjs +290 -127
  31. package/dist/slider/index.mjs.map +1 -1
  32. package/dist/slider/useSliderValueBoundaries.d.ts +12 -0
  33. package/dist/toast/index.js +1 -1
  34. package/dist/toast/index.js.map +1 -1
  35. package/dist/toast/index.mjs +154 -129
  36. package/dist/toast/index.mjs.map +1 -1
  37. package/dist/toast/types.d.ts +4 -1
  38. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/toast/Toast.styles.ts","../../src/toast/Toast.tsx","../../src/toast/useToastManager.ts","../../src/toast/index.tsx"],"sourcesContent":["import { cva, VariantProps } from 'class-variance-authority'\n\nexport const toastStyles = cva(\n [\n 'gap-lg p-md flex w-max !w-[min(400px,calc(100vw-2rem))] flex-col rounded-lg',\n 'absolute right-0 bottom-0 left-auto mr-0',\n 'bg-clip-padding shadow-md select-none',\n 'focus-visible:ring-focus focus-visible:ring-2 focus-visible:outline-none',\n 'z-[calc(1000-var(--toast-index))]',\n \"after:absolute after:bottom-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']\",\n // Stack effect while not focused\n '[transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)+calc(min(var(--toast-index),10)*-16px)))_scale(calc(max(0,1-(var(--toast-index)*0.1))))]',\n // Scale and translate\n 'ease-standard [transition-property:opacity,transform]',\n 'duration-400',\n // Present when the toast is animating in.\n 'data-[starting-style]:[transform:translateY(150%)]',\n // Expanded: Present when the toast is expanded in the viewport.\n 'data-[expanded]:[transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y)))]',\n // Present when the toast is animating out.\n 'data-[ending-style]:duration-250',\n 'data-[ending-style]:opacity-0',\n 'data-[ending-style]:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]',\n 'data-[ending-style]:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]',\n 'data-[expanded]:data-[ending-style]:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]',\n // Limited: Present when the toast was removed due to exceeding the limit.\n 'data-[limited]:opacity-0',\n ],\n {\n variants: {\n design: {\n filled: '',\n tinted: '',\n },\n intent: {\n success: '',\n alert: '',\n error: '',\n info: '',\n neutral: '',\n main: '',\n basic: '',\n support: '',\n accent: '',\n surface: '',\n surfaceInverse: '',\n },\n },\n compoundVariants: [\n // Filled variants\n {\n design: 'filled',\n intent: 'success',\n class: ['bg-success text-on-success'],\n },\n {\n design: 'filled',\n intent: 'alert',\n class: ['bg-alert text-on-alert'],\n },\n {\n design: 'filled',\n intent: 'error',\n class: ['bg-error text-on-error'],\n },\n {\n design: 'filled',\n intent: 'info',\n class: ['bg-info text-on-info'],\n },\n {\n design: 'filled',\n intent: 'neutral',\n class: ['bg-neutral text-on-neutral'],\n },\n {\n design: 'filled',\n intent: 'main',\n class: ['bg-main text-on-main'],\n },\n {\n design: 'filled',\n intent: 'basic',\n class: ['bg-basic text-on-basic'],\n },\n {\n design: 'filled',\n intent: 'support',\n class: ['bg-support text-on-support'],\n },\n {\n design: 'filled',\n intent: 'accent',\n class: ['bg-accent text-on-accent'],\n },\n {\n design: 'filled',\n intent: 'surface',\n class: ['bg-surface text-on-surface'],\n },\n {\n design: 'filled',\n intent: 'surfaceInverse',\n class: ['bg-surface-inverse text-on-surface-inverse'],\n },\n\n // Tinted variants\n {\n design: 'tinted',\n intent: 'success',\n class: ['bg-success-container text-on-success-container'],\n },\n {\n design: 'tinted',\n intent: 'alert',\n class: ['bg-alert-container text-on-alert-container'],\n },\n {\n design: 'tinted',\n intent: 'error',\n class: ['bg-error-container text-on-error-container'],\n },\n {\n design: 'tinted',\n intent: 'info',\n class: ['bg-info-container text-on-info-container'],\n },\n {\n design: 'tinted',\n intent: 'neutral',\n class: ['bg-neutral-container text-on-neutral-container'],\n },\n {\n design: 'tinted',\n intent: 'main',\n class: ['bg-main-container text-on-main-container'],\n },\n {\n design: 'tinted',\n intent: 'basic',\n class: ['bg-basic-container text-on-basic-container'],\n },\n {\n design: 'tinted',\n intent: 'support',\n class: ['bg-support-container text-on-support-container'],\n },\n {\n design: 'tinted',\n intent: 'accent',\n class: ['bg-accent-container text-on-accent-container'],\n },\n {\n design: 'tinted',\n intent: 'surface',\n class: ['bg-surface text-on-surface'],\n },\n {\n design: 'tinted',\n intent: 'surfaceInverse',\n class: ['bg-surface-inverse text-on-surface-inverse'],\n },\n ],\n defaultVariants: {\n design: 'filled',\n intent: 'neutral',\n },\n }\n)\n\nexport const snackbarItemVariantContent = cva(\n [\n 'inline-grid items-center',\n 'col-start-1 row-start-1',\n 'pl-md pr-lg', // applying padding on the parent prevents VoiceOver on Safari from reading snackbar content 🤷\n ],\n {\n variants: {\n /**\n * Force action button displaying on a new line\n * @default false\n */\n actionOnNewline: {\n true: [\n 'grid-rows-[52px_1fr_52px]',\n 'grid-cols-[min-content_1fr_min-content]',\n \"[grid-template-areas:'icon_message_close'_'._message_.'_'action_action_action']\",\n ],\n false: [\n 'grid-cols-[min-content_1fr_min-content_min-content]',\n \"[grid-template-areas:'icon_message_action_close']\",\n ],\n },\n },\n defaultVariants: {\n actionOnNewline: false,\n },\n }\n)\n\nexport type ToastVariantProps = VariantProps<typeof toastStyles>\nexport type SnackbarItemVariantContentProps = VariantProps<typeof snackbarItemVariantContent>\n","import { Toast as BaseToast } from '@base-ui/react/toast'\nimport { Button, ButtonProps } from '@spark-ui/components/button'\nimport { Icon } from '@spark-ui/components/icon'\nimport { IconButton } from '@spark-ui/components/icon-button'\nimport { Close } from '@spark-ui/icons/Close'\nimport { cx } from 'class-variance-authority'\n\nimport { toastStyles } from './Toast.styles'\nimport type { ToastData, ToastDesign, ToastIntent, ToastObject } from './types'\n\nfunction getButtonIntent(intent?: ToastIntent): ButtonProps['intent'] {\n if (intent === 'surfaceInverse') return 'surface'\n if (intent === 'surface') return 'surfaceInverse'\n if (intent === 'error') return 'danger'\n\n return intent as ButtonProps['intent']\n}\n\nfunction getCloseButtonIntent(intent?: ToastIntent): ButtonProps['intent'] {\n if (intent === 'surfaceInverse') return 'surfaceInverse'\n if (intent === 'surface') return 'surface'\n if (intent === 'error') return 'danger'\n\n return intent as ButtonProps['intent']\n}\n\nconst getActionProps = (\n action: ToastData['action'],\n { toastDesign, toastIntent }: { toastDesign?: ToastDesign; toastIntent?: ToastIntent }\n): ButtonProps => {\n if (!action) return {}\n\n const { design, intent, className, onClick, ...rest } = action\n\n return {\n design: design ?? toastDesign,\n intent: intent ?? getButtonIntent(toastIntent),\n className: cx('ml-auto', className),\n onClick,\n ...rest,\n }\n}\n\nconst getToastRootProps = (toast: ToastObject, design: ToastDesign, intent: ToastIntent) => ({\n key: toast.id,\n swipeDirection: ['down', 'right'] as ['down', 'right'],\n toast,\n className: cx(toastStyles({ design, intent })),\n style: {\n ['--gap' as string]: 'var(--spacing-md)',\n ['--offset-y' as string]:\n 'calc(var(--toast-offset-y) * -1 + (var(--toast-index) * var(--gap) * -1) + var(--toast-swipe-movement-y))',\n },\n})\n\nexport function Toast({ toast }: { toast: ToastObject }) {\n const {\n icon: ToastIcon,\n intent = 'neutral',\n design = 'filled',\n action,\n isClosable,\n closeLabel = 'Close',\n compact = false,\n } = toast.data ?? {}\n\n const ActionButton = action?.close ? BaseToast.Close : BaseToast.Action\n const actionProps = getActionProps(action, { toastDesign: design, toastIntent: intent })\n const rootProps = getToastRootProps(toast, design, intent)\n\n const getCloseButton = (className?: string) => {\n if (!isClosable) return null\n\n return (\n <BaseToast.Close\n className={className}\n render={\n <IconButton\n aria-label={closeLabel}\n design={design}\n intent={getCloseButtonIntent(intent)}\n size=\"md\"\n />\n }\n >\n <Icon>\n <Close />\n </Icon>\n </BaseToast.Close>\n )\n }\n\n const renderTitle = () => {\n // Check ToastData first for JSX, then fallback to toast.title (string)\n const title = toast.data?.title ?? toast.title\n const hasDescription = !!(toast.data?.description ?? toast.description)\n\n if (typeof title !== 'string' && title !== undefined) {\n return (\n <BaseToast.Title\n className={hasDescription ? 'text-headline-2' : 'text-body-1'}\n render={<div />}\n >\n {title}\n </BaseToast.Title>\n )\n }\n\n return <BaseToast.Title className={hasDescription ? 'text-headline-2' : 'text-body-1'} />\n }\n\n const renderDescription = () => {\n // Check ToastData first for JSX, then fallback to toast.description (string)\n const description = toast.data?.description ?? toast.description\n\n if (!description) return null\n\n if (typeof description !== 'string') {\n return (\n <BaseToast.Description className=\"text-body-1\" render={<div />}>\n {description}\n </BaseToast.Description>\n )\n }\n\n return <BaseToast.Description className=\"text-body-1\" />\n }\n\n return (\n <BaseToast.Root {...rootProps}>\n <div className={cx('flex', compact ? 'gap-lg items-center' : 'gap-md flex-col')}>\n <div className=\"gap-lg p-md flex grow items-center\">\n {/* Icon */}\n {ToastIcon && <Icon size=\"md\">{ToastIcon}</Icon>}\n {/* Title and description */}\n <div\n className={cx(\n 'gap-sm flex flex-col',\n compact && 'flex-1',\n !compact && isClosable && 'pr-3xl'\n )}\n >\n {renderTitle()}\n {renderDescription()}\n </div>\n </div>\n\n <div className={cx('flex')}>\n {/* Action button */}\n {action && (\n <ActionButton render={<Button {...actionProps} />}>{action.label}</ActionButton>\n )}\n {/* Close button - compact layout only */}\n {compact && getCloseButton()}\n </div>\n\n {/* Close button - default layout only */}\n {!compact && getCloseButton('top-md right-md absolute')}\n </div>\n </BaseToast.Root>\n )\n}\n","import { Toast as BaseToast } from '@base-ui/react/toast'\nimport * as React from 'react'\n\nimport type { UseToastManagerReturnValue } from './types'\n\nexport function useToastManager(): UseToastManagerReturnValue {\n const baseToastManager = BaseToast.useToastManager()\n\n const closeAll = React.useCallback((): void => {\n baseToastManager.toasts.forEach(({ id }) => baseToastManager.close(id))\n }, [baseToastManager])\n\n return {\n ...baseToastManager,\n closeAll,\n } as UseToastManagerReturnValue\n}\n","import { Toast as BaseToast } from '@base-ui/react/toast'\nimport { Slot } from '@spark-ui/components/slot'\nimport { cx } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { Toast } from './Toast'\nimport type { ToastData, ToastObject } from './types'\nimport { useToastManager } from './useToastManager'\n\nexport * from './types'\n\nfunction ToastList() {\n const { toasts } = useToastManager()\n\n return toasts.map(toast => <Toast key={toast.id} toast={toast} />)\n}\n\ninterface ToastProviderProps extends React.ComponentProps<typeof BaseToast.Provider> {\n children: React.ReactNode\n}\n\nexport function ToastProvider({ children, limit = 3, ...props }: ToastProviderProps) {\n return (\n <BaseToast.Provider limit={limit} {...props}>\n <BaseToast.Portal>\n <BaseToast.Viewport\n className={cx(\n 'z-toast right-lg bottom-lg text-on-surfa- fixed top-auto mx-auto flex w-fit flex-col items-end'\n )}\n >\n <ToastList />\n </BaseToast.Viewport>\n </BaseToast.Portal>\n {children}\n </BaseToast.Provider>\n )\n}\n\ninterface ToastTriggerProps\n extends Omit<React.ComponentPropsWithRef<'button'>, 'title'>,\n Pick<ToastObject, 'priority'>,\n Pick<ToastData, 'design' | 'intent' | 'icon' | 'isClosable' | 'action' | 'compact'> {\n children: React.ReactNode\n asChild?: boolean\n title: string | React.ReactNode\n description?: string | React.ReactNode\n timeout?: number\n}\n\nexport function ToastTrigger({\n children,\n onClick,\n asChild = false,\n title,\n description,\n timeout = 5000,\n design = 'filled',\n intent = 'neutral',\n isClosable = true,\n icon,\n action,\n compact,\n priority = 'low',\n}: ToastTriggerProps) {\n const toastManager = useToastManager()\n\n const Component = asChild ? Slot : 'button'\n\n function createToast(e: React.MouseEvent<HTMLButtonElement>) {\n onClick?.(e)\n toastManager.add({\n title,\n description,\n timeout,\n priority,\n data: {\n design,\n intent,\n isClosable,\n ...(icon && { icon }),\n action,\n ...(compact !== undefined && { compact }),\n },\n })\n }\n\n return (\n <Component {...(!asChild && { type: 'button' })} onClick={createToast}>\n {children}\n </Component>\n )\n}\n\nexport type ToastManager = ReturnType<typeof BaseToast.createToastManager>\n\nexport const createToastManager: () => ToastManager = BaseToast.createToastManager\n\nexport { useToastManager }\n"],"names":["toastStyles","cva","getButtonIntent","intent","getCloseButtonIntent","getActionProps","action","toastDesign","toastIntent","design","className","onClick","rest","cx","getToastRootProps","toast","Toast","ToastIcon","isClosable","closeLabel","compact","ActionButton","BaseToast","actionProps","rootProps","getCloseButton","jsx","IconButton","Icon","Close","renderTitle","title","hasDescription","renderDescription","description","jsxs","Button","useToastManager","baseToastManager","closeAll","React","id","ToastList","toasts","ToastProvider","children","limit","props","ToastTrigger","asChild","timeout","icon","priority","toastManager","Component","Slot","createToast","e","createToastManager"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/toast/Toast.styles.ts","../../src/toast/Toast.tsx","../../src/toast/useToastManager.ts","../../src/toast/index.tsx"],"sourcesContent":["import { cva, VariantProps } from 'class-variance-authority'\n\nexport const toastStyles = cva(\n [\n 'gap-lg p-md flex w-max !w-[min(400px,calc(100vw-2rem))] flex-col rounded-lg border-md',\n 'absolute right-0 bottom-0 left-auto mr-0',\n 'bg-clip-padding shadow-md select-none',\n 'focus-visible:ring-focus focus-visible:ring-2 focus-visible:outline-none',\n 'z-[calc(1000-var(--toast-index))]',\n \"after:absolute after:bottom-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']\",\n // Stack effect while not focused\n '[transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)+calc(min(var(--toast-index),10)*-16px)))_scale(calc(max(0,1-(var(--toast-index)*0.1))))]',\n // Scale and translate\n 'ease-standard [transition-property:opacity,transform]',\n 'duration-400',\n // Present when the toast is animating in.\n 'data-[starting-style]:[transform:translateY(150%)]',\n // Expanded: Present when the toast is expanded in the viewport.\n 'data-[expanded]:[transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y)))]',\n // Present when the toast is animating out.\n 'data-[ending-style]:duration-250',\n 'data-[ending-style]:opacity-0',\n 'data-[ending-style]:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]',\n 'data-[ending-style]:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]',\n 'data-[expanded]:data-[ending-style]:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]',\n // Limited: Present when the toast was removed due to exceeding the limit.\n 'data-[limited]:opacity-0',\n ],\n {\n variants: {\n design: {\n filled: '',\n tinted: '',\n },\n intent: {\n success: '',\n alert: '',\n error: '',\n info: '',\n neutral: '',\n main: '',\n basic: '',\n support: '',\n accent: '',\n surface: '',\n surfaceInverse: '',\n },\n },\n compoundVariants: [\n // Filled variants\n {\n design: 'filled',\n intent: 'success',\n class: ['bg-success text-on-success border-success'],\n },\n {\n design: 'filled',\n intent: 'alert',\n class: ['bg-alert text-on-alert border-alert'],\n },\n {\n design: 'filled',\n intent: 'error',\n class: ['bg-error text-on-error border-error'],\n },\n {\n design: 'filled',\n intent: 'info',\n class: ['bg-info text-on-info border-info'],\n },\n {\n design: 'filled',\n intent: 'neutral',\n class: ['bg-neutral text-on-neutral border-neutral'],\n },\n {\n design: 'filled',\n intent: 'main',\n class: ['bg-main text-on-main border-main'],\n },\n {\n design: 'filled',\n intent: 'basic',\n class: ['bg-basic text-on-basic border-basic'],\n },\n {\n design: 'filled',\n intent: 'support',\n class: ['bg-support text-on-support border-support'],\n },\n {\n design: 'filled',\n intent: 'accent',\n class: ['bg-accent text-on-accent border-accent'],\n },\n {\n design: 'filled',\n intent: 'surface',\n class: ['bg-surface text-on-surface border-surface'],\n },\n {\n design: 'filled',\n intent: 'surfaceInverse',\n class: ['bg-surface-inverse text-on-surface-inverse border-surface-inverse'],\n },\n\n // Tinted variants\n {\n design: 'tinted',\n intent: 'success',\n class: ['bg-success-container text-on-success-container border-success'],\n },\n {\n design: 'tinted',\n intent: 'alert',\n class: ['bg-alert-container text-on-alert-container border-alert'],\n },\n {\n design: 'tinted',\n intent: 'error',\n class: ['bg-error-container text-on-error-container border-error'],\n },\n {\n design: 'tinted',\n intent: 'info',\n class: ['bg-info-container text-on-info-container border-info'],\n },\n {\n design: 'tinted',\n intent: 'neutral',\n class: ['bg-neutral-container text-on-neutral-container border-neutral'],\n },\n {\n design: 'tinted',\n intent: 'main',\n class: ['bg-main-container text-on-main-container border-main'],\n },\n {\n design: 'tinted',\n intent: 'basic',\n class: ['bg-basic-container text-on-basic-container border-basic'],\n },\n {\n design: 'tinted',\n intent: 'support',\n class: ['bg-support-container text-on-support-container border-support'],\n },\n {\n design: 'tinted',\n intent: 'accent',\n class: ['bg-accent-container text-on-accent-container border-accent'],\n },\n {\n design: 'tinted',\n intent: 'surface',\n class: ['bg-surface text-on-surface border-surface'],\n },\n {\n design: 'tinted',\n intent: 'surfaceInverse',\n class: ['bg-surface-inverse text-on-surface-inverse border-surface-inverse'],\n },\n ],\n defaultVariants: {\n design: 'filled',\n intent: 'neutral',\n },\n }\n)\n\nexport const snackbarItemVariantContent = cva(\n [\n 'inline-grid items-center',\n 'col-start-1 row-start-1',\n 'pl-md pr-lg', // applying padding on the parent prevents VoiceOver on Safari from reading snackbar content 🤷\n ],\n {\n variants: {\n /**\n * Force action button displaying on a new line\n * @default false\n */\n actionOnNewline: {\n true: [\n 'grid-rows-[52px_1fr_52px]',\n 'grid-cols-[min-content_1fr_min-content]',\n \"[grid-template-areas:'icon_message_close'_'._message_.'_'action_action_action']\",\n ],\n false: [\n 'grid-cols-[min-content_1fr_min-content_min-content]',\n \"[grid-template-areas:'icon_message_action_close']\",\n ],\n },\n },\n defaultVariants: {\n actionOnNewline: false,\n },\n }\n)\n\nexport type ToastVariantProps = VariantProps<typeof toastStyles>\nexport type SnackbarItemVariantContentProps = VariantProps<typeof snackbarItemVariantContent>\n","import { Toast as BaseToast } from '@base-ui/react/toast'\nimport { Button, ButtonProps } from '@spark-ui/components/button'\nimport { Icon } from '@spark-ui/components/icon'\nimport { IconButton } from '@spark-ui/components/icon-button'\nimport { AlertFill } from '@spark-ui/icons/AlertFill'\nimport { Close } from '@spark-ui/icons/Close'\nimport { InfoFill } from '@spark-ui/icons/InfoFill'\nimport { ValidFill } from '@spark-ui/icons/ValidFill'\nimport { WarningFill } from '@spark-ui/icons/WarningFill'\nimport { cx } from 'class-variance-authority'\n\nimport { toastStyles } from './Toast.styles'\nimport type { ToastData, ToastDesign, ToastIntent, ToastObject } from './types'\n\nfunction getButtonIntent(intent?: ToastIntent): ButtonProps['intent'] {\n if (intent === 'surfaceInverse') return 'surface'\n if (intent === 'surface') return 'surfaceInverse'\n if (intent === 'error') return 'danger'\n\n return intent as ButtonProps['intent']\n}\n\nfunction getCloseButtonIntent(intent?: ToastIntent): ButtonProps['intent'] {\n if (intent === 'surfaceInverse') return 'surfaceInverse'\n if (intent === 'surface') return 'surface'\n if (intent === 'error') return 'danger'\n\n return intent as ButtonProps['intent']\n}\n\nconst getActionProps = (\n action: ToastData['action'],\n { toastDesign, toastIntent }: { toastDesign?: ToastDesign; toastIntent?: ToastIntent }\n): ButtonProps => {\n if (!action) return {}\n\n const { design, intent, className, onClick, ...rest } = action\n\n return {\n design: design ?? toastDesign,\n intent: intent ?? getButtonIntent(toastIntent),\n className: cx('ml-auto', className),\n onClick,\n ...rest,\n }\n}\n\nconst getToastRootProps = (toast: ToastObject, design: ToastDesign, intent: ToastIntent) => ({\n swipeDirection: ['down', 'right'] as ['down', 'right'],\n toast,\n className: cx(toastStyles({ design, intent })),\n style: {\n ['--gap' as string]: 'var(--spacing-md)',\n ['--offset-y' as string]:\n 'calc(var(--toast-offset-y) * -1 + (var(--toast-index) * var(--gap) * -1) + var(--toast-swipe-movement-y))',\n },\n})\n\nfunction getDefaultIcon(intent: ToastIntent): React.ReactNode {\n switch (intent) {\n case 'info':\n return <InfoFill />\n case 'success':\n return <ValidFill />\n case 'alert':\n return <WarningFill />\n case 'error':\n return <AlertFill />\n case 'main':\n case 'support':\n case 'accent':\n case 'basic':\n case 'neutral':\n case 'surface':\n case 'surfaceInverse':\n default:\n return <InfoFill />\n }\n}\n\nexport function Toast({ toast }: { toast: ToastObject }) {\n const {\n icon: ToastIcon,\n intent = 'info',\n design: _design, // deprecated prop, ignored\n action,\n isClosable,\n closeLabel = 'Close',\n compact = false,\n } = toast.data ?? {}\n\n // Always use 'tinted' design regardless of prop value\n const design = 'tinted' as const\n\n const ActionButton = action?.close ? BaseToast.Close : BaseToast.Action\n const actionProps = getActionProps(action, { toastDesign: design, toastIntent: intent })\n const rootProps = getToastRootProps(toast, design, intent)\n\n // Use provided icon or default icon based on intent\n const icon = ToastIcon ?? getDefaultIcon(intent)\n\n const getCloseButton = (className?: string) => {\n if (!isClosable) return null\n\n return (\n <BaseToast.Close\n className={className}\n render={\n <IconButton\n aria-label={closeLabel}\n design={design}\n intent={getCloseButtonIntent(intent)}\n size=\"md\"\n />\n }\n >\n <Icon>\n <Close />\n </Icon>\n </BaseToast.Close>\n )\n }\n\n const renderTitle = () => {\n // Check ToastData first for JSX, then fallback to toast.title (string)\n const title = toast.data?.title ?? toast.title\n const hasDescription = !!(toast.data?.description ?? toast.description)\n\n if (typeof title !== 'string' && title !== undefined) {\n return (\n <BaseToast.Title\n className={hasDescription ? 'text-headline-2' : 'text-body-1'}\n render={<div />}\n >\n {title}\n </BaseToast.Title>\n )\n }\n\n return <BaseToast.Title className={hasDescription ? 'text-headline-2' : 'text-body-1'} />\n }\n\n const renderDescription = () => {\n // Check ToastData first for JSX, then fallback to toast.description (string)\n const description = toast.data?.description ?? toast.description\n\n if (!description) return null\n\n if (typeof description !== 'string') {\n return (\n <BaseToast.Description className=\"text-body-1\" render={<div />}>\n {description}\n </BaseToast.Description>\n )\n }\n\n return <BaseToast.Description className=\"text-body-1\" />\n }\n\n return (\n <BaseToast.Root key={toast.id} {...rootProps}>\n <div className={cx('flex', compact ? 'gap-lg items-center' : 'gap-md flex-col')}>\n <div className=\"gap-lg p-md flex grow items-center\">\n {/* Icon */}\n <Icon size=\"md\">{icon}</Icon>\n {/* Title and description */}\n <div\n className={cx(\n 'gap-sm flex flex-col',\n compact && 'flex-1',\n !compact && isClosable && 'pr-3xl'\n )}\n >\n {renderTitle()}\n {renderDescription()}\n </div>\n </div>\n\n <div className={cx('flex')}>\n {/* Action button */}\n {action && (\n <ActionButton render={<Button {...actionProps} />}>{action.label}</ActionButton>\n )}\n {/* Close button - compact layout only */}\n {compact && getCloseButton()}\n </div>\n\n {/* Close button - default layout only */}\n {!compact && getCloseButton('top-md right-md absolute')}\n </div>\n </BaseToast.Root>\n )\n}\n","import { Toast as BaseToast } from '@base-ui/react/toast'\nimport * as React from 'react'\n\nimport type { UseToastManagerReturnValue } from './types'\n\nexport function useToastManager(): UseToastManagerReturnValue {\n const baseToastManager = BaseToast.useToastManager()\n\n const closeAll = React.useCallback((): void => {\n baseToastManager.toasts.forEach(({ id }) => baseToastManager.close(id))\n }, [baseToastManager])\n\n return {\n ...baseToastManager,\n closeAll,\n } as UseToastManagerReturnValue\n}\n","import { Toast as BaseToast } from '@base-ui/react/toast'\nimport { Slot } from '@spark-ui/components/slot'\nimport { cx } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { Toast } from './Toast'\nimport type { ToastData, ToastObject } from './types'\nimport { useToastManager } from './useToastManager'\n\nexport * from './types'\n\nfunction ToastList() {\n const { toasts } = useToastManager()\n\n return toasts.map(toast => <Toast key={toast.id} toast={toast} />)\n}\n\ninterface ToastProviderProps extends React.ComponentProps<typeof BaseToast.Provider> {\n children: React.ReactNode\n}\n\nexport function ToastProvider({ children, limit = 3, ...props }: ToastProviderProps) {\n return (\n <BaseToast.Provider limit={limit} {...props}>\n <BaseToast.Portal>\n <BaseToast.Viewport\n className={cx(\n 'z-toast right-lg bottom-lg text-on-surfa- fixed top-auto mx-auto flex w-fit flex-col items-end'\n )}\n >\n <ToastList />\n </BaseToast.Viewport>\n </BaseToast.Portal>\n {children}\n </BaseToast.Provider>\n )\n}\n\ninterface ToastTriggerProps\n extends Omit<React.ComponentPropsWithRef<'button'>, 'title'>,\n Pick<ToastObject, 'priority'>,\n Pick<ToastData, 'design' | 'intent' | 'icon' | 'isClosable' | 'action' | 'compact'> {\n children: React.ReactNode\n asChild?: boolean\n title: string | React.ReactNode\n description?: string | React.ReactNode\n timeout?: number\n}\n\nexport function ToastTrigger({\n children,\n onClick,\n asChild = false,\n title,\n description,\n timeout = 5000,\n design = 'filled',\n intent = 'neutral',\n isClosable = true,\n icon,\n action,\n compact,\n priority = 'low',\n}: ToastTriggerProps) {\n const toastManager = useToastManager()\n\n const Component = asChild ? Slot : 'button'\n\n function createToast(e: React.MouseEvent<HTMLButtonElement>) {\n onClick?.(e)\n toastManager.add({\n title,\n description,\n timeout,\n priority,\n data: {\n design,\n intent,\n isClosable,\n ...(icon && { icon }),\n action,\n ...(compact !== undefined && { compact }),\n },\n })\n }\n\n return (\n <Component {...(!asChild && { type: 'button' })} onClick={createToast}>\n {children}\n </Component>\n )\n}\n\nexport type ToastManager = ReturnType<typeof BaseToast.createToastManager>\n\nexport const createToastManager: () => ToastManager = BaseToast.createToastManager\n\nexport { useToastManager }\n"],"names":["toastStyles","cva","getButtonIntent","intent","getCloseButtonIntent","getActionProps","action","toastDesign","toastIntent","design","className","onClick","rest","cx","getToastRootProps","toast","getDefaultIcon","InfoFill","ValidFill","WarningFill","AlertFill","Toast","ToastIcon","_design","isClosable","closeLabel","compact","ActionButton","BaseToast","actionProps","rootProps","icon","getCloseButton","jsx","IconButton","Icon","Close","renderTitle","title","hasDescription","renderDescription","description","jsxs","Button","useToastManager","baseToastManager","closeAll","React","id","ToastList","toasts","ToastProvider","children","limit","props","ToastTrigger","asChild","timeout","priority","toastManager","Component","Slot","createToast","e","createToastManager"],"mappings":"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"}
@@ -1,10 +1,13 @@
1
1
  import { Toast as BaseToast } from '@base-ui/react/toast';
2
2
  import { ButtonProps } from '../button';
3
3
  import * as React from 'react';
4
- export type ToastIntent = 'main' | 'support' | 'accent' | 'basic' | 'success' | 'alert' | 'error' | 'info' | 'neutral' | 'surface' | 'surfaceInverse';
4
+ export type ToastIntent = /** @deprecated Use 'info', 'success', 'alert', or 'error' instead */ 'main' | /** @deprecated Use 'info', 'success', 'alert', or 'error' instead */ 'support' | /** @deprecated Use 'info', 'success', 'alert', or 'error' instead */ 'accent' | /** @deprecated Use 'info', 'success', 'alert', or 'error' instead */ 'basic' | 'success' | 'alert' | 'error' | 'info' | /** @deprecated Use 'info', 'success', 'alert', or 'error' instead */ 'neutral' | /** @deprecated Use 'info', 'success', 'alert', or 'error' instead */ 'surface' | /** @deprecated Use 'info', 'success', 'alert', or 'error' instead */ 'surfaceInverse';
5
5
  export type ToastDesign = 'tinted' | 'filled';
6
6
  export interface ToastData {
7
7
  icon?: React.ReactNode;
8
+ /**
9
+ * @deprecated The design prop is deprecated. All toasts now use the 'tinted' design.
10
+ */
8
11
  design?: ToastDesign;
9
12
  intent?: ToastIntent;
10
13
  isClosable?: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spark-ui/components",
3
- "version": "14.1.2",
3
+ "version": "15.1.0",
4
4
  "license": "MIT",
5
5
  "description": "Spark (Leboncoin design system) components.",
6
6
  "exports": {
@@ -54,9 +54,9 @@
54
54
  "@react-aria/toast": "^3.0.0-beta.18",
55
55
  "@react-stately/numberfield": "3.9.11",
56
56
  "@react-stately/toast": "^3.0.0-beta.7",
57
- "@spark-ui/hooks": "^14.1.2",
58
- "@spark-ui/icons": "^14.1.2",
59
- "@spark-ui/internal-utils": "^14.1.2",
57
+ "@spark-ui/hooks": "^15.1.0",
58
+ "@spark-ui/icons": "^15.1.0",
59
+ "@spark-ui/internal-utils": "^15.1.0",
60
60
  "@zag-js/pagination": "1.30.0",
61
61
  "@zag-js/react": "1.30.0",
62
62
  "class-variance-authority": "0.7.1",