{"version":3,"sources":["../src/box/config.ts","../src/box/index.tsx","../src/text/index.tsx","../src/stack/index.tsx","../src/flex/index.tsx","../src/input/index.tsx","../src/textarea/index.tsx","../src/button/index.tsx","../src/image/index.tsx","../src/card/index.tsx","../src/badge/index.tsx","../src/progress/index.tsx","../src/switch/index.tsx","../src/segmented/index.tsx","../src/collapsible/index.tsx","../src/divider/index.tsx","../src/spinner/index.tsx","../src/presence/index.tsx","../src/skeleton/index.tsx","../src/animatednumber/index.tsx"],"names":["cva","spacing","radiusTokens","radius","useTheme","jsx","forwardRef","Stack","Flex","sizeMap","Input","useState","transition","motion","jsxs","Textarea","useRef","useLayoutEffect","Image","padMap","Card","radiusScale","heightMap","useReducedMotion","useEffect","KEYFRAMES_ID","ensureKeyframes"],"mappings":"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","file":"index.cjs","sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\";\n\n/**\n * Box variants. Kept deliberately small for the foundation commit.\n * Stack, Flex, and Center will land later as either Box variants\n * or as siblings; not sure which I prefer yet.\n */\nexport const boxConfig = cva(\"omni-box\", {\n  variants: {\n    surface: {\n      none: \"\",\n      primary: \"omni-box--surface-primary\",\n      raised:  \"omni-box--surface-raised\",\n      sunken:  \"omni-box--surface-sunken\",\n    },\n    padding: {\n      none: \"\",\n      sm: \"omni-box--pad-sm\",\n      md: \"omni-box--pad-md\",\n      lg: \"omni-box--pad-lg\",\n    },\n    radius: {\n      none: \"\",\n      sm: \"omni-box--radius-sm\",\n      md: \"omni-box--radius-md\",\n      lg: \"omni-box--radius-lg\",\n      pill: \"omni-box--radius-pill\",\n    },\n  },\n  defaultVariants: {\n    surface: \"none\",\n    padding: \"none\",\n    radius: \"none\",\n  },\n});\n\nexport type BoxVariants = VariantProps<typeof boxConfig>;\n","/**\n * Box (web).\n *\n * The single most-used primitive. Polymorphic: renders any HTML element\n * via the `as` prop while preserving the element's native attribute types.\n *\n * ```tsx\n * <Box as=\"a\" href=\"/x\" surface=\"raised\" padding=\"md\">Link</Box>\n * <Box as=\"button\" type=\"submit\" surface=\"primary\">Submit</Box>\n * ```\n *\n * The matching `index.native.tsx` always renders a `<View>` (RN has no\n * polymorphism story worth simulating). `as` is silently ignored on native.\n *\n * Variants resolve via cva for type-safe className output AND via inline\n * styles from the active theme so the primitive works without a stylesheet.\n * Classes are kept as override hooks for consumers who want their own CSS.\n */\nimport { forwardRef, type ElementType, type ForwardedRef, type CSSProperties } from \"react\";\nimport type { PolymorphicComponentPropsWithRef } from \"@plyxui/core\";\nimport { radius as radiusTokens, spacing } from \"@plyxui/core\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { boxConfig, type BoxVariants } from \"./config\";\n\ntype BoxOwnProps = BoxVariants & {\n  className?: string;\n  style?: CSSProperties;\n};\n\nexport type BoxProps<C extends ElementType = \"div\"> = PolymorphicComponentPropsWithRef<\n  C,\n  BoxOwnProps\n>;\n\nfunction joinClass(...parts: Array<string | undefined>): string {\n  return parts.filter(Boolean).join(\" \");\n}\n\nconst padMap: Record<NonNullable<BoxVariants[\"padding\"]>, number> = {\n  none: 0,\n  sm: spacing[2],\n  md: spacing[4],\n  lg: spacing[6],\n};\n\nconst radiusMap: Record<NonNullable<BoxVariants[\"radius\"]>, number> = {\n  none: 0,\n  sm: radiusTokens.sm,\n  md: radiusTokens.md,\n  lg: radiusTokens.lg,\n  pill: radiusTokens.pill,\n};\n\nfunction BoxImpl<C extends ElementType = \"div\">(\n  { as, className, style, surface, padding, radius, children, ...rest }: BoxProps<C>,\n  ref: ForwardedRef<Element>,\n) {\n  const Component = (as ?? \"div\") as ElementType;\n  const { colors } = useTheme();\n  const variantClass = boxConfig({ surface, padding, radius });\n\n  const surfaceColor =\n    surface === \"primary\"\n      ? colors.primaryFill\n      : surface === \"raised\"\n        ? colors.surfaceFill\n        : surface === \"sunken\"\n          ? colors.containerFill\n          : undefined;\n\n  const computed: CSSProperties = {\n    boxSizing: \"border-box\",\n    padding: padMap[padding ?? \"none\"],\n    borderRadius: radiusMap[radius ?? \"none\"],\n    ...(surfaceColor ? { backgroundColor: surfaceColor } : null),\n    ...style,\n  };\n\n  return (\n    <Component ref={ref} className={joinClass(variantClass, className)} style={computed} {...rest}>\n      {children}\n    </Component>\n  );\n}\n\n/**\n * Forwarded-ref + polymorphic Box.\n *\n * NOTE: React's forwardRef erases polymorphic generics, so the cast below\n * is intentional. The exported type carries the generics; runtime is unchanged.\n */\nexport const Box = forwardRef(BoxImpl) as <C extends ElementType = \"div\">(\n  props: BoxProps<C>,\n) => React.ReactElement | null;\n","/**\n * Text (web).\n *\n * Sized via a small scale: xs / sm / md / lg / xl. Weight via the\n * same enum we use on RN. Color resolves the same way Icon does --\n * theme token name (autocomplete) or a raw color.\n */\nimport { forwardRef, type ElementType, type ForwardedRef, type CSSProperties } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport type { OmniColorTokens, PolymorphicComponentPropsWithRef } from \"@plyxui/core\";\n\ntype ThemeColorKey = keyof OmniColorTokens;\n\nexport type TextSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\";\nexport type TextWeight = \"regular\" | \"medium\" | \"semibold\" | \"bold\";\nexport type TextAlign = \"start\" | \"center\" | \"end\";\n\nconst sizeMap: Record<TextSize, { size: number; lineHeight: number }> = {\n  xs:   { size: 11, lineHeight: 16 },\n  sm:   { size: 13, lineHeight: 18 },\n  md:   { size: 15, lineHeight: 22 },\n  lg:   { size: 18, lineHeight: 26 },\n  xl:   { size: 22, lineHeight: 30 },\n  \"2xl\":{ size: 28, lineHeight: 36 },\n  \"3xl\":{ size: 36, lineHeight: 44 },\n};\n\nconst weightMap: Record<TextWeight, number> = {\n  regular: 400,\n  medium: 500,\n  semibold: 600,\n  bold: 700,\n};\n\ntype TextOwnProps = {\n  size?: TextSize;\n  weight?: TextWeight;\n  color?: ThemeColorKey | (string & {});\n  align?: TextAlign;\n  truncate?: boolean;\n  className?: string;\n  style?: CSSProperties;\n};\n\nexport type TextProps<C extends ElementType = \"span\"> = PolymorphicComponentPropsWithRef<\n  C,\n  TextOwnProps\n>;\n\nfunction resolveColor(\n  color: TextProps[\"color\"],\n  themeColors: Record<keyof OmniColorTokens, string>,\n): string {\n  if (!color) return themeColors.text;\n  if ((themeColors as Record<string, string>)[color as string] != null) {\n    return (themeColors as Record<string, string>)[color as string]!;\n  }\n  return color as string;\n}\n\nfunction TextImpl<C extends ElementType = \"span\">(\n  { as, size = \"md\", weight = \"regular\", color, align, truncate, className, style, children, ...rest }: TextProps<C>,\n  ref: ForwardedRef<Element>,\n) {\n  const Component = (as ?? \"span\") as ElementType;\n  const { colors } = useTheme();\n  const dims = sizeMap[size];\n  const computed: CSSProperties = {\n    fontSize: dims.size,\n    lineHeight: `${dims.lineHeight}px`,\n    fontWeight: weightMap[weight],\n    color: resolveColor(color, colors),\n    textAlign: align ?? undefined,\n    ...(truncate\n      ? { whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\", display: \"block\" }\n      : null),\n    ...style,\n  };\n  return (\n    <Component ref={ref} className={className} style={computed} {...rest}>\n      {children}\n    </Component>\n  );\n}\n\nexport const Text = forwardRef(TextImpl) as <C extends ElementType = \"span\">(\n  props: TextProps<C>,\n) => React.ReactElement | null;\n","/**\n * Stack (web). Flex container with a `gap` that maps to the spacing scale.\n *\n *   <Stack gap={4}>...</Stack>             // 16px gap, column by default\n *   <Stack direction=\"row\" gap={2} align=\"center\">\n *\n * For tighter shorthands -- horizontal layout, single line, etc. -- use Flex\n * which wraps this with sensible defaults.\n */\nimport { forwardRef, type CSSProperties, type ForwardedRef, type ReactNode } from \"react\";\nimport { spacing, type SpacingKey } from \"@plyxui/core\";\n\nexport type StackDirection = \"row\" | \"column\" | \"row-reverse\" | \"column-reverse\";\nexport type StackAlign = \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\nexport type StackJustify = \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\";\n\nconst alignMap: Record<StackAlign, CSSProperties[\"alignItems\"]> = {\n  start: \"flex-start\",\n  center: \"center\",\n  end: \"flex-end\",\n  stretch: \"stretch\",\n  baseline: \"baseline\",\n};\nconst justifyMap: Record<StackJustify, CSSProperties[\"justifyContent\"]> = {\n  start: \"flex-start\",\n  center: \"center\",\n  end: \"flex-end\",\n  between: \"space-between\",\n  around: \"space-around\",\n  evenly: \"space-evenly\",\n};\n\nexport interface StackProps {\n  direction?: StackDirection;\n  gap?: SpacingKey;\n  align?: StackAlign;\n  justify?: StackJustify;\n  wrap?: boolean;\n  inline?: boolean;\n  className?: string;\n  style?: CSSProperties;\n  children?: ReactNode;\n}\n\nexport const Stack = forwardRef<HTMLDivElement, StackProps>(function Stack(\n  { direction = \"column\", gap = 0, align, justify, wrap, inline, className, style, children },\n  ref,\n) {\n  const computed: CSSProperties = {\n    display: inline ? \"inline-flex\" : \"flex\",\n    flexDirection: direction,\n    gap: spacing[gap],\n    alignItems: align ? alignMap[align] : undefined,\n    justifyContent: justify ? justifyMap[justify] : undefined,\n    flexWrap: wrap ? \"wrap\" : undefined,\n    ...style,\n  };\n  return (\n    <div ref={ref} className={className} style={computed}>\n      {children}\n    </div>\n  );\n});\n","/**\n * Flex (web). Stack with `direction=\"row\"` baked in.\n *\n *   <Flex gap={2} align=\"center\">...</Flex>\n *\n * Trivial wrapper, but I find myself reaching for `<Flex>` constantly\n * and `<Stack direction=\"row\">` reads worse.\n */\nimport { forwardRef, type ForwardedRef } from \"react\";\nimport { Stack, type StackProps } from \"../stack\";\n\nexport interface FlexProps extends Omit<StackProps, \"direction\"> {\n  reverse?: boolean;\n}\n\nexport const Flex = forwardRef<HTMLDivElement, FlexProps>(function Flex(\n  { reverse, ...rest },\n  ref,\n) {\n  return <Stack ref={ref} direction={reverse ? \"row-reverse\" : \"row\"} {...rest} />;\n});\n","/**\n * Input (web). Single-line text input with built-in theme styling and a\n * size scale that matches the Button + Text primitives.\n *\n * Controlled and uncontrolled both work. We deliberately don't bundle a\n * Field wrapper here -- that lives in layouts because the label + helper\n * positioning is design-system-specific.\n *\n * Focus draws a two-part ring (page-fill gap + primaryOrange) so the\n * focused field pops on any surface. Inline styles can't express\n * :focus-visible, so the ring shows on every focus, not just keyboard\n * focus -- revisit if/when the library grows a stylesheet layer.\n */\nimport { forwardRef, useState, type ChangeEvent, type CSSProperties } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { motion, radius, spacing, transition } from \"@plyxui/core\";\n\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\n\nconst sizeMap: Record<InputSize, { h: number; fontSize: number; padX: number }> = {\n  sm: { h: 28, fontSize: 13, padX: spacing[2] },\n  md: { h: 36, fontSize: 14, padX: spacing[3] },\n  lg: { h: 44, fontSize: 16, padX: spacing[4] },\n};\n\nexport interface InputProps {\n  value?: string;\n  defaultValue?: string;\n  onChange?: (value: string, event: ChangeEvent<HTMLInputElement>) => void;\n  placeholder?: string;\n  size?: InputSize;\n  invalid?: boolean;\n  disabled?: boolean;\n  type?: \"text\" | \"email\" | \"password\" | \"search\" | \"tel\" | \"url\" | \"number\";\n  className?: string;\n  style?: CSSProperties;\n  /** Optional left ornament -- typically an Icon. */\n  leading?: React.ReactNode;\n  /** Optional right ornament. */\n  trailing?: React.ReactNode;\n  autoFocus?: boolean;\n  id?: string;\n  name?: string;\n  inputMode?: React.HTMLAttributes<HTMLInputElement>[\"inputMode\"];\n  \"aria-label\"?: string;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n  {\n    value,\n    defaultValue,\n    onChange,\n    placeholder,\n    size = \"md\",\n    invalid,\n    disabled,\n    type = \"text\",\n    className,\n    style,\n    leading,\n    trailing,\n    autoFocus,\n    id,\n    name,\n    inputMode,\n    ...aria\n  },\n  ref,\n) {\n  const { colors } = useTheme();\n  const [internal, setInternal] = useState<string>(defaultValue ?? \"\");\n  const [focused, setFocused] = useState(false);\n  const isControlled = value !== undefined;\n  const current = isControlled ? value : internal;\n  const dims = sizeMap[size];\n\n  const wrapStyle: CSSProperties = {\n    display: \"flex\",\n    alignItems: \"center\",\n    gap: spacing[2],\n    height: dims.h,\n    paddingLeft: leading ? spacing[2] : dims.padX,\n    paddingRight: trailing ? spacing[2] : dims.padX,\n    background: colors.surfaceFill,\n    border: `1px solid ${invalid ? colors.statusError : focused ? colors.primaryOrange : colors.stroke}`,\n    borderRadius: radius.md,\n    color: colors.text,\n    opacity: disabled ? 0.55 : 1,\n    boxShadow: focused\n      ? `0 0 0 2px ${colors.primaryFill}, 0 0 0 4px ${invalid ? colors.statusError : colors.primaryOrange}`\n      : \"none\",\n    transition: [\n      transition(\"border-color\", motion.controlHover),\n      transition(\"box-shadow\", motion.controlHover),\n    ].join(\", \"),\n    ...style,\n  };\n\n  const inputStyle: CSSProperties = {\n    flex: 1,\n    minWidth: 0,\n    height: \"100%\",\n    border: \"none\",\n    outline: \"none\",\n    background: \"transparent\",\n    color: colors.text,\n    fontSize: dims.fontSize,\n    fontFamily: \"inherit\",\n    padding: 0,\n  };\n\n  return (\n    <div className={className} style={wrapStyle}>\n      {leading}\n      <input\n        ref={ref}\n        type={type}\n        id={id}\n        name={name}\n        value={current}\n        onChange={(e) => {\n          if (!isControlled) setInternal(e.target.value);\n          onChange?.(e.target.value, e);\n        }}\n        placeholder={placeholder}\n        disabled={disabled}\n        autoFocus={autoFocus}\n        onFocus={() => setFocused(true)}\n        onBlur={() => setFocused(false)}\n        inputMode={inputMode}\n        aria-invalid={invalid || undefined}\n        aria-label={aria[\"aria-label\"]}\n        style={inputStyle}\n      />\n      {trailing}\n    </div>\n  );\n});\n","/**\n * Textarea (web). Multi-line sibling of Input -- same theme styling and\n * size scale, plus optional auto-grow so the box tracks its content\n * instead of scrolling. The one field a resume, a bio, or a message box\n * always needs and Input can't cover.\n *\n * Controlled and uncontrolled both work. autoGrow measures scrollHeight\n * on each change and pins the element height between minRows and maxRows.\n *\n * Focus draws the same two-part ring as Input (page-fill gap +\n * primaryOrange). Inline styles can't express :focus-visible, so the\n * ring shows on every focus, not just keyboard focus.\n */\nimport {\n  forwardRef,\n  useLayoutEffect,\n  useRef,\n  useState,\n  type ChangeEvent,\n  type CSSProperties,\n} from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { motion, radius, spacing, transition } from \"@plyxui/core\";\n\nexport type TextareaSize = \"sm\" | \"md\" | \"lg\";\n\nconst sizeMap: Record<TextareaSize, { fontSize: number; padX: number; padY: number; lineHeight: number }> = {\n  sm: { fontSize: 13, padX: spacing[2], padY: spacing[2], lineHeight: 18 },\n  md: { fontSize: 14, padX: spacing[3], padY: spacing[2], lineHeight: 21 },\n  lg: { fontSize: 16, padX: spacing[4], padY: spacing[3], lineHeight: 24 },\n};\n\nexport interface TextareaProps {\n  value?: string;\n  defaultValue?: string;\n  onChange?: (value: string, event: ChangeEvent<HTMLTextAreaElement>) => void;\n  placeholder?: string;\n  size?: TextareaSize;\n  invalid?: boolean;\n  disabled?: boolean;\n  /** Visible rows at rest (also the auto-grow floor). Default 3. */\n  rows?: number;\n  /** Grow with content up to maxRows instead of scrolling. Default true. */\n  autoGrow?: boolean;\n  /** Auto-grow ceiling; beyond it the textarea scrolls. Default 12. */\n  maxRows?: number;\n  className?: string;\n  style?: CSSProperties;\n  autoFocus?: boolean;\n  id?: string;\n  name?: string;\n  maxLength?: number;\n  \"aria-label\"?: string;\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n  {\n    value,\n    defaultValue,\n    onChange,\n    placeholder,\n    size = \"md\",\n    invalid,\n    disabled,\n    rows = 3,\n    autoGrow = true,\n    maxRows = 12,\n    className,\n    style,\n    autoFocus,\n    id,\n    name,\n    maxLength,\n    ...aria\n  },\n  ref,\n) {\n  const { colors } = useTheme();\n  const [internal, setInternal] = useState<string>(defaultValue ?? \"\");\n  const [focused, setFocused] = useState(false);\n  const isControlled = value !== undefined;\n  const current = isControlled ? value : internal;\n  const dims = sizeMap[size];\n\n  // Merge the forwarded ref with our own so auto-grow can measure.\n  const innerRef = useRef<HTMLTextAreaElement | null>(null);\n  const setRefs = (el: HTMLTextAreaElement | null) => {\n    innerRef.current = el;\n    if (typeof ref === \"function\") ref(el);\n    else if (ref) (ref as React.MutableRefObject<HTMLTextAreaElement | null>).current = el;\n  };\n\n  const frame = dims.padY * 2 + 2; // vertical padding + 1px border top/bottom\n  const minH = rows * dims.lineHeight + frame;\n  const maxH = maxRows * dims.lineHeight + frame;\n\n  useLayoutEffect(() => {\n    const el = innerRef.current;\n    if (!el || !autoGrow) return;\n    el.style.height = \"auto\";\n    el.style.height = `${Math.min(Math.max(el.scrollHeight, minH), maxH)}px`;\n    el.style.overflowY = el.scrollHeight > maxH ? \"auto\" : \"hidden\";\n  }, [current, autoGrow, minH, maxH]);\n\n  const textareaStyle: CSSProperties = {\n    width: \"100%\",\n    boxSizing: \"border-box\",\n    minHeight: minH,\n    padding: `${dims.padY}px ${dims.padX}px`,\n    background: colors.surfaceFill,\n    border: `1px solid ${invalid ? colors.statusError : focused ? colors.primaryOrange : colors.stroke}`,\n    borderRadius: radius.md,\n    color: colors.text,\n    fontSize: dims.fontSize,\n    lineHeight: `${dims.lineHeight}px`,\n    fontFamily: \"inherit\",\n    outline: \"none\",\n    resize: autoGrow ? \"none\" : \"vertical\",\n    opacity: disabled ? 0.55 : 1,\n    boxShadow: focused\n      ? `0 0 0 2px ${colors.primaryFill}, 0 0 0 4px ${invalid ? colors.statusError : colors.primaryOrange}`\n      : \"none\",\n    transition: [\n      transition(\"border-color\", motion.controlHover),\n      transition(\"box-shadow\", motion.controlHover),\n    ].join(\", \"),\n    ...style,\n  };\n\n  return (\n    <textarea\n      ref={setRefs}\n      className={className}\n      id={id}\n      name={name}\n      value={current}\n      rows={rows}\n      maxLength={maxLength}\n      onChange={(e) => {\n        if (!isControlled) setInternal(e.target.value);\n        onChange?.(e.target.value, e);\n      }}\n      placeholder={placeholder}\n      disabled={disabled}\n      autoFocus={autoFocus}\n      aria-invalid={invalid || undefined}\n      aria-label={aria[\"aria-label\"]}\n      style={textareaStyle}\n      onFocus={() => setFocused(true)}\n      onBlur={() => setFocused(false)}\n    />\n  );\n});\n","/**\n * Button (web). Variants: primary, ghost, link, danger. Size + iconLeading/Trailing.\n *\n * Renders as a native <button>; if you need a navigation link, pass `as=\"a\"`.\n */\nimport { forwardRef, type ElementType, type CSSProperties, type ForwardedRef } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { radius, spacing } from \"@plyxui/core\";\nimport type { PolymorphicComponentPropsWithRef } from \"@plyxui/core\";\n\nexport type ButtonVariant = \"primary\" | \"ghost\" | \"link\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nconst sizeMap: Record<ButtonSize, { h: number; padX: number; fontSize: number }> = {\n  sm: { h: 28, padX: spacing[3], fontSize: 13 },\n  md: { h: 36, padX: spacing[4], fontSize: 14 },\n  lg: { h: 44, padX: spacing[5], fontSize: 15 },\n};\n\ntype ButtonOwnProps = {\n  variant?: ButtonVariant;\n  size?: ButtonSize;\n  loading?: boolean;\n  disabled?: boolean;\n  iconLeading?: React.ReactNode;\n  iconTrailing?: React.ReactNode;\n  fullWidth?: boolean;\n  className?: string;\n  style?: CSSProperties;\n  children?: React.ReactNode;\n};\n\nexport type ButtonProps<C extends ElementType = \"button\"> = PolymorphicComponentPropsWithRef<\n  C,\n  ButtonOwnProps\n>;\n\nfunction variantStyle(\n  variant: ButtonVariant,\n  colors: { primaryOrange: string; surfaceFill: string; text: string; stroke: string; statusError: string },\n): CSSProperties {\n  switch (variant) {\n    case \"primary\":\n      return { background: colors.primaryOrange, color: \"#FFFFFF\", border: \"1px solid transparent\" };\n    case \"ghost\":\n      return { background: \"transparent\", color: colors.text, border: `1px solid ${colors.stroke}` };\n    case \"link\":\n      return { background: \"transparent\", color: colors.primaryOrange, border: \"1px solid transparent\", padding: 0, height: \"auto\" };\n    case \"danger\":\n      return { background: colors.statusError, color: \"#FFFFFF\", border: \"1px solid transparent\" };\n  }\n}\n\nfunction ButtonImpl<C extends ElementType = \"button\">(\n  {\n    as,\n    variant = \"primary\",\n    size = \"md\",\n    loading,\n    disabled,\n    iconLeading,\n    iconTrailing,\n    fullWidth,\n    className,\n    style,\n    children,\n    ...rest\n  }: ButtonProps<C>,\n  ref: ForwardedRef<Element>,\n) {\n  const Component = (as ?? \"button\") as ElementType;\n  const { colors } = useTheme();\n  const dims = sizeMap[size];\n  const computed: CSSProperties = {\n    display: \"inline-flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    gap: spacing[2],\n    height: variant === \"link\" ? \"auto\" : dims.h,\n    padding: variant === \"link\" ? 0 : `0 ${dims.padX}px`,\n    fontSize: dims.fontSize,\n    fontWeight: 600,\n    fontFamily: \"inherit\",\n    borderRadius: variant === \"link\" ? 0 : radius.md,\n    cursor: disabled || loading ? \"not-allowed\" : \"pointer\",\n    opacity: disabled ? 0.55 : 1,\n    width: fullWidth ? \"100%\" : undefined,\n    transition: \"filter 0.15s ease, transform 0.05s ease, background 0.15s ease\",\n    ...variantStyle(variant, colors),\n    ...style,\n  };\n  return (\n    <Component\n      ref={ref}\n      className={className}\n      style={computed}\n      disabled={disabled || loading || undefined}\n      aria-busy={loading || undefined}\n      {...rest}\n    >\n      {iconLeading}\n      {children}\n      {iconTrailing}\n    </Component>\n  );\n}\n\nexport const Button = forwardRef(ButtonImpl) as <C extends ElementType = \"button\">(\n  props: ButtonProps<C>,\n) => React.ReactElement | null;\n","/**\n * Image (web). Thin wrapper around <img> with theme-aware skeleton, fit,\n * and an optional fallback when the URL fails.\n *\n *   <Image src={user.avatar} alt={user.name} width={32} height={32} radius=\"pill\" />\n *\n * Aspect ratio takes precedence over width/height when both are set;\n * useful for responsive cards where you want a 16/9 slot regardless of\n * the actual image size.\n */\nimport { forwardRef, useState, type CSSProperties, type ImgHTMLAttributes, type ReactNode } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { radius as radiusTokens, type RadiusKey } from \"@plyxui/core\";\n\nexport type ImageFit = \"cover\" | \"contain\" | \"fill\" | \"none\" | \"scale-down\";\n\nexport interface ImageProps\n  extends Omit<ImgHTMLAttributes<HTMLImageElement>, \"width\" | \"height\"> {\n  src: string;\n  alt: string;\n  width?: number | string;\n  height?: number | string;\n  /** Aspect ratio in CSS form, e.g. \"16 / 9\" or 1.5. Wins over width+height when both are set. */\n  aspectRatio?: string | number;\n  /** object-fit. Default \"cover\". */\n  fit?: ImageFit;\n  /** Radius token from @plyxui/core, or a raw pixel value. */\n  radius?: RadiusKey | number;\n  /** Rendered while the image is loading. Defaults to a theme-colored skeleton. */\n  placeholder?: ReactNode;\n  /** Rendered when the image fails to load. */\n  fallback?: ReactNode;\n  style?: CSSProperties;\n}\n\nexport const Image = forwardRef<HTMLImageElement, ImageProps>(function Image(\n  {\n    src,\n    alt,\n    width,\n    height,\n    aspectRatio,\n    fit = \"cover\",\n    radius,\n    placeholder,\n    fallback,\n    style,\n    ...rest\n  },\n  ref,\n) {\n  const { colors } = useTheme();\n  const [state, setState] = useState<\"loading\" | \"loaded\" | \"error\">(\"loading\");\n\n  const radiusValue =\n    typeof radius === \"number\" ? radius : radius ? radiusTokens[radius] : undefined;\n\n  const containerStyle: CSSProperties = {\n    position: \"relative\",\n    display: \"inline-block\",\n    width,\n    height,\n    aspectRatio: aspectRatio as CSSProperties[\"aspectRatio\"],\n    borderRadius: radiusValue,\n    overflow: radiusValue ? \"hidden\" : undefined,\n    background: state === \"loading\" ? colors.containerFill : undefined,\n    lineHeight: 0,\n  };\n\n  if (state === \"error\" && fallback) {\n    return (\n      <span style={containerStyle} aria-label={alt} role=\"img\">\n        {fallback}\n      </span>\n    );\n  }\n\n  return (\n    <span style={containerStyle}>\n      <img\n        ref={ref}\n        src={src}\n        alt={alt}\n        onLoad={() => setState(\"loaded\")}\n        onError={() => setState(\"error\")}\n        style={{\n          width: \"100%\",\n          height: \"100%\",\n          objectFit: fit,\n          display: \"block\",\n          borderRadius: radiusValue,\n          opacity: state === \"loaded\" ? 1 : 0,\n          transition: \"opacity 0.18s ease\",\n          ...style,\n        }}\n        {...rest}\n      />\n      {state === \"loading\" && !placeholder ? null : null}\n      {state === \"loading\" && placeholder ? (\n        <span style={{ position: \"absolute\", inset: 0, display: \"grid\", placeItems: \"center\" }}>\n          {placeholder}\n        </span>\n      ) : null}\n    </span>\n  );\n});\n","/**\n * Card (web). A bordered surface — the default container for grouped\n * content. Hairline border is the resting elevation (no shadow by\n * default); `interactive` warms the border on hover so clickable cards\n * read as clickable.\n *\n *   <Card>…</Card>\n *   <Card variant=\"raised\" padding=\"lg\" />\n *   <Card interactive onClick={…} />\n */\nimport { forwardRef, type CSSProperties, type ReactNode } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { radius as radiusScale, spacing } from \"@plyxui/core\";\n\nexport type CardVariant = \"outline\" | \"raised\" | \"sunken\";\nexport type CardPadding = \"none\" | \"sm\" | \"md\" | \"lg\";\nexport type CardRadius = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nconst padMap: Record<CardPadding, number> = {\n  none: 0,\n  sm: spacing[3],\n  md: spacing[4],\n  lg: spacing[6],\n};\n\nexport interface CardProps {\n  variant?: CardVariant;\n  padding?: CardPadding;\n  radius?: CardRadius;\n  /** Warm the border on hover; renders as a button when onClick is set. */\n  interactive?: boolean;\n  onClick?: () => void;\n  className?: string;\n  style?: CSSProperties;\n  children?: ReactNode;\n  \"aria-label\"?: string;\n}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n  { variant = \"outline\", padding = \"md\", radius = \"lg\", interactive, onClick, className, style, children, ...aria },\n  ref,\n) {\n  const { colors } = useTheme();\n\n  const bg =\n    variant === \"raised\" ? colors.surfaceFill : variant === \"sunken\" ? colors.containerFill : colors.surfaceFill;\n\n  const base: CSSProperties = {\n    background: bg,\n    border: `1px solid ${colors.stroke}`,\n    borderRadius: radiusScale[radius],\n    padding: padMap[padding],\n    cursor: interactive || onClick ? \"pointer\" : undefined,\n    transition: \"border-color 0.2s cubic-bezier(0.23,1,0.32,1), transform 0.2s cubic-bezier(0.23,1,0.32,1)\",\n    ...style,\n  };\n\n  const hoverOn = (e: React.MouseEvent<HTMLDivElement>) => {\n    if (!interactive && !onClick) return;\n    e.currentTarget.style.borderColor = colors.primaryOrange;\n  };\n  const hoverOff = (e: React.MouseEvent<HTMLDivElement>) => {\n    if (!interactive && !onClick) return;\n    e.currentTarget.style.borderColor = colors.stroke;\n  };\n\n  return (\n    <div\n      ref={ref}\n      className={className}\n      style={base}\n      onClick={onClick}\n      onMouseEnter={hoverOn}\n      onMouseLeave={hoverOff}\n      role={onClick ? \"button\" : undefined}\n      tabIndex={onClick ? 0 : undefined}\n      aria-label={aria[\"aria-label\"]}\n    >\n      {children}\n    </div>\n  );\n});\n","/**\n * Badge (web). A small pill for status, tags, and counts. Tone-driven:\n * accent for emphasis, semantic tones for status, ghost for a dashed\n * outline. `soft` fills with a tinted background instead of a border.\n *\n *   <Badge tone=\"accent\">Promoted</Badge>\n *   <Badge tone=\"success\" soft>ATS-safe</Badge>\n *   <Badge tone=\"ghost\">OTIF</Badge>\n */\nimport type { CSSProperties, ReactNode } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { radius, spacing } from \"@plyxui/core\";\n\nexport type BadgeTone = \"neutral\" | \"accent\" | \"success\" | \"warning\" | \"danger\" | \"ghost\";\nexport type BadgeSize = \"sm\" | \"md\";\n\nconst sizeMap: Record<BadgeSize, { fontSize: number; padY: number; padX: number }> = {\n  sm: { fontSize: 11, padY: 2, padX: spacing[2] },\n  md: { fontSize: 12, padY: 4, padX: spacing[3] },\n};\n\nexport interface BadgeProps {\n  tone?: BadgeTone;\n  size?: BadgeSize;\n  /** Filled tinted background instead of a bordered outline. */\n  soft?: boolean;\n  leading?: ReactNode;\n  className?: string;\n  style?: CSSProperties;\n  children?: ReactNode;\n}\n\nfunction withAlpha(hex: string, a: number): string {\n  const n = parseInt(hex.slice(1), 16);\n  return `rgba(${(n >> 16) & 255}, ${(n >> 8) & 255}, ${n & 255}, ${a})`;\n}\n\nexport function Badge({ tone = \"neutral\", size = \"md\", soft, leading, className, style, children }: BadgeProps) {\n  const { colors } = useTheme();\n  const dims = sizeMap[size];\n\n  const toneColor: Record<BadgeTone, string> = {\n    neutral: colors.textMuted,\n    accent: colors.primaryOrange,\n    success: colors.statusSuccess,\n    warning: colors.statusWarning,\n    danger: colors.statusError,\n    ghost: colors.textMuted,\n  };\n  const fg = toneColor[tone];\n\n  const base: CSSProperties = {\n    display: \"inline-flex\",\n    alignItems: \"center\",\n    gap: 5,\n    fontSize: dims.fontSize,\n    fontWeight: 600,\n    lineHeight: 1.2,\n    padding: `${dims.padY}px ${dims.padX}px`,\n    borderRadius: radius.pill,\n    whiteSpace: \"nowrap\",\n    color: tone === \"neutral\" ? colors.text : fg,\n    background: soft ? withAlpha(fg, 0.12) : \"transparent\",\n    border: soft\n      ? \"1px solid transparent\"\n      : `1px ${tone === \"ghost\" ? \"dashed\" : \"solid\"} ${tone === \"neutral\" ? colors.stroke : withAlpha(fg, 0.4)}`,\n    ...style,\n  };\n\n  return (\n    <span className={className} style={base}>\n      {leading}\n      {children}\n    </span>\n  );\n}\n","/**\n * Progress (web). A horizontal meter. `value` is 0–1. The fill uses a\n * transform:scaleX transition (GPU-cheap, never animates width), so it\n * moves smoothly when the value updates live — score bars, completion.\n *\n *   <Progress value={0.76} />\n *   <Progress value={0.4} tone=\"warning\" size=\"sm\" />\n */\nimport type { CSSProperties } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { radius } from \"@plyxui/core\";\n\nexport type ProgressTone = \"accent\" | \"success\" | \"warning\" | \"danger\";\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\n\nconst heightMap: Record<ProgressSize, number> = { sm: 5, md: 8, lg: 12 };\n\nexport interface ProgressProps {\n  /** 0–1. Values outside are clamped. */\n  value: number;\n  tone?: ProgressTone;\n  size?: ProgressSize;\n  /** Override the fill color; wins over `tone`. */\n  color?: string;\n  trackColor?: string;\n  className?: string;\n  style?: CSSProperties;\n  \"aria-label\"?: string;\n}\n\nexport function Progress({ value, tone = \"accent\", size = \"md\", color, trackColor, className, style, ...aria }: ProgressProps) {\n  const { colors } = useTheme();\n  const clamped = Math.max(0, Math.min(1, value));\n\n  const toneColor: Record<ProgressTone, string> = {\n    accent: colors.primaryOrange,\n    success: colors.statusSuccess,\n    warning: colors.statusWarning,\n    danger: colors.statusError,\n  };\n  const fill = color ?? toneColor[tone];\n  const h = heightMap[size];\n\n  return (\n    <div\n      className={className}\n      role=\"progressbar\"\n      aria-valuenow={Math.round(clamped * 100)}\n      aria-valuemin={0}\n      aria-valuemax={100}\n      aria-label={aria[\"aria-label\"]}\n      style={{\n        height: h,\n        width: \"100%\",\n        background: trackColor ?? colors.containerFill,\n        borderRadius: radius.pill,\n        overflow: \"hidden\",\n        ...style,\n      }}\n    >\n      <div\n        style={{\n          height: \"100%\",\n          width: \"100%\",\n          background: fill,\n          borderRadius: radius.pill,\n          transformOrigin: \"left\",\n          transform: `scaleX(${clamped})`,\n          transition: \"transform 0.28s cubic-bezier(0.23,1,0.32,1)\",\n        }}\n      />\n    </div>\n  );\n}\n","/**\n * Switch (web). A binary toggle — the on/off sibling of Checkbox, for\n * settings and instant-apply options. Track fills with the accent when\n * on; the thumb slides with a short ease-out.\n *\n *   <Switch checked={on} onChange={setOn} />\n *   <Switch defaultChecked label=\"Open to relocation\" />\n */\nimport { useState, type CSSProperties, type ReactNode } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\n\nexport type SwitchSize = \"sm\" | \"md\";\n\nconst sizeMap: Record<SwitchSize, { w: number; h: number; thumb: number; pad: number }> = {\n  sm: { w: 34, h: 20, thumb: 14, pad: 3 },\n  md: { w: 44, h: 26, thumb: 20, pad: 3 },\n};\n\nexport interface SwitchProps {\n  checked?: boolean;\n  defaultChecked?: boolean;\n  onChange?: (checked: boolean) => void;\n  disabled?: boolean;\n  size?: SwitchSize;\n  label?: ReactNode;\n  id?: string;\n  \"aria-label\"?: string;\n}\n\nexport function Switch({ checked, defaultChecked, onChange, disabled, size = \"md\", label, id, ...aria }: SwitchProps) {\n  const { colors } = useTheme();\n  const [internal, setInternal] = useState<boolean>(defaultChecked ?? false);\n  const isControlled = checked !== undefined;\n  const on = isControlled ? checked : internal;\n  const dims = sizeMap[size];\n\n  const toggle = () => {\n    if (disabled) return;\n    if (!isControlled) setInternal(!on);\n    onChange?.(!on);\n  };\n\n  const track: CSSProperties = {\n    width: dims.w,\n    height: dims.h,\n    borderRadius: dims.h,\n    background: on ? colors.primaryOrange : colors.stroke,\n    border: \"none\",\n    position: \"relative\",\n    cursor: disabled ? \"default\" : \"pointer\",\n    opacity: disabled ? 0.55 : 1,\n    transition: \"background 0.2s cubic-bezier(0.23,1,0.32,1)\",\n    flex: \"none\",\n    padding: 0,\n  };\n  const thumb: CSSProperties = {\n    position: \"absolute\",\n    top: dims.pad,\n    left: dims.pad,\n    width: dims.thumb,\n    height: dims.thumb,\n    borderRadius: \"50%\",\n    background: \"#fff\",\n    boxShadow: \"0 1px 2px rgba(0,0,0,.25)\",\n    transform: on ? `translateX(${dims.w - dims.thumb - dims.pad * 2}px)` : \"translateX(0)\",\n    transition: \"transform 0.2s cubic-bezier(0.23,1,0.32,1)\",\n  };\n\n  const control = (\n    <button\n      type=\"button\"\n      role=\"switch\"\n      aria-checked={on}\n      aria-label={aria[\"aria-label\"]}\n      id={id}\n      disabled={disabled}\n      onClick={toggle}\n      style={track}\n    >\n      <span style={thumb} />\n    </button>\n  );\n\n  if (!label) return control;\n  return (\n    <label style={{ display: \"inline-flex\", alignItems: \"center\", gap: 10, cursor: disabled ? \"default\" : \"pointer\" }}>\n      {control}\n      <span style={{ fontSize: 14, color: colors.text }}>{label}</span>\n    </label>\n  );\n}\n","/**\n * Segmented (web). A compact single-select control — a row of segments\n * with one active. For 2–4 mutually exclusive views (Review / Pack,\n * Edit / Score / Preview, theme mode). Sliding highlight tracks the\n * selection.\n *\n *   <Segmented value={tab} onChange={setTab}\n *     options={[{label:\"Review\",value:\"review\"},{label:\"Pack\",value:\"pack\"}]} />\n */\nimport { type CSSProperties } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { radius, spacing } from \"@plyxui/core\";\n\nexport type SegmentedSize = \"sm\" | \"md\";\n\nexport interface SegmentedOption<T extends string = string> {\n  label: string;\n  value: T;\n  disabled?: boolean;\n}\n\nexport interface SegmentedProps<T extends string = string> {\n  options: SegmentedOption<T>[];\n  value: T;\n  onChange: (value: T) => void;\n  size?: SegmentedSize;\n  fullWidth?: boolean;\n  className?: string;\n  style?: CSSProperties;\n}\n\nconst heightMap: Record<SegmentedSize, number> = { sm: 30, md: 36 };\n\nexport function Segmented<T extends string = string>({\n  options,\n  value,\n  onChange,\n  size = \"md\",\n  fullWidth,\n  className,\n  style,\n}: SegmentedProps<T>) {\n  const { colors } = useTheme();\n  const idx = Math.max(0, options.findIndex((o) => o.value === value));\n  const h = heightMap[size];\n\n  return (\n    <div\n      className={className}\n      role=\"tablist\"\n      style={{\n        position: \"relative\",\n        display: fullWidth ? \"grid\" : \"inline-grid\",\n        gridTemplateColumns: `repeat(${options.length}, ${fullWidth ? \"1fr\" : \"minmax(64px, auto)\"})`,\n        padding: 3,\n        gap: 0,\n        height: h,\n        background: colors.containerFill,\n        borderRadius: radius.md,\n        ...style,\n      }}\n    >\n      {/* sliding highlight */}\n      <span\n        aria-hidden\n        style={{\n          position: \"absolute\",\n          top: 3,\n          left: 3,\n          bottom: 3,\n          width: `calc((100% - 6px) / ${options.length})`,\n          transform: `translateX(${idx * 100}%)`,\n          background: colors.surfaceFill,\n          borderRadius: radius.sm,\n          boxShadow: \"0 1px 2px rgba(0,0,0,.08)\",\n          transition: \"transform 0.22s cubic-bezier(0.23,1,0.32,1)\",\n        }}\n      />\n      {options.map((o) => {\n        const active = o.value === value;\n        return (\n          <button\n            key={o.value}\n            type=\"button\"\n            role=\"tab\"\n            aria-selected={active}\n            disabled={o.disabled}\n            onClick={() => !o.disabled && onChange(o.value)}\n            style={{\n              position: \"relative\",\n              zIndex: 1,\n              background: \"transparent\",\n              border: \"none\",\n              cursor: o.disabled ? \"default\" : \"pointer\",\n              padding: `0 ${spacing[3]}px`,\n              font: \"inherit\",\n              fontSize: size === \"sm\" ? 12.5 : 13.5,\n              fontWeight: 600,\n              color: active ? colors.text : colors.textMuted,\n              opacity: o.disabled ? 0.5 : 1,\n              transition: \"color 0.2s ease\",\n              whiteSpace: \"nowrap\",\n            }}\n          >\n            {o.label}\n          </button>\n        );\n      })}\n    </div>\n  );\n}\n","/**\n * Collapsible (web). A titled region that expands and collapses — the\n * building block for accordions and expandable resume sections. Height\n * animates via the grid-template-rows 0fr→1fr technique (real height,\n * no magic max-height guess), and the chevron rotates.\n *\n *   <Collapsible title=\"Experience\" defaultOpen>…</Collapsible>\n *   <Collapsible title=\"Advanced\" open={o} onOpenChange={setO}>…</Collapsible>\n */\nimport { useState, type CSSProperties, type ReactNode } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { spacing } from \"@plyxui/core\";\n\nexport interface CollapsibleProps {\n  title: ReactNode;\n  /** Optional right-aligned adornment in the header (a count, a badge). */\n  aside?: ReactNode;\n  open?: boolean;\n  defaultOpen?: boolean;\n  onOpenChange?: (open: boolean) => void;\n  disabled?: boolean;\n  className?: string;\n  style?: CSSProperties;\n  children?: ReactNode;\n}\n\nexport function Collapsible({\n  title,\n  aside,\n  open,\n  defaultOpen,\n  onOpenChange,\n  disabled,\n  className,\n  style,\n  children,\n}: CollapsibleProps) {\n  const { colors } = useTheme();\n  const [internal, setInternal] = useState<boolean>(defaultOpen ?? false);\n  const isControlled = open !== undefined;\n  const isOpen = isControlled ? open : internal;\n\n  const toggle = () => {\n    if (disabled) return;\n    if (!isControlled) setInternal(!isOpen);\n    onOpenChange?.(!isOpen);\n  };\n\n  return (\n    <div className={className} style={style}>\n      <button\n        type=\"button\"\n        aria-expanded={isOpen}\n        disabled={disabled}\n        onClick={toggle}\n        style={{\n          width: \"100%\",\n          display: \"flex\",\n          alignItems: \"center\",\n          gap: spacing[2],\n          padding: `${spacing[3]}px 0`,\n          background: \"transparent\",\n          border: \"none\",\n          cursor: disabled ? \"default\" : \"pointer\",\n          font: \"inherit\",\n          fontSize: 14,\n          fontWeight: 600,\n          color: colors.text,\n          textAlign: \"left\",\n        }}\n      >\n        <span\n          aria-hidden\n          style={{\n            display: \"inline-block\",\n            width: 10,\n            height: 10,\n            borderRight: `1.5px solid ${colors.textMuted}`,\n            borderBottom: `1.5px solid ${colors.textMuted}`,\n            transform: isOpen ? \"rotate(45deg)\" : \"rotate(-45deg)\",\n            transformOrigin: \"center\",\n            transition: \"transform 0.2s cubic-bezier(0.23,1,0.32,1)\",\n            marginRight: 2,\n          }}\n        />\n        <span style={{ flex: 1 }}>{title}</span>\n        {aside}\n      </button>\n      <div\n        style={{\n          display: \"grid\",\n          gridTemplateRows: isOpen ? \"1fr\" : \"0fr\",\n          transition: \"grid-template-rows 0.26s cubic-bezier(0.23,1,0.32,1)\",\n        }}\n      >\n        <div style={{ overflow: \"hidden\" }}>\n          <div style={{ paddingBottom: isOpen ? spacing[3] : 0 }}>{children}</div>\n        </div>\n      </div>\n    </div>\n  );\n}\n","/**\n * Divider (web). A line. Horizontal by default; pass orientation=\"vertical\"\n * to split a row. Optional inline label sits in the middle.\n *\n *   <Divider />\n *   <Divider label=\"OR\" />\n *   <Flex>...<Divider orientation=\"vertical\" />...</Flex>\n */\nimport type { CSSProperties, ReactNode } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { spacing } from \"@plyxui/core\";\n\nexport interface DividerProps {\n  orientation?: \"horizontal\" | \"vertical\";\n  /** Inline label split-mode. Only meaningful for horizontal. */\n  label?: ReactNode;\n  /** Indent the line from the edge. Pixels. */\n  inset?: number;\n  /** Override the line color. Defaults to colors.stroke. */\n  color?: string;\n  /** Line thickness in pixels. Default 1. */\n  thickness?: number;\n  /** \"dashed\" or \"solid\". Default \"solid\". */\n  style?: \"solid\" | \"dashed\";\n  className?: string;\n}\n\nexport function Divider({\n  orientation = \"horizontal\",\n  label,\n  inset = 0,\n  color,\n  thickness = 1,\n  style: variant = \"solid\",\n  className,\n}: DividerProps) {\n  const { colors } = useTheme();\n  const lineColor = color ?? colors.stroke;\n\n  if (orientation === \"vertical\") {\n    const style: CSSProperties = {\n      alignSelf: \"stretch\",\n      width: thickness,\n      borderLeft: `${thickness}px ${variant} ${lineColor}`,\n      marginTop: inset,\n      marginBottom: inset,\n    };\n    return <div role=\"separator\" aria-orientation=\"vertical\" className={className} style={style} />;\n  }\n\n  if (label) {\n    return (\n      <div\n        role=\"separator\"\n        className={className}\n        style={{\n          display: \"flex\",\n          alignItems: \"center\",\n          gap: spacing[3],\n          color: colors.textMuted,\n          fontSize: 12,\n          fontWeight: 500,\n          marginLeft: inset,\n          marginRight: inset,\n        }}\n      >\n        <span style={{ flex: 1, borderTop: `${thickness}px ${variant} ${lineColor}` }} />\n        <span>{label}</span>\n        <span style={{ flex: 1, borderTop: `${thickness}px ${variant} ${lineColor}` }} />\n      </div>\n    );\n  }\n\n  return (\n    <hr\n      className={className}\n      style={{\n        border: 0,\n        borderTop: `${thickness}px ${variant} ${lineColor}`,\n        marginLeft: inset,\n        marginRight: inset,\n        marginTop: 0,\n        marginBottom: 0,\n        height: 0,\n      }}\n    />\n  );\n}\n","/**\n * Spinner (web). Indeterminate loading indicator built on an SVG arc +\n * a CSS keyframe. Theme-colored by default, override with `color`.\n *\n *   <Spinner />\n *   <Spinner size=\"lg\" color={colors.primaryOrange} />\n *   <Button loading={isSaving} iconLeading={<Spinner size=\"sm\" />}>Save</Button>\n *\n * Renders an aria-label by default so the loading state is announced to\n * screen readers; pass `label={null}` to suppress when there's already a\n * visible \"Loading…\" text alongside.\n */\nimport { useTheme } from \"@plyxui/styles\";\n\nexport type SpinnerSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nconst sizeMap: Record<SpinnerSize, number> = {\n  xs: 12,\n  sm: 16,\n  md: 20,\n  lg: 28,\n  xl: 40,\n};\n\nexport interface SpinnerProps {\n  size?: SpinnerSize | number;\n  /** Defaults to primaryOrange. */\n  color?: string;\n  /** Stroke thickness as a fraction of size. Default 0.12. */\n  thickness?: number;\n  /** Screen-reader label. Default \"Loading\". Pass null to suppress. */\n  label?: string | null;\n  className?: string;\n}\n\n// Inject the keyframes once per page. Avoids a global stylesheet dependency.\nconst KEYFRAMES_ID = \"plyxui-spinner-keyframes\";\nfunction ensureKeyframes() {\n  if (typeof document === \"undefined\") return;\n  if (document.getElementById(KEYFRAMES_ID)) return;\n  const style = document.createElement(\"style\");\n  style.id = KEYFRAMES_ID;\n  style.textContent = `\n@keyframes plyxui-spin {\n  to { transform: rotate(360deg); }\n}`;\n  document.head.appendChild(style);\n}\n\nexport function Spinner({\n  size = \"md\",\n  color,\n  thickness = 0.12,\n  label = \"Loading\",\n  className,\n}: SpinnerProps) {\n  ensureKeyframes();\n  const { colors } = useTheme();\n  const px = typeof size === \"number\" ? size : sizeMap[size];\n  const stroke = Math.max(1, Math.round(px * thickness));\n  const finalColor = color ?? colors.primaryOrange;\n  const r = (px - stroke) / 2;\n  const c = px / 2;\n  const circumference = 2 * Math.PI * r;\n  // Show ~25% of the ring at any time.\n  const dash = circumference * 0.25;\n\n  return (\n    <span\n      role={label ? \"status\" : \"presentation\"}\n      aria-label={label ?? undefined}\n      className={className}\n      style={{\n        display: \"inline-block\",\n        width: px,\n        height: px,\n        animation: \"plyxui-spin 0.7s linear infinite\",\n        color: finalColor,\n        lineHeight: 0,\n      }}\n    >\n      <svg width={px} height={px} viewBox={`0 0 ${px} ${px}`} fill=\"none\">\n        <circle cx={c} cy={c} r={r} stroke=\"currentColor\" strokeOpacity={0.18} strokeWidth={stroke} />\n        <circle\n          cx={c}\n          cy={c}\n          r={r}\n          stroke=\"currentColor\"\n          strokeWidth={stroke}\n          strokeLinecap=\"round\"\n          strokeDasharray={`${dash} ${circumference - dash}`}\n          transform={`rotate(-90 ${c} ${c})`}\n        />\n      </svg>\n    </span>\n  );\n}\n","/**\n * Presence (web). Mount/unmount transition primitive — keeps children in\n * the tree while they animate out, then actually unmounts. Every overlay\n * in the library used to `if (!open) return null`, which meant nothing\n * ever animated its exit; this is the missing half of that story.\n *\n *   <Presence present={open}>{panel}</Presence>\n *   <Presence present={open} from={{ opacity: 0, scale: 0.98 }}>{panel}</Presence>\n *   <Presence present={show} onExitComplete={() => queue.shift()}>{toast}</Presence>\n *\n * Animates via WAAPI (element.animate) with the motion tokens — enter\n * defaults to motion.overlayEnter, exit to motion.overlayExit; a `duration`\n * or `easing` prop overrides both directions. The wrapper div carries\n * data-state=\"open|closed\" so CSS can hook either state. Reduced motion\n * collapses to a fast opacity-only fade.\n */\nimport { useEffect, useLayoutEffect, useRef, useState, type CSSProperties, type ReactNode } from \"react\";\nimport { motion, type MotionSpec } from \"@plyxui/core\";\nimport { useReducedMotion } from \"@plyxui/hooks\";\n\nexport interface PresenceFrom {\n  opacity?: number;\n  translateX?: number;\n  translateY?: number;\n  scale?: number;\n}\n\nexport interface PresenceProps {\n  /** Logical mounted state. Children stay in the DOM while exiting. */\n  present: boolean;\n  /** Hidden pose the content enters from and exits to. Default `{ opacity: 0, translateY: 8 }`. */\n  from?: PresenceFrom;\n  /** Override duration (ms) for both enter and exit. Defaults to the motion tokens. */\n  duration?: number;\n  /** Override easing (CSS string) for both enter and exit. */\n  easing?: string;\n  /** Fires after the exit animation finishes and children unmount. */\n  onExitComplete?: () => void;\n  className?: string;\n  style?: CSSProperties;\n  children?: ReactNode;\n}\n\nconst DEFAULT_FROM: PresenceFrom = { opacity: 0, translateY: 8 };\n\nfunction poseToKeyframe(from: PresenceFrom): Keyframe {\n  const transforms: string[] = [];\n  if (from.translateX !== undefined || from.translateY !== undefined) {\n    transforms.push(`translate(${from.translateX ?? 0}px, ${from.translateY ?? 0}px)`);\n  }\n  if (from.scale !== undefined) transforms.push(`scale(${from.scale})`);\n  const kf: Keyframe = {};\n  if (from.opacity !== undefined) kf.opacity = from.opacity;\n  if (transforms.length > 0) kf.transform = transforms.join(\" \");\n  return kf;\n}\n\nconst IDENTITY: Keyframe = { opacity: 1, transform: \"translate(0px, 0px) scale(1)\" };\n\nexport function Presence({\n  present,\n  from = DEFAULT_FROM,\n  duration,\n  easing,\n  onExitComplete,\n  className,\n  style,\n  children,\n}: PresenceProps) {\n  const [mounted, setMounted] = useState<boolean>(present);\n  const ref = useRef<HTMLDivElement>(null);\n  const animRef = useRef<Animation | null>(null);\n  const reduced = useReducedMotion();\n\n  // Latest callbacks/poses without re-triggering the effects.\n  const latest = useRef({ from, duration, easing, onExitComplete, reduced });\n  latest.current = { from, duration, easing, onExitComplete, reduced };\n\n  if (present && !mounted) setMounted(true);\n\n  const resolve = (base: MotionSpec): MotionSpec => {\n    const l = latest.current;\n    if (l.reduced) return { duration: 50, easing: \"linear\" };\n    return { duration: l.duration ?? base.duration, easing: l.easing ?? base.easing };\n  };\n\n  const hiddenPose = (): Keyframe =>\n    latest.current.reduced ? { opacity: 0 } : poseToKeyframe(latest.current.from);\n\n  useLayoutEffect(() => {\n    const el = ref.current;\n    if (!present || !el) return;\n    animRef.current?.cancel();\n    if (typeof el.animate !== \"function\") return; // SSR/jsdom: appear instantly\n    const spec = resolve(motion.overlayEnter);\n    animRef.current = el.animate([hiddenPose(), IDENTITY], {\n      duration: spec.duration,\n      easing: spec.easing,\n      fill: \"backwards\",\n    });\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [present]);\n\n  useEffect(() => {\n    if (present || !mounted) return;\n    const el = ref.current;\n    const finish = () => {\n      animRef.current = null;\n      setMounted(false);\n      latest.current.onExitComplete?.();\n    };\n    if (!el || typeof el.animate !== \"function\") {\n      finish();\n      return;\n    }\n    animRef.current?.cancel();\n    const spec = resolve(motion.overlayExit);\n    const anim = el.animate([IDENTITY, hiddenPose()], {\n      duration: spec.duration,\n      easing: spec.easing,\n      fill: \"forwards\",\n    });\n    animRef.current = anim;\n    anim.onfinish = finish;\n    return () => {\n      anim.onfinish = null;\n      anim.cancel();\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [present, mounted]);\n\n  if (!mounted) return null;\n\n  return (\n    <div ref={ref} className={className} style={style} data-state={present ? \"open\" : \"closed\"}>\n      {children}\n    </div>\n  );\n}\n","/**\n * Skeleton (web). Shimmer placeholder that holds layout while content\n * loads — a loading state that shows the shape of what's coming reads\n * faster than a spinner that shows nothing.\n *\n *   <Skeleton variant=\"text\" lines={3} />\n *   <Skeleton variant=\"circle\" width={40} />\n *   <Skeleton variant=\"rect\" width=\"100%\" height={120} />\n *\n * The shimmer is a linear-gradient sweep over containerFill, injected as\n * a page-level keyframe once (same pattern as Spinner). Reduced motion\n * renders a static fill — the placeholder still holds space, it just\n * doesn't move.\n */\nimport { type CSSProperties } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { radius } from \"@plyxui/core\";\nimport { useReducedMotion } from \"@plyxui/hooks\";\n\nexport type SkeletonVariant = \"text\" | \"rect\" | \"circle\";\n\nexport interface SkeletonProps {\n  variant?: SkeletonVariant;\n  width?: number | string;\n  height?: number | string;\n  /** For variant=\"text\": number of stacked lines. Last line is shorter. Default 1. */\n  lines?: number;\n  className?: string;\n  style?: CSSProperties;\n}\n\n// Inject the keyframes once per page. Avoids a global stylesheet dependency.\nconst KEYFRAMES_ID = \"plyxui-skeleton-keyframes\";\nfunction ensureKeyframes() {\n  if (typeof document === \"undefined\") return;\n  if (document.getElementById(KEYFRAMES_ID)) return;\n  const style = document.createElement(\"style\");\n  style.id = KEYFRAMES_ID;\n  style.textContent = `\n@keyframes plyxui-shimmer {\n  from { background-position: 200% 0; }\n  to { background-position: -200% 0; }\n}`;\n  document.head.appendChild(style);\n}\n\nexport function Skeleton({\n  variant = \"rect\",\n  width,\n  height,\n  lines = 1,\n  className,\n  style,\n}: SkeletonProps) {\n  ensureKeyframes();\n  const { colors } = useTheme();\n  const reduced = useReducedMotion();\n\n  const base: CSSProperties = reduced\n    ? { background: colors.containerFill }\n    : {\n        background: `linear-gradient(90deg, ${colors.containerFill} 25%, ${colors.surfaceFill} 50%, ${colors.containerFill} 75%)`,\n        backgroundSize: \"200% 100%\",\n        animation: \"plyxui-shimmer 1.6s linear infinite\",\n      };\n\n  if (variant === \"text\" && lines > 1) {\n    return (\n      <div\n        className={className}\n        aria-hidden\n        style={{ display: \"flex\", flexDirection: \"column\", gap: 8, width: width ?? \"100%\", ...style }}\n      >\n        {Array.from({ length: lines }, (_, i) => (\n          <div\n            key={i}\n            style={{\n              ...base,\n              height: height ?? \"1em\",\n              borderRadius: radius.sm,\n              width: i === lines - 1 ? \"60%\" : \"100%\",\n            }}\n          />\n        ))}\n      </div>\n    );\n  }\n\n  const dims: CSSProperties =\n    variant === \"circle\"\n      ? {\n          width: width ?? 40,\n          height: height ?? width ?? 40,\n          borderRadius: radius.pill,\n        }\n      : variant === \"text\"\n        ? { width: width ?? \"100%\", height: height ?? \"1em\", borderRadius: radius.sm }\n        : { width: width ?? \"100%\", height: height ?? 16, borderRadius: radius.md };\n\n  return <div className={className} aria-hidden style={{ ...base, ...dims, ...style }} />;\n}\n","/**\n * AnimatedNumber (web). Counts a number up (or down) to its new value —\n * for score reveals, streak counters, and any moment where the change is\n * the point. A number that travels reads as an event; one that snaps\n * reads as a correction.\n *\n *   <AnimatedNumber value={score} />\n *   <AnimatedNumber value={total} format={(n) => `$${n.toFixed(2)}`} />\n *   <AnimatedNumber value={xp} duration={800} />\n *\n * rAF-driven with an ease-out interpolation (default length\n * motion.celebrate, 500ms). Digits render tabular-nums so the layout\n * doesn't wobble mid-count. Reduced motion snaps to the value instantly.\n */\nimport { useEffect, useRef, useState, type CSSProperties } from \"react\";\nimport { motion } from \"@plyxui/core\";\nimport { useReducedMotion } from \"@plyxui/hooks\";\n\nexport interface AnimatedNumberProps {\n  value: number;\n  /** Count duration in ms. Default motion.celebrate (500). */\n  duration?: number;\n  /** Render the interpolated value. Default rounds to an integer string. */\n  format?: (n: number) => string;\n  className?: string;\n  style?: CSSProperties;\n}\n\nfunction defaultFormat(n: number): string {\n  return Math.round(n).toString();\n}\n\n// easeOutCubic — fast start, gentle landing on the final digit.\nfunction easeOut(t: number): number {\n  return 1 - Math.pow(1 - t, 3);\n}\n\nexport function AnimatedNumber({\n  value,\n  duration = motion.celebrate.duration,\n  format = defaultFormat,\n  className,\n  style,\n}: AnimatedNumberProps) {\n  const [display, setDisplay] = useState<number>(value);\n  const displayRef = useRef(value);\n  displayRef.current = display;\n  const reduced = useReducedMotion();\n\n  useEffect(() => {\n    if (displayRef.current === value) return;\n    if (reduced || duration <= 0) {\n      setDisplay(value);\n      return;\n    }\n    const start = displayRef.current;\n    const delta = value - start;\n    const t0 = performance.now();\n    let raf = 0;\n    const tick = (now: number) => {\n      const t = Math.min((now - t0) / duration, 1);\n      setDisplay(start + delta * easeOut(t));\n      if (t < 1) raf = requestAnimationFrame(tick);\n    };\n    raf = requestAnimationFrame(tick);\n    return () => cancelAnimationFrame(raf);\n  }, [value, duration, reduced]);\n\n  return (\n    <span className={className} style={{ fontVariantNumeric: \"tabular-nums\", ...style }}>\n      {format(display)}\n    </span>\n  );\n}\n"]}