@amelharrak/eldo-ui 1.0.1 → 1.0.5
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/README.md +34 -16
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +42 -40
- package/dist/index.mjs.map +1 -1
- package/dist/types/index.d.ts +9 -8
- package/package.json +2 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/react/components/Button.jsx","../src/react/components/Alert.jsx","../src/react/components/Card.jsx","../src/react/components/Modal.jsx","../src/react/components/Dropdown.jsx","../src/react/components/Tooltip.jsx","../src/react/components/Collapse.jsx","../src/react/components/Tabs.jsx","../src/react/components/Sonner.jsx","../src/react/components/Timeline.jsx","../src/react/components/Container.jsx","../src/react/components/Offcanvas.jsx","../src/react/components/Carousel.jsx","../src/react/components/Popover.jsx","../src/react/components/Scrollspy.jsx","../src/react/components/Select.jsx","../src/react/components/FileUpload.jsx","../src/react/components/NumberInput.jsx","../src/react/components/Slider.jsx","../src/react/components/Switch.jsx","../src/react/components/InputOTP.jsx","../src/react/components/Accordion.jsx","../src/react/components/Navbar.jsx","../src/react/components/Pagination.jsx","../src/react/components/Spinner.jsx","../src/react/components/Stat.jsx","../src/react/components/Breadcrumb.jsx","../src/react/components/ListGroup.jsx","../src/react/components/Avatar.jsx","../src/react/components/Badge.jsx","../src/react/components/Box.jsx","../src/react/components/ButtonGroup.jsx","../src/react/components/Checkbox.jsx","../src/react/components/Col.jsx","../src/react/components/Input.jsx","../src/react/components/Progress.jsx","../src/react/components/Radio.jsx","../src/react/components/Row.jsx","../src/react/components/Text.jsx","../src/react/index.js"],"sourcesContent":["import React from 'react';\n\n/**\n * Button Component\n * \n * @param {Object} props\n * @param {React.ReactNode} props.children - Button content\n * @param {'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark' | 'link'} [props.variant='primary'] - Button variant\n * @param {'sm' | 'lg'} [props.size] - Button size\n * @param {boolean} [props.outline=false] - Outline style\n * @param {boolean} [props.disabled=false] - Disabled state\n * @param {boolean} [props.loading=false] - Loading state\n * @param {string} [props.type='button'] - Button type\n * @param {string} [props.className] - Additional classes\n * @param {Function} [props.onClick] - Click handler\n */\nexport const Button = React.forwardRef(({\n children,\n variant = 'primary',\n size,\n outline = false,\n disabled = false,\n loading = false,\n type = 'button',\n className = '',\n onClick,\n ...props\n}, ref) => {\n\n // Construct class names based on props to match existing SCSS\n const baseClass = 'btn';\n const variantClass = outline ? `btn-outline-${variant}` : `btn-${variant}`;\n const sizeClass = size ? `btn-${size}` : '';\n\n const classes = [\n baseClass,\n variantClass,\n sizeClass,\n className\n ].filter(Boolean).join(' ');\n\n return (\n <button\n ref={ref}\n type={type}\n className={classes}\n disabled={disabled || loading}\n onClick={onClick}\n {...props}\n >\n {loading && (\n <span className=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\n )}\n {children}\n </button>\n );\n});\n\nButton.displayName = 'Button';\n","import React, { useState, useEffect, useCallback, forwardRef } from 'react';\n\n/**\n * Alert Component\n * Contextual feedback messages\n * \n * @param {Object} props\n * @param {'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark'} [props.variant='primary'] - Alert variant\n * @param {boolean} [props.dismissible=false] - Whether the alert can be dismissed\n * @param {boolean} [props.show=true] - Controls visibility (controlled)\n * @param {Function} [props.onClose] - Callback when closed\n * @param {number} [props.autoClose] - Auto close duration in ms (false to disable)\n * @param {string} [props.className] - Additional classes\n * @param {React.ReactNode} props.children - Alert content\n */\nexport const Alert = forwardRef(({\n children,\n variant = 'primary',\n dismissible = false,\n show,\n onClose,\n autoClose = false,\n className = '',\n ...props\n}, ref) => {\n // Internal state for uncontrolled usage if 'show' is undefined\n const [internalShow, setInternalShow] = useState(true);\n\n // Determine effective visibility\n const isVisible = show !== undefined ? show : internalShow;\n\n const handleClose = useCallback(() => {\n if (show === undefined) {\n setInternalShow(false);\n }\n if (onClose) {\n onClose();\n }\n }, [show, onClose]);\n\n useEffect(() => {\n let timer;\n if (isVisible && autoClose) {\n timer = setTimeout(() => {\n handleClose();\n }, typeof autoClose === 'number' ? autoClose : 5000);\n }\n return () => {\n if (timer) clearTimeout(timer);\n };\n }, [isVisible, autoClose, handleClose]);\n\n if (!isVisible) return null;\n\n return (\n <div\n ref={ref}\n className={`alert alert-${variant} ${dismissible ? 'alert-dismissible' : ''} ${className}`}\n role=\"alert\"\n {...props}\n >\n {children}\n {dismissible && (\n <button\n type=\"button\"\n className=\"btn-close\"\n aria-label=\"Close\"\n onClick={handleClose}\n ></button>\n )}\n </div>\n );\n});\n\nAlert.displayName = 'Alert';\n","import React, { forwardRef } from 'react';\n\n/**\n * Card Component\n * Flexible content container\n * \n * @param {Object} props\n * @param {boolean} [props.hoverable=false] - Whether the card has a hover effect\n * @param {string} [props.className] - Additional classes\n * @param {string} [props.bodyClassName] - Additional classes for card body\n * @param {React.ReactNode} props.children - Card content\n */\nexport const Card = forwardRef(({\n children,\n hoverable = false,\n className = '',\n bodyClassName = '',\n ...props\n}, ref) => {\n\n // Check if children already contain Card.Body or similar structure\n // If not, wrap them in Card.Body for convenience, or let user handle it?\n // Vanilla Card.js seems to expect a .card-body to setContent. \n // In React, we can be more flexible. \n\n return (\n <div\n ref={ref}\n className={`card ${hoverable ? 'card-hoverable' : ''} ${className}`}\n {...props}\n >\n {/* We can expose sub-components like CardBody if needed, \n but for a simple port, we'll assume children are passed correctly \n or just wrap everything in card-body if it's simple text? \n Let's stick to simple wrapper first. */}\n {children}\n </div>\n );\n});\n\nCard.displayName = 'Card';\n\nexport const CardBody = forwardRef(({ className = '', children, ...props }, ref) => (\n <div ref={ref} className={`card-body ${className}`} {...props}>\n {children}\n </div>\n));\n\nCardBody.displayName = 'Card.Body';\n\nexport const CardHeader = forwardRef(({ className = '', children, ...props }, ref) => (\n <div ref={ref} className={`card-header ${className}`} {...props}>\n {children}\n </div>\n));\n\nCardHeader.displayName = 'Card.Header';\n\nexport const CardFooter = forwardRef(({ className = '', children, ...props }, ref) => (\n <div ref={ref} className={`card-footer ${className}`} {...props}>\n {children}\n </div>\n));\n\nCardFooter.displayName = 'Card.Footer';\n\n// Attach sub-components to main Card component\nCard.Body = CardBody;\nCard.Header = CardHeader;\nCard.Footer = CardFooter;\n","import React, { useEffect, useState, useRef } from 'react';\nimport { createPortal } from 'react-dom';\n\n/**\n * Modal Component\n * \n * @param {Object} props\n * @param {boolean} props.isOpen - Controls modal visibility\n * @param {Function} props.onClose - Handler for closing the modal\n * @param {string} [props.title] - Modal title\n * @param {React.ReactNode} props.children - Modal body content\n * @param {React.ReactNode} [props.footer] - Modal footer content\n * @param {boolean} [props.backdrop=true] - Show backdrop\n * @param {boolean} [props.keyboard=true] - Close on Escape\n * @param {'sm' | 'lg' | 'xl'} [props.size] - Modal size\n * @param {boolean} [props.centered=false] - Vertically center modal\n * @param {string} [props.className] - Additional classes\n */\nexport const Modal = ({\n isOpen,\n onClose,\n title,\n children,\n footer,\n backdrop = true,\n keyboard = true,\n size,\n centered = false,\n className = '',\n ...props\n}) => {\n const [mounted, setMounted] = useState(false);\n const modalRef = useRef(null);\n\n useEffect(() => {\n setMounted(true);\n return () => setMounted(false);\n }, []);\n\n // Handle body class for scroll locking\n useEffect(() => {\n if (isOpen) {\n document.body.classList.add('modal-open');\n } else {\n document.body.classList.remove('modal-open');\n }\n return () => {\n document.body.classList.remove('modal-open');\n };\n }, [isOpen]);\n\n // Handle keyboard events\n useEffect(() => {\n const handleKeyDown = (e) => {\n if (keyboard && e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, keyboard, onClose]);\n\n if (!mounted) return null;\n\n const modalContent = (\n <>\n {/* Backdrop */}\n {isOpen && <div className={`modal-backdrop fade show`} onClick={backdrop ? onClose : undefined} />}\n\n {/* Modal Dialog */}\n <div\n className={`modal fade ${isOpen ? 'show' : ''}`}\n style={{ display: isOpen ? 'block' : 'none' }}\n tabIndex=\"-1\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-hidden={!isOpen}\n aria-labelledby={title ? \"modal-title\" : undefined}\n {...props}\n >\n <div className={`modal-dialog ${size ? `modal-${size}` : ''} ${centered ? 'modal-dialog-centered' : ''} ${className}`}>\n <div className=\"modal-content\">\n <div className=\"modal-header\">\n {title && <h5 className=\"modal-title\" id=\"modal-title\">{title}</h5>}\n <button\n type=\"button\"\n className=\"btn-close\"\n aria-label=\"Close\"\n onClick={onClose}\n ></button>\n </div>\n <div className=\"modal-body\">\n {children}\n </div>\n {footer && (\n <div className=\"modal-footer\">\n {footer}\n </div>\n )}\n </div>\n </div>\n </div>\n </>\n );\n\n return createPortal(modalContent, document.body);\n};\n","import React, { useState, useRef, useEffect, forwardRef } from 'react';\n\n/**\n * Dropdown Component\n * Dropdown menu\n * \n * @param {Object} props\n * @param {React.ReactNode} props.trigger - Dropdown trigger element\n * @param {React.ReactNode} props.children - Dropdown menu items\n * @param {boolean} [props.isOpen] - Controlled open state\n * @param {Function} [props.onToggle] - Toggle handler\n * @param {'start' | 'end'} [props.align='start'] - Menu alignment\n * @param {string} [props.className] - Additional classes\n */\nexport const Dropdown = forwardRef(({\n trigger,\n children,\n isOpen,\n onToggle,\n align = 'start',\n className = '',\n ...props\n}, ref) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const dropdownRef = useRef(null);\n const open = isOpen !== undefined ? isOpen : internalOpen;\n\n useEffect(() => {\n const handleClickOutside = (e) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target)) {\n if (isOpen === undefined) {\n setInternalOpen(false);\n }\n if (onToggle) {\n onToggle(false);\n }\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleToggle = () => {\n const newState = !open;\n if (isOpen === undefined) {\n setInternalOpen(newState);\n }\n if (onToggle) {\n onToggle(newState);\n }\n };\n\n const handleKeyDown = (e) => {\n if (e.key === 'Escape' && open) {\n handleToggle();\n if (trigger.ref && trigger.ref.current) trigger.ref.current.focus();\n }\n };\n\n return (\n <div\n ref={dropdownRef}\n className={`dropdown ${open ? 'show' : ''} ${className}`}\n onKeyDown={handleKeyDown}\n {...props}\n >\n <div\n onClick={handleToggle}\n aria-expanded={open}\n aria-haspopup=\"true\"\n role=\"button\"\n tabIndex={0}\n >\n {trigger}\n </div>\n {open && (\n <div\n className={`dropdown-menu show dropdown-menu-${align}`}\n role=\"menu\"\n >\n {children}\n </div>\n )}\n </div>\n );\n});\n\nDropdown.displayName = 'Dropdown';\n\nexport const DropdownItem = forwardRef(({ children, onClick, className = '', ...props }, ref) => (\n <button\n ref={ref}\n className={`dropdown-item ${className}`}\n onClick={onClick}\n role=\"menuitem\"\n {...props}\n >\n {children}\n </button>\n));\n\nDropdownItem.displayName = 'Dropdown.Item';\n\nexport const DropdownDivider = () => <hr className=\"dropdown-divider\" />;\n\nDropdownDivider.displayName = 'Dropdown.Divider';\n\nDropdown.Item = DropdownItem;\nDropdown.Divider = DropdownDivider;\n","import React, { useState, useRef, useEffect, forwardRef } from 'react';\n\n/**\n * Tooltip Component\n * Contextual tooltip\n * \n * @param {Object} props\n * @param {React.ReactNode} props.children - Trigger element\n * @param {string} props.content - Tooltip content\n * @param {'top' | 'bottom' | 'left' | 'right'} [props.placement='top'] - Tooltip placement\n * @param {string} [props.className] - Additional classes\n */\nexport const Tooltip = forwardRef(({\n children,\n content,\n placement = 'top',\n className = '',\n ...props\n}, ref) => {\n const [isVisible, setIsVisible] = useState(false);\n const tooltipRef = useRef(null);\n\n const tooltipId = `tooltip-${Math.random().toString(36).substr(2, 9)}`;\n\n return (\n <div\n ref={ref}\n className={`tooltip-wrapper ${className}`}\n onMouseEnter={() => setIsVisible(true)}\n onMouseLeave={() => setIsVisible(false)}\n onFocus={() => setIsVisible(true)}\n onBlur={() => setIsVisible(false)}\n aria-describedby={isVisible ? tooltipId : undefined}\n {...props}\n >\n {children}\n {isVisible && (\n <div\n id={tooltipId}\n ref={tooltipRef}\n className={`tooltip bs-tooltip-${placement} show`}\n role=\"tooltip\"\n >\n <div className=\"tooltip-arrow\"></div>\n <div className=\"tooltip-inner\">{content}</div>\n </div>\n )}\n </div>\n );\n});\n\nTooltip.displayName = 'Tooltip';\n","import React, { useState, forwardRef } from 'react';\n\n/**\n * Collapse Component\n * Collapsible content\n * \n * @param {Object} props\n * @param {boolean} [props.isOpen] - Controlled open state\n * @param {boolean} [props.defaultOpen=false] - Default open state\n * @param {React.ReactNode} props.children - Collapsible content\n * @param {string} [props.className] - Additional classes\n */\nexport const Collapse = forwardRef(({\n isOpen,\n defaultOpen = false,\n children,\n className = '',\n ...props\n}, ref) => {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const open = isOpen !== undefined ? isOpen : internalOpen;\n const collapseId = props.id || `collapse-${Math.random().toString(36).substr(2, 9)}`;\n\n return (\n <div\n ref={ref}\n id={collapseId}\n className={`collapse ${open ? 'show' : ''} ${className}`}\n {...props}\n >\n {children}\n </div>\n );\n});\n\nCollapse.displayName = 'Collapse';\n","import React, { useState, forwardRef } from 'react';\n\n/**\n * Tabs Component\n * Tab navigation\n * \n * @param {Object} props\n * @param {number} [props.activeTab] - Controlled active tab index\n * @param {number} [props.defaultActiveTab=0] - Default active tab\n * @param {Function} [props.onTabChange] - Tab change handler\n * @param {React.ReactNode} props.children - Tab panes\n * @param {string} [props.className] - Additional classes\n */\nexport const Tabs = forwardRef(({\n activeTab,\n defaultActiveTab = 0,\n onTabChange,\n children,\n className = '',\n ...props\n}, ref) => {\n const [internalActiveTab, setInternalActiveTab] = useState(defaultActiveTab);\n const currentTab = activeTab !== undefined ? activeTab : internalActiveTab;\n\n const handleTabClick = (index) => {\n if (activeTab === undefined) {\n setInternalActiveTab(index);\n }\n if (onTabChange) {\n onTabChange(index);\n }\n };\n\n const tabs = React.Children.toArray(children);\n\n return (\n <div ref={ref} className={`tabs-container ${className}`} {...props}>\n <ul className=\"nav nav-tabs\" role=\"tablist\">\n {tabs.map((tab, index) => {\n const isActive = currentTab === index;\n const tabId = `tab-${index}`;\n const paneId = `pane-${index}`;\n\n return (\n <li key={index} className=\"nav-item\" role=\"presentation\">\n <button\n className={`nav-link ${isActive ? 'active' : ''}`}\n onClick={() => handleTabClick(index)}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={paneId}\n id={tabId}\n tabIndex={isActive ? 0 : -1}\n >\n {tab.props.title}\n </button>\n </li>\n );\n })}\n </ul>\n <div className=\"tab-content\">\n {tabs.map((tab, index) => {\n const isActive = currentTab === index;\n const tabId = `tab-${index}`;\n const paneId = `pane-${index}`;\n\n return (\n <div\n key={index}\n className={`tab-pane ${isActive ? 'active show' : ''}`}\n role=\"tabpanel\"\n id={paneId}\n aria-labelledby={tabId}\n tabIndex={0}\n hidden={!isActive}\n >\n {isActive && tab.props.children}\n </div>\n );\n })}\n </div>\n </div>\n );\n});\n\nTabs.displayName = 'Tabs';\n\nexport const TabPane = ({ title, children }) => {\n return <>{children}</>;\n};\n\nTabPane.displayName = 'Tabs.Pane';\n\nTabs.Pane = TabPane;\n","import React, { createContext, useContext, useState, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\n// import './Sonner.css';\n\n// Toast Context\nconst ToastContext = createContext(null);\n\nlet toastId = 0;\n\n/**\n * Sonner - Modern toast notification system\n * Inspired by shadcn/ui's Sonner component\n */\nexport function Toaster({\n position = 'bottom-right',\n expand = false,\n richColors = true,\n closeButton = false,\n ...props\n}) {\n const [toasts, setToasts] = useState([]);\n\n const addToast = useCallback((toast) => {\n const id = toastId++;\n const newToast = {\n id,\n ...toast,\n createdAt: Date.now(),\n };\n\n setToasts((prev) => [...prev, newToast]);\n\n if (toast.duration !== Infinity) {\n setTimeout(() => {\n removeToast(id);\n }, toast.duration || 4000);\n }\n\n return id;\n }, []);\n\n const removeToast = useCallback((id) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const positionClasses = {\n 'top-left': 'sonner-top-left',\n 'top-center': 'sonner-top-center',\n 'top-right': 'sonner-top-right',\n 'bottom-left': 'sonner-bottom-left',\n 'bottom-center': 'sonner-bottom-center',\n 'bottom-right': 'sonner-bottom-right',\n };\n\n return (\n <ToastContext.Provider value={{ addToast, removeToast }}>\n {props.children}\n {createPortal(\n <div className={`sonner-container ${positionClasses[position]}`}>\n <ol className={`sonner-list ${expand ? 'sonner-expanded' : ''}`}>\n {toasts.map((toast, index) => (\n <ToastItem\n key={toast.id}\n toast={toast}\n index={index}\n onClose={() => removeToast(toast.id)}\n richColors={richColors}\n closeButton={closeButton}\n />\n ))}\n </ol>\n </div>,\n document.body\n )}\n </ToastContext.Provider>\n );\n}\n\nfunction ToastItem({ toast, index, onClose, richColors, closeButton }) {\n const icons = {\n success: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\" clipRule=\"evenodd\" />\n </svg>\n ),\n error: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\" clipRule=\"evenodd\" />\n </svg>\n ),\n warning: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z\" clipRule=\"evenodd\" />\n </svg>\n ),\n info: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\" clipRule=\"evenodd\" />\n </svg>\n ),\n loading: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" className=\"sonner-loading\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeDasharray=\"50.265\" strokeDashoffset=\"25\" />\n </svg>\n ),\n };\n\n const variantClass = toast.type ? `sonner-${toast.type}` : '';\n const richColorClass = richColors && toast.type ? `sonner-rich-${toast.type}` : '';\n\n return (\n <li\n className={`sonner-toast ${variantClass} ${richColorClass}`}\n style={{ '--index': index }}\n >\n <div className=\"sonner-toast-content\">\n {toast.type && icons[toast.type] && (\n <div className=\"sonner-toast-icon\">\n {icons[toast.type]}\n </div>\n )}\n <div className=\"sonner-toast-body\">\n {toast.title && <div className=\"sonner-toast-title\">{toast.title}</div>}\n {toast.description && <div className=\"sonner-toast-description\">{toast.description}</div>}\n {!toast.title && !toast.description && <div className=\"sonner-toast-description\">{toast.message}</div>}\n </div>\n {(closeButton || toast.closeButton) && (\n <button\n className=\"sonner-toast-close\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M13 1L1 13M1 1L13 13\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n </div>\n {toast.action && (\n <div className=\"sonner-toast-action\">\n <button\n className=\"sonner-action-button\"\n onClick={() => {\n toast.action.onClick?.();\n onClose();\n }}\n >\n {toast.action.label}\n </button>\n </div>\n )}\n </li>\n );\n}\n\n// Toast API\nexport const toast = Object.assign(\n (message, options = {}) => {\n if (typeof window === 'undefined') return;\n\n const event = new CustomEvent('sonner-toast', {\n detail: {\n message,\n ...options,\n },\n });\n window.dispatchEvent(event);\n },\n {\n success: (message, options = {}) => {\n toast(message, { ...options, type: 'success' });\n },\n error: (message, options = {}) => {\n toast(message, { ...options, type: 'error' });\n },\n warning: (message, options = {}) => {\n toast(message, { ...options, type: 'warning' });\n },\n info: (message, options = {}) => {\n toast(message, { ...options, type: 'info' });\n },\n loading: (message, options = {}) => {\n toast(message, { ...options, type: 'loading', duration: Infinity });\n },\n promise: (promise, options = {}) => {\n const id = toast(options.loading || 'Loading...', { type: 'loading', duration: Infinity });\n\n promise\n .then((data) => {\n const message = typeof options.success === 'function'\n ? options.success(data)\n : options.success || 'Success';\n toast(message, { type: 'success' });\n })\n .catch((error) => {\n const message = typeof options.error === 'function'\n ? options.error(error)\n : options.error || 'Error';\n toast(message, { type: 'error' });\n });\n\n return promise;\n },\n }\n);\n\n// Hook to use toast context\nexport function useToast() {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within a Toaster');\n }\n return context;\n}\n\n// Setup global toast listener\nif (typeof window !== 'undefined') {\n window.addEventListener('sonner-toast', (event) => {\n const toastEvent = new CustomEvent('add-sonner-toast', {\n detail: event.detail,\n });\n window.dispatchEvent(toastEvent);\n });\n}\n\nexport default toast;\n","import React from 'react';\n\nconst Timeline = ({ children, className = '', ...props }) => {\n return (\n <ul className={`timeline ${className}`} {...props}>\n {children}\n </ul>\n );\n};\n\nconst TimelineItem = ({\n children,\n className = '',\n active = false,\n completed = false,\n animated = false,\n ...props\n}) => {\n return (\n <li\n className={`timeline-item ${active ? 'active' : ''} ${completed ? 'completed' : ''} ${animated ? 'animated' : ''} ${className}`}\n {...props}\n >\n {children}\n </li>\n );\n};\n\nconst TimelineDate = ({ children, className = '', ...props }) => {\n return <div className={`timeline-date ${className}`} {...props}>{children}</div>;\n};\n\nconst TimelineMarker = ({ children, className = '', ...props }) => {\n // Note: The CSS uses ::after for the marker, but for a React component we might want more control.\n // However, to match the existing CSS, we largely rely on the classes.\n // If specific marker content is needed (like an icon overrides), custom CSS or inline styles might be needed.\n // For now, we follow the SCSS structure where marker is specific to .timeline-item css.\n return null;\n};\n\nconst TimelineContent = ({ children, className = '', ...props }) => {\n return <div className={`timeline-content ${className}`} {...props}>{children}</div>;\n};\n\nconst TimelineTitle = ({ children, className = '', ...props }) => {\n return <h5 className={`timeline-title ${className}`} {...props}>{children}</h5>;\n};\n\nconst TimelineText = ({ children, className = '', ...props }) => {\n return <p className={`timeline-text ${className}`} {...props}>{children}</p>;\n};\n\n// Main Component Object\nTimeline.Item = TimelineItem;\nTimeline.Date = TimelineDate;\nTimeline.Title = TimelineTitle;\nTimeline.Text = TimelineText;\nTimeline.Content = TimelineContent;\n\nexport { Timeline };\n","import React from 'react';\n\n/**\n * Container component - wrapper for Bootstrap container\n * @param {boolean} fluid - Use fluid container (full width)\n * @param {string} className - Additional CSS classes\n * @param {React.ReactNode} children - Child elements\n */\nconst Container = ({ fluid = false, className = '', children, ...props }) => {\n const containerClass = fluid ? 'container-fluid' : 'container';\n const classes = `${containerClass} ${className}`.trim();\n\n return (\n <div className={classes} {...props}>\n {children}\n </div>\n );\n};\n\nexport default Container;\n","import React, { useEffect, forwardRef } from 'react';\nimport { createPortal } from 'react-dom';\n\n/**\n * Offcanvas Component\n * Slide-in panel\n * \n * @param {Object} props\n * @param {boolean} props.isOpen - Controls visibility\n * @param {Function} props.onClose - Close handler\n * @param {string} [props.title] - Offcanvas title\n * @param {React.ReactNode} props.children - Offcanvas content\n * @param {'start' | 'end' | 'top' | 'bottom'} [props.placement='end'] - Offcanvas placement\n * @param {boolean} [props.backdrop=true] - Show backdrop\n * @param {string} [props.className] - Additional classes\n */\nexport const Offcanvas = forwardRef(({\n isOpen,\n onClose,\n title,\n children,\n placement = 'end',\n backdrop = true,\n className = '',\n ...props\n}, ref) => {\n useEffect(() => {\n if (isOpen) {\n document.body.classList.add('offcanvas-open');\n } else {\n document.body.classList.remove('offcanvas-open');\n }\n return () => {\n document.body.classList.remove('offcanvas-open');\n };\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const offcanvasContent = (\n <>\n {backdrop && (\n <div\n className=\"offcanvas-backdrop fade show\"\n onClick={onClose}\n ></div>\n )}\n <div\n ref={ref}\n className={`offcanvas offcanvas-${placement} show ${className}`}\n tabIndex=\"-1\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? \"offcanvas-label\" : undefined}\n {...props}\n >\n <div className=\"offcanvas-header\">\n {title && <h5 className=\"offcanvas-title\" id=\"offcanvas-label\">{title}</h5>}\n <button\n type=\"button\"\n className=\"btn-close\"\n aria-label=\"Close\"\n onClick={onClose}\n ></button>\n </div>\n <div className=\"offcanvas-body\">\n {children}\n </div>\n </div>\n </>\n );\n\n return createPortal(offcanvasContent, document.body);\n});\n\nOffcanvas.displayName = 'Offcanvas';\n","import React, { useState, useEffect, useRef, forwardRef } from 'react';\n\n/**\n * Carousel Component\n * Image/content carousel\n * \n * @param {Object} props\n * @param {React.ReactNode} props.children - Carousel items\n * @param {number} [props.activeIndex] - Controlled active index\n * @param {Function} [props.onSlide] - Slide change handler\n * @param {boolean} [props.controls=true] - Show prev/next controls\n * @param {boolean} [props.indicators=true] - Show indicators\n * @param {number} [props.interval] - Auto-play interval in ms (false to disable)\n * @param {string} [props.className] - Additional classes\n */\nexport const Carousel = forwardRef(({\n children,\n activeIndex,\n onSlide,\n controls = true,\n indicators = true,\n interval = false,\n className = '',\n ...props\n}, ref) => {\n const items = React.Children.toArray(children);\n const [internalIndex, setInternalIndex] = useState(0);\n const currentIndex = activeIndex !== undefined ? activeIndex : internalIndex;\n\n useEffect(() => {\n if (interval) {\n const timer = setInterval(() => {\n handleNext();\n }, interval);\n return () => clearInterval(timer);\n }\n }, [currentIndex, interval]);\n\n const handleSlide = (newIndex) => {\n if (activeIndex === undefined) {\n setInternalIndex(newIndex);\n }\n if (onSlide) {\n onSlide(newIndex);\n }\n };\n\n const handlePrev = () => {\n const newIndex = currentIndex === 0 ? items.length - 1 : currentIndex - 1;\n handleSlide(newIndex);\n };\n\n const handleNext = () => {\n const newIndex = currentIndex === items.length - 1 ? 0 : currentIndex + 1;\n handleSlide(newIndex);\n };\n\n return (\n <div\n ref={ref}\n className={`carousel slide ${className}`}\n {...props}\n >\n {indicators && (\n <div className=\"carousel-indicators\">\n {items.map((_, index) => (\n <button\n key={index}\n type=\"button\"\n className={index === currentIndex ? 'active' : ''}\n onClick={() => handleSlide(index)}\n aria-current={index === currentIndex ? 'true' : 'false'}\n aria-label={`Slide ${index + 1}`}\n ></button>\n ))}\n </div>\n )}\n\n <div className=\"carousel-inner\">\n {items.map((item, index) => (\n <div\n key={index}\n className={`carousel-item ${index === currentIndex ? 'active' : ''}`}\n >\n {item}\n </div>\n ))}\n </div>\n\n {controls && (\n <>\n <button\n className=\"carousel-control-prev\"\n type=\"button\"\n onClick={handlePrev}\n aria-label=\"Previous slide\"\n >\n <span className=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span className=\"visually-hidden\">Previous</span>\n </button>\n <button\n className=\"carousel-control-next\"\n type=\"button\"\n onClick={handleNext}\n aria-label=\"Next slide\"\n >\n <span className=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span className=\"visually-hidden\">Next</span>\n </button>\n </>\n )}\n </div>\n );\n});\n\nCarousel.displayName = 'Carousel';\n\nexport const CarouselItem = ({ children }) => {\n return <>{children}</>;\n};\n\nCarouselItem.displayName = 'Carousel.Item';\n\nCarousel.Item = CarouselItem;\n","import React, { useState, useRef, useEffect, forwardRef } from 'react';\n\n/**\n * Popover Component\n * Rich popover with title and content\n * \n * @param {Object} props\n * @param {React.ReactNode} props.children - Trigger element\n * @param {string} [props.title] - Popover title\n * @param {React.ReactNode} props.content - Popover content\n * @param {'top' | 'bottom' | 'left' | 'right'} [props.placement='top'] - Popover placement\n * @param {'click' | 'hover'} [props.trigger='click'] - Trigger type\n * @param {string} [props.className] - Additional classes\n */\nexport const Popover = forwardRef(({\n children,\n title,\n content,\n placement = 'top',\n trigger = 'click',\n className = '',\n ...props\n}, ref) => {\n const [isVisible, setIsVisible] = useState(false);\n const popoverRef = useRef(null);\n\n useEffect(() => {\n const handleClickOutside = (e) => {\n if (popoverRef.current && !popoverRef.current.contains(e.target)) {\n setIsVisible(false);\n }\n };\n\n if (trigger === 'click') {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [trigger]);\n\n const handleTrigger = () => {\n if (trigger === 'click') {\n setIsVisible(!isVisible);\n }\n };\n\n const handleMouseEnter = () => {\n if (trigger === 'hover') {\n setIsVisible(true);\n }\n };\n\n const handleMouseLeave = () => {\n if (trigger === 'hover') {\n setIsVisible(false);\n }\n };\n\n const popoverId = `popover-${Math.random().toString(36).substr(2, 9)}`;\n\n return (\n <div\n ref={popoverRef}\n className={`popover-wrapper ${className}`}\n onClick={handleTrigger}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n handleTrigger();\n }\n }}\n aria-describedby={isVisible ? popoverId : undefined}\n tabIndex=\"0\"\n role=\"button\"\n {...props}\n >\n {children}\n {isVisible && (\n <div\n id={popoverId}\n className={`popover bs-popover-${placement} show`}\n role=\"tooltip\"\n >\n <div className=\"popover-arrow\"></div>\n {title && <h3 className=\"popover-header\">{title}</h3>}\n <div className=\"popover-body\">{content}</div>\n </div>\n )}\n </div>\n );\n});\n\nPopover.displayName = 'Popover';\n","import React, { useEffect, useState, forwardRef } from 'react';\n\n/**\n * Scrollspy Component\n * Scroll tracking navigation\n * \n * @param {Object} props\n * @param {Array<string>} props.targets - Array of target element IDs\n * @param {Function} [props.onActiveChange] - Handler when active section changes\n * @param {number} [props.offset=0] - Scroll offset\n * @param {React.ReactNode} props.children - Navigation items\n * @param {string} [props.className] - Additional classes\n */\nexport const Scrollspy = forwardRef(({\n targets = [],\n onActiveChange,\n offset = 0,\n children,\n className = '',\n ...props\n}, ref) => {\n const [activeId, setActiveId] = useState('');\n\n useEffect(() => {\n const handleScroll = () => {\n const scrollPosition = window.scrollY + offset;\n\n for (let i = targets.length - 1; i >= 0; i--) {\n const element = document.getElementById(targets[i]);\n if (element) {\n const { offsetTop } = element;\n if (scrollPosition >= offsetTop) {\n if (activeId !== targets[i]) {\n setActiveId(targets[i]);\n if (onActiveChange) {\n onActiveChange(targets[i]);\n }\n }\n break;\n }\n }\n }\n };\n\n window.addEventListener('scroll', handleScroll);\n handleScroll(); // Initial check\n\n return () => window.removeEventListener('scroll', handleScroll);\n }, [targets, offset, activeId, onActiveChange]);\n\n return (\n <nav ref={ref} className={`scrollspy ${className}`} {...props}>\n {React.Children.map(children, child => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n activeId\n });\n }\n return child;\n })}\n </nav>\n );\n});\n\nScrollspy.displayName = 'Scrollspy';\n","import React, { useState, useRef, useEffect, forwardRef } from 'react';\n\n/**\n * Select Component\n * Custom select dropdown with search\n * \n * @param {Object} props\n * @param {Array} props.options - Array of {value, label} objects\n * @param {*} [props.value] - Controlled value\n * @param {*} [props.defaultValue] - Default value\n * @param {Function} [props.onChange] - Change handler\n * @param {string} [props.placeholder='Select...'] - Placeholder text\n * @param {boolean} [props.searchable=false] - Enable search\n * @param {boolean} [props.disabled=false] - Disabled state\n * @param {string} [props.className] - Additional classes\n */\nexport const Select = forwardRef(({\n options = [],\n value,\n defaultValue,\n onChange,\n placeholder = 'Select...',\n searchable = false,\n disabled = false,\n className = '',\n ...props\n}, ref) => {\n const [isOpen, setIsOpen] = useState(false);\n const [selectedValue, setSelectedValue] = useState(defaultValue);\n const [searchTerm, setSearchTerm] = useState('');\n const selectRef = useRef(null);\n\n const currentValue = value !== undefined ? value : selectedValue;\n const selectedOption = options.find(opt => opt.value === currentValue);\n\n useEffect(() => {\n const handleClickOutside = (e) => {\n if (selectRef.current && !selectRef.current.contains(e.target)) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleSelect = (option) => {\n if (value === undefined) {\n setSelectedValue(option.value);\n }\n if (onChange) {\n onChange(option.value);\n }\n setIsOpen(false);\n setSearchTerm('');\n };\n\n const filteredOptions = searchable && searchTerm\n ? options.filter(opt =>\n opt.label.toLowerCase().includes(searchTerm.toLowerCase())\n )\n : options;\n\n return (\n <div\n ref={selectRef}\n className={`select-container ${isOpen ? 'open' : ''} ${disabled ? 'disabled' : ''} ${className}`}\n {...props}\n >\n <div\n className=\"select-trigger\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n >\n <span>{selectedOption ? selectedOption.label : placeholder}</span>\n <span className=\"select-arrow\">▼</span>\n </div>\n\n {isOpen && (\n <div\n className=\"select-dropdown\"\n role=\"listbox\"\n id=\"select-dropdown\"\n >\n {searchable && (\n <input\n type=\"text\"\n className=\"select-search\"\n placeholder=\"Search...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n role=\"searchbox\"\n />\n )}\n <div className=\"select-options\">\n {filteredOptions.map((option) => (\n <div\n key={option.value}\n className={`select-option ${option.value === currentValue ? 'selected' : ''}`}\n onClick={() => handleSelect(option)}\n role=\"option\"\n aria-selected={option.value === currentValue}\n tabIndex=\"0\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleSelect(option);\n }}\n >\n {option.label}\n </div>\n ))}\n {filteredOptions.length === 0 && (\n <div className=\"select-option disabled\" role=\"option\" aria-disabled=\"true\">No options found</div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n});\n\nSelect.displayName = 'Select';\n","import React, { useState, useRef, forwardRef } from 'react';\n\n/**\n * FileUpload Component\n * Drag-and-drop file upload\n * \n * @param {Object} props\n * @param {Function} [props.onFileSelect] - File selection handler\n * @param {boolean} [props.multiple=false] - Allow multiple files\n * @param {string} [props.accept] - Accepted file types\n * @param {number} [props.maxSize] - Max file size in bytes\n * @param {string} [props.className] - Additional classes\n */\nexport const FileUpload = forwardRef(({\n onFileSelect,\n multiple = false,\n accept,\n maxSize,\n className = '',\n ...props\n}, ref) => {\n const [isDragging, setIsDragging] = useState(false);\n const [files, setFiles] = useState([]);\n const inputRef = useRef(null);\n\n const handleFiles = (fileList) => {\n const filesArray = Array.from(fileList);\n const validFiles = filesArray.filter(file => {\n if (maxSize && file.size > maxSize) return false;\n return true;\n });\n\n setFiles(validFiles);\n if (onFileSelect) {\n onFileSelect(validFiles);\n }\n };\n\n const handleDragOver = (e) => {\n e.preventDefault();\n setIsDragging(true);\n };\n\n const handleDragLeave = () => {\n setIsDragging(false);\n };\n\n const handleDrop = (e) => {\n e.preventDefault();\n setIsDragging(false);\n handleFiles(e.dataTransfer.files);\n };\n\n const handleInputChange = (e) => {\n if (e.target.files) {\n handleFiles(e.target.files);\n }\n };\n\n const handleClick = () => {\n inputRef.current?.click();\n };\n\n return (\n <div\n ref={ref}\n className={`file-upload ${isDragging ? 'dragging' : ''} ${className}`}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n handleClick();\n }\n }}\n tabIndex=\"0\"\n role=\"button\"\n aria-label=\"File upload dropzone\"\n {...props}\n >\n <input\n ref={inputRef}\n type=\"file\"\n multiple={multiple}\n accept={accept}\n onChange={handleInputChange}\n style={{ display: 'none' }}\n />\n <div className=\"file-upload-content\">\n {files.length > 0 ? (\n <div className=\"file-list\">\n {files.map((file, index) => (\n <div key={index} className=\"file-item\">\n {file.name} ({(file.size / 1024).toFixed(2)} KB)\n </div>\n ))}\n </div>\n ) : (\n <div className=\"file-upload-placeholder\">\n <p>Drag and drop files here or click to browse</p>\n </div>\n )}\n </div>\n </div>\n );\n});\n\nFileUpload.displayName = 'FileUpload';\n","import React, { useState, forwardRef } from 'react';\n\n/**\n * NumberInput Component\n * Number input with increment/decrement buttons\n * \n * @param {Object} props\n * @param {number} [props.min] - Minimum value\n * @param {number} [props.max] - Maximum value\n * @param {number} [props.step=1] - Step increment\n * @param {number} [props.value] - Controlled value\n * @param {number} [props.defaultValue=0] - Default value\n * @param {Function} [props.onChange] - Change handler\n * @param {string} [props.className] - Additional classes\n */\nexport const NumberInput = forwardRef(({\n min,\n max,\n step = 1,\n value,\n defaultValue = 0,\n onChange,\n className = '',\n ...props\n}, ref) => {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const currentValue = value !== undefined ? value : internalValue;\n\n const handleChange = (newValue) => {\n let validValue = newValue;\n if (min !== undefined) validValue = Math.max(min, validValue);\n if (max !== undefined) validValue = Math.min(max, validValue);\n\n if (value === undefined) {\n setInternalValue(validValue);\n }\n if (onChange) {\n onChange(validValue);\n }\n };\n\n const increment = () => handleChange(currentValue + step);\n const decrement = () => handleChange(currentValue - step);\n\n return (\n <div className={`number-input ${className}`}>\n <button\n type=\"button\"\n className=\"btn btn-outline-secondary\"\n onClick={decrement}\n disabled={min !== undefined && currentValue <= min}\n >\n -\n </button>\n <input\n ref={ref}\n type=\"number\"\n className=\"form-control\"\n value={currentValue}\n min={min}\n max={max}\n step={step}\n onChange={(e) => handleChange(parseFloat(e.target.value) || 0)}\n {...props}\n />\n <button\n type=\"button\"\n className=\"btn btn-outline-secondary\"\n onClick={increment}\n disabled={max !== undefined && currentValue >= max}\n >\n +\n </button>\n </div>\n );\n});\n\nNumberInput.displayName = 'NumberInput';\n","import React, { useState, forwardRef } from 'react';\n\n/**\n * Slider Component\n * Range input slider\n * \n * @param {Object} props\n * @param {number} [props.min=0] - Minimum value\n * @param {number} [props.max=100] - Maximum value\n * @param {number} [props.step=1] - Step increment\n * @param {number} [props.value] - Controlled value\n * @param {number} [props.defaultValue] - Default value (uncontrolled)\n * @param {Function} [props.onChange] - Change handler\n * @param {boolean} [props.showValue=false] - Show current value\n * @param {string} [props.className] - Additional classes\n */\nexport const Slider = forwardRef(({\n min = 0,\n max = 100,\n step = 1,\n value,\n defaultValue,\n onChange,\n showValue = false,\n className = '',\n ...props\n}, ref) => {\n const [internalValue, setInternalValue] = useState(defaultValue || min);\n const currentValue = value !== undefined ? value : internalValue;\n\n const handleChange = (e) => {\n const newValue = parseFloat(e.target.value);\n if (value === undefined) {\n setInternalValue(newValue);\n }\n if (onChange) {\n onChange(newValue);\n }\n };\n\n return (\n <div className={`slider-container ${className}`}>\n <input\n ref={ref}\n type=\"range\"\n className=\"form-range\"\n min={min}\n max={max}\n step={step}\n value={currentValue}\n onChange={handleChange}\n aria-label={props['aria-label'] || \"Range slider\"}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={currentValue}\n {...props}\n />\n {showValue && (\n <div className=\"slider-value\">{currentValue}</div>\n )}\n </div>\n );\n});\n\nSlider.displayName = 'Slider';\n","import React, { forwardRef } from 'react';\n\n/**\n * Switch Component\n * Toggle switch for boolean values\n * \n * @param {Object} props\n * @param {boolean} [props.checked] - Controlled checked state\n * @param {boolean} [props.defaultChecked] - Default checked state (uncontrolled)\n * @param {Function} [props.onChange] - Change handler\n * @param {boolean} [props.disabled=false] - Disabled state\n * @param {string} [props.label] - Label text\n * @param {string} [props.className] - Additional classes\n */\nexport const Switch = forwardRef(({\n checked,\n defaultChecked,\n onChange,\n disabled = false,\n label,\n className = '',\n ...props\n}, ref) => {\n return (\n <div className={`form-switch ${className}`}>\n <input\n ref={ref}\n type=\"checkbox\"\n className=\"form-check-input\"\n role=\"switch\"\n checked={checked}\n defaultChecked={defaultChecked}\n onChange={onChange}\n disabled={disabled}\n {...props}\n />\n {label && <label className=\"form-check-label\">{label}</label>}\n </div>\n );\n});\n\nSwitch.displayName = 'Switch';\n","import React, { useState, useRef, forwardRef } from 'react';\n\n/**\n * InputOTP Component\n * One-time password input\n * \n * @param {Object} props\n * @param {number} [props.length=6] - Number of OTP digits\n * @param {Function} [props.onComplete] - Handler when all digits are entered\n * @param {Function} [props.onChange] - Change handler\n * @param {'numeric' | 'alphanumeric'} [props.type='numeric'] - Input type\n * @param {string} [props.className] - Additional classes\n */\nexport const InputOTP = forwardRef(({\n length = 6,\n onComplete,\n onChange,\n type = 'numeric',\n className = '',\n ...props\n}, ref) => {\n const [values, setValues] = useState(Array(length).fill(''));\n const inputRefs = useRef([]);\n\n const handleChange = (index, value) => {\n // Validate input based on type\n const isValid = type === 'numeric' ? /^\\d*$/.test(value) : /^[a-zA-Z0-9]*$/.test(value);\n if (!isValid) return;\n\n const newValues = [...values];\n newValues[index] = value.slice(-1); // Only take last character\n setValues(newValues);\n\n if (onChange) {\n onChange(newValues.join(''));\n }\n\n // Auto-focus next input\n if (value && index < length - 1) {\n inputRefs.current[index + 1]?.focus();\n }\n\n // Check if complete\n if (newValues.every(v => v !== '') && onComplete) {\n onComplete(newValues.join(''));\n }\n };\n\n const handleKeyDown = (index, e) => {\n if (e.key === 'Backspace' && !values[index] && index > 0) {\n inputRefs.current[index - 1]?.focus();\n }\n if (e.key === 'ArrowLeft' && index > 0) {\n inputRefs.current[index - 1]?.focus();\n }\n if (e.key === 'ArrowRight' && index < length - 1) {\n inputRefs.current[index + 1]?.focus();\n }\n };\n\n const handlePaste = (e) => {\n e.preventDefault();\n const pastedData = e.clipboardData.getData('text').slice(0, length);\n const newValues = pastedData.split('').concat(Array(length).fill('')).slice(0, length);\n setValues(newValues);\n\n if (onChange) {\n onChange(newValues.join(''));\n }\n\n if (newValues.every(v => v !== '') && onComplete) {\n onComplete(newValues.join(''));\n }\n };\n\n return (\n <div ref={ref} className={`input-otp ${className}`} {...props}>\n {values.map((value, index) => (\n <input\n key={index}\n ref={el => inputRefs.current[index] = el}\n type=\"text\"\n className=\"otp-input\"\n value={value}\n onChange={(e) => handleChange(index, e.target.value)}\n onKeyDown={(e) => handleKeyDown(index, e)}\n onPaste={index === 0 ? handlePaste : undefined}\n maxLength={1}\n />\n ))}\n </div>\n );\n});\n\nInputOTP.displayName = 'InputOTP';\n","import React, { useState, forwardRef } from 'react';\n\n/**\n * Accordion Component\n * Collapsible content panels\n * \n * @param {Object} props\n * @param {React.ReactNode} props.children - Accordion items\n * @param {string} [props.className] - Additional classes\n * @param {boolean} [props.alwaysOpen=false] - Allow multiple items open\n */\nexport const Accordion = forwardRef(({\n children,\n className = '',\n alwaysOpen = false,\n ...props\n}, ref) => {\n const [openItems, setOpenItems] = useState(new Set());\n\n const toggleItem = (index) => {\n setOpenItems(prev => {\n const newSet = new Set(alwaysOpen ? prev : []);\n if (prev.has(index)) {\n newSet.delete(index);\n } else {\n newSet.add(index);\n }\n return newSet;\n });\n };\n\n return (\n <div ref={ref} className={`accordion ${className}`} {...props}>\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n isOpen: openItems.has(index),\n onToggle: () => toggleItem(index)\n });\n }\n return child;\n })}\n </div>\n );\n});\n\nAccordion.displayName = 'Accordion';\n\n/**\n * AccordionItem Component\n */\nexport const AccordionItem = forwardRef(({\n title,\n children,\n isOpen,\n onToggle,\n className = '',\n ...props\n}, ref) => {\n const headerId = `accordion-header-${props.id || Math.random().toString(36).substr(2, 9)}`;\n const collapseId = `accordion-collapse-${props.id || Math.random().toString(36).substr(2, 9)}`;\n\n return (\n <div ref={ref} className={`accordion-item ${className}`} {...props}>\n <h2 className=\"accordion-header\" id={headerId}>\n <button\n className={`accordion-button ${!isOpen ? 'collapsed' : ''}`}\n type=\"button\"\n onClick={onToggle}\n aria-expanded={isOpen}\n aria-controls={collapseId}\n >\n {title}\n </button>\n </h2>\n <div\n id={collapseId}\n className={`accordion-collapse collapse ${isOpen ? 'show' : ''}`}\n aria-labelledby={headerId}\n >\n <div className=\"accordion-body\">\n {children}\n </div>\n </div>\n </div>\n );\n});\n\nAccordionItem.displayName = 'Accordion.Item';\n\nAccordion.Item = AccordionItem;\n","import React, { forwardRef } from 'react';\n\n/**\n * Navbar Component\n * Responsive navigation header\n * \n * @param {Object} props\n * @param {React.ReactNode} props.children - Navbar content\n * @param {'light' | 'dark'} [props.variant='light'] - Color variant\n * @param {string} [props.bg] - Background color\n * @param {boolean} [props.expand='lg'] - Breakpoint for collapse\n * @param {string} [props.className] - Additional classes\n */\nexport const Navbar = forwardRef(({\n children,\n variant = 'light',\n bg,\n expand = 'lg',\n className = '',\n ...props\n}, ref) => {\n const bgClass = bg ? `bg-${bg}` : '';\n const expandClass = expand ? `navbar-expand-${expand}` : '';\n\n return (\n <nav\n ref={ref}\n className={`navbar navbar-${variant} ${bgClass} ${expandClass} ${className}`}\n {...props}\n >\n {children}\n </nav>\n );\n});\n\nNavbar.displayName = 'Navbar';\n\nexport const NavbarBrand = forwardRef(({ children, href = '#', className = '', ...props }, ref) => (\n <a ref={ref} className={`navbar-brand ${className}`} href={href} {...props}>\n {children}\n </a>\n));\n\nNavbarBrand.displayName = 'Navbar.Brand';\n\nexport const NavbarToggle = forwardRef(({ onClick, className = '', ...props }, ref) => (\n <button\n ref={ref}\n className={`navbar-toggler ${className}`}\n type=\"button\"\n onClick={onClick}\n aria-label=\"Toggle navigation\"\n {...props}\n >\n <span className=\"navbar-toggler-icon\"></span>\n </button>\n));\n\nNavbarToggle.displayName = 'Navbar.Toggle';\n\nexport const NavbarCollapse = forwardRef(({ children, isOpen, className = '', ...props }, ref) => (\n <div\n ref={ref}\n className={`collapse navbar-collapse ${isOpen ? 'show' : ''} ${className}`}\n {...props}\n >\n {children}\n </div>\n));\n\nNavbarCollapse.displayName = 'Navbar.Collapse';\n\nexport const NavbarNav = forwardRef(({ children, className = '', ...props }, ref) => (\n <ul ref={ref} className={`navbar-nav ${className}`} {...props}>\n {children}\n </ul>\n));\n\nNavbarNav.displayName = 'Navbar.Nav';\n\nNavbar.Brand = NavbarBrand;\nNavbar.Toggle = NavbarToggle;\nNavbar.Collapse = NavbarCollapse;\nNavbar.Nav = NavbarNav;\n","import React, { forwardRef } from 'react';\n\n/**\n * Pagination Component\n * Page navigation\n * \n * @param {Object} props\n * @param {number} props.currentPage - Current active page\n * @param {number} props.totalPages - Total number of pages\n * @param {Function} props.onPageChange - Page change handler\n * @param {number} [props.maxVisible=5] - Maximum visible page numbers\n * @param {string} [props.size] - Size variant ('sm' | 'lg')\n * @param {string} [props.className] - Additional classes\n */\nexport const Pagination = forwardRef(({\n currentPage,\n totalPages,\n onPageChange,\n maxVisible = 5,\n size,\n className = '',\n ...props\n}, ref) => {\n const sizeClass = size ? `pagination-${size}` : '';\n\n const getPageNumbers = () => {\n const pages = [];\n let startPage = Math.max(1, currentPage - Math.floor(maxVisible / 2));\n let endPage = Math.min(totalPages, startPage + maxVisible - 1);\n\n if (endPage - startPage < maxVisible - 1) {\n startPage = Math.max(1, endPage - maxVisible + 1);\n }\n\n for (let i = startPage; i <= endPage; i++) {\n pages.push(i);\n }\n return pages;\n };\n\n return (\n <nav ref={ref} aria-label=\"Page navigation\" {...props}>\n <ul className={`pagination ${sizeClass} ${className}`}>\n <li className={`page-item ${currentPage === 1 ? 'disabled' : ''}`}>\n <button\n className=\"page-link\"\n onClick={() => onPageChange(currentPage - 1)}\n disabled={currentPage === 1}\n >\n Previous\n </button>\n </li>\n\n {getPageNumbers().map(page => (\n <li key={page} className={`page-item ${page === currentPage ? 'active' : ''}`}>\n <button\n className=\"page-link\"\n onClick={() => onPageChange(page)}\n aria-current={page === currentPage ? 'page' : undefined}\n >\n {page}\n </button>\n </li>\n ))}\n\n <li className={`page-item ${currentPage === totalPages ? 'disabled' : ''}`}>\n <button\n className=\"page-link\"\n onClick={() => onPageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n >\n Next\n </button>\n </li>\n </ul>\n </nav>\n );\n});\n\nPagination.displayName = 'Pagination';\n","import React, { forwardRef } from 'react';\n\n/**\n * Spinner Component\n * Loading spinner\n * \n * @param {Object} props\n * @param {'sm' | 'md' | 'lg'} [props.size='md'] - Spinner size\n * @param {'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark'} [props.variant='primary'] - Spinner color variant\n * @param {string} [props.className] - Additional classes\n */\nexport const Spinner = forwardRef(({\n size = 'md',\n variant = 'primary',\n className = '',\n ...props\n}, ref) => {\n return (\n <div\n ref={ref}\n className={`spinner spinner-${size} spinner-${variant} ${className}`}\n role=\"status\"\n {...props}\n >\n <div className=\"spinner-circle\"></div>\n <span className=\"visually-hidden\">Loading...</span>\n </div>\n );\n});\n\nSpinner.displayName = 'Spinner';\n","import React from 'react';\n// import './Stat.css';\n\n/**\n * Stat Component - Display statistics and key metrics\n * \n * @param {string} title - The stat title/label\n * @param {string|number} value - The main stat value\n * @param {string} description - Optional description or change indicator\n * @param {string} descClass - CSS class for description (positive/negative)\n * @param {string} icon - Optional icon (emoji or text)\n * @param {string} iconBg - Background color for icon\n * @param {boolean} compact - Use compact variant\n * @param {number} progress - Progress percentage (0-100)\n * @param {string} target - Target value for progress variant\n * @param {number} change - Percentage change for compact variant\n * @param {string} className - Additional CSS classes\n */\nexport function Stat({\n title,\n value,\n description,\n descClass = '',\n icon,\n iconBg,\n compact = false,\n progress,\n target,\n change,\n className = '',\n ...props\n}) {\n const statClasses = ['stat'];\n if (compact) statClasses.push('stat-compact');\n if (className) statClasses.push(className);\n\n return (\n <div className={statClasses.join(' ')} {...props}>\n {icon && (\n <div className=\"stat-icon\" style={{ backgroundColor: iconBg }}>\n {icon}\n </div>\n )}\n\n <div className=\"stat-title\">{title}</div>\n <div className=\"stat-value\">{value}</div>\n\n {description && (\n <div className={`stat-desc ${descClass}`.trim()}>{description}</div>\n )}\n\n {compact && change !== undefined && (\n <span className={`stat-badge ${change > 0 ? 'success' : 'danger'}`}>\n {change > 0 ? '↗' : '↘'} {Math.abs(change)}%\n </span>\n )}\n\n {progress !== undefined && (\n <>\n {target && <div className=\"stat-desc\">Target: {target}</div>}\n <div className=\"stat-progress\">\n <div className=\"stat-progress-bar\" style={{ width: `${progress}%` }}></div>\n </div>\n </>\n )}\n </div>\n );\n}\n\n/**\n * StatGroup Component - Display multiple stats in a grid\n * \n * @param {Array} stats - Array of stat objects\n * @param {number} columns - Number of columns (2, 3, or 4)\n */\nexport function StatGroup({ stats, columns = 4, className = '', ...props }) {\n const colClass = columns === 2 ? 'col-md-6' : columns === 3 ? 'col-md-4' : 'col-md-3';\n\n return (\n <div className={`row g-3 ${className}`.trim()} {...props}>\n {stats.map((stat, index) => (\n <div key={index} className={colClass}>\n <Stat {...stat} />\n </div>\n ))}\n </div>\n );\n}\n\nexport default Stat;\n","import React from 'react';\n// import './Breadcrumb.css';\n\nexport function Breadcrumb({\n items = [],\n separator = '/',\n className = '',\n ...props\n}) {\n return (\n <nav aria-label=\"breadcrumb\" className={className} {...props}>\n <ol className=\"breadcrumb\">\n {items.map((item, index) => (\n <Breadcrumb.Item\n key={index}\n active={index === items.length - 1}\n href={item.href}\n >\n {item.label}\n </Breadcrumb.Item>\n ))}\n </ol>\n </nav>\n );\n}\n\nBreadcrumb.Item = function BreadcrumbItem({\n children,\n active = false,\n href,\n className = '',\n ...props\n}) {\n const itemClasses = ['breadcrumb-item', active ? 'active' : '', className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <li className={itemClasses} aria-current={active ? 'page' : undefined} {...props}>\n {active || !href ? (\n children\n ) : (\n <a href={href}>{children}</a>\n )}\n </li>\n );\n};\n","import React from 'react';\n// import './ListGroup.css';\n\nexport function ListGroup({\n flush = false,\n numbered = false,\n horizontal = false,\n children,\n className = '',\n ...props\n}) {\n const Tag = numbered ? 'ol' : 'ul';\n\n const listClasses = [\n 'list-group',\n flush ? 'list-group-flush' : '',\n numbered ? 'list-group-numbered' : '',\n horizontal ? 'list-group-horizontal' : '',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <Tag className={listClasses} {...props}>\n {children}\n </Tag>\n );\n}\n\nListGroup.Item = function ListGroupItem({\n active = false,\n disabled = false,\n variant,\n action = false,\n href,\n children,\n className = '',\n ...props\n}) {\n const Tag = href ? 'a' : 'li';\n\n const itemClasses = [\n 'list-group-item',\n active ? 'active' : '',\n disabled ? 'disabled' : '',\n action || href ? 'list-group-item-action' : '',\n variant ? `list-group-item-${variant}` : '',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <Tag\n className={itemClasses}\n href={href}\n aria-current={active ? 'true' : undefined}\n aria-disabled={disabled ? 'true' : undefined}\n {...props}\n >\n {children}\n </Tag>\n );\n};\n","import React from 'react';\n// import './Avatar.css';\n\nexport function Avatar({\n src,\n alt = 'Avatar',\n size = 'md',\n shape = 'circle',\n fallback,\n status,\n className = '',\n ...props\n}) {\n const [imageError, setImageError] = React.useState(false);\n\n const avatarClasses = [\n 'avatar',\n `avatar-${size}`,\n `avatar-${shape}`,\n status ? `avatar-status-${status}` : '',\n className\n ].filter(Boolean).join(' ');\n\n const showFallback = !src || imageError;\n\n return (\n <div className={avatarClasses} {...props}>\n {showFallback ? (\n <span className=\"avatar-fallback\">\n {fallback || alt?.charAt(0)?.toUpperCase() || '?'}\n </span>\n ) : (\n <img\n src={src}\n alt={alt}\n onError={() => setImageError(true)}\n className=\"avatar-img\"\n />\n )}\n {status && <span className=\"avatar-status\"></span>}\n </div>\n );\n}\n","import React from 'react';\n// import './Badge.css';\n\nexport function Badge({\n variant = 'primary',\n pill = false,\n children,\n className = '',\n ...props\n}) {\n const badgeClasses = [\n 'badge',\n `bg-${variant}`,\n pill ? 'rounded-pill' : '',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <span className={badgeClasses} {...props}>\n {children}\n </span>\n );\n}\n","import React from 'react';\n\n/**\n * Box component - generic wrapper for spacing and display utilities\n * @param {number|string} m - Margin (all sides)\n * @param {number|string} mt - Margin top\n * @param {number|string} mb - Margin bottom\n * @param {number|string} ml - Margin left (start)\n * @param {number|string} mr - Margin right (end)\n * @param {number|string} mx - Margin horizontal (left and right)\n * @param {number|string} my - Margin vertical (top and bottom)\n * @param {number|string} p - Padding (all sides)\n * @param {number|string} pt - Padding top\n * @param {number|string} pb - Padding bottom\n * @param {number|string} pl - Padding left (start)\n * @param {number|string} pr - Padding right (end)\n * @param {number|string} px - Padding horizontal (left and right)\n * @param {number|string} py - Padding vertical (top and bottom)\n * @param {string} d - Display: 'none', 'inline', 'inline-block', 'block', 'grid', 'table', 'table-cell', 'table-row', 'flex', 'inline-flex'\n * @param {string} flex - Flex direction: 'row', 'column', 'row-reverse', 'column-reverse'\n * @param {string} justify - Justify content: 'start', 'end', 'center', 'between', 'around', 'evenly'\n * @param {string} align - Align items: 'start', 'end', 'center', 'baseline', 'stretch'\n * @param {string} gap - Gap between flex/grid items: '0', '1', '2', '3', '4', '5'\n * @param {string} as - HTML element to render (default: 'div')\n * @param {string} className - Additional CSS classes\n * @param {React.ReactNode} children - Child elements\n */\nconst Box = ({\n m, mt, mb, ml, mr, mx, my,\n p, pt, pb, pl, pr, px, py,\n d, flex, justify, align, gap,\n as: Component = 'div',\n className = '',\n children,\n ...props\n}) => {\n const boxClasses = [];\n\n // Margin utilities\n if (m !== undefined) boxClasses.push(`m-${m}`);\n if (mt !== undefined) boxClasses.push(`mt-${mt}`);\n if (mb !== undefined) boxClasses.push(`mb-${mb}`);\n if (ml !== undefined) boxClasses.push(`ms-${ml}`); // Bootstrap 5 uses 'start' instead of 'left'\n if (mr !== undefined) boxClasses.push(`me-${mr}`); // Bootstrap 5 uses 'end' instead of 'right'\n if (mx !== undefined) boxClasses.push(`mx-${mx}`);\n if (my !== undefined) boxClasses.push(`my-${my}`);\n\n // Padding utilities\n if (p !== undefined) boxClasses.push(`p-${p}`);\n if (pt !== undefined) boxClasses.push(`pt-${pt}`);\n if (pb !== undefined) boxClasses.push(`pb-${pb}`);\n if (pl !== undefined) boxClasses.push(`ps-${pl}`);\n if (pr !== undefined) boxClasses.push(`pe-${pr}`);\n if (px !== undefined) boxClasses.push(`px-${px}`);\n if (py !== undefined) boxClasses.push(`py-${py}`);\n\n // Display utilities\n if (d) boxClasses.push(`d-${d}`);\n if (flex) boxClasses.push(`flex-${flex}`);\n if (justify) boxClasses.push(`justify-content-${justify}`);\n if (align) boxClasses.push(`align-items-${align}`);\n if (gap) boxClasses.push(`gap-${gap}`);\n\n const classes = `${boxClasses.join(' ')} ${className}`.trim();\n\n return (\n <Component className={classes} {...props}>\n {children}\n </Component>\n );\n};\n\nexport default Box;\n","import React from 'react';\n// import './ButtonGroup.css';\n\nexport function ButtonGroup({\n vertical = false,\n size,\n children,\n className = '',\n ...props\n}) {\n const groupClasses = [\n vertical ? 'btn-group-vertical' : 'btn-group',\n size ? `btn-group-${size}` : '',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <div className={groupClasses} role=\"group\" {...props}>\n {children}\n </div>\n );\n}\n","import React from 'react';\n// // import './Checkbox.css'; // CSS handled by main stylesheet\n\nexport function Checkbox({\n id,\n label,\n checked,\n indeterminate = false,\n disabled = false,\n onChange,\n className = '',\n ...props\n}) {\n const checkboxRef = React.useRef(null);\n\n React.useEffect(() => {\n if (checkboxRef.current) {\n checkboxRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n return (\n <div className={`form-check ${className}`}>\n <input\n ref={checkboxRef}\n type=\"checkbox\"\n className=\"form-check-input\"\n id={id}\n checked={checked}\n disabled={disabled}\n onChange={onChange}\n {...props}\n />\n {label && (\n <label className=\"form-check-label\" htmlFor={id}>\n {label}\n </label>\n )}\n </div>\n );\n}\n","import React from 'react';\n\n/**\n * Col component - wrapper for Bootstrap grid columns\n * @param {number|string} xs - Column width for xs breakpoint\n * @param {number|string} sm - Column width for sm breakpoint\n * @param {number|string} md - Column width for md breakpoint\n * @param {number|string} lg - Column width for lg breakpoint\n * @param {number|string} xl - Column width for xl breakpoint\n * @param {string} className - Additional CSS classes\n * @param {React.ReactNode} children - Child elements\n */\nconst Col = ({\n xs,\n sm,\n md,\n lg,\n xl,\n className = '',\n children,\n ...props\n}) => {\n const colClasses = [];\n\n // Build column classes\n if (xs) colClasses.push(xs === 'auto' ? 'col-auto' : `col-${xs}`);\n if (sm) colClasses.push(sm === 'auto' ? 'col-sm-auto' : `col-sm-${sm}`);\n if (md) colClasses.push(md === 'auto' ? 'col-md-auto' : `col-md-${md}`);\n if (lg) colClasses.push(lg === 'auto' ? 'col-lg-auto' : `col-lg-${lg}`);\n if (xl) colClasses.push(xl === 'auto' ? 'col-xl-auto' : `col-xl-${xl}`);\n\n // If no breakpoint specified, use default col\n if (colClasses.length === 0) {\n colClasses.push('col');\n }\n\n const classes = `${colClasses.join(' ')} ${className}`.trim();\n\n return (\n <div className={classes} {...props}>\n {children}\n </div>\n );\n};\n\nexport default Col;\n","import React from 'react';\n// import './Input.css';\n\nexport function Input({\n type = 'text',\n size,\n isValid,\n isInvalid,\n plaintext = false,\n readOnly = false,\n disabled = false,\n className = '',\n ...props\n}) {\n const inputClasses = [\n plaintext ? 'form-control-plaintext' : 'form-control',\n size ? `form-control-${size}` : '',\n isValid ? 'is-valid' : '',\n isInvalid ? 'is-invalid' : '',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <input\n type={type}\n className={inputClasses}\n readOnly={readOnly || plaintext}\n disabled={disabled}\n {...props}\n />\n );\n}\n\nexport function Textarea({\n rows = 3,\n size,\n isValid,\n isInvalid,\n autoResize = false,\n className = '',\n ...props\n}) {\n const textareaRef = React.useRef(null);\n\n const textareaClasses = [\n 'form-control',\n size ? `form-control-${size}` : '',\n isValid ? 'is-valid' : '',\n isInvalid ? 'is-invalid' : '',\n className\n ].filter(Boolean).join(' ');\n\n React.useEffect(() => {\n if (autoResize && textareaRef.current) {\n const adjustHeight = () => {\n const textarea = textareaRef.current;\n if (textarea) {\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n };\n\n adjustHeight();\n textareaRef.current.addEventListener('input', adjustHeight);\n\n return () => {\n textareaRef.current?.removeEventListener('input', adjustHeight);\n };\n }\n }, [autoResize]);\n\n return (\n <textarea\n ref={textareaRef}\n rows={rows}\n className={textareaClasses}\n {...props}\n />\n );\n}\n","import React from 'react';\n// import './Progress.css';\n\nexport function Progress({\n value = 0,\n max = 100,\n variant = 'primary',\n striped = false,\n animated = false,\n label,\n showValue = false,\n className = '',\n ...props\n}) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n\n const progressBarClasses = [\n 'progress-bar',\n `bg-${variant}`,\n striped || animated ? 'progress-bar-striped' : '',\n animated ? 'progress-bar-animated' : '',\n ].filter(Boolean).join(' ');\n\n return (\n <div className={`progress ${className}`} {...props}>\n <div\n className={progressBarClasses}\n role=\"progressbar\"\n style={{ width: `${percentage}%` }}\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n >\n {label || (showValue && `${Math.round(percentage)}%`)}\n </div>\n </div>\n );\n}\n","import React from 'react';\n// import './Radio.css';\n\nexport function Radio({\n id,\n name,\n label,\n value,\n checked,\n disabled = false,\n onChange,\n className = '',\n ...props\n}) {\n return (\n <div className={`form-check ${className}`}>\n <input\n type=\"radio\"\n className=\"form-check-input\"\n id={id}\n name={name}\n value={value}\n checked={checked}\n disabled={disabled}\n onChange={onChange}\n {...props}\n />\n {label && (\n <label className=\"form-check-label\" htmlFor={id}>\n {label}\n </label>\n )}\n </div>\n );\n}\n","import React from 'react';\n\n/**\n * Row component - wrapper for Bootstrap row\n * @param {string} className - Additional CSS classes\n * @param {React.ReactNode} children - Child elements\n */\nconst Row = ({ className = '', children, ...props }) => {\n const classes = `row ${className}`.trim();\n\n return (\n <div className={classes} {...props}>\n {children}\n </div>\n );\n};\n\nexport default Row;\n","import React from 'react';\n\n/**\n * Text component - wrapper for text utilities\n * @param {string} align - Text alignment: 'start', 'center', 'end'\n * @param {string} transform - Text transform: 'lowercase', 'uppercase', 'capitalize'\n * @param {string} color - Text color: 'primary', 'secondary', 'success', 'danger', 'warning', 'info', 'light', 'dark', 'muted'\n * @param {string} size - Font size: '1', '2', '3', '4', '5', '6'\n * @param {string} weight - Font weight: 'bold', 'bolder', 'normal', 'light', 'lighter'\n * @param {string} as - HTML element to render (default: 'p')\n * @param {string} className - Additional CSS classes\n * @param {React.ReactNode} children - Child elements\n */\nconst Text = ({\n align,\n transform,\n color,\n size,\n weight,\n as: Component = 'p',\n className = '',\n children,\n ...props\n}) => {\n const textClasses = [];\n\n if (align) textClasses.push(`text-${align}`);\n if (transform) textClasses.push(`text-${transform}`);\n if (color) textClasses.push(`text-${color}`);\n if (size) textClasses.push(`fs-${size}`);\n if (weight) textClasses.push(`fw-${weight}`);\n\n const classes = `${textClasses.join(' ')} ${className}`.trim();\n\n return (\n <Component className={classes} {...props}>\n {children}\n </Component>\n );\n};\n\nexport default Text;\n","// Core Components\nexport { Button } from './components/Button';\nexport { Alert } from './components/Alert';\nexport { Card } from './components/Card';\n\n// Interactive Components\nexport { Modal } from './components/Modal';\nexport { Dropdown } from './components/Dropdown';\nexport { Tooltip } from './components/Tooltip';\nexport { Collapse } from './components/Collapse';\nexport { Tabs } from './components/Tabs';\nexport { Toaster, toast } from './components/Sonner';\nexport { Timeline } from './components/Timeline';\n\n// Layout Components\nexport { default as Container } from './components/Container';\nexport { default as Row } from './components/Row';\nexport { default as Col } from './components/Col';\n\n// Utility Components\nexport { default as Text } from './components/Text';\nexport { default as Box } from './components/Box';\nexport { Offcanvas } from './components/Offcanvas';\nexport { Carousel } from './components/Carousel';\nexport { Popover } from './components/Popover';\nexport { Scrollspy } from './components/Scrollspy';\n\n// Form Components\nexport { Select } from './components/Select';\nexport { FileUpload } from './components/FileUpload';\nexport { NumberInput } from './components/NumberInput';\nexport { Slider } from './components/Slider';\nexport { Switch } from './components/Switch';\nexport { InputOTP } from './components/InputOTP';\nexport { Checkbox } from './components/Checkbox';\nexport { Radio } from './components/Radio';\nexport { Input, Textarea } from './components/Input';\n\n// Display Components\nexport { Accordion } from './components/Accordion';\nexport { Navbar } from './components/Navbar';\nexport { Pagination } from './components/Pagination';\nexport { Spinner } from './components/Spinner';\nexport { Stat, StatGroup } from './components/Stat';\nexport { Badge } from './components/Badge';\nexport { Avatar } from './components/Avatar';\nexport { Breadcrumb } from './components/Breadcrumb';\nexport { Progress } from './components/Progress';\nexport { ButtonGroup } from './components/ButtonGroup';\nexport { ListGroup } from './components/ListGroup';\n\n// Version\nexport const version = '1.0.1';\n"],"names":["Button","React","forwardRef","children","variant","size","outline","disabled","loading","type","className","onClick","props","ref","classes","filter","Boolean","join","createElement","role","displayName","Alert","dismissible","show","onClose","autoClose","internalShow","setInternalShow","useState","isVisible","handleClose","useCallback","useEffect","timer","setTimeout","Card","hoverable","bodyClassName","CardBody","CardHeader","CardFooter","Body","Header","Footer","Dropdown","trigger","isOpen","onToggle","align","internalOpen","setInternalOpen","dropdownRef","useRef","open","handleClickOutside","e","current","contains","target","document","addEventListener","removeEventListener","handleToggle","newState","onKeyDown","key","focus","tabIndex","DropdownItem","DropdownDivider","Item","Divider","Tooltip","content","placement","setIsVisible","tooltipRef","tooltipId","Math","random","toString","substr","onMouseEnter","onMouseLeave","onFocus","onBlur","id","Collapse","defaultOpen","collapseId","Tabs","activeTab","defaultActiveTab","onTabChange","internalActiveTab","setInternalActiveTab","currentTab","tabs","Children","toArray","map","tab","index","isActive","tabId","paneId","handleTabClick","title","hidden","TabPane","Pane","ToastContext","createContext","toastId","ToastItem","toast","richColors","closeButton","icons","success","width","height","viewBox","fill","fillRule","d","clipRule","error","warning","info","cx","cy","r","stroke","strokeWidth","strokeLinecap","strokeDasharray","strokeDashoffset","variantClass","richColorClass","style","description","message","strokeLinejoin","action","label","Object","assign","options","window","event","CustomEvent","detail","dispatchEvent","duration","Infinity","promise","then","data","catch","toastEvent","Timeline","active","completed","animated","Date","Title","Text","Content","Offcanvas","backdrop","body","classList","add","remove","offcanvasContent","createPortal","Carousel","activeIndex","onSlide","controls","indicators","interval","items","internalIndex","setInternalIndex","currentIndex","setInterval","handleNext","clearInterval","handleSlide","newIndex","length","_","item","Fragment","CarouselItem","Popover","popoverRef","handleTrigger","popoverId","Scrollspy","targets","onActiveChange","offset","activeId","setActiveId","handleScroll","scrollPosition","scrollY","i","element","getElementById","offsetTop","child","isValidElement","cloneElement","Select","value","defaultValue","onChange","placeholder","searchable","setIsOpen","selectedValue","setSelectedValue","searchTerm","setSearchTerm","selectRef","currentValue","selectedOption","find","opt","handleSelect","option","filteredOptions","toLowerCase","includes","stopPropagation","FileUpload","onFileSelect","multiple","accept","maxSize","isDragging","setIsDragging","files","setFiles","inputRef","handleFiles","fileList","validFiles","Array","from","file","handleClick","click","onDragOver","preventDefault","onDragLeave","onDrop","dataTransfer","display","name","toFixed","NumberInput","min","max","step","internalValue","setInternalValue","handleChange","newValue","validValue","parseFloat","Slider","showValue","Switch","checked","defaultChecked","InputOTP","onComplete","values","setValues","inputRefs","handlePaste","newValues","clipboardData","getData","slice","split","concat","every","v","el","test","handleKeyDown","onPaste","maxLength","Accordion","alwaysOpen","openItems","setOpenItems","Set","has","prev","newSet","delete","toggleItem","AccordionItem","headerId","Navbar","bg","expand","bgClass","expandClass","NavbarBrand","href","NavbarToggle","NavbarCollapse","NavbarNav","Brand","Toggle","Nav","Pagination","currentPage","totalPages","onPageChange","maxVisible","sizeClass","pages","startPage","floor","endPage","push","getPageNumbers","page","Spinner","Stat","descClass","icon","iconBg","compact","progress","change","statClasses","backgroundColor","trim","abs","Breadcrumb","separator","ListGroup","flush","numbered","horizontal","Tag","listClasses","itemClasses","src","alt","shape","fallback","status","imageError","setImageError","avatarClasses","showFallback","charAt","toUpperCase","onError","pill","badgeClasses","m","mt","mb","ml","mr","mx","my","p","pt","pb","pl","pr","px","py","flex","justify","gap","as","Component","boxClasses","vertical","groupClasses","indeterminate","checkboxRef","htmlFor","xs","sm","md","lg","xl","colClasses","fluid","isValid","isInvalid","plaintext","readOnly","inputClasses","footer","keyboard","centered","mounted","setMounted","modalContent","striped","percentage","progressBarClasses","round","stats","columns","colClass","stat","transform","color","weight","textClasses","rows","autoResize","textareaRef","textareaClasses","adjustHeight","textarea","scrollHeight","position","toasts","setToasts","addToast","newToast","createdAt","now","removeToast","t","Provider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/react/components/Button.jsx","../src/react/components/Alert.jsx","../src/react/components/Card.jsx","../src/react/components/Modal.jsx","../src/react/components/Dropdown.jsx","../src/react/components/Tooltip.jsx","../src/react/components/Collapse.jsx","../src/react/components/Tabs.jsx","../src/react/components/Sonner.jsx","../src/react/components/Toast.jsx","../src/react/components/Timeline.jsx","../src/react/components/Container.jsx","../src/react/components/Offcanvas.jsx","../src/react/components/Carousel.jsx","../src/react/components/Popover.jsx","../src/react/components/Scrollspy.jsx","../src/react/components/Select.jsx","../src/react/components/FileUpload.jsx","../src/react/components/NumberInput.jsx","../src/react/components/Slider.jsx","../src/react/components/Switch.jsx","../src/react/components/InputOTP.jsx","../src/react/components/Accordion.jsx","../src/react/components/Navbar.jsx","../src/react/components/Pagination.jsx","../src/react/components/Spinner.jsx","../src/react/components/Stat.jsx","../src/react/components/Breadcrumb.jsx","../src/react/components/ListGroup.jsx","../src/react/components/Avatar.jsx","../src/react/components/Badge.jsx","../src/react/components/Box.jsx","../src/react/components/ButtonGroup.jsx","../src/react/components/Checkbox.jsx","../src/react/components/Col.jsx","../src/react/components/Input.jsx","../src/react/components/Progress.jsx","../src/react/components/Radio.jsx","../src/react/components/Row.jsx","../src/react/components/Text.jsx","../src/react/index.js"],"sourcesContent":["import React from 'react';\n\n/**\n * Button Component\n * \n * @param {Object} props\n * @param {React.ReactNode} props.children - Button content\n * @param {'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark' | 'link'} [props.variant='primary'] - Button variant\n * @param {'sm' | 'lg'} [props.size] - Button size\n * @param {boolean} [props.outline=false] - Outline style\n * @param {boolean} [props.disabled=false] - Disabled state\n * @param {boolean} [props.loading=false] - Loading state\n * @param {string} [props.type='button'] - Button type\n * @param {string} [props.className] - Additional classes\n * @param {Function} [props.onClick] - Click handler\n */\nexport const Button = React.forwardRef(({\n children,\n variant = 'primary',\n size,\n outline = false,\n disabled = false,\n loading = false,\n type = 'button',\n className = '',\n onClick,\n ...props\n}, ref) => {\n\n // Construct class names based on props to match existing SCSS\n const baseClass = 'btn';\n const variantClass = outline ? `btn-outline-${variant}` : `btn-${variant}`;\n const sizeClass = size ? `btn-${size}` : '';\n\n const classes = [\n baseClass,\n variantClass,\n sizeClass,\n className\n ].filter(Boolean).join(' ');\n\n return (\n <button\n ref={ref}\n type={type}\n className={classes}\n disabled={disabled || loading}\n onClick={onClick}\n {...props}\n >\n {loading && (\n <span className=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\n )}\n {children}\n </button>\n );\n});\n\nButton.displayName = 'Button';\n","import React, { useState, useEffect, useCallback, forwardRef } from 'react';\n\n/**\n * Alert Component\n * Contextual feedback messages\n * \n * @param {Object} props\n * @param {'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark'} [props.variant='primary'] - Alert variant\n * @param {boolean} [props.dismissible=false] - Whether the alert can be dismissed\n * @param {boolean} [props.show=true] - Controls visibility (controlled)\n * @param {Function} [props.onClose] - Callback when closed\n * @param {number} [props.autoClose] - Auto close duration in ms (false to disable)\n * @param {string} [props.className] - Additional classes\n * @param {React.ReactNode} props.children - Alert content\n */\nexport const Alert = forwardRef(({\n children,\n variant = 'primary',\n dismissible = false,\n show,\n onClose,\n autoClose = false,\n className = '',\n ...props\n}, ref) => {\n // Internal state for uncontrolled usage if 'show' is undefined\n const [internalShow, setInternalShow] = useState(true);\n\n // Determine effective visibility\n const isVisible = show !== undefined ? show : internalShow;\n\n const handleClose = useCallback(() => {\n if (show === undefined) {\n setInternalShow(false);\n }\n if (onClose) {\n onClose();\n }\n }, [show, onClose]);\n\n useEffect(() => {\n let timer;\n if (isVisible && autoClose) {\n timer = setTimeout(() => {\n handleClose();\n }, typeof autoClose === 'number' ? autoClose : 5000);\n }\n return () => {\n if (timer) clearTimeout(timer);\n };\n }, [isVisible, autoClose, handleClose]);\n\n if (!isVisible) return null;\n\n return (\n <div\n ref={ref}\n className={`alert alert-${variant} ${dismissible ? 'alert-dismissible' : ''} ${className}`}\n role=\"alert\"\n {...props}\n >\n {children}\n {dismissible && (\n <button\n type=\"button\"\n className=\"btn-close\"\n aria-label=\"Close\"\n onClick={handleClose}\n ></button>\n )}\n </div>\n );\n});\n\nAlert.displayName = 'Alert';\n","import React, { forwardRef } from 'react';\n\n/**\n * Card Component\n * Flexible content container\n * \n * @param {Object} props\n * @param {boolean} [props.hoverable=false] - Whether the card has a hover effect\n * @param {string} [props.className] - Additional classes\n * @param {string} [props.bodyClassName] - Additional classes for card body\n * @param {React.ReactNode} props.children - Card content\n */\nexport const Card = forwardRef(({\n children,\n hoverable = false,\n className = '',\n bodyClassName = '',\n ...props\n}, ref) => {\n\n // Check if children already contain Card.Body or similar structure\n // If not, wrap them in Card.Body for convenience, or let user handle it?\n // Vanilla Card.js seems to expect a .card-body to setContent. \n // In React, we can be more flexible. \n\n return (\n <div\n ref={ref}\n className={`card ${hoverable ? 'card-hoverable' : ''} ${className}`}\n {...props}\n >\n {/* We can expose sub-components like CardBody if needed, \n but for a simple port, we'll assume children are passed correctly \n or just wrap everything in card-body if it's simple text? \n Let's stick to simple wrapper first. */}\n {children}\n </div>\n );\n});\n\nCard.displayName = 'Card';\n\nexport const CardBody = forwardRef(({ className = '', children, ...props }, ref) => (\n <div ref={ref} className={`card-body ${className}`} {...props}>\n {children}\n </div>\n));\n\nCardBody.displayName = 'Card.Body';\n\nexport const CardHeader = forwardRef(({ className = '', children, ...props }, ref) => (\n <div ref={ref} className={`card-header ${className}`} {...props}>\n {children}\n </div>\n));\n\nCardHeader.displayName = 'Card.Header';\n\nexport const CardFooter = forwardRef(({ className = '', children, ...props }, ref) => (\n <div ref={ref} className={`card-footer ${className}`} {...props}>\n {children}\n </div>\n));\n\nCardFooter.displayName = 'Card.Footer';\n\n// Attach sub-components to main Card component\nCard.Body = CardBody;\nCard.Header = CardHeader;\nCard.Footer = CardFooter;\n","import React, { useEffect, useState, useRef } from 'react';\nimport { createPortal } from 'react-dom';\n\n/**\n * Modal Component\n * \n * @param {Object} props\n * @param {boolean} props.isOpen - Controls modal visibility\n * @param {Function} props.onClose - Handler for closing the modal\n * @param {string} [props.title] - Modal title\n * @param {React.ReactNode} props.children - Modal body content\n * @param {React.ReactNode} [props.footer] - Modal footer content\n * @param {boolean} [props.backdrop=true] - Show backdrop\n * @param {boolean} [props.keyboard=true] - Close on Escape\n * @param {'sm' | 'lg' | 'xl'} [props.size] - Modal size\n * @param {boolean} [props.centered=false] - Vertically center modal\n * @param {string} [props.className] - Additional classes\n */\nexport const Modal = ({\n isOpen,\n onClose,\n title,\n children,\n footer,\n backdrop = true,\n keyboard = true,\n size,\n centered = false,\n className = '',\n ...props\n}) => {\n const [mounted, setMounted] = useState(false);\n const modalRef = useRef(null);\n\n useEffect(() => {\n setMounted(true);\n return () => setMounted(false);\n }, []);\n\n // Handle body class for scroll locking\n useEffect(() => {\n if (isOpen) {\n document.body.classList.add('modal-open');\n } else {\n document.body.classList.remove('modal-open');\n }\n return () => {\n document.body.classList.remove('modal-open');\n };\n }, [isOpen]);\n\n // Handle keyboard events\n useEffect(() => {\n const handleKeyDown = (e) => {\n if (keyboard && e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, keyboard, onClose]);\n\n if (!mounted) return null;\n\n const modalContent = (\n <>\n {/* Backdrop */}\n {isOpen && <div className={`modal-backdrop fade show`} onClick={backdrop ? onClose : undefined} />}\n\n {/* Modal Dialog */}\n <div\n className={`modal fade ${isOpen ? 'show' : ''}`}\n style={{ display: isOpen ? 'block' : 'none' }}\n tabIndex=\"-1\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-hidden={!isOpen}\n aria-labelledby={title ? \"modal-title\" : undefined}\n {...props}\n >\n <div className={`modal-dialog ${size ? `modal-${size}` : ''} ${centered ? 'modal-dialog-centered' : ''} ${className}`}>\n <div className=\"modal-content\">\n <div className=\"modal-header\">\n {title && <h5 className=\"modal-title\" id=\"modal-title\">{title}</h5>}\n <button\n type=\"button\"\n className=\"btn-close\"\n aria-label=\"Close\"\n onClick={onClose}\n ></button>\n </div>\n <div className=\"modal-body\">\n {children}\n </div>\n {footer && (\n <div className=\"modal-footer\">\n {footer}\n </div>\n )}\n </div>\n </div>\n </div>\n </>\n );\n\n return createPortal(modalContent, document.body);\n};\n","import React, { useState, useRef, useEffect, forwardRef } from 'react';\n\n/**\n * Dropdown Component\n * Dropdown menu\n * \n * @param {Object} props\n * @param {React.ReactNode} props.trigger - Dropdown trigger element\n * @param {React.ReactNode} props.children - Dropdown menu items\n * @param {boolean} [props.isOpen] - Controlled open state\n * @param {Function} [props.onToggle] - Toggle handler\n * @param {'start' | 'end'} [props.align='start'] - Menu alignment\n * @param {string} [props.className] - Additional classes\n */\nexport const Dropdown = forwardRef(({\n trigger,\n children,\n isOpen,\n onToggle,\n align = 'start',\n className = '',\n ...props\n}, ref) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const dropdownRef = useRef(null);\n const open = isOpen !== undefined ? isOpen : internalOpen;\n\n useEffect(() => {\n const handleClickOutside = (e) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target)) {\n if (isOpen === undefined) {\n setInternalOpen(false);\n }\n if (onToggle) {\n onToggle(false);\n }\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleToggle = () => {\n const newState = !open;\n if (isOpen === undefined) {\n setInternalOpen(newState);\n }\n if (onToggle) {\n onToggle(newState);\n }\n };\n\n const handleKeyDown = (e) => {\n if (e.key === 'Escape' && open) {\n handleToggle();\n if (trigger.ref && trigger.ref.current) trigger.ref.current.focus();\n }\n };\n\n return (\n <div\n ref={dropdownRef}\n className={`dropdown ${open ? 'show' : ''} ${className}`}\n onKeyDown={handleKeyDown}\n {...props}\n >\n <div\n onClick={handleToggle}\n aria-expanded={open}\n aria-haspopup=\"true\"\n role=\"button\"\n tabIndex={0}\n >\n {trigger}\n </div>\n {open && (\n <div\n className={`dropdown-menu show dropdown-menu-${align}`}\n role=\"menu\"\n >\n {children}\n </div>\n )}\n </div>\n );\n});\n\nDropdown.displayName = 'Dropdown';\n\nexport const DropdownItem = forwardRef(({ children, onClick, className = '', ...props }, ref) => (\n <button\n ref={ref}\n className={`dropdown-item ${className}`}\n onClick={onClick}\n role=\"menuitem\"\n {...props}\n >\n {children}\n </button>\n));\n\nDropdownItem.displayName = 'Dropdown.Item';\n\nexport const DropdownDivider = () => <hr className=\"dropdown-divider\" />;\n\nDropdownDivider.displayName = 'Dropdown.Divider';\n\nDropdown.Item = DropdownItem;\nDropdown.Divider = DropdownDivider;\n","import React, { useState, useRef, useEffect, forwardRef } from 'react';\n\n/**\n * Tooltip Component\n * Contextual tooltip\n * \n * @param {Object} props\n * @param {React.ReactNode} props.children - Trigger element\n * @param {string} props.content - Tooltip content\n * @param {'top' | 'bottom' | 'left' | 'right'} [props.placement='top'] - Tooltip placement\n * @param {string} [props.className] - Additional classes\n */\nexport const Tooltip = forwardRef(({\n children,\n content,\n placement = 'top',\n className = '',\n ...props\n}, ref) => {\n const [isVisible, setIsVisible] = useState(false);\n const tooltipRef = useRef(null);\n\n const tooltipId = `tooltip-${Math.random().toString(36).substr(2, 9)}`;\n\n return (\n <div\n ref={ref}\n className={`tooltip-wrapper ${className}`}\n onMouseEnter={() => setIsVisible(true)}\n onMouseLeave={() => setIsVisible(false)}\n onFocus={() => setIsVisible(true)}\n onBlur={() => setIsVisible(false)}\n aria-describedby={isVisible ? tooltipId : undefined}\n {...props}\n >\n {children}\n {isVisible && (\n <div\n id={tooltipId}\n ref={tooltipRef}\n className={`tooltip bs-tooltip-${placement} show`}\n role=\"tooltip\"\n >\n <div className=\"tooltip-arrow\"></div>\n <div className=\"tooltip-inner\">{content}</div>\n </div>\n )}\n </div>\n );\n});\n\nTooltip.displayName = 'Tooltip';\n","import React, { useState, forwardRef } from 'react';\n\n/**\n * Collapse Component\n * Collapsible content\n * \n * @param {Object} props\n * @param {boolean} [props.isOpen] - Controlled open state\n * @param {boolean} [props.defaultOpen=false] - Default open state\n * @param {React.ReactNode} props.children - Collapsible content\n * @param {string} [props.className] - Additional classes\n */\nexport const Collapse = forwardRef(({\n isOpen,\n defaultOpen = false,\n children,\n className = '',\n ...props\n}, ref) => {\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const open = isOpen !== undefined ? isOpen : internalOpen;\n const collapseId = props.id || `collapse-${Math.random().toString(36).substr(2, 9)}`;\n\n return (\n <div\n ref={ref}\n id={collapseId}\n className={`collapse ${open ? 'show' : ''} ${className}`}\n {...props}\n >\n {children}\n </div>\n );\n});\n\nCollapse.displayName = 'Collapse';\n","import React, { useState, forwardRef } from 'react';\n\n/**\n * Tabs Component\n * Tab navigation\n * \n * @param {Object} props\n * @param {number} [props.activeTab] - Controlled active tab index\n * @param {number} [props.defaultActiveTab=0] - Default active tab\n * @param {Function} [props.onTabChange] - Tab change handler\n * @param {React.ReactNode} props.children - Tab panes\n * @param {string} [props.className] - Additional classes\n */\nexport const Tabs = forwardRef(({\n activeTab,\n defaultActiveTab = 0,\n onTabChange,\n children,\n className = '',\n ...props\n}, ref) => {\n const [internalActiveTab, setInternalActiveTab] = useState(defaultActiveTab);\n const currentTab = activeTab !== undefined ? activeTab : internalActiveTab;\n\n const handleTabClick = (index) => {\n if (activeTab === undefined) {\n setInternalActiveTab(index);\n }\n if (onTabChange) {\n onTabChange(index);\n }\n };\n\n const tabs = React.Children.toArray(children);\n\n return (\n <div ref={ref} className={`tabs-container ${className}`} {...props}>\n <ul className=\"nav nav-tabs\" role=\"tablist\">\n {tabs.map((tab, index) => {\n const isActive = currentTab === index;\n const tabId = `tab-${index}`;\n const paneId = `pane-${index}`;\n\n return (\n <li key={index} className=\"nav-item\" role=\"presentation\">\n <button\n className={`nav-link ${isActive ? 'active' : ''}`}\n onClick={() => handleTabClick(index)}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={paneId}\n id={tabId}\n tabIndex={isActive ? 0 : -1}\n >\n {tab.props.title}\n </button>\n </li>\n );\n })}\n </ul>\n <div className=\"tab-content\">\n {tabs.map((tab, index) => {\n const isActive = currentTab === index;\n const tabId = `tab-${index}`;\n const paneId = `pane-${index}`;\n\n return (\n <div\n key={index}\n className={`tab-pane ${isActive ? 'active show' : ''}`}\n role=\"tabpanel\"\n id={paneId}\n aria-labelledby={tabId}\n tabIndex={0}\n hidden={!isActive}\n >\n {isActive && tab.props.children}\n </div>\n );\n })}\n </div>\n </div>\n );\n});\n\nTabs.displayName = 'Tabs';\n\nexport const TabPane = ({ title, children }) => {\n return <>{children}</>;\n};\n\nTabPane.displayName = 'Tabs.Pane';\n\nTabs.Pane = TabPane;\n","import React, { createContext, useContext, useState, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\n// import './Sonner.css';\n\n// Toast Context\nconst ToastContext = createContext(null);\n\nlet toastId = 0;\n\n/**\n * Sonner - Modern toast notification system\n * Inspired by shadcn/ui's Sonner component\n */\nexport function Toaster({\n position = 'bottom-right',\n expand = false,\n richColors = true,\n closeButton = false,\n ...props\n}) {\n const [toasts, setToasts] = useState([]);\n\n const addToast = useCallback((toast) => {\n const id = toastId++;\n const newToast = {\n id,\n ...toast,\n createdAt: Date.now(),\n };\n\n setToasts((prev) => [...prev, newToast]);\n\n if (toast.duration !== Infinity) {\n setTimeout(() => {\n removeToast(id);\n }, toast.duration || 4000);\n }\n\n return id;\n }, []);\n\n const removeToast = useCallback((id) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const positionClasses = {\n 'top-left': 'sonner-top-left',\n 'top-center': 'sonner-top-center',\n 'top-right': 'sonner-top-right',\n 'bottom-left': 'sonner-bottom-left',\n 'bottom-center': 'sonner-bottom-center',\n 'bottom-right': 'sonner-bottom-right',\n };\n\n return (\n <ToastContext.Provider value={{ addToast, removeToast }}>\n {props.children}\n {createPortal(\n <div className={`sonner-container ${positionClasses[position]}`}>\n <ol className={`sonner-list ${expand ? 'sonner-expanded' : ''}`}>\n {toasts.map((toast, index) => (\n <ToastItem\n key={toast.id}\n toast={toast}\n index={index}\n onClose={() => removeToast(toast.id)}\n richColors={richColors}\n closeButton={closeButton}\n />\n ))}\n </ol>\n </div>,\n document.body\n )}\n </ToastContext.Provider>\n );\n}\n\nfunction ToastItem({ toast, index, onClose, richColors, closeButton }) {\n const icons = {\n success: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\" clipRule=\"evenodd\" />\n </svg>\n ),\n error: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\" clipRule=\"evenodd\" />\n </svg>\n ),\n warning: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z\" clipRule=\"evenodd\" />\n </svg>\n ),\n info: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\" clipRule=\"evenodd\" />\n </svg>\n ),\n loading: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" className=\"sonner-loading\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeDasharray=\"50.265\" strokeDashoffset=\"25\" />\n </svg>\n ),\n };\n\n const variantClass = toast.type ? `sonner-${toast.type}` : '';\n const richColorClass = richColors && toast.type ? `sonner-rich-${toast.type}` : '';\n\n return (\n <li\n className={`sonner-toast ${variantClass} ${richColorClass}`}\n style={{ '--index': index }}\n >\n <div className=\"sonner-toast-content\">\n {toast.type && icons[toast.type] && (\n <div className=\"sonner-toast-icon\">\n {icons[toast.type]}\n </div>\n )}\n <div className=\"sonner-toast-body\">\n {toast.title && <div className=\"sonner-toast-title\">{toast.title}</div>}\n {toast.description && <div className=\"sonner-toast-description\">{toast.description}</div>}\n {!toast.title && !toast.description && <div className=\"sonner-toast-description\">{toast.message}</div>}\n </div>\n {(closeButton || toast.closeButton) && (\n <button\n className=\"sonner-toast-close\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M13 1L1 13M1 1L13 13\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n )}\n </div>\n {toast.action && (\n <div className=\"sonner-toast-action\">\n <button\n className=\"sonner-action-button\"\n onClick={() => {\n toast.action.onClick?.();\n onClose();\n }}\n >\n {toast.action.label}\n </button>\n </div>\n )}\n </li>\n );\n}\n\n// Toast API\nexport const toast = Object.assign(\n (message, options = {}) => {\n if (typeof window === 'undefined') return;\n\n const event = new CustomEvent('sonner-toast', {\n detail: {\n message,\n ...options,\n },\n });\n window.dispatchEvent(event);\n },\n {\n success: (message, options = {}) => {\n toast(message, { ...options, type: 'success' });\n },\n error: (message, options = {}) => {\n toast(message, { ...options, type: 'error' });\n },\n warning: (message, options = {}) => {\n toast(message, { ...options, type: 'warning' });\n },\n info: (message, options = {}) => {\n toast(message, { ...options, type: 'info' });\n },\n loading: (message, options = {}) => {\n toast(message, { ...options, type: 'loading', duration: Infinity });\n },\n promise: (promise, options = {}) => {\n const id = toast(options.loading || 'Loading...', { type: 'loading', duration: Infinity });\n\n promise\n .then((data) => {\n const message = typeof options.success === 'function'\n ? options.success(data)\n : options.success || 'Success';\n toast(message, { type: 'success' });\n })\n .catch((error) => {\n const message = typeof options.error === 'function'\n ? options.error(error)\n : options.error || 'Error';\n toast(message, { type: 'error' });\n });\n\n return promise;\n },\n }\n);\n\n// Hook to use toast context\nexport function useToast() {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within a Toaster');\n }\n return context;\n}\n\n// Setup global toast listener\nif (typeof window !== 'undefined') {\n window.addEventListener('sonner-toast', (event) => {\n const toastEvent = new CustomEvent('add-sonner-toast', {\n detail: event.detail,\n });\n window.dispatchEvent(toastEvent);\n });\n}\n\nexport default toast;\n","import React, { useState, useEffect, forwardRef } from 'react';\nimport { createPortal } from 'react-dom';\n\n/**\n * Toast Component\n * Notification toast\n * \n * @param {Object} props\n * @param {boolean} [props.show] - Controlled visibility\n * @param {Function} [props.onClose] - Close handler\n * @param {string} [props.title] - Toast title\n * @param {React.ReactNode} props.children - Toast content\n * @param {'primary' | 'success' | 'danger' | 'warning' | 'info'} [props.variant] - Color variant\n * @param {number} [props.autoHide] - Auto hide duration in ms (false to disable)\n * @param {'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'} [props.position='top-right'] - Toast position\n * @param {string} [props.className] - Additional classes\n */\nexport const Toast = forwardRef(({\n show = true,\n onClose,\n title,\n children,\n variant,\n autoHide = 5000,\n position = 'top-right',\n className = '',\n ...props\n}, ref) => {\n const [isVisible, setIsVisible] = useState(show);\n\n useEffect(() => {\n setIsVisible(show);\n }, [show]);\n\n useEffect(() => {\n if (isVisible && autoHide) {\n const timer = setTimeout(() => {\n handleClose();\n }, autoHide);\n return () => clearTimeout(timer);\n }\n }, [isVisible, autoHide]);\n\n const handleClose = () => {\n setIsVisible(false);\n if (onClose) {\n onClose();\n }\n };\n\n if (!isVisible) return null;\n\n const variantClass = variant ? `toast-${variant}` : '';\n const positionClass = `toast-${position}`;\n\n const toastContent = (\n <div\n ref={ref}\n className={`toast show ${variantClass} ${positionClass} ${className}`}\n role=\"alert\"\n {...props}\n >\n <div className=\"toast-header\">\n {title && <strong className=\"me-auto\">{title}</strong>}\n <button\n type=\"button\"\n className=\"btn-close\"\n aria-label=\"Close\"\n onClick={handleClose}\n ></button>\n </div>\n <div className=\"toast-body\">\n {children}\n </div>\n </div>\n );\n\n return createPortal(toastContent, document.body);\n});\n\nToast.displayName = 'Toast';\n\n/**\n * createToast - Programmatic toast creation\n */\nexport const createToast = (options) => {\n // This would need a toast container context in a real implementation\n // For now, it's a placeholder\n console.warn('createToast requires a ToastContainer context');\n};\n","import React from 'react';\n\nconst Timeline = ({ children, className = '', ...props }) => {\n return (\n <ul className={`timeline ${className}`} {...props}>\n {children}\n </ul>\n );\n};\n\nconst TimelineItem = ({\n children,\n className = '',\n active = false,\n completed = false,\n animated = false,\n ...props\n}) => {\n return (\n <li\n className={`timeline-item ${active ? 'active' : ''} ${completed ? 'completed' : ''} ${animated ? 'animated' : ''} ${className}`}\n {...props}\n >\n {children}\n </li>\n );\n};\n\nconst TimelineDate = ({ children, className = '', ...props }) => {\n return <div className={`timeline-date ${className}`} {...props}>{children}</div>;\n};\n\nconst TimelineMarker = ({ children, className = '', ...props }) => {\n // Note: The CSS uses ::after for the marker, but for a React component we might want more control.\n // However, to match the existing CSS, we largely rely on the classes.\n // If specific marker content is needed (like an icon overrides), custom CSS or inline styles might be needed.\n // For now, we follow the SCSS structure where marker is specific to .timeline-item css.\n return null;\n};\n\nconst TimelineContent = ({ children, className = '', ...props }) => {\n return <div className={`timeline-content ${className}`} {...props}>{children}</div>;\n};\n\nconst TimelineTitle = ({ children, className = '', ...props }) => {\n return <h5 className={`timeline-title ${className}`} {...props}>{children}</h5>;\n};\n\nconst TimelineText = ({ children, className = '', ...props }) => {\n return <p className={`timeline-text ${className}`} {...props}>{children}</p>;\n};\n\n// Main Component Object\nTimeline.Item = TimelineItem;\nTimeline.Date = TimelineDate;\nTimeline.Title = TimelineTitle;\nTimeline.Text = TimelineText;\nTimeline.Content = TimelineContent;\n\nexport { Timeline };\n","import React from 'react';\n\n/**\n * Container component - wrapper for Bootstrap container\n * @param {boolean} fluid - Use fluid container (full width)\n * @param {string} className - Additional CSS classes\n * @param {React.ReactNode} children - Child elements\n */\nconst Container = ({ fluid = false, className = '', children, ...props }) => {\n const containerClass = fluid ? 'container-fluid' : 'container';\n const classes = `${containerClass} ${className}`.trim();\n\n return (\n <div className={classes} {...props}>\n {children}\n </div>\n );\n};\n\nexport default Container;\n","import React, { useEffect, forwardRef } from 'react';\nimport { createPortal } from 'react-dom';\n\n/**\n * Offcanvas Component\n * Slide-in panel\n * \n * @param {Object} props\n * @param {boolean} props.isOpen - Controls visibility\n * @param {Function} props.onClose - Close handler\n * @param {string} [props.title] - Offcanvas title\n * @param {React.ReactNode} props.children - Offcanvas content\n * @param {'start' | 'end' | 'top' | 'bottom'} [props.placement='end'] - Offcanvas placement\n * @param {boolean} [props.backdrop=true] - Show backdrop\n * @param {string} [props.className] - Additional classes\n */\nexport const Offcanvas = forwardRef(({\n isOpen,\n onClose,\n title,\n children,\n placement = 'end',\n backdrop = true,\n className = '',\n ...props\n}, ref) => {\n useEffect(() => {\n if (isOpen) {\n document.body.classList.add('offcanvas-open');\n } else {\n document.body.classList.remove('offcanvas-open');\n }\n return () => {\n document.body.classList.remove('offcanvas-open');\n };\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const offcanvasContent = (\n <>\n {backdrop && (\n <div\n className=\"offcanvas-backdrop fade show\"\n onClick={onClose}\n ></div>\n )}\n <div\n ref={ref}\n className={`offcanvas offcanvas-${placement} show ${className}`}\n tabIndex=\"-1\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? \"offcanvas-label\" : undefined}\n {...props}\n >\n <div className=\"offcanvas-header\">\n {title && <h5 className=\"offcanvas-title\" id=\"offcanvas-label\">{title}</h5>}\n <button\n type=\"button\"\n className=\"btn-close\"\n aria-label=\"Close\"\n onClick={onClose}\n ></button>\n </div>\n <div className=\"offcanvas-body\">\n {children}\n </div>\n </div>\n </>\n );\n\n return createPortal(offcanvasContent, document.body);\n});\n\nOffcanvas.displayName = 'Offcanvas';\n","import React, { useState, useEffect, useRef, forwardRef } from 'react';\n\n/**\n * Carousel Component\n * Image/content carousel\n * \n * @param {Object} props\n * @param {React.ReactNode} props.children - Carousel items\n * @param {number} [props.activeIndex] - Controlled active index\n * @param {Function} [props.onSlide] - Slide change handler\n * @param {boolean} [props.controls=true] - Show prev/next controls\n * @param {boolean} [props.indicators=true] - Show indicators\n * @param {number} [props.interval] - Auto-play interval in ms (false to disable)\n * @param {string} [props.className] - Additional classes\n */\nexport const Carousel = forwardRef(({\n children,\n activeIndex,\n onSlide,\n controls = true,\n indicators = true,\n interval = false,\n className = '',\n ...props\n}, ref) => {\n const items = React.Children.toArray(children);\n const [internalIndex, setInternalIndex] = useState(0);\n const currentIndex = activeIndex !== undefined ? activeIndex : internalIndex;\n\n useEffect(() => {\n if (interval) {\n const timer = setInterval(() => {\n handleNext();\n }, interval);\n return () => clearInterval(timer);\n }\n }, [currentIndex, interval]);\n\n const handleSlide = (newIndex) => {\n if (activeIndex === undefined) {\n setInternalIndex(newIndex);\n }\n if (onSlide) {\n onSlide(newIndex);\n }\n };\n\n const handlePrev = () => {\n const newIndex = currentIndex === 0 ? items.length - 1 : currentIndex - 1;\n handleSlide(newIndex);\n };\n\n const handleNext = () => {\n const newIndex = currentIndex === items.length - 1 ? 0 : currentIndex + 1;\n handleSlide(newIndex);\n };\n\n return (\n <div\n ref={ref}\n className={`carousel slide ${className}`}\n {...props}\n >\n {indicators && (\n <div className=\"carousel-indicators\">\n {items.map((_, index) => (\n <button\n key={index}\n type=\"button\"\n className={index === currentIndex ? 'active' : ''}\n onClick={() => handleSlide(index)}\n aria-current={index === currentIndex ? 'true' : 'false'}\n aria-label={`Slide ${index + 1}`}\n ></button>\n ))}\n </div>\n )}\n\n <div className=\"carousel-inner\">\n {items.map((item, index) => (\n <div\n key={index}\n className={`carousel-item ${index === currentIndex ? 'active' : ''}`}\n >\n {item}\n </div>\n ))}\n </div>\n\n {controls && (\n <>\n <button\n className=\"carousel-control-prev\"\n type=\"button\"\n onClick={handlePrev}\n aria-label=\"Previous slide\"\n >\n <span className=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span className=\"visually-hidden\">Previous</span>\n </button>\n <button\n className=\"carousel-control-next\"\n type=\"button\"\n onClick={handleNext}\n aria-label=\"Next slide\"\n >\n <span className=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span className=\"visually-hidden\">Next</span>\n </button>\n </>\n )}\n </div>\n );\n});\n\nCarousel.displayName = 'Carousel';\n\nexport const CarouselItem = ({ children }) => {\n return <>{children}</>;\n};\n\nCarouselItem.displayName = 'Carousel.Item';\n\nCarousel.Item = CarouselItem;\n","import React, { useState, useRef, useEffect, forwardRef } from 'react';\n\n/**\n * Popover Component\n * Rich popover with title and content\n * \n * @param {Object} props\n * @param {React.ReactNode} props.children - Trigger element\n * @param {string} [props.title] - Popover title\n * @param {React.ReactNode} props.content - Popover content\n * @param {'top' | 'bottom' | 'left' | 'right'} [props.placement='top'] - Popover placement\n * @param {'click' | 'hover'} [props.trigger='click'] - Trigger type\n * @param {string} [props.className] - Additional classes\n */\nexport const Popover = forwardRef(({\n children,\n title,\n content,\n placement = 'top',\n trigger = 'click',\n className = '',\n ...props\n}, ref) => {\n const [isVisible, setIsVisible] = useState(false);\n const popoverRef = useRef(null);\n\n useEffect(() => {\n const handleClickOutside = (e) => {\n if (popoverRef.current && !popoverRef.current.contains(e.target)) {\n setIsVisible(false);\n }\n };\n\n if (trigger === 'click') {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [trigger]);\n\n const handleTrigger = () => {\n if (trigger === 'click') {\n setIsVisible(!isVisible);\n }\n };\n\n const handleMouseEnter = () => {\n if (trigger === 'hover') {\n setIsVisible(true);\n }\n };\n\n const handleMouseLeave = () => {\n if (trigger === 'hover') {\n setIsVisible(false);\n }\n };\n\n const popoverId = `popover-${Math.random().toString(36).substr(2, 9)}`;\n\n return (\n <div\n ref={popoverRef}\n className={`popover-wrapper ${className}`}\n onClick={handleTrigger}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n handleTrigger();\n }\n }}\n aria-describedby={isVisible ? popoverId : undefined}\n tabIndex=\"0\"\n role=\"button\"\n {...props}\n >\n {children}\n {isVisible && (\n <div\n id={popoverId}\n className={`popover bs-popover-${placement} show`}\n role=\"tooltip\"\n >\n <div className=\"popover-arrow\"></div>\n {title && <h3 className=\"popover-header\">{title}</h3>}\n <div className=\"popover-body\">{content}</div>\n </div>\n )}\n </div>\n );\n});\n\nPopover.displayName = 'Popover';\n","import React, { useEffect, useState, forwardRef } from 'react';\n\n/**\n * Scrollspy Component\n * Scroll tracking navigation\n * \n * @param {Object} props\n * @param {Array<string>} props.targets - Array of target element IDs\n * @param {Function} [props.onActiveChange] - Handler when active section changes\n * @param {number} [props.offset=0] - Scroll offset\n * @param {React.ReactNode} props.children - Navigation items\n * @param {string} [props.className] - Additional classes\n */\nexport const Scrollspy = forwardRef(({\n targets = [],\n onActiveChange,\n offset = 0,\n children,\n className = '',\n ...props\n}, ref) => {\n const [activeId, setActiveId] = useState('');\n\n useEffect(() => {\n const handleScroll = () => {\n const scrollPosition = window.scrollY + offset;\n\n for (let i = targets.length - 1; i >= 0; i--) {\n const element = document.getElementById(targets[i]);\n if (element) {\n const { offsetTop } = element;\n if (scrollPosition >= offsetTop) {\n if (activeId !== targets[i]) {\n setActiveId(targets[i]);\n if (onActiveChange) {\n onActiveChange(targets[i]);\n }\n }\n break;\n }\n }\n }\n };\n\n window.addEventListener('scroll', handleScroll);\n handleScroll(); // Initial check\n\n return () => window.removeEventListener('scroll', handleScroll);\n }, [targets, offset, activeId, onActiveChange]);\n\n return (\n <nav ref={ref} className={`scrollspy ${className}`} {...props}>\n {React.Children.map(children, child => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n activeId\n });\n }\n return child;\n })}\n </nav>\n );\n});\n\nScrollspy.displayName = 'Scrollspy';\n","import React, { useState, useRef, useEffect, forwardRef } from 'react';\n\n/**\n * Select Component\n * Custom select dropdown with search\n * \n * @param {Object} props\n * @param {Array} props.options - Array of {value, label} objects\n * @param {*} [props.value] - Controlled value\n * @param {*} [props.defaultValue] - Default value\n * @param {Function} [props.onChange] - Change handler\n * @param {string} [props.placeholder='Select...'] - Placeholder text\n * @param {boolean} [props.searchable=false] - Enable search\n * @param {boolean} [props.disabled=false] - Disabled state\n * @param {string} [props.className] - Additional classes\n */\nexport const Select = forwardRef(({\n options = [],\n value,\n defaultValue,\n onChange,\n placeholder = 'Select...',\n searchable = false,\n disabled = false,\n className = '',\n ...props\n}, ref) => {\n const [isOpen, setIsOpen] = useState(false);\n const [selectedValue, setSelectedValue] = useState(defaultValue);\n const [searchTerm, setSearchTerm] = useState('');\n const selectRef = useRef(null);\n\n const currentValue = value !== undefined ? value : selectedValue;\n const selectedOption = options.find(opt => opt.value === currentValue);\n\n useEffect(() => {\n const handleClickOutside = (e) => {\n if (selectRef.current && !selectRef.current.contains(e.target)) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleSelect = (option) => {\n if (value === undefined) {\n setSelectedValue(option.value);\n }\n if (onChange) {\n onChange(option.value);\n }\n setIsOpen(false);\n setSearchTerm('');\n };\n\n const filteredOptions = searchable && searchTerm\n ? options.filter(opt =>\n opt.label.toLowerCase().includes(searchTerm.toLowerCase())\n )\n : options;\n\n return (\n <div\n ref={selectRef}\n className={`select-container ${isOpen ? 'open' : ''} ${disabled ? 'disabled' : ''} ${className}`}\n {...props}\n >\n <div\n className=\"select-trigger\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n >\n <span>{selectedOption ? selectedOption.label : placeholder}</span>\n <span className=\"select-arrow\">▼</span>\n </div>\n\n {isOpen && (\n <div\n className=\"select-dropdown\"\n role=\"listbox\"\n id=\"select-dropdown\"\n >\n {searchable && (\n <input\n type=\"text\"\n className=\"select-search\"\n placeholder=\"Search...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n role=\"searchbox\"\n />\n )}\n <div className=\"select-options\">\n {filteredOptions.map((option) => (\n <div\n key={option.value}\n className={`select-option ${option.value === currentValue ? 'selected' : ''}`}\n onClick={() => handleSelect(option)}\n role=\"option\"\n aria-selected={option.value === currentValue}\n tabIndex=\"0\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleSelect(option);\n }}\n >\n {option.label}\n </div>\n ))}\n {filteredOptions.length === 0 && (\n <div className=\"select-option disabled\" role=\"option\" aria-disabled=\"true\">No options found</div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n});\n\nSelect.displayName = 'Select';\n","import React, { useState, useRef, forwardRef } from 'react';\n\n/**\n * FileUpload Component\n * Drag-and-drop file upload\n * \n * @param {Object} props\n * @param {Function} [props.onFileSelect] - File selection handler\n * @param {boolean} [props.multiple=false] - Allow multiple files\n * @param {string} [props.accept] - Accepted file types\n * @param {number} [props.maxSize] - Max file size in bytes\n * @param {string} [props.className] - Additional classes\n */\nexport const FileUpload = forwardRef(({\n onFileSelect,\n multiple = false,\n accept,\n maxSize,\n className = '',\n ...props\n}, ref) => {\n const [isDragging, setIsDragging] = useState(false);\n const [files, setFiles] = useState([]);\n const inputRef = useRef(null);\n\n const handleFiles = (fileList) => {\n const filesArray = Array.from(fileList);\n const validFiles = filesArray.filter(file => {\n if (maxSize && file.size > maxSize) return false;\n return true;\n });\n\n setFiles(validFiles);\n if (onFileSelect) {\n onFileSelect(validFiles);\n }\n };\n\n const handleDragOver = (e) => {\n e.preventDefault();\n setIsDragging(true);\n };\n\n const handleDragLeave = () => {\n setIsDragging(false);\n };\n\n const handleDrop = (e) => {\n e.preventDefault();\n setIsDragging(false);\n handleFiles(e.dataTransfer.files);\n };\n\n const handleInputChange = (e) => {\n if (e.target.files) {\n handleFiles(e.target.files);\n }\n };\n\n const handleClick = () => {\n inputRef.current?.click();\n };\n\n return (\n <div\n ref={ref}\n className={`file-upload ${isDragging ? 'dragging' : ''} ${className}`}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n handleClick();\n }\n }}\n tabIndex=\"0\"\n role=\"button\"\n aria-label=\"File upload dropzone\"\n {...props}\n >\n <input\n ref={inputRef}\n type=\"file\"\n multiple={multiple}\n accept={accept}\n onChange={handleInputChange}\n style={{ display: 'none' }}\n />\n <div className=\"file-upload-content\">\n {files.length > 0 ? (\n <div className=\"file-list\">\n {files.map((file, index) => (\n <div key={index} className=\"file-item\">\n {file.name} ({(file.size / 1024).toFixed(2)} KB)\n </div>\n ))}\n </div>\n ) : (\n <div className=\"file-upload-placeholder\">\n <p>Drag and drop files here or click to browse</p>\n </div>\n )}\n </div>\n </div>\n );\n});\n\nFileUpload.displayName = 'FileUpload';\n","import React, { useState, forwardRef } from 'react';\n\n/**\n * NumberInput Component\n * Number input with increment/decrement buttons\n * \n * @param {Object} props\n * @param {number} [props.min] - Minimum value\n * @param {number} [props.max] - Maximum value\n * @param {number} [props.step=1] - Step increment\n * @param {number} [props.value] - Controlled value\n * @param {number} [props.defaultValue=0] - Default value\n * @param {Function} [props.onChange] - Change handler\n * @param {string} [props.className] - Additional classes\n */\nexport const NumberInput = forwardRef(({\n min,\n max,\n step = 1,\n value,\n defaultValue = 0,\n onChange,\n className = '',\n ...props\n}, ref) => {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const currentValue = value !== undefined ? value : internalValue;\n\n const handleChange = (newValue) => {\n let validValue = newValue;\n if (min !== undefined) validValue = Math.max(min, validValue);\n if (max !== undefined) validValue = Math.min(max, validValue);\n\n if (value === undefined) {\n setInternalValue(validValue);\n }\n if (onChange) {\n onChange(validValue);\n }\n };\n\n const increment = () => handleChange(currentValue + step);\n const decrement = () => handleChange(currentValue - step);\n\n return (\n <div className={`number-input ${className}`}>\n <button\n type=\"button\"\n className=\"btn btn-outline-secondary\"\n onClick={decrement}\n disabled={min !== undefined && currentValue <= min}\n >\n -\n </button>\n <input\n ref={ref}\n type=\"number\"\n className=\"form-control\"\n value={currentValue}\n min={min}\n max={max}\n step={step}\n onChange={(e) => handleChange(parseFloat(e.target.value) || 0)}\n {...props}\n />\n <button\n type=\"button\"\n className=\"btn btn-outline-secondary\"\n onClick={increment}\n disabled={max !== undefined && currentValue >= max}\n >\n +\n </button>\n </div>\n );\n});\n\nNumberInput.displayName = 'NumberInput';\n","import React, { useState, forwardRef } from 'react';\n\n/**\n * Slider Component\n * Range input slider\n * \n * @param {Object} props\n * @param {number} [props.min=0] - Minimum value\n * @param {number} [props.max=100] - Maximum value\n * @param {number} [props.step=1] - Step increment\n * @param {number} [props.value] - Controlled value\n * @param {number} [props.defaultValue] - Default value (uncontrolled)\n * @param {Function} [props.onChange] - Change handler\n * @param {boolean} [props.showValue=false] - Show current value\n * @param {string} [props.className] - Additional classes\n */\nexport const Slider = forwardRef(({\n min = 0,\n max = 100,\n step = 1,\n value,\n defaultValue,\n onChange,\n showValue = false,\n className = '',\n ...props\n}, ref) => {\n const [internalValue, setInternalValue] = useState(defaultValue || min);\n const currentValue = value !== undefined ? value : internalValue;\n\n const handleChange = (e) => {\n const newValue = parseFloat(e.target.value);\n if (value === undefined) {\n setInternalValue(newValue);\n }\n if (onChange) {\n onChange(newValue);\n }\n };\n\n return (\n <div className={`slider-container ${className}`}>\n <input\n ref={ref}\n type=\"range\"\n className=\"form-range\"\n min={min}\n max={max}\n step={step}\n value={currentValue}\n onChange={handleChange}\n aria-label={props['aria-label'] || \"Range slider\"}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={currentValue}\n {...props}\n />\n {showValue && (\n <div className=\"slider-value\">{currentValue}</div>\n )}\n </div>\n );\n});\n\nSlider.displayName = 'Slider';\n","import React, { forwardRef } from 'react';\n\n/**\n * Switch Component\n * Toggle switch for boolean values\n * \n * @param {Object} props\n * @param {boolean} [props.checked] - Controlled checked state\n * @param {boolean} [props.defaultChecked] - Default checked state (uncontrolled)\n * @param {Function} [props.onChange] - Change handler\n * @param {boolean} [props.disabled=false] - Disabled state\n * @param {string} [props.label] - Label text\n * @param {string} [props.className] - Additional classes\n */\nexport const Switch = forwardRef(({\n checked,\n defaultChecked,\n onChange,\n disabled = false,\n label,\n className = '',\n ...props\n}, ref) => {\n return (\n <div className={`form-switch ${className}`}>\n <input\n ref={ref}\n type=\"checkbox\"\n className=\"form-check-input\"\n role=\"switch\"\n checked={checked}\n defaultChecked={defaultChecked}\n onChange={onChange}\n disabled={disabled}\n {...props}\n />\n {label && <label className=\"form-check-label\">{label}</label>}\n </div>\n );\n});\n\nSwitch.displayName = 'Switch';\n","import React, { useState, useRef, forwardRef } from 'react';\n\n/**\n * InputOTP Component\n * One-time password input\n * \n * @param {Object} props\n * @param {number} [props.length=6] - Number of OTP digits\n * @param {Function} [props.onComplete] - Handler when all digits are entered\n * @param {Function} [props.onChange] - Change handler\n * @param {'numeric' | 'alphanumeric'} [props.type='numeric'] - Input type\n * @param {string} [props.className] - Additional classes\n */\nexport const InputOTP = forwardRef(({\n length = 6,\n onComplete,\n onChange,\n type = 'numeric',\n className = '',\n ...props\n}, ref) => {\n const [values, setValues] = useState(Array(length).fill(''));\n const inputRefs = useRef([]);\n\n const handleChange = (index, value) => {\n // Validate input based on type\n const isValid = type === 'numeric' ? /^\\d*$/.test(value) : /^[a-zA-Z0-9]*$/.test(value);\n if (!isValid) return;\n\n const newValues = [...values];\n newValues[index] = value.slice(-1); // Only take last character\n setValues(newValues);\n\n if (onChange) {\n onChange(newValues.join(''));\n }\n\n // Auto-focus next input\n if (value && index < length - 1) {\n inputRefs.current[index + 1]?.focus();\n }\n\n // Check if complete\n if (newValues.every(v => v !== '') && onComplete) {\n onComplete(newValues.join(''));\n }\n };\n\n const handleKeyDown = (index, e) => {\n if (e.key === 'Backspace' && !values[index] && index > 0) {\n inputRefs.current[index - 1]?.focus();\n }\n if (e.key === 'ArrowLeft' && index > 0) {\n inputRefs.current[index - 1]?.focus();\n }\n if (e.key === 'ArrowRight' && index < length - 1) {\n inputRefs.current[index + 1]?.focus();\n }\n };\n\n const handlePaste = (e) => {\n e.preventDefault();\n const pastedData = e.clipboardData.getData('text').slice(0, length);\n const newValues = pastedData.split('').concat(Array(length).fill('')).slice(0, length);\n setValues(newValues);\n\n if (onChange) {\n onChange(newValues.join(''));\n }\n\n if (newValues.every(v => v !== '') && onComplete) {\n onComplete(newValues.join(''));\n }\n };\n\n return (\n <div ref={ref} className={`input-otp ${className}`} {...props}>\n {values.map((value, index) => (\n <input\n key={index}\n ref={el => inputRefs.current[index] = el}\n type=\"text\"\n className=\"otp-input\"\n value={value}\n onChange={(e) => handleChange(index, e.target.value)}\n onKeyDown={(e) => handleKeyDown(index, e)}\n onPaste={index === 0 ? handlePaste : undefined}\n maxLength={1}\n />\n ))}\n </div>\n );\n});\n\nInputOTP.displayName = 'InputOTP';\n","import React, { useState, forwardRef } from 'react';\n\n/**\n * Accordion Component\n * Collapsible content panels\n * \n * @param {Object} props\n * @param {React.ReactNode} props.children - Accordion items\n * @param {string} [props.className] - Additional classes\n * @param {boolean} [props.alwaysOpen=false] - Allow multiple items open\n */\nexport const Accordion = forwardRef(({\n children,\n className = '',\n alwaysOpen = false,\n ...props\n}, ref) => {\n const [openItems, setOpenItems] = useState(new Set());\n\n const toggleItem = (index) => {\n setOpenItems(prev => {\n const newSet = new Set(alwaysOpen ? prev : []);\n if (prev.has(index)) {\n newSet.delete(index);\n } else {\n newSet.add(index);\n }\n return newSet;\n });\n };\n\n return (\n <div ref={ref} className={`accordion ${className}`} {...props}>\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n isOpen: openItems.has(index),\n onToggle: () => toggleItem(index)\n });\n }\n return child;\n })}\n </div>\n );\n});\n\nAccordion.displayName = 'Accordion';\n\n/**\n * AccordionItem Component\n */\nexport const AccordionItem = forwardRef(({\n title,\n children,\n isOpen,\n onToggle,\n className = '',\n ...props\n}, ref) => {\n const headerId = `accordion-header-${props.id || Math.random().toString(36).substr(2, 9)}`;\n const collapseId = `accordion-collapse-${props.id || Math.random().toString(36).substr(2, 9)}`;\n\n return (\n <div ref={ref} className={`accordion-item ${className}`} {...props}>\n <h2 className=\"accordion-header\" id={headerId}>\n <button\n className={`accordion-button ${!isOpen ? 'collapsed' : ''}`}\n type=\"button\"\n onClick={onToggle}\n aria-expanded={isOpen}\n aria-controls={collapseId}\n >\n {title}\n </button>\n </h2>\n <div\n id={collapseId}\n className={`accordion-collapse collapse ${isOpen ? 'show' : ''}`}\n aria-labelledby={headerId}\n >\n <div className=\"accordion-body\">\n {children}\n </div>\n </div>\n </div>\n );\n});\n\nAccordionItem.displayName = 'Accordion.Item';\n\nAccordion.Item = AccordionItem;\n","import React, { forwardRef } from 'react';\n\n/**\n * Navbar Component\n * Responsive navigation header\n * \n * @param {Object} props\n * @param {React.ReactNode} props.children - Navbar content\n * @param {'light' | 'dark'} [props.variant='light'] - Color variant\n * @param {string} [props.bg] - Background color\n * @param {boolean} [props.expand='lg'] - Breakpoint for collapse\n * @param {string} [props.className] - Additional classes\n */\nexport const Navbar = forwardRef(({\n children,\n variant = 'light',\n bg,\n expand = 'lg',\n className = '',\n ...props\n}, ref) => {\n const bgClass = bg ? `bg-${bg}` : '';\n const expandClass = expand ? `navbar-expand-${expand}` : '';\n\n return (\n <nav\n ref={ref}\n className={`navbar navbar-${variant} ${bgClass} ${expandClass} ${className}`}\n {...props}\n >\n {children}\n </nav>\n );\n});\n\nNavbar.displayName = 'Navbar';\n\nexport const NavbarBrand = forwardRef(({ children, href = '#', className = '', ...props }, ref) => (\n <a ref={ref} className={`navbar-brand ${className}`} href={href} {...props}>\n {children}\n </a>\n));\n\nNavbarBrand.displayName = 'Navbar.Brand';\n\nexport const NavbarToggle = forwardRef(({ onClick, className = '', ...props }, ref) => (\n <button\n ref={ref}\n className={`navbar-toggler ${className}`}\n type=\"button\"\n onClick={onClick}\n aria-label=\"Toggle navigation\"\n {...props}\n >\n <span className=\"navbar-toggler-icon\"></span>\n </button>\n));\n\nNavbarToggle.displayName = 'Navbar.Toggle';\n\nexport const NavbarCollapse = forwardRef(({ children, isOpen, className = '', ...props }, ref) => (\n <div\n ref={ref}\n className={`collapse navbar-collapse ${isOpen ? 'show' : ''} ${className}`}\n {...props}\n >\n {children}\n </div>\n));\n\nNavbarCollapse.displayName = 'Navbar.Collapse';\n\nexport const NavbarNav = forwardRef(({ children, className = '', ...props }, ref) => (\n <ul ref={ref} className={`navbar-nav ${className}`} {...props}>\n {children}\n </ul>\n));\n\nNavbarNav.displayName = 'Navbar.Nav';\n\nNavbar.Brand = NavbarBrand;\nNavbar.Toggle = NavbarToggle;\nNavbar.Collapse = NavbarCollapse;\nNavbar.Nav = NavbarNav;\n","import React, { forwardRef } from 'react';\n\n/**\n * Pagination Component\n * Page navigation\n * \n * @param {Object} props\n * @param {number} props.currentPage - Current active page\n * @param {number} props.totalPages - Total number of pages\n * @param {Function} props.onPageChange - Page change handler\n * @param {number} [props.maxVisible=5] - Maximum visible page numbers\n * @param {string} [props.size] - Size variant ('sm' | 'lg')\n * @param {string} [props.className] - Additional classes\n */\nexport const Pagination = forwardRef(({\n currentPage,\n totalPages,\n onPageChange,\n maxVisible = 5,\n size,\n className = '',\n ...props\n}, ref) => {\n const sizeClass = size ? `pagination-${size}` : '';\n\n const getPageNumbers = () => {\n const pages = [];\n let startPage = Math.max(1, currentPage - Math.floor(maxVisible / 2));\n let endPage = Math.min(totalPages, startPage + maxVisible - 1);\n\n if (endPage - startPage < maxVisible - 1) {\n startPage = Math.max(1, endPage - maxVisible + 1);\n }\n\n for (let i = startPage; i <= endPage; i++) {\n pages.push(i);\n }\n return pages;\n };\n\n return (\n <nav ref={ref} aria-label=\"Page navigation\" {...props}>\n <ul className={`pagination ${sizeClass} ${className}`}>\n <li className={`page-item ${currentPage === 1 ? 'disabled' : ''}`}>\n <button\n className=\"page-link\"\n onClick={() => onPageChange(currentPage - 1)}\n disabled={currentPage === 1}\n >\n Previous\n </button>\n </li>\n\n {getPageNumbers().map(page => (\n <li key={page} className={`page-item ${page === currentPage ? 'active' : ''}`}>\n <button\n className=\"page-link\"\n onClick={() => onPageChange(page)}\n aria-current={page === currentPage ? 'page' : undefined}\n >\n {page}\n </button>\n </li>\n ))}\n\n <li className={`page-item ${currentPage === totalPages ? 'disabled' : ''}`}>\n <button\n className=\"page-link\"\n onClick={() => onPageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n >\n Next\n </button>\n </li>\n </ul>\n </nav>\n );\n});\n\nPagination.displayName = 'Pagination';\n","import React, { forwardRef } from 'react';\n\n/**\n * Spinner Component\n * Loading spinner\n * \n * @param {Object} props\n * @param {'sm' | 'md' | 'lg'} [props.size='md'] - Spinner size\n * @param {'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark'} [props.variant='primary'] - Spinner color variant\n * @param {string} [props.className] - Additional classes\n */\nexport const Spinner = forwardRef(({\n size = 'md',\n variant = 'primary',\n className = '',\n ...props\n}, ref) => {\n return (\n <div\n ref={ref}\n className={`spinner spinner-${size} spinner-${variant} ${className}`}\n role=\"status\"\n {...props}\n >\n <div className=\"spinner-circle\"></div>\n <span className=\"visually-hidden\">Loading...</span>\n </div>\n );\n});\n\nSpinner.displayName = 'Spinner';\n","import React from 'react';\n// import './Stat.css';\n\n/**\n * Stat Component - Display statistics and key metrics\n * \n * @param {string} title - The stat title/label\n * @param {string|number} value - The main stat value\n * @param {string} description - Optional description or change indicator\n * @param {string} descClass - CSS class for description (positive/negative)\n * @param {string} icon - Optional icon (emoji or text)\n * @param {string} iconBg - Background color for icon\n * @param {boolean} compact - Use compact variant\n * @param {number} progress - Progress percentage (0-100)\n * @param {string} target - Target value for progress variant\n * @param {number} change - Percentage change for compact variant\n * @param {string} className - Additional CSS classes\n */\nexport function Stat({\n title,\n value,\n description,\n descClass = '',\n icon,\n iconBg,\n compact = false,\n progress,\n target,\n change,\n className = '',\n ...props\n}) {\n const statClasses = ['stat'];\n if (compact) statClasses.push('stat-compact');\n if (className) statClasses.push(className);\n\n return (\n <div className={statClasses.join(' ')} {...props}>\n {icon && (\n <div className=\"stat-icon\" style={{ backgroundColor: iconBg }}>\n {icon}\n </div>\n )}\n\n <div className=\"stat-title\">{title}</div>\n <div className=\"stat-value\">{value}</div>\n\n {description && (\n <div className={`stat-desc ${descClass}`.trim()}>{description}</div>\n )}\n\n {compact && change !== undefined && (\n <span className={`stat-badge ${change > 0 ? 'success' : 'danger'}`}>\n {change > 0 ? '↗' : '↘'} {Math.abs(change)}%\n </span>\n )}\n\n {progress !== undefined && (\n <>\n {target && <div className=\"stat-desc\">Target: {target}</div>}\n <div className=\"stat-progress\">\n <div className=\"stat-progress-bar\" style={{ width: `${progress}%` }}></div>\n </div>\n </>\n )}\n </div>\n );\n}\n\n/**\n * StatGroup Component - Display multiple stats in a grid\n * \n * @param {Array} stats - Array of stat objects\n * @param {number} columns - Number of columns (2, 3, or 4)\n */\nexport function StatGroup({ stats, columns = 4, className = '', ...props }) {\n const colClass = columns === 2 ? 'col-md-6' : columns === 3 ? 'col-md-4' : 'col-md-3';\n\n return (\n <div className={`row g-3 ${className}`.trim()} {...props}>\n {stats.map((stat, index) => (\n <div key={index} className={colClass}>\n <Stat {...stat} />\n </div>\n ))}\n </div>\n );\n}\n\nexport default Stat;\n","import React from 'react';\n// import './Breadcrumb.css';\n\nexport function Breadcrumb({\n items = [],\n separator = '/',\n className = '',\n ...props\n}) {\n return (\n <nav aria-label=\"breadcrumb\" className={className} {...props}>\n <ol className=\"breadcrumb\">\n {items.map((item, index) => (\n <Breadcrumb.Item\n key={index}\n active={index === items.length - 1}\n href={item.href}\n >\n {item.label}\n </Breadcrumb.Item>\n ))}\n </ol>\n </nav>\n );\n}\n\nBreadcrumb.Item = function BreadcrumbItem({\n children,\n active = false,\n href,\n className = '',\n ...props\n}) {\n const itemClasses = ['breadcrumb-item', active ? 'active' : '', className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <li className={itemClasses} aria-current={active ? 'page' : undefined} {...props}>\n {active || !href ? (\n children\n ) : (\n <a href={href}>{children}</a>\n )}\n </li>\n );\n};\n","import React from 'react';\n// import './ListGroup.css';\n\nexport function ListGroup({\n flush = false,\n numbered = false,\n horizontal = false,\n children,\n className = '',\n ...props\n}) {\n const Tag = numbered ? 'ol' : 'ul';\n\n const listClasses = [\n 'list-group',\n flush ? 'list-group-flush' : '',\n numbered ? 'list-group-numbered' : '',\n horizontal ? 'list-group-horizontal' : '',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <Tag className={listClasses} {...props}>\n {children}\n </Tag>\n );\n}\n\nListGroup.Item = function ListGroupItem({\n active = false,\n disabled = false,\n variant,\n action = false,\n href,\n children,\n className = '',\n ...props\n}) {\n const Tag = href ? 'a' : 'li';\n\n const itemClasses = [\n 'list-group-item',\n active ? 'active' : '',\n disabled ? 'disabled' : '',\n action || href ? 'list-group-item-action' : '',\n variant ? `list-group-item-${variant}` : '',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <Tag\n className={itemClasses}\n href={href}\n aria-current={active ? 'true' : undefined}\n aria-disabled={disabled ? 'true' : undefined}\n {...props}\n >\n {children}\n </Tag>\n );\n};\n","import React from 'react';\n// import './Avatar.css';\n\nexport function Avatar({\n src,\n alt = 'Avatar',\n size = 'md',\n shape = 'circle',\n fallback,\n status,\n className = '',\n ...props\n}) {\n const [imageError, setImageError] = React.useState(false);\n\n const avatarClasses = [\n 'avatar',\n `avatar-${size}`,\n `avatar-${shape}`,\n status ? `avatar-status-${status}` : '',\n className\n ].filter(Boolean).join(' ');\n\n const showFallback = !src || imageError;\n\n return (\n <div className={avatarClasses} {...props}>\n {showFallback ? (\n <span className=\"avatar-fallback\">\n {fallback || alt?.charAt(0)?.toUpperCase() || '?'}\n </span>\n ) : (\n <img\n src={src}\n alt={alt}\n onError={() => setImageError(true)}\n className=\"avatar-img\"\n />\n )}\n {status && <span className=\"avatar-status\"></span>}\n </div>\n );\n}\n","import React from 'react';\n// import './Badge.css';\n\nexport function Badge({\n variant = 'primary',\n pill = false,\n children,\n className = '',\n ...props\n}) {\n const badgeClasses = [\n 'badge',\n `bg-${variant}`,\n pill ? 'rounded-pill' : '',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <span className={badgeClasses} {...props}>\n {children}\n </span>\n );\n}\n","import React from 'react';\n\n/**\n * Box component - generic wrapper for spacing and display utilities\n * @param {number|string} m - Margin (all sides)\n * @param {number|string} mt - Margin top\n * @param {number|string} mb - Margin bottom\n * @param {number|string} ml - Margin left (start)\n * @param {number|string} mr - Margin right (end)\n * @param {number|string} mx - Margin horizontal (left and right)\n * @param {number|string} my - Margin vertical (top and bottom)\n * @param {number|string} p - Padding (all sides)\n * @param {number|string} pt - Padding top\n * @param {number|string} pb - Padding bottom\n * @param {number|string} pl - Padding left (start)\n * @param {number|string} pr - Padding right (end)\n * @param {number|string} px - Padding horizontal (left and right)\n * @param {number|string} py - Padding vertical (top and bottom)\n * @param {string} d - Display: 'none', 'inline', 'inline-block', 'block', 'grid', 'table', 'table-cell', 'table-row', 'flex', 'inline-flex'\n * @param {string} flex - Flex direction: 'row', 'column', 'row-reverse', 'column-reverse'\n * @param {string} justify - Justify content: 'start', 'end', 'center', 'between', 'around', 'evenly'\n * @param {string} align - Align items: 'start', 'end', 'center', 'baseline', 'stretch'\n * @param {string} gap - Gap between flex/grid items: '0', '1', '2', '3', '4', '5'\n * @param {string} as - HTML element to render (default: 'div')\n * @param {string} className - Additional CSS classes\n * @param {React.ReactNode} children - Child elements\n */\nconst Box = ({\n m, mt, mb, ml, mr, mx, my,\n p, pt, pb, pl, pr, px, py,\n d, flex, justify, align, gap,\n as: Component = 'div',\n className = '',\n children,\n ...props\n}) => {\n const boxClasses = [];\n\n // Margin utilities\n if (m !== undefined) boxClasses.push(`m-${m}`);\n if (mt !== undefined) boxClasses.push(`mt-${mt}`);\n if (mb !== undefined) boxClasses.push(`mb-${mb}`);\n if (ml !== undefined) boxClasses.push(`ms-${ml}`); // Bootstrap 5 uses 'start' instead of 'left'\n if (mr !== undefined) boxClasses.push(`me-${mr}`); // Bootstrap 5 uses 'end' instead of 'right'\n if (mx !== undefined) boxClasses.push(`mx-${mx}`);\n if (my !== undefined) boxClasses.push(`my-${my}`);\n\n // Padding utilities\n if (p !== undefined) boxClasses.push(`p-${p}`);\n if (pt !== undefined) boxClasses.push(`pt-${pt}`);\n if (pb !== undefined) boxClasses.push(`pb-${pb}`);\n if (pl !== undefined) boxClasses.push(`ps-${pl}`);\n if (pr !== undefined) boxClasses.push(`pe-${pr}`);\n if (px !== undefined) boxClasses.push(`px-${px}`);\n if (py !== undefined) boxClasses.push(`py-${py}`);\n\n // Display utilities\n if (d) boxClasses.push(`d-${d}`);\n if (flex) boxClasses.push(`flex-${flex}`);\n if (justify) boxClasses.push(`justify-content-${justify}`);\n if (align) boxClasses.push(`align-items-${align}`);\n if (gap) boxClasses.push(`gap-${gap}`);\n\n const classes = `${boxClasses.join(' ')} ${className}`.trim();\n\n return (\n <Component className={classes} {...props}>\n {children}\n </Component>\n );\n};\n\nexport default Box;\n","import React from 'react';\n// import './ButtonGroup.css';\n\nexport function ButtonGroup({\n vertical = false,\n size,\n children,\n className = '',\n ...props\n}) {\n const groupClasses = [\n vertical ? 'btn-group-vertical' : 'btn-group',\n size ? `btn-group-${size}` : '',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <div className={groupClasses} role=\"group\" {...props}>\n {children}\n </div>\n );\n}\n","import React from 'react';\n// // import './Checkbox.css'; // CSS handled by main stylesheet\n\nexport function Checkbox({\n id,\n label,\n checked,\n indeterminate = false,\n disabled = false,\n onChange,\n className = '',\n ...props\n}) {\n const checkboxRef = React.useRef(null);\n\n React.useEffect(() => {\n if (checkboxRef.current) {\n checkboxRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n return (\n <div className={`form-check ${className}`}>\n <input\n ref={checkboxRef}\n type=\"checkbox\"\n className=\"form-check-input\"\n id={id}\n checked={checked}\n disabled={disabled}\n onChange={onChange}\n {...props}\n />\n {label && (\n <label className=\"form-check-label\" htmlFor={id}>\n {label}\n </label>\n )}\n </div>\n );\n}\n","import React from 'react';\n\n/**\n * Col component - wrapper for Bootstrap grid columns\n * @param {number|string} xs - Column width for xs breakpoint\n * @param {number|string} sm - Column width for sm breakpoint\n * @param {number|string} md - Column width for md breakpoint\n * @param {number|string} lg - Column width for lg breakpoint\n * @param {number|string} xl - Column width for xl breakpoint\n * @param {string} className - Additional CSS classes\n * @param {React.ReactNode} children - Child elements\n */\nconst Col = ({\n xs,\n sm,\n md,\n lg,\n xl,\n className = '',\n children,\n ...props\n}) => {\n const colClasses = [];\n\n // Build column classes\n if (xs) colClasses.push(xs === 'auto' ? 'col-auto' : `col-${xs}`);\n if (sm) colClasses.push(sm === 'auto' ? 'col-sm-auto' : `col-sm-${sm}`);\n if (md) colClasses.push(md === 'auto' ? 'col-md-auto' : `col-md-${md}`);\n if (lg) colClasses.push(lg === 'auto' ? 'col-lg-auto' : `col-lg-${lg}`);\n if (xl) colClasses.push(xl === 'auto' ? 'col-xl-auto' : `col-xl-${xl}`);\n\n // If no breakpoint specified, use default col\n if (colClasses.length === 0) {\n colClasses.push('col');\n }\n\n const classes = `${colClasses.join(' ')} ${className}`.trim();\n\n return (\n <div className={classes} {...props}>\n {children}\n </div>\n );\n};\n\nexport default Col;\n","import React from 'react';\n// import './Input.css';\n\nexport function Input({\n type = 'text',\n size,\n isValid,\n isInvalid,\n plaintext = false,\n readOnly = false,\n disabled = false,\n className = '',\n ...props\n}) {\n const inputClasses = [\n plaintext ? 'form-control-plaintext' : 'form-control',\n size ? `form-control-${size}` : '',\n isValid ? 'is-valid' : '',\n isInvalid ? 'is-invalid' : '',\n className\n ].filter(Boolean).join(' ');\n\n return (\n <input\n type={type}\n className={inputClasses}\n readOnly={readOnly || plaintext}\n disabled={disabled}\n {...props}\n />\n );\n}\n\nexport function Textarea({\n rows = 3,\n size,\n isValid,\n isInvalid,\n autoResize = false,\n className = '',\n ...props\n}) {\n const textareaRef = React.useRef(null);\n\n const textareaClasses = [\n 'form-control',\n size ? `form-control-${size}` : '',\n isValid ? 'is-valid' : '',\n isInvalid ? 'is-invalid' : '',\n className\n ].filter(Boolean).join(' ');\n\n React.useEffect(() => {\n if (autoResize && textareaRef.current) {\n const adjustHeight = () => {\n const textarea = textareaRef.current;\n if (textarea) {\n textarea.style.height = 'auto';\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n };\n\n adjustHeight();\n textareaRef.current.addEventListener('input', adjustHeight);\n\n return () => {\n textareaRef.current?.removeEventListener('input', adjustHeight);\n };\n }\n }, [autoResize]);\n\n return (\n <textarea\n ref={textareaRef}\n rows={rows}\n className={textareaClasses}\n {...props}\n />\n );\n}\n","import React from 'react';\n// import './Progress.css';\n\nexport function Progress({\n value = 0,\n max = 100,\n variant = 'primary',\n striped = false,\n animated = false,\n label,\n showValue = false,\n className = '',\n ...props\n}) {\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\n\n const progressBarClasses = [\n 'progress-bar',\n `bg-${variant}`,\n striped || animated ? 'progress-bar-striped' : '',\n animated ? 'progress-bar-animated' : '',\n ].filter(Boolean).join(' ');\n\n return (\n <div className={`progress ${className}`} {...props}>\n <div\n className={progressBarClasses}\n role=\"progressbar\"\n style={{ width: `${percentage}%` }}\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n >\n {label || (showValue && `${Math.round(percentage)}%`)}\n </div>\n </div>\n );\n}\n","import React from 'react';\n// import './Radio.css';\n\nexport function Radio({\n id,\n name,\n label,\n value,\n checked,\n disabled = false,\n onChange,\n className = '',\n ...props\n}) {\n return (\n <div className={`form-check ${className}`}>\n <input\n type=\"radio\"\n className=\"form-check-input\"\n id={id}\n name={name}\n value={value}\n checked={checked}\n disabled={disabled}\n onChange={onChange}\n {...props}\n />\n {label && (\n <label className=\"form-check-label\" htmlFor={id}>\n {label}\n </label>\n )}\n </div>\n );\n}\n","import React from 'react';\n\n/**\n * Row component - wrapper for Bootstrap row\n * @param {string} className - Additional CSS classes\n * @param {React.ReactNode} children - Child elements\n */\nconst Row = ({ className = '', children, ...props }) => {\n const classes = `row ${className}`.trim();\n\n return (\n <div className={classes} {...props}>\n {children}\n </div>\n );\n};\n\nexport default Row;\n","import React from 'react';\n\n/**\n * Text component - wrapper for text utilities\n * @param {string} align - Text alignment: 'start', 'center', 'end'\n * @param {string} transform - Text transform: 'lowercase', 'uppercase', 'capitalize'\n * @param {string} color - Text color: 'primary', 'secondary', 'success', 'danger', 'warning', 'info', 'light', 'dark', 'muted'\n * @param {string} size - Font size: '1', '2', '3', '4', '5', '6'\n * @param {string} weight - Font weight: 'bold', 'bolder', 'normal', 'light', 'lighter'\n * @param {string} as - HTML element to render (default: 'p')\n * @param {string} className - Additional CSS classes\n * @param {React.ReactNode} children - Child elements\n */\nconst Text = ({\n align,\n transform,\n color,\n size,\n weight,\n as: Component = 'p',\n className = '',\n children,\n ...props\n}) => {\n const textClasses = [];\n\n if (align) textClasses.push(`text-${align}`);\n if (transform) textClasses.push(`text-${transform}`);\n if (color) textClasses.push(`text-${color}`);\n if (size) textClasses.push(`fs-${size}`);\n if (weight) textClasses.push(`fw-${weight}`);\n\n const classes = `${textClasses.join(' ')} ${className}`.trim();\n\n return (\n <Component className={classes} {...props}>\n {children}\n </Component>\n );\n};\n\nexport default Text;\n","// Core Components\nexport { Button } from './components/Button';\nexport { Alert } from './components/Alert';\nexport { Card, CardBody, CardHeader, CardFooter } from './components/Card';\n\n// Interactive Components\nexport { Modal } from './components/Modal';\nexport { Dropdown, DropdownItem, DropdownDivider } from './components/Dropdown';\nexport { Tooltip } from './components/Tooltip';\nexport { Collapse } from './components/Collapse';\nexport { Tabs, TabPane } from './components/Tabs';\nexport { Toaster, toast, useToast } from './components/Sonner';\nexport { Toast } from './components/Toast';\nexport { Timeline } from './components/Timeline';\n\n// Layout Components\nexport { default as Container } from './components/Container';\nexport { default as Row } from './components/Row';\nexport { default as Col } from './components/Col';\n\n// Utility Components\nexport { default as Text } from './components/Text';\nexport { default as Box } from './components/Box';\nexport { Offcanvas } from './components/Offcanvas';\nexport { Carousel, CarouselItem } from './components/Carousel';\nexport { Popover } from './components/Popover';\nexport { Scrollspy } from './components/Scrollspy';\n\n// Form Components\nexport { Select } from './components/Select';\nexport { FileUpload } from './components/FileUpload';\nexport { NumberInput } from './components/NumberInput';\nexport { Slider } from './components/Slider';\nexport { Switch } from './components/Switch';\nexport { InputOTP } from './components/InputOTP';\nexport { Checkbox } from './components/Checkbox';\nexport { Radio } from './components/Radio';\nexport { Input, Textarea } from './components/Input';\n\n// Display Components\nexport { Accordion, AccordionItem } from './components/Accordion';\nexport { Navbar, NavbarBrand, NavbarToggle, NavbarCollapse, NavbarNav } from './components/Navbar';\nexport { Pagination } from './components/Pagination';\nexport { Spinner } from './components/Spinner';\nexport { Stat, StatGroup } from './components/Stat';\nexport { Badge } from './components/Badge';\nexport { Avatar } from './components/Avatar';\nexport { Breadcrumb } from './components/Breadcrumb';\nexport { Progress } from './components/Progress';\nexport { ButtonGroup } from './components/ButtonGroup';\nexport { ListGroup } from './components/ListGroup';\n\n// Version\nexport const version = '1.0.5';\n"],"names":["Button","React","forwardRef","children","variant","size","outline","disabled","loading","type","className","onClick","props","ref","classes","filter","Boolean","join","createElement","role","displayName","Alert","dismissible","show","onClose","autoClose","internalShow","setInternalShow","useState","isVisible","handleClose","useCallback","useEffect","timer","setTimeout","Card","hoverable","bodyClassName","CardBody","CardHeader","CardFooter","Body","Header","Footer","Dropdown","trigger","isOpen","onToggle","align","internalOpen","setInternalOpen","dropdownRef","useRef","open","handleClickOutside","e","current","contains","target","document","addEventListener","removeEventListener","handleToggle","newState","onKeyDown","key","focus","tabIndex","DropdownItem","DropdownDivider","Item","Divider","Tooltip","content","placement","setIsVisible","tooltipRef","tooltipId","Math","random","toString","substr","onMouseEnter","onMouseLeave","onFocus","onBlur","id","Collapse","defaultOpen","collapseId","Tabs","activeTab","defaultActiveTab","onTabChange","internalActiveTab","setInternalActiveTab","currentTab","tabs","Children","toArray","map","tab","index","isActive","tabId","paneId","handleTabClick","title","hidden","TabPane","Pane","ToastContext","createContext","toastId","ToastItem","toast","richColors","closeButton","icons","success","width","height","viewBox","fill","fillRule","d","clipRule","error","warning","info","cx","cy","r","stroke","strokeWidth","strokeLinecap","strokeDasharray","strokeDashoffset","variantClass","richColorClass","style","description","message","strokeLinejoin","action","label","Object","assign","options","window","event","CustomEvent","detail","dispatchEvent","duration","Infinity","promise","then","data","catch","toastEvent","Toast","autoHide","position","clearTimeout","positionClass","toastContent","createPortal","body","Timeline","active","completed","animated","Date","Title","Text","Content","Offcanvas","backdrop","classList","add","remove","offcanvasContent","Carousel","activeIndex","onSlide","controls","indicators","interval","items","internalIndex","setInternalIndex","currentIndex","setInterval","handleNext","clearInterval","handleSlide","newIndex","length","_","item","Fragment","CarouselItem","Popover","popoverRef","handleTrigger","popoverId","Scrollspy","targets","onActiveChange","offset","activeId","setActiveId","handleScroll","scrollPosition","scrollY","i","element","getElementById","offsetTop","child","isValidElement","cloneElement","Select","value","defaultValue","onChange","placeholder","searchable","setIsOpen","selectedValue","setSelectedValue","searchTerm","setSearchTerm","selectRef","currentValue","selectedOption","find","opt","handleSelect","option","filteredOptions","toLowerCase","includes","stopPropagation","FileUpload","onFileSelect","multiple","accept","maxSize","isDragging","setIsDragging","files","setFiles","inputRef","handleFiles","fileList","validFiles","Array","from","file","handleClick","click","onDragOver","preventDefault","onDragLeave","onDrop","dataTransfer","display","name","toFixed","NumberInput","min","max","step","internalValue","setInternalValue","handleChange","newValue","validValue","parseFloat","Slider","showValue","Switch","checked","defaultChecked","InputOTP","onComplete","values","setValues","inputRefs","handlePaste","newValues","clipboardData","getData","slice","split","concat","every","v","el","test","handleKeyDown","onPaste","maxLength","Accordion","alwaysOpen","openItems","setOpenItems","Set","has","prev","newSet","delete","toggleItem","AccordionItem","headerId","Navbar","bg","expand","bgClass","expandClass","NavbarBrand","href","NavbarToggle","NavbarCollapse","NavbarNav","Brand","Toggle","Nav","Pagination","currentPage","totalPages","onPageChange","maxVisible","sizeClass","pages","startPage","floor","endPage","push","getPageNumbers","page","Spinner","Stat","descClass","icon","iconBg","compact","progress","change","statClasses","backgroundColor","trim","abs","Breadcrumb","separator","ListGroup","flush","numbered","horizontal","Tag","listClasses","itemClasses","src","alt","shape","fallback","status","imageError","setImageError","avatarClasses","showFallback","charAt","toUpperCase","onError","pill","badgeClasses","m","mt","mb","ml","mr","mx","my","p","pt","pb","pl","pr","px","py","flex","justify","gap","as","Component","boxClasses","vertical","groupClasses","indeterminate","checkboxRef","htmlFor","xs","sm","md","lg","xl","colClasses","fluid","isValid","isInvalid","plaintext","readOnly","inputClasses","footer","keyboard","centered","mounted","setMounted","modalContent","striped","percentage","progressBarClasses","round","stats","columns","colClass","stat","transform","color","weight","textClasses","rows","autoResize","textareaRef","textareaClasses","adjustHeight","textarea","scrollHeight","toasts","setToasts","addToast","newToast","createdAt","now","removeToast","t","Provider","context","useContext","Error"],"mappings":"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"}
|