@entropix/react 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +468 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +1043 -588
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +183 -2
- package/dist/index.d.ts +183 -2
- package/dist/index.js +462 -4
- package/dist/index.js.map +1 -1
- package/dist/styles/accordion.css +56 -54
- package/dist/styles/button.css +115 -113
- package/dist/styles/checkbox.css +121 -0
- package/dist/styles/dialog.css +88 -86
- package/dist/styles/index.css +7 -0
- package/dist/styles/input.css +178 -0
- package/dist/styles/layout.css +105 -103
- package/dist/styles/menu.css +51 -49
- package/dist/styles/radio.css +130 -0
- package/dist/styles/select.css +150 -0
- package/dist/styles/switch.css +44 -42
- package/dist/styles/tabs.css +70 -68
- package/dist/styles/toggle.css +40 -38
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/map-accessibility-to-aria.ts","../src/utils/use-keyboard-handler.ts","../src/focus/use-focus-trap.ts","../src/focus/use-focus-restore.ts","../src/utils/cn.ts","../src/components/button.tsx","../src/components/toggle.tsx","../src/components/switch.tsx","../src/components/dialog/dialog-context.tsx","../src/components/dialog/dialog.tsx","../src/components/dialog/dialog-trigger.tsx","../src/components/dialog/dialog-content.tsx","../src/components/dialog/dialog-title.tsx","../src/components/dialog/dialog-description.tsx","../src/components/dialog/dialog-close.tsx","../src/components/dialog/dialog-overlay.tsx","../src/components/tabs/tabs-context.tsx","../src/components/tabs/tabs.tsx","../src/components/tabs/tab-list.tsx","../src/components/tabs/tab.tsx","../src/components/tabs/tab-panel.tsx","../src/components/accordion/accordion-context.tsx","../src/components/accordion/accordion.tsx","../src/components/accordion/accordion-item.tsx","../src/components/accordion/accordion-trigger.tsx","../src/components/accordion/accordion-panel.tsx","../src/components/menu/menu-context.tsx","../src/components/menu/menu.tsx","../src/components/menu/menu-trigger.tsx","../src/components/menu/menu-content.tsx","../src/components/menu/menu-item.tsx","../src/utils/use-breakpoint.ts","../src/components/layout/stack.tsx","../src/components/layout/inline.tsx","../src/components/layout/container.tsx","../src/components/layout/divider.tsx"],"names":["useEffect","Button","useCallback","forwardRef","Toggle","jsx","ToggleInner","useMemo","Switch","DialogTrigger","DialogContent","useRef","DialogTitle","DialogDescription","DialogClose","DialogOverlay","createContext","useContext","useState","Stack","Inline","Container","Divider"],"mappings":"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","file":"index.js","sourcesContent":["import type { AccessibilityProps } from \"@entropix/core\";\n\n/**\n * Field-level mapping from AccessibilityProps keys to DOM attribute names.\n * `tabIndex` is not an aria-* attribute — it maps directly to `tabIndex`.\n */\nconst ARIA_MAP: Record<string, string> = {\n role: \"role\",\n label: \"aria-label\",\n labelledBy: \"aria-labelledby\",\n describedBy: \"aria-describedby\",\n disabled: \"aria-disabled\",\n expanded: \"aria-expanded\",\n selected: \"aria-selected\",\n checked: \"aria-checked\",\n pressed: \"aria-pressed\",\n busy: \"aria-busy\",\n modal: \"aria-modal\",\n hasPopup: \"aria-haspopup\",\n controls: \"aria-controls\",\n owns: \"aria-owns\",\n live: \"aria-live\",\n orientation: \"aria-orientation\",\n tabIndex: \"tabIndex\",\n hidden: \"aria-hidden\",\n valueNow: \"aria-valuenow\",\n valueMin: \"aria-valuemin\",\n valueMax: \"aria-valuemax\",\n valueText: \"aria-valuetext\",\n};\n\n/**\n * Maps platform-neutral AccessibilityProps from @entropix/core\n * to DOM-ready aria-* attributes.\n *\n * Filters out undefined values to keep rendered DOM clean.\n */\nexport function mapAccessibilityToAria(\n props: AccessibilityProps,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, attrName] of Object.entries(ARIA_MAP)) {\n const value = props[key as keyof AccessibilityProps];\n if (value !== undefined) {\n result[attrName] = value;\n }\n }\n\n return result;\n}\n","import { useCallback } from \"react\";\nimport type { KeyboardHandlerConfig, KeyIntent } from \"@entropix/core\";\n\n/**\n * Converts a core KeyboardHandlerConfig + intent-to-callback map\n * into a React onKeyDown handler.\n *\n * Returns undefined when no keyboardConfig is provided (e.g., disabled state).\n */\nexport function useKeyboardHandler(\n keyboardConfig: KeyboardHandlerConfig | undefined,\n actionMap: Partial<Record<KeyIntent, () => void>>,\n): React.KeyboardEventHandler<HTMLElement> | undefined {\n const handler = useCallback(\n (event: React.KeyboardEvent<HTMLElement>) => {\n if (!keyboardConfig) return;\n\n const intent = keyboardConfig.getIntent(event.key, {\n shift: event.shiftKey,\n meta: event.metaKey,\n alt: event.altKey,\n });\n\n if (intent && actionMap[intent]) {\n event.preventDefault();\n actionMap[intent]!();\n }\n },\n [keyboardConfig, actionMap],\n );\n\n if (!keyboardConfig) return undefined;\n return handler;\n}\n","import { useEffect } from \"react\";\n\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(\", \");\n\n/**\n * Traps focus within a container element when active.\n *\n * - Tab at the last focusable element wraps to the first\n * - Shift+Tab at the first focusable element wraps to the last\n * - Auto-focuses the first focusable element on activation\n *\n * All DOM access is inside useEffect for SSR safety.\n */\nexport function useFocusTrap(\n containerRef: React.RefObject<HTMLElement | null>,\n isActive: boolean,\n): void {\n useEffect(() => {\n if (!isActive) return;\n const container = containerRef.current;\n if (!container) return;\n\n // Auto-focus first focusable element\n const focusableElements = container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR);\n if (focusableElements.length > 0) {\n focusableElements[0]!.focus();\n }\n\n function handleKeyDown(event: KeyboardEvent) {\n if (event.key !== \"Tab\") return;\n\n const focusable = container!.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR);\n if (focusable.length === 0) return;\n\n const first = focusable[0]!;\n const last = focusable[focusable.length - 1]!;\n\n if (event.shiftKey) {\n // Shift+Tab: if at first, wrap to last\n if (document.activeElement === first) {\n event.preventDefault();\n last.focus();\n }\n } else {\n // Tab: if at last, wrap to first\n if (document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n }\n }\n\n container.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n container.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [isActive, containerRef]);\n}\n","import { useEffect, useRef } from \"react\";\n\n/**\n * Saves the currently focused element when isActive transitions to true,\n * and restores focus to it when isActive transitions to false.\n *\n * Guards against elements that have been removed from the DOM.\n * All DOM access inside useEffect for SSR safety.\n */\nexport function useFocusRestore(isActive: boolean): void {\n const savedElement = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (isActive) {\n // Save the currently focused element when activated\n savedElement.current = document.activeElement as HTMLElement | null;\n } else if (savedElement.current) {\n // Restore focus when deactivated\n const el = savedElement.current;\n // Verify element is still in the DOM and focusable\n if (el && document.body.contains(el) && typeof el.focus === \"function\") {\n el.focus();\n }\n savedElement.current = null;\n }\n }, [isActive]);\n}\n","/**\n * Constructs a className string from a list of class values.\n * Filters out falsy values (undefined, null, false, \"\").\n */\nexport function cn(\n ...classes: Array<string | undefined | null | false>\n): string {\n return classes.filter(Boolean).join(\" \");\n}\n","import { forwardRef, useCallback, useMemo } from \"react\";\nimport { useButton } from \"@entropix/core\";\nimport { mapAccessibilityToAria } from \"../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../utils/use-keyboard-handler.js\";\nimport { cn } from \"../utils/cn.js\";\nimport \"../styles/button.css\";\n\nexport interface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLElement>, \"disabled\"> {\n /** Whether the button is disabled */\n disabled?: boolean;\n /** Whether the button is in a loading state */\n loading?: boolean;\n /** Called when the button is activated */\n onPress?: () => void;\n /** Render as a different element type */\n as?: React.ElementType;\n /** Visual variant for CSS targeting via data-variant */\n variant?: string;\n /** Size for CSS targeting via data-size */\n size?: string;\n}\n\n/**\n * Button component — web adapter for @entropix/core's useButton.\n *\n * Renders a `<button>` by default. Use the `as` prop for other elements.\n * Provides data-state, data-variant, data-size attributes for CSS targeting.\n */\nexport const Button = forwardRef<HTMLElement, ButtonProps>(function Button(\n {\n disabled,\n loading,\n onPress,\n as: Component = \"button\",\n variant,\n size,\n className,\n style,\n children,\n onClick,\n onKeyDown: externalOnKeyDown,\n ...rest\n },\n ref,\n) {\n const elementType =\n typeof Component === \"string\" ? Component : \"div\";\n\n const { isDisabled, isLoading, getButtonProps } = useButton({\n disabled,\n loading,\n onPress,\n elementType,\n });\n\n const propGetterReturn = getButtonProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const actionMap = useMemo(\n () => ({\n activate: propGetterReturn.onAction ?? (() => {}),\n }),\n [propGetterReturn.onAction],\n );\n\n const onKeyDown = useKeyboardHandler(\n propGetterReturn.keyboardConfig,\n actionMap,\n );\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n propGetterReturn.onAction?.();\n onClick?.(event);\n },\n [propGetterReturn.onAction, onClick],\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLElement>) => {\n onKeyDown?.(event);\n externalOnKeyDown?.(event);\n },\n [onKeyDown, externalOnKeyDown],\n );\n\n const dataState = isLoading ? \"loading\" : isDisabled ? \"disabled\" : undefined;\n\n return (\n <Component\n ref={ref}\n className={cn(\n \"entropix-button\",\n variant && `entropix-button--${variant}`,\n size && `entropix-button--${size}`,\n className,\n )}\n style={style}\n {...ariaProps}\n {...rest}\n type={Component === \"button\" ? \"button\" : undefined}\n disabled={Component === \"button\" && isDisabled ? true : undefined}\n onClick={propGetterReturn.onAction || onClick ? handleClick : undefined}\n onKeyDown={onKeyDown || externalOnKeyDown ? handleKeyDown : undefined}\n data-state={dataState}\n data-variant={variant}\n data-size={size}\n >\n {children}\n </Component>\n );\n});\n","import { forwardRef, useCallback, useMemo } from \"react\";\nimport { useToggle } from \"@entropix/core\";\nimport type { UseToggleOptions } from \"@entropix/core\";\nimport { mapAccessibilityToAria } from \"../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../utils/use-keyboard-handler.js\";\nimport { cn } from \"../utils/cn.js\";\nimport \"../styles/toggle.css\";\n\nexport interface ToggleProps\n extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"onChange\" | \"disabled\"\n > {\n /** Controlled checked state */\n checked?: boolean;\n /** Default checked state for uncontrolled mode */\n defaultChecked?: boolean;\n /** Called when checked state changes */\n onChange?: (checked: boolean) => void;\n /** Whether the toggle is disabled */\n disabled?: boolean;\n /** Accessible label (if no children) */\n label?: string;\n}\n\n/** Internal props used by Switch to override the role */\ninterface ToggleInternalProps extends ToggleProps {\n /** @internal Override the ARIA role */\n role?: UseToggleOptions[\"role\"];\n /** @internal CSS class name for the component (toggle or switch) */\n componentClass?: string;\n}\n\n/**\n * Toggle component — web adapter for @entropix/core's useToggle.\n *\n * Renders a `<button type=\"button\">` with role=\"checkbox\".\n * Use the Switch component for role=\"switch\" semantics.\n * Sets data-state=\"checked\"|\"unchecked\" for CSS targeting.\n */\nexport const Toggle = forwardRef<HTMLButtonElement, ToggleProps>(\n function Toggle(props, ref) {\n return <ToggleInner {...props} ref={ref} role=\"checkbox\" componentClass=\"entropix-toggle\" />;\n },\n);\n\n/** @internal Shared implementation for Toggle and Switch */\nexport const ToggleInner = forwardRef<HTMLButtonElement, ToggleInternalProps>(\n function ToggleInner(\n {\n checked,\n defaultChecked,\n onChange,\n disabled,\n label,\n role = \"checkbox\",\n componentClass = \"entropix-toggle\",\n className,\n style,\n children,\n onClick,\n onKeyDown: externalOnKeyDown,\n ...rest\n },\n ref,\n ) {\n const { isChecked, isDisabled, getToggleProps } = useToggle({\n checked,\n defaultChecked,\n onChange,\n disabled,\n role,\n });\n\n const propGetterReturn = getToggleProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n // Add explicit label if provided and no children\n if (label && !children) {\n ariaProps[\"aria-label\"] = label;\n }\n\n const actionMap = useMemo(\n () => ({\n toggle: propGetterReturn.onAction ?? (() => {}),\n }),\n [propGetterReturn.onAction],\n );\n\n const onKeyDown = useKeyboardHandler(\n propGetterReturn.keyboardConfig,\n actionMap,\n );\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n propGetterReturn.onAction?.();\n onClick?.(event);\n },\n [propGetterReturn.onAction, onClick],\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event);\n externalOnKeyDown?.(event);\n },\n [onKeyDown, externalOnKeyDown],\n );\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(componentClass, className)}\n style={style}\n {...ariaProps}\n {...rest}\n disabled={isDisabled || undefined}\n onClick={propGetterReturn.onAction || onClick ? handleClick : undefined}\n onKeyDown={onKeyDown || externalOnKeyDown ? handleKeyDown : undefined}\n data-state={isChecked ? \"checked\" : \"unchecked\"}\n >\n {children}\n </button>\n );\n },\n);\n","import { forwardRef } from \"react\";\nimport { ToggleInner } from \"./toggle.js\";\nimport type { ToggleProps } from \"./toggle.js\";\nimport \"../styles/switch.css\";\n\nexport type SwitchProps = ToggleProps;\n\n/**\n * Switch component — Toggle with role=\"switch\" semantics.\n *\n * API-identical to Toggle, but renders with `role=\"switch\"`\n * instead of `role=\"checkbox\"`.\n */\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(\n function Switch(props, ref) {\n return <ToggleInner {...props} ref={ref} role=\"switch\" componentClass=\"entropix-switch\" />;\n },\n);\n","import { createContext, useContext } from \"react\";\nimport type { UseDialogReturn } from \"@entropix/core\";\n\nexport const DialogContext = createContext<UseDialogReturn | null>(null);\n\n/**\n * Hook to access the nearest Dialog context.\n * Throws if used outside a <Dialog> component.\n */\nexport function useDialogContext(): UseDialogReturn {\n const context = useContext(DialogContext);\n if (!context) {\n throw new Error(\n \"Dialog compound components must be used within a <Dialog> provider.\",\n );\n }\n return context;\n}\n","import { useDialog } from \"@entropix/core\";\nimport type { UseDialogOptions } from \"@entropix/core\";\nimport { DialogContext } from \"./dialog-context.js\";\n\nexport interface DialogProps extends UseDialogOptions {\n children: React.ReactNode;\n}\n\n/**\n * Dialog root — provides dialog state to compound sub-components.\n * Renders no DOM of its own.\n */\nexport function Dialog({\n children,\n isOpen,\n defaultOpen,\n onOpenChange,\n closeOnOverlayPress,\n closeOnEscape,\n modal,\n role,\n}: DialogProps) {\n const dialog = useDialog({\n isOpen,\n defaultOpen,\n onOpenChange,\n closeOnOverlayPress,\n closeOnEscape,\n modal,\n role,\n });\n\n return (\n <DialogContext.Provider value={dialog}>{children}</DialogContext.Provider>\n );\n}\n","import { forwardRef, useCallback } from \"react\";\nimport { useDialogContext } from \"./dialog-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface DialogTriggerProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\n/**\n * DialogTrigger — button that opens/closes the dialog.\n * Maps core's getTriggerProps() to DOM attributes.\n */\nexport const DialogTrigger = forwardRef<HTMLButtonElement, DialogTriggerProps>(\n function DialogTrigger({ children, className, onClick, ...rest }, ref) {\n const { getTriggerProps } = useDialogContext();\n const propGetterReturn = getTriggerProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n propGetterReturn.onAction?.();\n onClick?.(event);\n },\n [propGetterReturn.onAction, onClick],\n );\n\n return (\n <button\n ref={ref}\n type=\"button\"\n {...ariaProps}\n {...rest}\n className={cn(\"entropix-dialog-trigger\", className)}\n onClick={handleClick}\n >\n {children}\n </button>\n );\n },\n);\n","import { forwardRef, useRef, useEffect, useState, useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useDialogContext } from \"./dialog-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../../utils/use-keyboard-handler.js\";\nimport { useFocusTrap } from \"../../focus/use-focus-trap.js\";\nimport { useFocusRestore } from \"../../focus/use-focus-restore.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface DialogContentProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * DialogContent — the dialog panel rendered in a portal.\n *\n * Implements focus trap, focus restore, Escape-to-close keyboard handling,\n * and portal rendering. SSR-safe via useEffect mount gating.\n */\nexport const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n function DialogContent({ children, className, onKeyDown: externalOnKeyDown, ...rest }, ref) {\n const { isOpen, close, ids, focusManagement, getContentProps } =\n useDialogContext();\n\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n setMounted(true);\n }, []);\n\n // Internal ref for focus trap (compose with forwarded ref)\n const internalRef = useRef<HTMLDivElement | null>(null);\n\n // Focus management\n useFocusTrap(internalRef, isOpen && focusManagement.trapFocus);\n useFocusRestore(isOpen && focusManagement.restoreFocus);\n\n const propGetterReturn = getContentProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const actionMap = useMemo(() => ({ dismiss: close }), [close]);\n const onKeyDown = useKeyboardHandler(\n propGetterReturn.keyboardConfig,\n actionMap,\n );\n\n // Don't render during SSR or when closed\n if (!mounted || !isOpen) return null;\n\n const content = (\n <div\n ref={(node) => {\n internalRef.current = node;\n // Forward the ref\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }\n }}\n id={ids.content}\n {...ariaProps}\n {...rest}\n className={cn(\"entropix-dialog-content\", className)}\n onKeyDown={\n onKeyDown\n ? (event: React.KeyboardEvent<HTMLDivElement>) => {\n (onKeyDown as React.KeyboardEventHandler<HTMLElement>)(event);\n externalOnKeyDown?.(event);\n }\n : externalOnKeyDown\n }\n data-state={isOpen ? \"open\" : \"closed\"}\n >\n {children}\n </div>\n );\n\n return createPortal(content, document.body);\n },\n);\n","import { forwardRef } from \"react\";\nimport { useDialogContext } from \"./dialog-context.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface DialogTitleProps\n extends React.HTMLAttributes<HTMLHeadingElement> {}\n\n/**\n * DialogTitle — heading element with auto-linked ID for aria-labelledby.\n */\nexport const DialogTitle = forwardRef<HTMLHeadingElement, DialogTitleProps>(\n function DialogTitle({ children, className, ...rest }, ref) {\n const { ids } = useDialogContext();\n\n return (\n <h2 ref={ref} id={ids.title} {...rest} className={cn(\"entropix-dialog-title\", className)}>\n {children}\n </h2>\n );\n },\n);\n","import { forwardRef } from \"react\";\nimport { useDialogContext } from \"./dialog-context.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface DialogDescriptionProps\n extends React.HTMLAttributes<HTMLParagraphElement> {}\n\n/**\n * DialogDescription — paragraph element with auto-linked ID for aria-describedby.\n */\nexport const DialogDescription = forwardRef<\n HTMLParagraphElement,\n DialogDescriptionProps\n>(function DialogDescription({ children, className, ...rest }, ref) {\n const { ids } = useDialogContext();\n\n return (\n <p ref={ref} id={ids.description} {...rest} className={cn(\"entropix-dialog-description\", className)}>\n {children}\n </p>\n );\n});\n","import { forwardRef, useCallback } from \"react\";\nimport { useDialogContext } from \"./dialog-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface DialogCloseProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\n/**\n * DialogClose — button that closes the dialog.\n * Maps core's getCloseProps() to DOM attributes.\n */\nexport const DialogClose = forwardRef<HTMLButtonElement, DialogCloseProps>(\n function DialogClose({ children, className, onClick, ...rest }, ref) {\n const { getCloseProps } = useDialogContext();\n const propGetterReturn = getCloseProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n propGetterReturn.onAction?.();\n onClick?.(event);\n },\n [propGetterReturn.onAction, onClick],\n );\n\n return (\n <button\n ref={ref}\n type=\"button\"\n {...ariaProps}\n {...rest}\n className={cn(\"entropix-dialog-close\", className)}\n onClick={handleClick}\n >\n {children}\n </button>\n );\n },\n);\n","import { forwardRef, useCallback } from \"react\";\nimport { useDialogContext } from \"./dialog-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/dialog.css\";\n\nexport interface DialogOverlayProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * DialogOverlay — backdrop element behind the dialog.\n * Hidden from the accessibility tree. Optionally closes the dialog on click.\n */\nexport const DialogOverlay = forwardRef<HTMLDivElement, DialogOverlayProps>(\n function DialogOverlay({ className, onClick, ...rest }, ref) {\n const { isOpen, getOverlayProps } = useDialogContext();\n const propGetterReturn = getOverlayProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n propGetterReturn.onAction?.();\n onClick?.(event);\n },\n [propGetterReturn.onAction, onClick],\n );\n\n if (!isOpen) return null;\n\n return (\n <div\n ref={ref}\n {...ariaProps}\n {...rest}\n className={cn(\"entropix-dialog-overlay\", className)}\n onClick={propGetterReturn.onAction || onClick ? handleClick : undefined}\n data-state={isOpen ? \"open\" : \"closed\"}\n />\n );\n },\n);\n","import { createContext, useContext } from \"react\";\nimport type { UseTabsReturn } from \"@entropix/core\";\n\nexport interface TabsContextValue extends UseTabsReturn {\n orientation: \"horizontal\" | \"vertical\";\n activationMode: \"automatic\" | \"manual\";\n}\n\nexport const TabsContext = createContext<TabsContextValue | null>(null);\n\nexport function useTabsContext(): TabsContextValue {\n const context = useContext(TabsContext);\n if (!context) {\n throw new Error(\n \"Tabs compound components must be used within a <Tabs> provider.\",\n );\n }\n return context;\n}\n","import React from \"react\";\nimport { useTabs, type UseTabsOptions } from \"@entropix/core\";\nimport { TabsContext } from \"./tabs-context.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface TabsProps extends UseTabsOptions {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Tabs({\n children,\n className,\n orientation = \"horizontal\",\n activationMode = \"automatic\",\n ...options\n}: TabsProps) {\n const tabs = useTabs({ ...options, orientation, activationMode });\n\n return (\n <TabsContext.Provider value={{ ...tabs, orientation, activationMode }}>\n <div className={cn(\"entropix-tabs\", className)} data-orientation={orientation}>\n {children}\n </div>\n </TabsContext.Provider>\n );\n}\n","import React from \"react\";\nimport { useTabsContext } from \"./tabs-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/tabs.css\";\n\nexport interface TabListProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function TabList({ children, className }: TabListProps) {\n const { getTabListProps } = useTabsContext();\n const propGetterReturn = getTabListProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n return (\n <div {...ariaProps} className={cn(\"entropix-tablist\", className)}>\n {children}\n </div>\n );\n}\n","import React, { useCallback } from \"react\";\nimport { useTabsContext } from \"./tabs-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../../utils/use-keyboard-handler.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface TabProps {\n value: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Tab({ value, children, className }: TabProps) {\n const { getTabProps, select, selectedKey, orientation } = useTabsContext();\n const propGetterReturn = getTabProps(value);\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n const baseId = ariaProps[\"aria-controls\"]\n ? String(ariaProps[\"aria-controls\"]).replace(`-panel-${value}`, \"\")\n : \"\";\n\n const handleClick = useCallback(() => {\n propGetterReturn.onAction?.();\n }, [propGetterReturn.onAction]);\n\n const onKeyDown = useKeyboardHandler(propGetterReturn.keyboardConfig, {\n activate: () => select(value),\n });\n\n return (\n <button\n {...ariaProps}\n id={`${baseId}-tab-${value}`}\n className={cn(\"entropix-tab\", className)}\n onClick={handleClick}\n onKeyDown={onKeyDown}\n data-state={selectedKey === value ? \"active\" : \"inactive\"}\n data-orientation={orientation}\n >\n {children}\n </button>\n );\n}\n","import React from \"react\";\nimport { useTabsContext } from \"./tabs-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface TabPanelProps {\n value: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function TabPanel({ value, children, className }: TabPanelProps) {\n const { getTabPanelProps, selectedKey } = useTabsContext();\n const propGetterReturn = getTabPanelProps(value);\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n const baseId = ariaProps[\"aria-labelledby\"]\n ? String(ariaProps[\"aria-labelledby\"]).replace(`-tab-${value}`, \"\")\n : \"\";\n\n if (selectedKey !== value) return null;\n\n return (\n <div\n {...ariaProps}\n id={`${baseId}-panel-${value}`}\n className={cn(\"entropix-tabpanel\", className)}\n data-state=\"active\"\n >\n {children}\n </div>\n );\n}\n","import { createContext, useContext } from \"react\";\nimport type { UseAccordionReturn } from \"@entropix/core\";\n\nexport const AccordionContext = createContext<UseAccordionReturn | null>(null);\n\nexport function useAccordionContext(): UseAccordionReturn {\n const context = useContext(AccordionContext);\n if (!context) {\n throw new Error(\n \"Accordion compound components must be used within an <Accordion> provider.\",\n );\n }\n return context;\n}\n\n/** Context for the current accordion item's key */\nexport const AccordionItemContext = createContext<string | null>(null);\n\nexport function useAccordionItemContext(): string {\n const context = useContext(AccordionItemContext);\n if (context === null) {\n throw new Error(\n \"AccordionTrigger and AccordionPanel must be used within an <AccordionItem>.\",\n );\n }\n return context;\n}\n","import React from \"react\";\nimport { useAccordion, type UseAccordionOptions } from \"@entropix/core\";\nimport { AccordionContext } from \"./accordion-context.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/accordion.css\";\n\nexport interface AccordionProps extends UseAccordionOptions {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Accordion({ children, className, ...options }: AccordionProps) {\n const accordion = useAccordion(options);\n\n return (\n <AccordionContext.Provider value={accordion}>\n <div className={cn(\"entropix-accordion\", className)}>{children}</div>\n </AccordionContext.Provider>\n );\n}\n","import React from \"react\";\nimport {\n AccordionItemContext,\n useAccordionContext,\n} from \"./accordion-context.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface AccordionItemProps {\n value: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function AccordionItem({\n value,\n children,\n className,\n}: AccordionItemProps) {\n const { isExpanded } = useAccordionContext();\n\n return (\n <AccordionItemContext.Provider value={value}>\n <div\n className={cn(\"entropix-accordion-item\", className)}\n data-state={isExpanded(value) ? \"open\" : \"closed\"}\n >\n {children}\n </div>\n </AccordionItemContext.Provider>\n );\n}\n","import React, { useCallback } from \"react\";\nimport {\n useAccordionContext,\n useAccordionItemContext,\n} from \"./accordion-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../../utils/use-keyboard-handler.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface AccordionTriggerProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function AccordionTrigger({\n children,\n className,\n}: AccordionTriggerProps) {\n const itemKey = useAccordionItemContext();\n const { getItemTriggerProps, toggle } = useAccordionContext();\n const propGetterReturn = getItemTriggerProps(itemKey);\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n const triggerId = propGetterReturn.accessibility.controls\n ? String(propGetterReturn.accessibility.controls).replace(\"panel-\", \"trigger-\")\n : undefined;\n\n const handleClick = useCallback(() => {\n propGetterReturn.onAction?.();\n }, [propGetterReturn.onAction]);\n\n const onKeyDown = useKeyboardHandler(propGetterReturn.keyboardConfig, {\n activate: () => toggle(itemKey),\n });\n\n return (\n <button\n {...ariaProps}\n id={triggerId}\n className={cn(\"entropix-accordion-trigger\", className)}\n onClick={handleClick}\n onKeyDown={onKeyDown}\n >\n {children}\n </button>\n );\n}\n","import React from \"react\";\nimport {\n useAccordionContext,\n useAccordionItemContext,\n} from \"./accordion-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface AccordionPanelProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function AccordionPanel({ children, className }: AccordionPanelProps) {\n const itemKey = useAccordionItemContext();\n const { getItemPanelProps, isExpanded } = useAccordionContext();\n const propGetterReturn = getItemPanelProps(itemKey);\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n const panelId = propGetterReturn.accessibility.labelledBy\n ? String(propGetterReturn.accessibility.labelledBy).replace(\n \"trigger-\",\n \"panel-\",\n )\n : undefined;\n\n if (!isExpanded(itemKey)) return null;\n\n return (\n <div {...ariaProps} id={panelId} className={cn(\"entropix-accordion-panel\", className)} data-state=\"open\">\n {children}\n </div>\n );\n}\n","import { createContext, useContext } from \"react\";\nimport type { UseMenuReturn } from \"@entropix/core\";\n\nexport const MenuContext = createContext<UseMenuReturn | null>(null);\n\nexport function useMenuContext(): UseMenuReturn {\n const context = useContext(MenuContext);\n if (!context) {\n throw new Error(\n \"Menu compound components must be used within a <Menu> provider.\",\n );\n }\n return context;\n}\n","import React from \"react\";\nimport { useMenu, type UseMenuOptions } from \"@entropix/core\";\nimport { MenuContext } from \"./menu-context.js\";\n\nexport interface MenuProps extends UseMenuOptions {\n children: React.ReactNode;\n}\n\nexport function Menu({ children, ...options }: MenuProps) {\n const menu = useMenu(options);\n\n return (\n <MenuContext.Provider value={menu}>{children}</MenuContext.Provider>\n );\n}\n","import React, { useCallback } from \"react\";\nimport { useMenuContext } from \"./menu-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../../utils/use-keyboard-handler.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface MenuTriggerProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function MenuTrigger({ children, className }: MenuTriggerProps) {\n const { getTriggerProps, toggle, open } = useMenuContext();\n const propGetterReturn = getTriggerProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const handleClick = useCallback(() => {\n propGetterReturn.onAction?.();\n }, [propGetterReturn.onAction]);\n\n const onKeyDown = useKeyboardHandler(propGetterReturn.keyboardConfig, {\n activate: toggle,\n moveDown: open,\n moveUp: open,\n });\n\n return (\n <button\n {...ariaProps}\n className={cn(\"entropix-menu-trigger\", className)}\n onClick={handleClick}\n onKeyDown={onKeyDown}\n >\n {children}\n </button>\n );\n}\n","import React from \"react\";\nimport { useMenuContext } from \"./menu-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../../utils/use-keyboard-handler.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/menu.css\";\n\nexport interface MenuContentProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function MenuContent({ children, className }: MenuContentProps) {\n const { isOpen, getMenuProps, close } = useMenuContext();\n const propGetterReturn = getMenuProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const onKeyDown = useKeyboardHandler(propGetterReturn.keyboardConfig, {\n dismiss: close,\n });\n\n if (!isOpen) return null;\n\n return (\n <div\n {...ariaProps}\n className={cn(\"entropix-menu-content\", className)}\n onKeyDown={onKeyDown}\n data-state=\"open\"\n >\n {children}\n </div>\n );\n}\n","import React, { useCallback } from \"react\";\nimport { useMenuContext } from \"./menu-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface MenuItemProps {\n index: number;\n onSelect?: () => void;\n disabled?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function MenuItem({\n index,\n onSelect,\n disabled,\n children,\n className,\n}: MenuItemProps) {\n const { getItemProps, activeIndex } = useMenuContext();\n const propGetterReturn = getItemProps(index, { onSelect, disabled });\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const handleClick = useCallback(() => {\n propGetterReturn.onAction?.();\n }, [propGetterReturn.onAction]);\n\n return (\n <div\n {...ariaProps}\n className={cn(\"entropix-menu-item\", className)}\n onClick={handleClick}\n data-state={activeIndex === index ? \"active\" : \"inactive\"}\n data-disabled={disabled || undefined}\n >\n {children}\n </div>\n );\n}\n","import { useState, useEffect, useCallback } from \"react\";\n\n/**\n * Breakpoint values in pixels, matching @entropix/tokens breakpoint primitives.\n */\nconst BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n} as const;\n\nexport type Breakpoint = \"base\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n\nconst BREAKPOINT_ORDER: Breakpoint[] = [\"base\", \"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\n\n/**\n * Returns the current breakpoint name based on viewport width.\n *\n * - `\"base\"` — <640px (mobile)\n * - `\"sm\"` — ≥640px (landscape phones)\n * - `\"md\"` — ≥768px (tablets)\n * - `\"lg\"` — ≥1024px (laptops)\n * - `\"xl\"` — ≥1280px (desktops)\n * - `\"2xl\"` — ≥1536px (wide screens)\n *\n * ```tsx\n * const breakpoint = useBreakpoint();\n * const isMobile = breakpoint === \"base\" || breakpoint === \"sm\";\n * ```\n */\nexport function useBreakpoint(): Breakpoint {\n const getBreakpoint = useCallback((): Breakpoint => {\n if (typeof window === \"undefined\") return \"base\";\n const width = window.innerWidth;\n if (width >= BREAKPOINTS[\"2xl\"]) return \"2xl\";\n if (width >= BREAKPOINTS.xl) return \"xl\";\n if (width >= BREAKPOINTS.lg) return \"lg\";\n if (width >= BREAKPOINTS.md) return \"md\";\n if (width >= BREAKPOINTS.sm) return \"sm\";\n return \"base\";\n }, []);\n\n const [breakpoint, setBreakpoint] = useState<Breakpoint>(getBreakpoint);\n\n useEffect(() => {\n const handleResize = () => {\n const next = getBreakpoint();\n setBreakpoint((prev) => (prev !== next ? next : prev));\n };\n\n window.addEventListener(\"resize\", handleResize);\n // Set initial value on mount (handles SSR hydration)\n handleResize();\n return () => window.removeEventListener(\"resize\", handleResize);\n }, [getBreakpoint]);\n\n return breakpoint;\n}\n\n/**\n * Subscribes to a CSS media query and returns whether it matches.\n *\n * ```tsx\n * const isMobile = useMediaQuery(\"(max-width: 767px)\");\n * const prefersDark = useMediaQuery(\"(prefers-color-scheme: dark)\");\n * ```\n */\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(() => {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n const mql = window.matchMedia(query);\n const handler = (event: MediaQueryListEvent) => setMatches(event.matches);\n\n // Set initial value\n setMatches(mql.matches);\n\n mql.addEventListener(\"change\", handler);\n return () => mql.removeEventListener(\"change\", handler);\n }, [query]);\n\n return matches;\n}\n\n/**\n * Returns true if the current viewport is at or above the given breakpoint.\n *\n * ```tsx\n * const isDesktop = useBreakpointValue(\"lg\");\n * // true when viewport ≥1024px\n * ```\n */\nexport function useBreakpointValue(breakpoint: Exclude<Breakpoint, \"base\">): boolean {\n return useMediaQuery(`(min-width: ${BREAKPOINTS[breakpoint]}px)`);\n}\n\nexport { BREAKPOINTS, BREAKPOINT_ORDER };\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/layout.css\";\n\nexport type SpacingSize = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Gap between children. Default uses --entropix-space-layout-stack token */\n gap?: SpacingSize;\n /** Cross-axis alignment */\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n /** Whether to take full width */\n fullWidth?: boolean;\n /** Render as a different element */\n as?: React.ElementType;\n}\n\n/**\n * Stack — vertical flex layout primitive.\n *\n * Uses the `space.layout.stack` token (16px) as default gap.\n *\n * ```tsx\n * <Stack gap=\"lg\" align=\"center\">\n * <Button>First</Button>\n * <Button>Second</Button>\n * </Stack>\n * ```\n */\nexport const Stack = forwardRef<HTMLDivElement, StackProps>(function Stack(\n { gap, align, fullWidth, as: Component = \"div\", className, children, ...rest },\n ref,\n) {\n return (\n <Component\n ref={ref}\n className={cn(\n \"entropix-stack\",\n gap && `entropix-stack--gap-${gap}`,\n align && `entropix-stack--align-${align}`,\n fullWidth && \"entropix-stack--full-width\",\n className,\n )}\n {...rest}\n >\n {children}\n </Component>\n );\n});\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/layout.css\";\n\nexport type SpacingSize = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n\nexport interface InlineProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Gap between children. Default uses --entropix-space-layout-inline token */\n gap?: SpacingSize;\n /** Cross-axis alignment */\n align?: \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\n /** Main-axis justification */\n justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\";\n /** Whether to wrap children */\n wrap?: boolean;\n /** Render as a different element */\n as?: React.ElementType;\n}\n\n/**\n * Inline — horizontal flex layout primitive.\n *\n * Uses the `space.layout.inline` token (12px) as default gap.\n *\n * ```tsx\n * <Inline gap=\"sm\" justify=\"between\" wrap>\n * <Button variant=\"primary\">Save</Button>\n * <Button variant=\"ghost\">Cancel</Button>\n * </Inline>\n * ```\n */\nexport const Inline = forwardRef<HTMLDivElement, InlineProps>(function Inline(\n { gap, align, justify, wrap, as: Component = \"div\", className, children, ...rest },\n ref,\n) {\n return (\n <Component\n ref={ref}\n className={cn(\n \"entropix-inline\",\n gap && `entropix-inline--gap-${gap}`,\n align && `entropix-inline--align-${align}`,\n justify && `entropix-inline--justify-${justify}`,\n wrap && \"entropix-inline--wrap\",\n className,\n )}\n {...rest}\n >\n {children}\n </Component>\n );\n});\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/layout.css\";\n\nexport type ContainerSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Maximum width constraint. Default: \"lg\" (1024px) */\n maxWidth?: ContainerSize;\n /** Whether to center children vertically */\n center?: boolean;\n /** Render as a different element */\n as?: React.ElementType;\n}\n\n/**\n * Container — page-level width constraint with horizontal margins.\n *\n * Uses the `space.layout.page-margin` token (24px) for horizontal padding.\n * Centers itself horizontally via auto margins.\n *\n * ```tsx\n * <Container maxWidth=\"lg\">\n * <Stack gap=\"xl\">\n * <h1>Page Title</h1>\n * <p>Content</p>\n * </Stack>\n * </Container>\n * ```\n */\nexport const Container = forwardRef<HTMLDivElement, ContainerProps>(function Container(\n { maxWidth = \"lg\", center, as: Component = \"div\", className, children, ...rest },\n ref,\n) {\n return (\n <Component\n ref={ref}\n className={cn(\n \"entropix-container\",\n `entropix-container--${maxWidth}`,\n center && \"entropix-container--center\",\n className,\n )}\n {...rest}\n >\n {children}\n </Component>\n );\n});\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/layout.css\";\n\nexport interface DividerProps extends React.HTMLAttributes<HTMLHRElement> {\n /** Orientation of the divider */\n orientation?: \"horizontal\" | \"vertical\";\n /** Spacing above and below (or left and right for vertical) */\n spacing?: \"sm\" | \"md\" | \"lg\";\n}\n\n/**\n * Divider — visual separator line.\n *\n * Uses the `color.border.default` token for line color.\n *\n * ```tsx\n * <Stack>\n * <p>Section A</p>\n * <Divider spacing=\"md\" />\n * <p>Section B</p>\n * </Stack>\n *\n * <Inline>\n * <span>Left</span>\n * <Divider orientation=\"vertical\" spacing=\"sm\" />\n * <span>Right</span>\n * </Inline>\n * ```\n */\nexport const Divider = forwardRef<HTMLHRElement, DividerProps>(function Divider(\n { orientation = \"horizontal\", spacing, className, ...rest },\n ref,\n) {\n return (\n <hr\n ref={ref}\n role={orientation === \"vertical\" ? \"separator\" : undefined}\n aria-orientation={orientation === \"vertical\" ? \"vertical\" : undefined}\n className={cn(\n \"entropix-divider\",\n orientation === \"vertical\" && \"entropix-divider--vertical\",\n spacing && `entropix-divider--spacing-${spacing}`,\n className,\n )}\n {...rest}\n />\n );\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/map-accessibility-to-aria.ts","../src/utils/use-keyboard-handler.ts","../src/focus/use-focus-trap.ts","../src/focus/use-focus-restore.ts","../src/utils/cn.ts","../src/components/button.tsx","../src/components/toggle.tsx","../src/components/switch.tsx","../src/components/dialog/dialog-context.tsx","../src/components/dialog/dialog.tsx","../src/components/dialog/dialog-trigger.tsx","../src/components/dialog/dialog-content.tsx","../src/components/dialog/dialog-title.tsx","../src/components/dialog/dialog-description.tsx","../src/components/dialog/dialog-close.tsx","../src/components/dialog/dialog-overlay.tsx","../src/components/tabs/tabs-context.tsx","../src/components/tabs/tabs.tsx","../src/components/tabs/tab-list.tsx","../src/components/tabs/tab.tsx","../src/components/tabs/tab-panel.tsx","../src/components/accordion/accordion-context.tsx","../src/components/accordion/accordion.tsx","../src/components/accordion/accordion-item.tsx","../src/components/accordion/accordion-trigger.tsx","../src/components/accordion/accordion-panel.tsx","../src/components/menu/menu-context.tsx","../src/components/menu/menu.tsx","../src/components/menu/menu-trigger.tsx","../src/components/menu/menu-content.tsx","../src/components/menu/menu-item.tsx","../src/components/input.tsx","../src/components/textarea.tsx","../src/components/checkbox.tsx","../src/components/radio/radio-context.tsx","../src/components/radio/radio-group.tsx","../src/components/radio/radio-item.tsx","../src/components/select/select-context.tsx","../src/components/select/select.tsx","../src/components/select/select-trigger.tsx","../src/components/select/select-content.tsx","../src/components/select/select-option.tsx","../src/utils/use-breakpoint.ts","../src/components/layout/stack.tsx","../src/components/layout/inline.tsx","../src/components/layout/container.tsx","../src/components/layout/divider.tsx"],"names":["useEffect","Button","useCallback","forwardRef","Toggle","jsx","ToggleInner","useMemo","Switch","DialogTrigger","DialogContent","useRef","DialogTitle","DialogDescription","DialogClose","DialogOverlay","createContext","useContext","Input","Textarea","useInput","jsxs","Checkbox","useToggle","useState","Stack","Inline","Container","Divider"],"mappings":"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","file":"index.js","sourcesContent":["import type { AccessibilityProps } from \"@entropix/core\";\n\n/**\n * Field-level mapping from AccessibilityProps keys to DOM attribute names.\n * `tabIndex` is not an aria-* attribute — it maps directly to `tabIndex`.\n */\nconst ARIA_MAP: Record<string, string> = {\n role: \"role\",\n label: \"aria-label\",\n labelledBy: \"aria-labelledby\",\n describedBy: \"aria-describedby\",\n disabled: \"aria-disabled\",\n expanded: \"aria-expanded\",\n selected: \"aria-selected\",\n checked: \"aria-checked\",\n pressed: \"aria-pressed\",\n busy: \"aria-busy\",\n modal: \"aria-modal\",\n hasPopup: \"aria-haspopup\",\n controls: \"aria-controls\",\n owns: \"aria-owns\",\n live: \"aria-live\",\n orientation: \"aria-orientation\",\n tabIndex: \"tabIndex\",\n hidden: \"aria-hidden\",\n valueNow: \"aria-valuenow\",\n valueMin: \"aria-valuemin\",\n valueMax: \"aria-valuemax\",\n valueText: \"aria-valuetext\",\n required: \"aria-required\",\n invalid: \"aria-invalid\",\n};\n\n/**\n * Maps platform-neutral AccessibilityProps from @entropix/core\n * to DOM-ready aria-* attributes.\n *\n * Filters out undefined values to keep rendered DOM clean.\n */\nexport function mapAccessibilityToAria(\n props: AccessibilityProps,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, attrName] of Object.entries(ARIA_MAP)) {\n const value = props[key as keyof AccessibilityProps];\n if (value !== undefined) {\n result[attrName] = value;\n }\n }\n\n return result;\n}\n","import { useCallback } from \"react\";\nimport type { KeyboardHandlerConfig, KeyIntent } from \"@entropix/core\";\n\n/**\n * Converts a core KeyboardHandlerConfig + intent-to-callback map\n * into a React onKeyDown handler.\n *\n * Returns undefined when no keyboardConfig is provided (e.g., disabled state).\n */\nexport function useKeyboardHandler(\n keyboardConfig: KeyboardHandlerConfig | undefined,\n actionMap: Partial<Record<KeyIntent, () => void>>,\n): React.KeyboardEventHandler<HTMLElement> | undefined {\n const handler = useCallback(\n (event: React.KeyboardEvent<HTMLElement>) => {\n if (!keyboardConfig) return;\n\n const intent = keyboardConfig.getIntent(event.key, {\n shift: event.shiftKey,\n meta: event.metaKey,\n alt: event.altKey,\n });\n\n if (intent && actionMap[intent]) {\n event.preventDefault();\n actionMap[intent]!();\n }\n },\n [keyboardConfig, actionMap],\n );\n\n if (!keyboardConfig) return undefined;\n return handler;\n}\n","import { useEffect } from \"react\";\n\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(\", \");\n\n/**\n * Traps focus within a container element when active.\n *\n * - Tab at the last focusable element wraps to the first\n * - Shift+Tab at the first focusable element wraps to the last\n * - Auto-focuses the first focusable element on activation\n *\n * All DOM access is inside useEffect for SSR safety.\n */\nexport function useFocusTrap(\n containerRef: React.RefObject<HTMLElement | null>,\n isActive: boolean,\n): void {\n useEffect(() => {\n if (!isActive) return;\n const container = containerRef.current;\n if (!container) return;\n\n // Auto-focus first focusable element\n const focusableElements = container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR);\n if (focusableElements.length > 0) {\n focusableElements[0]!.focus();\n }\n\n function handleKeyDown(event: KeyboardEvent) {\n if (event.key !== \"Tab\") return;\n\n const focusable = container!.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR);\n if (focusable.length === 0) return;\n\n const first = focusable[0]!;\n const last = focusable[focusable.length - 1]!;\n\n if (event.shiftKey) {\n // Shift+Tab: if at first, wrap to last\n if (document.activeElement === first) {\n event.preventDefault();\n last.focus();\n }\n } else {\n // Tab: if at last, wrap to first\n if (document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n }\n }\n\n container.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n container.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [isActive, containerRef]);\n}\n","import { useEffect, useRef } from \"react\";\n\n/**\n * Saves the currently focused element when isActive transitions to true,\n * and restores focus to it when isActive transitions to false.\n *\n * Guards against elements that have been removed from the DOM.\n * All DOM access inside useEffect for SSR safety.\n */\nexport function useFocusRestore(isActive: boolean): void {\n const savedElement = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (isActive) {\n // Save the currently focused element when activated\n savedElement.current = document.activeElement as HTMLElement | null;\n } else if (savedElement.current) {\n // Restore focus when deactivated\n const el = savedElement.current;\n // Verify element is still in the DOM and focusable\n if (el && document.body.contains(el) && typeof el.focus === \"function\") {\n el.focus();\n }\n savedElement.current = null;\n }\n }, [isActive]);\n}\n","/**\n * Constructs a className string from a list of class values.\n * Filters out falsy values (undefined, null, false, \"\").\n */\nexport function cn(\n ...classes: Array<string | undefined | null | false>\n): string {\n return classes.filter(Boolean).join(\" \");\n}\n","import { forwardRef, useCallback, useMemo } from \"react\";\nimport { useButton } from \"@entropix/core\";\nimport { mapAccessibilityToAria } from \"../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../utils/use-keyboard-handler.js\";\nimport { cn } from \"../utils/cn.js\";\nimport \"../styles/button.css\";\n\nexport interface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLElement>, \"disabled\"> {\n /** Whether the button is disabled */\n disabled?: boolean;\n /** Whether the button is in a loading state */\n loading?: boolean;\n /** Called when the button is activated */\n onPress?: () => void;\n /** Render as a different element type */\n as?: React.ElementType;\n /** Visual variant for CSS targeting via data-variant */\n variant?: string;\n /** Size for CSS targeting via data-size */\n size?: string;\n}\n\n/**\n * Button component — web adapter for @entropix/core's useButton.\n *\n * Renders a `<button>` by default. Use the `as` prop for other elements.\n * Provides data-state, data-variant, data-size attributes for CSS targeting.\n */\nexport const Button = forwardRef<HTMLElement, ButtonProps>(function Button(\n {\n disabled,\n loading,\n onPress,\n as: Component = \"button\",\n variant,\n size,\n className,\n style,\n children,\n onClick,\n onKeyDown: externalOnKeyDown,\n ...rest\n },\n ref,\n) {\n const elementType =\n typeof Component === \"string\" ? Component : \"div\";\n\n const { isDisabled, isLoading, getButtonProps } = useButton({\n disabled,\n loading,\n onPress,\n elementType,\n });\n\n const propGetterReturn = getButtonProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const actionMap = useMemo(\n () => ({\n activate: propGetterReturn.onAction ?? (() => {}),\n }),\n [propGetterReturn.onAction],\n );\n\n const onKeyDown = useKeyboardHandler(\n propGetterReturn.keyboardConfig,\n actionMap,\n );\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n propGetterReturn.onAction?.();\n onClick?.(event);\n },\n [propGetterReturn.onAction, onClick],\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLElement>) => {\n onKeyDown?.(event);\n externalOnKeyDown?.(event);\n },\n [onKeyDown, externalOnKeyDown],\n );\n\n const dataState = isLoading ? \"loading\" : isDisabled ? \"disabled\" : undefined;\n\n return (\n <Component\n ref={ref}\n className={cn(\n \"entropix-button\",\n variant && `entropix-button--${variant}`,\n size && `entropix-button--${size}`,\n className,\n )}\n style={style}\n {...ariaProps}\n {...rest}\n type={Component === \"button\" ? \"button\" : undefined}\n disabled={Component === \"button\" && isDisabled ? true : undefined}\n onClick={propGetterReturn.onAction || onClick ? handleClick : undefined}\n onKeyDown={onKeyDown || externalOnKeyDown ? handleKeyDown : undefined}\n data-state={dataState}\n data-variant={variant}\n data-size={size}\n >\n {children}\n </Component>\n );\n});\n","import { forwardRef, useCallback, useMemo } from \"react\";\nimport { useToggle } from \"@entropix/core\";\nimport type { UseToggleOptions } from \"@entropix/core\";\nimport { mapAccessibilityToAria } from \"../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../utils/use-keyboard-handler.js\";\nimport { cn } from \"../utils/cn.js\";\nimport \"../styles/toggle.css\";\n\nexport interface ToggleProps\n extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"onChange\" | \"disabled\"\n > {\n /** Controlled checked state */\n checked?: boolean;\n /** Default checked state for uncontrolled mode */\n defaultChecked?: boolean;\n /** Called when checked state changes */\n onChange?: (checked: boolean) => void;\n /** Whether the toggle is disabled */\n disabled?: boolean;\n /** Accessible label (if no children) */\n label?: string;\n}\n\n/** Internal props used by Switch to override the role */\ninterface ToggleInternalProps extends ToggleProps {\n /** @internal Override the ARIA role */\n role?: UseToggleOptions[\"role\"];\n /** @internal CSS class name for the component (toggle or switch) */\n componentClass?: string;\n}\n\n/**\n * Toggle component — web adapter for @entropix/core's useToggle.\n *\n * Renders a `<button type=\"button\">` with role=\"checkbox\".\n * Use the Switch component for role=\"switch\" semantics.\n * Sets data-state=\"checked\"|\"unchecked\" for CSS targeting.\n */\nexport const Toggle = forwardRef<HTMLButtonElement, ToggleProps>(\n function Toggle(props, ref) {\n return <ToggleInner {...props} ref={ref} role=\"checkbox\" componentClass=\"entropix-toggle\" />;\n },\n);\n\n/** @internal Shared implementation for Toggle and Switch */\nexport const ToggleInner = forwardRef<HTMLButtonElement, ToggleInternalProps>(\n function ToggleInner(\n {\n checked,\n defaultChecked,\n onChange,\n disabled,\n label,\n role = \"checkbox\",\n componentClass = \"entropix-toggle\",\n className,\n style,\n children,\n onClick,\n onKeyDown: externalOnKeyDown,\n ...rest\n },\n ref,\n ) {\n const { isChecked, isDisabled, getToggleProps } = useToggle({\n checked,\n defaultChecked,\n onChange,\n disabled,\n role,\n });\n\n const propGetterReturn = getToggleProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n // Add explicit label if provided and no children\n if (label && !children) {\n ariaProps[\"aria-label\"] = label;\n }\n\n const actionMap = useMemo(\n () => ({\n toggle: propGetterReturn.onAction ?? (() => {}),\n }),\n [propGetterReturn.onAction],\n );\n\n const onKeyDown = useKeyboardHandler(\n propGetterReturn.keyboardConfig,\n actionMap,\n );\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n propGetterReturn.onAction?.();\n onClick?.(event);\n },\n [propGetterReturn.onAction, onClick],\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event);\n externalOnKeyDown?.(event);\n },\n [onKeyDown, externalOnKeyDown],\n );\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(componentClass, className)}\n style={style}\n {...ariaProps}\n {...rest}\n disabled={isDisabled || undefined}\n onClick={propGetterReturn.onAction || onClick ? handleClick : undefined}\n onKeyDown={onKeyDown || externalOnKeyDown ? handleKeyDown : undefined}\n data-state={isChecked ? \"checked\" : \"unchecked\"}\n >\n {children}\n </button>\n );\n },\n);\n","import { forwardRef } from \"react\";\nimport { ToggleInner } from \"./toggle.js\";\nimport type { ToggleProps } from \"./toggle.js\";\nimport \"../styles/switch.css\";\n\nexport type SwitchProps = ToggleProps;\n\n/**\n * Switch component — Toggle with role=\"switch\" semantics.\n *\n * API-identical to Toggle, but renders with `role=\"switch\"`\n * instead of `role=\"checkbox\"`.\n */\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(\n function Switch(props, ref) {\n return <ToggleInner {...props} ref={ref} role=\"switch\" componentClass=\"entropix-switch\" />;\n },\n);\n","import { createContext, useContext } from \"react\";\nimport type { UseDialogReturn } from \"@entropix/core\";\n\nexport const DialogContext = createContext<UseDialogReturn | null>(null);\n\n/**\n * Hook to access the nearest Dialog context.\n * Throws if used outside a <Dialog> component.\n */\nexport function useDialogContext(): UseDialogReturn {\n const context = useContext(DialogContext);\n if (!context) {\n throw new Error(\n \"Dialog compound components must be used within a <Dialog> provider.\",\n );\n }\n return context;\n}\n","import { useDialog } from \"@entropix/core\";\nimport type { UseDialogOptions } from \"@entropix/core\";\nimport { DialogContext } from \"./dialog-context.js\";\n\nexport interface DialogProps extends UseDialogOptions {\n children: React.ReactNode;\n}\n\n/**\n * Dialog root — provides dialog state to compound sub-components.\n * Renders no DOM of its own.\n */\nexport function Dialog({\n children,\n isOpen,\n defaultOpen,\n onOpenChange,\n closeOnOverlayPress,\n closeOnEscape,\n modal,\n role,\n}: DialogProps) {\n const dialog = useDialog({\n isOpen,\n defaultOpen,\n onOpenChange,\n closeOnOverlayPress,\n closeOnEscape,\n modal,\n role,\n });\n\n return (\n <DialogContext.Provider value={dialog}>{children}</DialogContext.Provider>\n );\n}\n","import { forwardRef, useCallback } from \"react\";\nimport { useDialogContext } from \"./dialog-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface DialogTriggerProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\n/**\n * DialogTrigger — button that opens/closes the dialog.\n * Maps core's getTriggerProps() to DOM attributes.\n */\nexport const DialogTrigger = forwardRef<HTMLButtonElement, DialogTriggerProps>(\n function DialogTrigger({ children, className, onClick, ...rest }, ref) {\n const { getTriggerProps } = useDialogContext();\n const propGetterReturn = getTriggerProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n propGetterReturn.onAction?.();\n onClick?.(event);\n },\n [propGetterReturn.onAction, onClick],\n );\n\n return (\n <button\n ref={ref}\n type=\"button\"\n {...ariaProps}\n {...rest}\n className={cn(\"entropix-dialog-trigger\", className)}\n onClick={handleClick}\n >\n {children}\n </button>\n );\n },\n);\n","import { forwardRef, useRef, useEffect, useState, useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useDialogContext } from \"./dialog-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../../utils/use-keyboard-handler.js\";\nimport { useFocusTrap } from \"../../focus/use-focus-trap.js\";\nimport { useFocusRestore } from \"../../focus/use-focus-restore.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface DialogContentProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * DialogContent — the dialog panel rendered in a portal.\n *\n * Implements focus trap, focus restore, Escape-to-close keyboard handling,\n * and portal rendering. SSR-safe via useEffect mount gating.\n */\nexport const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n function DialogContent({ children, className, onKeyDown: externalOnKeyDown, ...rest }, ref) {\n const { isOpen, close, ids, focusManagement, getContentProps } =\n useDialogContext();\n\n const [mounted, setMounted] = useState(false);\n useEffect(() => {\n setMounted(true);\n }, []);\n\n // Internal ref for focus trap (compose with forwarded ref)\n const internalRef = useRef<HTMLDivElement | null>(null);\n\n // Focus management\n useFocusTrap(internalRef, isOpen && focusManagement.trapFocus);\n useFocusRestore(isOpen && focusManagement.restoreFocus);\n\n const propGetterReturn = getContentProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const actionMap = useMemo(() => ({ dismiss: close }), [close]);\n const onKeyDown = useKeyboardHandler(\n propGetterReturn.keyboardConfig,\n actionMap,\n );\n\n // Don't render during SSR or when closed\n if (!mounted || !isOpen) return null;\n\n const content = (\n <div\n ref={(node) => {\n internalRef.current = node;\n // Forward the ref\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }\n }}\n id={ids.content}\n {...ariaProps}\n {...rest}\n className={cn(\"entropix-dialog-content\", className)}\n onKeyDown={\n onKeyDown\n ? (event: React.KeyboardEvent<HTMLDivElement>) => {\n (onKeyDown as React.KeyboardEventHandler<HTMLElement>)(event);\n externalOnKeyDown?.(event);\n }\n : externalOnKeyDown\n }\n data-state={isOpen ? \"open\" : \"closed\"}\n >\n {children}\n </div>\n );\n\n return createPortal(content, document.body);\n },\n);\n","import { forwardRef } from \"react\";\nimport { useDialogContext } from \"./dialog-context.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface DialogTitleProps\n extends React.HTMLAttributes<HTMLHeadingElement> {}\n\n/**\n * DialogTitle — heading element with auto-linked ID for aria-labelledby.\n */\nexport const DialogTitle = forwardRef<HTMLHeadingElement, DialogTitleProps>(\n function DialogTitle({ children, className, ...rest }, ref) {\n const { ids } = useDialogContext();\n\n return (\n <h2 ref={ref} id={ids.title} {...rest} className={cn(\"entropix-dialog-title\", className)}>\n {children}\n </h2>\n );\n },\n);\n","import { forwardRef } from \"react\";\nimport { useDialogContext } from \"./dialog-context.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface DialogDescriptionProps\n extends React.HTMLAttributes<HTMLParagraphElement> {}\n\n/**\n * DialogDescription — paragraph element with auto-linked ID for aria-describedby.\n */\nexport const DialogDescription = forwardRef<\n HTMLParagraphElement,\n DialogDescriptionProps\n>(function DialogDescription({ children, className, ...rest }, ref) {\n const { ids } = useDialogContext();\n\n return (\n <p ref={ref} id={ids.description} {...rest} className={cn(\"entropix-dialog-description\", className)}>\n {children}\n </p>\n );\n});\n","import { forwardRef, useCallback } from \"react\";\nimport { useDialogContext } from \"./dialog-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface DialogCloseProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\n/**\n * DialogClose — button that closes the dialog.\n * Maps core's getCloseProps() to DOM attributes.\n */\nexport const DialogClose = forwardRef<HTMLButtonElement, DialogCloseProps>(\n function DialogClose({ children, className, onClick, ...rest }, ref) {\n const { getCloseProps } = useDialogContext();\n const propGetterReturn = getCloseProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n propGetterReturn.onAction?.();\n onClick?.(event);\n },\n [propGetterReturn.onAction, onClick],\n );\n\n return (\n <button\n ref={ref}\n type=\"button\"\n {...ariaProps}\n {...rest}\n className={cn(\"entropix-dialog-close\", className)}\n onClick={handleClick}\n >\n {children}\n </button>\n );\n },\n);\n","import { forwardRef, useCallback } from \"react\";\nimport { useDialogContext } from \"./dialog-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/dialog.css\";\n\nexport interface DialogOverlayProps\n extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * DialogOverlay — backdrop element behind the dialog.\n * Hidden from the accessibility tree. Optionally closes the dialog on click.\n */\nexport const DialogOverlay = forwardRef<HTMLDivElement, DialogOverlayProps>(\n function DialogOverlay({ className, onClick, ...rest }, ref) {\n const { isOpen, getOverlayProps } = useDialogContext();\n const propGetterReturn = getOverlayProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n propGetterReturn.onAction?.();\n onClick?.(event);\n },\n [propGetterReturn.onAction, onClick],\n );\n\n if (!isOpen) return null;\n\n return (\n <div\n ref={ref}\n {...ariaProps}\n {...rest}\n className={cn(\"entropix-dialog-overlay\", className)}\n onClick={propGetterReturn.onAction || onClick ? handleClick : undefined}\n data-state={isOpen ? \"open\" : \"closed\"}\n />\n );\n },\n);\n","import { createContext, useContext } from \"react\";\nimport type { UseTabsReturn } from \"@entropix/core\";\n\nexport interface TabsContextValue extends UseTabsReturn {\n orientation: \"horizontal\" | \"vertical\";\n activationMode: \"automatic\" | \"manual\";\n}\n\nexport const TabsContext = createContext<TabsContextValue | null>(null);\n\nexport function useTabsContext(): TabsContextValue {\n const context = useContext(TabsContext);\n if (!context) {\n throw new Error(\n \"Tabs compound components must be used within a <Tabs> provider.\",\n );\n }\n return context;\n}\n","import React from \"react\";\nimport { useTabs, type UseTabsOptions } from \"@entropix/core\";\nimport { TabsContext } from \"./tabs-context.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface TabsProps extends UseTabsOptions {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Tabs({\n children,\n className,\n orientation = \"horizontal\",\n activationMode = \"automatic\",\n ...options\n}: TabsProps) {\n const tabs = useTabs({ ...options, orientation, activationMode });\n\n return (\n <TabsContext.Provider value={{ ...tabs, orientation, activationMode }}>\n <div className={cn(\"entropix-tabs\", className)} data-orientation={orientation}>\n {children}\n </div>\n </TabsContext.Provider>\n );\n}\n","import React from \"react\";\nimport { useTabsContext } from \"./tabs-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/tabs.css\";\n\nexport interface TabListProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function TabList({ children, className }: TabListProps) {\n const { getTabListProps } = useTabsContext();\n const propGetterReturn = getTabListProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n return (\n <div {...ariaProps} className={cn(\"entropix-tablist\", className)}>\n {children}\n </div>\n );\n}\n","import React, { useCallback } from \"react\";\nimport { useTabsContext } from \"./tabs-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../../utils/use-keyboard-handler.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface TabProps {\n value: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Tab({ value, children, className }: TabProps) {\n const { getTabProps, select, selectedKey, orientation } = useTabsContext();\n const propGetterReturn = getTabProps(value);\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n const baseId = ariaProps[\"aria-controls\"]\n ? String(ariaProps[\"aria-controls\"]).replace(`-panel-${value}`, \"\")\n : \"\";\n\n const handleClick = useCallback(() => {\n propGetterReturn.onAction?.();\n }, [propGetterReturn.onAction]);\n\n const onKeyDown = useKeyboardHandler(propGetterReturn.keyboardConfig, {\n activate: () => select(value),\n });\n\n return (\n <button\n {...ariaProps}\n id={`${baseId}-tab-${value}`}\n className={cn(\"entropix-tab\", className)}\n onClick={handleClick}\n onKeyDown={onKeyDown}\n data-state={selectedKey === value ? \"active\" : \"inactive\"}\n data-orientation={orientation}\n >\n {children}\n </button>\n );\n}\n","import React from \"react\";\nimport { useTabsContext } from \"./tabs-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface TabPanelProps {\n value: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function TabPanel({ value, children, className }: TabPanelProps) {\n const { getTabPanelProps, selectedKey } = useTabsContext();\n const propGetterReturn = getTabPanelProps(value);\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n const baseId = ariaProps[\"aria-labelledby\"]\n ? String(ariaProps[\"aria-labelledby\"]).replace(`-tab-${value}`, \"\")\n : \"\";\n\n if (selectedKey !== value) return null;\n\n return (\n <div\n {...ariaProps}\n id={`${baseId}-panel-${value}`}\n className={cn(\"entropix-tabpanel\", className)}\n data-state=\"active\"\n >\n {children}\n </div>\n );\n}\n","import { createContext, useContext } from \"react\";\nimport type { UseAccordionReturn } from \"@entropix/core\";\n\nexport const AccordionContext = createContext<UseAccordionReturn | null>(null);\n\nexport function useAccordionContext(): UseAccordionReturn {\n const context = useContext(AccordionContext);\n if (!context) {\n throw new Error(\n \"Accordion compound components must be used within an <Accordion> provider.\",\n );\n }\n return context;\n}\n\n/** Context for the current accordion item's key */\nexport const AccordionItemContext = createContext<string | null>(null);\n\nexport function useAccordionItemContext(): string {\n const context = useContext(AccordionItemContext);\n if (context === null) {\n throw new Error(\n \"AccordionTrigger and AccordionPanel must be used within an <AccordionItem>.\",\n );\n }\n return context;\n}\n","import React from \"react\";\nimport { useAccordion, type UseAccordionOptions } from \"@entropix/core\";\nimport { AccordionContext } from \"./accordion-context.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/accordion.css\";\n\nexport interface AccordionProps extends UseAccordionOptions {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Accordion({ children, className, ...options }: AccordionProps) {\n const accordion = useAccordion(options);\n\n return (\n <AccordionContext.Provider value={accordion}>\n <div className={cn(\"entropix-accordion\", className)}>{children}</div>\n </AccordionContext.Provider>\n );\n}\n","import React from \"react\";\nimport {\n AccordionItemContext,\n useAccordionContext,\n} from \"./accordion-context.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface AccordionItemProps {\n value: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function AccordionItem({\n value,\n children,\n className,\n}: AccordionItemProps) {\n const { isExpanded } = useAccordionContext();\n\n return (\n <AccordionItemContext.Provider value={value}>\n <div\n className={cn(\"entropix-accordion-item\", className)}\n data-state={isExpanded(value) ? \"open\" : \"closed\"}\n >\n {children}\n </div>\n </AccordionItemContext.Provider>\n );\n}\n","import React, { useCallback } from \"react\";\nimport {\n useAccordionContext,\n useAccordionItemContext,\n} from \"./accordion-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../../utils/use-keyboard-handler.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface AccordionTriggerProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function AccordionTrigger({\n children,\n className,\n}: AccordionTriggerProps) {\n const itemKey = useAccordionItemContext();\n const { getItemTriggerProps, toggle } = useAccordionContext();\n const propGetterReturn = getItemTriggerProps(itemKey);\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n const triggerId = propGetterReturn.accessibility.controls\n ? String(propGetterReturn.accessibility.controls).replace(\"panel-\", \"trigger-\")\n : undefined;\n\n const handleClick = useCallback(() => {\n propGetterReturn.onAction?.();\n }, [propGetterReturn.onAction]);\n\n const onKeyDown = useKeyboardHandler(propGetterReturn.keyboardConfig, {\n activate: () => toggle(itemKey),\n });\n\n return (\n <button\n {...ariaProps}\n id={triggerId}\n className={cn(\"entropix-accordion-trigger\", className)}\n onClick={handleClick}\n onKeyDown={onKeyDown}\n >\n {children}\n </button>\n );\n}\n","import React from \"react\";\nimport {\n useAccordionContext,\n useAccordionItemContext,\n} from \"./accordion-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface AccordionPanelProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function AccordionPanel({ children, className }: AccordionPanelProps) {\n const itemKey = useAccordionItemContext();\n const { getItemPanelProps, isExpanded } = useAccordionContext();\n const propGetterReturn = getItemPanelProps(itemKey);\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n const panelId = propGetterReturn.accessibility.labelledBy\n ? String(propGetterReturn.accessibility.labelledBy).replace(\n \"trigger-\",\n \"panel-\",\n )\n : undefined;\n\n if (!isExpanded(itemKey)) return null;\n\n return (\n <div {...ariaProps} id={panelId} className={cn(\"entropix-accordion-panel\", className)} data-state=\"open\">\n {children}\n </div>\n );\n}\n","import { createContext, useContext } from \"react\";\nimport type { UseMenuReturn } from \"@entropix/core\";\n\nexport const MenuContext = createContext<UseMenuReturn | null>(null);\n\nexport function useMenuContext(): UseMenuReturn {\n const context = useContext(MenuContext);\n if (!context) {\n throw new Error(\n \"Menu compound components must be used within a <Menu> provider.\",\n );\n }\n return context;\n}\n","import React from \"react\";\nimport { useMenu, type UseMenuOptions } from \"@entropix/core\";\nimport { MenuContext } from \"./menu-context.js\";\n\nexport interface MenuProps extends UseMenuOptions {\n children: React.ReactNode;\n}\n\nexport function Menu({ children, ...options }: MenuProps) {\n const menu = useMenu(options);\n\n return (\n <MenuContext.Provider value={menu}>{children}</MenuContext.Provider>\n );\n}\n","import React, { useCallback } from \"react\";\nimport { useMenuContext } from \"./menu-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../../utils/use-keyboard-handler.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface MenuTriggerProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function MenuTrigger({ children, className }: MenuTriggerProps) {\n const { getTriggerProps, toggle, open } = useMenuContext();\n const propGetterReturn = getTriggerProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const handleClick = useCallback(() => {\n propGetterReturn.onAction?.();\n }, [propGetterReturn.onAction]);\n\n const onKeyDown = useKeyboardHandler(propGetterReturn.keyboardConfig, {\n activate: toggle,\n moveDown: open,\n moveUp: open,\n });\n\n return (\n <button\n {...ariaProps}\n className={cn(\"entropix-menu-trigger\", className)}\n onClick={handleClick}\n onKeyDown={onKeyDown}\n >\n {children}\n </button>\n );\n}\n","import React from \"react\";\nimport { useMenuContext } from \"./menu-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../../utils/use-keyboard-handler.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/menu.css\";\n\nexport interface MenuContentProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function MenuContent({ children, className }: MenuContentProps) {\n const { isOpen, getMenuProps, close } = useMenuContext();\n const propGetterReturn = getMenuProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const onKeyDown = useKeyboardHandler(propGetterReturn.keyboardConfig, {\n dismiss: close,\n });\n\n if (!isOpen) return null;\n\n return (\n <div\n {...ariaProps}\n className={cn(\"entropix-menu-content\", className)}\n onKeyDown={onKeyDown}\n data-state=\"open\"\n >\n {children}\n </div>\n );\n}\n","import React, { useCallback } from \"react\";\nimport { useMenuContext } from \"./menu-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface MenuItemProps {\n index: number;\n onSelect?: () => void;\n disabled?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function MenuItem({\n index,\n onSelect,\n disabled,\n children,\n className,\n}: MenuItemProps) {\n const { getItemProps, activeIndex } = useMenuContext();\n const propGetterReturn = getItemProps(index, { onSelect, disabled });\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const handleClick = useCallback(() => {\n propGetterReturn.onAction?.();\n }, [propGetterReturn.onAction]);\n\n return (\n <div\n {...ariaProps}\n className={cn(\"entropix-menu-item\", className)}\n onClick={handleClick}\n data-state={activeIndex === index ? \"active\" : \"inactive\"}\n data-disabled={disabled || undefined}\n >\n {children}\n </div>\n );\n}\n","import { forwardRef, useCallback } from \"react\";\nimport { useInput, type UseInputOptions } from \"@entropix/core\";\nimport { mapAccessibilityToAria } from \"../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../utils/cn.js\";\nimport \"../styles/input.css\";\n\nexport interface InputProps\n extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"onChange\" | \"disabled\" | \"value\" | \"size\"\n > {\n /** Controlled value */\n value?: string;\n /** Default value for uncontrolled mode */\n defaultValue?: string;\n /** Called when the value changes */\n onChange?: (value: string) => void;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Whether the input is read-only */\n readOnly?: boolean;\n /** Whether the input is required */\n required?: boolean;\n /** Whether the input is in an invalid state */\n invalid?: boolean;\n /** Label text */\n label?: string;\n /** Helper text displayed below the input */\n helperText?: string;\n /** Error message displayed below the input (sets invalid=true when present) */\n errorMessage?: string;\n /** Visual variant */\n variant?: \"default\" | \"filled\";\n /** Size */\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\n/**\n * Input component — web adapter for @entropix/core's useInput.\n *\n * Renders a wrapper div with label, input, helper text, and error message.\n * Sets data-state, data-variant, and data-size attributes for CSS targeting.\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n value,\n defaultValue,\n onChange,\n disabled,\n readOnly,\n required,\n invalid,\n label,\n helperText,\n errorMessage,\n variant = \"default\",\n size = \"md\",\n className,\n type,\n placeholder,\n name,\n ...rest\n },\n ref,\n) {\n // When errorMessage is set, auto-set invalid\n const isInvalid = invalid || !!errorMessage;\n\n const {\n value: inputValue,\n isDisabled,\n isReadOnly,\n isRequired,\n isInvalid: _,\n getInputProps,\n getLabelProps,\n getHelperTextProps,\n getErrorMessageProps,\n } = useInput({\n value,\n defaultValue,\n onChange,\n disabled,\n readOnly,\n required,\n invalid: isInvalid,\n type: type as UseInputOptions[\"type\"],\n placeholder,\n name,\n });\n\n const propGetterReturn = getInputProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n const labelProps = getLabelProps();\n const helperProps = getHelperTextProps();\n const errorProps = getErrorMessageProps();\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event.target.value);\n },\n [onChange],\n );\n\n const dataState = isInvalid\n ? \"invalid\"\n : isDisabled\n ? \"disabled\"\n : undefined;\n\n return (\n <div\n className={cn(\"entropix-input-wrapper\", className)}\n data-state={dataState}\n data-variant={variant}\n data-size={size}\n >\n {label && (\n <label\n className=\"entropix-input-label\"\n id={labelProps.id}\n htmlFor={labelProps.htmlFor}\n >\n {label}\n {isRequired && <span className=\"entropix-input-required\">*</span>}\n </label>\n )}\n <input\n ref={ref}\n className=\"entropix-input\"\n {...ariaProps}\n {...rest}\n type={type}\n name={name}\n placeholder={placeholder}\n value={inputValue}\n onChange={handleChange}\n disabled={isDisabled || undefined}\n readOnly={isReadOnly || undefined}\n data-state={dataState}\n data-variant={variant}\n data-size={size}\n />\n {isInvalid && errorMessage ? (\n <span className=\"entropix-input-error\" {...errorProps}>\n {errorMessage}\n </span>\n ) : helperText ? (\n <span className=\"entropix-input-helper\" {...helperProps}>\n {helperText}\n </span>\n ) : null}\n </div>\n );\n});\n","import { forwardRef, useCallback } from \"react\";\nimport { useInput } from \"@entropix/core\";\nimport { mapAccessibilityToAria } from \"../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../utils/cn.js\";\nimport \"../styles/input.css\";\n\nexport interface TextareaProps\n extends Omit<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n \"onChange\" | \"disabled\" | \"value\"\n > {\n /** Controlled value */\n value?: string;\n /** Default value for uncontrolled mode */\n defaultValue?: string;\n /** Called when the value changes */\n onChange?: (value: string) => void;\n /** Whether the textarea is disabled */\n disabled?: boolean;\n /** Whether the textarea is read-only */\n readOnly?: boolean;\n /** Whether the textarea is required */\n required?: boolean;\n /** Whether the textarea is in an invalid state */\n invalid?: boolean;\n /** Label text */\n label?: string;\n /** Helper text displayed below the textarea */\n helperText?: string;\n /** Error message displayed below the textarea (sets invalid=true when present) */\n errorMessage?: string;\n /** Visual variant */\n variant?: \"default\" | \"filled\";\n /** Size */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Number of visible text rows */\n rows?: number;\n /** Resize behavior */\n resize?: \"none\" | \"vertical\" | \"both\";\n}\n\n/**\n * Textarea component — web adapter for @entropix/core's useInput.\n *\n * Renders a wrapper div with label, textarea, helper text, and error message.\n * Sets data-state, data-variant, and data-size attributes for CSS targeting.\n */\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n value,\n defaultValue,\n onChange,\n disabled,\n readOnly,\n required,\n invalid,\n label,\n helperText,\n errorMessage,\n variant = \"default\",\n size = \"md\",\n rows,\n resize = \"vertical\",\n className,\n placeholder,\n name,\n style,\n ...rest\n },\n ref,\n ) {\n // When errorMessage is set, auto-set invalid\n const isInvalid = invalid || !!errorMessage;\n\n const {\n value: inputValue,\n isDisabled,\n isReadOnly,\n isRequired,\n getInputProps,\n getLabelProps,\n getHelperTextProps,\n getErrorMessageProps,\n } = useInput({\n value,\n defaultValue,\n onChange,\n disabled,\n readOnly,\n required,\n invalid: isInvalid,\n placeholder,\n name,\n });\n\n const propGetterReturn = getInputProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n const labelProps = getLabelProps();\n const helperProps = getHelperTextProps();\n const errorProps = getErrorMessageProps();\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(event.target.value);\n },\n [onChange],\n );\n\n const dataState = isInvalid\n ? \"invalid\"\n : isDisabled\n ? \"disabled\"\n : undefined;\n\n return (\n <div\n className={cn(\"entropix-input-wrapper\", className)}\n data-state={dataState}\n data-variant={variant}\n data-size={size}\n >\n {label && (\n <label\n className=\"entropix-input-label\"\n id={labelProps.id}\n htmlFor={labelProps.htmlFor}\n >\n {label}\n {isRequired && <span className=\"entropix-input-required\">*</span>}\n </label>\n )}\n <textarea\n ref={ref}\n className=\"entropix-textarea\"\n {...ariaProps}\n {...rest}\n name={name}\n placeholder={placeholder}\n value={inputValue}\n onChange={handleChange}\n disabled={isDisabled || undefined}\n readOnly={isReadOnly || undefined}\n rows={rows}\n style={{ ...style, resize }}\n data-state={dataState}\n data-variant={variant}\n data-size={size}\n />\n {isInvalid && errorMessage ? (\n <span className=\"entropix-input-error\" {...errorProps}>\n {errorMessage}\n </span>\n ) : helperText ? (\n <span className=\"entropix-input-helper\" {...helperProps}>\n {helperText}\n </span>\n ) : null}\n </div>\n );\n },\n);\n","import { forwardRef, useCallback, useMemo } from \"react\";\nimport { useToggle } from \"@entropix/core\";\nimport { mapAccessibilityToAria } from \"../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../utils/use-keyboard-handler.js\";\nimport { cn } from \"../utils/cn.js\";\nimport \"../styles/checkbox.css\";\n\nexport interface CheckboxProps\n extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"onChange\" | \"disabled\"\n > {\n /** Controlled checked state */\n checked?: boolean;\n /** Default checked state for uncontrolled mode */\n defaultChecked?: boolean;\n /** Called when checked state changes */\n onChange?: (checked: boolean) => void;\n /** Whether the checkbox is disabled */\n disabled?: boolean;\n /** Accessible label text */\n label?: string;\n /** Whether the checkbox is in an indeterminate state */\n indeterminate?: boolean;\n}\n\n/**\n * Checkbox component — web adapter for @entropix/core's useToggle.\n *\n * Renders a `<button type=\"button\">` with role=\"checkbox\" containing\n * an indicator span and a label span.\n * Sets data-state=\"checked\"|\"unchecked\"|\"indeterminate\" for CSS targeting.\n */\nexport const Checkbox = forwardRef<HTMLButtonElement, CheckboxProps>(\n function Checkbox(\n {\n checked,\n defaultChecked,\n onChange,\n disabled,\n label,\n indeterminate = false,\n className,\n style,\n children,\n onClick,\n onKeyDown: externalOnKeyDown,\n ...rest\n },\n ref,\n ) {\n const { isChecked, isDisabled, getToggleProps } = useToggle({\n checked,\n defaultChecked,\n onChange,\n disabled,\n role: \"checkbox\",\n });\n\n const propGetterReturn = getToggleProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n // Override aria-checked for indeterminate state\n if (indeterminate) {\n ariaProps[\"aria-checked\"] = \"mixed\";\n }\n\n // Add explicit label if provided and no children\n if (label && !children) {\n ariaProps[\"aria-label\"] = label;\n }\n\n const actionMap = useMemo(\n () => ({\n toggle: propGetterReturn.onAction ?? (() => {}),\n }),\n [propGetterReturn.onAction],\n );\n\n const onKeyDown = useKeyboardHandler(\n propGetterReturn.keyboardConfig,\n actionMap,\n );\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n propGetterReturn.onAction?.();\n onClick?.(event);\n },\n [propGetterReturn.onAction, onClick],\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event);\n externalOnKeyDown?.(event);\n },\n [onKeyDown, externalOnKeyDown],\n );\n\n const dataState = indeterminate\n ? \"indeterminate\"\n : isChecked\n ? \"checked\"\n : \"unchecked\";\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\"entropix-checkbox\", className)}\n style={style}\n {...ariaProps}\n {...rest}\n disabled={isDisabled || undefined}\n onClick={propGetterReturn.onAction || onClick ? handleClick : undefined}\n onKeyDown={onKeyDown || externalOnKeyDown ? handleKeyDown : undefined}\n data-state={dataState}\n >\n <span className=\"entropix-checkbox__indicator\" data-state={dataState} />\n {(label || children) && (\n <span className=\"entropix-checkbox__label\">\n {label || children}\n </span>\n )}\n </button>\n );\n },\n);\n","import { createContext, useContext } from \"react\";\nimport type { UseRadioGroupReturn } from \"@entropix/core\";\n\nexport const RadioContext = createContext<UseRadioGroupReturn | null>(null);\n\nexport function useRadioContext(): UseRadioGroupReturn {\n const context = useContext(RadioContext);\n if (!context) {\n throw new Error(\n \"Radio compound components must be used within a <RadioGroup> provider.\",\n );\n }\n return context;\n}\n","import React from \"react\";\nimport { useRadioGroup, type UseRadioGroupOptions } from \"@entropix/core\";\nimport { RadioContext } from \"./radio-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/radio.css\";\n\nexport interface RadioGroupProps extends UseRadioGroupOptions {\n /** Label for the radio group */\n label?: string;\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * RadioGroup component — web adapter for @entropix/core's useRadioGroup.\n *\n * Renders a `<div role=\"radiogroup\">` that provides context to RadioItem children.\n * Sets data-orientation for CSS targeting.\n */\nexport function RadioGroup({\n children,\n label,\n className,\n ...options\n}: RadioGroupProps) {\n const radioGroup = useRadioGroup(options);\n const propGetterReturn = radioGroup.getRadioGroupProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n if (label) {\n ariaProps[\"aria-label\"] = label;\n }\n\n return (\n <RadioContext.Provider value={radioGroup}>\n <div\n {...ariaProps}\n className={cn(\"entropix-radio-group\", className)}\n data-orientation={options.orientation ?? \"vertical\"}\n >\n {children}\n </div>\n </RadioContext.Provider>\n );\n}\n","import React, { useCallback, useMemo } from \"react\";\nimport type { KeyIntent } from \"@entropix/core\";\nimport { useRadioContext } from \"./radio-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../../utils/use-keyboard-handler.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface RadioItemProps {\n /** The value this radio option represents */\n value: string;\n /** Whether this specific radio is disabled */\n disabled?: boolean;\n /** Label text */\n label?: string;\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * RadioItem component — a single radio option within a RadioGroup.\n *\n * Renders a `<button type=\"button\" role=\"radio\">` with an indicator\n * circle and label. Sets data-state=\"checked\"|\"unchecked\" for CSS targeting.\n */\nexport function RadioItem({\n value,\n disabled,\n label,\n children,\n className,\n}: RadioItemProps) {\n const { getRadioProps, selectedValue } = useRadioContext();\n const propGetterReturn = getRadioProps(value, { disabled });\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const isChecked = value === selectedValue;\n\n const actionMap = useMemo<Partial<Record<KeyIntent, () => void>>>(\n () => ({}),\n [],\n );\n\n const onKeyDown = useKeyboardHandler(\n propGetterReturn.keyboardConfig,\n actionMap,\n );\n\n const handleClick = useCallback(() => {\n propGetterReturn.onAction?.();\n }, [propGetterReturn.onAction]);\n\n return (\n <button\n type=\"button\"\n {...ariaProps}\n className={cn(\"entropix-radio-item\", className)}\n onClick={handleClick}\n onKeyDown={onKeyDown}\n data-state={isChecked ? \"checked\" : \"unchecked\"}\n data-disabled={disabled || undefined}\n >\n <span\n className=\"entropix-radio-item__indicator\"\n data-state={isChecked ? \"checked\" : \"unchecked\"}\n />\n {(label || children) && (\n <span className=\"entropix-radio-item__label\">\n {label || children}\n </span>\n )}\n </button>\n );\n}\n","import { createContext, useContext } from \"react\";\nimport type { UseSelectReturn } from \"@entropix/core\";\n\nexport const SelectContext = createContext<UseSelectReturn | null>(null);\n\nexport function useSelectContext(): UseSelectReturn {\n const context = useContext(SelectContext);\n if (!context) {\n throw new Error(\n \"Select compound components must be used within a <Select> provider.\",\n );\n }\n return context;\n}\n","import React from \"react\";\nimport { useSelect, type UseSelectOptions } from \"@entropix/core\";\nimport { SelectContext } from \"./select-context.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/select.css\";\n\nexport interface SelectProps extends UseSelectOptions {\n /** Label for the select */\n label?: string;\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Select component — web adapter for @entropix/core's useSelect.\n *\n * Provides context to SelectTrigger, SelectContent, and SelectOption children.\n */\nexport function Select({ children, label, className, ...options }: SelectProps) {\n const select = useSelect(options);\n const labelProps = select.getLabelProps();\n\n return (\n <SelectContext.Provider value={select}>\n <div className={cn(\"entropix-select\", className)}>\n {label && (\n <label\n className=\"entropix-select-label\"\n id={labelProps.id}\n htmlFor={labelProps.htmlFor}\n >\n {label}\n </label>\n )}\n {children}\n </div>\n </SelectContext.Provider>\n );\n}\n","import React, { useCallback } from \"react\";\nimport { useSelectContext } from \"./select-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../../utils/use-keyboard-handler.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface SelectTriggerProps {\n /** Placeholder text when no value is selected */\n placeholder?: string;\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * SelectTrigger — renders like a styled input with a chevron.\n *\n * Displays the currently selected value or placeholder text.\n */\nexport function SelectTrigger({\n placeholder = \"Select...\",\n children,\n className,\n}: SelectTriggerProps) {\n const { getTriggerProps, toggle, open, selectedValue, isDisabled } =\n useSelectContext();\n const propGetterReturn = getTriggerProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const handleClick = useCallback(() => {\n propGetterReturn.onAction?.();\n }, [propGetterReturn.onAction]);\n\n const onKeyDown = useKeyboardHandler(propGetterReturn.keyboardConfig, {\n activate: toggle,\n moveDown: open,\n moveUp: open,\n });\n\n return (\n <button\n type=\"button\"\n {...ariaProps}\n className={cn(\"entropix-select-trigger\", className)}\n onClick={handleClick}\n onKeyDown={onKeyDown}\n disabled={isDisabled || undefined}\n >\n <span className=\"entropix-select-trigger__value\">\n {children ?? (selectedValue || placeholder)}\n </span>\n <span className=\"entropix-select-trigger__chevron\" aria-hidden=\"true\">\n ▾\n </span>\n </button>\n );\n}\n","import React from \"react\";\nimport { useSelectContext } from \"./select-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { useKeyboardHandler } from \"../../utils/use-keyboard-handler.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface SelectContentProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * SelectContent — renders the dropdown container for options.\n *\n * Only visible when the select is open.\n */\nexport function SelectContent({ children, className }: SelectContentProps) {\n const { isOpen, getListboxProps, close } = useSelectContext();\n const propGetterReturn = getListboxProps();\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const onKeyDown = useKeyboardHandler(propGetterReturn.keyboardConfig, {\n dismiss: close,\n });\n\n if (!isOpen) return null;\n\n return (\n <div\n {...ariaProps}\n className={cn(\"entropix-select-content\", className)}\n onKeyDown={onKeyDown}\n data-state=\"open\"\n >\n {children}\n </div>\n );\n}\n","import React, { useCallback } from \"react\";\nimport { useSelectContext } from \"./select-context.js\";\nimport { mapAccessibilityToAria } from \"../../utils/map-accessibility-to-aria.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface SelectOptionProps {\n /** The value this option represents */\n value: string;\n /** The index of this option in the list (auto-assigned by SelectContent if omitted) */\n index?: number;\n /** Whether this option is disabled */\n disabled?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * SelectOption — renders an option within SelectContent.\n *\n * Sets data-state=\"selected\"|\"unselected\" for CSS targeting.\n */\nexport function SelectOption({\n value,\n index,\n disabled,\n children,\n className,\n}: SelectOptionProps) {\n const { getOptionProps, selectedValue } = useSelectContext();\n const propGetterReturn = getOptionProps(value, index ?? 0, { disabled });\n const ariaProps = mapAccessibilityToAria(propGetterReturn.accessibility);\n\n const isSelected = value === selectedValue;\n\n const handleClick = useCallback(() => {\n propGetterReturn.onAction?.();\n }, [propGetterReturn.onAction]);\n\n return (\n <div\n {...ariaProps}\n className={cn(\"entropix-select-option\", className)}\n onClick={handleClick}\n data-state={isSelected ? \"selected\" : \"unselected\"}\n data-disabled={disabled || undefined}\n >\n {children}\n </div>\n );\n}\n","import { useState, useEffect, useCallback } from \"react\";\n\n/**\n * Breakpoint values in pixels, matching @entropix/tokens breakpoint primitives.\n */\nconst BREAKPOINTS = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n \"2xl\": 1536,\n} as const;\n\nexport type Breakpoint = \"base\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n\nconst BREAKPOINT_ORDER: Breakpoint[] = [\"base\", \"sm\", \"md\", \"lg\", \"xl\", \"2xl\"];\n\n/**\n * Returns the current breakpoint name based on viewport width.\n *\n * - `\"base\"` — <640px (mobile)\n * - `\"sm\"` — ≥640px (landscape phones)\n * - `\"md\"` — ≥768px (tablets)\n * - `\"lg\"` — ≥1024px (laptops)\n * - `\"xl\"` — ≥1280px (desktops)\n * - `\"2xl\"` — ≥1536px (wide screens)\n *\n * ```tsx\n * const breakpoint = useBreakpoint();\n * const isMobile = breakpoint === \"base\" || breakpoint === \"sm\";\n * ```\n */\nexport function useBreakpoint(): Breakpoint {\n const getBreakpoint = useCallback((): Breakpoint => {\n if (typeof window === \"undefined\") return \"base\";\n const width = window.innerWidth;\n if (width >= BREAKPOINTS[\"2xl\"]) return \"2xl\";\n if (width >= BREAKPOINTS.xl) return \"xl\";\n if (width >= BREAKPOINTS.lg) return \"lg\";\n if (width >= BREAKPOINTS.md) return \"md\";\n if (width >= BREAKPOINTS.sm) return \"sm\";\n return \"base\";\n }, []);\n\n const [breakpoint, setBreakpoint] = useState<Breakpoint>(getBreakpoint);\n\n useEffect(() => {\n const handleResize = () => {\n const next = getBreakpoint();\n setBreakpoint((prev) => (prev !== next ? next : prev));\n };\n\n window.addEventListener(\"resize\", handleResize);\n // Set initial value on mount (handles SSR hydration)\n handleResize();\n return () => window.removeEventListener(\"resize\", handleResize);\n }, [getBreakpoint]);\n\n return breakpoint;\n}\n\n/**\n * Subscribes to a CSS media query and returns whether it matches.\n *\n * ```tsx\n * const isMobile = useMediaQuery(\"(max-width: 767px)\");\n * const prefersDark = useMediaQuery(\"(prefers-color-scheme: dark)\");\n * ```\n */\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(() => {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n const mql = window.matchMedia(query);\n const handler = (event: MediaQueryListEvent) => setMatches(event.matches);\n\n // Set initial value\n setMatches(mql.matches);\n\n mql.addEventListener(\"change\", handler);\n return () => mql.removeEventListener(\"change\", handler);\n }, [query]);\n\n return matches;\n}\n\n/**\n * Returns true if the current viewport is at or above the given breakpoint.\n *\n * ```tsx\n * const isDesktop = useBreakpointValue(\"lg\");\n * // true when viewport ≥1024px\n * ```\n */\nexport function useBreakpointValue(breakpoint: Exclude<Breakpoint, \"base\">): boolean {\n return useMediaQuery(`(min-width: ${BREAKPOINTS[breakpoint]}px)`);\n}\n\nexport { BREAKPOINTS, BREAKPOINT_ORDER };\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/layout.css\";\n\nexport type SpacingSize = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Gap between children. Default uses --entropix-space-layout-stack token */\n gap?: SpacingSize;\n /** Cross-axis alignment */\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n /** Whether to take full width */\n fullWidth?: boolean;\n /** Render as a different element */\n as?: React.ElementType;\n}\n\n/**\n * Stack — vertical flex layout primitive.\n *\n * Uses the `space.layout.stack` token (16px) as default gap.\n *\n * ```tsx\n * <Stack gap=\"lg\" align=\"center\">\n * <Button>First</Button>\n * <Button>Second</Button>\n * </Stack>\n * ```\n */\nexport const Stack = forwardRef<HTMLDivElement, StackProps>(function Stack(\n { gap, align, fullWidth, as: Component = \"div\", className, children, ...rest },\n ref,\n) {\n return (\n <Component\n ref={ref}\n className={cn(\n \"entropix-stack\",\n gap && `entropix-stack--gap-${gap}`,\n align && `entropix-stack--align-${align}`,\n fullWidth && \"entropix-stack--full-width\",\n className,\n )}\n {...rest}\n >\n {children}\n </Component>\n );\n});\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/layout.css\";\n\nexport type SpacingSize = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n\nexport interface InlineProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Gap between children. Default uses --entropix-space-layout-inline token */\n gap?: SpacingSize;\n /** Cross-axis alignment */\n align?: \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\n /** Main-axis justification */\n justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\";\n /** Whether to wrap children */\n wrap?: boolean;\n /** Render as a different element */\n as?: React.ElementType;\n}\n\n/**\n * Inline — horizontal flex layout primitive.\n *\n * Uses the `space.layout.inline` token (12px) as default gap.\n *\n * ```tsx\n * <Inline gap=\"sm\" justify=\"between\" wrap>\n * <Button variant=\"primary\">Save</Button>\n * <Button variant=\"ghost\">Cancel</Button>\n * </Inline>\n * ```\n */\nexport const Inline = forwardRef<HTMLDivElement, InlineProps>(function Inline(\n { gap, align, justify, wrap, as: Component = \"div\", className, children, ...rest },\n ref,\n) {\n return (\n <Component\n ref={ref}\n className={cn(\n \"entropix-inline\",\n gap && `entropix-inline--gap-${gap}`,\n align && `entropix-inline--align-${align}`,\n justify && `entropix-inline--justify-${justify}`,\n wrap && \"entropix-inline--wrap\",\n className,\n )}\n {...rest}\n >\n {children}\n </Component>\n );\n});\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/layout.css\";\n\nexport type ContainerSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Maximum width constraint. Default: \"lg\" (1024px) */\n maxWidth?: ContainerSize;\n /** Whether to center children vertically */\n center?: boolean;\n /** Render as a different element */\n as?: React.ElementType;\n}\n\n/**\n * Container — page-level width constraint with horizontal margins.\n *\n * Uses the `space.layout.page-margin` token (24px) for horizontal padding.\n * Centers itself horizontally via auto margins.\n *\n * ```tsx\n * <Container maxWidth=\"lg\">\n * <Stack gap=\"xl\">\n * <h1>Page Title</h1>\n * <p>Content</p>\n * </Stack>\n * </Container>\n * ```\n */\nexport const Container = forwardRef<HTMLDivElement, ContainerProps>(function Container(\n { maxWidth = \"lg\", center, as: Component = \"div\", className, children, ...rest },\n ref,\n) {\n return (\n <Component\n ref={ref}\n className={cn(\n \"entropix-container\",\n `entropix-container--${maxWidth}`,\n center && \"entropix-container--center\",\n className,\n )}\n {...rest}\n >\n {children}\n </Component>\n );\n});\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport \"../../styles/layout.css\";\n\nexport interface DividerProps extends React.HTMLAttributes<HTMLHRElement> {\n /** Orientation of the divider */\n orientation?: \"horizontal\" | \"vertical\";\n /** Spacing above and below (or left and right for vertical) */\n spacing?: \"sm\" | \"md\" | \"lg\";\n}\n\n/**\n * Divider — visual separator line.\n *\n * Uses the `color.border.default` token for line color.\n *\n * ```tsx\n * <Stack>\n * <p>Section A</p>\n * <Divider spacing=\"md\" />\n * <p>Section B</p>\n * </Stack>\n *\n * <Inline>\n * <span>Left</span>\n * <Divider orientation=\"vertical\" spacing=\"sm\" />\n * <span>Right</span>\n * </Inline>\n * ```\n */\nexport const Divider = forwardRef<HTMLHRElement, DividerProps>(function Divider(\n { orientation = \"horizontal\", spacing, className, ...rest },\n ref,\n) {\n return (\n <hr\n ref={ref}\n role={orientation === \"vertical\" ? \"separator\" : undefined}\n aria-orientation={orientation === \"vertical\" ? \"vertical\" : undefined}\n className={cn(\n \"entropix-divider\",\n orientation === \"vertical\" && \"entropix-divider--vertical\",\n spacing && `entropix-divider--spacing-${spacing}`,\n className,\n )}\n {...rest}\n />\n );\n});\n"]}
|
|
@@ -1,67 +1,69 @@
|
|
|
1
1
|
/* Accordion — @entropix/react */
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
@layer entropix {
|
|
4
|
+
.entropix-accordion {
|
|
5
|
+
border: 1px solid var(--entropix-color-border-default);
|
|
6
|
+
border-radius: var(--entropix-radius-lg);
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
}
|
|
8
9
|
|
|
9
|
-
.entropix-accordion-item {
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
.entropix-accordion-item:last-child {
|
|
13
|
-
|
|
14
|
-
}
|
|
10
|
+
.entropix-accordion-item {
|
|
11
|
+
border-bottom: 1px solid var(--entropix-color-border-default);
|
|
12
|
+
}
|
|
13
|
+
.entropix-accordion-item:last-child {
|
|
14
|
+
border-bottom: none;
|
|
15
|
+
}
|
|
15
16
|
|
|
16
|
-
.entropix-accordion-trigger {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
17
|
+
.entropix-accordion-trigger {
|
|
18
|
+
display: flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
justify-content: space-between;
|
|
21
|
+
width: 100%;
|
|
22
|
+
padding: var(--entropix-spacing-4);
|
|
23
|
+
border: none;
|
|
24
|
+
background: transparent;
|
|
25
|
+
font-family: var(--entropix-font-family-sans);
|
|
26
|
+
font-size: var(--entropix-font-size-sm);
|
|
27
|
+
font-weight: var(--entropix-font-weight-medium);
|
|
28
|
+
color: var(--entropix-color-text-primary);
|
|
29
|
+
text-align: left;
|
|
30
|
+
cursor: pointer;
|
|
31
|
+
transition: background var(--entropix-duration-fast) var(--entropix-easing-default);
|
|
32
|
+
}
|
|
32
33
|
|
|
33
|
-
.entropix-accordion-trigger:hover:not(:disabled) {
|
|
34
|
-
|
|
35
|
-
}
|
|
34
|
+
.entropix-accordion-trigger:hover:not(:disabled) {
|
|
35
|
+
background: var(--entropix-color-bg-secondary);
|
|
36
|
+
}
|
|
36
37
|
|
|
37
|
-
.entropix-accordion-trigger:disabled {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
38
|
+
.entropix-accordion-trigger:disabled {
|
|
39
|
+
opacity: 0.5;
|
|
40
|
+
cursor: not-allowed;
|
|
41
|
+
}
|
|
41
42
|
|
|
42
|
-
.entropix-accordion-trigger:focus-visible {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
43
|
+
.entropix-accordion-trigger:focus-visible {
|
|
44
|
+
outline: 2px solid var(--entropix-color-border-focus);
|
|
45
|
+
outline-offset: -2px;
|
|
46
|
+
}
|
|
46
47
|
|
|
47
|
-
.entropix-accordion-panel {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
48
|
+
.entropix-accordion-panel {
|
|
49
|
+
padding: 0 var(--entropix-spacing-4) var(--entropix-spacing-4);
|
|
50
|
+
font-family: var(--entropix-font-family-sans);
|
|
51
|
+
font-size: var(--entropix-font-size-sm);
|
|
52
|
+
color: var(--entropix-color-text-secondary);
|
|
53
|
+
line-height: var(--entropix-line-height-normal);
|
|
54
|
+
}
|
|
54
55
|
|
|
55
|
-
/* === Responsive — Touch-friendly on mobile === */
|
|
56
|
+
/* === Responsive — Touch-friendly on mobile === */
|
|
56
57
|
|
|
57
|
-
@media (max-width: 767px) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
@media (max-width: 767px) {
|
|
59
|
+
.entropix-accordion-trigger {
|
|
60
|
+
padding: var(--entropix-spacing-4) var(--entropix-spacing-3);
|
|
61
|
+
min-height: 48px;
|
|
62
|
+
font-size: var(--entropix-font-size-base);
|
|
63
|
+
}
|
|
63
64
|
|
|
64
|
-
|
|
65
|
-
|
|
65
|
+
.entropix-accordion-panel {
|
|
66
|
+
padding: 0 var(--entropix-spacing-3) var(--entropix-spacing-3);
|
|
67
|
+
}
|
|
66
68
|
}
|
|
67
69
|
}
|