@music-vine/cadence 2.4.0 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/components/accordion.js.map +2 -2
  2. package/dist/components/badge.js.map +2 -2
  3. package/dist/components/breadcrumb.js +1 -4
  4. package/dist/components/breadcrumb.js.map +2 -2
  5. package/dist/components/button.js +20 -17
  6. package/dist/components/button.js.map +2 -2
  7. package/dist/components/card.js +5 -1
  8. package/dist/components/card.js.map +2 -2
  9. package/dist/components/carousel.js +8 -1
  10. package/dist/components/carousel.js.map +2 -2
  11. package/dist/components/checkbox.js +13 -2
  12. package/dist/components/checkbox.js.map +2 -2
  13. package/dist/components/context-menu.js +47 -8
  14. package/dist/components/context-menu.js.map +2 -2
  15. package/dist/components/dialog.js.map +1 -1
  16. package/dist/components/drawer.js.map +2 -2
  17. package/dist/components/index.js +7 -4
  18. package/dist/components/index.js.map +2 -2
  19. package/dist/components/input.js +5 -1
  20. package/dist/components/input.js.map +2 -2
  21. package/dist/components/popover.js +13 -15
  22. package/dist/components/popover.js.map +2 -2
  23. package/dist/components/select.js +159 -139
  24. package/dist/components/select.js.map +2 -2
  25. package/dist/components/separator.js.map +2 -2
  26. package/dist/components/skeleton.js +12 -14
  27. package/dist/components/skeleton.js.map +2 -2
  28. package/dist/components/stacking-card.js +1 -1
  29. package/dist/components/stacking-card.js.map +2 -2
  30. package/dist/components/tabs.js.map +1 -1
  31. package/dist/components/textarea.js +7 -1
  32. package/dist/components/textarea.js.map +2 -2
  33. package/dist/components/toast.js +33 -8
  34. package/dist/components/toast.js.map +2 -2
  35. package/dist/components/typography/heading.js +8 -1
  36. package/dist/components/typography/heading.js.map +2 -2
  37. package/dist/components/typography/list.js +15 -2
  38. package/dist/components/typography/list.js.map +2 -2
  39. package/dist/components/typography/text.js +7 -1
  40. package/dist/components/typography/text.js.map +2 -2
  41. package/dist/icons/custom/boards-indicator.js.map +2 -2
  42. package/dist/icons/custom/exclamation-mark-in-octagon.js.map +2 -2
  43. package/dist/icons/custom/tick.js.map +2 -2
  44. package/dist/lib/utils.js +3 -1
  45. package/dist/lib/utils.js.map +2 -2
  46. package/dist/styles/index.css +14 -14
  47. package/dist/styles/index.v4.css +14 -14
  48. package/dist/test/setup.js +4 -2
  49. package/dist/test/setup.js.map +2 -2
  50. package/dist/theme/index.js +39 -13
  51. package/dist/theme/index.js.map +2 -2
  52. package/package.json +2 -2
  53. package/tailwind.config.ts +3 -2
  54. package/tailwind.config.v4.css +1 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/stacking-card.tsx"],
4
- "sourcesContent": ["/**\n * @module StackingCard\n *\n * Selectable card component with collapsible content. Supports single selection groups.\n * Features animated expand/collapse and accessible keyboard navigation.\n *\n * @example\n * // Single selectable card\n * <StackingCard selectable selected={isSelected} onSelectedChange={setSelected}>\n * <StackingCardHeader>\n * <StackingCardTitle>Premium Plan</StackingCardTitle>\n * </StackingCardHeader>\n * <StackingCardContent collapsible>\n * <StackingCardList>\n * <StackingCardListItem>Unlimited downloads</StackingCardListItem>\n * <StackingCardListItem>Priority support</StackingCardListItem>\n * </StackingCardList>\n * </StackingCardContent>\n * </StackingCard>\n *\n * @example\n * // Radio group of cards\n * <StackingCardGroup value={plan} onValueChange={setPlan}>\n * <StackingCard value=\"basic\" selectable>\n * <StackingCardHeader>\n * <StackingCardTitle>Basic</StackingCardTitle>\n * </StackingCardHeader>\n * </StackingCard>\n * <StackingCard value=\"pro\" selectable>\n * <StackingCardHeader>\n * <StackingCardTitle>Pro</StackingCardTitle>\n * </StackingCardHeader>\n * </StackingCard>\n * </StackingCardGroup>\n */\nimport type { LucideProps } from \"lucide-react\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport type { Variants } from \"motion/react\";\nimport { motion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\nimport { DummyCheckbox } from \"./checkbox\";\nimport { Separator } from \"./separator\";\n\nimport type { ListItemProps, ListProps } from \"./typography/list\";\nimport { List, ListItem } from \"./typography/list\";\nimport { Text } from \"./typography/text\";\n\n// Motion transition configuration\nconst motionTransition = {\n duration: 0.4,\n type: \"spring\" as const,\n bounce: 0,\n};\n\nconst motionVariantsChevron: Variants = {\n collapsed: {\n rotate: 0,\n transition: motionTransition,\n },\n expanded: {\n rotate: 180,\n transition: motionTransition,\n },\n};\n\n// Hook to handle auto height animation for collapsible content\nconst useAutoHeight = () => {\n const [height, setHeight] = React.useState<number | \"auto\">(\"auto\");\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!ref.current) {\n return;\n }\n\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n\n if (entry) {\n setHeight(entry.contentRect.height);\n }\n });\n\n resizeObserver.observe(ref.current);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n const variants: Variants = React.useMemo(\n () => ({\n collapsed: {\n height: 0,\n opacity: 0,\n transition: motionTransition,\n },\n expanded: {\n height: height === \"auto\" ? \"auto\" : height,\n opacity: 1,\n transition: motionTransition,\n },\n }),\n [height]\n );\n\n return { ref, variants };\n};\n\ninterface StackingCardGroupContextValue {\n selectedValue: string;\n expandedValue: string | null;\n onValueChange?: (value: string) => void;\n onExpandedChange?: (value: string | null) => void;\n registerCardRef?: (value: string, element: HTMLElement | null) => void;\n}\n\nconst StackingCardGroupContext =\n React.createContext<StackingCardGroupContextValue | null>(null);\n\nconst useStackingCardGroup = () => {\n const context = React.useContext(StackingCardGroupContext);\n\n return context;\n};\n\ninterface StackingCardContextValue {\n isSelected?: boolean;\n isCollapsed?: boolean;\n selectable?: boolean;\n onSelectedChange?: (selected: boolean) => void;\n onToggleCollapse?: () => void;\n setHasCollapsibleContent?: (hasCollapsible: boolean) => void;\n contentId?: string;\n}\n\nconst StackingCardContext = React.createContext<StackingCardContextValue>({});\n\nconst useStackingCard = () => {\n const context = React.useContext(StackingCardContext);\n\n return context;\n};\n\ninterface StackingCardProps extends React.HTMLAttributes<HTMLDivElement> {\n selectable?: boolean;\n selected?: boolean;\n onSelectedChange?: (selected: boolean) => void;\n variant?: \"default\" | \"selected\";\n value?: string;\n initiallyCollapsed?: boolean;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Complex component with many state interactions\nfunction StackingCard({\n className,\n children,\n selectable = false,\n selected = false,\n onSelectedChange,\n variant,\n onClick,\n value,\n onKeyDown,\n initiallyCollapsed = true,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n \"aria-describedby\": ariaDescribedby,\n ref,\n ...props\n}: StackingCardProps & { ref?: React.Ref<HTMLDivElement> }) {\n const [isCollapsed, setIsCollapsed] = React.useState(true);\n const [hasCollapsibleContent, setHasCollapsibleContent] =\n React.useState(false);\n\n const [wasSelected, setWasSelected] = React.useState(false);\n\n const ignoreInitiallyCollapsedAfterRenderRef = React.useRef(false);\n const timeoutRef = React.useRef<NodeJS.Timeout | null>(null);\n\n // Generate unique ID for this card instance\n const cardId = React.useId();\n const contentId = `${cardId}-content`;\n\n const group = useStackingCardGroup();\n\n // Determine if we're in a group\n const isInGroup = group !== null;\n\n // Determine selection state\n const isSelected = isInGroup\n ? group.selectedValue === value\n : variant === \"selected\" || selected;\n\n // Auto-expand logic: if card becomes selected and has collapsible content, expand it\n // This is calculated during render, not in useEffect\n const justBecameSelected = isSelected && !wasSelected;\n\n if (justBecameSelected && hasCollapsibleContent) {\n if (isInGroup) {\n // In group mode, expand this card\n group?.onExpandedChange?.(value ?? null);\n } else {\n // In standalone mode, expand this card\n setIsCollapsed(false);\n }\n }\n\n // Update wasSelected for next render (this is safe during render)\n if (isSelected !== wasSelected) {\n setWasSelected(isSelected);\n }\n\n // Determine collapse state\n let shouldBeCollapsed = isCollapsed;\n\n if (initiallyCollapsed && !ignoreInitiallyCollapsedAfterRenderRef.current) {\n shouldBeCollapsed = true;\n } else if (isInGroup) {\n shouldBeCollapsed = group.expandedValue !== value;\n }\n\n const ignoreInitiallyCollapsedRef = React.useCallback(() => {\n if (initiallyCollapsed && !ignoreInitiallyCollapsedAfterRenderRef.current) {\n ignoreInitiallyCollapsedAfterRenderRef.current = true;\n }\n }, [initiallyCollapsed]);\n\n const handleSelect = React.useCallback(() => {\n if (selectable) {\n if (isInGroup && value) {\n group?.onValueChange?.(value);\n } else if (!isInGroup && onSelectedChange) {\n onSelectedChange(!selected);\n }\n }\n }, [selectable, isInGroup, value, onSelectedChange, group, selected]);\n\n const handleToggleCollapse = React.useCallback(() => {\n if (isInGroup) {\n // In group mode, toggle between this card and null (all collapsed)\n group?.onExpandedChange?.(\n group.expandedValue === value ? null : (value ?? null)\n );\n } else {\n setIsCollapsed(!isCollapsed);\n }\n }, [isInGroup, group, value, isCollapsed]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n // Immediately mark that we're no longer in the initial state\n ignoreInitiallyCollapsedRef();\n\n if (selectable && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n handleSelect();\n }\n\n onKeyDown?.(e);\n },\n [selectable, handleSelect, onKeyDown, ignoreInitiallyCollapsedRef]\n );\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n e.stopPropagation();\n\n // Immediately mark that we're no longer in the initial state\n ignoreInitiallyCollapsedRef();\n\n handleSelect();\n\n if (isSelected) {\n handleToggleCollapse();\n }\n\n onClick?.(e);\n },\n [\n handleSelect,\n onClick,\n isSelected,\n handleToggleCollapse,\n ignoreInitiallyCollapsedRef,\n ]\n );\n\n const contextValue: StackingCardContextValue = React.useMemo(\n () => ({\n isSelected,\n isCollapsed: shouldBeCollapsed,\n selectable,\n onSelectedChange,\n onToggleCollapse: handleToggleCollapse,\n setHasCollapsibleContent,\n contentId,\n }),\n [\n isSelected,\n shouldBeCollapsed,\n selectable,\n onSelectedChange,\n handleToggleCollapse,\n contentId,\n ]\n );\n\n // Generate accessible label if not provided\n const accessibleLabel = ariaLabel ?? (isInGroup ? `Option ${value}` : \"Card\");\n\n // Compute role separately to avoid nested ternary\n const computeRole = (): \"radio\" | \"button\" | undefined => {\n if (isInGroup) {\n return \"radio\";\n }\n if (selectable) {\n return \"button\";\n }\n return undefined;\n };\n const cardRole = computeRole();\n\n // Combined ref callback that handles both forwarded ref and group registration\n const combinedRef = React.useCallback(\n (element: HTMLDivElement | null) => {\n // Handle forwarded ref\n if (typeof ref === \"function\") {\n ref(element);\n } else if (ref) {\n ref.current = element;\n }\n\n // Register with group if needed\n if (isInGroup && value && group?.registerCardRef) {\n group.registerCardRef(value, element);\n }\n },\n [ref, isInGroup, value, group]\n );\n\n React.useEffect(() => {\n if (initiallyCollapsed && !ignoreInitiallyCollapsedAfterRenderRef.current) {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n ignoreInitiallyCollapsedAfterRenderRef.current = true;\n }, 1500); // delay to allow for rapid re-renders to settle\n }\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [initiallyCollapsed]);\n\n return (\n <StackingCardContext.Provider value={contextValue}>\n {/* biome-ignore lint/a11y/noStaticElementInteractions: Role is dynamically assigned based on context */}\n {/* biome-ignore lint/a11y/noNoninteractiveElementInteractions: Interactive behavior with proper role */}\n {/* biome-ignore lint/a11y/useAriaPropsSupportedByRole: aria-checked is valid for radio role */}\n <div\n aria-checked={isInGroup ? isSelected : undefined}\n aria-describedby={ariaDescribedby}\n aria-expanded={hasCollapsibleContent ? !shouldBeCollapsed : undefined}\n aria-label={accessibleLabel}\n aria-labelledby={ariaLabelledby}\n aria-pressed={!isInGroup && selectable ? isSelected : undefined}\n className={cn(\n \"relative flex w-full min-w-64 max-w-96 flex-col overflow-hidden border border-solid\",\n \"rounded-2xl shadow-sm transition-colors\",\n selectable && \"cursor-pointer\",\n isSelected\n ? \"border-gray-950 dark:border-white\"\n : \"border-gray-150 dark:border-gray-800\",\n \"focus-visible:ring-[var(--focus-ring)] focus-visible:ring-offset-2\",\n className\n )}\n key={value}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n ref={combinedRef}\n role={cardRole}\n style={props.style}\n tabIndex={selectable ? 0 : undefined}\n {...props}\n >\n {children}\n </div>\n </StackingCardContext.Provider>\n );\n}\n\ntype StackingCardHeaderProps = React.HTMLAttributes<HTMLDivElement> & {\n ref?: React.Ref<HTMLDivElement>;\n};\n\nfunction StackingCardHeader({\n className,\n children,\n ref,\n ...props\n}: StackingCardHeaderProps) {\n const { selectable, isSelected } = useStackingCard();\n\n return (\n <div\n className={cn(\n \"flex items-center justify-between gap-2 px-6 pt-4 pb-1\",\n isSelected && \"bg-gray-100 dark:bg-gray-800\",\n className\n )}\n ref={ref}\n {...props}\n >\n <div className=\"flex flex-1 items-center gap-2\">\n {selectable && (\n <DummyCheckbox checked={isSelected} tabIndex={-1} variant=\"rounded\" />\n )}\n {children}\n </div>\n </div>\n );\n}\n\ntype StackingCardTitleProps = React.HTMLAttributes<HTMLDivElement> & {\n ref?: React.Ref<HTMLDivElement>;\n};\n\nfunction StackingCardTitle({\n className,\n ref,\n ...props\n}: StackingCardTitleProps) {\n return (\n <Text\n className={cn(\n \"font-sans font-semibold text-gray-950 text-sm leading-6 dark:text-white\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n}\n\ntype StackingCardDescriptionProps = React.HTMLAttributes<HTMLDivElement> & {\n ref?: React.Ref<HTMLDivElement>;\n};\n\nfunction StackingCardDescription({\n className,\n ref,\n ...props\n}: StackingCardDescriptionProps) {\n return (\n <Text\n className={cn(\"text-gray-700 text-sm dark:text-gray-200\", className)}\n ref={ref}\n {...props}\n />\n );\n}\n\nconst MotionChevron = ({ isCollapsed }: { isCollapsed: boolean }) => (\n <motion.div\n animate={isCollapsed ? \"collapsed\" : \"expanded\"}\n className=\"flex items-center justify-center\"\n initial=\"collapsed\"\n variants={motionVariantsChevron}\n >\n <ChevronDown className=\"h-3 w-3\" />\n </motion.div>\n);\n\ninterface StackingCardContentProps\n extends React.HTMLAttributes<HTMLDivElement> {\n collapsible?: boolean;\n minimal?: boolean;\n description?: React.ReactNode;\n ref?: React.Ref<HTMLDivElement>;\n}\n\nfunction StackingCardContent({\n className,\n children,\n collapsible = false,\n minimal = false,\n description,\n ref,\n ...props\n}: StackingCardContentProps) {\n const {\n isCollapsed,\n isSelected,\n onToggleCollapse,\n setHasCollapsibleContent,\n contentId,\n } = useStackingCard();\n\n const { ref: autoHeightRef, variants: autoHeightVariants } = useAutoHeight();\n\n // Register this component as having collapsible content\n React.useEffect(() => {\n if (collapsible) {\n setHasCollapsibleContent?.(true);\n }\n\n return () => {\n setHasCollapsibleContent?.(false);\n };\n }, [collapsible, setHasCollapsibleContent]);\n\n if (!collapsible) {\n return (\n <div\n className={cn(\n \"flex flex-col gap-1.5 px-6 pt-0 pb-4\",\n isSelected && \"bg-gray-100 dark:bg-gray-800\",\n className\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n return (\n <>\n <div\n className={cn(\n \"flex items-center justify-between gap-2 px-6 pb-4\",\n isSelected && \"bg-gray-100 dark:bg-gray-800\"\n )}\n >\n {description ? (\n <div className=\"flex-1\">{description}</div>\n ) : (\n <div aria-hidden className=\"flex-1\" />\n )}\n <Button\n aria-controls={contentId}\n aria-expanded={!isCollapsed}\n aria-label={isCollapsed ? \"Show details\" : \"Hide details\"}\n borderRadius=\"full\"\n className={cn(isSelected && \"bg-white dark:bg-gray-900\", \"h-3\")}\n onClick={(e) => {\n e.stopPropagation();\n onToggleCollapse?.();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.stopPropagation();\n }\n }}\n size=\"xs\"\n variant=\"light\"\n >\n <span className={cn({ \"sr-only\": minimal })}>Details</span>\n <MotionChevron isCollapsed={isCollapsed ?? false} />\n </Button>\n </div>\n <motion.div\n animate={isCollapsed ? \"collapsed\" : \"expanded\"}\n aria-hidden={isCollapsed}\n className=\"overflow-hidden\"\n id={contentId}\n initial=\"collapsed\"\n variants={autoHeightVariants}\n >\n <div className=\"flex flex-col\" ref={autoHeightRef}>\n <Separator\n className={cn(\n \"mt-0 mb-0\",\n isSelected\n ? \"bg-gray-950 dark:bg-white\"\n : \"border-gray-150 dark:border-gray-800\"\n )}\n />\n <div\n className={cn(\"flex flex-col gap-1.5\", className)}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n </div>\n </motion.div>\n </>\n );\n}\n\nfunction StackingCardList({\n className,\n children,\n ref,\n ...props\n}: ListProps & { ref?: React.Ref<HTMLUListElement | HTMLOListElement> }) {\n return (\n <List\n className={cn(\"list-none px-6 pt-3 pb-5\", className)}\n ref={ref}\n {...props}\n >\n {children}\n </List>\n );\n}\n\nconst StackingCardCheck = React.memo<LucideProps>(({ className, ...props }) => {\n const { selectable, isSelected } = useStackingCard();\n\n return (\n <Check\n className={cn(\n \"-mt-0.5 size-[14px]\",\n {\n \"text-current\": !selectable,\n \"text-brand-primary\": isSelected && selectable,\n \"text-gray-950 dark:text-white\": !isSelected && selectable,\n },\n className\n )}\n {...props}\n />\n );\n});\n\nStackingCardCheck.displayName = \"StackingCardCheck\";\n\nfunction StackingCardListItem({\n className,\n children,\n ref,\n ...props\n}: ListItemProps & { ref?: React.Ref<HTMLLIElement> }) {\n return (\n <ListItem\n className={cn(\n \"flex font-sans text-gray-700 text-sm first:mt-0 dark:text-gray-200\",\n className\n )}\n customBullet={<StackingCardCheck />}\n ref={ref}\n {...props}\n >\n {children}\n </ListItem>\n );\n}\n\ninterface StackingCardGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: string;\n onValueChange?: (value: string) => void;\n defaultValue?: string;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n ref?: React.Ref<HTMLDivElement>;\n}\n\nfunction StackingCardGroup({\n className,\n children,\n value,\n onValueChange,\n defaultValue,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n ref,\n ...props\n}: StackingCardGroupProps) {\n const [internalSelectedValue, setInternalSelectedValue] = React.useState(\n defaultValue ?? \"\"\n );\n\n const [internalExpandedValue, setInternalExpandedValue] = React.useState<\n string | null\n >(defaultValue ?? null);\n\n // For controlled mode, we need to manage expansion state separately\n const [controlledExpandedValue, setControlledExpandedValue] = React.useState<\n string | null\n >(value ?? null);\n\n // Calculate effective values during render (controlled vs uncontrolled pattern)\n const effectiveSelectedValue =\n value !== undefined ? value : internalSelectedValue;\n\n const effectiveExpandedValue =\n value !== undefined ? controlledExpandedValue : internalExpandedValue;\n\n // Auto-expand selected card in controlled mode\n React.useEffect(() => {\n if (value !== undefined) {\n setControlledExpandedValue(value);\n }\n }, [value]);\n\n const handleValueChange = React.useCallback(\n (newValue: string) => {\n // Only update internal state if uncontrolled\n if (value === undefined) {\n setInternalSelectedValue(newValue);\n setInternalExpandedValue(newValue);\n } else {\n // In controlled mode, auto-expand the newly selected card\n setControlledExpandedValue(newValue);\n }\n\n onValueChange?.(newValue);\n },\n [value, onValueChange]\n );\n\n const handleExpandedChange = React.useCallback(\n (newExpandedValue: string | null) => {\n if (value === undefined) {\n // Uncontrolled mode\n setInternalExpandedValue(newExpandedValue);\n } else {\n // Controlled mode\n setControlledExpandedValue(newExpandedValue);\n }\n },\n [value]\n );\n\n // Extract card values from children for arrow key navigation\n const cardValues = React.useMemo(() => {\n const values: string[] = [];\n\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child)) {\n const childValue = (child.props as { value?: unknown }).value;\n\n if (typeof childValue === \"string\") {\n values.push(childValue);\n }\n }\n });\n\n return values;\n }, [children]);\n\n // Store card refs for navigation\n const cardRefsRef = React.useRef<Map<string, HTMLElement>>(new Map());\n\n const registerCardRef = React.useCallback(\n (cardValue: string, element: HTMLElement | null) => {\n if (element) {\n cardRefsRef.current.set(cardValue, element);\n } else {\n cardRefsRef.current.delete(cardValue);\n }\n },\n []\n );\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (cardValues.length === 0) {\n return;\n }\n\n const currentIndex = cardValues.indexOf(effectiveSelectedValue);\n let nextIndex = currentIndex;\n\n switch (e.key) {\n case \"ArrowDown\":\n case \"ArrowRight\":\n e.preventDefault();\n nextIndex =\n currentIndex < cardValues.length - 1 ? currentIndex + 1 : 0;\n break;\n case \"ArrowUp\":\n case \"ArrowLeft\":\n e.preventDefault();\n nextIndex =\n currentIndex > 0 ? currentIndex - 1 : cardValues.length - 1;\n break;\n case \"Home\":\n e.preventDefault();\n nextIndex = 0;\n break;\n case \"End\":\n e.preventDefault();\n nextIndex = cardValues.length - 1;\n break;\n default:\n return;\n }\n\n const nextValue = cardValues[nextIndex];\n\n if (nextValue && nextValue !== effectiveSelectedValue) {\n handleValueChange(nextValue);\n\n // Focus the newly selected card using registered ref\n setTimeout(() => {\n const targetCard = cardRefsRef.current.get(nextValue);\n\n targetCard?.focus();\n }, 0);\n }\n },\n [cardValues, effectiveSelectedValue, handleValueChange]\n );\n\n const contextValue: StackingCardGroupContextValue = React.useMemo(\n () => ({\n selectedValue: effectiveSelectedValue,\n expandedValue: effectiveExpandedValue,\n onValueChange: handleValueChange,\n onExpandedChange: handleExpandedChange,\n registerCardRef,\n }),\n [\n effectiveSelectedValue,\n effectiveExpandedValue,\n handleValueChange,\n handleExpandedChange,\n registerCardRef,\n ]\n );\n\n // Generate accessible label if not provided\n const accessibleLabel = ariaLabel ?? \"Select an option\";\n\n return (\n <StackingCardGroupContext.Provider value={contextValue}>\n <div\n aria-label={accessibleLabel}\n aria-labelledby={ariaLabelledby}\n className={cn(\"flex flex-col gap-4\", className)}\n onKeyDown={handleKeyDown}\n ref={ref}\n role=\"radiogroup\"\n tabIndex={-1}\n {...props}\n >\n {children}\n </div>\n </StackingCardGroupContext.Provider>\n );\n}\n\nexport {\n StackingCard,\n StackingCardCheck,\n StackingCardContent,\n StackingCardDescription,\n StackingCardGroup,\n StackingCardHeader,\n StackingCardList,\n StackingCardListItem,\n StackingCardTitle,\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * @module StackingCard\n *\n * Selectable card component with collapsible content. Supports single selection groups.\n * Features animated expand/collapse and accessible keyboard navigation.\n *\n * @example\n * // Single selectable card\n * <StackingCard selectable selected={isSelected} onSelectedChange={setSelected}>\n * <StackingCardHeader>\n * <StackingCardTitle>Premium Plan</StackingCardTitle>\n * </StackingCardHeader>\n * <StackingCardContent collapsible>\n * <StackingCardList>\n * <StackingCardListItem>Unlimited downloads</StackingCardListItem>\n * <StackingCardListItem>Priority support</StackingCardListItem>\n * </StackingCardList>\n * </StackingCardContent>\n * </StackingCard>\n *\n * @example\n * // Radio group of cards\n * <StackingCardGroup value={plan} onValueChange={setPlan}>\n * <StackingCard value=\"basic\" selectable>\n * <StackingCardHeader>\n * <StackingCardTitle>Basic</StackingCardTitle>\n * </StackingCardHeader>\n * </StackingCard>\n * <StackingCard value=\"pro\" selectable>\n * <StackingCardHeader>\n * <StackingCardTitle>Pro</StackingCardTitle>\n * </StackingCardHeader>\n * </StackingCard>\n * </StackingCardGroup>\n */\nimport type { LucideProps } from \"lucide-react\";\nimport { Check, ChevronDown } from \"lucide-react\";\nimport type { Variants } from \"motion/react\";\nimport { motion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\nimport { DummyCheckbox } from \"./checkbox\";\nimport { Separator } from \"./separator\";\n\nimport type { ListItemProps, ListProps } from \"./typography/list\";\nimport { List, ListItem } from \"./typography/list\";\nimport { Text } from \"./typography/text\";\n\n// Motion transition configuration\nconst motionTransition = {\n duration: 0.4,\n type: \"spring\" as const,\n bounce: 0,\n};\n\nconst motionVariantsChevron: Variants = {\n collapsed: {\n rotate: 0,\n transition: motionTransition,\n },\n expanded: {\n rotate: 180,\n transition: motionTransition,\n },\n};\n\n// Hook to handle auto height animation for collapsible content\nconst useAutoHeight = () => {\n const [height, setHeight] = React.useState<number | \"auto\">(\"auto\");\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!ref.current) {\n return;\n }\n\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n\n if (entry) {\n setHeight(entry.contentRect.height);\n }\n });\n\n resizeObserver.observe(ref.current);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n const variants: Variants = React.useMemo(\n () => ({\n collapsed: {\n height: 0,\n opacity: 0,\n transition: motionTransition,\n },\n expanded: {\n height: height === \"auto\" ? \"auto\" : height,\n opacity: 1,\n transition: motionTransition,\n },\n }),\n [height]\n );\n\n return { ref, variants };\n};\n\ninterface StackingCardGroupContextValue {\n selectedValue: string;\n expandedValue: string | null;\n onValueChange?: (value: string) => void;\n onExpandedChange?: (value: string | null) => void;\n registerCardRef?: (value: string, element: HTMLElement | null) => void;\n}\n\nconst StackingCardGroupContext =\n React.createContext<StackingCardGroupContextValue | null>(null);\n\nconst useStackingCardGroup = () => {\n const context = React.useContext(StackingCardGroupContext);\n\n return context;\n};\n\ninterface StackingCardContextValue {\n isSelected?: boolean;\n isCollapsed?: boolean;\n selectable?: boolean;\n onSelectedChange?: (selected: boolean) => void;\n onToggleCollapse?: () => void;\n setHasCollapsibleContent?: (hasCollapsible: boolean) => void;\n contentId?: string;\n}\n\nconst StackingCardContext = React.createContext<StackingCardContextValue>({});\n\nconst useStackingCard = () => {\n const context = React.useContext(StackingCardContext);\n\n return context;\n};\n\ninterface StackingCardProps extends React.HTMLAttributes<HTMLDivElement> {\n selectable?: boolean;\n selected?: boolean;\n onSelectedChange?: (selected: boolean) => void;\n variant?: \"default\" | \"selected\";\n value?: string;\n initiallyCollapsed?: boolean;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: Complex component with many state interactions\nfunction StackingCard({\n className,\n children,\n selectable = false,\n selected = false,\n onSelectedChange,\n variant,\n onClick,\n value,\n onKeyDown,\n initiallyCollapsed = true,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n \"aria-describedby\": ariaDescribedby,\n ref,\n ...props\n}: StackingCardProps & { ref?: React.Ref<HTMLDivElement> }) {\n const [isCollapsed, setIsCollapsed] = React.useState(true);\n const [hasCollapsibleContent, setHasCollapsibleContent] =\n React.useState(false);\n\n const [wasSelected, setWasSelected] = React.useState(false);\n\n const ignoreInitiallyCollapsedAfterRenderRef = React.useRef(false);\n const timeoutRef = React.useRef<NodeJS.Timeout | null>(null);\n\n // Generate unique ID for this card instance\n const cardId = React.useId();\n const contentId = `${cardId}-content`;\n\n const group = useStackingCardGroup();\n\n // Determine if we're in a group\n const isInGroup = group !== null;\n\n // Determine selection state\n const isSelected = isInGroup\n ? group.selectedValue === value\n : variant === \"selected\" || selected;\n\n // Auto-expand logic: if card becomes selected and has collapsible content, expand it\n // This is calculated during render, not in useEffect\n const justBecameSelected = isSelected && !wasSelected;\n\n if (justBecameSelected && hasCollapsibleContent) {\n if (isInGroup) {\n // In group mode, expand this card\n group?.onExpandedChange?.(value ?? null);\n } else {\n // In standalone mode, expand this card\n setIsCollapsed(false);\n }\n }\n\n // Update wasSelected for next render (this is safe during render)\n if (isSelected !== wasSelected) {\n setWasSelected(isSelected);\n }\n\n // Determine collapse state\n let shouldBeCollapsed = isCollapsed;\n\n if (initiallyCollapsed && !ignoreInitiallyCollapsedAfterRenderRef.current) {\n shouldBeCollapsed = true;\n } else if (isInGroup) {\n shouldBeCollapsed = group.expandedValue !== value;\n }\n\n const ignoreInitiallyCollapsedRef = React.useCallback(() => {\n if (initiallyCollapsed && !ignoreInitiallyCollapsedAfterRenderRef.current) {\n ignoreInitiallyCollapsedAfterRenderRef.current = true;\n }\n }, [initiallyCollapsed]);\n\n const handleSelect = React.useCallback(() => {\n if (selectable) {\n if (isInGroup && value) {\n group?.onValueChange?.(value);\n } else if (!isInGroup && onSelectedChange) {\n onSelectedChange(!selected);\n }\n }\n }, [selectable, isInGroup, value, onSelectedChange, group, selected]);\n\n const handleToggleCollapse = React.useCallback(() => {\n if (isInGroup) {\n // In group mode, toggle between this card and null (all collapsed)\n group?.onExpandedChange?.(\n group.expandedValue === value ? null : (value ?? null)\n );\n } else {\n setIsCollapsed(!isCollapsed);\n }\n }, [isInGroup, group, value, isCollapsed]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n // Immediately mark that we're no longer in the initial state\n ignoreInitiallyCollapsedRef();\n\n if (selectable && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n handleSelect();\n }\n\n onKeyDown?.(e);\n },\n [selectable, handleSelect, onKeyDown, ignoreInitiallyCollapsedRef]\n );\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n e.stopPropagation();\n\n // Immediately mark that we're no longer in the initial state\n ignoreInitiallyCollapsedRef();\n\n handleSelect();\n\n if (isSelected) {\n handleToggleCollapse();\n }\n\n onClick?.(e);\n },\n [\n handleSelect,\n onClick,\n isSelected,\n handleToggleCollapse,\n ignoreInitiallyCollapsedRef,\n ]\n );\n\n const contextValue: StackingCardContextValue = React.useMemo(\n () => ({\n isSelected,\n isCollapsed: shouldBeCollapsed,\n selectable,\n onSelectedChange,\n onToggleCollapse: handleToggleCollapse,\n setHasCollapsibleContent,\n contentId,\n }),\n [\n isSelected,\n shouldBeCollapsed,\n selectable,\n onSelectedChange,\n handleToggleCollapse,\n contentId,\n ]\n );\n\n // Generate accessible label if not provided\n const accessibleLabel = ariaLabel ?? (isInGroup ? `Option ${value}` : \"Card\");\n\n // Compute role separately to avoid nested ternary\n const computeRole = (): \"radio\" | \"button\" | undefined => {\n if (isInGroup) {\n return \"radio\";\n }\n if (selectable) {\n return \"button\";\n }\n return;\n };\n const cardRole = computeRole();\n\n // Combined ref callback that handles both forwarded ref and group registration\n const combinedRef = React.useCallback(\n (element: HTMLDivElement | null) => {\n // Handle forwarded ref\n if (typeof ref === \"function\") {\n ref(element);\n } else if (ref) {\n ref.current = element;\n }\n\n // Register with group if needed\n if (isInGroup && value && group?.registerCardRef) {\n group.registerCardRef(value, element);\n }\n },\n [ref, isInGroup, value, group]\n );\n\n React.useEffect(() => {\n if (initiallyCollapsed && !ignoreInitiallyCollapsedAfterRenderRef.current) {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n ignoreInitiallyCollapsedAfterRenderRef.current = true;\n }, 1500); // delay to allow for rapid re-renders to settle\n }\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [initiallyCollapsed]);\n\n return (\n <StackingCardContext.Provider value={contextValue}>\n {/* biome-ignore lint/a11y/noStaticElementInteractions: Role is dynamically assigned based on context */}\n {/* biome-ignore lint/a11y/noNoninteractiveElementInteractions: Interactive behavior with proper role */}\n {/* biome-ignore lint/a11y/useAriaPropsSupportedByRole: aria-checked is valid for radio role */}\n <div\n aria-checked={isInGroup ? isSelected : undefined}\n aria-describedby={ariaDescribedby}\n aria-expanded={hasCollapsibleContent ? !shouldBeCollapsed : undefined}\n aria-label={accessibleLabel}\n aria-labelledby={ariaLabelledby}\n aria-pressed={!isInGroup && selectable ? isSelected : undefined}\n className={cn(\n \"relative flex w-full min-w-64 max-w-96 flex-col overflow-hidden border border-solid\",\n \"rounded-2xl shadow-sm transition-colors\",\n selectable && \"cursor-pointer\",\n isSelected\n ? \"border-gray-950 dark:border-white\"\n : \"border-gray-150 dark:border-gray-800\",\n \"focus-visible:ring-[var(--focus-ring)] focus-visible:ring-offset-2\",\n className\n )}\n key={value}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n ref={combinedRef}\n role={cardRole}\n style={props.style}\n tabIndex={selectable ? 0 : undefined}\n {...props}\n >\n {children}\n </div>\n </StackingCardContext.Provider>\n );\n}\n\ntype StackingCardHeaderProps = React.HTMLAttributes<HTMLDivElement> & {\n ref?: React.Ref<HTMLDivElement>;\n};\n\nfunction StackingCardHeader({\n className,\n children,\n ref,\n ...props\n}: StackingCardHeaderProps) {\n const { selectable, isSelected } = useStackingCard();\n\n return (\n <div\n className={cn(\n \"flex items-center justify-between gap-2 px-6 pt-4 pb-1\",\n isSelected && \"bg-gray-100 dark:bg-gray-800\",\n className\n )}\n ref={ref}\n {...props}\n >\n <div className=\"flex flex-1 items-center gap-2\">\n {selectable && (\n <DummyCheckbox checked={isSelected} tabIndex={-1} variant=\"rounded\" />\n )}\n {children}\n </div>\n </div>\n );\n}\n\ntype StackingCardTitleProps = React.HTMLAttributes<HTMLDivElement> & {\n ref?: React.Ref<HTMLDivElement>;\n};\n\nfunction StackingCardTitle({\n className,\n ref,\n ...props\n}: StackingCardTitleProps) {\n return (\n <Text\n className={cn(\n \"font-sans font-semibold text-gray-950 text-sm leading-6 dark:text-white\",\n className\n )}\n ref={ref}\n {...props}\n />\n );\n}\n\ntype StackingCardDescriptionProps = React.HTMLAttributes<HTMLDivElement> & {\n ref?: React.Ref<HTMLDivElement>;\n};\n\nfunction StackingCardDescription({\n className,\n ref,\n ...props\n}: StackingCardDescriptionProps) {\n return (\n <Text\n className={cn(\"text-gray-700 text-sm dark:text-gray-200\", className)}\n ref={ref}\n {...props}\n />\n );\n}\n\nconst MotionChevron = ({ isCollapsed }: { isCollapsed: boolean }) => (\n <motion.div\n animate={isCollapsed ? \"collapsed\" : \"expanded\"}\n className=\"flex items-center justify-center\"\n initial=\"collapsed\"\n variants={motionVariantsChevron}\n >\n <ChevronDown className=\"h-3 w-3\" />\n </motion.div>\n);\n\ninterface StackingCardContentProps\n extends React.HTMLAttributes<HTMLDivElement> {\n collapsible?: boolean;\n minimal?: boolean;\n description?: React.ReactNode;\n ref?: React.Ref<HTMLDivElement>;\n}\n\nfunction StackingCardContent({\n className,\n children,\n collapsible = false,\n minimal = false,\n description,\n ref,\n ...props\n}: StackingCardContentProps) {\n const {\n isCollapsed,\n isSelected,\n onToggleCollapse,\n setHasCollapsibleContent,\n contentId,\n } = useStackingCard();\n\n const { ref: autoHeightRef, variants: autoHeightVariants } = useAutoHeight();\n\n // Register this component as having collapsible content\n React.useEffect(() => {\n if (collapsible) {\n setHasCollapsibleContent?.(true);\n }\n\n return () => {\n setHasCollapsibleContent?.(false);\n };\n }, [collapsible, setHasCollapsibleContent]);\n\n if (!collapsible) {\n return (\n <div\n className={cn(\n \"flex flex-col gap-1.5 px-6 pt-0 pb-4\",\n isSelected && \"bg-gray-100 dark:bg-gray-800\",\n className\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n return (\n <>\n <div\n className={cn(\n \"flex items-center justify-between gap-2 px-6 pb-4\",\n isSelected && \"bg-gray-100 dark:bg-gray-800\"\n )}\n >\n {description ? (\n <div className=\"flex-1\">{description}</div>\n ) : (\n <div aria-hidden className=\"flex-1\" />\n )}\n <Button\n aria-controls={contentId}\n aria-expanded={!isCollapsed}\n aria-label={isCollapsed ? \"Show details\" : \"Hide details\"}\n borderRadius=\"full\"\n className={cn(isSelected && \"bg-white dark:bg-gray-900\", \"h-3\")}\n onClick={(e) => {\n e.stopPropagation();\n onToggleCollapse?.();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.stopPropagation();\n }\n }}\n size=\"xs\"\n variant=\"light\"\n >\n <span className={cn({ \"sr-only\": minimal })}>Details</span>\n <MotionChevron isCollapsed={isCollapsed ?? false} />\n </Button>\n </div>\n <motion.div\n animate={isCollapsed ? \"collapsed\" : \"expanded\"}\n aria-hidden={isCollapsed}\n className=\"overflow-hidden\"\n id={contentId}\n initial=\"collapsed\"\n variants={autoHeightVariants}\n >\n <div className=\"flex flex-col\" ref={autoHeightRef}>\n <Separator\n className={cn(\n \"mt-0 mb-0\",\n isSelected\n ? \"bg-gray-950 dark:bg-white\"\n : \"border-gray-150 dark:border-gray-800\"\n )}\n />\n <div\n className={cn(\"flex flex-col gap-1.5\", className)}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n </div>\n </motion.div>\n </>\n );\n}\n\nfunction StackingCardList({\n className,\n children,\n ref,\n ...props\n}: ListProps & { ref?: React.Ref<HTMLUListElement | HTMLOListElement> }) {\n return (\n <List\n className={cn(\"list-none px-6 pt-3 pb-5\", className)}\n ref={ref}\n {...props}\n >\n {children}\n </List>\n );\n}\n\nconst StackingCardCheck = React.memo<LucideProps>(({ className, ...props }) => {\n const { selectable, isSelected } = useStackingCard();\n\n return (\n <Check\n className={cn(\n \"-mt-0.5 size-[14px]\",\n {\n \"text-current\": !selectable,\n \"text-brand-primary\": isSelected && selectable,\n \"text-gray-950 dark:text-white\": !isSelected && selectable,\n },\n className\n )}\n {...props}\n />\n );\n});\n\nStackingCardCheck.displayName = \"StackingCardCheck\";\n\nfunction StackingCardListItem({\n className,\n children,\n ref,\n ...props\n}: ListItemProps & { ref?: React.Ref<HTMLLIElement> }) {\n return (\n <ListItem\n className={cn(\n \"flex font-sans text-gray-700 text-sm first:mt-0 dark:text-gray-200\",\n className\n )}\n customBullet={<StackingCardCheck />}\n ref={ref}\n {...props}\n >\n {children}\n </ListItem>\n );\n}\n\ninterface StackingCardGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: string;\n onValueChange?: (value: string) => void;\n defaultValue?: string;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n ref?: React.Ref<HTMLDivElement>;\n}\n\nfunction StackingCardGroup({\n className,\n children,\n value,\n onValueChange,\n defaultValue,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n ref,\n ...props\n}: StackingCardGroupProps) {\n const [internalSelectedValue, setInternalSelectedValue] = React.useState(\n defaultValue ?? \"\"\n );\n\n const [internalExpandedValue, setInternalExpandedValue] = React.useState<\n string | null\n >(defaultValue ?? null);\n\n // For controlled mode, we need to manage expansion state separately\n const [controlledExpandedValue, setControlledExpandedValue] = React.useState<\n string | null\n >(value ?? null);\n\n // Calculate effective values during render (controlled vs uncontrolled pattern)\n const effectiveSelectedValue =\n value !== undefined ? value : internalSelectedValue;\n\n const effectiveExpandedValue =\n value !== undefined ? controlledExpandedValue : internalExpandedValue;\n\n // Auto-expand selected card in controlled mode\n React.useEffect(() => {\n if (value !== undefined) {\n setControlledExpandedValue(value);\n }\n }, [value]);\n\n const handleValueChange = React.useCallback(\n (newValue: string) => {\n // Only update internal state if uncontrolled\n if (value === undefined) {\n setInternalSelectedValue(newValue);\n setInternalExpandedValue(newValue);\n } else {\n // In controlled mode, auto-expand the newly selected card\n setControlledExpandedValue(newValue);\n }\n\n onValueChange?.(newValue);\n },\n [value, onValueChange]\n );\n\n const handleExpandedChange = React.useCallback(\n (newExpandedValue: string | null) => {\n if (value === undefined) {\n // Uncontrolled mode\n setInternalExpandedValue(newExpandedValue);\n } else {\n // Controlled mode\n setControlledExpandedValue(newExpandedValue);\n }\n },\n [value]\n );\n\n // Extract card values from children for arrow key navigation\n const cardValues = React.useMemo(() => {\n const values: string[] = [];\n\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child)) {\n const childValue = (child.props as { value?: unknown }).value;\n\n if (typeof childValue === \"string\") {\n values.push(childValue);\n }\n }\n });\n\n return values;\n }, [children]);\n\n // Store card refs for navigation\n const cardRefsRef = React.useRef<Map<string, HTMLElement>>(new Map());\n\n const registerCardRef = React.useCallback(\n (cardValue: string, element: HTMLElement | null) => {\n if (element) {\n cardRefsRef.current.set(cardValue, element);\n } else {\n cardRefsRef.current.delete(cardValue);\n }\n },\n []\n );\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (cardValues.length === 0) {\n return;\n }\n\n const currentIndex = cardValues.indexOf(effectiveSelectedValue);\n let nextIndex = currentIndex;\n\n switch (e.key) {\n case \"ArrowDown\":\n case \"ArrowRight\":\n e.preventDefault();\n nextIndex =\n currentIndex < cardValues.length - 1 ? currentIndex + 1 : 0;\n break;\n case \"ArrowUp\":\n case \"ArrowLeft\":\n e.preventDefault();\n nextIndex =\n currentIndex > 0 ? currentIndex - 1 : cardValues.length - 1;\n break;\n case \"Home\":\n e.preventDefault();\n nextIndex = 0;\n break;\n case \"End\":\n e.preventDefault();\n nextIndex = cardValues.length - 1;\n break;\n default:\n return;\n }\n\n const nextValue = cardValues[nextIndex];\n\n if (nextValue && nextValue !== effectiveSelectedValue) {\n handleValueChange(nextValue);\n\n // Focus the newly selected card using registered ref\n setTimeout(() => {\n const targetCard = cardRefsRef.current.get(nextValue);\n\n targetCard?.focus();\n }, 0);\n }\n },\n [cardValues, effectiveSelectedValue, handleValueChange]\n );\n\n const contextValue: StackingCardGroupContextValue = React.useMemo(\n () => ({\n selectedValue: effectiveSelectedValue,\n expandedValue: effectiveExpandedValue,\n onValueChange: handleValueChange,\n onExpandedChange: handleExpandedChange,\n registerCardRef,\n }),\n [\n effectiveSelectedValue,\n effectiveExpandedValue,\n handleValueChange,\n handleExpandedChange,\n registerCardRef,\n ]\n );\n\n // Generate accessible label if not provided\n const accessibleLabel = ariaLabel ?? \"Select an option\";\n\n return (\n <StackingCardGroupContext.Provider value={contextValue}>\n <div\n aria-label={accessibleLabel}\n aria-labelledby={ariaLabelledby}\n className={cn(\"flex flex-col gap-4\", className)}\n onKeyDown={handleKeyDown}\n ref={ref}\n role=\"radiogroup\"\n tabIndex={-1}\n {...props}\n >\n {children}\n </div>\n </StackingCardGroupContext.Provider>\n );\n}\n\nexport {\n StackingCard,\n StackingCardCheck,\n StackingCardContent,\n StackingCardDescription,\n StackingCardGroup,\n StackingCardHeader,\n StackingCardList,\n StackingCardListItem,\n StackingCardTitle,\n};\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/tabs.tsx"],
4
- "sourcesContent": ["/**\n * @module Tabs\n *\n * Tabbed interface for switching between content panels. Built on Radix UI Tabs primitive.\n *\n * @see {@link https://ui.shadcn.com/docs/components/tabs Shadcn Tabs}\n * @see {@link https://www.radix-ui.com/primitives/docs/components/tabs Radix Tabs}\n *\n * @example\n * // Basic tabs\n * <Tabs defaultValue=\"tab1\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">Content 1</TabsContent>\n * <TabsContent value=\"tab2\">Content 2</TabsContent>\n * </Tabs>\n *\n * @example\n * // Controlled tabs\n * const [activeTab, setActiveTab] = useState(\"settings\");\n *\n * <Tabs value={activeTab} onValueChange={setActiveTab}>\n * ...\n * </Tabs>\n */\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\nimport type { Ref } from \"react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\n/** Root component that manages tab selection state. */\nconst Tabs = TabsPrimitive.Root;\n\n/** Container for tab trigger buttons. */\nconst TabsList = ({\n className,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof TabsPrimitive.List> & {\n ref?: Ref<React.ElementRef<typeof TabsPrimitive.List>>;\n}) => (\n <TabsPrimitive.List\n className={cn(\n \"inline-flex h-10 items-center justify-center rounded-md bg-gray-100 p-1 text-gray-900 dark:bg-gray-900 dark:text-gray-100\",\n className\n )}\n ref={ref}\n {...props}\n />\n);\n\n/** Button that activates its associated tab content. */\nconst TabsTrigger = ({\n className,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger> & {\n ref?: Ref<React.ElementRef<typeof TabsPrimitive.Trigger>>;\n}) => (\n <TabsPrimitive.Trigger\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 font-semibold text-sm ring-offset-gray-100 transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--focus-ring)] focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-white data-[state=active]:text-gray-950 data-[state=active]:shadow-sm dark:ring-offset-gray-900 dark:data-[state=active]:bg-gray-800 dark:data-[state=active]:text-gray-50 dark:focus-visible:ring-[var(--focus-ring)]\",\n className\n )}\n ref={ref}\n {...props}\n />\n);\n\n/** Content panel shown when its associated tab is active. */\nconst TabsContent = ({\n className,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content> & {\n ref?: Ref<React.ElementRef<typeof TabsPrimitive.Content>>;\n}) => (\n <TabsPrimitive.Content\n className={cn(\n \"mt-2 ring-offset-gray-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--focus-ring)] focus-visible:ring-offset-2 dark:ring-offset-gray-900 dark:focus-visible:ring-[var(--focus-ring)]\",\n className\n )}\n ref={ref}\n {...props}\n />\n);\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n"],
4
+ "sourcesContent": ["/**\n * @module Tabs\n *\n * Tabbed interface for switching between content panels. Built on Radix UI Tabs primitive.\n *\n * @see {@link https://ui.shadcn.com/docs/components/tabs Shadcn Tabs}\n * @see {@link https://www.radix-ui.com/primitives/docs/components/tabs Radix Tabs}\n *\n * @example\n * // Basic tabs\n * <Tabs defaultValue=\"tab1\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">Content 1</TabsContent>\n * <TabsContent value=\"tab2\">Content 2</TabsContent>\n * </Tabs>\n *\n * @example\n * // Controlled tabs\n * const [activeTab, setActiveTab] = useState(\"settings\");\n *\n * <Tabs value={activeTab} onValueChange={setActiveTab}>\n * ...\n * </Tabs>\n */\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\nimport type { Ref } from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\n/** Root component that manages tab selection state. */\nconst Tabs = TabsPrimitive.Root;\n\n/** Container for tab trigger buttons. */\nconst TabsList = ({\n className,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof TabsPrimitive.List> & {\n ref?: Ref<React.ElementRef<typeof TabsPrimitive.List>>;\n}) => (\n <TabsPrimitive.List\n className={cn(\n \"inline-flex h-10 items-center justify-center rounded-md bg-gray-100 p-1 text-gray-900 dark:bg-gray-900 dark:text-gray-100\",\n className\n )}\n ref={ref}\n {...props}\n />\n);\n\n/** Button that activates its associated tab content. */\nconst TabsTrigger = ({\n className,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger> & {\n ref?: Ref<React.ElementRef<typeof TabsPrimitive.Trigger>>;\n}) => (\n <TabsPrimitive.Trigger\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 font-semibold text-sm ring-offset-gray-100 transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--focus-ring)] focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-white data-[state=active]:text-gray-950 data-[state=active]:shadow-sm dark:ring-offset-gray-900 dark:data-[state=active]:bg-gray-800 dark:data-[state=active]:text-gray-50 dark:focus-visible:ring-[var(--focus-ring)]\",\n className\n )}\n ref={ref}\n {...props}\n />\n);\n\n/** Content panel shown when its associated tab is active. */\nconst TabsContent = ({\n className,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content> & {\n ref?: Ref<React.ElementRef<typeof TabsPrimitive.Content>>;\n}) => (\n <TabsPrimitive.Content\n className={cn(\n \"mt-2 ring-offset-gray-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--focus-ring)] focus-visible:ring-offset-2 dark:ring-offset-gray-900 dark:focus-visible:ring-[var(--focus-ring)]\",\n className\n )}\n ref={ref}\n {...props}\n />\n);\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n"],
5
5
  "mappings": "AA4CE;AAjBF,SAAS,QAAQ,qBAAqB;AAItC,SAAS,UAAU;AAGnB,MAAM,OAAO,cAAc;AAG3B,MAAM,WAAW,CAAC;AAAA,EAChB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAGE;AAAA,EAAC,cAAc;AAAA,EAAd;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACC,GAAG;AAAA;AACN;AAIF,MAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAGE;AAAA,EAAC,cAAc;AAAA,EAAd;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACC,GAAG;AAAA;AACN;AAIF,MAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAGE;AAAA,EAAC,cAAc;AAAA,EAAd;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACC,GAAG;AAAA;AACN;",
6
6
  "names": []
7
7
  }
@@ -24,7 +24,13 @@ const textareaVariants = cva(
24
24
  }
25
25
  }
26
26
  );
27
- const Textarea = ({ className, resize, size, ref, ...props }) => /* @__PURE__ */ jsx(
27
+ const Textarea = ({
28
+ className,
29
+ resize,
30
+ size,
31
+ ref,
32
+ ...props
33
+ }) => /* @__PURE__ */ jsx(
28
34
  "textarea",
29
35
  {
30
36
  className: cn(textareaVariants({ resize, size, className })),
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/textarea.tsx"],
4
- "sourcesContent": ["/**\n * @module Textarea\n *\n * Multi-line text input field. Inherits styling from Input component.\n *\n * @example\n * // Basic textarea\n * <Textarea placeholder=\"Enter description...\" />\n *\n * @example\n * // Resizable textarea\n * <Textarea resize=\"vertical\" />\n *\n * @example\n * // Small size\n * <Textarea size=\"sm\" rows={3} />\n */\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type { Ref } from \"react\";\n\nimport { cn } from \"../lib/utils\";\nimport { inputVariants } from \"./input\";\n\nconst textareaVariants = cva(\n inputVariants(), // inherits the base classes of the input component. Input variants will either be replaced by the Textarea variants or ignored.\n {\n variants: {\n size: {\n default: \"min-h-[80px] px-4 py-3\",\n sm: \"min-h-[60px] px-3 py-2\",\n },\n resize: {\n none: \"resize-none\",\n vertical: \"resize-y\",\n horizontal: \"resize-x\",\n both: \"resize\",\n },\n },\n defaultVariants: {\n size: \"default\",\n resize: \"none\",\n },\n }\n);\n\n/**\n * Props for Textarea component.\n * @property size - Input size: `\"default\"` or `\"sm\"`\n * @property resize - Resize behavior: `\"none\"` (default), `\"vertical\"`, `\"horizontal\"`, or `\"both\"`\n */\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n VariantProps<typeof textareaVariants> {\n ref?: Ref<HTMLTextAreaElement>;\n}\n\nconst Textarea = ({ className, resize, size, ref, ...props }: TextareaProps) => (\n <textarea\n className={cn(textareaVariants({ resize, size, className }))}\n ref={ref}\n {...props}\n />\n);\n\nexport { Textarea, textareaVariants };\n"],
5
- "mappings": "AAyDE;AAxCF,SAAS,WAA8B;AAGvC,SAAS,UAAU;AACnB,SAAS,qBAAqB;AAE9B,MAAM,mBAAmB;AAAA,EACvB,cAAc;AAAA;AAAA,EACd;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,MACN;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAaA,MAAM,WAAW,CAAC,EAAE,WAAW,QAAQ,MAAM,KAAK,GAAG,MAAM,MACzD;AAAA,EAAC;AAAA;AAAA,IACC,WAAW,GAAG,iBAAiB,EAAE,QAAQ,MAAM,UAAU,CAAC,CAAC;AAAA,IAC3D;AAAA,IACC,GAAG;AAAA;AACN;",
4
+ "sourcesContent": ["/**\n * @module Textarea\n *\n * Multi-line text input field. Inherits styling from Input component.\n *\n * @example\n * // Basic textarea\n * <Textarea placeholder=\"Enter description...\" />\n *\n * @example\n * // Resizable textarea\n * <Textarea resize=\"vertical\" />\n *\n * @example\n * // Small size\n * <Textarea size=\"sm\" rows={3} />\n */\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type { Ref } from \"react\";\n\nimport { cn } from \"../lib/utils\";\nimport { inputVariants } from \"./input\";\n\nconst textareaVariants = cva(\n inputVariants(), // inherits the base classes of the input component. Input variants will either be replaced by the Textarea variants or ignored.\n {\n variants: {\n size: {\n default: \"min-h-[80px] px-4 py-3\",\n sm: \"min-h-[60px] px-3 py-2\",\n },\n resize: {\n none: \"resize-none\",\n vertical: \"resize-y\",\n horizontal: \"resize-x\",\n both: \"resize\",\n },\n },\n defaultVariants: {\n size: \"default\",\n resize: \"none\",\n },\n }\n);\n\n/**\n * Props for Textarea component.\n * @property size - Input size: `\"default\"` or `\"sm\"`\n * @property resize - Resize behavior: `\"none\"` (default), `\"vertical\"`, `\"horizontal\"`, or `\"both\"`\n */\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n VariantProps<typeof textareaVariants> {\n ref?: Ref<HTMLTextAreaElement>;\n}\n\nconst Textarea = ({\n className,\n resize,\n size,\n ref,\n ...props\n}: TextareaProps) => (\n <textarea\n className={cn(textareaVariants({ resize, size, className }))}\n ref={ref}\n {...props}\n />\n);\n\nexport { Textarea, textareaVariants };\n"],
5
+ "mappings": "AA+DE;AA9CF,SAAS,WAA8B;AAGvC,SAAS,UAAU;AACnB,SAAS,qBAAqB;AAE9B,MAAM,mBAAmB;AAAA,EACvB,cAAc;AAAA;AAAA,EACd;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,MACN;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAaA,MAAM,WAAW,CAAC;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA;AAAA,IACC,WAAW,GAAG,iBAAiB,EAAE,QAAQ,MAAM,UAAU,CAAC,CAAC;AAAA,IAC3D;AAAA,IACC,GAAG;AAAA;AACN;",
6
6
  "names": []
7
7
  }
@@ -143,7 +143,11 @@ const createGlobalToast = (variant, options) => {
143
143
  variant
144
144
  }
145
145
  ),
146
- { ...customId !== void 0 && { id: customId }, toasterId: GLOBAL_TOASTER_ID, ...rest }
146
+ {
147
+ ...customId !== void 0 && { id: customId },
148
+ toasterId: GLOBAL_TOASTER_ID,
149
+ ...rest
150
+ }
147
151
  );
148
152
  return customId !== void 0 ? customId : toastId;
149
153
  };
@@ -153,13 +157,34 @@ const normalizeToastArgs = (messageOrOptions, options) => {
153
157
  }
154
158
  return messageOrOptions;
155
159
  };
156
- const toast = ((messageOrOptions, options) => createGlobalToast("info", normalizeToastArgs(messageOrOptions, options)));
157
- toast.success = ((messageOrOptions, options) => createGlobalToast("success", normalizeToastArgs(messageOrOptions, options)));
158
- toast.error = ((messageOrOptions, options) => createGlobalToast("error", normalizeToastArgs(messageOrOptions, options)));
159
- toast.info = ((messageOrOptions, options) => createGlobalToast("info", normalizeToastArgs(messageOrOptions, options)));
160
- toast.warning = ((messageOrOptions, options) => createGlobalToast("warning", normalizeToastArgs(messageOrOptions, options)));
161
- toast.loading = ((messageOrOptions, options) => createGlobalToast("loading", normalizeToastArgs(messageOrOptions, options)));
162
- toast.message = ((messageOrOptions, options) => createGlobalToast("info", normalizeToastArgs(messageOrOptions, options)));
160
+ const toast = ((messageOrOptions, options) => createGlobalToast(
161
+ "info",
162
+ normalizeToastArgs(messageOrOptions, options)
163
+ ));
164
+ toast.success = ((messageOrOptions, options) => createGlobalToast(
165
+ "success",
166
+ normalizeToastArgs(messageOrOptions, options)
167
+ ));
168
+ toast.error = ((messageOrOptions, options) => createGlobalToast(
169
+ "error",
170
+ normalizeToastArgs(messageOrOptions, options)
171
+ ));
172
+ toast.info = ((messageOrOptions, options) => createGlobalToast(
173
+ "info",
174
+ normalizeToastArgs(messageOrOptions, options)
175
+ ));
176
+ toast.warning = ((messageOrOptions, options) => createGlobalToast(
177
+ "warning",
178
+ normalizeToastArgs(messageOrOptions, options)
179
+ ));
180
+ toast.loading = ((messageOrOptions, options) => createGlobalToast(
181
+ "loading",
182
+ normalizeToastArgs(messageOrOptions, options)
183
+ ));
184
+ toast.message = ((messageOrOptions, options) => createGlobalToast(
185
+ "info",
186
+ normalizeToastArgs(messageOrOptions, options)
187
+ ));
163
188
  toast.promise = (promiseOrFn, states) => {
164
189
  const toastId = createGlobalToast("loading", states.loading);
165
190
  const promise = typeof promiseOrFn === "function" ? promiseOrFn() : promiseOrFn;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/toast.tsx"],
4
- "sourcesContent": ["/**\n * @module Toast\n *\n * Toast notification system built on Sonner. Provides success, error, info, and warning variants.\n *\n * @see {@link https://ui.shadcn.com/docs/components/sonner Shadcn Sonner}\n * @see {@link https://sonner.emilkowal.ski/ Sonner Documentation}\n *\n * @example\n * // Setup: Add Toaster to your app root\n * <Toaster />\n *\n * @example\n * // Show toast notifications\n * toast(\"Default message\");\n * toast.success(\"Operation completed\");\n * toast.error(\"Something went wrong\");\n * toast.info(\"Information\");\n * toast.warning(\"Warning message\");\n *\n * @example\n * // With action button\n * toast({\n * title: \"Item deleted\",\n * action: {\n * label: \"Undo\",\n * onClick: () => undoDelete(),\n * },\n * });\n *\n * @example\n * // Promise toast\n * const id = toast.promise(promise, {\n loading: { title: \"Saving document...\" },\n success: (data) => ({\n title: `${data.name} saved successfully!`,\n duration: 10_000,\n }),\n\n error: { title: \"Failed to save document\", duration: 10_000 },\n });\n */\nimport { cva } from \"class-variance-authority\";\nimport type React from \"react\";\nimport type { ReactNode } from \"react\";\nimport {\n type ExternalToast,\n Toaster as SonnerToaster,\n toast as sonnerToast,\n} from \"sonner\";\nimport { Button, type ButtonProps, cn } from \"..\";\nimport { Check, CircleX, InfoIcon, Loader, TriangleAlert, X } from \"../icons\";\n\ntype ToasterProps = React.ComponentProps<typeof SonnerToaster>;\ntype ToastVariant = \"error\" | \"info\" | \"loading\" | \"success\" | \"warning\";\n\nconst GLOBAL_TOASTER_ID = \"global\";\n\ntype GlobalToastAction = {\n label: string;\n onClick: () => void;\n};\n\ntype GlobalToastProps = {\n id: string | number;\n title?: string;\n description?: string;\n variant: ToastVariant;\n action?: GlobalToastAction;\n};\n\nexport interface GlobalToastOptions extends ExternalToast {\n title?: string;\n description?: string;\n action?: GlobalToastAction;\n}\n\nconst GlobalToastTitle = ({\n className,\n children,\n}: {\n className?: string;\n children: ReactNode;\n}) => {\n if (!children) {\n return;\n }\n\n return (\n <div\n className={cn(\n \"line-clamp-1 font-semibold text-black text-sm dark:text-white w-[90%]\",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nconst GlobalToastDescription = ({ children }: { children: ReactNode }) => {\n if (!children) {\n return;\n }\n\n return (\n <div className=\"line-clamp-2 font-normal text-gray-700 text-sm dark:text-gray-200 \">\n {children}\n </div>\n );\n};\n\nconst globalToastIconVariants = cva(\n \"size-7 flex-shrink-0 rounded-full flex items-center justify-center [&_svg]:size-4\",\n {\n variants: {\n variant: {\n error:\n \"bg-red-50 dark:bg-red-950 [&_svg]:text-red-500 [&_svg]:dark:text-red-400\",\n info: \"bg-gray-100 dark:bg-gray-800 [&_svg]:text-gray-700 [&_svg]:dark:text-gray-200\",\n loading:\n \"bg-gray-100 dark:bg-gray-800 [&_svg]:text-gray-700 [&_svg]:dark:text-gray-200\",\n success:\n \"bg-green-50 dark:bg-green-950 [&_svg]:text-green-500 [&_svg]:dark:text-green-400\",\n warning:\n \"bg-yellow-50 dark:bg-yellow-950 [&_svg]:text-yellow-500 [&_svg]:dark:text-yellow-400\",\n },\n },\n defaultVariants: {\n variant: \"info\",\n },\n }\n);\n\nconst GlobalToastIcon = ({ variant }: { variant: ToastVariant }) => {\n if (variant === \"error\") {\n return (\n <span className={cn(globalToastIconVariants({ variant }))}>\n <CircleX />\n </span>\n );\n }\n\n if (variant === \"info\") {\n return (\n <span className={cn(globalToastIconVariants({ variant }))}>\n <InfoIcon />\n </span>\n );\n }\n\n if (variant === \"loading\") {\n return (\n <span className={cn(globalToastIconVariants({ variant }))}>\n <Loader\n className=\"animate-spin\"\n style={{ animationDuration: \"1.5s\" }}\n />\n </span>\n );\n }\n\n if (variant === \"success\") {\n return (\n <span className={cn(globalToastIconVariants({ variant }))}>\n <Check />\n </span>\n );\n }\n\n if (variant === \"warning\") {\n return (\n <span className={cn(globalToastIconVariants({ variant }))}>\n <TriangleAlert className=\"pb-[1px]\" />\n </span>\n );\n }\n};\n\nconst globalToastLeftBorderVariants = cva(\"absolute top-0 left-0 h-full w-1\", {\n variants: {\n variant: {\n error: \"bg-red-500 dark:bg-red-400\",\n info: \"bg-gray-700 dark:bg-gray-200\",\n loading: \"bg-gray-700 dark:bg-gray-200\",\n success: \"bg-green-500 dark:bg-green-400\",\n warning: \"bg-yellow-500 dark:bg-yellow-400\",\n },\n },\n defaultVariants: {\n variant: \"info\",\n },\n});\n\nconst GlobalToastLeftBorder = ({ variant }: { variant: ToastVariant }) => (\n <div className={cn(globalToastLeftBorderVariants({ variant }))} />\n);\n\nconst GlobalToastDismissButton = ({\n toastId,\n}: {\n toastId: number | string;\n}) => (\n <Button\n className=\"absolute top-1 right-1\"\n onClick={() => sonnerToast.dismiss(toastId)}\n size=\"icon\"\n variant=\"subtle\"\n >\n <X className=\"size-5\" />\n </Button>\n);\n\nconst GlobalToastActionButton = ({ onClick, ...props }: ButtonProps) => (\n <Button onClick={onClick} size=\"sm\" variant=\"light\" {...props} />\n);\n\nexport const GlobalToast = (props: GlobalToastProps) => {\n const { id, title, description, variant, action } = props;\n\n return (\n <div\n className={cn(\n \"flex max-h-24 min-h-16 w-full xs:w-80 md:w-[360px] items-center gap-2 rounded-lg border-1 border-gray-150 border-solid bg-white px-4 py-3 text-black shadow-md dark:border-gray-800 dark:bg-black dark:text-white\",\n \"relative overflow-hidden\"\n )}\n key={id}\n >\n <GlobalToastLeftBorder variant={variant} />\n <GlobalToastIcon variant={variant} />\n <div className=\"flex w-full flex-col gap-0.5\">\n <GlobalToastTitle className={action ? \"w-full\" : \"w-[90%]\"}>\n {title}\n </GlobalToastTitle>\n <GlobalToastDescription>{description}</GlobalToastDescription>\n </div>\n\n {action ? (\n <GlobalToastActionButton onClick={action.onClick}>\n {action.label}\n </GlobalToastActionButton>\n ) : (\n <GlobalToastDismissButton toastId={id} />\n )}\n </div>\n );\n};\n\n/**\n * Toast container component. Place once at app root.\n * Positioned bottom-right by default, shows up to 4 toasts.\n */\nconst Toaster: React.FC<ToasterProps> = ({ toastOptions, ...props }) => (\n <SonnerToaster\n id={GLOBAL_TOASTER_ID}\n position=\"bottom-right\"\n visibleToasts={4}\n {...props}\n />\n);\n\nconst createGlobalToast = (\n variant: ToastVariant,\n options?: GlobalToastOptions\n) => {\n const { action, description, title, id: customId, ...rest } = options || {};\n\n const toastId = sonnerToast.custom(\n (id) => (\n <GlobalToast\n action={action}\n description={description}\n id={customId || id}\n title={title}\n variant={variant}\n />\n ),\n { ...(customId !== undefined && { id: customId }), toasterId: GLOBAL_TOASTER_ID, ...rest }\n );\n\n // Return the custom ID if provided, otherwise return Sonner's generated ID\n return customId !== undefined ? customId : toastId;\n};\n\n// Helper method to normalize toast arguments\nconst normalizeToastArgs = (\n messageOrOptions?: GlobalToastOptions | string,\n options?: GlobalToastOptions\n): GlobalToastOptions | undefined => {\n if (typeof messageOrOptions === \"string\") {\n return { ...options, title: messageOrOptions };\n }\n\n return messageOrOptions;\n};\n\ntype PromiseToastOptions<T> = {\n loading: GlobalToastOptions;\n success: GlobalToastOptions | ((data: T) => GlobalToastOptions);\n error: GlobalToastOptions | ((error: unknown) => GlobalToastOptions);\n};\n\ntype ToastFunction = {\n (message: string, options?: GlobalToastOptions): string | number;\n (options: GlobalToastOptions): string | number;\n success: {\n (message: string, options?: GlobalToastOptions): string | number;\n (options: GlobalToastOptions): string | number;\n };\n error: {\n (message: string, options?: GlobalToastOptions): string | number;\n (options: GlobalToastOptions): string | number;\n };\n info: {\n (message: string, options?: GlobalToastOptions): string | number;\n (options: GlobalToastOptions): string | number;\n };\n warning: {\n (message: string, options?: GlobalToastOptions): string | number;\n (options: GlobalToastOptions): string | number;\n };\n loading: {\n (message: string, options?: GlobalToastOptions): string | number;\n (options: GlobalToastOptions): string | number;\n };\n message: {\n (message: string, options?: GlobalToastOptions): string | number;\n (options: GlobalToastOptions): string | number;\n };\n custom: typeof sonnerToast.custom;\n promise: <T>(\n promise: Promise<T> | (() => Promise<T>),\n options: PromiseToastOptions<T>\n ) => Promise<T>;\n dismiss: typeof sonnerToast.dismiss;\n getHistory: typeof sonnerToast.getHistory;\n getToasts: typeof sonnerToast.getToasts;\n};\n\nconst toast: ToastFunction = ((\n messageOrOptions?: GlobalToastOptions | string,\n options?: GlobalToastOptions\n) =>\n createGlobalToast(\"info\", normalizeToastArgs(messageOrOptions, options))) as ToastFunction;\n\ntoast.success = ((\n messageOrOptions?: GlobalToastOptions | string,\n options?: GlobalToastOptions\n) =>\n createGlobalToast(\"success\", normalizeToastArgs(messageOrOptions, options))) as ToastFunction[\"success\"];\n\ntoast.error = ((\n messageOrOptions?: GlobalToastOptions | string,\n options?: GlobalToastOptions\n) =>\n createGlobalToast(\"error\", normalizeToastArgs(messageOrOptions, options))) as ToastFunction[\"error\"];\n\ntoast.info = ((\n messageOrOptions?: GlobalToastOptions | string,\n options?: GlobalToastOptions\n) =>\n createGlobalToast(\"info\", normalizeToastArgs(messageOrOptions, options))) as ToastFunction[\"info\"];\n\ntoast.warning = ((\n messageOrOptions?: GlobalToastOptions | string,\n options?: GlobalToastOptions\n) =>\n createGlobalToast(\"warning\", normalizeToastArgs(messageOrOptions, options))) as ToastFunction[\"warning\"];\n\ntoast.loading = ((\n messageOrOptions?: GlobalToastOptions | string,\n options?: GlobalToastOptions\n) =>\n createGlobalToast(\"loading\", normalizeToastArgs(messageOrOptions, options))) as ToastFunction[\"loading\"];\n\ntoast.message = ((\n messageOrOptions?: GlobalToastOptions | string,\n options?: GlobalToastOptions\n) =>\n createGlobalToast(\"info\", normalizeToastArgs(messageOrOptions, options))) as ToastFunction[\"message\"];\n\ntoast.promise = <T,>(\n promiseOrFn: Promise<T> | (() => Promise<T>),\n states: PromiseToastOptions<T>\n): Promise<T> => {\n const toastId = createGlobalToast(\"loading\", states.loading);\n const promise =\n typeof promiseOrFn === \"function\" ? promiseOrFn() : promiseOrFn;\n\n promise\n .then((data) => {\n const successToastOptions =\n typeof states.success === \"function\"\n ? states.success(data)\n : states.success;\n\n const { title, description, action, ...rest } = successToastOptions || {};\n\n sonnerToast.custom(\n (id) => (\n <GlobalToast\n action={action}\n description={description}\n id={id}\n title={title}\n variant=\"success\"\n />\n ),\n { id: toastId, toasterId: GLOBAL_TOASTER_ID, ...rest }\n );\n })\n .catch((error) => {\n const errorToastOptions =\n typeof states.error === \"function\" ? states.error(error) : states.error;\n\n const { title, description, action, ...rest } = errorToastOptions || {};\n\n sonnerToast.custom(\n (id) => (\n <GlobalToast\n action={action}\n description={description}\n id={id}\n title={title}\n variant=\"error\"\n />\n ),\n { id: toastId, toasterId: GLOBAL_TOASTER_ID, ...rest }\n );\n });\n\n return promise;\n};\n\ntoast.custom = sonnerToast.custom;\ntoast.dismiss = sonnerToast.dismiss;\ntoast.getHistory = sonnerToast.getHistory;\ntoast.getToasts = sonnerToast.getToasts;\n\nexport { Toaster, toast, type ToasterProps };\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * @module Toast\n *\n * Toast notification system built on Sonner. Provides success, error, info, and warning variants.\n *\n * @see {@link https://ui.shadcn.com/docs/components/sonner Shadcn Sonner}\n * @see {@link https://sonner.emilkowal.ski/ Sonner Documentation}\n *\n * @example\n * // Setup: Add Toaster to your app root\n * <Toaster />\n *\n * @example\n * // Show toast notifications\n * toast(\"Default message\");\n * toast.success(\"Operation completed\");\n * toast.error(\"Something went wrong\");\n * toast.info(\"Information\");\n * toast.warning(\"Warning message\");\n *\n * @example\n * // With action button\n * toast({\n * title: \"Item deleted\",\n * action: {\n * label: \"Undo\",\n * onClick: () => undoDelete(),\n * },\n * });\n *\n * @example\n * // Promise toast\n * const id = toast.promise(promise, {\n loading: { title: \"Saving document...\" },\n success: (data) => ({\n title: `${data.name} saved successfully!`,\n duration: 10_000,\n }),\n\n error: { title: \"Failed to save document\", duration: 10_000 },\n });\n */\nimport { cva } from \"class-variance-authority\";\nimport type React from \"react\";\nimport type { ReactNode } from \"react\";\nimport {\n type ExternalToast,\n Toaster as SonnerToaster,\n toast as sonnerToast,\n} from \"sonner\";\nimport { Button, type ButtonProps, cn } from \"..\";\nimport { Check, CircleX, InfoIcon, Loader, TriangleAlert, X } from \"../icons\";\n\ntype ToasterProps = React.ComponentProps<typeof SonnerToaster>;\ntype ToastVariant = \"error\" | \"info\" | \"loading\" | \"success\" | \"warning\";\n\nconst GLOBAL_TOASTER_ID = \"global\";\n\ntype GlobalToastAction = {\n label: string;\n onClick: () => void;\n};\n\ntype GlobalToastProps = {\n id: string | number;\n title?: string;\n description?: string;\n variant: ToastVariant;\n action?: GlobalToastAction;\n};\n\nexport interface GlobalToastOptions extends ExternalToast {\n title?: string;\n description?: string;\n action?: GlobalToastAction;\n}\n\nconst GlobalToastTitle = ({\n className,\n children,\n}: {\n className?: string;\n children: ReactNode;\n}) => {\n if (!children) {\n return;\n }\n\n return (\n <div\n className={cn(\n \"line-clamp-1 font-semibold text-black text-sm dark:text-white w-[90%]\",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nconst GlobalToastDescription = ({ children }: { children: ReactNode }) => {\n if (!children) {\n return;\n }\n\n return (\n <div className=\"line-clamp-2 font-normal text-gray-700 text-sm dark:text-gray-200 \">\n {children}\n </div>\n );\n};\n\nconst globalToastIconVariants = cva(\n \"size-7 flex-shrink-0 rounded-full flex items-center justify-center [&_svg]:size-4\",\n {\n variants: {\n variant: {\n error:\n \"bg-red-50 dark:bg-red-950 [&_svg]:text-red-500 [&_svg]:dark:text-red-400\",\n info: \"bg-gray-100 dark:bg-gray-800 [&_svg]:text-gray-700 [&_svg]:dark:text-gray-200\",\n loading:\n \"bg-gray-100 dark:bg-gray-800 [&_svg]:text-gray-700 [&_svg]:dark:text-gray-200\",\n success:\n \"bg-green-50 dark:bg-green-950 [&_svg]:text-green-500 [&_svg]:dark:text-green-400\",\n warning:\n \"bg-yellow-50 dark:bg-yellow-950 [&_svg]:text-yellow-500 [&_svg]:dark:text-yellow-400\",\n },\n },\n defaultVariants: {\n variant: \"info\",\n },\n }\n);\n\nconst GlobalToastIcon = ({ variant }: { variant: ToastVariant }) => {\n if (variant === \"error\") {\n return (\n <span className={cn(globalToastIconVariants({ variant }))}>\n <CircleX />\n </span>\n );\n }\n\n if (variant === \"info\") {\n return (\n <span className={cn(globalToastIconVariants({ variant }))}>\n <InfoIcon />\n </span>\n );\n }\n\n if (variant === \"loading\") {\n return (\n <span className={cn(globalToastIconVariants({ variant }))}>\n <Loader\n className=\"animate-spin\"\n style={{ animationDuration: \"1.5s\" }}\n />\n </span>\n );\n }\n\n if (variant === \"success\") {\n return (\n <span className={cn(globalToastIconVariants({ variant }))}>\n <Check />\n </span>\n );\n }\n\n if (variant === \"warning\") {\n return (\n <span className={cn(globalToastIconVariants({ variant }))}>\n <TriangleAlert className=\"pb-[1px]\" />\n </span>\n );\n }\n};\n\nconst globalToastLeftBorderVariants = cva(\"absolute top-0 left-0 h-full w-1\", {\n variants: {\n variant: {\n error: \"bg-red-500 dark:bg-red-400\",\n info: \"bg-gray-700 dark:bg-gray-200\",\n loading: \"bg-gray-700 dark:bg-gray-200\",\n success: \"bg-green-500 dark:bg-green-400\",\n warning: \"bg-yellow-500 dark:bg-yellow-400\",\n },\n },\n defaultVariants: {\n variant: \"info\",\n },\n});\n\nconst GlobalToastLeftBorder = ({ variant }: { variant: ToastVariant }) => (\n <div className={cn(globalToastLeftBorderVariants({ variant }))} />\n);\n\nconst GlobalToastDismissButton = ({\n toastId,\n}: {\n toastId: number | string;\n}) => (\n <Button\n className=\"absolute top-1 right-1\"\n onClick={() => sonnerToast.dismiss(toastId)}\n size=\"icon\"\n variant=\"subtle\"\n >\n <X className=\"size-5\" />\n </Button>\n);\n\nconst GlobalToastActionButton = ({ onClick, ...props }: ButtonProps) => (\n <Button onClick={onClick} size=\"sm\" variant=\"light\" {...props} />\n);\n\nexport const GlobalToast = (props: GlobalToastProps) => {\n const { id, title, description, variant, action } = props;\n\n return (\n <div\n className={cn(\n \"flex max-h-24 min-h-16 w-full xs:w-80 md:w-[360px] items-center gap-2 rounded-lg border-1 border-gray-150 border-solid bg-white px-4 py-3 text-black shadow-md dark:border-gray-800 dark:bg-black dark:text-white\",\n \"relative overflow-hidden\"\n )}\n key={id}\n >\n <GlobalToastLeftBorder variant={variant} />\n <GlobalToastIcon variant={variant} />\n <div className=\"flex w-full flex-col gap-0.5\">\n <GlobalToastTitle className={action ? \"w-full\" : \"w-[90%]\"}>\n {title}\n </GlobalToastTitle>\n <GlobalToastDescription>{description}</GlobalToastDescription>\n </div>\n\n {action ? (\n <GlobalToastActionButton onClick={action.onClick}>\n {action.label}\n </GlobalToastActionButton>\n ) : (\n <GlobalToastDismissButton toastId={id} />\n )}\n </div>\n );\n};\n\n/**\n * Toast container component. Place once at app root.\n * Positioned bottom-right by default, shows up to 4 toasts.\n */\nconst Toaster: React.FC<ToasterProps> = ({ toastOptions, ...props }) => (\n <SonnerToaster\n id={GLOBAL_TOASTER_ID}\n position=\"bottom-right\"\n visibleToasts={4}\n {...props}\n />\n);\n\nconst createGlobalToast = (\n variant: ToastVariant,\n options?: GlobalToastOptions\n) => {\n const { action, description, title, id: customId, ...rest } = options || {};\n\n const toastId = sonnerToast.custom(\n (id) => (\n <GlobalToast\n action={action}\n description={description}\n id={customId || id}\n title={title}\n variant={variant}\n />\n ),\n {\n ...(customId !== undefined && { id: customId }),\n toasterId: GLOBAL_TOASTER_ID,\n ...rest,\n }\n );\n\n // Return the custom ID if provided, otherwise return Sonner's generated ID\n return customId !== undefined ? customId : toastId;\n};\n\n// Helper method to normalize toast arguments\nconst normalizeToastArgs = (\n messageOrOptions?: GlobalToastOptions | string,\n options?: GlobalToastOptions\n): GlobalToastOptions | undefined => {\n if (typeof messageOrOptions === \"string\") {\n return { ...options, title: messageOrOptions };\n }\n\n return messageOrOptions;\n};\n\ntype PromiseToastOptions<T> = {\n loading: GlobalToastOptions;\n success: GlobalToastOptions | ((data: T) => GlobalToastOptions);\n error: GlobalToastOptions | ((error: unknown) => GlobalToastOptions);\n};\n\ntype ToastFunction = {\n (message: string, options?: GlobalToastOptions): string | number;\n (options: GlobalToastOptions): string | number;\n success: {\n (message: string, options?: GlobalToastOptions): string | number;\n (options: GlobalToastOptions): string | number;\n };\n error: {\n (message: string, options?: GlobalToastOptions): string | number;\n (options: GlobalToastOptions): string | number;\n };\n info: {\n (message: string, options?: GlobalToastOptions): string | number;\n (options: GlobalToastOptions): string | number;\n };\n warning: {\n (message: string, options?: GlobalToastOptions): string | number;\n (options: GlobalToastOptions): string | number;\n };\n loading: {\n (message: string, options?: GlobalToastOptions): string | number;\n (options: GlobalToastOptions): string | number;\n };\n message: {\n (message: string, options?: GlobalToastOptions): string | number;\n (options: GlobalToastOptions): string | number;\n };\n custom: typeof sonnerToast.custom;\n promise: <T>(\n promise: Promise<T> | (() => Promise<T>),\n options: PromiseToastOptions<T>\n ) => Promise<T>;\n dismiss: typeof sonnerToast.dismiss;\n getHistory: typeof sonnerToast.getHistory;\n getToasts: typeof sonnerToast.getToasts;\n};\n\nconst toast: ToastFunction = ((\n messageOrOptions?: GlobalToastOptions | string,\n options?: GlobalToastOptions\n) =>\n createGlobalToast(\n \"info\",\n normalizeToastArgs(messageOrOptions, options)\n )) as ToastFunction;\n\ntoast.success = ((\n messageOrOptions?: GlobalToastOptions | string,\n options?: GlobalToastOptions\n) =>\n createGlobalToast(\n \"success\",\n normalizeToastArgs(messageOrOptions, options)\n )) as ToastFunction[\"success\"];\n\ntoast.error = ((\n messageOrOptions?: GlobalToastOptions | string,\n options?: GlobalToastOptions\n) =>\n createGlobalToast(\n \"error\",\n normalizeToastArgs(messageOrOptions, options)\n )) as ToastFunction[\"error\"];\n\ntoast.info = ((\n messageOrOptions?: GlobalToastOptions | string,\n options?: GlobalToastOptions\n) =>\n createGlobalToast(\n \"info\",\n normalizeToastArgs(messageOrOptions, options)\n )) as ToastFunction[\"info\"];\n\ntoast.warning = ((\n messageOrOptions?: GlobalToastOptions | string,\n options?: GlobalToastOptions\n) =>\n createGlobalToast(\n \"warning\",\n normalizeToastArgs(messageOrOptions, options)\n )) as ToastFunction[\"warning\"];\n\ntoast.loading = ((\n messageOrOptions?: GlobalToastOptions | string,\n options?: GlobalToastOptions\n) =>\n createGlobalToast(\n \"loading\",\n normalizeToastArgs(messageOrOptions, options)\n )) as ToastFunction[\"loading\"];\n\ntoast.message = ((\n messageOrOptions?: GlobalToastOptions | string,\n options?: GlobalToastOptions\n) =>\n createGlobalToast(\n \"info\",\n normalizeToastArgs(messageOrOptions, options)\n )) as ToastFunction[\"message\"];\n\ntoast.promise = <T,>(\n promiseOrFn: Promise<T> | (() => Promise<T>),\n states: PromiseToastOptions<T>\n): Promise<T> => {\n const toastId = createGlobalToast(\"loading\", states.loading);\n const promise =\n typeof promiseOrFn === \"function\" ? promiseOrFn() : promiseOrFn;\n\n promise\n .then((data) => {\n const successToastOptions =\n typeof states.success === \"function\"\n ? states.success(data)\n : states.success;\n\n const { title, description, action, ...rest } = successToastOptions || {};\n\n sonnerToast.custom(\n (id) => (\n <GlobalToast\n action={action}\n description={description}\n id={id}\n title={title}\n variant=\"success\"\n />\n ),\n { id: toastId, toasterId: GLOBAL_TOASTER_ID, ...rest }\n );\n })\n .catch((error) => {\n const errorToastOptions =\n typeof states.error === \"function\" ? states.error(error) : states.error;\n\n const { title, description, action, ...rest } = errorToastOptions || {};\n\n sonnerToast.custom(\n (id) => (\n <GlobalToast\n action={action}\n description={description}\n id={id}\n title={title}\n variant=\"error\"\n />\n ),\n { id: toastId, toasterId: GLOBAL_TOASTER_ID, ...rest }\n );\n });\n\n return promise;\n};\n\ntoast.custom = sonnerToast.custom;\ntoast.dismiss = sonnerToast.dismiss;\ntoast.getHistory = sonnerToast.getHistory;\ntoast.getToasts = sonnerToast.getToasts;\n\nexport { Toaster, toast, type ToasterProps };\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -53,7 +53,14 @@ const headingVariants = cva("font-semibold text-gray-950 dark:text-white", {
53
53
  fontFamily: "brand"
54
54
  }
55
55
  });
56
- const Heading = ({ className, variant, fontFamily, asChild = false, ref, ...props }) => {
56
+ const Heading = ({
57
+ className,
58
+ variant,
59
+ fontFamily,
60
+ asChild = false,
61
+ ref,
62
+ ...props
63
+ }) => {
57
64
  const Comp = asChild ? SlotPrimitive.Slot : variant ?? "h1";
58
65
  return /* @__PURE__ */ jsx(
59
66
  Comp,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/typography/heading.tsx"],
4
- "sourcesContent": ["import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\nimport type { Ref } from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst headingVariants = cva(\"font-semibold text-gray-950 dark:text-white\", {\n variants: {\n variant: {\n h1: \"text-4xl @md:text-5xl\",\n h2: \"text-3xl @md:text-4xl\",\n h3: \"text-2xl @md:text-3xl\",\n h4: \"text-xl @md:text-2xl\",\n h5: \"text-lg @md:text-xl\",\n h6: \"text-base @md:text-lg\",\n },\n fontFamily: {\n brand: \"font-heading\",\n },\n },\n compoundVariants: [\n {\n variant: \"h1\",\n fontFamily: \"brand\",\n className: \"font-bold\",\n },\n {\n variant: \"h2\",\n fontFamily: \"brand\",\n className: \"font-bold\",\n },\n {\n variant: \"h3\",\n fontFamily: \"brand\",\n className: \"font-semibold\",\n },\n {\n variant: \"h4\",\n fontFamily: \"brand\",\n className: \"font-semibold\",\n },\n {\n variant: \"h5\",\n fontFamily: \"brand\",\n className: \"font-semibold\",\n },\n {\n variant: \"h6\",\n fontFamily: \"brand\",\n className: \"font-semibold\",\n },\n ],\n defaultVariants: {\n variant: \"h1\",\n fontFamily: \"brand\",\n },\n});\n\nexport interface HeadingProps\n extends React.HTMLAttributes<HTMLHeadingElement>,\n VariantProps<typeof headingVariants> {\n asChild?: boolean;\n ref?: Ref<HTMLHeadingElement>;\n}\n\nconst Heading = ({ className, variant, fontFamily, asChild = false, ref, ...props }: HeadingProps) => {\n const Comp = asChild ? SlotPrimitive.Slot : (variant ?? \"h1\");\n\n return (\n <Comp\n className={cn(headingVariants({ variant, fontFamily }), className)}\n ref={ref}\n {...props}\n />\n );\n};\n\nconst Alpha = (props: Omit<HeadingProps, \"variant\">) => <Heading variant=\"h1\" {...props} />;\n\nconst Bravo = (props: Omit<HeadingProps, \"variant\">) => <Heading variant=\"h2\" {...props} />;\n\nconst Charlie = (props: Omit<HeadingProps, \"variant\">) => <Heading variant=\"h3\" {...props} />;\n\nconst Delta = (props: Omit<HeadingProps, \"variant\">) => <Heading variant=\"h4\" {...props} />;\n\nconst Echo = (props: Omit<HeadingProps, \"variant\">) => <Heading variant=\"h5\" {...props} />;\n\nconst Foxtrot = (props: Omit<HeadingProps, \"variant\">) => <Heading variant=\"h6\" {...props} />;\n\nexport {\n Heading,\n Alpha,\n Bravo,\n Charlie,\n Delta,\n Echo,\n Foxtrot,\n headingVariants,\n};\n"],
5
- "mappings": "AAsEI;AAtEJ,SAAS,WAA8B;AACvC,SAAS,QAAQ,qBAAqB;AAItC,SAAS,UAAU;AAEnB,MAAM,kBAAkB,IAAI,+CAA+C;AAAA,EACzE,UAAU;AAAA,IACR,SAAS;AAAA,MACP,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,IACA,YAAY;AAAA,MACV,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB;AAAA,MACE,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AACF,CAAC;AASD,MAAM,UAAU,CAAC,EAAE,WAAW,SAAS,YAAY,UAAU,OAAO,KAAK,GAAG,MAAM,MAAoB;AACpG,QAAM,OAAO,UAAU,cAAc,OAAQ,WAAW;AAExD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,gBAAgB,EAAE,SAAS,WAAW,CAAC,GAAG,SAAS;AAAA,MACjE;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,MAAM,QAAQ,CAAC,UAAyC,oBAAC,WAAQ,SAAQ,MAAM,GAAG,OAAO;AAEzF,MAAM,QAAQ,CAAC,UAAyC,oBAAC,WAAQ,SAAQ,MAAM,GAAG,OAAO;AAEzF,MAAM,UAAU,CAAC,UAAyC,oBAAC,WAAQ,SAAQ,MAAM,GAAG,OAAO;AAE3F,MAAM,QAAQ,CAAC,UAAyC,oBAAC,WAAQ,SAAQ,MAAM,GAAG,OAAO;AAEzF,MAAM,OAAO,CAAC,UAAyC,oBAAC,WAAQ,SAAQ,MAAM,GAAG,OAAO;AAExF,MAAM,UAAU,CAAC,UAAyC,oBAAC,WAAQ,SAAQ,MAAM,GAAG,OAAO;",
4
+ "sourcesContent": ["import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\nimport type { Ref } from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst headingVariants = cva(\"font-semibold text-gray-950 dark:text-white\", {\n variants: {\n variant: {\n h1: \"text-4xl @md:text-5xl\",\n h2: \"text-3xl @md:text-4xl\",\n h3: \"text-2xl @md:text-3xl\",\n h4: \"text-xl @md:text-2xl\",\n h5: \"text-lg @md:text-xl\",\n h6: \"text-base @md:text-lg\",\n },\n fontFamily: {\n brand: \"font-heading\",\n },\n },\n compoundVariants: [\n {\n variant: \"h1\",\n fontFamily: \"brand\",\n className: \"font-bold\",\n },\n {\n variant: \"h2\",\n fontFamily: \"brand\",\n className: \"font-bold\",\n },\n {\n variant: \"h3\",\n fontFamily: \"brand\",\n className: \"font-semibold\",\n },\n {\n variant: \"h4\",\n fontFamily: \"brand\",\n className: \"font-semibold\",\n },\n {\n variant: \"h5\",\n fontFamily: \"brand\",\n className: \"font-semibold\",\n },\n {\n variant: \"h6\",\n fontFamily: \"brand\",\n className: \"font-semibold\",\n },\n ],\n defaultVariants: {\n variant: \"h1\",\n fontFamily: \"brand\",\n },\n});\n\nexport interface HeadingProps\n extends React.HTMLAttributes<HTMLHeadingElement>,\n VariantProps<typeof headingVariants> {\n asChild?: boolean;\n ref?: Ref<HTMLHeadingElement>;\n}\n\nconst Heading = ({\n className,\n variant,\n fontFamily,\n asChild = false,\n ref,\n ...props\n}: HeadingProps) => {\n const Comp = asChild ? SlotPrimitive.Slot : (variant ?? \"h1\");\n\n return (\n <Comp\n className={cn(headingVariants({ variant, fontFamily }), className)}\n ref={ref}\n {...props}\n />\n );\n};\n\nconst Alpha = (props: Omit<HeadingProps, \"variant\">) => (\n <Heading variant=\"h1\" {...props} />\n);\n\nconst Bravo = (props: Omit<HeadingProps, \"variant\">) => (\n <Heading variant=\"h2\" {...props} />\n);\n\nconst Charlie = (props: Omit<HeadingProps, \"variant\">) => (\n <Heading variant=\"h3\" {...props} />\n);\n\nconst Delta = (props: Omit<HeadingProps, \"variant\">) => (\n <Heading variant=\"h4\" {...props} />\n);\n\nconst Echo = (props: Omit<HeadingProps, \"variant\">) => (\n <Heading variant=\"h5\" {...props} />\n);\n\nconst Foxtrot = (props: Omit<HeadingProps, \"variant\">) => (\n <Heading variant=\"h6\" {...props} />\n);\n\nexport {\n Heading,\n Alpha,\n Bravo,\n Charlie,\n Delta,\n Echo,\n Foxtrot,\n headingVariants,\n};\n"],
5
+ "mappings": "AA6EI;AA7EJ,SAAS,WAA8B;AACvC,SAAS,QAAQ,qBAAqB;AAItC,SAAS,UAAU;AAEnB,MAAM,kBAAkB,IAAI,+CAA+C;AAAA,EACzE,UAAU;AAAA,IACR,SAAS;AAAA,MACP,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,IACA,YAAY;AAAA,MACV,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB;AAAA,MACE,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AACF,CAAC;AASD,MAAM,UAAU,CAAC;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,GAAG;AACL,MAAoB;AAClB,QAAM,OAAO,UAAU,cAAc,OAAQ,WAAW;AAExD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,gBAAgB,EAAE,SAAS,WAAW,CAAC,GAAG,SAAS;AAAA,MACjE;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,MAAM,QAAQ,CAAC,UACb,oBAAC,WAAQ,SAAQ,MAAM,GAAG,OAAO;AAGnC,MAAM,QAAQ,CAAC,UACb,oBAAC,WAAQ,SAAQ,MAAM,GAAG,OAAO;AAGnC,MAAM,UAAU,CAAC,UACf,oBAAC,WAAQ,SAAQ,MAAM,GAAG,OAAO;AAGnC,MAAM,QAAQ,CAAC,UACb,oBAAC,WAAQ,SAAQ,MAAM,GAAG,OAAO;AAGnC,MAAM,OAAO,CAAC,UACZ,oBAAC,WAAQ,SAAQ,MAAM,GAAG,OAAO;AAGnC,MAAM,UAAU,CAAC,UACf,oBAAC,WAAQ,SAAQ,MAAM,GAAG,OAAO;",
6
6
  "names": []
7
7
  }
@@ -26,7 +26,14 @@ const listVariants = cva("text-gray-600 dark:text-gray-100", {
26
26
  color: "default"
27
27
  }
28
28
  });
29
- const List = ({ className, size, variant, color, ref, ...props }) => {
29
+ const List = ({
30
+ className,
31
+ size,
32
+ variant,
33
+ color,
34
+ ref,
35
+ ...props
36
+ }) => {
30
37
  const Component = variant === "ordered" ? "ol" : "ul";
31
38
  return /* @__PURE__ */ jsx(
32
39
  Component,
@@ -37,7 +44,13 @@ const List = ({ className, size, variant, color, ref, ...props }) => {
37
44
  }
38
45
  );
39
46
  };
40
- const ListItem = ({ className, customBullet, children, ref, ...props }) => {
47
+ const ListItem = ({
48
+ className,
49
+ customBullet,
50
+ children,
51
+ ref,
52
+ ...props
53
+ }) => {
41
54
  const CustomBulletComp = typeof customBullet === "string" ? "span" : SlotPrimitive.Slot;
42
55
  return /* @__PURE__ */ jsxs("li", { className, ref, ...props, children: [
43
56
  !!customBullet && /* @__PURE__ */ jsx(CustomBulletComp, { className: "mr-2 flex-shrink-0", children: customBullet }),
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/typography/list.tsx"],
4
- "sourcesContent": ["import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\nimport type { Ref } from \"react\";\n\nimport { Tick } from \"../../icons/custom/tick\";\nimport { cn } from \"../../lib/utils\";\n\nconst listVariants = cva(\"text-gray-600 dark:text-gray-100\", {\n variants: {\n size: {\n sm: \"text-sm [&>li]:mt-1\",\n default: \"text-base [&>li]:mt-2\",\n lg: \"text-lg [&>li]:mt-3\",\n },\n variant: {\n unordered: \"list-disc pl-5\",\n ordered: \"list-decimal pl-5\",\n custom: \"list-none pl-0 [&>li>ul]:ml-4\",\n },\n color: {\n default: \"text-gray-600 dark:text-gray-100\",\n modal: \"text-gray-700 dark:text-gray-200\",\n },\n },\n defaultVariants: {\n size: \"default\",\n variant: \"unordered\",\n color: \"default\",\n },\n});\n\nexport interface ListProps\n extends Omit<\n React.HTMLAttributes<HTMLUListElement | HTMLOListElement>,\n \"color\"\n >,\n VariantProps<typeof listVariants> {\n ref?: Ref<HTMLUListElement | HTMLOListElement>;\n}\n\nconst List = ({ className, size, variant, color, ref, ...props }: ListProps) => {\n const Component = variant === \"ordered\" ? \"ol\" : \"ul\";\n\n return (\n <Component\n className={cn(listVariants({ size, variant, color, className }))}\n ref={ref as React.Ref<HTMLUListElement & HTMLOListElement>}\n {...props}\n />\n );\n};\n\nexport interface ListItemProps extends React.LiHTMLAttributes<HTMLLIElement> {\n customBullet?: React.ReactNode;\n ref?: Ref<HTMLLIElement>;\n}\n\nconst ListItem = ({ className, customBullet, children, ref, ...props }: ListItemProps) => {\n const CustomBulletComp =\n typeof customBullet === \"string\" ? \"span\" : SlotPrimitive.Slot;\n\n return (\n <li className={className} ref={ref} {...props}>\n {!!customBullet && (\n <CustomBulletComp className=\"mr-2 flex-shrink-0\">\n {customBullet}\n </CustomBulletComp>\n )}\n {children}\n </li>\n );\n};\n\ninterface ListItemTickProps extends React.HTMLAttributes<HTMLSpanElement> {\n ref?: Ref<HTMLSpanElement>;\n}\n\nconst ListItemTick = ({ className, ref, ...props }: ListItemTickProps) => (\n <span\n className={cn(\n \"inline-flex aspect-square items-center justify-center rounded-[0.375em] bg-green text-white [height:calc(1em_*_1.25)] [margin-top:calc((1em_*_var(--line-height,_1.5)_-_(1em_*_1.25))_/_2)] [width:calc(1em_*_1.25)]\",\n className\n )}\n ref={ref}\n {...props}\n >\n <Tick className=\"[height:calc(1em_*_0.75)] [width:calc(1em_*_0.75)]\" />\n </span>\n);\n\nexport { List, ListItem, ListItemTick, listVariants };\n"],
5
- "mappings": "AA6CI,cAkBA,YAlBA;AA7CJ,SAAS,WAA8B;AACvC,SAAS,QAAQ,qBAAqB;AAItC,SAAS,YAAY;AACrB,SAAS,UAAU;AAEnB,MAAM,eAAe,IAAI,oCAAoC;AAAA,EAC3D,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,IAAI;AAAA,IACN;AAAA,IACA,SAAS;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,OAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AACF,CAAC;AAWD,MAAM,OAAO,CAAC,EAAE,WAAW,MAAM,SAAS,OAAO,KAAK,GAAG,MAAM,MAAiB;AAC9E,QAAM,YAAY,YAAY,YAAY,OAAO;AAEjD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,aAAa,EAAE,MAAM,SAAS,OAAO,UAAU,CAAC,CAAC;AAAA,MAC/D;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAOA,MAAM,WAAW,CAAC,EAAE,WAAW,cAAc,UAAU,KAAK,GAAG,MAAM,MAAqB;AACxF,QAAM,mBACJ,OAAO,iBAAiB,WAAW,SAAS,cAAc;AAE5D,SACE,qBAAC,QAAG,WAAsB,KAAW,GAAG,OACrC;AAAA,KAAC,CAAC,gBACD,oBAAC,oBAAiB,WAAU,sBACzB,wBACH;AAAA,IAED;AAAA,KACH;AAEJ;AAMA,MAAM,eAAe,CAAC,EAAE,WAAW,KAAK,GAAG,MAAM,MAC/C;AAAA,EAAC;AAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACC,GAAG;AAAA,IAEJ,8BAAC,QAAK,WAAU,sDAAqD;AAAA;AACvE;",
4
+ "sourcesContent": ["import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\nimport type { Ref } from \"react\";\n\nimport { Tick } from \"../../icons/custom/tick\";\nimport { cn } from \"../../lib/utils\";\n\nconst listVariants = cva(\"text-gray-600 dark:text-gray-100\", {\n variants: {\n size: {\n sm: \"text-sm [&>li]:mt-1\",\n default: \"text-base [&>li]:mt-2\",\n lg: \"text-lg [&>li]:mt-3\",\n },\n variant: {\n unordered: \"list-disc pl-5\",\n ordered: \"list-decimal pl-5\",\n custom: \"list-none pl-0 [&>li>ul]:ml-4\",\n },\n color: {\n default: \"text-gray-600 dark:text-gray-100\",\n modal: \"text-gray-700 dark:text-gray-200\",\n },\n },\n defaultVariants: {\n size: \"default\",\n variant: \"unordered\",\n color: \"default\",\n },\n});\n\nexport interface ListProps\n extends Omit<\n React.HTMLAttributes<HTMLUListElement | HTMLOListElement>,\n \"color\"\n >,\n VariantProps<typeof listVariants> {\n ref?: Ref<HTMLUListElement | HTMLOListElement>;\n}\n\nconst List = ({\n className,\n size,\n variant,\n color,\n ref,\n ...props\n}: ListProps) => {\n const Component = variant === \"ordered\" ? \"ol\" : \"ul\";\n\n return (\n <Component\n className={cn(listVariants({ size, variant, color, className }))}\n ref={ref as React.Ref<HTMLUListElement & HTMLOListElement>}\n {...props}\n />\n );\n};\n\nexport interface ListItemProps extends React.LiHTMLAttributes<HTMLLIElement> {\n customBullet?: React.ReactNode;\n ref?: Ref<HTMLLIElement>;\n}\n\nconst ListItem = ({\n className,\n customBullet,\n children,\n ref,\n ...props\n}: ListItemProps) => {\n const CustomBulletComp =\n typeof customBullet === \"string\" ? \"span\" : SlotPrimitive.Slot;\n\n return (\n <li className={className} ref={ref} {...props}>\n {!!customBullet && (\n <CustomBulletComp className=\"mr-2 flex-shrink-0\">\n {customBullet}\n </CustomBulletComp>\n )}\n {children}\n </li>\n );\n};\n\ninterface ListItemTickProps extends React.HTMLAttributes<HTMLSpanElement> {\n ref?: Ref<HTMLSpanElement>;\n}\n\nconst ListItemTick = ({ className, ref, ...props }: ListItemTickProps) => (\n <span\n className={cn(\n \"inline-flex aspect-square items-center justify-center rounded-[0.375em] bg-green text-white [height:calc(1em_*_1.25)] [margin-top:calc((1em_*_var(--line-height,_1.5)_-_(1em_*_1.25))_/_2)] [width:calc(1em_*_1.25)]\",\n className\n )}\n ref={ref}\n {...props}\n >\n <Tick className=\"[height:calc(1em_*_0.75)] [width:calc(1em_*_0.75)]\" />\n </span>\n);\n\nexport { List, ListItem, ListItemTick, listVariants };\n"],
5
+ "mappings": "AAoDI,cAwBA,YAxBA;AApDJ,SAAS,WAA8B;AACvC,SAAS,QAAQ,qBAAqB;AAItC,SAAS,YAAY;AACrB,SAAS,UAAU;AAEnB,MAAM,eAAe,IAAI,oCAAoC;AAAA,EAC3D,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,IAAI;AAAA,IACN;AAAA,IACA,SAAS;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,OAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AACF,CAAC;AAWD,MAAM,OAAO,CAAC;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAiB;AACf,QAAM,YAAY,YAAY,YAAY,OAAO;AAEjD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,aAAa,EAAE,MAAM,SAAS,OAAO,UAAU,CAAC,CAAC;AAAA,MAC/D;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAOA,MAAM,WAAW,CAAC;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAqB;AACnB,QAAM,mBACJ,OAAO,iBAAiB,WAAW,SAAS,cAAc;AAE5D,SACE,qBAAC,QAAG,WAAsB,KAAW,GAAG,OACrC;AAAA,KAAC,CAAC,gBACD,oBAAC,oBAAiB,WAAU,sBACzB,wBACH;AAAA,IAED;AAAA,KACH;AAEJ;AAMA,MAAM,eAAe,CAAC,EAAE,WAAW,KAAK,GAAG,MAAM,MAC/C;AAAA,EAAC;AAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACC,GAAG;AAAA,IAEJ,8BAAC,QAAK,WAAU,sDAAqD;AAAA;AACvE;",
6
6
  "names": []
7
7
  }
@@ -16,7 +16,13 @@ const textVariants = cva(
16
16
  }
17
17
  }
18
18
  );
19
- const Text = ({ className, asChild = false, variant, ref, ...props }) => {
19
+ const Text = ({
20
+ className,
21
+ asChild = false,
22
+ variant,
23
+ ref,
24
+ ...props
25
+ }) => {
20
26
  const Comp = asChild ? SlotPrimitive.Slot : "p";
21
27
  return /* @__PURE__ */ jsx(
22
28
  Comp,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/typography/text.tsx"],
4
- "sourcesContent": ["import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\nimport type { Ref } from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst textVariants = cva(\n \"font-sans text-base text-gray-600 dark:text-gray-100\",\n {\n variants: {\n variant: {\n default: \"text-gray-600 dark:text-gray-100\",\n modal: \"text-gray-700 dark:text-gray-200\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nexport interface TextProps\n extends React.HTMLAttributes<HTMLParagraphElement>,\n VariantProps<typeof textVariants> {\n asChild?: boolean;\n ref?: Ref<HTMLParagraphElement>;\n}\n\nconst Text = ({ className, asChild = false, variant, ref, ...props }: TextProps) => {\n const Comp = asChild ? SlotPrimitive.Slot : \"p\";\n\n return (\n <Comp\n className={cn(textVariants({ variant }), className)}\n ref={ref}\n {...props}\n />\n );\n};\n\nexport { Text, textVariants };\n"],
5
- "mappings": "AAiCI;AAjCJ,SAAS,WAA8B;AACvC,SAAS,QAAQ,qBAAqB;AAItC,SAAS,UAAU;AAEnB,MAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF;AACF;AASA,MAAM,OAAO,CAAC,EAAE,WAAW,UAAU,OAAO,SAAS,KAAK,GAAG,MAAM,MAAiB;AAClF,QAAM,OAAO,UAAU,cAAc,OAAO;AAE5C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,aAAa,EAAE,QAAQ,CAAC,GAAG,SAAS;AAAA,MAClD;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;",
4
+ "sourcesContent": ["import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\nimport type { Ref } from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst textVariants = cva(\n \"font-sans text-base text-gray-600 dark:text-gray-100\",\n {\n variants: {\n variant: {\n default: \"text-gray-600 dark:text-gray-100\",\n modal: \"text-gray-700 dark:text-gray-200\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nexport interface TextProps\n extends React.HTMLAttributes<HTMLParagraphElement>,\n VariantProps<typeof textVariants> {\n asChild?: boolean;\n ref?: Ref<HTMLParagraphElement>;\n}\n\nconst Text = ({\n className,\n asChild = false,\n variant,\n ref,\n ...props\n}: TextProps) => {\n const Comp = asChild ? SlotPrimitive.Slot : \"p\";\n\n return (\n <Comp\n className={cn(textVariants({ variant }), className)}\n ref={ref}\n {...props}\n />\n );\n};\n\nexport { Text, textVariants };\n"],
5
+ "mappings": "AAuCI;AAvCJ,SAAS,WAA8B;AACvC,SAAS,QAAQ,qBAAqB;AAItC,SAAS,UAAU;AAEnB,MAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF;AACF;AASA,MAAM,OAAO,CAAC;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAiB;AACf,QAAM,OAAO,UAAU,cAAc,OAAO;AAE5C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,aAAa,EAAE,QAAQ,CAAC,GAAG,SAAS;AAAA,MAClD;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/icons/custom/boards-indicator.tsx"],
4
- "sourcesContent": ["import { cn } from \"../../lib/utils\";\n\ninterface BoardsIndicatorProps {\n className?: string;\n}\n\nconst BoardsIndicatorFavorite = ({ className }: BoardsIndicatorProps) => (\n <svg\n aria-hidden=\"true\"\n className={className}\n fill=\"none\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0 10C0 4.47715 4.47715 0 10 0C15.5228 0 20 4.47715 20 10C20 15.5228 15.5228 20 10 20C4.47715 20 0 15.5228 0 10Z\"\n fill=\"#4D7A33\"\n />\n <path\n d=\"M13.3332 7.5L8.74984 12.0833L6.6665 10\"\n stroke=\"white\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.67\"\n />\n </svg>\n);\n\nconst BoardsIndicatorDefault = ({ className }: BoardsIndicatorProps) => (\n <svg\n aria-hidden=\"true\"\n className={className}\n fill=\"none\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 0.834961C15.0617 0.834961 19.165 4.93831 19.165 10C19.165 15.0617 15.0617 19.165 10 19.165C4.93831 19.165 0.834961 15.0617 0.834961 10C0.834961 4.93831 4.93831 0.834961 10 0.834961Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.67\"\n />\n <path\n d=\"M7.0835 10H12.9168M10.0002 7.08334V12.9167\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.67\"\n />\n </svg>\n);\n\nexport {\n BoardsIndicatorFavorite,\n BoardsIndicatorDefault,\n type BoardsIndicatorProps,\n};\n"],
5
- "mappings": "AAOE,SASE,KATF;AADF,MAAM,0BAA0B,CAAC,EAAE,UAAU,MAC3C;AAAA,EAAC;AAAA;AAAA,IACC,eAAY;AAAA,IACZ;AAAA,IACA,MAAK;AAAA,IACL,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,OAAM;AAAA,IAEN;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,MAAK;AAAA;AAAA,MACP;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,QAAO;AAAA,UACP,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,aAAY;AAAA;AAAA,MACd;AAAA;AAAA;AACF;AAGF,MAAM,yBAAyB,CAAC,EAAE,UAAU,MAC1C;AAAA,EAAC;AAAA;AAAA,IACC,eAAY;AAAA,IACZ;AAAA,IACA,MAAK;AAAA,IACL,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,OAAM;AAAA,IAEN;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,QAAO;AAAA,UACP,aAAY;AAAA;AAAA,MACd;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,QAAO;AAAA,UACP,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,aAAY;AAAA;AAAA,MACd;AAAA;AAAA;AACF;",
4
+ "sourcesContent": ["interface BoardsIndicatorProps {\n className?: string;\n}\n\nconst BoardsIndicatorFavorite = ({ className }: BoardsIndicatorProps) => (\n <svg\n aria-hidden=\"true\"\n className={className}\n fill=\"none\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0 10C0 4.47715 4.47715 0 10 0C15.5228 0 20 4.47715 20 10C20 15.5228 15.5228 20 10 20C4.47715 20 0 15.5228 0 10Z\"\n fill=\"#4D7A33\"\n />\n <path\n d=\"M13.3332 7.5L8.74984 12.0833L6.6665 10\"\n stroke=\"white\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.67\"\n />\n </svg>\n);\n\nconst BoardsIndicatorDefault = ({ className }: BoardsIndicatorProps) => (\n <svg\n aria-hidden=\"true\"\n className={className}\n fill=\"none\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 0.834961C15.0617 0.834961 19.165 4.93831 19.165 10C19.165 15.0617 15.0617 19.165 10 19.165C4.93831 19.165 0.834961 15.0617 0.834961 10C0.834961 4.93831 4.93831 0.834961 10 0.834961Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.67\"\n />\n <path\n d=\"M7.0835 10H12.9168M10.0002 7.08334V12.9167\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.67\"\n />\n </svg>\n);\n\nexport {\n BoardsIndicatorFavorite,\n BoardsIndicatorDefault,\n type BoardsIndicatorProps,\n};\n"],
5
+ "mappings": "AAKE,SASE,KATF;AADF,MAAM,0BAA0B,CAAC,EAAE,UAAU,MAC3C;AAAA,EAAC;AAAA;AAAA,IACC,eAAY;AAAA,IACZ;AAAA,IACA,MAAK;AAAA,IACL,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,OAAM;AAAA,IAEN;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,MAAK;AAAA;AAAA,MACP;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,QAAO;AAAA,UACP,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,aAAY;AAAA;AAAA,MACd;AAAA;AAAA;AACF;AAGF,MAAM,yBAAyB,CAAC,EAAE,UAAU,MAC1C;AAAA,EAAC;AAAA;AAAA,IACC,eAAY;AAAA,IACZ;AAAA,IACA,MAAK;AAAA,IACL,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,OAAM;AAAA,IAEN;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,QAAO;AAAA,UACP,aAAY;AAAA;AAAA,MACd;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,GAAE;AAAA,UACF,QAAO;AAAA,UACP,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,aAAY;AAAA;AAAA,MACd;AAAA;AAAA;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/icons/custom/exclamation-mark-in-octagon.tsx"],
4
- "sourcesContent": ["\ninterface ExclamationMarkInOctagonProps {\n className?: string;\n}\n\nconst ExclamationMarkInOctagon = ({\n className,\n}: ExclamationMarkInOctagonProps) => (\n <svg\n aria-hidden=\"true\"\n className={className}\n fill=\"none\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n width=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>Exclamation mark in octagon</title>\n <g clipPath=\"url(#clip0_3_7767)\">\n <path\n d=\"M10.208 1.33337C10.5616 1.33345 10.9007 1.47397 11.1507 1.72404L14.276 4.84937C14.5261 5.09936 14.6666 5.43845 14.6667 5.79204V10.208C14.6666 10.5616 14.5261 10.9007 14.276 11.1507L11.1507 14.276C10.9007 14.5261 10.5616 14.6666 10.208 14.6667H5.79204C5.43845 14.6666 5.09936 14.5261 4.84937 14.276L1.72404 11.1507C1.47397 10.9007 1.33345 10.5616 1.33337 10.208V5.79204C1.33345 5.43845 1.47397 5.09936 1.72404 4.84937L4.84937 1.72404C5.09936 1.47397 5.43845 1.33345 5.79204 1.33337H10.208Z\"\n fill=\"#FC5252\"\n stroke=\"#FC5252\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.33333\"\n />\n <path\n d=\"M8 10.6667H8.00667\"\n stroke=\"white\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.33333\"\n />\n <path\n d=\"M8 5.33325V7.99992\"\n stroke=\"white\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.33333\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3_7767\">\n <rect fill=\"white\" height=\"16\" width=\"16\" />\n </clipPath>\n </defs>\n </svg>\n);\n\nexport { ExclamationMarkInOctagon };\n"],
5
- "mappings": "AAiBI,cACA,YADA;AAZJ,MAAM,2BAA2B,CAAC;AAAA,EAChC;AACF,MACE;AAAA,EAAC;AAAA;AAAA,IACC,eAAY;AAAA,IACZ;AAAA,IACA,MAAK;AAAA,IACL,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,OAAM;AAAA,IAEN;AAAA,0BAAC,WAAM,yCAA2B;AAAA,MAClC,qBAAC,OAAE,UAAS,sBACV;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,MAAK;AAAA,YACL,QAAO;AAAA,YACP,eAAc;AAAA,YACd,gBAAe;AAAA,YACf,aAAY;AAAA;AAAA,QACd;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,eAAc;AAAA,YACd,gBAAe;AAAA,YACf,aAAY;AAAA;AAAA,QACd;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,eAAc;AAAA,YACd,gBAAe;AAAA,YACf,aAAY;AAAA;AAAA,QACd;AAAA,SACF;AAAA,MACA,oBAAC,UACC,8BAAC,cAAS,IAAG,gBACX,8BAAC,UAAK,MAAK,SAAQ,QAAO,MAAK,OAAM,MAAK,GAC5C,GACF;AAAA;AAAA;AACF;",
4
+ "sourcesContent": ["interface ExclamationMarkInOctagonProps {\n className?: string;\n}\n\nconst ExclamationMarkInOctagon = ({\n className,\n}: ExclamationMarkInOctagonProps) => (\n <svg\n aria-hidden=\"true\"\n className={className}\n fill=\"none\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n width=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <title>Exclamation mark in octagon</title>\n <g clipPath=\"url(#clip0_3_7767)\">\n <path\n d=\"M10.208 1.33337C10.5616 1.33345 10.9007 1.47397 11.1507 1.72404L14.276 4.84937C14.5261 5.09936 14.6666 5.43845 14.6667 5.79204V10.208C14.6666 10.5616 14.5261 10.9007 14.276 11.1507L11.1507 14.276C10.9007 14.5261 10.5616 14.6666 10.208 14.6667H5.79204C5.43845 14.6666 5.09936 14.5261 4.84937 14.276L1.72404 11.1507C1.47397 10.9007 1.33345 10.5616 1.33337 10.208V5.79204C1.33345 5.43845 1.47397 5.09936 1.72404 4.84937L4.84937 1.72404C5.09936 1.47397 5.43845 1.33345 5.79204 1.33337H10.208Z\"\n fill=\"#FC5252\"\n stroke=\"#FC5252\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.33333\"\n />\n <path\n d=\"M8 10.6667H8.00667\"\n stroke=\"white\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.33333\"\n />\n <path\n d=\"M8 5.33325V7.99992\"\n stroke=\"white\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.33333\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3_7767\">\n <rect fill=\"white\" height=\"16\" width=\"16\" />\n </clipPath>\n </defs>\n </svg>\n);\n\nexport { ExclamationMarkInOctagon };\n"],
5
+ "mappings": "AAgBI,cACA,YADA;AAZJ,MAAM,2BAA2B,CAAC;AAAA,EAChC;AACF,MACE;AAAA,EAAC;AAAA;AAAA,IACC,eAAY;AAAA,IACZ;AAAA,IACA,MAAK;AAAA,IACL,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,OAAM;AAAA,IAEN;AAAA,0BAAC,WAAM,yCAA2B;AAAA,MAClC,qBAAC,OAAE,UAAS,sBACV;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,MAAK;AAAA,YACL,QAAO;AAAA,YACP,eAAc;AAAA,YACd,gBAAe;AAAA,YACf,aAAY;AAAA;AAAA,QACd;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,eAAc;AAAA,YACd,gBAAe;AAAA,YACf,aAAY;AAAA;AAAA,QACd;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,QAAO;AAAA,YACP,eAAc;AAAA,YACd,gBAAe;AAAA,YACf,aAAY;AAAA;AAAA,QACd;AAAA,SACF;AAAA,MACA,oBAAC,UACC,8BAAC,cAAS,IAAG,gBACX,8BAAC,UAAK,MAAK,SAAQ,QAAO,MAAK,OAAM,MAAK,GAC5C,GACF;AAAA;AAAA;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/icons/custom/tick.tsx"],
4
- "sourcesContent": ["import { memo } from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst _Tick = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n <svg\n aria-hidden=\"true\"\n className={className}\n fill=\"none\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M16.6666 5L7.49992 14.1667L3.33325 10\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2.5\"\n />\n </svg>\n);\n\nconst Tick = memo(_Tick);\n\nexport { Tick };\n"],
5
- "mappings": "AAeI;AAfJ,SAAS,YAAY;AAIrB,MAAM,QAAQ,CAAC,EAAE,WAAW,GAAG,MAAM,MACnC;AAAA,EAAC;AAAA;AAAA,IACC,eAAY;AAAA,IACZ;AAAA,IACA,MAAK;AAAA,IACL,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,OAAM;AAAA,IACL,GAAG;AAAA,IAEJ;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,QAAO;AAAA,QACP,eAAc;AAAA,QACd,gBAAe;AAAA,QACf,aAAY;AAAA;AAAA,IACd;AAAA;AACF;AAGF,MAAM,OAAO,KAAK,KAAK;",
4
+ "sourcesContent": ["import { memo } from \"react\";\n\nconst _Tick = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n <svg\n aria-hidden=\"true\"\n className={className}\n fill=\"none\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M16.6666 5L7.49992 14.1667L3.33325 10\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2.5\"\n />\n </svg>\n);\n\nconst Tick = memo(_Tick);\n\nexport { Tick };\n"],
5
+ "mappings": "AAaI;AAbJ,SAAS,YAAY;AAErB,MAAM,QAAQ,CAAC,EAAE,WAAW,GAAG,MAAM,MACnC;AAAA,EAAC;AAAA;AAAA,IACC,eAAY;AAAA,IACZ;AAAA,IACA,MAAK;AAAA,IACL,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,OAAM;AAAA,IACL,GAAG;AAAA,IAEJ;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,QAAO;AAAA,QACP,eAAc;AAAA,QACd,gBAAe;AAAA,QACf,aAAY;AAAA;AAAA,IACd;AAAA;AACF;AAGF,MAAM,OAAO,KAAK,KAAK;",
6
6
  "names": []
7
7
  }