@amelharrak/eldo-ui 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +111 -0
- package/dist/css/eldo.css +11683 -0
- package/dist/css/eldo.css.map +1 -0
- package/dist/css/eldo.min.css +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.mjs +64 -0
- package/dist/index.mjs.map +1 -0
- package/dist/types/__tests__/Alert.test.d.ts +1 -0
- package/dist/types/__tests__/Button.test.d.ts +1 -0
- package/dist/types/__tests__/Modal.test.d.ts +1 -0
- package/dist/types/components/Accordion.d.ts +15 -0
- package/dist/types/components/Alert.d.ts +15 -0
- package/dist/types/components/Avatar.d.ts +10 -0
- package/dist/types/components/Badge.d.ts +7 -0
- package/dist/types/components/Box.d.ts +27 -0
- package/dist/types/components/Breadcrumb.d.ts +15 -0
- package/dist/types/components/Button.d.ts +16 -0
- package/dist/types/components/ButtonGroup.d.ts +7 -0
- package/dist/types/components/Card.d.ts +15 -0
- package/dist/types/components/Carousel.d.ts +21 -0
- package/dist/types/components/Checkbox.d.ts +10 -0
- package/dist/types/components/Col.d.ts +12 -0
- package/dist/types/components/Collapse.d.ts +12 -0
- package/dist/types/components/Container.d.ts +8 -0
- package/dist/types/components/Dropdown.d.ts +19 -0
- package/dist/types/components/FileUpload.d.ts +13 -0
- package/dist/types/components/Input.d.ts +20 -0
- package/dist/types/components/InputOTP.d.ts +13 -0
- package/dist/types/components/ListGroup.d.ts +20 -0
- package/dist/types/components/Modal.d.ts +13 -0
- package/dist/types/components/Navbar.d.ts +17 -0
- package/dist/types/components/NumberInput.d.ts +15 -0
- package/dist/types/components/Offcanvas.d.ts +15 -0
- package/dist/types/components/Pagination.d.ts +14 -0
- package/dist/types/components/Popover.d.ts +14 -0
- package/dist/types/components/Progress.d.ts +11 -0
- package/dist/types/components/Radio.d.ts +11 -0
- package/dist/types/components/Row.d.ts +7 -0
- package/dist/types/components/Scrollspy.d.ts +13 -0
- package/dist/types/components/Select.d.ts +16 -0
- package/dist/types/components/Slider.d.ts +16 -0
- package/dist/types/components/Sonner.d.ts +21 -0
- package/dist/types/components/Spinner.d.ts +11 -0
- package/dist/types/components/Stat.d.ts +24 -0
- package/dist/types/components/Switch.d.ts +14 -0
- package/dist/types/components/Tabs.d.ts +20 -0
- package/dist/types/components/Text.d.ts +13 -0
- package/dist/types/components/Timeline.d.ts +41 -0
- package/dist/types/components/Toast.d.ts +17 -0
- package/dist/types/components/Tooltip.d.ts +12 -0
- package/dist/types/index.d.ts +40 -0
- package/package.json +106 -0
- package/setup.js +260 -0
- package/src/scss/abstracts/_functions.scss +19 -0
- package/src/scss/abstracts/_mixins.scss +33 -0
- package/src/scss/abstracts/_variables.scss +119 -0
- package/src/scss/base/_reset.scss +24 -0
- package/src/scss/base/_transitions.scss +10 -0
- package/src/scss/base/_typography.scss +50 -0
- package/src/scss/components/_accordion.scss +238 -0
- package/src/scss/components/_alert.scss +85 -0
- package/src/scss/components/_alerts.scss +137 -0
- package/src/scss/components/_avatar.scss +184 -0
- package/src/scss/components/_badge.scss +70 -0
- package/src/scss/components/_blockquote.scss +41 -0
- package/src/scss/components/_breadcrumb.scss +39 -0
- package/src/scss/components/_button-group.scss +43 -0
- package/src/scss/components/_button.scss +92 -0
- package/src/scss/components/_buttons.scss +66 -0
- package/src/scss/components/_calendar.scss +520 -0
- package/src/scss/components/_card.scss +52 -0
- package/src/scss/components/_cards.scss +123 -0
- package/src/scss/components/_carousel.scss +490 -0
- package/src/scss/components/_charts.scss +29 -0
- package/src/scss/components/_checkbox.scss +194 -0
- package/src/scss/components/_code.scss +70 -0
- package/src/scss/components/_collapse.scss +13 -0
- package/src/scss/components/_combobox.scss +239 -0
- package/src/scss/components/_date-picker.scss +102 -0
- package/src/scss/components/_divider.scss +55 -0
- package/src/scss/components/_dropdown.scss +122 -0
- package/src/scss/components/_file-upload.scss +233 -0
- package/src/scss/components/_floating-labels.scss +247 -0
- package/src/scss/components/_form-select.scss +49 -0
- package/src/scss/components/_forms.scss +41 -0
- package/src/scss/components/_index.scss +7 -0
- package/src/scss/components/_input-otp.scss +338 -0
- package/src/scss/components/_list-group.scss +95 -0
- package/src/scss/components/_modal.scss +166 -0
- package/src/scss/components/_nav.scss +175 -0
- package/src/scss/components/_navbar.scss +228 -0
- package/src/scss/components/_number-input.scss +67 -0
- package/src/scss/components/_offcanvas.scss +123 -0
- package/src/scss/components/_pagination.scss +64 -0
- package/src/scss/components/_placeholders.scss +52 -0
- package/src/scss/components/_popovers.scss +69 -0
- package/src/scss/components/_progress.scss +90 -0
- package/src/scss/components/_range.scss +82 -0
- package/src/scss/components/_scrollspy.scss +239 -0
- package/src/scss/components/_skeleton.scss +108 -0
- package/src/scss/components/_slider.scss +95 -0
- package/src/scss/components/_snippet.scss +79 -0
- package/src/scss/components/_spinners.scss +137 -0
- package/src/scss/components/_stat.scss +42 -0
- package/src/scss/components/_stepper.scss +104 -0
- package/src/scss/components/_switch.scss +57 -0
- package/src/scss/components/_table.scss +109 -0
- package/src/scss/components/_tag.scss +60 -0
- package/src/scss/components/_tags-input.scss +60 -0
- package/src/scss/components/_timeline.scss +238 -0
- package/src/scss/components/_toasts.scss +75 -0
- package/src/scss/components/_tooltips.scss +50 -0
- package/src/scss/components/_tree-view.scss +72 -0
- package/src/scss/components/_user.scss +26 -0
- package/src/scss/docs/_examples.scss +148 -0
- package/src/scss/docs/_layout.scss +251 -0
- package/src/scss/docs/_search.scss +141 -0
- package/src/scss/eldo.scss +74 -0
- package/src/scss/layout/_container.scss +37 -0
- package/src/scss/layout/_grid.scss +49 -0
- package/src/scss/pages/_landing-config.scss +135 -0
- package/src/scss/pages/_landing-features-enhanced.scss +165 -0
- package/src/scss/pages/_landing-hero-enhanced.scss +427 -0
- package/src/scss/pages/_landing-setup.scss +264 -0
- package/src/scss/pages/_landing.scss +1828 -0
- package/src/scss/utilities/_api.scss +66 -0
- package/src/scss/utilities/_colors.scss +32 -0
- package/src/scss/utilities/_display.scss +70 -0
- package/src/scss/utilities/_glass.scss +32 -0
- package/src/scss/utilities/_helpers.scss +16 -0
- package/src/scss/utilities/_map.scss +224 -0
- package/src/scss/utilities/_spacing.scss +58 -0
|
@@ -0,0 +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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"}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import e,{forwardRef as a,useState as t,useCallback as n,useEffect as l,useRef as s,createContext as r}from"react";import{createPortal as o}from"react-dom";const c=e.forwardRef(({children:a,variant:t="primary",size:n,outline:l=!1,disabled:s=!1,loading:r=!1,type:o="button",className:c="",onClick:i,...m},d)=>{const u=["btn",l?`btn-outline-${t}`:`btn-${t}`,n?`btn-${n}`:"",c].filter(Boolean).join(" ");/* @__PURE__ */
|
|
2
|
+
return e.createElement("button",{ref:d,type:o,className:u,disabled:s||r,onClick:i,...m},r&&/* @__PURE__ */e.createElement("span",{className:"spinner-border spinner-border-sm me-2",role:"status","aria-hidden":"true"}),a)});c.displayName="Button";const i=a(({children:a,variant:s="primary",dismissible:r=!1,show:o,onClose:c,autoClose:i=!1,className:m="",...d},u)=>{const[p,v]=t(!0),h=void 0!==o?o:p,N=n(()=>{void 0===o&&v(!1),c&&c()},[o,c]);return l(()=>{let e;return h&&i&&(e=setTimeout(()=>{N()},"number"==typeof i?i:5e3)),()=>{e&&clearTimeout(e)}},[h,i,N]),h?/* @__PURE__ */e.createElement("div",{ref:u,className:`alert alert-${s} ${r?"alert-dismissible":""} ${m}`,role:"alert",...d},a,r&&/* @__PURE__ */e.createElement("button",{type:"button",className:"btn-close","aria-label":"Close",onClick:N})):null});i.displayName="Alert";const m=a(({children:a,hoverable:t=!1,className:n="",bodyClassName:l="",...s},r)=>/* @__PURE__ */e.createElement("div",{ref:r,className:`card ${t?"card-hoverable":""} ${n}`,...s},a));m.displayName="Card";const d=a(({className:a="",children:t,...n},l)=>/* @__PURE__ */e.createElement("div",{ref:l,className:`card-body ${a}`,...n},t));d.displayName="Card.Body";const u=a(({className:a="",children:t,...n},l)=>/* @__PURE__ */e.createElement("div",{ref:l,className:`card-header ${a}`,...n},t));u.displayName="Card.Header";const p=a(({className:a="",children:t,...n},l)=>/* @__PURE__ */e.createElement("div",{ref:l,className:`card-footer ${a}`,...n},t));p.displayName="Card.Footer",m.Body=d,m.Header=u,m.Footer=p;const v=({isOpen:a,onClose:n,title:r,children:c,footer:i,backdrop:m=!0,keyboard:d=!0,size:u,centered:p=!1,className:v="",...h})=>{const[N,b]=t(!1);if(s(null),l(()=>(b(!0),()=>b(!1)),[]),l(()=>(a?document.body.classList.add("modal-open"):document.body.classList.remove("modal-open"),()=>{document.body.classList.remove("modal-open")}),[a]),l(()=>{const e=e=>{d&&"Escape"===e.key&&a&&n()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[a,d,n]),!N)return null;const f=/* @__PURE__ */e.createElement(e.Fragment,null,a&&/* @__PURE__ */e.createElement("div",{className:"modal-backdrop fade show",onClick:m?n:void 0}),/* @__PURE__ */e.createElement("div",{className:"modal fade "+(a?"show":""),style:{display:a?"block":"none"},tabIndex:"-1",role:"dialog","aria-modal":"true","aria-hidden":!a,"aria-labelledby":r?"modal-title":void 0,...h},
|
|
3
|
+
/* @__PURE__ */e.createElement("div",{className:`modal-dialog ${u?`modal-${u}`:""} ${p?"modal-dialog-centered":""} ${v}`},/* @__PURE__ */e.createElement("div",{className:"modal-content"},/* @__PURE__ */e.createElement("div",{className:"modal-header"},r&&/* @__PURE__ */e.createElement("h5",{className:"modal-title",id:"modal-title"},r),/* @__PURE__ */e.createElement("button",{type:"button",className:"btn-close","aria-label":"Close",onClick:n})),/* @__PURE__ */e.createElement("div",{className:"modal-body"},c),i&&/* @__PURE__ */e.createElement("div",{className:"modal-footer"},i)))));return o(f,document.body)},h=a(({trigger:a,children:n,isOpen:r,onToggle:o,align:c="start",className:i="",...m},d)=>{const[u,p]=t(!1),v=s(null),h=void 0!==r?r:u;l(()=>{const e=e=>{v.current&&!v.current.contains(e.target)&&(void 0===r&&p(!1),o&&o(!1))};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]);const N=()=>{const e=!h;void 0===r&&p(e),o&&o(e)};/* @__PURE__ */
|
|
4
|
+
return e.createElement("div",{ref:v,className:`dropdown ${h?"show":""} ${i}`,onKeyDown:e=>{"Escape"===e.key&&h&&(N(),a.ref&&a.ref.current&&a.ref.current.focus())},...m},
|
|
5
|
+
/* @__PURE__ */e.createElement("div",{onClick:N,"aria-expanded":h,"aria-haspopup":"true",role:"button",tabIndex:0},a),h&&/* @__PURE__ */e.createElement("div",{className:`dropdown-menu show dropdown-menu-${c}`,role:"menu"},n))});h.displayName="Dropdown";const N=a(({children:a,onClick:t,className:n="",...l},s)=>/* @__PURE__ */e.createElement("button",{ref:s,className:`dropdown-item ${n}`,onClick:t,role:"menuitem",...l},a));N.displayName="Dropdown.Item";const b=()=>/* @__PURE__ */e.createElement("hr",{className:"dropdown-divider"});b.displayName="Dropdown.Divider",h.Item=N,h.Divider=b;const f=a(({children:a,content:n,placement:l="top",className:r="",...o},c)=>{const[i,m]=t(!1),d=s(null),u=`tooltip-${Math.random().toString(36).substr(2,9)}`;/* @__PURE__ */
|
|
6
|
+
return e.createElement("div",{ref:c,className:`tooltip-wrapper ${r}`,onMouseEnter:()=>m(!0),onMouseLeave:()=>m(!1),onFocus:()=>m(!0),onBlur:()=>m(!1),"aria-describedby":i?u:void 0,...o},a,i&&/* @__PURE__ */e.createElement("div",{id:u,ref:d,className:`tooltip bs-tooltip-${l} show`,role:"tooltip"},
|
|
7
|
+
/* @__PURE__ */e.createElement("div",{className:"tooltip-arrow"}),
|
|
8
|
+
/* @__PURE__ */e.createElement("div",{className:"tooltip-inner"},n)))});f.displayName="Tooltip";const E=a(({isOpen:a,defaultOpen:n=!1,children:l,className:s="",...r},o)=>{const[c,i]=t(n),m=void 0!==a?a:c,d=r.id||`collapse-${Math.random().toString(36).substr(2,9)}`;/* @__PURE__ */
|
|
9
|
+
return e.createElement("div",{ref:o,id:d,className:`collapse ${m?"show":""} ${s}`,...r},l)});E.displayName="Collapse";const g=a(({activeTab:a,defaultActiveTab:n=0,onTabChange:l,children:s,className:r="",...o},c)=>{const[i,m]=t(n),d=void 0!==a?a:i,u=e.Children.toArray(s);/* @__PURE__ */
|
|
10
|
+
return e.createElement("div",{ref:c,className:`tabs-container ${r}`,...o},/* @__PURE__ */e.createElement("ul",{className:"nav nav-tabs",role:"tablist"},u.map((t,n)=>{const s=d===n,r=`tab-${n}`,o=`pane-${n}`;/* @__PURE__ */
|
|
11
|
+
return e.createElement("li",{key:n,className:"nav-item",role:"presentation"},/* @__PURE__ */e.createElement("button",{className:"nav-link "+(s?"active":""),onClick:()=>(e=>{void 0===a&&m(e),l&&l(e)})(n),role:"tab","aria-selected":s,"aria-controls":o,id:r,tabIndex:s?0:-1},t.props.title))})),/* @__PURE__ */e.createElement("div",{className:"tab-content"},u.map((a,t)=>{const n=d===t,l=`tab-${t}`,s=`pane-${t}`;/* @__PURE__ */
|
|
12
|
+
return e.createElement("div",{key:t,className:"tab-pane "+(n?"active show":""),role:"tabpanel",id:s,"aria-labelledby":l,tabIndex:0,hidden:!n},n&&a.props.children)})))});g.displayName="Tabs";const y=({title:a,children:t})=>/* @__PURE__ */e.createElement(e.Fragment,null,t);y.displayName="Tabs.Pane",g.Pane=y;const $=r(null);let k=0;function w({position:a="bottom-right",expand:l=!1,richColors:s=!0,closeButton:r=!1,...c}){const[i,m]=t([]),d=n(e=>{const a=k++,t={id:a,...e,createdAt:Date.now()};return m(e=>[...e,t]),e.duration!==1/0&&setTimeout(()=>{u(a)},e.duration||4e3),a},[]),u=n(e=>{m(a=>a.filter(a=>a.id!==e))},[]);/* @__PURE__ */
|
|
13
|
+
return e.createElement($.Provider,{value:{addToast:d,removeToast:u}},c.children,o(
|
|
14
|
+
/* @__PURE__ */e.createElement("div",{className:`sonner-container ${{"top-left":"sonner-top-left","top-center":"sonner-top-center","top-right":"sonner-top-right","bottom-left":"sonner-bottom-left","bottom-center":"sonner-bottom-center","bottom-right":"sonner-bottom-right"}[a]}`},/* @__PURE__ */e.createElement("ol",{className:"sonner-list "+(l?"sonner-expanded":"")},i.map((a,t)=>/* @__PURE__ */e.createElement(C,{key:a.id,toast:a,index:t,onClose:()=>u(a.id),richColors:s,closeButton:r})))),document.body))}function C({toast:a,index:t,onClose:n,richColors:l,closeButton:s}){const r={success:/* @__PURE__ */e.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"currentColor"},/* @__PURE__ */e.createElement("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"})),error:/* @__PURE__ */e.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"currentColor"},/* @__PURE__ */e.createElement("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"})),warning:/* @__PURE__ */e.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"currentColor"},/* @__PURE__ */e.createElement("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"})),info:/* @__PURE__ */e.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"currentColor"},/* @__PURE__ */e.createElement("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"})),loading:/* @__PURE__ */e.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",className:"sonner-loading"},/* @__PURE__ */e.createElement("circle",{cx:"10",cy:"10",r:"8",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeDasharray:"50.265",strokeDashoffset:"25"}))},o=a.type?`sonner-${a.type}`:"",c=l&&a.type?`sonner-rich-${a.type}`:"";/* @__PURE__ */
|
|
15
|
+
return e.createElement("li",{className:`sonner-toast ${o} ${c}`,style:{"--index":t}},
|
|
16
|
+
/* @__PURE__ */e.createElement("div",{className:"sonner-toast-content"},a.type&&r[a.type]&&/* @__PURE__ */e.createElement("div",{className:"sonner-toast-icon"},r[a.type]),/* @__PURE__ */e.createElement("div",{className:"sonner-toast-body"},a.title&&/* @__PURE__ */e.createElement("div",{className:"sonner-toast-title"},a.title),a.description&&/* @__PURE__ */e.createElement("div",{className:"sonner-toast-description"},a.description),!a.title&&!a.description&&/* @__PURE__ */e.createElement("div",{className:"sonner-toast-description"},a.message)),(s||a.closeButton)&&/* @__PURE__ */e.createElement("button",{className:"sonner-toast-close",onClick:n,"aria-label":"Close"},
|
|
17
|
+
/* @__PURE__ */e.createElement("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none"},/* @__PURE__ */e.createElement("path",{d:"M13 1L1 13M1 1L13 13",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})))),a.action&&/* @__PURE__ */e.createElement("div",{className:"sonner-toast-action"},/* @__PURE__ */e.createElement("button",{className:"sonner-action-button",onClick:()=>{a.action.onClick?.(),n()}},a.action.label)))}const x=Object.assign((e,a={})=>{if("undefined"==typeof window)return;const t=new CustomEvent("sonner-toast",{detail:{message:e,...a}});window.dispatchEvent(t)},{success:(e,a={})=>{x(e,{...a,type:"success"})},error:(e,a={})=>{x(e,{...a,type:"error"})},warning:(e,a={})=>{x(e,{...a,type:"warning"})},info:(e,a={})=>{x(e,{...a,type:"info"})},loading:(e,a={})=>{x(e,{...a,type:"loading",duration:1/0})},promise:(e,a={})=>(x(a.loading||"Loading...",{type:"loading",duration:1/0}),e.then(e=>{const t="function"==typeof a.success?a.success(e):a.success||"Success";x(t,{type:"success"})}).catch(e=>{const t="function"==typeof a.error?a.error(e):a.error||"Error";x(t,{type:"error"})}),e)});"undefined"!=typeof window&&window.addEventListener("sonner-toast",e=>{const a=new CustomEvent("add-sonner-toast",{detail:e.detail});window.dispatchEvent(a)});const L=({children:a,className:t="",...n})=>/* @__PURE__ */e.createElement("ul",{className:`timeline ${t}`,...n},a);L.Item=({children:a,className:t="",active:n=!1,completed:l=!1,animated:s=!1,...r})=>/* @__PURE__ */e.createElement("li",{className:`timeline-item ${n?"active":""} ${l?"completed":""} ${s?"animated":""} ${t}`,...r},a),L.Date=({children:a,className:t="",...n})=>/* @__PURE__ */e.createElement("div",{className:`timeline-date ${t}`,...n},a),L.Title=({children:a,className:t="",...n})=>/* @__PURE__ */e.createElement("h5",{className:`timeline-title ${t}`,...n},a),L.Text=({children:a,className:t="",...n})=>/* @__PURE__ */e.createElement("p",{className:`timeline-text ${t}`,...n},a),L.Content=({children:a,className:t="",...n})=>/* @__PURE__ */e.createElement("div",{className:`timeline-content ${t}`,...n},a);const B=({fluid:a=!1,className:t="",children:n,...l})=>{const s=`${a?"container-fluid":"container"} ${t}`.trim();/* @__PURE__ */
|
|
18
|
+
return e.createElement("div",{className:s,...l},n)},M=({className:a="",children:t,...n})=>{const l=`row ${a}`.trim();/* @__PURE__ */
|
|
19
|
+
return e.createElement("div",{className:l,...n},t)},z=({xs:a,sm:t,md:n,lg:l,xl:s,className:r="",children:o,...c})=>{const i=[];a&&i.push("auto"===a?"col-auto":`col-${a}`),t&&i.push("auto"===t?"col-sm-auto":`col-sm-${t}`),n&&i.push("auto"===n?"col-md-auto":`col-md-${n}`),l&&i.push("auto"===l?"col-lg-auto":`col-lg-${l}`),s&&i.push("auto"===s?"col-xl-auto":`col-xl-${s}`),0===i.length&&i.push("col");const m=`${i.join(" ")} ${r}`.trim();/* @__PURE__ */
|
|
20
|
+
return e.createElement("div",{className:m,...c},o)},I=({align:a,transform:t,color:n,size:l,weight:s,as:r="p",className:o="",children:c,...i})=>{const m=[];a&&m.push(`text-${a}`),t&&m.push(`text-${t}`),n&&m.push(`text-${n}`),l&&m.push(`fs-${l}`),s&&m.push(`fw-${s}`);const d=`${m.join(" ")} ${o}`.trim();/* @__PURE__ */
|
|
21
|
+
return e.createElement(r,{className:d,...i},c)},D=({m:a,mt:t,mb:n,ml:l,mr:s,mx:r,my:o,p:c,pt:i,pb:m,pl:d,pr:u,px:p,py:v,d:h,flex:N,justify:b,align:f,gap:E,as:g="div",className:y="",children:$,...k})=>{const w=[];void 0!==a&&w.push(`m-${a}`),void 0!==t&&w.push(`mt-${t}`),void 0!==n&&w.push(`mb-${n}`),void 0!==l&&w.push(`ms-${l}`),void 0!==s&&w.push(`me-${s}`),void 0!==r&&w.push(`mx-${r}`),void 0!==o&&w.push(`my-${o}`),void 0!==c&&w.push(`p-${c}`),void 0!==i&&w.push(`pt-${i}`),void 0!==m&&w.push(`pb-${m}`),void 0!==d&&w.push(`ps-${d}`),void 0!==u&&w.push(`pe-${u}`),void 0!==p&&w.push(`px-${p}`),void 0!==v&&w.push(`py-${v}`),h&&w.push(`d-${h}`),N&&w.push(`flex-${N}`),b&&w.push(`justify-content-${b}`),f&&w.push(`align-items-${f}`),E&&w.push(`gap-${E}`);const C=`${w.join(" ")} ${y}`.trim();/* @__PURE__ */
|
|
22
|
+
return e.createElement(g,{className:C,...k},$)},T=a(({isOpen:a,onClose:t,title:n,children:s,placement:r="end",backdrop:c=!0,className:i="",...m},d)=>{if(l(()=>(a?document.body.classList.add("offcanvas-open"):document.body.classList.remove("offcanvas-open"),()=>{document.body.classList.remove("offcanvas-open")}),[a]),!a)return null;const u=/* @__PURE__ */e.createElement(e.Fragment,null,c&&/* @__PURE__ */e.createElement("div",{className:"offcanvas-backdrop fade show",onClick:t}),/* @__PURE__ */e.createElement("div",{ref:d,className:`offcanvas offcanvas-${r} show ${i}`,tabIndex:"-1",role:"dialog","aria-modal":"true","aria-labelledby":n?"offcanvas-label":void 0,...m},
|
|
23
|
+
/* @__PURE__ */e.createElement("div",{className:"offcanvas-header"},n&&/* @__PURE__ */e.createElement("h5",{className:"offcanvas-title",id:"offcanvas-label"},n),/* @__PURE__ */e.createElement("button",{type:"button",className:"btn-close","aria-label":"Close",onClick:t})),
|
|
24
|
+
/* @__PURE__ */e.createElement("div",{className:"offcanvas-body"},s)));return o(u,document.body)});T.displayName="Offcanvas";const j=a(({children:a,activeIndex:n,onSlide:s,controls:r=!0,indicators:o=!0,interval:c=!1,className:i="",...m},d)=>{const u=e.Children.toArray(a),[p,v]=t(0),h=void 0!==n?n:p;l(()=>{if(c){const e=setInterval(()=>{b()},c);return()=>clearInterval(e)}},[h,c]);const N=e=>{void 0===n&&v(e),s&&s(e)},b=()=>{const e=h===u.length-1?0:h+1;N(e)};/* @__PURE__ */
|
|
25
|
+
return e.createElement("div",{ref:d,className:`carousel slide ${i}`,...m},o&&/* @__PURE__ */e.createElement("div",{className:"carousel-indicators"},u.map((a,t)=>/* @__PURE__ */e.createElement("button",{key:t,type:"button",className:t===h?"active":"",onClick:()=>N(t),"aria-current":t===h?"true":"false","aria-label":`Slide ${t+1}`}))),
|
|
26
|
+
/* @__PURE__ */e.createElement("div",{className:"carousel-inner"},u.map((a,t)=>/* @__PURE__ */e.createElement("div",{key:t,className:"carousel-item "+(t===h?"active":"")},a))),r&&/* @__PURE__ */e.createElement(e.Fragment,null,/* @__PURE__ */e.createElement("button",{className:"carousel-control-prev",type:"button",onClick:()=>{const e=0===h?u.length-1:h-1;N(e)},"aria-label":"Previous slide"},
|
|
27
|
+
/* @__PURE__ */e.createElement("span",{className:"carousel-control-prev-icon","aria-hidden":"true"}),
|
|
28
|
+
/* @__PURE__ */e.createElement("span",{className:"visually-hidden"},"Previous")),/* @__PURE__ */e.createElement("button",{className:"carousel-control-next",type:"button",onClick:b,"aria-label":"Next slide"},
|
|
29
|
+
/* @__PURE__ */e.createElement("span",{className:"carousel-control-next-icon","aria-hidden":"true"}),
|
|
30
|
+
/* @__PURE__ */e.createElement("span",{className:"visually-hidden"},"Next"))))});j.displayName="Carousel";const S=({children:a})=>/* @__PURE__ */e.createElement(e.Fragment,null,a);S.displayName="Carousel.Item",j.Item=S;const A=a(({children:a,title:n,content:r,placement:o="top",trigger:c="click",className:i="",...m},d)=>{const[u,p]=t(!1),v=s(null);l(()=>{const e=e=>{v.current&&!v.current.contains(e.target)&&p(!1)};if("click"===c)return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[c]);const h=()=>{"click"===c&&p(!u)},N=`popover-${Math.random().toString(36).substr(2,9)}`;/* @__PURE__ */
|
|
31
|
+
return e.createElement("div",{ref:v,className:`popover-wrapper ${i}`,onClick:h,onMouseEnter:()=>{"hover"===c&&p(!0)},onMouseLeave:()=>{"hover"===c&&p(!1)},onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||h()},"aria-describedby":u?N:void 0,tabIndex:"0",role:"button",...m},a,u&&/* @__PURE__ */e.createElement("div",{id:N,className:`popover bs-popover-${o} show`,role:"tooltip"},
|
|
32
|
+
/* @__PURE__ */e.createElement("div",{className:"popover-arrow"}),n&&/* @__PURE__ */e.createElement("h3",{className:"popover-header"},n),
|
|
33
|
+
/* @__PURE__ */e.createElement("div",{className:"popover-body"},r)))});A.displayName="Popover";const F=a(({targets:a=[],onActiveChange:n,offset:s=0,children:r,className:o="",...c},i)=>{const[m,d]=t("");return l(()=>{const e=()=>{const e=window.scrollY+s;for(let t=a.length-1;t>=0;t--){const l=document.getElementById(a[t]);if(l){const{offsetTop:s}=l;if(e>=s){m!==a[t]&&(d(a[t]),n&&n(a[t]));break}}}};return window.addEventListener("scroll",e),e(),()=>window.removeEventListener("scroll",e)},[a,s,m,n]),/* @__PURE__ */e.createElement("nav",{ref:i,className:`scrollspy ${o}`,...c},e.Children.map(r,a=>e.isValidElement(a)?e.cloneElement(a,{activeId:m}):a))});F.displayName="Scrollspy";const O=a(({options:a=[],value:n,defaultValue:r,onChange:o,placeholder:c="Select...",searchable:i=!1,disabled:m=!1,className:d="",...u},p)=>{const[v,h]=t(!1),[N,b]=t(r),[f,E]=t(""),g=s(null),y=void 0!==n?n:N,$=a.find(e=>e.value===y);l(()=>{const e=e=>{g.current&&!g.current.contains(e.target)&&h(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]);const k=e=>{void 0===n&&b(e.value),o&&o(e.value),h(!1),E("")},w=i&&f?a.filter(e=>e.label.toLowerCase().includes(f.toLowerCase())):a;/* @__PURE__ */
|
|
34
|
+
return e.createElement("div",{ref:g,className:`select-container ${v?"open":""} ${m?"disabled":""} ${d}`,...u},
|
|
35
|
+
/* @__PURE__ */e.createElement("div",{className:"select-trigger",onClick:()=>!m&&h(!v)},
|
|
36
|
+
/* @__PURE__ */e.createElement("span",null,$?$.label:c),
|
|
37
|
+
/* @__PURE__ */e.createElement("span",{className:"select-arrow"},"▼")),v&&/* @__PURE__ */e.createElement("div",{className:"select-dropdown",role:"listbox",id:"select-dropdown"},i&&/* @__PURE__ */e.createElement("input",{type:"text",className:"select-search",placeholder:"Search...",value:f,onChange:e=>E(e.target.value),onClick:e=>e.stopPropagation(),role:"searchbox"}),
|
|
38
|
+
/* @__PURE__ */e.createElement("div",{className:"select-options"},w.map(a=>/* @__PURE__ */e.createElement("div",{key:a.value,className:"select-option "+(a.value===y?"selected":""),onClick:()=>k(a),role:"option","aria-selected":a.value===y,tabIndex:"0",onKeyDown:e=>{"Enter"===e.key&&k(a)}},a.label)),0===w.length&&/* @__PURE__ */e.createElement("div",{className:"select-option disabled",role:"option","aria-disabled":"true"},"No options found"))))});O.displayName="Select";const P=a(({onFileSelect:a,multiple:n=!1,accept:l,maxSize:r,className:o="",...c},i)=>{const[m,d]=t(!1),[u,p]=t([]),v=s(null),h=e=>{const t=Array.from(e).filter(e=>!(r&&e.size>r));p(t),a&&a(t)},N=()=>{v.current?.click()};/* @__PURE__ */
|
|
39
|
+
return e.createElement("div",{ref:i,className:`file-upload ${m?"dragging":""} ${o}`,onDragOver:e=>{e.preventDefault(),d(!0)},onDragLeave:()=>{d(!1)},onDrop:e=>{e.preventDefault(),d(!1),h(e.dataTransfer.files)},onClick:N,onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||N()},tabIndex:"0",role:"button","aria-label":"File upload dropzone",...c},
|
|
40
|
+
/* @__PURE__ */e.createElement("input",{ref:v,type:"file",multiple:n,accept:l,onChange:e=>{e.target.files&&h(e.target.files)},style:{display:"none"}}),
|
|
41
|
+
/* @__PURE__ */e.createElement("div",{className:"file-upload-content"},u.length>0?/* @__PURE__ */e.createElement("div",{className:"file-list"},u.map((a,t)=>/* @__PURE__ */e.createElement("div",{key:t,className:"file-item"},a.name," (",(a.size/1024).toFixed(2)," KB)"))):/* @__PURE__ */e.createElement("div",{className:"file-upload-placeholder"},/* @__PURE__ */e.createElement("p",null,"Drag and drop files here or click to browse"))))});P.displayName="FileUpload";const R=a(({min:a,max:n,step:l=1,value:s,defaultValue:r=0,onChange:o,className:c="",...i},m)=>{const[d,u]=t(r),p=void 0!==s?s:d,v=e=>{let t=e;void 0!==a&&(t=Math.max(a,t)),void 0!==n&&(t=Math.min(n,t)),void 0===s&&u(t),o&&o(t)};/* @__PURE__ */
|
|
42
|
+
return e.createElement("div",{className:`number-input ${c}`},/* @__PURE__ */e.createElement("button",{type:"button",className:"btn btn-outline-secondary",onClick:()=>v(p-l),disabled:void 0!==a&&p<=a},"-"),/* @__PURE__ */e.createElement("input",{ref:m,type:"number",className:"form-control",value:p,min:a,max:n,step:l,onChange:e=>v(parseFloat(e.target.value)||0),...i}),/* @__PURE__ */e.createElement("button",{type:"button",className:"btn btn-outline-secondary",onClick:()=>v(p+l),disabled:void 0!==n&&p>=n},"+"))});R.displayName="NumberInput";const V=a(({min:a=0,max:n=100,step:l=1,value:s,defaultValue:r,onChange:o,showValue:c=!1,className:i="",...m},d)=>{const[u,p]=t(r||a),v=void 0!==s?s:u;/* @__PURE__ */
|
|
43
|
+
return e.createElement("div",{className:`slider-container ${i}`},/* @__PURE__ */e.createElement("input",{ref:d,type:"range",className:"form-range",min:a,max:n,step:l,value:v,onChange:e=>{const a=parseFloat(e.target.value);void 0===s&&p(a),o&&o(a)},"aria-label":m["aria-label"]||"Range slider","aria-valuemin":a,"aria-valuemax":n,"aria-valuenow":v,...m}),c&&/* @__PURE__ */e.createElement("div",{className:"slider-value"},v))});V.displayName="Slider";const H=a(({checked:a,defaultChecked:t,onChange:n,disabled:l=!1,label:s,className:r="",...o},c)=>/* @__PURE__ */e.createElement("div",{className:`form-switch ${r}`},/* @__PURE__ */e.createElement("input",{ref:c,type:"checkbox",className:"form-check-input",role:"switch",checked:a,defaultChecked:t,onChange:n,disabled:l,...o}),s&&/* @__PURE__ */e.createElement("label",{className:"form-check-label"},s)));H.displayName="Switch";const K=a(({length:a=6,onComplete:n,onChange:l,type:r="numeric",className:o="",...c},i)=>{const[m,d]=t(Array(a).fill("")),u=s([]),p=e=>{e.preventDefault();const t=e.clipboardData.getData("text").slice(0,a).split("").concat(Array(a).fill("")).slice(0,a);d(t),l&&l(t.join("")),t.every(e=>""!==e)&&n&&n(t.join(""))};/* @__PURE__ */
|
|
44
|
+
return e.createElement("div",{ref:i,className:`input-otp ${o}`,...c},m.map((t,s)=>/* @__PURE__ */e.createElement("input",{key:s,ref:e=>u.current[s]=e,type:"text",className:"otp-input",value:t,onChange:e=>((e,t)=>{if(!("numeric"===r?/^\d*$/.test(t):/^[a-zA-Z0-9]*$/.test(t)))return;const s=[...m];s[e]=t.slice(-1),d(s),l&&l(s.join("")),t&&e<a-1&&u.current[e+1]?.focus(),s.every(e=>""!==e)&&n&&n(s.join(""))})(s,e.target.value),onKeyDown:e=>((e,t)=>{"Backspace"===t.key&&!m[e]&&e>0&&u.current[e-1]?.focus(),"ArrowLeft"===t.key&&e>0&&u.current[e-1]?.focus(),"ArrowRight"===t.key&&e<a-1&&u.current[e+1]?.focus()})(s,e),onPaste:0===s?p:void 0,maxLength:1})))});function U({id:a,label:t,checked:n,indeterminate:l=!1,disabled:s=!1,onChange:r,className:o="",...c}){const i=e.useRef(null);return e.useEffect(()=>{i.current&&(i.current.indeterminate=l)},[l]),/* @__PURE__ */e.createElement("div",{className:`form-check ${o}`},/* @__PURE__ */e.createElement("input",{ref:i,type:"checkbox",className:"form-check-input",id:a,checked:n,disabled:s,onChange:r,...c}),t&&/* @__PURE__ */e.createElement("label",{className:"form-check-label",htmlFor:a},t))}function W({id:a,name:t,label:n,value:l,checked:s,disabled:r=!1,onChange:o,className:c="",...i}){/* @__PURE__ */
|
|
45
|
+
return e.createElement("div",{className:`form-check ${c}`},/* @__PURE__ */e.createElement("input",{type:"radio",className:"form-check-input",id:a,name:t,value:l,checked:s,disabled:r,onChange:o,...i}),n&&/* @__PURE__ */e.createElement("label",{className:"form-check-label",htmlFor:a},n))}function Y({type:a="text",size:t,isValid:n,isInvalid:l,plaintext:s=!1,readOnly:r=!1,disabled:o=!1,className:c="",...i}){const m=[s?"form-control-plaintext":"form-control",t?`form-control-${t}`:"",n?"is-valid":"",l?"is-invalid":"",c].filter(Boolean).join(" ");/* @__PURE__ */
|
|
46
|
+
return e.createElement("input",{type:a,className:m,readOnly:r||s,disabled:o,...i})}function Z({rows:a=3,size:t,isValid:n,isInvalid:l,autoResize:s=!1,className:r="",...o}){const c=e.useRef(null),i=["form-control",t?`form-control-${t}`:"",n?"is-valid":"",l?"is-invalid":"",r].filter(Boolean).join(" ");return e.useEffect(()=>{if(s&&c.current){const e=()=>{const e=c.current;e&&(e.style.height="auto",e.style.height=`${e.scrollHeight}px`)};return e(),c.current.addEventListener("input",e),()=>{c.current?.removeEventListener("input",e)}}},[s]),/* @__PURE__ */e.createElement("textarea",{ref:c,rows:a,className:i,...o})}K.displayName="InputOTP";const q=a(({children:a,className:n="",alwaysOpen:l=!1,...s},r)=>{const[o,c]=t(/* @__PURE__ */new Set);/* @__PURE__ */
|
|
47
|
+
return e.createElement("div",{ref:r,className:`accordion ${n}`,...s},e.Children.map(a,(a,t)=>e.isValidElement(a)?e.cloneElement(a,{isOpen:o.has(t),onToggle:()=>(e=>{c(a=>{const t=new Set(l?a:[]);return a.has(e)?t.delete(e):t.add(e),t})})(t)}):a))});q.displayName="Accordion";const G=a(({title:a,children:t,isOpen:n,onToggle:l,className:s="",...r},o)=>{const c=`accordion-header-${r.id||Math.random().toString(36).substr(2,9)}`,i=`accordion-collapse-${r.id||Math.random().toString(36).substr(2,9)}`;/* @__PURE__ */
|
|
48
|
+
return e.createElement("div",{ref:o,className:`accordion-item ${s}`,...r},/* @__PURE__ */e.createElement("h2",{className:"accordion-header",id:c},/* @__PURE__ */e.createElement("button",{className:"accordion-button "+(n?"":"collapsed"),type:"button",onClick:l,"aria-expanded":n,"aria-controls":i},a)),/* @__PURE__ */e.createElement("div",{id:i,className:"accordion-collapse collapse "+(n?"show":""),"aria-labelledby":c},
|
|
49
|
+
/* @__PURE__ */e.createElement("div",{className:"accordion-body"},t)))});G.displayName="Accordion.Item",q.Item=G;const J=a(({children:a,variant:t="light",bg:n,expand:l="lg",className:s="",...r},o)=>{const c=n?`bg-${n}`:"",i=l?`navbar-expand-${l}`:"";/* @__PURE__ */
|
|
50
|
+
return e.createElement("nav",{ref:o,className:`navbar navbar-${t} ${c} ${i} ${s}`,...r},a)});J.displayName="Navbar";const Q=a(({children:a,href:t="#",className:n="",...l},s)=>/* @__PURE__ */e.createElement("a",{ref:s,className:`navbar-brand ${n}`,href:t,...l},a));Q.displayName="Navbar.Brand";const X=a(({onClick:a,className:t="",...n},l)=>/* @__PURE__ */e.createElement("button",{ref:l,className:`navbar-toggler ${t}`,type:"button",onClick:a,"aria-label":"Toggle navigation",...n},
|
|
51
|
+
/* @__PURE__ */e.createElement("span",{className:"navbar-toggler-icon"})));X.displayName="Navbar.Toggle";const _=a(({children:a,isOpen:t,className:n="",...l},s)=>/* @__PURE__ */e.createElement("div",{ref:s,className:`collapse navbar-collapse ${t?"show":""} ${n}`,...l},a));_.displayName="Navbar.Collapse";const ee=a(({children:a,className:t="",...n},l)=>/* @__PURE__ */e.createElement("ul",{ref:l,className:`navbar-nav ${t}`,...n},a));ee.displayName="Navbar.Nav",J.Brand=Q,J.Toggle=X,J.Collapse=_,J.Nav=ee;const ae=a(({currentPage:a,totalPages:t,onPageChange:n,maxVisible:l=5,size:s,className:r="",...o},c)=>{const i=s?`pagination-${s}`:"";/* @__PURE__ */
|
|
52
|
+
return e.createElement("nav",{ref:c,"aria-label":"Page navigation",...o},/* @__PURE__ */e.createElement("ul",{className:`pagination ${i} ${r}`},/* @__PURE__ */e.createElement("li",{className:"page-item "+(1===a?"disabled":"")},/* @__PURE__ */e.createElement("button",{className:"page-link",onClick:()=>n(a-1),disabled:1===a},"Previous")),(()=>{const e=[];let n=Math.max(1,a-Math.floor(l/2)),s=Math.min(t,n+l-1);s-n<l-1&&(n=Math.max(1,s-l+1));for(let a=n;a<=s;a++)e.push(a);return e})().map(t=>/* @__PURE__ */e.createElement("li",{key:t,className:"page-item "+(t===a?"active":"")},/* @__PURE__ */e.createElement("button",{className:"page-link",onClick:()=>n(t),"aria-current":t===a?"page":void 0},t))),/* @__PURE__ */e.createElement("li",{className:"page-item "+(a===t?"disabled":"")},/* @__PURE__ */e.createElement("button",{className:"page-link",onClick:()=>n(a+1),disabled:a===t},"Next"))))});ae.displayName="Pagination";const te=a(({size:a="md",variant:t="primary",className:n="",...l},s)=>/* @__PURE__ */e.createElement("div",{ref:s,className:`spinner spinner-${a} spinner-${t} ${n}`,role:"status",...l},
|
|
53
|
+
/* @__PURE__ */e.createElement("div",{className:"spinner-circle"}),
|
|
54
|
+
/* @__PURE__ */e.createElement("span",{className:"visually-hidden"},"Loading...")));function ne({title:a,value:t,description:n,descClass:l="",icon:s,iconBg:r,compact:o=!1,progress:c,target:i,change:m,className:d="",...u}){const p=["stat"];return o&&p.push("stat-compact"),d&&p.push(d),/* @__PURE__ */e.createElement("div",{className:p.join(" "),...u},s&&/* @__PURE__ */e.createElement("div",{className:"stat-icon",style:{backgroundColor:r}},s),/* @__PURE__ */e.createElement("div",{className:"stat-title"},a),/* @__PURE__ */e.createElement("div",{className:"stat-value"},t),n&&/* @__PURE__ */e.createElement("div",{className:`stat-desc ${l}`.trim()},n),o&&void 0!==m&&/* @__PURE__ */e.createElement("span",{className:"stat-badge "+(m>0?"success":"danger")},m>0?"↗":"↘"," ",Math.abs(m),"%"),void 0!==c&&/* @__PURE__ */e.createElement(e.Fragment,null,i&&/* @__PURE__ */e.createElement("div",{className:"stat-desc"},"Target: ",i),/* @__PURE__ */e.createElement("div",{className:"stat-progress"},/* @__PURE__ */e.createElement("div",{className:"stat-progress-bar",style:{width:`${c}%`}}))))}function le({stats:a,columns:t=4,className:n="",...l}){const s=2===t?"col-md-6":3===t?"col-md-4":"col-md-3";/* @__PURE__ */
|
|
55
|
+
return e.createElement("div",{className:`row g-3 ${n}`.trim(),...l},a.map((a,t)=>/* @__PURE__ */e.createElement("div",{key:t,className:s},/* @__PURE__ */e.createElement(ne,{...a}))))}function se({variant:a="primary",pill:t=!1,children:n,className:l="",...s}){const r=["badge",`bg-${a}`,t?"rounded-pill":"",l].filter(Boolean).join(" ");/* @__PURE__ */
|
|
56
|
+
return e.createElement("span",{className:r,...s},n)}function re({src:a,alt:t="Avatar",size:n="md",shape:l="circle",fallback:s,status:r,className:o="",...c}){const[i,m]=e.useState(!1),d=["avatar",`avatar-${n}`,`avatar-${l}`,r?`avatar-status-${r}`:"",o].filter(Boolean).join(" "),u=!a||i;/* @__PURE__ */
|
|
57
|
+
return e.createElement("div",{className:d,...c},u?/* @__PURE__ */e.createElement("span",{className:"avatar-fallback"},s||t?.charAt(0)?.toUpperCase()||"?"):/* @__PURE__ */e.createElement("img",{src:a,alt:t,onError:()=>m(!0),className:"avatar-img"}),r&&/* @__PURE__ */e.createElement("span",{className:"avatar-status"}))}function oe({items:a=[],separator:t="/",className:n="",...l}){/* @__PURE__ */
|
|
58
|
+
return e.createElement("nav",{"aria-label":"breadcrumb",className:n,...l},/* @__PURE__ */e.createElement("ol",{className:"breadcrumb"},a.map((t,n)=>/* @__PURE__ */e.createElement(oe.Item,{key:n,active:n===a.length-1,href:t.href},t.label))))}function ce({value:a=0,max:t=100,variant:n="primary",striped:l=!1,animated:s=!1,label:r,showValue:o=!1,className:c="",...i}){const m=Math.min(Math.max(a/t*100,0),100),d=["progress-bar",`bg-${n}`,l||s?"progress-bar-striped":"",s?"progress-bar-animated":""].filter(Boolean).join(" ");/* @__PURE__ */
|
|
59
|
+
return e.createElement("div",{className:`progress ${c}`,...i},/* @__PURE__ */e.createElement("div",{className:d,role:"progressbar",style:{width:`${m}%`},"aria-valuenow":a,"aria-valuemin":0,"aria-valuemax":t},r||o&&`${Math.round(m)}%`))}function ie({vertical:a=!1,size:t,children:n,className:l="",...s}){const r=[a?"btn-group-vertical":"btn-group",t?`btn-group-${t}`:"",l].filter(Boolean).join(" ");/* @__PURE__ */
|
|
60
|
+
return e.createElement("div",{className:r,role:"group",...s},n)}function me({flush:a=!1,numbered:t=!1,horizontal:n=!1,children:l,className:s="",...r}){const o=t?"ol":"ul",c=["list-group",a?"list-group-flush":"",t?"list-group-numbered":"",n?"list-group-horizontal":"",s].filter(Boolean).join(" ");/* @__PURE__ */
|
|
61
|
+
return e.createElement(o,{className:c,...r},l)}te.displayName="Spinner",oe.Item=function({children:a,active:t=!1,href:n,className:l="",...s}){const r=["breadcrumb-item",t?"active":"",l].filter(Boolean).join(" ");/* @__PURE__ */
|
|
62
|
+
return e.createElement("li",{className:r,"aria-current":t?"page":void 0,...s},t||!n?a:/* @__PURE__ */e.createElement("a",{href:n},a))},me.Item=function({active:a=!1,disabled:t=!1,variant:n,action:l=!1,href:s,children:r,className:o="",...c}){const i=s?"a":"li",m=["list-group-item",a?"active":"",t?"disabled":"",l||s?"list-group-item-action":"",n?`list-group-item-${n}`:"",o].filter(Boolean).join(" ");/* @__PURE__ */
|
|
63
|
+
return e.createElement(i,{className:m,href:s,"aria-current":a?"true":void 0,"aria-disabled":t?"true":void 0,...c},r)};const de="1.0.1";export{q as Accordion,i as Alert,re as Avatar,se as Badge,D as Box,oe as Breadcrumb,c as Button,ie as ButtonGroup,m as Card,j as Carousel,U as Checkbox,z as Col,E as Collapse,B as Container,h as Dropdown,P as FileUpload,Y as Input,K as InputOTP,me as ListGroup,v as Modal,J as Navbar,R as NumberInput,T as Offcanvas,ae as Pagination,A as Popover,ce as Progress,W as Radio,M as Row,F as Scrollspy,O as Select,V as Slider,te as Spinner,ne as Stat,le as StatGroup,H as Switch,g as Tabs,I as Text,Z as Textarea,L as Timeline,w as Toaster,f as Tooltip,x as toast,de as version};
|
|
64
|
+
//# sourceMappingURL=index.mjs.map
|