@spark-ui/components 16.2.3 → 17.0.1-beta.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 (196) hide show
  1. package/dist/Button-CXL2NOrq.js +2 -0
  2. package/dist/Button-CXL2NOrq.js.map +1 -0
  3. package/dist/{Button-DPncfbbM.mjs → Button-CcIRizse.mjs} +25 -79
  4. package/dist/Button-CcIRizse.mjs.map +1 -0
  5. package/dist/{Icon-C23-htlD.mjs → Icon-BO327oHU.mjs} +8 -9
  6. package/dist/Icon-BO327oHU.mjs.map +1 -0
  7. package/dist/Icon-C-cNTnzd.js +2 -0
  8. package/dist/Icon-C-cNTnzd.js.map +1 -0
  9. package/dist/{IconButton-Bfd-6BAD.mjs → IconButton-CP4JbWsI.mjs} +14 -14
  10. package/dist/IconButton-CP4JbWsI.mjs.map +1 -0
  11. package/dist/IconButton-JFDGiOOn.js +2 -0
  12. package/dist/IconButton-JFDGiOOn.js.map +1 -0
  13. package/dist/Spinner-Br4Rp9V2.js +2 -0
  14. package/dist/Spinner-Br4Rp9V2.js.map +1 -0
  15. package/dist/{Spinner-aLrtE2JN.mjs → Spinner-Co3AjkQV.mjs} +7 -8
  16. package/dist/Spinner-Co3AjkQV.mjs.map +1 -0
  17. package/dist/TextLink-5MvP0P8D.js +2 -0
  18. package/dist/TextLink-5MvP0P8D.js.map +1 -0
  19. package/dist/{TextLink-D7mOCjY_.mjs → TextLink-Cc_LeVcx.mjs} +10 -11
  20. package/dist/TextLink-Cc_LeVcx.mjs.map +1 -0
  21. package/dist/accordion/index.js +1 -1
  22. package/dist/accordion/index.mjs +1 -1
  23. package/dist/avatar/index.js +1 -1
  24. package/dist/avatar/index.mjs +2 -2
  25. package/dist/badge/BadgeItem.styles.d.ts +1 -1
  26. package/dist/badge/index.js +1 -1
  27. package/dist/badge/index.js.map +1 -1
  28. package/dist/badge/index.mjs +10 -11
  29. package/dist/badge/index.mjs.map +1 -1
  30. package/dist/breadcrumb/index.js +1 -1
  31. package/dist/breadcrumb/index.mjs +2 -2
  32. package/dist/button/Button.styles.d.ts +1 -1
  33. package/dist/button/index.js +1 -1
  34. package/dist/button/index.mjs +1 -1
  35. package/dist/button/variants/contrast.d.ts +0 -4
  36. package/dist/button/variants/filled.d.ts +0 -4
  37. package/dist/button/variants/ghost.d.ts +0 -4
  38. package/dist/button/variants/outlined.d.ts +0 -4
  39. package/dist/button/variants/tinted.d.ts +0 -4
  40. package/dist/card/Backdrop.d.ts +1 -1
  41. package/dist/card/Card.styles.d.ts +1 -1
  42. package/dist/card/Content.styles.d.ts +1 -1
  43. package/dist/card/index.js +1 -1
  44. package/dist/card/index.js.map +1 -1
  45. package/dist/card/index.mjs +12 -31
  46. package/dist/card/index.mjs.map +1 -1
  47. package/dist/carousel/CarouselPageIndicator.d.ts +1 -1
  48. package/dist/carousel/index.js +1 -1
  49. package/dist/carousel/index.js.map +1 -1
  50. package/dist/carousel/index.mjs +29 -29
  51. package/dist/carousel/index.mjs.map +1 -1
  52. package/dist/checkbox/CheckboxInput.styles.d.ts +1 -1
  53. package/dist/checkbox/index.js +1 -1
  54. package/dist/checkbox/index.js.map +1 -1
  55. package/dist/checkbox/index.mjs +26 -33
  56. package/dist/checkbox/index.mjs.map +1 -1
  57. package/dist/chip/Chip.styles.d.ts +1 -1
  58. package/dist/chip/index.js +1 -1
  59. package/dist/chip/index.js.map +1 -1
  60. package/dist/chip/index.mjs +34 -69
  61. package/dist/chip/index.mjs.map +1 -1
  62. package/dist/chip/variants/dashed.d.ts +0 -4
  63. package/dist/chip/variants/outlined.d.ts +0 -4
  64. package/dist/chip/variants/tinted.d.ts +0 -4
  65. package/dist/combobox/index.js +1 -1
  66. package/dist/combobox/index.js.map +1 -1
  67. package/dist/combobox/index.mjs +41 -41
  68. package/dist/combobox/index.mjs.map +1 -1
  69. package/dist/dialog/index.js +1 -1
  70. package/dist/dialog/index.mjs +2 -2
  71. package/dist/drawer/index.js +1 -1
  72. package/dist/drawer/index.mjs +2 -2
  73. package/dist/dropdown/index.js +1 -1
  74. package/dist/dropdown/index.js.map +1 -1
  75. package/dist/dropdown/index.mjs +2 -2
  76. package/dist/dropdown/index.mjs.map +1 -1
  77. package/dist/file-upload/index.js +1 -1
  78. package/dist/file-upload/index.js.map +1 -1
  79. package/dist/file-upload/index.mjs +4 -4
  80. package/dist/file-upload/index.mjs.map +1 -1
  81. package/dist/form-field/index.js +1 -1
  82. package/dist/form-field/index.mjs +1 -1
  83. package/dist/icon/Icon.styles.d.ts +1 -1
  84. package/dist/icon/index.js +1 -1
  85. package/dist/icon/index.mjs +1 -1
  86. package/dist/icon-button/index.js +1 -1
  87. package/dist/icon-button/index.mjs +1 -1
  88. package/dist/input/index.js +1 -1
  89. package/dist/input/index.js.map +1 -1
  90. package/dist/input/index.mjs +7 -7
  91. package/dist/input/index.mjs.map +1 -1
  92. package/dist/pagination/index.js +1 -1
  93. package/dist/pagination/index.mjs +3 -3
  94. package/dist/popover/PopoverContent.styles.d.ts +1 -1
  95. package/dist/popover/PopoverContext.d.ts +1 -1
  96. package/dist/popover/index.js +1 -1
  97. package/dist/popover/index.js.map +1 -1
  98. package/dist/popover/index.mjs +33 -35
  99. package/dist/popover/index.mjs.map +1 -1
  100. package/dist/progress/ProgressIndicator.d.ts +1 -1
  101. package/dist/progress/index.js +1 -1
  102. package/dist/progress/index.js.map +1 -1
  103. package/dist/progress/index.mjs +42 -43
  104. package/dist/progress/index.mjs.map +1 -1
  105. package/dist/progress-tracker/ProgressTrackerStep.styles.d.ts +1 -1
  106. package/dist/progress-tracker/ProgressTrackerStepIndicator.styles.d.ts +1 -1
  107. package/dist/progress-tracker/index.js +1 -1
  108. package/dist/progress-tracker/index.js.map +1 -1
  109. package/dist/progress-tracker/index.mjs +38 -38
  110. package/dist/progress-tracker/index.mjs.map +1 -1
  111. package/dist/radio-group/RadioIndicator.styles.d.ts +1 -1
  112. package/dist/radio-group/RadioInput.styles.d.ts +1 -1
  113. package/dist/radio-group/index.js +1 -1
  114. package/dist/radio-group/index.js.map +1 -1
  115. package/dist/radio-group/index.mjs +47 -53
  116. package/dist/radio-group/index.mjs.map +1 -1
  117. package/dist/rating/index.js +1 -1
  118. package/dist/rating/index.mjs +1 -1
  119. package/dist/rating-display/index.js +1 -1
  120. package/dist/rating-display/index.mjs +1 -1
  121. package/dist/scrolling-list/index.js +1 -1
  122. package/dist/scrolling-list/index.mjs +3 -3
  123. package/dist/segmented-gauge/SegmentedGauge.d.ts +1 -1
  124. package/dist/segmented-gauge/SegmentedGaugeContext.d.ts +1 -1
  125. package/dist/segmented-gauge/index.js +1 -1
  126. package/dist/segmented-gauge/index.js.map +1 -1
  127. package/dist/segmented-gauge/index.mjs +14 -16
  128. package/dist/segmented-gauge/index.mjs.map +1 -1
  129. package/dist/select/index.js +1 -1
  130. package/dist/select/index.js.map +1 -1
  131. package/dist/select/index.mjs +2 -2
  132. package/dist/select/index.mjs.map +1 -1
  133. package/dist/slider/SliderThumb.styles.d.ts +1 -1
  134. package/dist/slider/SliderTrack.styles.d.ts +1 -1
  135. package/dist/slider/index.js +1 -1
  136. package/dist/slider/index.js.map +1 -1
  137. package/dist/slider/index.mjs +3 -5
  138. package/dist/slider/index.mjs.map +1 -1
  139. package/dist/snackbar/SnackbarItem.styles.d.ts +1 -1
  140. package/dist/snackbar/index.js +1 -1
  141. package/dist/snackbar/index.js.map +1 -1
  142. package/dist/snackbar/index.mjs +24 -35
  143. package/dist/snackbar/index.mjs.map +1 -1
  144. package/dist/snackbar/snackbarVariants.d.ts +0 -8
  145. package/dist/spinner/Spinner.styles.d.ts +1 -1
  146. package/dist/spinner/index.js +1 -1
  147. package/dist/spinner/index.mjs +1 -1
  148. package/dist/stepper/index.js +1 -1
  149. package/dist/stepper/index.mjs +2 -2
  150. package/dist/switch/SwitchInput.styles.d.ts +1 -1
  151. package/dist/switch/index.js +1 -1
  152. package/dist/switch/index.js.map +1 -1
  153. package/dist/switch/index.mjs +22 -23
  154. package/dist/switch/index.mjs.map +1 -1
  155. package/dist/tabs/TabsTrigger.styles.d.ts +1 -1
  156. package/dist/tabs/index.js +1 -1
  157. package/dist/tabs/index.js.map +1 -1
  158. package/dist/tabs/index.mjs +20 -21
  159. package/dist/tabs/index.mjs.map +1 -1
  160. package/dist/tag/Tag.styles.d.ts +1 -1
  161. package/dist/tag/index.js +1 -1
  162. package/dist/tag/index.js.map +1 -1
  163. package/dist/tag/index.mjs +19 -35
  164. package/dist/tag/index.mjs.map +1 -1
  165. package/dist/tag/variants/filled.d.ts +0 -4
  166. package/dist/tag/variants/outlined.d.ts +0 -4
  167. package/dist/tag/variants/tinted.d.ts +0 -4
  168. package/dist/text-link/TextLink.d.ts +1 -1
  169. package/dist/text-link/index.js +1 -1
  170. package/dist/text-link/index.mjs +1 -1
  171. package/dist/textarea/index.js +1 -1
  172. package/dist/textarea/index.js.map +1 -1
  173. package/dist/textarea/index.mjs +10 -14
  174. package/dist/textarea/index.mjs.map +1 -1
  175. package/dist/toast/Toast.styles.d.ts +1 -1
  176. package/dist/toast/index.js +1 -1
  177. package/dist/toast/index.js.map +1 -1
  178. package/dist/toast/index.mjs +25 -37
  179. package/dist/toast/index.mjs.map +1 -1
  180. package/dist/toast/types.d.ts +1 -1
  181. package/package.json +4 -4
  182. package/dist/Button-B6rA3-e5.js +0 -2
  183. package/dist/Button-B6rA3-e5.js.map +0 -1
  184. package/dist/Button-DPncfbbM.mjs.map +0 -1
  185. package/dist/Icon-C23-htlD.mjs.map +0 -1
  186. package/dist/Icon-CF0W0LKr.js +0 -2
  187. package/dist/Icon-CF0W0LKr.js.map +0 -1
  188. package/dist/IconButton-Bfd-6BAD.mjs.map +0 -1
  189. package/dist/IconButton-D3g86WpZ.js +0 -2
  190. package/dist/IconButton-D3g86WpZ.js.map +0 -1
  191. package/dist/Spinner-_Kffli3B.js +0 -2
  192. package/dist/Spinner-_Kffli3B.js.map +0 -1
  193. package/dist/Spinner-aLrtE2JN.mjs.map +0 -1
  194. package/dist/TextLink-C3xDLsbC.js +0 -2
  195. package/dist/TextLink-C3xDLsbC.js.map +0 -1
  196. package/dist/TextLink-D7mOCjY_.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/slider/Slider.styles.ts","../../src/slider/SliderContext.tsx","../../src/slider/Slider.tsx","../../src/slider/SliderControl.tsx","../../src/slider/SliderTrack.styles.ts","../../src/slider/SliderIndicator.tsx","../../src/slider/SliderLabel.tsx","../../src/slider/SliderMaxValue.tsx","../../src/slider/SliderMinValue.tsx","../../src/slider/SliderThumbContext.tsx","../../src/slider/SliderThumb.styles.ts","../../src/slider/SliderThumb.tsx","../../src/slider/SliderTrack.tsx","../../src/slider/useSliderValueBoundaries.ts","../../src/slider/SliderValue.tsx","../../src/slider/index.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nexport const rootStyles = cva([\n 'grid grid-cols-[1fr_auto] gap-y-sm gap-x-md relative',\n 'touch-none select-none',\n 'data-disabled:cursor-not-allowed data-disabled:opacity-dim-3',\n])\n","import type { RefObject } from 'react'\nimport { createContext, useContext } from 'react'\n\nimport type { SliderProps } from './Slider'\n\nexport type SliderContextInterface = Pick<SliderProps, 'intent' | 'min' | 'max'> & {\n fieldLabelId?: string\n fieldId?: string\n onLabelId?: (id: string | undefined) => void\n hasValueInThumb: boolean\n registerValueInThumb: () => () => void\n controlRef: RefObject<HTMLElement | null>\n thumbRef: RefObject<HTMLElement | null>\n}\n\nexport const SliderContext = createContext<SliderContextInterface>({} as SliderContextInterface)\n\nexport const useSliderContext = () => useContext(SliderContext)\n","import { Slider as BaseSlider } from '@base-ui/react/slider'\nimport { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { ComponentProps, type PropsWithChildren, Ref, useCallback, useRef, useState } from 'react'\n\nimport { rootStyles } from './Slider.styles'\nimport { SliderContext } from './SliderContext'\nimport type { SliderRangeVariantsProps } from './SliderTrack.styles'\n\nexport interface SliderProps\n extends Omit<\n ComponentProps<typeof BaseSlider.Root>,\n 'render' | 'orientation' | 'onValueChange' | 'onValueCommitted'\n >,\n PropsWithChildren<SliderRangeVariantsProps> {\n /**\n * The value of the slider when initially rendered. Use when you do not need to control the state of the slider.\n */\n defaultValue?: number\n /**\n * The controlled value of the slider. Must be used in conjunction with `onValueChange`.\n */\n value?: number\n /**\n * Event handler called when the value changes.\n */\n onValueChange?: (value: number) => void\n /**\n * Event handler called when the value changes at the end of an interaction. Useful when you only need to capture a final value e.g. to update a backend service.\n */\n onValueCommit?: (value: number) => void\n /**\n * The name of the slider. Submitted with its owning form as part of a name/value pair.\n * If wrapped with a FormField with a name, will be inherited from it.\n */\n name?: string\n /**\n * When `true`, prevents the user from interacting with the slider.\n * @default false\n */\n disabled?: boolean\n /**\n * Sets the slider as interactive or not.\n */\n readOnly?: boolean\n /**\n * The minimum value for the range.\n * @default 0\n */\n min?: number\n /**\n * The maximum value for the range.\n * @default 100\n */\n max?: number\n /**\n * The stepping interval.\n * @default 1\n */\n step?: number\n ref?: Ref<HTMLDivElement>\n}\n\nexport const Slider = ({\n intent = 'basic',\n children,\n className,\n ref,\n value: valueProp,\n defaultValue: defaultValueProp,\n disabled: disabledProp,\n readOnly: readOnlyProp,\n name: nameProp,\n onValueChange,\n onValueCommit,\n min = 0,\n max = 100,\n ...rest\n}: SliderProps) => {\n const field = useFormFieldControl()\n\n const disabled = field.disabled ?? disabledProp\n const readOnly = field.readOnly ?? readOnlyProp\n const name = field.name ?? nameProp\n\n const [labelId, setLabelId] = useState<string | undefined>(field.labelId)\n const [valueInThumbCount, setValueInThumbCount] = useState(0)\n const controlRef = useRef<HTMLElement | null>(null)\n const thumbRef = useRef<HTMLElement | null>(null)\n\n const handleLabelId = useCallback((id: string | undefined) => {\n setLabelId(id)\n }, [])\n\n const registerValueInThumb = useCallback(() => {\n setValueInThumbCount(c => c + 1)\n return () => setValueInThumbCount(c => c - 1)\n }, [])\n\n return (\n <SliderContext.Provider\n value={{\n intent,\n min,\n max,\n fieldLabelId: field.labelId || labelId,\n fieldId: field.id,\n onLabelId: handleLabelId,\n hasValueInThumb: valueInThumbCount > 0,\n registerValueInThumb,\n controlRef,\n thumbRef,\n }}\n >\n <BaseSlider.Root\n ref={ref}\n data-spark-component=\"slider\"\n className={rootStyles({ className })}\n orientation=\"horizontal\"\n disabled={disabled || readOnly}\n thumbAlignment=\"edge\"\n name={name}\n aria-describedby={field.description}\n aria-invalid={field.isInvalid}\n aria-disabled={disabled || readOnly ? true : undefined}\n value={valueProp !== undefined ? [valueProp] : undefined}\n defaultValue={\n defaultValueProp !== undefined ? [defaultValueProp] : undefined\n }\n onValueChange={\n onValueChange\n ? (value: number | readonly number[]) => {\n const v = Array.isArray(value) ? value[0] ?? 0 : value\n onValueChange(v)\n }\n : undefined\n }\n onValueCommitted={\n onValueCommit\n ? (value: number | readonly number[]) => {\n const v = Array.isArray(value) ? value[0] ?? 0 : value\n onValueCommit(v)\n }\n : undefined\n }\n min={min}\n max={max}\n {...rest}\n >\n {children}\n </BaseSlider.Root>\n </SliderContext.Provider>\n )\n}\n\nSlider.displayName = 'Slider'\n","import { Slider as BaseSlider } from '@base-ui/react/slider'\nimport { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport { cx } from 'class-variance-authority'\nimport { ComponentProps } from 'react'\n\nimport { useSliderContext } from './SliderContext'\n\nexport type SliderControlProps = Omit<ComponentProps<typeof BaseSlider.Control>, 'render'>\n\nexport const SliderControl = ({ className, ref, ...rest }: SliderControlProps) => {\n const { hasValueInThumb, controlRef } = useSliderContext()\n const mergedRef = useMergeRefs(controlRef, ref)\n\n return (\n <BaseSlider.Control\n data-spark-component=\"slider-control\"\n ref={mergedRef}\n className={cx(\n 'min-h-sz-24 relative col-span-2 flex w-full min-w-0 flex-1 items-center',\n hasValueInThumb && 'mt-xl',\n className\n )}\n {...rest}\n />\n )\n}\n\nSliderControl.displayName = 'Slider.Control'\n","import { cva, VariantProps } from 'class-variance-authority'\n\nexport const trackVariants = cva(['relative grow h-sz-4 bg-on-background/dim-4 rounded-sm'])\n\nexport const rangeVariants = cva(\n [\n 'absolute h-full rounded-sm',\n // Disable transitions during drag to eliminate latency\n 'transition-none',\n ],\n {\n variants: {\n intent: {\n main: ['bg-main'],\n support: ['bg-support'],\n accent: ['bg-accent'],\n basic: ['bg-basic'],\n info: ['bg-info'],\n neutral: ['bg-neutral'],\n success: ['bg-success'],\n alert: ['bg-alert'],\n error: ['bg-error'],\n },\n },\n defaultVariants: {\n intent: 'basic',\n },\n }\n)\n\nexport type SliderRangeVariantsProps = VariantProps<typeof rangeVariants>\n","import { Slider as BaseSlider } from '@base-ui/react/slider'\nimport { ComponentProps } from 'react'\n\nimport { useSliderContext } from './SliderContext'\nimport { rangeVariants } from './SliderTrack.styles'\n\nexport type SliderIndicatorProps = Omit<ComponentProps<typeof BaseSlider.Indicator>, 'render'>\n\nexport const SliderIndicator = ({ className, ref, ...rest }: SliderIndicatorProps) => {\n const { intent } = useSliderContext()\n\n return (\n <BaseSlider.Indicator\n data-spark-component=\"slider-indicator\"\n ref={ref}\n className={rangeVariants({ intent, className })}\n {...rest}\n />\n )\n}\n\nSliderIndicator.displayName = 'Slider.Indicator'\n","import { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport { cx } from 'class-variance-authority'\nimport { ReactNode, Ref, useEffect, useId, useRef } from 'react'\n\nimport { FormFieldRequiredIndicator } from '../form-field/FormFieldRequiredIndicator'\nimport { Label, LabelProps } from '../label'\nimport { Slottable } from '../slot'\nimport { useSliderContext } from './SliderContext'\n\nconst ID_PREFIX = ':slider-label'\n\nexport interface SliderLabelProps extends LabelProps {\n /**\n * Element shown when the input is required inside the label.\n */\n requiredIndicator?: ReactNode\n ref?: Ref<HTMLLabelElement>\n}\n\nexport const SliderLabel = ({\n htmlFor: htmlForProp,\n id: idProp,\n className,\n children,\n requiredIndicator = <FormFieldRequiredIndicator />,\n asChild,\n ref,\n ...others\n}: SliderLabelProps) => {\n const field = useFormFieldControl()\n const { fieldLabelId, fieldId, onLabelId } = useSliderContext()\n\n // Generate an id if not provided and no FormField labelId is available\n const internalId = useId()\n const generatedId = `${ID_PREFIX}-${internalId}`\n const labelId = idProp || fieldLabelId || field.labelId || generatedId\n\n // Use FormField id for htmlFor if present, otherwise use fieldId from context, or the prop\n const htmlFor = asChild ? undefined : htmlForProp || fieldId || field.id\n\n // Get disabled and required state from FormField if present\n const disabled = field.disabled\n const isRequired = field.isRequired\n\n // Notify SliderContext of the label id if no FormField is present\n const labelRef = useRef<HTMLLabelElement>(null)\n const mergedRef = useMergeRefs(ref, labelRef)\n\n useEffect(() => {\n if (onLabelId && !fieldLabelId && !field.labelId) {\n onLabelId(labelId)\n }\n }, [onLabelId, fieldLabelId, field.labelId, labelId])\n\n return (\n <Label\n ref={mergedRef}\n id={labelId}\n data-spark-component=\"slider-label\"\n htmlFor={htmlFor}\n className={cx(disabled ? 'text-on-surface/dim-3 pointer-events-none' : undefined, className)}\n asChild={asChild}\n {...others}\n >\n <>\n <Slottable>{children}</Slottable>\n {isRequired && requiredIndicator}\n </>\n </Label>\n )\n}\n\nSliderLabel.displayName = 'Slider.Label'\n","import { cx } from 'class-variance-authority'\nimport { forwardRef, type ReactNode } from 'react'\n\nimport { useSliderContext } from './SliderContext'\n\nexport interface SliderMaxValueProps {\n className?: string\n children?: (value: number) => ReactNode\n}\n\nexport const SliderMaxValue = forwardRef<HTMLDivElement, SliderMaxValueProps>(\n ({ className, children }, ref) => {\n const { max = 100 } = useSliderContext()\n\n const content = children ? children(max) : max\n\n return (\n <div\n data-spark-component=\"slider-max-value\"\n ref={ref}\n className={cx('text-on-surface/dim-1 text-body-2 col-start-2 text-right', className)}\n >\n {content}\n </div>\n )\n }\n)\n\nSliderMaxValue.displayName = 'Slider.MaxValue'\n","import { cx } from 'class-variance-authority'\nimport { forwardRef, type ReactNode } from 'react'\n\nimport { useSliderContext } from './SliderContext'\n\nexport interface SliderMinValueProps {\n className?: string\n children?: (value: number) => ReactNode\n}\n\nexport const SliderMinValue = forwardRef<HTMLDivElement, SliderMinValueProps>(\n ({ className, children }, ref) => {\n const { min = 0 } = useSliderContext()\n\n const content = children ? children(min) : min\n\n return (\n <div\n data-spark-component=\"slider-min-value\"\n ref={ref}\n className={cx('text-on-surface/dim-1 text-body-2 col-start-1 text-left', className)}\n >\n {content}\n </div>\n )\n }\n)\n\nSliderMinValue.displayName = 'Slider.MinValue'\n","import { createContext, useContext } from 'react'\n\nexport interface SliderThumbContextValue {\n isInsideThumb: true\n}\n\nexport const SliderThumbContext = createContext<SliderThumbContextValue | null>(null)\n\nexport const useSliderThumbContext = () => useContext(SliderThumbContext)\n","import { cva, VariantProps } from 'class-variance-authority'\n\nexport const thumbVariants = cva(\n [\n 'relative block size-sz-24 rounded-full cursor-pointer',\n 'outline-hidden',\n 'has-focus-visible:ring-2 has-focus-visible:ring-offset-2 has-focus-visible:ring-focus',\n 'data-disabled:hover:ring-0 data-disabled:cursor-not-allowed data-disabled:before:hidden',\n // visual thumb\n 'after:absolute after:left-1/2 after:top-1/2 after:-translate-x-1/2 after:-translate-y-1/2',\n 'after:size-sz-24 after:rounded-full',\n // hover effect\n 'before:absolute before:left-1/2 before:top-1/2 before:-translate-x-1/2 before:-translate-y-1/2',\n 'before:size-sz-24 before:rounded-full before:border-solid before:border-sm before:transition-all before:duration-75',\n 'hover:before:size-sz-32 data-dragging:before:size-sz-32',\n ],\n {\n variants: {\n intent: {\n main: ['after:bg-main', 'before:bg-main-container before:border-main'],\n support: ['after:bg-support', 'before:bg-support-container before:border-support'],\n accent: ['after:bg-accent', 'before:bg-accent-container before:border-accent'],\n basic: ['after:bg-basic', 'before:bg-basic-container before:border-basic'],\n info: ['after:bg-info', 'before:bg-info-container before:border-info'],\n neutral: ['after:bg-neutral', 'before:bg-neutral-container before:border-neutral'],\n success: ['after:bg-success', 'before:bg-success-container before:border-success'],\n alert: ['after:bg-alert', 'before:bg-alert-container before:border-alert'],\n error: ['after:bg-error', 'before:bg-error-container before:border-error'],\n },\n },\n defaultVariants: {\n intent: 'basic',\n },\n }\n)\n\nexport type SliderThumbVariantsProps = VariantProps<typeof thumbVariants>\n","import { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport { Slider as BaseSlider } from '@base-ui/react/slider'\nimport { ComponentProps, type PropsWithChildren, useRef } from 'react'\n\nimport { useSliderContext } from './SliderContext'\nimport { SliderThumbContext } from './SliderThumbContext'\nimport { thumbVariants } from './SliderThumb.styles'\n\nexport type SliderThumbProps = Omit<\n ComponentProps<typeof BaseSlider.Thumb>,\n 'render' | 'index'\n> &\n PropsWithChildren\n\nexport const SliderThumb = ({\n className,\n ref: forwardedRef,\n children,\n ...rest\n}: SliderThumbProps) => {\n const { intent, fieldLabelId, fieldId, thumbRef: contextThumbRef } = useSliderContext()\n\n const innerRef = useRef<HTMLDivElement>(null)\n const ref = useMergeRefs(contextThumbRef, forwardedRef ?? innerRef)\n\n return (\n <SliderThumbContext.Provider value={{ isInsideThumb: true }}>\n <BaseSlider.Thumb\n data-spark-component=\"slider-thumb\"\n ref={ref}\n id={fieldId}\n className={thumbVariants({ intent, className })}\n aria-labelledby={fieldLabelId}\n {...rest}\n >\n {children}\n </BaseSlider.Thumb>\n </SliderThumbContext.Provider>\n )\n}\n\nSliderThumb.displayName = 'Slider.Thumb'\n","import { Slider as BaseSlider } from '@base-ui/react/slider'\nimport { ComponentProps } from 'react'\n\nimport { trackVariants } from './SliderTrack.styles'\n\nexport type SliderTrackProps = Omit<ComponentProps<typeof BaseSlider.Track>, 'render'>\n\nexport const SliderTrack = ({ className, ref, ...rest }: SliderTrackProps) => {\n return (\n <BaseSlider.Track\n data-spark-component=\"slider-track\"\n ref={ref}\n className={trackVariants({ className })}\n {...rest}\n />\n )\n}\n\nSliderTrack.displayName = 'Slider.Track'\n","import type { RefObject } from 'react'\nimport { useLayoutEffect, useState } from 'react'\n\n/**\n * Computes the translateX (in pixels) to apply to the value element so it stays\n * within the horizontal bounds of the slider control when displayed inside the thumb.\n *\n * @param controlRef - Ref to the slider control (track container)\n * @param thumbRef - Ref to the thumb element\n * @param valueRef - Ref to the value label element\n * @param value - Current slider value (0–100 or min–max), used to re-run when thumb moves\n * @returns translateX in pixels (positive = right, negative = left), or 0 if refs are missing\n */\nexport function useSliderValueBoundaries(\n controlRef: RefObject<HTMLElement | null>,\n thumbRef: RefObject<HTMLElement | null>,\n valueRef: RefObject<HTMLElement | null>,\n value: number\n): number {\n const [translateX, setTranslateX] = useState(0)\n const [refsRetryScheduled, setRefsRetryScheduled] = useState(false)\n\n useLayoutEffect(() => {\n const control = controlRef.current\n const thumb = thumbRef.current\n const valueEl = valueRef.current\n\n if (!control || !thumb || !valueEl) {\n setTranslateX(0)\n // Re-run once on next frame when refs may be set (e.g. Slider.Value mounts after Control/Thumb)\n if (!refsRetryScheduled) {\n requestAnimationFrame(() => setRefsRetryScheduled(true))\n }\n\n return\n }\n\n let cancelled = false\n\n const compute = () => {\n if (cancelled) return\n\n const controlRect = control.getBoundingClientRect()\n const thumbRect = thumb.getBoundingClientRect()\n const valueWidth = valueEl.scrollWidth\n\n // Skip until value label has been laid out (content from render prop may not be ready on first paint)\n if (valueWidth === 0) {\n requestAnimationFrame(compute)\n\n return\n }\n\n const thumbCenterPx = thumbRect.left - controlRect.left + thumbRect.width / 2\n\n const valueCenterMin = valueWidth / 2\n const valueCenterMax = controlRect.width - valueWidth / 2\n\n const clampedCenter = Math.max(valueCenterMin, Math.min(valueCenterMax, thumbCenterPx))\n const nextTranslateX = clampedCenter - thumbCenterPx\n\n setTranslateX(prev => (prev !== nextTranslateX ? nextTranslateX : prev))\n }\n\n compute()\n\n const resizeObserver = new ResizeObserver(compute)\n resizeObserver.observe(control)\n resizeObserver.observe(valueEl)\n\n return () => {\n cancelled = true\n resizeObserver.disconnect()\n }\n }, [controlRef, thumbRef, valueRef, value, refsRetryScheduled])\n\n return translateX\n}\n","import { Slider as BaseSlider } from '@base-ui/react/slider'\nimport { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport { cx } from 'class-variance-authority'\nimport type { ReactNode } from 'react'\nimport { ComponentProps, useCallback, useEffect, useRef, useState } from 'react'\n\nimport { useSliderContext } from './SliderContext'\nimport { useSliderThumbContext } from './SliderThumbContext'\nimport { useSliderValueBoundaries } from './useSliderValueBoundaries'\n\nexport type SliderValueProps = Omit<ComponentProps<typeof BaseSlider.Value>, 'render'>\n\n/**\n * Normalizes Base UI's (formattedValues, values) to single (formatted, value) for the render prop.\n */\nexport const SliderValue = ({ className, children, ref, ...rest }: SliderValueProps) => {\n const { registerValueInThumb, controlRef, thumbRef } = useSliderContext()\n const thumbContext = useSliderThumbContext()\n const isInsideThumb = thumbContext !== null\n\n const valueRef = useRef<HTMLOutputElement | null>(null)\n const mergedRef = useMergeRefs(valueRef, ref)\n\n const [currentValue, setCurrentValue] = useState(0)\n const translateX = useSliderValueBoundaries(controlRef, thumbRef, valueRef, currentValue)\n\n useEffect(() => {\n if (!isInsideThumb) return\n\n return registerValueInThumb()\n }, [isInsideThumb, registerValueInThumb])\n\n const resolvedClassName = cx(\n isInsideThumb\n ? 'absolute left-1/2 -translate-x-1/2 top-[calc(-100%-var(--spacing-sm))] text-body-1 font-bold whitespace-nowrap'\n : 'default:text-body-1 col-start-2 text-right default:font-bold',\n className\n )\n\n const normalizedChildren = useCallback(\n (formattedValues: readonly string[], values: readonly number[]) => {\n const formatted = formattedValues[0] ?? String(values[0] ?? '')\n const value = values[0] ?? 0\n setCurrentValue(value)\n if (typeof children === 'function') {\n return (children as unknown as (formatted: string, value: number) => ReactNode)(\n formatted,\n value\n )\n }\n\n return formatted\n },\n [children]\n )\n\n const style = isInsideThumb\n ? { transform: `translate(calc(0% + ${translateX}px), 0)` }\n : undefined\n\n return (\n <BaseSlider.Value\n data-spark-component=\"slider-value\"\n ref={mergedRef}\n className={resolvedClassName}\n style={style}\n {...rest}\n >\n {normalizedChildren}\n </BaseSlider.Value>\n )\n}\n\nSliderValue.displayName = 'Slider.Value'\n","import { Slider as Root, type SliderProps } from './Slider'\nimport { SliderControl as Control, type SliderControlProps } from './SliderControl'\nimport { SliderIndicator as Indicator, type SliderIndicatorProps } from './SliderIndicator'\nimport { SliderLabel as Label, type SliderLabelProps } from './SliderLabel'\nimport { SliderMaxValue as MaxValue, type SliderMaxValueProps } from './SliderMaxValue'\nimport { SliderMinValue as MinValue, type SliderMinValueProps } from './SliderMinValue'\nimport { SliderThumb as Thumb, type SliderThumbProps } from './SliderThumb'\nimport { SliderTrack as Track, type SliderTrackProps } from './SliderTrack'\nimport { SliderValue as Value, type SliderValueProps } from './SliderValue'\n\nexport const Slider: typeof Root & {\n Control: typeof Control\n Indicator: typeof Indicator\n Label: typeof Label\n MaxValue: typeof MaxValue\n MinValue: typeof MinValue\n Thumb: typeof Thumb\n Track: typeof Track\n Value: typeof Value\n} = Object.assign(Root, {\n Control,\n Indicator,\n Label,\n MaxValue,\n MinValue,\n Thumb,\n Track,\n Value,\n})\n\nSlider.displayName = 'Slider'\nControl.displayName = 'Slider.Control'\nIndicator.displayName = 'Slider.Indicator'\nLabel.displayName = 'Slider.Label'\nMaxValue.displayName = 'Slider.MaxValue'\nMinValue.displayName = 'Slider.MinValue'\nThumb.displayName = 'Slider.Thumb'\nTrack.displayName = 'Slider.Track'\nValue.displayName = 'Slider.Value'\n\nexport type {\n SliderProps,\n SliderControlProps,\n SliderIndicatorProps,\n SliderLabelProps,\n SliderMaxValueProps,\n SliderMinValueProps,\n SliderThumbProps,\n SliderTrackProps,\n SliderValueProps,\n}\n"],"names":["rootStyles","cva","SliderContext","createContext","useSliderContext","useContext","Slider","intent","children","className","ref","valueProp","defaultValueProp","disabledProp","readOnlyProp","nameProp","onValueChange","onValueCommit","min","max","rest","field","useFormFieldControl","disabled","readOnly","name","labelId","setLabelId","useState","valueInThumbCount","setValueInThumbCount","controlRef","useRef","thumbRef","handleLabelId","useCallback","id","registerValueInThumb","c","jsx","BaseSlider","value","v","SliderControl","hasValueInThumb","mergedRef","useMergeRefs","cx","trackVariants","rangeVariants","SliderIndicator","ID_PREFIX","SliderLabel","htmlForProp","idProp","requiredIndicator","FormFieldRequiredIndicator","asChild","others","fieldLabelId","fieldId","onLabelId","internalId","useId","generatedId","htmlFor","isRequired","labelRef","useEffect","Label","jsxs","Fragment","Slottable","SliderMaxValue","forwardRef","content","SliderMinValue","SliderThumbContext","useSliderThumbContext","thumbVariants","SliderThumb","forwardedRef","contextThumbRef","innerRef","SliderTrack","useSliderValueBoundaries","valueRef","translateX","setTranslateX","refsRetryScheduled","setRefsRetryScheduled","useLayoutEffect","control","thumb","valueEl","cancelled","compute","controlRect","thumbRect","valueWidth","thumbCenterPx","valueCenterMin","valueCenterMax","nextTranslateX","prev","resizeObserver","SliderValue","isInsideThumb","currentValue","setCurrentValue","resolvedClassName","normalizedChildren","formattedValues","values","formatted","style","Root","Control","Indicator","MaxValue","MinValue","Thumb","Track","Value"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/slider/Slider.styles.ts","../../src/slider/SliderContext.tsx","../../src/slider/Slider.tsx","../../src/slider/SliderControl.tsx","../../src/slider/SliderTrack.styles.ts","../../src/slider/SliderIndicator.tsx","../../src/slider/SliderLabel.tsx","../../src/slider/SliderMaxValue.tsx","../../src/slider/SliderMinValue.tsx","../../src/slider/SliderThumbContext.tsx","../../src/slider/SliderThumb.styles.ts","../../src/slider/SliderThumb.tsx","../../src/slider/SliderTrack.tsx","../../src/slider/useSliderValueBoundaries.ts","../../src/slider/SliderValue.tsx","../../src/slider/index.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nexport const rootStyles = cva([\n 'grid grid-cols-[1fr_auto] gap-y-sm gap-x-md relative',\n 'touch-none select-none',\n 'data-disabled:cursor-not-allowed data-disabled:opacity-dim-3',\n])\n","import type { RefObject } from 'react'\nimport { createContext, useContext } from 'react'\n\nimport type { SliderProps } from './Slider'\n\nexport type SliderContextInterface = Pick<SliderProps, 'intent' | 'min' | 'max'> & {\n fieldLabelId?: string\n fieldId?: string\n onLabelId?: (id: string | undefined) => void\n hasValueInThumb: boolean\n registerValueInThumb: () => () => void\n controlRef: RefObject<HTMLElement | null>\n thumbRef: RefObject<HTMLElement | null>\n}\n\nexport const SliderContext = createContext<SliderContextInterface>({} as SliderContextInterface)\n\nexport const useSliderContext = () => useContext(SliderContext)\n","import { Slider as BaseSlider } from '@base-ui/react/slider'\nimport { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { ComponentProps, type PropsWithChildren, Ref, useCallback, useRef, useState } from 'react'\n\nimport { rootStyles } from './Slider.styles'\nimport { SliderContext } from './SliderContext'\nimport type { SliderRangeVariantsProps } from './SliderTrack.styles'\n\nexport interface SliderProps\n extends Omit<\n ComponentProps<typeof BaseSlider.Root>,\n 'render' | 'orientation' | 'onValueChange' | 'onValueCommitted'\n >,\n PropsWithChildren<SliderRangeVariantsProps> {\n /**\n * The value of the slider when initially rendered. Use when you do not need to control the state of the slider.\n */\n defaultValue?: number\n /**\n * The controlled value of the slider. Must be used in conjunction with `onValueChange`.\n */\n value?: number\n /**\n * Event handler called when the value changes.\n */\n onValueChange?: (value: number) => void\n /**\n * Event handler called when the value changes at the end of an interaction. Useful when you only need to capture a final value e.g. to update a backend service.\n */\n onValueCommit?: (value: number) => void\n /**\n * The name of the slider. Submitted with its owning form as part of a name/value pair.\n * If wrapped with a FormField with a name, will be inherited from it.\n */\n name?: string\n /**\n * When `true`, prevents the user from interacting with the slider.\n * @default false\n */\n disabled?: boolean\n /**\n * Sets the slider as interactive or not.\n */\n readOnly?: boolean\n /**\n * The minimum value for the range.\n * @default 0\n */\n min?: number\n /**\n * The maximum value for the range.\n * @default 100\n */\n max?: number\n /**\n * The stepping interval.\n * @default 1\n */\n step?: number\n ref?: Ref<HTMLDivElement>\n}\n\nexport const Slider = ({\n intent = 'support',\n children,\n className,\n ref,\n value: valueProp,\n defaultValue: defaultValueProp,\n disabled: disabledProp,\n readOnly: readOnlyProp,\n name: nameProp,\n onValueChange,\n onValueCommit,\n min = 0,\n max = 100,\n ...rest\n}: SliderProps) => {\n const field = useFormFieldControl()\n\n const disabled = field.disabled ?? disabledProp\n const readOnly = field.readOnly ?? readOnlyProp\n const name = field.name ?? nameProp\n\n const [labelId, setLabelId] = useState<string | undefined>(field.labelId)\n const [valueInThumbCount, setValueInThumbCount] = useState(0)\n const controlRef = useRef<HTMLElement | null>(null)\n const thumbRef = useRef<HTMLElement | null>(null)\n\n const handleLabelId = useCallback((id: string | undefined) => {\n setLabelId(id)\n }, [])\n\n const registerValueInThumb = useCallback(() => {\n setValueInThumbCount(c => c + 1)\n\n return () => setValueInThumbCount(c => c - 1)\n }, [])\n\n return (\n <SliderContext.Provider\n value={{\n intent,\n min,\n max,\n fieldLabelId: field.labelId || labelId,\n fieldId: field.id,\n onLabelId: handleLabelId,\n hasValueInThumb: valueInThumbCount > 0,\n registerValueInThumb,\n controlRef,\n thumbRef,\n }}\n >\n <BaseSlider.Root\n ref={ref}\n data-spark-component=\"slider\"\n className={rootStyles({ className })}\n orientation=\"horizontal\"\n disabled={disabled || readOnly}\n thumbAlignment=\"edge\"\n name={name}\n aria-describedby={field.description}\n aria-invalid={field.isInvalid}\n aria-disabled={disabled || readOnly ? true : undefined}\n value={valueProp !== undefined ? [valueProp] : undefined}\n defaultValue={defaultValueProp !== undefined ? [defaultValueProp] : undefined}\n onValueChange={\n onValueChange\n ? (value: number | readonly number[]) => {\n const v = Array.isArray(value) ? (value[0] ?? 0) : value\n onValueChange(v)\n }\n : undefined\n }\n onValueCommitted={\n onValueCommit\n ? (value: number | readonly number[]) => {\n const v = Array.isArray(value) ? (value[0] ?? 0) : value\n onValueCommit(v)\n }\n : undefined\n }\n min={min}\n max={max}\n {...rest}\n >\n {children}\n </BaseSlider.Root>\n </SliderContext.Provider>\n )\n}\n\nSlider.displayName = 'Slider'\n","import { Slider as BaseSlider } from '@base-ui/react/slider'\nimport { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport { cx } from 'class-variance-authority'\nimport { ComponentProps } from 'react'\n\nimport { useSliderContext } from './SliderContext'\n\nexport type SliderControlProps = Omit<ComponentProps<typeof BaseSlider.Control>, 'render'>\n\nexport const SliderControl = ({ className, ref, ...rest }: SliderControlProps) => {\n const { hasValueInThumb, controlRef } = useSliderContext()\n const mergedRef = useMergeRefs(controlRef, ref)\n\n return (\n <BaseSlider.Control\n data-spark-component=\"slider-control\"\n ref={mergedRef}\n className={cx(\n 'min-h-sz-24 relative col-span-2 flex w-full min-w-0 flex-1 items-center',\n hasValueInThumb && 'mt-xl',\n className\n )}\n {...rest}\n />\n )\n}\n\nSliderControl.displayName = 'Slider.Control'\n","import { cva, VariantProps } from 'class-variance-authority'\n\nexport const trackVariants = cva(['relative grow h-sz-4 bg-on-background/dim-4 rounded-sm'])\n\nexport const rangeVariants = cva(\n [\n 'absolute h-full rounded-sm',\n // Disable transitions during drag to eliminate latency\n 'transition-none',\n ],\n {\n variants: {\n intent: {\n main: ['bg-main'],\n support: ['bg-support'],\n accent: ['bg-accent'],\n info: ['bg-info'],\n neutral: ['bg-neutral'],\n success: ['bg-success'],\n alert: ['bg-alert'],\n error: ['bg-error'],\n },\n },\n defaultVariants: {\n intent: 'support',\n },\n }\n)\n\nexport type SliderRangeVariantsProps = VariantProps<typeof rangeVariants>\n","import { Slider as BaseSlider } from '@base-ui/react/slider'\nimport { ComponentProps } from 'react'\n\nimport { useSliderContext } from './SliderContext'\nimport { rangeVariants } from './SliderTrack.styles'\n\nexport type SliderIndicatorProps = Omit<ComponentProps<typeof BaseSlider.Indicator>, 'render'>\n\nexport const SliderIndicator = ({ className, ref, ...rest }: SliderIndicatorProps) => {\n const { intent } = useSliderContext()\n\n return (\n <BaseSlider.Indicator\n data-spark-component=\"slider-indicator\"\n ref={ref}\n className={rangeVariants({ intent, className })}\n {...rest}\n />\n )\n}\n\nSliderIndicator.displayName = 'Slider.Indicator'\n","import { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport { cx } from 'class-variance-authority'\nimport { ReactNode, Ref, useEffect, useId, useRef } from 'react'\n\nimport { FormFieldRequiredIndicator } from '../form-field/FormFieldRequiredIndicator'\nimport { Label, LabelProps } from '../label'\nimport { Slottable } from '../slot'\nimport { useSliderContext } from './SliderContext'\n\nconst ID_PREFIX = ':slider-label'\n\nexport interface SliderLabelProps extends LabelProps {\n /**\n * Element shown when the input is required inside the label.\n */\n requiredIndicator?: ReactNode\n ref?: Ref<HTMLLabelElement>\n}\n\nexport const SliderLabel = ({\n htmlFor: htmlForProp,\n id: idProp,\n className,\n children,\n requiredIndicator = <FormFieldRequiredIndicator />,\n asChild,\n ref,\n ...others\n}: SliderLabelProps) => {\n const field = useFormFieldControl()\n const { fieldLabelId, fieldId, onLabelId } = useSliderContext()\n\n // Generate an id if not provided and no FormField labelId is available\n const internalId = useId()\n const generatedId = `${ID_PREFIX}-${internalId}`\n const labelId = idProp || fieldLabelId || field.labelId || generatedId\n\n // Use FormField id for htmlFor if present, otherwise use fieldId from context, or the prop\n const htmlFor = asChild ? undefined : htmlForProp || fieldId || field.id\n\n // Get disabled and required state from FormField if present\n const disabled = field.disabled\n const isRequired = field.isRequired\n\n // Notify SliderContext of the label id if no FormField is present\n const labelRef = useRef<HTMLLabelElement>(null)\n const mergedRef = useMergeRefs(ref, labelRef)\n\n useEffect(() => {\n if (onLabelId && !fieldLabelId && !field.labelId) {\n onLabelId(labelId)\n }\n }, [onLabelId, fieldLabelId, field.labelId, labelId])\n\n return (\n <Label\n ref={mergedRef}\n id={labelId}\n data-spark-component=\"slider-label\"\n htmlFor={htmlFor}\n className={cx(disabled ? 'text-on-surface/dim-3 pointer-events-none' : undefined, className)}\n asChild={asChild}\n {...others}\n >\n <>\n <Slottable>{children}</Slottable>\n {isRequired && requiredIndicator}\n </>\n </Label>\n )\n}\n\nSliderLabel.displayName = 'Slider.Label'\n","import { cx } from 'class-variance-authority'\nimport { forwardRef, type ReactNode } from 'react'\n\nimport { useSliderContext } from './SliderContext'\n\nexport interface SliderMaxValueProps {\n className?: string\n children?: (value: number) => ReactNode\n}\n\nexport const SliderMaxValue = forwardRef<HTMLDivElement, SliderMaxValueProps>(\n ({ className, children }, ref) => {\n const { max = 100 } = useSliderContext()\n\n const content = children ? children(max) : max\n\n return (\n <div\n data-spark-component=\"slider-max-value\"\n ref={ref}\n className={cx('text-on-surface/dim-1 text-body-2 col-start-2 text-right', className)}\n >\n {content}\n </div>\n )\n }\n)\n\nSliderMaxValue.displayName = 'Slider.MaxValue'\n","import { cx } from 'class-variance-authority'\nimport { forwardRef, type ReactNode } from 'react'\n\nimport { useSliderContext } from './SliderContext'\n\nexport interface SliderMinValueProps {\n className?: string\n children?: (value: number) => ReactNode\n}\n\nexport const SliderMinValue = forwardRef<HTMLDivElement, SliderMinValueProps>(\n ({ className, children }, ref) => {\n const { min = 0 } = useSliderContext()\n\n const content = children ? children(min) : min\n\n return (\n <div\n data-spark-component=\"slider-min-value\"\n ref={ref}\n className={cx('text-on-surface/dim-1 text-body-2 col-start-1 text-left', className)}\n >\n {content}\n </div>\n )\n }\n)\n\nSliderMinValue.displayName = 'Slider.MinValue'\n","import { createContext, useContext } from 'react'\n\nexport interface SliderThumbContextValue {\n isInsideThumb: true\n}\n\nexport const SliderThumbContext = createContext<SliderThumbContextValue | null>(null)\n\nexport const useSliderThumbContext = () => useContext(SliderThumbContext)\n","import { cva, VariantProps } from 'class-variance-authority'\n\nexport const thumbVariants = cva(\n [\n 'relative block size-sz-24 rounded-full cursor-pointer',\n 'outline-hidden',\n 'has-focus-visible:ring-2 has-focus-visible:ring-offset-2 has-focus-visible:ring-focus',\n 'data-disabled:hover:ring-0 data-disabled:cursor-not-allowed data-disabled:before:hidden',\n // visual thumb\n 'after:absolute after:left-1/2 after:top-1/2 after:-translate-x-1/2 after:-translate-y-1/2',\n 'after:size-sz-24 after:rounded-full',\n // hover effect\n 'before:absolute before:left-1/2 before:top-1/2 before:-translate-x-1/2 before:-translate-y-1/2',\n 'before:size-sz-24 before:rounded-full before:border-solid before:border-sm before:transition-all before:duration-75',\n 'hover:before:size-sz-32 data-dragging:before:size-sz-32',\n ],\n {\n variants: {\n intent: {\n main: ['after:bg-main', 'before:bg-main-container before:border-main'],\n support: ['after:bg-support', 'before:bg-support-container before:border-support'],\n accent: ['after:bg-accent', 'before:bg-accent-container before:border-accent'],\n info: ['after:bg-info', 'before:bg-info-container before:border-info'],\n neutral: ['after:bg-neutral', 'before:bg-neutral-container before:border-neutral'],\n success: ['after:bg-success', 'before:bg-success-container before:border-success'],\n alert: ['after:bg-alert', 'before:bg-alert-container before:border-alert'],\n error: ['after:bg-error', 'before:bg-error-container before:border-error'],\n },\n },\n defaultVariants: {\n intent: 'support',\n },\n }\n)\n\nexport type SliderThumbVariantsProps = VariantProps<typeof thumbVariants>\n","import { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport { Slider as BaseSlider } from '@base-ui/react/slider'\nimport { ComponentProps, type PropsWithChildren, useRef } from 'react'\n\nimport { useSliderContext } from './SliderContext'\nimport { SliderThumbContext } from './SliderThumbContext'\nimport { thumbVariants } from './SliderThumb.styles'\n\nexport type SliderThumbProps = Omit<\n ComponentProps<typeof BaseSlider.Thumb>,\n 'render' | 'index'\n> &\n PropsWithChildren\n\nexport const SliderThumb = ({\n className,\n ref: forwardedRef,\n children,\n ...rest\n}: SliderThumbProps) => {\n const { intent, fieldLabelId, fieldId, thumbRef: contextThumbRef } = useSliderContext()\n\n const innerRef = useRef<HTMLDivElement>(null)\n const ref = useMergeRefs(contextThumbRef, forwardedRef ?? innerRef)\n\n return (\n <SliderThumbContext.Provider value={{ isInsideThumb: true }}>\n <BaseSlider.Thumb\n data-spark-component=\"slider-thumb\"\n ref={ref}\n id={fieldId}\n className={thumbVariants({ intent, className })}\n aria-labelledby={fieldLabelId}\n {...rest}\n >\n {children}\n </BaseSlider.Thumb>\n </SliderThumbContext.Provider>\n )\n}\n\nSliderThumb.displayName = 'Slider.Thumb'\n","import { Slider as BaseSlider } from '@base-ui/react/slider'\nimport { ComponentProps } from 'react'\n\nimport { trackVariants } from './SliderTrack.styles'\n\nexport type SliderTrackProps = Omit<ComponentProps<typeof BaseSlider.Track>, 'render'>\n\nexport const SliderTrack = ({ className, ref, ...rest }: SliderTrackProps) => {\n return (\n <BaseSlider.Track\n data-spark-component=\"slider-track\"\n ref={ref}\n className={trackVariants({ className })}\n {...rest}\n />\n )\n}\n\nSliderTrack.displayName = 'Slider.Track'\n","import type { RefObject } from 'react'\nimport { useLayoutEffect, useState } from 'react'\n\n/**\n * Computes the translateX (in pixels) to apply to the value element so it stays\n * within the horizontal bounds of the slider control when displayed inside the thumb.\n *\n * @param controlRef - Ref to the slider control (track container)\n * @param thumbRef - Ref to the thumb element\n * @param valueRef - Ref to the value label element\n * @param value - Current slider value (0–100 or min–max), used to re-run when thumb moves\n * @returns translateX in pixels (positive = right, negative = left), or 0 if refs are missing\n */\nexport function useSliderValueBoundaries(\n controlRef: RefObject<HTMLElement | null>,\n thumbRef: RefObject<HTMLElement | null>,\n valueRef: RefObject<HTMLElement | null>,\n value: number\n): number {\n const [translateX, setTranslateX] = useState(0)\n const [refsRetryScheduled, setRefsRetryScheduled] = useState(false)\n\n useLayoutEffect(() => {\n const control = controlRef.current\n const thumb = thumbRef.current\n const valueEl = valueRef.current\n\n if (!control || !thumb || !valueEl) {\n setTranslateX(0)\n // Re-run once on next frame when refs may be set (e.g. Slider.Value mounts after Control/Thumb)\n if (!refsRetryScheduled) {\n requestAnimationFrame(() => setRefsRetryScheduled(true))\n }\n\n return\n }\n\n let cancelled = false\n\n const compute = () => {\n if (cancelled) return\n\n const controlRect = control.getBoundingClientRect()\n const thumbRect = thumb.getBoundingClientRect()\n const valueWidth = valueEl.scrollWidth\n\n // Skip until value label has been laid out (content from render prop may not be ready on first paint)\n if (valueWidth === 0) {\n requestAnimationFrame(compute)\n\n return\n }\n\n const thumbCenterPx = thumbRect.left - controlRect.left + thumbRect.width / 2\n\n const valueCenterMin = valueWidth / 2\n const valueCenterMax = controlRect.width - valueWidth / 2\n\n const clampedCenter = Math.max(valueCenterMin, Math.min(valueCenterMax, thumbCenterPx))\n const nextTranslateX = clampedCenter - thumbCenterPx\n\n setTranslateX(prev => (prev !== nextTranslateX ? nextTranslateX : prev))\n }\n\n compute()\n\n const resizeObserver = new ResizeObserver(compute)\n resizeObserver.observe(control)\n resizeObserver.observe(valueEl)\n\n return () => {\n cancelled = true\n resizeObserver.disconnect()\n }\n }, [controlRef, thumbRef, valueRef, value, refsRetryScheduled])\n\n return translateX\n}\n","import { Slider as BaseSlider } from '@base-ui/react/slider'\nimport { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport { cx } from 'class-variance-authority'\nimport type { ReactNode } from 'react'\nimport { ComponentProps, useCallback, useEffect, useRef, useState } from 'react'\n\nimport { useSliderContext } from './SliderContext'\nimport { useSliderThumbContext } from './SliderThumbContext'\nimport { useSliderValueBoundaries } from './useSliderValueBoundaries'\n\nexport type SliderValueProps = Omit<ComponentProps<typeof BaseSlider.Value>, 'render'>\n\n/**\n * Normalizes Base UI's (formattedValues, values) to single (formatted, value) for the render prop.\n */\nexport const SliderValue = ({ className, children, ref, ...rest }: SliderValueProps) => {\n const { registerValueInThumb, controlRef, thumbRef } = useSliderContext()\n const thumbContext = useSliderThumbContext()\n const isInsideThumb = thumbContext !== null\n\n const valueRef = useRef<HTMLOutputElement | null>(null)\n const mergedRef = useMergeRefs(valueRef, ref)\n\n const [currentValue, setCurrentValue] = useState(0)\n const translateX = useSliderValueBoundaries(controlRef, thumbRef, valueRef, currentValue)\n\n useEffect(() => {\n if (!isInsideThumb) return\n\n return registerValueInThumb()\n }, [isInsideThumb, registerValueInThumb])\n\n const resolvedClassName = cx(\n isInsideThumb\n ? 'absolute left-1/2 -translate-x-1/2 top-[calc(-100%-var(--spacing-sm))] text-body-1 font-bold whitespace-nowrap'\n : 'default:text-body-1 col-start-2 text-right default:font-bold',\n className\n )\n\n const normalizedChildren = useCallback(\n (formattedValues: readonly string[], values: readonly number[]) => {\n const formatted = formattedValues[0] ?? String(values[0] ?? '')\n const value = values[0] ?? 0\n setCurrentValue(value)\n if (typeof children === 'function') {\n return (children as unknown as (formatted: string, value: number) => ReactNode)(\n formatted,\n value\n )\n }\n\n return formatted\n },\n [children]\n )\n\n const style = isInsideThumb\n ? { transform: `translate(calc(0% + ${translateX}px), 0)` }\n : undefined\n\n return (\n <BaseSlider.Value\n data-spark-component=\"slider-value\"\n ref={mergedRef}\n className={resolvedClassName}\n style={style}\n {...rest}\n >\n {normalizedChildren}\n </BaseSlider.Value>\n )\n}\n\nSliderValue.displayName = 'Slider.Value'\n","import { Slider as Root, type SliderProps } from './Slider'\nimport { SliderControl as Control, type SliderControlProps } from './SliderControl'\nimport { SliderIndicator as Indicator, type SliderIndicatorProps } from './SliderIndicator'\nimport { SliderLabel as Label, type SliderLabelProps } from './SliderLabel'\nimport { SliderMaxValue as MaxValue, type SliderMaxValueProps } from './SliderMaxValue'\nimport { SliderMinValue as MinValue, type SliderMinValueProps } from './SliderMinValue'\nimport { SliderThumb as Thumb, type SliderThumbProps } from './SliderThumb'\nimport { SliderTrack as Track, type SliderTrackProps } from './SliderTrack'\nimport { SliderValue as Value, type SliderValueProps } from './SliderValue'\n\nexport const Slider: typeof Root & {\n Control: typeof Control\n Indicator: typeof Indicator\n Label: typeof Label\n MaxValue: typeof MaxValue\n MinValue: typeof MinValue\n Thumb: typeof Thumb\n Track: typeof Track\n Value: typeof Value\n} = Object.assign(Root, {\n Control,\n Indicator,\n Label,\n MaxValue,\n MinValue,\n Thumb,\n Track,\n Value,\n})\n\nSlider.displayName = 'Slider'\nControl.displayName = 'Slider.Control'\nIndicator.displayName = 'Slider.Indicator'\nLabel.displayName = 'Slider.Label'\nMaxValue.displayName = 'Slider.MaxValue'\nMinValue.displayName = 'Slider.MinValue'\nThumb.displayName = 'Slider.Thumb'\nTrack.displayName = 'Slider.Track'\nValue.displayName = 'Slider.Value'\n\nexport type {\n SliderProps,\n SliderControlProps,\n SliderIndicatorProps,\n SliderLabelProps,\n SliderMaxValueProps,\n SliderMinValueProps,\n SliderThumbProps,\n SliderTrackProps,\n SliderValueProps,\n}\n"],"names":["rootStyles","cva","SliderContext","createContext","useSliderContext","useContext","Slider","intent","children","className","ref","valueProp","defaultValueProp","disabledProp","readOnlyProp","nameProp","onValueChange","onValueCommit","min","max","rest","field","useFormFieldControl","disabled","readOnly","name","labelId","setLabelId","useState","valueInThumbCount","setValueInThumbCount","controlRef","useRef","thumbRef","handleLabelId","useCallback","id","registerValueInThumb","c","jsx","BaseSlider","value","v","SliderControl","hasValueInThumb","mergedRef","useMergeRefs","cx","trackVariants","rangeVariants","SliderIndicator","ID_PREFIX","SliderLabel","htmlForProp","idProp","requiredIndicator","FormFieldRequiredIndicator","asChild","others","fieldLabelId","fieldId","onLabelId","internalId","useId","generatedId","htmlFor","isRequired","labelRef","useEffect","Label","jsxs","Fragment","Slottable","SliderMaxValue","forwardRef","content","SliderMinValue","SliderThumbContext","useSliderThumbContext","thumbVariants","SliderThumb","forwardedRef","contextThumbRef","innerRef","SliderTrack","useSliderValueBoundaries","valueRef","translateX","setTranslateX","refsRetryScheduled","setRefsRetryScheduled","useLayoutEffect","control","thumb","valueEl","cancelled","compute","controlRect","thumbRect","valueWidth","thumbCenterPx","valueCenterMin","valueCenterMax","nextTranslateX","prev","resizeObserver","SliderValue","isInsideThumb","currentValue","setCurrentValue","resolvedClassName","normalizedChildren","formattedValues","values","formatted","style","Root","Control","Indicator","MaxValue","MinValue","Thumb","Track","Value"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { VariantProps } from 'class-variance-authority';
2
2
  export declare const snackbarItemVariant: (props?: ({
3
3
  design?: "filled" | "tinted" | null | undefined;
4
- intent?: "main" | "alert" | "error" | "support" | "accent" | "basic" | "success" | "info" | "neutral" | "inverse" | null | undefined;
4
+ intent?: "main" | "alert" | "error" | "support" | "accent" | "success" | "info" | "neutral" | "inverse" | null | undefined;
5
5
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
6
6
  export declare const snackbarItemVariantContent: (props?: ({
7
7
  actionOnNewline?: boolean | null | undefined;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("react/jsx-runtime"),O=require("@react-stately/toast"),c=require("react"),tt=require("react-dom"),T=require("@react-aria/toast"),S=require("class-variance-authority"),et=require("../Button-B6rA3-e5.js"),nt=require("@spark-ui/icons/Close"),D=require("../Icon-CF0W0LKr.js"),at=require("../IconButton-D3g86WpZ.js"),it=[{design:"filled",intent:"success",class:["bg-success text-on-success"]},{design:"filled",intent:"alert",class:["bg-alert text-on-alert"]},{design:"filled",intent:"error",class:["bg-error text-on-error"]},{design:"filled",intent:"info",class:["bg-info text-on-info"]},{design:"filled",intent:"neutral",class:["bg-neutral text-on-neutral"]},{design:"filled",intent:"main",class:["bg-main text-on-main"]},{design:"filled",intent:"basic",class:["bg-basic text-on-basic"]},{design:"filled",intent:"support",class:["bg-support text-on-support"]},{design:"filled",intent:"accent",class:["bg-accent text-on-accent"]},{design:"filled",intent:"inverse",class:["bg-surface-inverse text-on-surface-inverse"]}],ot=[{design:"tinted",intent:"success",class:["bg-success-container text-on-success-container"]},{design:"tinted",intent:"alert",class:["bg-alert-container text-on-alert-container"]},{design:"tinted",intent:"error",class:["bg-error-container text-on-error-container"]},{design:"tinted",intent:"info",class:["bg-info-container text-on-info-container"]},{design:"tinted",intent:"neutral",class:["bg-neutral-container text-on-neutral-container"]},{design:"tinted",intent:"main",class:["bg-main-container text-on-main-container"]},{design:"tinted",intent:"basic",class:["bg-basic-container text-on-basic-container"]},{design:"tinted",intent:"support",class:["bg-support-container text-on-support-container"]},{design:"tinted",intent:"accent",class:["bg-accent-container text-on-accent-container"]},{design:"tinted",intent:"inverse",class:["bg-surface-inverse text-on-surface-inverse"]}],st=S.cva(["rounded-md shadow-sm","max-w-[600px]","cursor-default pointer-events-auto touch-none select-none","absolute","group-focus-visible:outline-hidden group-focus-visible:u-outline group-not-focus-visible:ring-inset","group-data-[position=bottom]:bottom-0 group-data-[position=bottom-left]:bottom-0 group-data-[position=bottom-right]:bottom-0","group-data-[position=top]:top-0 group-data-[position=top-left]:top-0 group-data-[position=top-right]:top-0","animation-duration-400","[animation-fill-mode: forwards]!","data-[animation=queued]:animate-fade-in","data-[animation=entering]:animation-ease-decelerate-back","data-[animation=exiting]:animation-ease-accelerate","data-[animation=entering]:group-data-[position=bottom]:[&:not([data-swipe])]:animate-slide-in-bottom","data-[animation=exiting]:opacity-0 data-[animation=exiting]:transition-opacity","data-[animation=exiting]:group-data-[position=bottom]:[&:not([data-swipe])]:animate-slide-out-bottom","data-[animation=entering]:group-data-[position=bottom-left]:[&:not([data-swipe])]:animate-slide-in-bottom","data-[animation=exiting]:group-data-[position=bottom-left]:[&:not([data-swipe])]:animate-slide-out-bottom","data-[animation=entering]:group-data-[position=bottom-right]:[&:not([data-swipe])]:animate-slide-in-bottom","data-[animation=exiting]:group-data-[position=bottom-right]:[&:not([data-swipe])]:animate-slide-out-bottom","data-[animation=entering]:group-data-[position=top]:[&:not([data-swipe])]:animate-slide-in-top","data-[animation=exiting]:group-data-[position=top]:[&:not([data-swipe])]:animate-slide-out-top","data-[animation=entering]:group-data-[position=top-left]:[&:not([data-swipe])]:animate-slide-in-top","data-[animation=exiting]:group-data-[position=top-left]:[&:not([data-swipe])]:animate-slide-out-top","data-[animation=entering]:group-data-[position=top-right]:[&:not([data-swipe])]:animate-slide-in-top","data-[animation=exiting]:group-data-[position=top-right]:[&:not([data-swipe])]:animate-slide-out-top","data-[swipe=move]:data-[swipe-direction=right]:translate-x-(--swipe-position-x)","data-[swipe=move]:data-[swipe-direction=left]:translate-x-(--swipe-position-x)","data-[swipe=cancel]:translate-x-0","data-[swipe=end]:data-[swipe-direction=right]:animate-standalone-swipe-out-right","data-[swipe=end]:data-[swipe-direction=left]:animate-standalone-swipe-out-left"],{variants:{design:{filled:"",tinted:""},intent:{success:"",alert:"",error:"",info:"",neutral:"",main:"",basic:"",support:"",accent:"",inverse:""}},compoundVariants:[...it,...ot],defaultVariants:{design:"filled",intent:"neutral"}}),rt=S.cva(["inline-grid items-center","col-start-1 row-start-1","pl-md pr-lg"],{variants:{actionOnNewline:{true:["grid-rows-[52px_1fr_52px]","grid-cols-[min-content_1fr_min-content]","[grid-template-areas:'icon_message_close'_'._message_.'_'action_action_action']"],false:["grid-cols-[min-content_1fr_min-content_min-content]","[grid-template-areas:'icon_message_action_close']"]}},defaultVariants:{actionOnNewline:!1}}),Q=c.createContext({}),q=()=>c.useContext(Q),h=({design:t="filled",intent:e="neutral",onClick:n,children:s,className:l,ref:u,...m})=>{const{toast:a,state:o}=q(),i=e??a.content.intent,f=t??a.content.design;return b.jsx(et.Button,{"data-spark-component":"snackbar-item-action",ref:u,size:"md",shape:"rounded",...i==="inverse"?{design:"ghost",intent:"surface"}:{design:f,intent:i==="error"?"danger":i},onClick:y=>{n?.(y),o.close(a.key)},style:{gridArea:"action",...m.style},className:S.cx("ml-md justify-self-end",l),...m,children:s})};h.displayName="Snackbar.ItemAction";const I=({design:t="filled",intent:e="neutral","aria-label":n,onClick:s,className:l,ref:u,...m})=>{const{toast:a,state:o}=q(),i=e??a.content.intent,f=t??a.content.design;return b.jsx(at.IconButton,{"data-spark-component":"snackbar-item-close",ref:u,size:"md",shape:"rounded",...i==="inverse"?{design:"ghost",intent:"surface"}:{design:f,intent:i==="error"?"danger":i},"aria-label":n,onClick:y=>{s?.(y),o.close(a.key)},style:{gridArea:"close",...m.style},className:S.cx("ml-md justify-self-end",l),...m,children:b.jsx(D.Icon,{size:"sm",children:b.jsx(nt.Close,{})})})};I.displayName="Snackbar.ItemClose";const C=({children:t,className:e,...n})=>b.jsx(D.Icon,{size:"md",className:S.cx("mx-md",e),style:{gridArea:"icon",...n.style},...n,children:t});C.displayName="Snackbar.ItemIcon";const V=75,ct=({swipeRef:t,onSwipeStart:e,onSwipeMove:n,onSwipeCancel:s,onSwipeEnd:l,threshold:u=10})=>{const[m,a]=c.useState(),o=c.useRef(null),i=c.useRef(null),f=c.useRef(null),y=r=>{i.current={x:r.clientX,y:r.clientY},document.addEventListener("selectstart",p=>p.preventDefault())},k=r=>{if(!i.current)return;const p=Math.abs(r.clientX-i.current.x),x=Math.abs(r.clientY-i.current.y);let d;p>x&&p>u?o.current=r.clientX>i.current.x?"right":"left":x>u&&(o.current=r.clientY>i.current.y?"down":"up"),o.current&&(f.current?(d="move",f.current={x:p,y:x},t.current.style.setProperty("--swipe-position-x",`${p>x?r.clientX-i.current.x:0}px`),t.current.style.setProperty("--swipe-position-y",`${p>x?0:r.clientY-i.current.y}px`),n?.({state:d,direction:o.current})):(d="start",f.current={x:p,y:x},e?.({state:d,direction:o.current})),a(d))},g=()=>{const r=f.current;if(i.current=null,f.current=null,r){const{x:p,y:x}=r;let d;p>x?p>V?(d="end",l?.({state:d,direction:o.current})):(d="cancel",s?.({state:d,direction:o.current})):x>V?(d="end",l?.({state:d,direction:o.current})):(d="cancel",s?.({state:d,direction:o.current})),a(d),document.removeEventListener("selectstart",v=>v.preventDefault())}};return c.useEffect(()=>{if(!t.current)return;const r=t.current;return r.addEventListener("pointerdown",y),document.addEventListener("pointermove",k),document.addEventListener("pointerup",g),()=>{r.removeEventListener("pointerdown",y),document.removeEventListener("pointermove",k),document.removeEventListener("pointerup",g)}},[]),{state:m,direction:o.current}},A=({"aria-label":t,"aria-labelledby":e,"aria-describedby":n,"aria-details":s,design:l,intent:u,actionOnNewline:m,className:a,children:o,ref:i,...f})=>{const y=c.useRef(null),k=typeof i!="function"&&i||y,{toast:g,state:r}=q(),{state:p,direction:x}=ct({swipeRef:k,onSwipeStart:r.pauseAll,onSwipeCancel:r.resumeAll,onSwipeEnd:({direction:_})=>{["left","right"].includes(`${_}`)&&r.close(g.key)}}),{message:d,icon:v,isClosable:$,onAction:B,actionLabel:R}=g.content,N=u??g.content.intent,j=l??g.content.design,z=m??g.content.actionOnNewline,F={ariaLabel:t,ariaLabelledby:e,ariaDescribedby:n,ariaDetails:s},{toastProps:M,titleProps:G,closeButtonProps:H,contentProps:K}=T.useToast({toast:g,...F},r,k),E=c.useCallback(_=>c.Children.toArray(o).filter(c.isValidElement).find(Z=>!!Z.type.displayName?.includes(_)),[o]),U=E("Snackbar.ItemIcon"),W=E("Snackbar.ItemAction"),J=E("Snackbar.ItemClose");return b.jsx("div",{"data-spark-component":"snackbar-item",className:st({design:j,intent:N,className:a}),"data-animation":g.animation,...!(p==="cancel"&&g.animation==="exiting")&&{"data-swipe":p,"data-swipe-direction":x},...g.animation==="exiting"&&{onAnimationEnd:()=>r.remove(g.key)},ref:k,...M,...f,children:b.jsxs("div",{className:rt({actionOnNewline:z}),...K,children:[P(U,v?C:null,{children:v}),b.jsx("p",{className:"px-md py-lg text-body-2 row-span-3",style:{gridArea:"message"},...G,children:d}),P(W,R&&B?h:null,{intent:N,design:j,onClick:B,children:R}),P(J,$?I:null,{intent:N,design:j,"aria-label":H["aria-label"]})]})})};A.displayName="Snackbar.Item";const P=(t,e,n)=>{if(t)return c.cloneElement(t,{...n,...t.props});if(e){const s=e;return b.jsx(s,{...n})}else return null},lt=S.cva(["fixed inset-x-lg z-toast group","outline-hidden pointer-events-none","grid grid-rows-1 grid-cols-1 gap-lg"],{variants:{position:{top:"top-lg justify-items-center","top-right":"top-lg justify-items-end","top-left":"top-lg justify-items-start",bottom:"bottom-lg justify-items-center","bottom-right":"bottom-lg justify-items-end","bottom-left":"bottom-lg justify-items-start"}},defaultVariants:{position:"bottom"}}),dt=({children:t=b.jsx(A,{}),state:e,position:n="bottom",className:s,ref:l,...u})=>{const m=c.useRef(null),a=l&&typeof l!="function"?l:m,{regionProps:o}=T.useToastRegion(u,e,a);return b.jsx("div",{...o,ref:a,"data-position":n,className:lt({position:n,className:s}),children:e.visibleToasts.map(i=>b.jsx(Q.Provider,{value:{toast:i,state:e},children:c.cloneElement(t,{key:i.key})},i.key))})},ut=({providers:t,subscriptions:e})=>{const n=c.useCallback(a=>(e.add(a),()=>e.delete(a)),[e]),s=c.useCallback(()=>[...t].reverse()[0],[t]),l=c.useCallback(a=>{t.add(a);for(const o of e)o()},[t,e]),u=c.useCallback(a=>{t.delete(a);for(const o of e)o()},[t,e]);return{provider:c.useSyncExternalStore(n,s,s),addProvider:l,deleteProvider:u}};let w=null;const L=()=>(w||(w=new O.ToastQueue({maxVisibleToasts:1,hasExitAnimation:!0})),w),mt=()=>{w=null},pt={providers:new Set,subscriptions:new Set},X=({ref:t,...e})=>{const n=c.useRef(null),s=O.useToastQueue(L()),{provider:l,addProvider:u,deleteProvider:m}=ut(pt);return c.useEffect(()=>(u(n),()=>{for(const a of L().visibleToasts)a.animation=void 0;m(n)}),[]),n===l&&s.visibleToasts.length>0?tt.createPortal(b.jsx(dt,{ref:t,state:s,...e}),document.body):null};X.displayName="Snackbar";const gt=({onClose:t,timeout:e=5e3,priority:n,...s})=>{L().add(s,{onClose:t,timeout:e&&!s.onAction?Math.max(e,5e3):void 0,priority:n})},Y=Object.assign(X,{Item:A,ItemAction:h,ItemClose:I,ItemIcon:C});Y.displayName="Snackbar";A.displayName="Snackbar.Item";h.displayName="Snackbar.ItemAction";I.displayName="Snackbar.ItemClose";C.displayName="Snackbar.ItemIcon";exports.Snackbar=Y;exports.addSnackbar=gt;exports.clearSnackbarQueue=mt;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("react/jsx-runtime"),O=require("@react-stately/toast"),c=require("react"),tt=require("react-dom"),T=require("@react-aria/toast"),S=require("class-variance-authority"),et=require("../Button-CXL2NOrq.js"),nt=require("@spark-ui/icons/Close"),D=require("../Icon-C-cNTnzd.js"),at=require("../IconButton-JFDGiOOn.js"),it=[{design:"filled",intent:"success",class:["bg-success text-on-success"]},{design:"filled",intent:"alert",class:["bg-alert text-on-alert"]},{design:"filled",intent:"error",class:["bg-error text-on-error"]},{design:"filled",intent:"info",class:["bg-info text-on-info"]},{design:"filled",intent:"neutral",class:["bg-neutral text-on-neutral"]},{design:"filled",intent:"main",class:["bg-main text-on-main"]},{design:"filled",intent:"support",class:["bg-support text-on-support"]},{design:"filled",intent:"accent",class:["bg-accent text-on-accent"]},{design:"filled",intent:"inverse",class:["bg-surface-inverse text-on-surface-inverse"]}],ot=[{design:"tinted",intent:"success",class:["bg-success-container text-on-success-container"]},{design:"tinted",intent:"alert",class:["bg-alert-container text-on-alert-container"]},{design:"tinted",intent:"error",class:["bg-error-container text-on-error-container"]},{design:"tinted",intent:"info",class:["bg-info-container text-on-info-container"]},{design:"tinted",intent:"neutral",class:["bg-neutral-container text-on-neutral-container"]},{design:"tinted",intent:"main",class:["bg-main-container text-on-main-container"]},{design:"tinted",intent:"support",class:["bg-support-container text-on-support-container"]},{design:"tinted",intent:"accent",class:["bg-accent-container text-on-accent-container"]},{design:"tinted",intent:"inverse",class:["bg-surface-inverse text-on-surface-inverse"]}],st=S.cva(["rounded-md shadow-sm","max-w-[600px]","cursor-default pointer-events-auto touch-none select-none","absolute","group-focus-visible:outline-hidden group-focus-visible:u-outline group-not-focus-visible:ring-inset","group-data-[position=bottom]:bottom-0 group-data-[position=bottom-left]:bottom-0 group-data-[position=bottom-right]:bottom-0","group-data-[position=top]:top-0 group-data-[position=top-left]:top-0 group-data-[position=top-right]:top-0","animation-duration-400","[animation-fill-mode: forwards]!","data-[animation=queued]:animate-fade-in","data-[animation=entering]:animation-ease-decelerate-back","data-[animation=exiting]:animation-ease-accelerate","data-[animation=entering]:group-data-[position=bottom]:[&:not([data-swipe])]:animate-slide-in-bottom","data-[animation=exiting]:opacity-0 data-[animation=exiting]:transition-opacity","data-[animation=exiting]:group-data-[position=bottom]:[&:not([data-swipe])]:animate-slide-out-bottom","data-[animation=entering]:group-data-[position=bottom-left]:[&:not([data-swipe])]:animate-slide-in-bottom","data-[animation=exiting]:group-data-[position=bottom-left]:[&:not([data-swipe])]:animate-slide-out-bottom","data-[animation=entering]:group-data-[position=bottom-right]:[&:not([data-swipe])]:animate-slide-in-bottom","data-[animation=exiting]:group-data-[position=bottom-right]:[&:not([data-swipe])]:animate-slide-out-bottom","data-[animation=entering]:group-data-[position=top]:[&:not([data-swipe])]:animate-slide-in-top","data-[animation=exiting]:group-data-[position=top]:[&:not([data-swipe])]:animate-slide-out-top","data-[animation=entering]:group-data-[position=top-left]:[&:not([data-swipe])]:animate-slide-in-top","data-[animation=exiting]:group-data-[position=top-left]:[&:not([data-swipe])]:animate-slide-out-top","data-[animation=entering]:group-data-[position=top-right]:[&:not([data-swipe])]:animate-slide-in-top","data-[animation=exiting]:group-data-[position=top-right]:[&:not([data-swipe])]:animate-slide-out-top","data-[swipe=move]:data-[swipe-direction=right]:translate-x-(--swipe-position-x)","data-[swipe=move]:data-[swipe-direction=left]:translate-x-(--swipe-position-x)","data-[swipe=cancel]:translate-x-0","data-[swipe=end]:data-[swipe-direction=right]:animate-standalone-swipe-out-right","data-[swipe=end]:data-[swipe-direction=left]:animate-standalone-swipe-out-left"],{variants:{design:{filled:"",tinted:""},intent:{success:"",alert:"",error:"",info:"",neutral:"",main:"",support:"",accent:"",inverse:""}},compoundVariants:[...it,...ot],defaultVariants:{design:"filled",intent:"neutral"}}),rt=S.cva(["inline-grid items-center","col-start-1 row-start-1","pl-md pr-lg"],{variants:{actionOnNewline:{true:["grid-rows-[52px_1fr_52px]","grid-cols-[min-content_1fr_min-content]","[grid-template-areas:'icon_message_close'_'._message_.'_'action_action_action']"],false:["grid-cols-[min-content_1fr_min-content_min-content]","[grid-template-areas:'icon_message_action_close']"]}},defaultVariants:{actionOnNewline:!1}}),Q=c.createContext({}),q=()=>c.useContext(Q),h=({design:t="filled",intent:e="neutral",onClick:n,children:s,className:l,ref:u,...m})=>{const{toast:a,state:o}=q(),i=e??a.content.intent,f=t??a.content.design;return b.jsx(et.Button,{"data-spark-component":"snackbar-item-action",ref:u,size:"md",shape:"rounded",...i==="inverse"?{design:"ghost",intent:"surface"}:{design:f,intent:i==="error"?"danger":i},onClick:y=>{n?.(y),o.close(a.key)},style:{gridArea:"action",...m.style},className:S.cx("ml-md justify-self-end",l),...m,children:s})};h.displayName="Snackbar.ItemAction";const I=({design:t="filled",intent:e="neutral","aria-label":n,onClick:s,className:l,ref:u,...m})=>{const{toast:a,state:o}=q(),i=e??a.content.intent,f=t??a.content.design;return b.jsx(at.IconButton,{"data-spark-component":"snackbar-item-close",ref:u,size:"md",shape:"rounded",...i==="inverse"?{design:"ghost",intent:"surface"}:{design:f,intent:i==="error"?"danger":i},"aria-label":n,onClick:y=>{s?.(y),o.close(a.key)},style:{gridArea:"close",...m.style},className:S.cx("ml-md justify-self-end",l),...m,children:b.jsx(D.Icon,{size:"sm",children:b.jsx(nt.Close,{})})})};I.displayName="Snackbar.ItemClose";const C=({children:t,className:e,...n})=>b.jsx(D.Icon,{size:"md",className:S.cx("mx-md",e),style:{gridArea:"icon",...n.style},...n,children:t});C.displayName="Snackbar.ItemIcon";const V=75,ct=({swipeRef:t,onSwipeStart:e,onSwipeMove:n,onSwipeCancel:s,onSwipeEnd:l,threshold:u=10})=>{const[m,a]=c.useState(),o=c.useRef(null),i=c.useRef(null),f=c.useRef(null),y=r=>{i.current={x:r.clientX,y:r.clientY},document.addEventListener("selectstart",p=>p.preventDefault())},k=r=>{if(!i.current)return;const p=Math.abs(r.clientX-i.current.x),x=Math.abs(r.clientY-i.current.y);let d;p>x&&p>u?o.current=r.clientX>i.current.x?"right":"left":x>u&&(o.current=r.clientY>i.current.y?"down":"up"),o.current&&(f.current?(d="move",f.current={x:p,y:x},t.current.style.setProperty("--swipe-position-x",`${p>x?r.clientX-i.current.x:0}px`),t.current.style.setProperty("--swipe-position-y",`${p>x?0:r.clientY-i.current.y}px`),n?.({state:d,direction:o.current})):(d="start",f.current={x:p,y:x},e?.({state:d,direction:o.current})),a(d))},g=()=>{const r=f.current;if(i.current=null,f.current=null,r){const{x:p,y:x}=r;let d;p>x?p>V?(d="end",l?.({state:d,direction:o.current})):(d="cancel",s?.({state:d,direction:o.current})):x>V?(d="end",l?.({state:d,direction:o.current})):(d="cancel",s?.({state:d,direction:o.current})),a(d),document.removeEventListener("selectstart",v=>v.preventDefault())}};return c.useEffect(()=>{if(!t.current)return;const r=t.current;return r.addEventListener("pointerdown",y),document.addEventListener("pointermove",k),document.addEventListener("pointerup",g),()=>{r.removeEventListener("pointerdown",y),document.removeEventListener("pointermove",k),document.removeEventListener("pointerup",g)}},[]),{state:m,direction:o.current}},A=({"aria-label":t,"aria-labelledby":e,"aria-describedby":n,"aria-details":s,design:l,intent:u,actionOnNewline:m,className:a,children:o,ref:i,...f})=>{const y=c.useRef(null),k=typeof i!="function"&&i||y,{toast:g,state:r}=q(),{state:p,direction:x}=ct({swipeRef:k,onSwipeStart:r.pauseAll,onSwipeCancel:r.resumeAll,onSwipeEnd:({direction:_})=>{["left","right"].includes(`${_}`)&&r.close(g.key)}}),{message:d,icon:v,isClosable:$,onAction:B,actionLabel:R}=g.content,N=u??g.content.intent,j=l??g.content.design,z=m??g.content.actionOnNewline,F={ariaLabel:t,ariaLabelledby:e,ariaDescribedby:n,ariaDetails:s},{toastProps:M,titleProps:G,closeButtonProps:H,contentProps:K}=T.useToast({toast:g,...F},r,k),E=c.useCallback(_=>c.Children.toArray(o).filter(c.isValidElement).find(Z=>!!Z.type.displayName?.includes(_)),[o]),U=E("Snackbar.ItemIcon"),W=E("Snackbar.ItemAction"),J=E("Snackbar.ItemClose");return b.jsx("div",{"data-spark-component":"snackbar-item",className:st({design:j,intent:N,className:a}),"data-animation":g.animation,...!(p==="cancel"&&g.animation==="exiting")&&{"data-swipe":p,"data-swipe-direction":x},...g.animation==="exiting"&&{onAnimationEnd:()=>r.remove(g.key)},ref:k,...M,...f,children:b.jsxs("div",{className:rt({actionOnNewline:z}),...K,children:[P(U,v?C:null,{children:v}),b.jsx("p",{className:"px-md py-lg text-body-2 row-span-3",style:{gridArea:"message"},...G,children:d}),P(W,R&&B?h:null,{intent:N,design:j,onClick:B,children:R}),P(J,$?I:null,{intent:N,design:j,"aria-label":H["aria-label"]})]})})};A.displayName="Snackbar.Item";const P=(t,e,n)=>{if(t)return c.cloneElement(t,{...n,...t.props});if(e){const s=e;return b.jsx(s,{...n})}else return null},lt=S.cva(["fixed inset-x-lg z-toast group","outline-hidden pointer-events-none","grid grid-rows-1 grid-cols-1 gap-lg"],{variants:{position:{top:"top-lg justify-items-center","top-right":"top-lg justify-items-end","top-left":"top-lg justify-items-start",bottom:"bottom-lg justify-items-center","bottom-right":"bottom-lg justify-items-end","bottom-left":"bottom-lg justify-items-start"}},defaultVariants:{position:"bottom"}}),dt=({children:t=b.jsx(A,{}),state:e,position:n="bottom",className:s,ref:l,...u})=>{const m=c.useRef(null),a=l&&typeof l!="function"?l:m,{regionProps:o}=T.useToastRegion(u,e,a);return b.jsx("div",{...o,ref:a,"data-position":n,className:lt({position:n,className:s}),children:e.visibleToasts.map(i=>b.jsx(Q.Provider,{value:{toast:i,state:e},children:c.cloneElement(t,{key:i.key})},i.key))})},ut=({providers:t,subscriptions:e})=>{const n=c.useCallback(a=>(e.add(a),()=>e.delete(a)),[e]),s=c.useCallback(()=>[...t].reverse()[0],[t]),l=c.useCallback(a=>{t.add(a);for(const o of e)o()},[t,e]),u=c.useCallback(a=>{t.delete(a);for(const o of e)o()},[t,e]);return{provider:c.useSyncExternalStore(n,s,s),addProvider:l,deleteProvider:u}};let w=null;const L=()=>(w||(w=new O.ToastQueue({maxVisibleToasts:1,hasExitAnimation:!0})),w),mt=()=>{w=null},pt={providers:new Set,subscriptions:new Set},X=({ref:t,...e})=>{const n=c.useRef(null),s=O.useToastQueue(L()),{provider:l,addProvider:u,deleteProvider:m}=ut(pt);return c.useEffect(()=>(u(n),()=>{for(const a of L().visibleToasts)a.animation=void 0;m(n)}),[]),n===l&&s.visibleToasts.length>0?tt.createPortal(b.jsx(dt,{ref:t,state:s,...e}),document.body):null};X.displayName="Snackbar";const gt=({onClose:t,timeout:e=5e3,priority:n,...s})=>{L().add(s,{onClose:t,timeout:e&&!s.onAction?Math.max(e,5e3):void 0,priority:n})},Y=Object.assign(X,{Item:A,ItemAction:h,ItemClose:I,ItemIcon:C});Y.displayName="Snackbar";A.displayName="Snackbar.Item";h.displayName="Snackbar.ItemAction";I.displayName="Snackbar.ItemClose";C.displayName="Snackbar.ItemIcon";exports.Snackbar=Y;exports.addSnackbar=gt;exports.clearSnackbarQueue=mt;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/snackbar/snackbarVariants.ts","../../src/snackbar/SnackbarItem.styles.ts","../../src/snackbar/SnackbarItemContext.tsx","../../src/snackbar/SnackbarItemAction.tsx","../../src/snackbar/SnackbarItemClose.tsx","../../src/snackbar/SnackbarItemIcon.tsx","../../src/snackbar/useSwipe.ts","../../src/snackbar/SnackbarItem.tsx","../../src/snackbar/SnackbarRegion.styles.ts","../../src/snackbar/SnackbarRegion.tsx","../../src/snackbar/useSnackbarGlobalStore.ts","../../src/snackbar/Snackbar.tsx","../../src/snackbar/index.ts"],"sourcesContent":["export const filledVariants = [\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: 'inverse',\n class: ['bg-surface-inverse text-on-surface-inverse'],\n },\n] as const\n\nexport const tintedVariants = [\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: 'inverse',\n class: ['bg-surface-inverse text-on-surface-inverse'],\n },\n] as const\n","import { cva, VariantProps } from 'class-variance-authority'\n\nimport { filledVariants, tintedVariants } from './snackbarVariants'\n\nexport const snackbarItemVariant = cva(\n [\n 'rounded-md shadow-sm',\n 'max-w-[600px]',\n 'cursor-default pointer-events-auto touch-none select-none',\n 'absolute',\n /**\n * Focus\n */\n 'group-focus-visible:outline-hidden group-focus-visible:u-outline group-not-focus-visible:ring-inset',\n /**\n * Positionning\n */\n 'group-data-[position=bottom]:bottom-0 group-data-[position=bottom-left]:bottom-0 group-data-[position=bottom-right]:bottom-0',\n 'group-data-[position=top]:top-0 group-data-[position=top-left]:top-0 group-data-[position=top-right]:top-0',\n /**\n * Animation and opacity\n */\n 'animation-duration-400',\n '[animation-fill-mode: forwards]!',\n 'data-[animation=queued]:animate-fade-in',\n 'data-[animation=entering]:animation-ease-decelerate-back',\n 'data-[animation=exiting]:animation-ease-accelerate',\n // Parent position bottom|bottom-left|bottom-right\n 'data-[animation=entering]:group-data-[position=bottom]:[&:not([data-swipe])]:animate-slide-in-bottom',\n 'data-[animation=exiting]:opacity-0 data-[animation=exiting]:transition-opacity',\n 'data-[animation=exiting]:group-data-[position=bottom]:[&:not([data-swipe])]:animate-slide-out-bottom',\n 'data-[animation=entering]:group-data-[position=bottom-left]:[&:not([data-swipe])]:animate-slide-in-bottom',\n 'data-[animation=exiting]:group-data-[position=bottom-left]:[&:not([data-swipe])]:animate-slide-out-bottom',\n 'data-[animation=entering]:group-data-[position=bottom-right]:[&:not([data-swipe])]:animate-slide-in-bottom',\n 'data-[animation=exiting]:group-data-[position=bottom-right]:[&:not([data-swipe])]:animate-slide-out-bottom',\n // Parent position top|top-left|top-right\n 'data-[animation=entering]:group-data-[position=top]:[&:not([data-swipe])]:animate-slide-in-top',\n 'data-[animation=exiting]:group-data-[position=top]:[&:not([data-swipe])]:animate-slide-out-top',\n 'data-[animation=entering]:group-data-[position=top-left]:[&:not([data-swipe])]:animate-slide-in-top',\n 'data-[animation=exiting]:group-data-[position=top-left]:[&:not([data-swipe])]:animate-slide-out-top',\n 'data-[animation=entering]:group-data-[position=top-right]:[&:not([data-swipe])]:animate-slide-in-top',\n 'data-[animation=exiting]:group-data-[position=top-right]:[&:not([data-swipe])]:animate-slide-out-top',\n /**\n * Swipe\n */\n 'data-[swipe=move]:data-[swipe-direction=right]:translate-x-(--swipe-position-x)',\n 'data-[swipe=move]:data-[swipe-direction=left]:translate-x-(--swipe-position-x)',\n 'data-[swipe=cancel]:translate-x-0',\n 'data-[swipe=end]:data-[swipe-direction=right]:animate-standalone-swipe-out-right',\n 'data-[swipe=end]:data-[swipe-direction=left]:animate-standalone-swipe-out-left',\n ],\n {\n variants: {\n /**\n * Set different look and feel\n * @default 'filled'\n */\n design: {\n filled: '',\n tinted: '',\n },\n /**\n * Set color intent\n * @default 'neutral'\n */\n intent: {\n success: '',\n alert: '',\n error: '',\n info: '',\n neutral: '',\n main: '',\n basic: '',\n support: '',\n accent: '',\n inverse: '',\n },\n },\n compoundVariants: [...filledVariants, ...tintedVariants],\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 SnackbarItemVariantProps = VariantProps<typeof snackbarItemVariant>\nexport type SnackbarItemVariantContentProps = VariantProps<typeof snackbarItemVariantContent>\n","import { QueuedToast, ToastState } from '@react-stately/toast'\nimport { createContext, useContext } from 'react'\n\nimport type { SnackbarItemValue } from './SnackbarItem'\n\nexport interface SnackbarItemState<T = SnackbarItemValue> {\n toast: QueuedToast<T>\n state: ToastState<T>\n}\n\nexport const SnackbarItemContext = createContext<SnackbarItemState>({} as SnackbarItemState)\n\nexport const useSnackbarItemContext = () => useContext(SnackbarItemContext)\n","import { cx } from 'class-variance-authority'\nimport { Ref } from 'react'\n\nimport { Button, type ButtonProps } from '../button'\nimport type { SnackbarItemVariantProps } from './SnackbarItem.styles'\nimport { useSnackbarItemContext } from './SnackbarItemContext'\n\nexport type SnackbarItemActionProps = Omit<ButtonProps, 'size' | 'shape' | 'intent'> &\n SnackbarItemVariantProps & {\n ref?: Ref<HTMLButtonElement>\n }\n\nexport const SnackbarItemAction = ({\n design: designProp = 'filled',\n intent: intentProp = 'neutral',\n onClick,\n children,\n className,\n ref,\n ...rest\n}: SnackbarItemActionProps) => {\n const { toast, state } = useSnackbarItemContext()\n\n const intent = intentProp ?? toast.content.intent\n const design = designProp ?? toast.content.design\n\n return (\n <Button\n data-spark-component=\"snackbar-item-action\"\n ref={ref}\n size=\"md\"\n shape=\"rounded\"\n {...(intent === 'inverse'\n ? {\n design: 'ghost',\n intent: 'surface',\n }\n : {\n design,\n intent: intent === 'error' ? 'danger' : intent,\n })}\n onClick={e => {\n onClick?.(e)\n state.close(toast.key)\n }}\n style={{ gridArea: 'action', ...rest.style }}\n className={cx('ml-md justify-self-end', className)}\n {...rest}\n >\n {children}\n </Button>\n )\n}\n\nSnackbarItemAction.displayName = 'Snackbar.ItemAction'\n","import { Close } from '@spark-ui/icons/Close'\nimport { cx } from 'class-variance-authority'\nimport { type ComponentPropsWithRef } from 'react'\n\nimport { Icon } from '../icon'\nimport { IconButton, type IconButtonProps } from '../icon-button'\nimport type { SnackbarItemVariantProps } from './SnackbarItem.styles'\nimport { useSnackbarItemContext } from './SnackbarItemContext'\n\nexport interface SnackbarItemCloseProps\n extends Omit<ComponentPropsWithRef<'button'>, 'aria-label' | 'disabled'>,\n Pick<IconButtonProps, 'aria-label'>,\n SnackbarItemVariantProps {}\n\nexport const SnackbarItemClose = ({\n design: designProp = 'filled',\n intent: intentProp = 'neutral',\n 'aria-label': ariaLabel,\n onClick,\n className,\n ref,\n ...rest\n}: SnackbarItemCloseProps) => {\n const { toast, state } = useSnackbarItemContext()\n\n const intent = intentProp ?? toast.content.intent\n const design = designProp ?? toast.content.design\n\n return (\n <IconButton\n data-spark-component=\"snackbar-item-close\"\n ref={ref}\n size=\"md\"\n shape=\"rounded\"\n {...(intent === 'inverse'\n ? {\n design: 'ghost',\n intent: 'surface',\n }\n : {\n design,\n intent: intent === 'error' ? 'danger' : intent,\n })}\n aria-label={ariaLabel}\n onClick={e => {\n onClick?.(e)\n state.close(toast.key)\n }}\n style={{ gridArea: 'close', ...rest.style }}\n className={cx('ml-md justify-self-end', className)}\n {...rest}\n >\n <Icon size=\"sm\">\n <Close />\n </Icon>\n </IconButton>\n )\n}\n\nSnackbarItemClose.displayName = 'Snackbar.ItemClose'\n","import { cx } from 'class-variance-authority'\nimport type { ReactElement } from 'react'\n\nimport { Icon, type IconProps } from '../icon'\n\nexport type SnackbarItemIconProps = IconProps\n\nexport const SnackbarItemIcon = ({\n children,\n className,\n ...rest\n}: SnackbarItemIconProps): ReactElement => (\n <Icon\n size=\"md\"\n className={cx('mx-md', className)}\n style={{ gridArea: 'icon', ...rest.style }}\n {...rest}\n >\n {children}\n </Icon>\n)\n\nSnackbarItemIcon.displayName = 'Snackbar.ItemIcon'\n","/* eslint-disable complexity */\nimport { type RefObject, useEffect, useRef, useState } from 'react'\n\ninterface SwipeArgs<T> {\n swipeRef: RefObject<T | null>\n onSwipeStart?: ({ state, direction }: SwipeReturn) => void\n onSwipeMove?: ({ state, direction }: SwipeReturn) => void\n onSwipeCancel?: ({ state, direction }: SwipeReturn) => void\n onSwipeEnd?: ({ state, direction }: SwipeReturn) => void\n threshold?: number\n}\n\ninterface SwipeReturn {\n state?: 'start' | 'move' | 'cancel' | 'end'\n direction?: 'up' | 'down' | 'right' | 'left' | null\n}\n\nconst SWIPE_THRESHOLD = 75\n\nexport const useSwipe = <T extends HTMLElement>({\n swipeRef,\n onSwipeStart,\n onSwipeMove,\n onSwipeCancel,\n onSwipeEnd,\n threshold = 10,\n}: SwipeArgs<T>): SwipeReturn => {\n const [state, setState] = useState<SwipeReturn['state']>()\n\n const direction = useRef<SwipeReturn['direction']>(null)\n const origin = useRef<Record<'x' | 'y', number> | null>(null)\n const delta = useRef<Record<'x' | 'y', number> | null>(null)\n\n const handleSwipeStart = (evt: PointerEvent) => {\n origin.current = { x: evt.clientX, y: evt.clientY }\n\n /**\n * Prevents unwanted text selection in Safari browser (longpress)\n */\n document.addEventListener('selectstart', e => e.preventDefault())\n }\n\n const handleSwipeMove = (evt: PointerEvent) => {\n if (!origin.current) return\n\n const deltaX = Math.abs(evt.clientX - origin.current.x)\n const deltaY = Math.abs(evt.clientY - origin.current.y)\n\n let moveState: SwipeReturn['state']\n\n if (deltaX > deltaY && deltaX > threshold) {\n direction.current = evt.clientX > origin.current.x ? 'right' : 'left'\n } else if (deltaY > threshold) {\n direction.current = evt.clientY > origin.current.y ? 'down' : 'up'\n }\n\n /**\n * If no direction could be defined, then no move should be handled.\n * This is particularly true with trackpads working with MacOS/Windows.\n */\n if (!direction.current) return\n\n if (!delta.current) {\n moveState = 'start'\n delta.current = { x: deltaX, y: deltaY }\n onSwipeStart?.({ state: moveState, direction: direction.current })\n } else {\n moveState = 'move'\n delta.current = { x: deltaX, y: deltaY }\n ;(swipeRef.current as T).style.setProperty(\n '--swipe-position-x',\n `${deltaX > deltaY ? evt.clientX - origin.current.x : 0}px`\n )\n ;(swipeRef.current as T).style.setProperty(\n '--swipe-position-y',\n `${!(deltaX > deltaY) ? evt.clientY - origin.current.y : 0}px`\n )\n onSwipeMove?.({ state: moveState, direction: direction.current })\n }\n\n setState(moveState)\n }\n\n const handleSwipeEnd = () => {\n const proxyDelta = delta.current\n\n origin.current = null\n delta.current = null\n\n if (proxyDelta) {\n const { x: deltaX, y: deltaY } = proxyDelta\n\n let endState: SwipeReturn['state']\n\n if (deltaX > deltaY) {\n if (deltaX > SWIPE_THRESHOLD) {\n endState = 'end'\n onSwipeEnd?.({ state: endState, direction: direction.current })\n } else {\n endState = 'cancel'\n onSwipeCancel?.({ state: endState, direction: direction.current })\n }\n } else {\n if (deltaY > SWIPE_THRESHOLD) {\n endState = 'end'\n onSwipeEnd?.({ state: endState, direction: direction.current })\n } else {\n endState = 'cancel'\n onSwipeCancel?.({ state: endState, direction: direction.current })\n }\n }\n\n setState(endState)\n\n /**\n * Prevents unwanted text selection in Safari browser (longpress)\n */\n document.removeEventListener('selectstart', e => e.preventDefault())\n }\n }\n\n useEffect(() => {\n if (!swipeRef.current) return\n\n const swipeElement = swipeRef.current\n\n swipeElement.addEventListener('pointerdown', handleSwipeStart)\n document.addEventListener('pointermove', handleSwipeMove)\n document.addEventListener('pointerup', handleSwipeEnd)\n\n return () => {\n swipeElement.removeEventListener('pointerdown', handleSwipeStart)\n document.removeEventListener('pointermove', handleSwipeMove)\n document.removeEventListener('pointerup', handleSwipeEnd)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return {\n state,\n direction: direction.current,\n }\n}\n","/* eslint-disable max-lines-per-function */\n\nimport { useToast } from '@react-aria/toast'\nimport {\n Children,\n cloneElement,\n type ComponentPropsWithRef,\n type FC,\n isValidElement,\n type PropsWithChildren,\n type ReactElement,\n type ReactNode,\n useCallback,\n useRef,\n} from 'react'\n\nimport {\n snackbarItemVariant,\n snackbarItemVariantContent,\n type SnackbarItemVariantContentProps,\n type SnackbarItemVariantProps,\n} from './SnackbarItem.styles'\nimport { SnackbarItemAction, SnackbarItemActionProps } from './SnackbarItemAction'\nimport { SnackbarItemClose, SnackbarItemCloseProps } from './SnackbarItemClose'\nimport { useSnackbarItemContext } from './SnackbarItemContext'\nimport { SnackbarItemIcon, SnackbarItemIconProps } from './SnackbarItemIcon'\nimport { useSwipe } from './useSwipe'\n\nexport interface SnackbarItemValue extends SnackbarItemVariantProps {\n /**\n * Icon that will be prepended before snackbar message\n */\n icon?: ReactNode\n message: ReactNode\n /**\n * If `true` snackbar will display a close button\n * @default false\n */\n isClosable?: boolean\n /**\n * A label for the action button within the toast.\n */\n actionLabel?: string\n /**\n * Handler that is called when the action button is pressed.\n */\n onAction?: () => void\n /**\n * If `true` the action button will be displayed on a new line.\n * @default false\n */\n actionOnNewline?: boolean\n}\n\nexport interface SnackbarItemProps\n extends ComponentPropsWithRef<'div'>,\n SnackbarItemVariantProps,\n SnackbarItemVariantContentProps {\n /**\n * Defines a string value that labels the current element.\n */\n 'aria-label'?: string\n /**\n * Identifies the element (or elements) that labels the current element.\n */\n 'aria-labelledby'?: string\n /**\n * Identifies the element (or elements) that describes the object.\n */\n 'aria-describedby'?: string\n /**\n * Identifies the element (or elements) that provide a detailed, extended description for the object.\n */\n 'aria-details'?: string\n}\n\nexport const SnackbarItem = ({\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n design: designProp,\n intent: intentProp,\n actionOnNewline: actionOnNewlineProp,\n className,\n children,\n ref: forwardedRef,\n ...rest\n}: PropsWithChildren<SnackbarItemProps>) => {\n const innerRef = useRef(null)\n const ref = typeof forwardedRef !== 'function' ? forwardedRef || innerRef : innerRef\n\n const { toast, state } = useSnackbarItemContext()\n\n const { state: swipeState, direction: swipeDirection } = useSwipe({\n swipeRef: ref,\n onSwipeStart: state.pauseAll,\n onSwipeCancel: state.resumeAll,\n onSwipeEnd: ({ direction }) => {\n ;['left', 'right'].includes(`${direction}`) && state.close(toast.key)\n },\n })\n\n const { message, icon, isClosable, onAction, actionLabel } = toast.content\n const intent = intentProp ?? toast.content.intent\n const design = designProp ?? toast.content.design\n const actionOnNewline = actionOnNewlineProp ?? toast.content.actionOnNewline\n\n const ariaProps = {\n ariaLabel,\n ariaLabelledby,\n ariaDescribedby,\n ariaDetails,\n }\n\n const { toastProps, titleProps, closeButtonProps, contentProps } = useToast(\n { toast, ...ariaProps },\n state,\n ref\n )\n\n const findElement = useCallback(\n <P extends object>(elementDisplayName: string): ReactElement<P> | undefined => {\n const childrenArray = Children.toArray(children)\n\n const match = childrenArray\n .filter(isValidElement)\n .find(\n (child): child is ReactElement<P> =>\n !!(child.type as FC<P> & { displayName?: string }).displayName?.includes(\n elementDisplayName\n )\n )\n\n return match as ReactElement<P> | undefined\n },\n [children]\n )\n\n const iconFromChildren = findElement<SnackbarItemIconProps>('Snackbar.ItemIcon')\n const actionBtnFromChildren = findElement<SnackbarItemActionProps>('Snackbar.ItemAction')\n const closeBtnFromChildren = findElement<SnackbarItemCloseProps>('Snackbar.ItemClose')\n\n return (\n <div\n data-spark-component=\"snackbar-item\"\n className={snackbarItemVariant({ design, intent, className })}\n data-animation={toast.animation}\n {...(!(swipeState === 'cancel' && toast.animation === 'exiting') && {\n 'data-swipe': swipeState,\n 'data-swipe-direction': swipeDirection,\n })}\n {...(toast.animation === 'exiting' && {\n // Remove snackbar when the exiting animation completes\n onAnimationEnd: () => state.remove(toast.key),\n })}\n ref={ref}\n {...toastProps}\n {...rest}\n >\n <div className={snackbarItemVariantContent({ actionOnNewline })} {...contentProps}>\n {/* 1. ICON */}\n {renderSubComponent(iconFromChildren, icon ? SnackbarItemIcon : null, {\n children: icon,\n })}\n\n {/* 2. MESSAGE */}\n <p\n className=\"px-md py-lg text-body-2 row-span-3\"\n style={{ gridArea: 'message' }}\n {...titleProps}\n >\n {message}\n </p>\n\n {/* 3. ACTION BUTTON */}\n {renderSubComponent(\n actionBtnFromChildren,\n actionLabel && onAction ? SnackbarItemAction : null,\n { intent, design, onClick: onAction, children: actionLabel }\n )}\n\n {/* 4. CLOSE BUTTON */}\n {renderSubComponent(closeBtnFromChildren, isClosable ? SnackbarItemClose : null, {\n intent,\n design,\n /**\n * React Spectrum typing of aria-label is inaccurate, and aria-label value should never be undefined.\n * See https://github.com/adobe/react-spectrum/blob/main/packages/%40react-aria/i18n/src/useLocalizedStringFormatter.ts#L40\n */\n 'aria-label': closeButtonProps['aria-label'] as string,\n })}\n </div>\n </div>\n )\n}\n\nSnackbarItem.displayName = 'Snackbar.Item'\n\n/**\n * Returns compound item if found in children prop.\n * If not fallbacks to default item, conditionned by addSnackbar options.\n */\nconst renderSubComponent = <P extends object>(\n childItem?: ReactElement<P>,\n defaultItem?: FC<P> | null,\n props?: P\n) => {\n if (childItem) {\n return cloneElement(childItem, { ...props, ...childItem.props })\n } else if (defaultItem) {\n const Item = defaultItem\n\n return <Item {...(props as P)} />\n } else {\n return null\n }\n}\n","import { cva, VariantProps } from 'class-variance-authority'\n\nexport const snackbarRegionVariant = cva(\n [\n 'fixed inset-x-lg z-toast group',\n 'outline-hidden pointer-events-none',\n 'grid grid-rows-1 grid-cols-1 gap-lg',\n ],\n {\n variants: {\n /**\n * Set snackbar item position\n * @default 'bottom'\n */\n position: {\n top: 'top-lg justify-items-center',\n 'top-right': 'top-lg justify-items-end',\n 'top-left': 'top-lg justify-items-start',\n bottom: 'bottom-lg justify-items-center',\n 'bottom-right': 'bottom-lg justify-items-end',\n 'bottom-left': 'bottom-lg justify-items-start',\n },\n },\n defaultVariants: {\n position: 'bottom',\n },\n }\n)\n\nexport type SnackbarRegionVariantProps = VariantProps<typeof snackbarRegionVariant>\n","import { type AriaToastRegionProps, useToastRegion } from '@react-aria/toast'\nimport { cloneElement, type ComponentPropsWithRef, type ReactElement, useRef } from 'react'\n\nimport { SnackbarItem, type SnackbarItemProps } from './SnackbarItem'\nimport { SnackbarItemContext, type SnackbarItemState } from './SnackbarItemContext'\nimport { snackbarRegionVariant, type SnackbarRegionVariantProps } from './SnackbarRegion.styles'\n\nexport interface SnackbarRegionProps\n extends ComponentPropsWithRef<'div'>,\n AriaToastRegionProps,\n SnackbarRegionVariantProps,\n Pick<SnackbarItemState, 'state'> {\n /**\n * An accessibility label for the snackbar region.\n * @default 'Notifications'\n */\n 'aria-label'?: string\n /**\n * Identifies the element (or elements) that labels the current element.\n */\n 'aria-labelledby'?: string\n /**\n * Identifies the element (or elements) that describes the object.\n */\n 'aria-describedby'?: string\n /**\n * Identifies the element (or elements) that provide a detailed, extended description for the object.\n */\n 'aria-details'?: string\n /**\n * The component/template used to display each snackbar from the queue\n * @default 'Snackbar.Item'\n */\n children?: ReactElement<SnackbarItemProps, typeof SnackbarItem>\n}\n\nexport const SnackbarRegion = ({\n children = <SnackbarItem />,\n state,\n position = 'bottom',\n className,\n ref: forwardedRef,\n ...rest\n}: SnackbarRegionProps): ReactElement => {\n const innerRef = useRef<HTMLDivElement>(null)\n const ref = forwardedRef && typeof forwardedRef !== 'function' ? forwardedRef : innerRef\n\n const { regionProps } = useToastRegion(rest, state, ref)\n\n return (\n <div\n {...regionProps}\n ref={ref}\n data-position={position}\n className={snackbarRegionVariant({ position, className })}\n >\n {state.visibleToasts.map(toast => (\n <SnackbarItemContext.Provider key={toast.key} value={{ toast, state }}>\n {cloneElement(children, { key: toast.key })}\n </SnackbarItemContext.Provider>\n ))}\n </div>\n )\n}\n","import { type RefObject, useCallback, useSyncExternalStore } from 'react'\n\ninterface UseSnackbarGlobalStoreArgs<T> {\n providers: Set<T>\n subscriptions: Set<() => void>\n}\n\ninterface UseSnackbarGlobalStoreReturn<T> {\n provider: T\n addProvider: (ref: T) => void\n deleteProvider: (ref: T) => void\n}\n\n/**\n * This hook is a basic abstraction of useSyncExternalStore hook which allows us\n * to consume data from an external data store.\n *\n * Cf. https://react.dev/reference/react/useSyncExternalStore#subscribing-to-an-external-store\n */\n\nexport const useSnackbarGlobalStore = <T = RefObject<HTMLDivElement | null>>({\n providers,\n subscriptions,\n}: UseSnackbarGlobalStoreArgs<T>): UseSnackbarGlobalStoreReturn<T> => {\n const subscribe = useCallback(\n (listener: () => void) => {\n subscriptions.add(listener)\n\n return () => subscriptions.delete(listener)\n },\n [subscriptions]\n )\n\n const getLastSnackbarProvider = useCallback(() => [...providers].reverse()[0] as T, [providers])\n\n const addProvider = useCallback(\n (provider: T) => {\n providers.add(provider)\n\n for (const subscribeFn of subscriptions) {\n subscribeFn()\n }\n },\n [providers, subscriptions]\n )\n\n const deleteProvider = useCallback(\n (provider: T) => {\n providers.delete(provider)\n\n for (const subscribeFn of subscriptions) {\n subscribeFn()\n }\n },\n [providers, subscriptions]\n )\n\n const provider = useSyncExternalStore(subscribe, getLastSnackbarProvider, getLastSnackbarProvider)\n\n return {\n provider,\n addProvider,\n deleteProvider,\n }\n}\n","import {\n type ToastOptions as SnackBarItemOptions,\n ToastQueue,\n useToastQueue,\n} from '@react-stately/toast'\nimport { type ReactElement, Ref, type RefObject, useEffect, useRef } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { type SnackbarItemValue } from './SnackbarItem'\nimport { SnackbarRegion, type SnackbarRegionProps } from './SnackbarRegion'\nimport { useSnackbarGlobalStore } from './useSnackbarGlobalStore'\n\n/**\n * We define here a global queue thanks to dedicated util from React Spectrum.\n * It is based on React `useSyncExternalStore` and allows us to consume data from\n * an external data store, and thus preventing use of React context that could\n * lead to unwanted rerenderings. It also simplifies initial implementation.\n */\nlet GLOBAL_SNACKBAR_QUEUE: ToastQueue<SnackbarItemValue> | null = null\n\nconst getGlobalSnackBarQueue = () => {\n if (!GLOBAL_SNACKBAR_QUEUE) {\n GLOBAL_SNACKBAR_QUEUE = new ToastQueue({\n maxVisibleToasts: 1,\n hasExitAnimation: true,\n })\n }\n\n return GLOBAL_SNACKBAR_QUEUE\n}\n\nexport const clearSnackbarQueue = () => {\n GLOBAL_SNACKBAR_QUEUE = null\n}\n\n/**\n * We define a global store to keep track of all providers instances, to ensure\n * we always have a single Snackbar container.\n */\nconst GLOBAL_SNACKBAR_STORE = {\n providers: new Set<RefObject<HTMLDivElement | null>>(),\n subscriptions: new Set<() => void>(),\n}\n\nexport type SnackbarProps = Omit<SnackbarRegionProps, 'state'> & {\n ref?: Ref<HTMLDivElement>\n}\n\nexport const Snackbar = ({ ref: forwardedRef, ...props }: SnackbarProps): ReactElement | null => {\n const ref = useRef<HTMLDivElement>(null)\n\n const state = useToastQueue(getGlobalSnackBarQueue())\n\n const { provider, addProvider, deleteProvider } = useSnackbarGlobalStore(GLOBAL_SNACKBAR_STORE)\n\n useEffect(() => {\n addProvider(ref)\n\n return () => {\n for (const toast of getGlobalSnackBarQueue().visibleToasts) {\n toast.animation = undefined\n }\n\n deleteProvider(ref)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return ref === provider && state.visibleToasts.length > 0\n ? createPortal(<SnackbarRegion ref={forwardedRef} state={state} {...props} />, document.body)\n : null\n}\n\nSnackbar.displayName = 'Snackbar'\n\nexport interface AddSnackbarArgs extends SnackbarItemValue, Omit<SnackBarItemOptions, 'timeout'> {\n /**\n * Handler that is called when the snackbar is closed, either by the user\n * or after a timeout.\n */\n onClose?: () => void\n /**\n * A timeout to automatically close the snackbar after, in milliseconds.\n * @default 5000\n */\n timeout?: number | null\n /**\n * The priority of the snackbar relative to other snackbars. Larger numbers indicate higher priority.\n */\n priority?: number\n}\n\nexport const addSnackbar = ({ onClose, timeout = 5000, priority, ...content }: AddSnackbarArgs) => {\n const queue = getGlobalSnackBarQueue()\n\n queue.add(content, {\n onClose,\n timeout: timeout && !content.onAction ? Math.max(timeout, 5000) : undefined,\n priority,\n })\n}\n","import {\n addSnackbar,\n type AddSnackbarArgs,\n clearSnackbarQueue,\n Snackbar as Root,\n type SnackbarProps,\n} from './Snackbar'\nimport { SnackbarItem as Item, type SnackbarItemProps } from './SnackbarItem'\nimport {\n SnackbarItemAction as ItemAction,\n type SnackbarItemActionProps,\n} from './SnackbarItemAction'\nimport { SnackbarItemClose as ItemClose, type SnackbarItemCloseProps } from './SnackbarItemClose'\nimport { SnackbarItemIcon as ItemIcon, type SnackbarItemIconProps } from './SnackbarItemIcon'\n\nexport const Snackbar: typeof Root & {\n Item: typeof Item\n ItemAction: typeof ItemAction\n ItemClose: typeof ItemClose\n ItemIcon: typeof ItemIcon\n} = Object.assign(Root, {\n Item,\n ItemAction,\n ItemClose,\n ItemIcon,\n})\n\nSnackbar.displayName = 'Snackbar'\nItem.displayName = 'Snackbar.Item'\nItemAction.displayName = 'Snackbar.ItemAction'\nItemClose.displayName = 'Snackbar.ItemClose'\nItemIcon.displayName = 'Snackbar.ItemIcon'\n\nexport type {\n SnackbarProps,\n SnackbarItemProps,\n SnackbarItemActionProps,\n SnackbarItemCloseProps,\n SnackbarItemIconProps,\n AddSnackbarArgs,\n}\nexport { addSnackbar, clearSnackbarQueue }\n"],"names":["filledVariants","tintedVariants","snackbarItemVariant","cva","snackbarItemVariantContent","SnackbarItemContext","createContext","useSnackbarItemContext","useContext","SnackbarItemAction","designProp","intentProp","onClick","children","className","ref","rest","toast","state","intent","design","jsx","Button","e","cx","SnackbarItemClose","ariaLabel","IconButton","Icon","Close","SnackbarItemIcon","SWIPE_THRESHOLD","useSwipe","swipeRef","onSwipeStart","onSwipeMove","onSwipeCancel","onSwipeEnd","threshold","setState","useState","direction","useRef","origin","delta","handleSwipeStart","evt","handleSwipeMove","deltaX","deltaY","moveState","handleSwipeEnd","proxyDelta","endState","useEffect","swipeElement","SnackbarItem","ariaLabelledby","ariaDescribedby","ariaDetails","actionOnNewlineProp","forwardedRef","innerRef","swipeState","swipeDirection","message","icon","isClosable","onAction","actionLabel","actionOnNewline","ariaProps","toastProps","titleProps","closeButtonProps","contentProps","useToast","findElement","useCallback","elementDisplayName","Children","isValidElement","child","iconFromChildren","actionBtnFromChildren","closeBtnFromChildren","jsxs","renderSubComponent","childItem","defaultItem","props","cloneElement","Item","snackbarRegionVariant","SnackbarRegion","position","regionProps","useToastRegion","useSnackbarGlobalStore","providers","subscriptions","subscribe","listener","getLastSnackbarProvider","addProvider","provider","subscribeFn","deleteProvider","useSyncExternalStore","GLOBAL_SNACKBAR_QUEUE","getGlobalSnackBarQueue","ToastQueue","clearSnackbarQueue","GLOBAL_SNACKBAR_STORE","Snackbar","useToastQueue","createPortal","addSnackbar","onClose","timeout","priority","content","Root","ItemAction","ItemClose","ItemIcon"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/snackbar/snackbarVariants.ts","../../src/snackbar/SnackbarItem.styles.ts","../../src/snackbar/SnackbarItemContext.tsx","../../src/snackbar/SnackbarItemAction.tsx","../../src/snackbar/SnackbarItemClose.tsx","../../src/snackbar/SnackbarItemIcon.tsx","../../src/snackbar/useSwipe.ts","../../src/snackbar/SnackbarItem.tsx","../../src/snackbar/SnackbarRegion.styles.ts","../../src/snackbar/SnackbarRegion.tsx","../../src/snackbar/useSnackbarGlobalStore.ts","../../src/snackbar/Snackbar.tsx","../../src/snackbar/index.ts"],"sourcesContent":["export const filledVariants = [\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: '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: 'inverse',\n class: ['bg-surface-inverse text-on-surface-inverse'],\n },\n] as const\n\nexport const tintedVariants = [\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: '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: 'inverse',\n class: ['bg-surface-inverse text-on-surface-inverse'],\n },\n] as const\n","import { cva, VariantProps } from 'class-variance-authority'\n\nimport { filledVariants, tintedVariants } from './snackbarVariants'\n\nexport const snackbarItemVariant = cva(\n [\n 'rounded-md shadow-sm',\n 'max-w-[600px]',\n 'cursor-default pointer-events-auto touch-none select-none',\n 'absolute',\n /**\n * Focus\n */\n 'group-focus-visible:outline-hidden group-focus-visible:u-outline group-not-focus-visible:ring-inset',\n /**\n * Positionning\n */\n 'group-data-[position=bottom]:bottom-0 group-data-[position=bottom-left]:bottom-0 group-data-[position=bottom-right]:bottom-0',\n 'group-data-[position=top]:top-0 group-data-[position=top-left]:top-0 group-data-[position=top-right]:top-0',\n /**\n * Animation and opacity\n */\n 'animation-duration-400',\n '[animation-fill-mode: forwards]!',\n 'data-[animation=queued]:animate-fade-in',\n 'data-[animation=entering]:animation-ease-decelerate-back',\n 'data-[animation=exiting]:animation-ease-accelerate',\n // Parent position bottom|bottom-left|bottom-right\n 'data-[animation=entering]:group-data-[position=bottom]:[&:not([data-swipe])]:animate-slide-in-bottom',\n 'data-[animation=exiting]:opacity-0 data-[animation=exiting]:transition-opacity',\n 'data-[animation=exiting]:group-data-[position=bottom]:[&:not([data-swipe])]:animate-slide-out-bottom',\n 'data-[animation=entering]:group-data-[position=bottom-left]:[&:not([data-swipe])]:animate-slide-in-bottom',\n 'data-[animation=exiting]:group-data-[position=bottom-left]:[&:not([data-swipe])]:animate-slide-out-bottom',\n 'data-[animation=entering]:group-data-[position=bottom-right]:[&:not([data-swipe])]:animate-slide-in-bottom',\n 'data-[animation=exiting]:group-data-[position=bottom-right]:[&:not([data-swipe])]:animate-slide-out-bottom',\n // Parent position top|top-left|top-right\n 'data-[animation=entering]:group-data-[position=top]:[&:not([data-swipe])]:animate-slide-in-top',\n 'data-[animation=exiting]:group-data-[position=top]:[&:not([data-swipe])]:animate-slide-out-top',\n 'data-[animation=entering]:group-data-[position=top-left]:[&:not([data-swipe])]:animate-slide-in-top',\n 'data-[animation=exiting]:group-data-[position=top-left]:[&:not([data-swipe])]:animate-slide-out-top',\n 'data-[animation=entering]:group-data-[position=top-right]:[&:not([data-swipe])]:animate-slide-in-top',\n 'data-[animation=exiting]:group-data-[position=top-right]:[&:not([data-swipe])]:animate-slide-out-top',\n /**\n * Swipe\n */\n 'data-[swipe=move]:data-[swipe-direction=right]:translate-x-(--swipe-position-x)',\n 'data-[swipe=move]:data-[swipe-direction=left]:translate-x-(--swipe-position-x)',\n 'data-[swipe=cancel]:translate-x-0',\n 'data-[swipe=end]:data-[swipe-direction=right]:animate-standalone-swipe-out-right',\n 'data-[swipe=end]:data-[swipe-direction=left]:animate-standalone-swipe-out-left',\n ],\n {\n variants: {\n /**\n * Set different look and feel\n * @default 'filled'\n */\n design: {\n filled: '',\n tinted: '',\n },\n /**\n * Set color intent\n * @default 'neutral'\n */\n intent: {\n success: '',\n alert: '',\n error: '',\n info: '',\n neutral: '',\n main: '',\n support: '',\n accent: '',\n inverse: '',\n },\n },\n compoundVariants: [...filledVariants, ...tintedVariants],\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 SnackbarItemVariantProps = VariantProps<typeof snackbarItemVariant>\nexport type SnackbarItemVariantContentProps = VariantProps<typeof snackbarItemVariantContent>\n","import { QueuedToast, ToastState } from '@react-stately/toast'\nimport { createContext, useContext } from 'react'\n\nimport type { SnackbarItemValue } from './SnackbarItem'\n\nexport interface SnackbarItemState<T = SnackbarItemValue> {\n toast: QueuedToast<T>\n state: ToastState<T>\n}\n\nexport const SnackbarItemContext = createContext<SnackbarItemState>({} as SnackbarItemState)\n\nexport const useSnackbarItemContext = () => useContext(SnackbarItemContext)\n","import { cx } from 'class-variance-authority'\nimport { Ref } from 'react'\n\nimport { Button, type ButtonProps } from '../button'\nimport type { SnackbarItemVariantProps } from './SnackbarItem.styles'\nimport { useSnackbarItemContext } from './SnackbarItemContext'\n\nexport type SnackbarItemActionProps = Omit<ButtonProps, 'size' | 'shape' | 'intent'> &\n SnackbarItemVariantProps & {\n ref?: Ref<HTMLButtonElement>\n }\n\nexport const SnackbarItemAction = ({\n design: designProp = 'filled',\n intent: intentProp = 'neutral',\n onClick,\n children,\n className,\n ref,\n ...rest\n}: SnackbarItemActionProps) => {\n const { toast, state } = useSnackbarItemContext()\n\n const intent = intentProp ?? toast.content.intent\n const design = designProp ?? toast.content.design\n\n return (\n <Button\n data-spark-component=\"snackbar-item-action\"\n ref={ref}\n size=\"md\"\n shape=\"rounded\"\n {...(intent === 'inverse'\n ? {\n design: 'ghost',\n intent: 'surface',\n }\n : {\n design,\n intent: intent === 'error' ? 'danger' : intent,\n })}\n onClick={e => {\n onClick?.(e)\n state.close(toast.key)\n }}\n style={{ gridArea: 'action', ...rest.style }}\n className={cx('ml-md justify-self-end', className)}\n {...rest}\n >\n {children}\n </Button>\n )\n}\n\nSnackbarItemAction.displayName = 'Snackbar.ItemAction'\n","import { Close } from '@spark-ui/icons/Close'\nimport { cx } from 'class-variance-authority'\nimport { type ComponentPropsWithRef } from 'react'\n\nimport { Icon } from '../icon'\nimport { IconButton, type IconButtonProps } from '../icon-button'\nimport type { SnackbarItemVariantProps } from './SnackbarItem.styles'\nimport { useSnackbarItemContext } from './SnackbarItemContext'\n\nexport interface SnackbarItemCloseProps\n extends Omit<ComponentPropsWithRef<'button'>, 'aria-label' | 'disabled'>,\n Pick<IconButtonProps, 'aria-label'>,\n SnackbarItemVariantProps {}\n\nexport const SnackbarItemClose = ({\n design: designProp = 'filled',\n intent: intentProp = 'neutral',\n 'aria-label': ariaLabel,\n onClick,\n className,\n ref,\n ...rest\n}: SnackbarItemCloseProps) => {\n const { toast, state } = useSnackbarItemContext()\n\n const intent = intentProp ?? toast.content.intent\n const design = designProp ?? toast.content.design\n\n return (\n <IconButton\n data-spark-component=\"snackbar-item-close\"\n ref={ref}\n size=\"md\"\n shape=\"rounded\"\n {...(intent === 'inverse'\n ? {\n design: 'ghost',\n intent: 'surface',\n }\n : {\n design,\n intent: intent === 'error' ? 'danger' : intent,\n })}\n aria-label={ariaLabel}\n onClick={e => {\n onClick?.(e)\n state.close(toast.key)\n }}\n style={{ gridArea: 'close', ...rest.style }}\n className={cx('ml-md justify-self-end', className)}\n {...rest}\n >\n <Icon size=\"sm\">\n <Close />\n </Icon>\n </IconButton>\n )\n}\n\nSnackbarItemClose.displayName = 'Snackbar.ItemClose'\n","import { cx } from 'class-variance-authority'\nimport type { ReactElement } from 'react'\n\nimport { Icon, type IconProps } from '../icon'\n\nexport type SnackbarItemIconProps = IconProps\n\nexport const SnackbarItemIcon = ({\n children,\n className,\n ...rest\n}: SnackbarItemIconProps): ReactElement => (\n <Icon\n size=\"md\"\n className={cx('mx-md', className)}\n style={{ gridArea: 'icon', ...rest.style }}\n {...rest}\n >\n {children}\n </Icon>\n)\n\nSnackbarItemIcon.displayName = 'Snackbar.ItemIcon'\n","/* eslint-disable complexity */\nimport { type RefObject, useEffect, useRef, useState } from 'react'\n\ninterface SwipeArgs<T> {\n swipeRef: RefObject<T | null>\n onSwipeStart?: ({ state, direction }: SwipeReturn) => void\n onSwipeMove?: ({ state, direction }: SwipeReturn) => void\n onSwipeCancel?: ({ state, direction }: SwipeReturn) => void\n onSwipeEnd?: ({ state, direction }: SwipeReturn) => void\n threshold?: number\n}\n\ninterface SwipeReturn {\n state?: 'start' | 'move' | 'cancel' | 'end'\n direction?: 'up' | 'down' | 'right' | 'left' | null\n}\n\nconst SWIPE_THRESHOLD = 75\n\nexport const useSwipe = <T extends HTMLElement>({\n swipeRef,\n onSwipeStart,\n onSwipeMove,\n onSwipeCancel,\n onSwipeEnd,\n threshold = 10,\n}: SwipeArgs<T>): SwipeReturn => {\n const [state, setState] = useState<SwipeReturn['state']>()\n\n const direction = useRef<SwipeReturn['direction']>(null)\n const origin = useRef<Record<'x' | 'y', number> | null>(null)\n const delta = useRef<Record<'x' | 'y', number> | null>(null)\n\n const handleSwipeStart = (evt: PointerEvent) => {\n origin.current = { x: evt.clientX, y: evt.clientY }\n\n /**\n * Prevents unwanted text selection in Safari browser (longpress)\n */\n document.addEventListener('selectstart', e => e.preventDefault())\n }\n\n const handleSwipeMove = (evt: PointerEvent) => {\n if (!origin.current) return\n\n const deltaX = Math.abs(evt.clientX - origin.current.x)\n const deltaY = Math.abs(evt.clientY - origin.current.y)\n\n let moveState: SwipeReturn['state']\n\n if (deltaX > deltaY && deltaX > threshold) {\n direction.current = evt.clientX > origin.current.x ? 'right' : 'left'\n } else if (deltaY > threshold) {\n direction.current = evt.clientY > origin.current.y ? 'down' : 'up'\n }\n\n /**\n * If no direction could be defined, then no move should be handled.\n * This is particularly true with trackpads working with MacOS/Windows.\n */\n if (!direction.current) return\n\n if (!delta.current) {\n moveState = 'start'\n delta.current = { x: deltaX, y: deltaY }\n onSwipeStart?.({ state: moveState, direction: direction.current })\n } else {\n moveState = 'move'\n delta.current = { x: deltaX, y: deltaY }\n ;(swipeRef.current as T).style.setProperty(\n '--swipe-position-x',\n `${deltaX > deltaY ? evt.clientX - origin.current.x : 0}px`\n )\n ;(swipeRef.current as T).style.setProperty(\n '--swipe-position-y',\n `${!(deltaX > deltaY) ? evt.clientY - origin.current.y : 0}px`\n )\n onSwipeMove?.({ state: moveState, direction: direction.current })\n }\n\n setState(moveState)\n }\n\n const handleSwipeEnd = () => {\n const proxyDelta = delta.current\n\n origin.current = null\n delta.current = null\n\n if (proxyDelta) {\n const { x: deltaX, y: deltaY } = proxyDelta\n\n let endState: SwipeReturn['state']\n\n if (deltaX > deltaY) {\n if (deltaX > SWIPE_THRESHOLD) {\n endState = 'end'\n onSwipeEnd?.({ state: endState, direction: direction.current })\n } else {\n endState = 'cancel'\n onSwipeCancel?.({ state: endState, direction: direction.current })\n }\n } else {\n if (deltaY > SWIPE_THRESHOLD) {\n endState = 'end'\n onSwipeEnd?.({ state: endState, direction: direction.current })\n } else {\n endState = 'cancel'\n onSwipeCancel?.({ state: endState, direction: direction.current })\n }\n }\n\n setState(endState)\n\n /**\n * Prevents unwanted text selection in Safari browser (longpress)\n */\n document.removeEventListener('selectstart', e => e.preventDefault())\n }\n }\n\n useEffect(() => {\n if (!swipeRef.current) return\n\n const swipeElement = swipeRef.current\n\n swipeElement.addEventListener('pointerdown', handleSwipeStart)\n document.addEventListener('pointermove', handleSwipeMove)\n document.addEventListener('pointerup', handleSwipeEnd)\n\n return () => {\n swipeElement.removeEventListener('pointerdown', handleSwipeStart)\n document.removeEventListener('pointermove', handleSwipeMove)\n document.removeEventListener('pointerup', handleSwipeEnd)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return {\n state,\n direction: direction.current,\n }\n}\n","/* eslint-disable max-lines-per-function */\n\nimport { useToast } from '@react-aria/toast'\nimport {\n Children,\n cloneElement,\n type ComponentPropsWithRef,\n type FC,\n isValidElement,\n type PropsWithChildren,\n type ReactElement,\n type ReactNode,\n useCallback,\n useRef,\n} from 'react'\n\nimport {\n snackbarItemVariant,\n snackbarItemVariantContent,\n type SnackbarItemVariantContentProps,\n type SnackbarItemVariantProps,\n} from './SnackbarItem.styles'\nimport { SnackbarItemAction, SnackbarItemActionProps } from './SnackbarItemAction'\nimport { SnackbarItemClose, SnackbarItemCloseProps } from './SnackbarItemClose'\nimport { useSnackbarItemContext } from './SnackbarItemContext'\nimport { SnackbarItemIcon, SnackbarItemIconProps } from './SnackbarItemIcon'\nimport { useSwipe } from './useSwipe'\n\nexport interface SnackbarItemValue extends SnackbarItemVariantProps {\n /**\n * Icon that will be prepended before snackbar message\n */\n icon?: ReactNode\n message: ReactNode\n /**\n * If `true` snackbar will display a close button\n * @default false\n */\n isClosable?: boolean\n /**\n * A label for the action button within the toast.\n */\n actionLabel?: string\n /**\n * Handler that is called when the action button is pressed.\n */\n onAction?: () => void\n /**\n * If `true` the action button will be displayed on a new line.\n * @default false\n */\n actionOnNewline?: boolean\n}\n\nexport interface SnackbarItemProps\n extends ComponentPropsWithRef<'div'>,\n SnackbarItemVariantProps,\n SnackbarItemVariantContentProps {\n /**\n * Defines a string value that labels the current element.\n */\n 'aria-label'?: string\n /**\n * Identifies the element (or elements) that labels the current element.\n */\n 'aria-labelledby'?: string\n /**\n * Identifies the element (or elements) that describes the object.\n */\n 'aria-describedby'?: string\n /**\n * Identifies the element (or elements) that provide a detailed, extended description for the object.\n */\n 'aria-details'?: string\n}\n\nexport const SnackbarItem = ({\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n design: designProp,\n intent: intentProp,\n actionOnNewline: actionOnNewlineProp,\n className,\n children,\n ref: forwardedRef,\n ...rest\n}: PropsWithChildren<SnackbarItemProps>) => {\n const innerRef = useRef(null)\n const ref = typeof forwardedRef !== 'function' ? forwardedRef || innerRef : innerRef\n\n const { toast, state } = useSnackbarItemContext()\n\n const { state: swipeState, direction: swipeDirection } = useSwipe({\n swipeRef: ref,\n onSwipeStart: state.pauseAll,\n onSwipeCancel: state.resumeAll,\n onSwipeEnd: ({ direction }) => {\n ;['left', 'right'].includes(`${direction}`) && state.close(toast.key)\n },\n })\n\n const { message, icon, isClosable, onAction, actionLabel } = toast.content\n const intent = intentProp ?? toast.content.intent\n const design = designProp ?? toast.content.design\n const actionOnNewline = actionOnNewlineProp ?? toast.content.actionOnNewline\n\n const ariaProps = {\n ariaLabel,\n ariaLabelledby,\n ariaDescribedby,\n ariaDetails,\n }\n\n const { toastProps, titleProps, closeButtonProps, contentProps } = useToast(\n { toast, ...ariaProps },\n state,\n ref\n )\n\n const findElement = useCallback(\n <P extends object>(elementDisplayName: string): ReactElement<P> | undefined => {\n const childrenArray = Children.toArray(children)\n\n const match = childrenArray\n .filter(isValidElement)\n .find(\n (child): child is ReactElement<P> =>\n !!(child.type as FC<P> & { displayName?: string }).displayName?.includes(\n elementDisplayName\n )\n )\n\n return match as ReactElement<P> | undefined\n },\n [children]\n )\n\n const iconFromChildren = findElement<SnackbarItemIconProps>('Snackbar.ItemIcon')\n const actionBtnFromChildren = findElement<SnackbarItemActionProps>('Snackbar.ItemAction')\n const closeBtnFromChildren = findElement<SnackbarItemCloseProps>('Snackbar.ItemClose')\n\n return (\n <div\n data-spark-component=\"snackbar-item\"\n className={snackbarItemVariant({ design, intent, className })}\n data-animation={toast.animation}\n {...(!(swipeState === 'cancel' && toast.animation === 'exiting') && {\n 'data-swipe': swipeState,\n 'data-swipe-direction': swipeDirection,\n })}\n {...(toast.animation === 'exiting' && {\n // Remove snackbar when the exiting animation completes\n onAnimationEnd: () => state.remove(toast.key),\n })}\n ref={ref}\n {...toastProps}\n {...rest}\n >\n <div className={snackbarItemVariantContent({ actionOnNewline })} {...contentProps}>\n {/* 1. ICON */}\n {renderSubComponent(iconFromChildren, icon ? SnackbarItemIcon : null, {\n children: icon,\n })}\n\n {/* 2. MESSAGE */}\n <p\n className=\"px-md py-lg text-body-2 row-span-3\"\n style={{ gridArea: 'message' }}\n {...titleProps}\n >\n {message}\n </p>\n\n {/* 3. ACTION BUTTON */}\n {renderSubComponent(\n actionBtnFromChildren,\n actionLabel && onAction ? SnackbarItemAction : null,\n { intent, design, onClick: onAction, children: actionLabel }\n )}\n\n {/* 4. CLOSE BUTTON */}\n {renderSubComponent(closeBtnFromChildren, isClosable ? SnackbarItemClose : null, {\n intent,\n design,\n /**\n * React Spectrum typing of aria-label is inaccurate, and aria-label value should never be undefined.\n * See https://github.com/adobe/react-spectrum/blob/main/packages/%40react-aria/i18n/src/useLocalizedStringFormatter.ts#L40\n */\n 'aria-label': closeButtonProps['aria-label'] as string,\n })}\n </div>\n </div>\n )\n}\n\nSnackbarItem.displayName = 'Snackbar.Item'\n\n/**\n * Returns compound item if found in children prop.\n * If not fallbacks to default item, conditionned by addSnackbar options.\n */\nconst renderSubComponent = <P extends object>(\n childItem?: ReactElement<P>,\n defaultItem?: FC<P> | null,\n props?: P\n) => {\n if (childItem) {\n return cloneElement(childItem, { ...props, ...childItem.props })\n } else if (defaultItem) {\n const Item = defaultItem\n\n return <Item {...(props as P)} />\n } else {\n return null\n }\n}\n","import { cva, VariantProps } from 'class-variance-authority'\n\nexport const snackbarRegionVariant = cva(\n [\n 'fixed inset-x-lg z-toast group',\n 'outline-hidden pointer-events-none',\n 'grid grid-rows-1 grid-cols-1 gap-lg',\n ],\n {\n variants: {\n /**\n * Set snackbar item position\n * @default 'bottom'\n */\n position: {\n top: 'top-lg justify-items-center',\n 'top-right': 'top-lg justify-items-end',\n 'top-left': 'top-lg justify-items-start',\n bottom: 'bottom-lg justify-items-center',\n 'bottom-right': 'bottom-lg justify-items-end',\n 'bottom-left': 'bottom-lg justify-items-start',\n },\n },\n defaultVariants: {\n position: 'bottom',\n },\n }\n)\n\nexport type SnackbarRegionVariantProps = VariantProps<typeof snackbarRegionVariant>\n","import { type AriaToastRegionProps, useToastRegion } from '@react-aria/toast'\nimport { cloneElement, type ComponentPropsWithRef, type ReactElement, useRef } from 'react'\n\nimport { SnackbarItem, type SnackbarItemProps } from './SnackbarItem'\nimport { SnackbarItemContext, type SnackbarItemState } from './SnackbarItemContext'\nimport { snackbarRegionVariant, type SnackbarRegionVariantProps } from './SnackbarRegion.styles'\n\nexport interface SnackbarRegionProps\n extends ComponentPropsWithRef<'div'>,\n AriaToastRegionProps,\n SnackbarRegionVariantProps,\n Pick<SnackbarItemState, 'state'> {\n /**\n * An accessibility label for the snackbar region.\n * @default 'Notifications'\n */\n 'aria-label'?: string\n /**\n * Identifies the element (or elements) that labels the current element.\n */\n 'aria-labelledby'?: string\n /**\n * Identifies the element (or elements) that describes the object.\n */\n 'aria-describedby'?: string\n /**\n * Identifies the element (or elements) that provide a detailed, extended description for the object.\n */\n 'aria-details'?: string\n /**\n * The component/template used to display each snackbar from the queue\n * @default 'Snackbar.Item'\n */\n children?: ReactElement<SnackbarItemProps, typeof SnackbarItem>\n}\n\nexport const SnackbarRegion = ({\n children = <SnackbarItem />,\n state,\n position = 'bottom',\n className,\n ref: forwardedRef,\n ...rest\n}: SnackbarRegionProps): ReactElement => {\n const innerRef = useRef<HTMLDivElement>(null)\n const ref = forwardedRef && typeof forwardedRef !== 'function' ? forwardedRef : innerRef\n\n const { regionProps } = useToastRegion(rest, state, ref)\n\n return (\n <div\n {...regionProps}\n ref={ref}\n data-position={position}\n className={snackbarRegionVariant({ position, className })}\n >\n {state.visibleToasts.map(toast => (\n <SnackbarItemContext.Provider key={toast.key} value={{ toast, state }}>\n {cloneElement(children, { key: toast.key })}\n </SnackbarItemContext.Provider>\n ))}\n </div>\n )\n}\n","import { type RefObject, useCallback, useSyncExternalStore } from 'react'\n\ninterface UseSnackbarGlobalStoreArgs<T> {\n providers: Set<T>\n subscriptions: Set<() => void>\n}\n\ninterface UseSnackbarGlobalStoreReturn<T> {\n provider: T\n addProvider: (ref: T) => void\n deleteProvider: (ref: T) => void\n}\n\n/**\n * This hook is a basic abstraction of useSyncExternalStore hook which allows us\n * to consume data from an external data store.\n *\n * Cf. https://react.dev/reference/react/useSyncExternalStore#subscribing-to-an-external-store\n */\n\nexport const useSnackbarGlobalStore = <T = RefObject<HTMLDivElement | null>>({\n providers,\n subscriptions,\n}: UseSnackbarGlobalStoreArgs<T>): UseSnackbarGlobalStoreReturn<T> => {\n const subscribe = useCallback(\n (listener: () => void) => {\n subscriptions.add(listener)\n\n return () => subscriptions.delete(listener)\n },\n [subscriptions]\n )\n\n const getLastSnackbarProvider = useCallback(() => [...providers].reverse()[0] as T, [providers])\n\n const addProvider = useCallback(\n (provider: T) => {\n providers.add(provider)\n\n for (const subscribeFn of subscriptions) {\n subscribeFn()\n }\n },\n [providers, subscriptions]\n )\n\n const deleteProvider = useCallback(\n (provider: T) => {\n providers.delete(provider)\n\n for (const subscribeFn of subscriptions) {\n subscribeFn()\n }\n },\n [providers, subscriptions]\n )\n\n const provider = useSyncExternalStore(subscribe, getLastSnackbarProvider, getLastSnackbarProvider)\n\n return {\n provider,\n addProvider,\n deleteProvider,\n }\n}\n","import {\n type ToastOptions as SnackBarItemOptions,\n ToastQueue,\n useToastQueue,\n} from '@react-stately/toast'\nimport { type ReactElement, Ref, type RefObject, useEffect, useRef } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { type SnackbarItemValue } from './SnackbarItem'\nimport { SnackbarRegion, type SnackbarRegionProps } from './SnackbarRegion'\nimport { useSnackbarGlobalStore } from './useSnackbarGlobalStore'\n\n/**\n * We define here a global queue thanks to dedicated util from React Spectrum.\n * It is based on React `useSyncExternalStore` and allows us to consume data from\n * an external data store, and thus preventing use of React context that could\n * lead to unwanted rerenderings. It also simplifies initial implementation.\n */\nlet GLOBAL_SNACKBAR_QUEUE: ToastQueue<SnackbarItemValue> | null = null\n\nconst getGlobalSnackBarQueue = () => {\n if (!GLOBAL_SNACKBAR_QUEUE) {\n GLOBAL_SNACKBAR_QUEUE = new ToastQueue({\n maxVisibleToasts: 1,\n hasExitAnimation: true,\n })\n }\n\n return GLOBAL_SNACKBAR_QUEUE\n}\n\nexport const clearSnackbarQueue = () => {\n GLOBAL_SNACKBAR_QUEUE = null\n}\n\n/**\n * We define a global store to keep track of all providers instances, to ensure\n * we always have a single Snackbar container.\n */\nconst GLOBAL_SNACKBAR_STORE = {\n providers: new Set<RefObject<HTMLDivElement | null>>(),\n subscriptions: new Set<() => void>(),\n}\n\nexport type SnackbarProps = Omit<SnackbarRegionProps, 'state'> & {\n ref?: Ref<HTMLDivElement>\n}\n\nexport const Snackbar = ({ ref: forwardedRef, ...props }: SnackbarProps): ReactElement | null => {\n const ref = useRef<HTMLDivElement>(null)\n\n const state = useToastQueue(getGlobalSnackBarQueue())\n\n const { provider, addProvider, deleteProvider } = useSnackbarGlobalStore(GLOBAL_SNACKBAR_STORE)\n\n useEffect(() => {\n addProvider(ref)\n\n return () => {\n for (const toast of getGlobalSnackBarQueue().visibleToasts) {\n toast.animation = undefined\n }\n\n deleteProvider(ref)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return ref === provider && state.visibleToasts.length > 0\n ? createPortal(<SnackbarRegion ref={forwardedRef} state={state} {...props} />, document.body)\n : null\n}\n\nSnackbar.displayName = 'Snackbar'\n\nexport interface AddSnackbarArgs extends SnackbarItemValue, Omit<SnackBarItemOptions, 'timeout'> {\n /**\n * Handler that is called when the snackbar is closed, either by the user\n * or after a timeout.\n */\n onClose?: () => void\n /**\n * A timeout to automatically close the snackbar after, in milliseconds.\n * @default 5000\n */\n timeout?: number | null\n /**\n * The priority of the snackbar relative to other snackbars. Larger numbers indicate higher priority.\n */\n priority?: number\n}\n\nexport const addSnackbar = ({ onClose, timeout = 5000, priority, ...content }: AddSnackbarArgs) => {\n const queue = getGlobalSnackBarQueue()\n\n queue.add(content, {\n onClose,\n timeout: timeout && !content.onAction ? Math.max(timeout, 5000) : undefined,\n priority,\n })\n}\n","import {\n addSnackbar,\n type AddSnackbarArgs,\n clearSnackbarQueue,\n Snackbar as Root,\n type SnackbarProps,\n} from './Snackbar'\nimport { SnackbarItem as Item, type SnackbarItemProps } from './SnackbarItem'\nimport {\n SnackbarItemAction as ItemAction,\n type SnackbarItemActionProps,\n} from './SnackbarItemAction'\nimport { SnackbarItemClose as ItemClose, type SnackbarItemCloseProps } from './SnackbarItemClose'\nimport { SnackbarItemIcon as ItemIcon, type SnackbarItemIconProps } from './SnackbarItemIcon'\n\nexport const Snackbar: typeof Root & {\n Item: typeof Item\n ItemAction: typeof ItemAction\n ItemClose: typeof ItemClose\n ItemIcon: typeof ItemIcon\n} = Object.assign(Root, {\n Item,\n ItemAction,\n ItemClose,\n ItemIcon,\n})\n\nSnackbar.displayName = 'Snackbar'\nItem.displayName = 'Snackbar.Item'\nItemAction.displayName = 'Snackbar.ItemAction'\nItemClose.displayName = 'Snackbar.ItemClose'\nItemIcon.displayName = 'Snackbar.ItemIcon'\n\nexport type {\n SnackbarProps,\n SnackbarItemProps,\n SnackbarItemActionProps,\n SnackbarItemCloseProps,\n SnackbarItemIconProps,\n AddSnackbarArgs,\n}\nexport { addSnackbar, clearSnackbarQueue }\n"],"names":["filledVariants","tintedVariants","snackbarItemVariant","cva","snackbarItemVariantContent","SnackbarItemContext","createContext","useSnackbarItemContext","useContext","SnackbarItemAction","designProp","intentProp","onClick","children","className","ref","rest","toast","state","intent","design","jsx","Button","e","cx","SnackbarItemClose","ariaLabel","IconButton","Icon","Close","SnackbarItemIcon","SWIPE_THRESHOLD","useSwipe","swipeRef","onSwipeStart","onSwipeMove","onSwipeCancel","onSwipeEnd","threshold","setState","useState","direction","useRef","origin","delta","handleSwipeStart","evt","handleSwipeMove","deltaX","deltaY","moveState","handleSwipeEnd","proxyDelta","endState","useEffect","swipeElement","SnackbarItem","ariaLabelledby","ariaDescribedby","ariaDetails","actionOnNewlineProp","forwardedRef","innerRef","swipeState","swipeDirection","message","icon","isClosable","onAction","actionLabel","actionOnNewline","ariaProps","toastProps","titleProps","closeButtonProps","contentProps","useToast","findElement","useCallback","elementDisplayName","Children","isValidElement","child","iconFromChildren","actionBtnFromChildren","closeBtnFromChildren","jsxs","renderSubComponent","childItem","defaultItem","props","cloneElement","Item","snackbarRegionVariant","SnackbarRegion","position","regionProps","useToastRegion","useSnackbarGlobalStore","providers","subscriptions","subscribe","listener","getLastSnackbarProvider","addProvider","provider","subscribeFn","deleteProvider","useSyncExternalStore","GLOBAL_SNACKBAR_QUEUE","getGlobalSnackBarQueue","ToastQueue","clearSnackbarQueue","GLOBAL_SNACKBAR_STORE","Snackbar","useToastQueue","createPortal","addSnackbar","onClose","timeout","priority","content","Root","ItemAction","ItemClose","ItemIcon"],"mappings":"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"}